diff --git a/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.pbxproj b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.pbxproj new file mode 100644 index 0000000..cae31ed --- /dev/null +++ b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.pbxproj @@ -0,0 +1,1617 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 7CC003261D1216E3003E68DC /* ZeroTierSDK_iOS.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CC003251D1216E3003E68DC /* ZeroTierSDK_iOS.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7CC003501D12178D003E68DC /* SDK_Debug.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003421D12178D003E68DC /* SDK_Debug.c */; }; + 7CC003511D12178D003E68DC /* SDK_EthernetTap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003441D12178D003E68DC /* SDK_EthernetTap.cpp */; }; + 7CC003521D12178D003E68DC /* SDK_Intercept.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003461D12178D003E68DC /* SDK_Intercept.c */; }; + 7CC003531D12178D003E68DC /* SDK_Proxy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003481D12178D003E68DC /* SDK_Proxy.cpp */; }; + 7CC003541D12178D003E68DC /* SDK_RPC.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003491D12178D003E68DC /* SDK_RPC.c */; }; + 7CC003551D12178D003E68DC /* SDK_ServiceSetup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0034B1D12178D003E68DC /* SDK_ServiceSetup.cpp */; }; + 7CC003561D12178D003E68DC /* SDK_Sockets.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0034E1D12178D003E68DC /* SDK_Sockets.c */; }; + 7CC003591D1217A1003E68DC /* http_parser.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003571D1217A1003E68DC /* http_parser.c */; }; + 7CC0035C1D1217B2003E68DC /* lz4.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0035A1D1217B2003E68DC /* lz4.c */; }; + 7CC003651D1217C3003E68DC /* api_lib.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0035D1D1217C3003E68DC /* api_lib.c */; }; + 7CC003661D1217C3003E68DC /* api_msg.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0035E1D1217C3003E68DC /* api_msg.c */; }; + 7CC003671D1217C3003E68DC /* err.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0035F1D1217C3003E68DC /* err.c */; }; + 7CC003681D1217C3003E68DC /* netbuf.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003601D1217C3003E68DC /* netbuf.c */; }; + 7CC003691D1217C3003E68DC /* netdb.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003611D1217C3003E68DC /* netdb.c */; }; + 7CC0036A1D1217C3003E68DC /* netifapi.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003621D1217C3003E68DC /* netifapi.c */; }; + 7CC0036B1D1217C3003E68DC /* sockets.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003631D1217C3003E68DC /* sockets.c */; }; + 7CC0036C1D1217C3003E68DC /* tcpip.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003641D1217C3003E68DC /* tcpip.c */; }; + 7CC0037D1D1217D1003E68DC /* def.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0036D1D1217D1003E68DC /* def.c */; }; + 7CC0037E1D1217D1003E68DC /* dhcp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0036E1D1217D1003E68DC /* dhcp.c */; }; + 7CC0037F1D1217D1003E68DC /* dns.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0036F1D1217D1003E68DC /* dns.c */; }; + 7CC003801D1217D1003E68DC /* init.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003701D1217D1003E68DC /* init.c */; }; + 7CC003811D1217D1003E68DC /* mem.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003711D1217D1003E68DC /* mem.c */; }; + 7CC003821D1217D1003E68DC /* memp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003721D1217D1003E68DC /* memp.c */; }; + 7CC003831D1217D1003E68DC /* netif.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003731D1217D1003E68DC /* netif.c */; }; + 7CC003841D1217D1003E68DC /* pbuf.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003741D1217D1003E68DC /* pbuf.c */; }; + 7CC003851D1217D1003E68DC /* raw.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003751D1217D1003E68DC /* raw.c */; }; + 7CC003861D1217D1003E68DC /* stats.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003761D1217D1003E68DC /* stats.c */; }; + 7CC003871D1217D1003E68DC /* sys.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003771D1217D1003E68DC /* sys.c */; }; + 7CC003881D1217D1003E68DC /* tcp_in.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003781D1217D1003E68DC /* tcp_in.c */; }; + 7CC003891D1217D1003E68DC /* tcp_out.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003791D1217D1003E68DC /* tcp_out.c */; }; + 7CC0038A1D1217D1003E68DC /* tcp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0037A1D1217D1003E68DC /* tcp.c */; }; + 7CC0038B1D1217D1003E68DC /* timers.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0037B1D1217D1003E68DC /* timers.c */; }; + 7CC0038C1D1217D1003E68DC /* udp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0037C1D1217D1003E68DC /* udp.c */; }; + 7CC003951D1217DD003E68DC /* autoip.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0038D1D1217DD003E68DC /* autoip.c */; }; + 7CC003961D1217DD003E68DC /* icmp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0038E1D1217DD003E68DC /* icmp.c */; }; + 7CC003971D1217DD003E68DC /* igmp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0038F1D1217DD003E68DC /* igmp.c */; }; + 7CC003981D1217DD003E68DC /* inet_chksum.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003901D1217DD003E68DC /* inet_chksum.c */; }; + 7CC003991D1217DD003E68DC /* inet.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003911D1217DD003E68DC /* inet.c */; }; + 7CC0039A1D1217DD003E68DC /* ip_addr.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003921D1217DD003E68DC /* ip_addr.c */; }; + 7CC0039B1D1217DD003E68DC /* ip_frag.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003931D1217DD003E68DC /* ip_frag.c */; }; + 7CC0039C1D1217DD003E68DC /* ip.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003941D1217DD003E68DC /* ip.c */; }; + 7CC003A01D1217F2003E68DC /* etharp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0039D1D1217F2003E68DC /* etharp.c */; }; + 7CC003A11D1217F2003E68DC /* ethernetif.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0039E1D1217F2003E68DC /* ethernetif.c */; }; + 7CC003A21D1217F2003E68DC /* slipif.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0039F1D1217F2003E68DC /* slipif.c */; }; + 7CC003DB1D121833003E68DC /* Arp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003CC1D121833003E68DC /* Arp.cpp */; }; + 7CC003DC1D121833003E68DC /* BackgroundResolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003CE1D121833003E68DC /* BackgroundResolver.cpp */; }; + 7CC003DD1D121833003E68DC /* Http.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003D11D121833003E68DC /* Http.cpp */; }; + 7CC003DE1D121833003E68DC /* OSUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003D31D121833003E68DC /* OSUtils.cpp */; }; + 7CC003DF1D121833003E68DC /* PortMapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003D61D121833003E68DC /* PortMapper.cpp */; }; + 7CC003E01D121833003E68DC /* RoutingTable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003D81D121833003E68DC /* RoutingTable.cpp */; }; + 7CC0041F1D121840003E68DC /* C25519.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003E61D121840003E68DC /* C25519.cpp */; }; + 7CC004201D121840003E68DC /* CertificateOfMembership.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003E81D121840003E68DC /* CertificateOfMembership.cpp */; }; + 7CC004211D121840003E68DC /* Cluster.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003EA1D121840003E68DC /* Cluster.cpp */; }; + 7CC004221D121840003E68DC /* DeferredPackets.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003ED1D121840003E68DC /* DeferredPackets.cpp */; }; + 7CC004231D121840003E68DC /* Dictionary.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003EF1D121840003E68DC /* Dictionary.cpp */; }; + 7CC004241D121840003E68DC /* Identity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003F21D121840003E68DC /* Identity.cpp */; }; + 7CC004251D121840003E68DC /* IncomingPacket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003F41D121840003E68DC /* IncomingPacket.cpp */; }; + 7CC004261D121840003E68DC /* InetAddress.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003F61D121840003E68DC /* InetAddress.cpp */; }; + 7CC004271D121840003E68DC /* Multicaster.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003F91D121840003E68DC /* Multicaster.cpp */; }; + 7CC004281D121840003E68DC /* Network.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003FD1D121840003E68DC /* Network.cpp */; }; + 7CC004291D121840003E68DC /* NetworkConfig.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003FF1D121840003E68DC /* NetworkConfig.cpp */; }; + 7CC0042A1D121840003E68DC /* Node.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004031D121840003E68DC /* Node.cpp */; }; + 7CC0042B1D121840003E68DC /* OutboundMulticast.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004061D121840003E68DC /* OutboundMulticast.cpp */; }; + 7CC0042C1D121840003E68DC /* Packet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004081D121840003E68DC /* Packet.cpp */; }; + 7CC0042D1D121840003E68DC /* Path.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0040A1D121840003E68DC /* Path.cpp */; }; + 7CC0042E1D121840003E68DC /* Peer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0040C1D121840003E68DC /* Peer.cpp */; }; + 7CC0042F1D121840003E68DC /* Poly1305.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0040E1D121840003E68DC /* Poly1305.cpp */; }; + 7CC004301D121840003E68DC /* Salsa20.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004111D121840003E68DC /* Salsa20.cpp */; }; + 7CC004311D121840003E68DC /* SelfAwareness.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004131D121840003E68DC /* SelfAwareness.cpp */; }; + 7CC004321D121840003E68DC /* SHA512.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004151D121840003E68DC /* SHA512.cpp */; }; + 7CC004331D121840003E68DC /* Switch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004181D121840003E68DC /* Switch.cpp */; }; + 7CC004341D121840003E68DC /* Topology.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0041A1D121840003E68DC /* Topology.cpp */; }; + 7CC004351D121840003E68DC /* Utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0041C1D121840003E68DC /* Utils.cpp */; }; + 7CC0043A1D12184F003E68DC /* ControlPlane.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004361D12184F003E68DC /* ControlPlane.cpp */; }; + 7CC0043B1D12184F003E68DC /* OneService.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004381D12184F003E68DC /* OneService.cpp */; }; + 7CC0043C1D1316BF003E68DC /* SDK_Debug.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003421D12178D003E68DC /* SDK_Debug.c */; }; + 7CC0043D1D1316BF003E68DC /* SDK_EthernetTap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003441D12178D003E68DC /* SDK_EthernetTap.cpp */; }; + 7CC0043E1D1316BF003E68DC /* SDK_Intercept.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003461D12178D003E68DC /* SDK_Intercept.c */; }; + 7CC0043F1D1316BF003E68DC /* SDK_Proxy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003481D12178D003E68DC /* SDK_Proxy.cpp */; }; + 7CC004401D1316BF003E68DC /* SDK_RPC.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003491D12178D003E68DC /* SDK_RPC.c */; }; + 7CC004411D1316BF003E68DC /* SDK_ServiceSetup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0034B1D12178D003E68DC /* SDK_ServiceSetup.cpp */; }; + 7CC004421D1316BF003E68DC /* SDK_Sockets.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0034E1D12178D003E68DC /* SDK_Sockets.c */; }; + 7CC004431D1316F5003E68DC /* ControlPlane.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004361D12184F003E68DC /* ControlPlane.cpp */; }; + 7CC004441D1316F5003E68DC /* OneService.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004381D12184F003E68DC /* OneService.cpp */; }; + 7CC004451D1316F5003E68DC /* C25519.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003E61D121840003E68DC /* C25519.cpp */; }; + 7CC004461D1316F5003E68DC /* CertificateOfMembership.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003E81D121840003E68DC /* CertificateOfMembership.cpp */; }; + 7CC004471D1316F5003E68DC /* Cluster.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003EA1D121840003E68DC /* Cluster.cpp */; }; + 7CC004481D1316F5003E68DC /* DeferredPackets.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003ED1D121840003E68DC /* DeferredPackets.cpp */; }; + 7CC004491D1316F5003E68DC /* Dictionary.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003EF1D121840003E68DC /* Dictionary.cpp */; }; + 7CC0044A1D1316F5003E68DC /* Identity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003F21D121840003E68DC /* Identity.cpp */; }; + 7CC0044B1D1316F5003E68DC /* IncomingPacket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003F41D121840003E68DC /* IncomingPacket.cpp */; }; + 7CC0044C1D1316F5003E68DC /* InetAddress.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003F61D121840003E68DC /* InetAddress.cpp */; }; + 7CC0044D1D1316F5003E68DC /* Multicaster.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003F91D121840003E68DC /* Multicaster.cpp */; }; + 7CC0044E1D1316F5003E68DC /* Network.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003FD1D121840003E68DC /* Network.cpp */; }; + 7CC0044F1D1316F5003E68DC /* NetworkConfig.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003FF1D121840003E68DC /* NetworkConfig.cpp */; }; + 7CC004501D1316F5003E68DC /* Node.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004031D121840003E68DC /* Node.cpp */; }; + 7CC004511D1316F5003E68DC /* OutboundMulticast.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004061D121840003E68DC /* OutboundMulticast.cpp */; }; + 7CC004521D1316F5003E68DC /* Packet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004081D121840003E68DC /* Packet.cpp */; }; + 7CC004531D1316F5003E68DC /* Path.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0040A1D121840003E68DC /* Path.cpp */; }; + 7CC004541D1316F5003E68DC /* Peer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0040C1D121840003E68DC /* Peer.cpp */; }; + 7CC004551D1316F5003E68DC /* Poly1305.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0040E1D121840003E68DC /* Poly1305.cpp */; }; + 7CC004561D1316F5003E68DC /* Salsa20.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004111D121840003E68DC /* Salsa20.cpp */; }; + 7CC004571D1316F5003E68DC /* SelfAwareness.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004131D121840003E68DC /* SelfAwareness.cpp */; }; + 7CC004581D1316F5003E68DC /* SHA512.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004151D121840003E68DC /* SHA512.cpp */; }; + 7CC004591D1316F5003E68DC /* Switch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004181D121840003E68DC /* Switch.cpp */; }; + 7CC0045A1D1316F5003E68DC /* Topology.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0041A1D121840003E68DC /* Topology.cpp */; }; + 7CC0045B1D1316F5003E68DC /* Utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0041C1D121840003E68DC /* Utils.cpp */; }; + 7CC0045C1D1316F5003E68DC /* Arp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003CC1D121833003E68DC /* Arp.cpp */; }; + 7CC0045D1D1316F5003E68DC /* BackgroundResolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003CE1D121833003E68DC /* BackgroundResolver.cpp */; }; + 7CC0045E1D1316F5003E68DC /* Http.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003D11D121833003E68DC /* Http.cpp */; }; + 7CC0045F1D1316F5003E68DC /* OSUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003D31D121833003E68DC /* OSUtils.cpp */; }; + 7CC004601D1316F5003E68DC /* PortMapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003D61D121833003E68DC /* PortMapper.cpp */; }; + 7CC004611D1316F5003E68DC /* RoutingTable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003D81D121833003E68DC /* RoutingTable.cpp */; }; + 7CC004621D131704003E68DC /* etharp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0039D1D1217F2003E68DC /* etharp.c */; }; + 7CC004631D131704003E68DC /* ethernetif.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0039E1D1217F2003E68DC /* ethernetif.c */; }; + 7CC004641D131704003E68DC /* slipif.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0039F1D1217F2003E68DC /* slipif.c */; }; + 7CC004651D131704003E68DC /* autoip.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0038D1D1217DD003E68DC /* autoip.c */; }; + 7CC004661D131704003E68DC /* icmp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0038E1D1217DD003E68DC /* icmp.c */; }; + 7CC004671D131704003E68DC /* igmp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0038F1D1217DD003E68DC /* igmp.c */; }; + 7CC004681D131704003E68DC /* inet_chksum.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003901D1217DD003E68DC /* inet_chksum.c */; }; + 7CC004691D131704003E68DC /* inet.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003911D1217DD003E68DC /* inet.c */; }; + 7CC0046A1D131704003E68DC /* ip_addr.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003921D1217DD003E68DC /* ip_addr.c */; }; + 7CC0046B1D131704003E68DC /* ip_frag.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003931D1217DD003E68DC /* ip_frag.c */; }; + 7CC0046C1D131704003E68DC /* ip.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003941D1217DD003E68DC /* ip.c */; }; + 7CC0046D1D131704003E68DC /* def.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0036D1D1217D1003E68DC /* def.c */; }; + 7CC0046E1D131704003E68DC /* dhcp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0036E1D1217D1003E68DC /* dhcp.c */; }; + 7CC0046F1D131704003E68DC /* dns.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0036F1D1217D1003E68DC /* dns.c */; }; + 7CC004701D131704003E68DC /* init.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003701D1217D1003E68DC /* init.c */; }; + 7CC004711D131704003E68DC /* mem.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003711D1217D1003E68DC /* mem.c */; }; + 7CC004721D131704003E68DC /* memp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003721D1217D1003E68DC /* memp.c */; }; + 7CC004731D131704003E68DC /* netif.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003731D1217D1003E68DC /* netif.c */; }; + 7CC004741D131704003E68DC /* pbuf.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003741D1217D1003E68DC /* pbuf.c */; }; + 7CC004751D131704003E68DC /* raw.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003751D1217D1003E68DC /* raw.c */; }; + 7CC004761D131704003E68DC /* stats.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003761D1217D1003E68DC /* stats.c */; }; + 7CC004771D131704003E68DC /* sys.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003771D1217D1003E68DC /* sys.c */; }; + 7CC004781D131704003E68DC /* tcp_in.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003781D1217D1003E68DC /* tcp_in.c */; }; + 7CC004791D131704003E68DC /* tcp_out.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003791D1217D1003E68DC /* tcp_out.c */; }; + 7CC0047A1D131704003E68DC /* tcp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0037A1D1217D1003E68DC /* tcp.c */; }; + 7CC0047B1D131704003E68DC /* timers.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0037B1D1217D1003E68DC /* timers.c */; }; + 7CC0047C1D131704003E68DC /* udp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0037C1D1217D1003E68DC /* udp.c */; }; + 7CC0047D1D131704003E68DC /* api_lib.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0035D1D1217C3003E68DC /* api_lib.c */; }; + 7CC0047E1D131704003E68DC /* api_msg.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0035E1D1217C3003E68DC /* api_msg.c */; }; + 7CC0047F1D131704003E68DC /* err.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0035F1D1217C3003E68DC /* err.c */; }; + 7CC004801D131704003E68DC /* netbuf.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003601D1217C3003E68DC /* netbuf.c */; }; + 7CC004811D131704003E68DC /* netdb.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003611D1217C3003E68DC /* netdb.c */; }; + 7CC004821D131704003E68DC /* netifapi.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003621D1217C3003E68DC /* netifapi.c */; }; + 7CC004831D131704003E68DC /* sockets.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003631D1217C3003E68DC /* sockets.c */; }; + 7CC004841D131704003E68DC /* tcpip.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003641D1217C3003E68DC /* tcpip.c */; }; + 7CC004851D1318DA003E68DC /* lz4.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0035A1D1217B2003E68DC /* lz4.c */; }; + 7CC004861D1318DA003E68DC /* http_parser.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003571D1217A1003E68DC /* http_parser.c */; }; + 7CC004871D131E21003E68DC /* SDK_Debug.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003421D12178D003E68DC /* SDK_Debug.c */; }; + 7CC004881D131E21003E68DC /* SDK_EthernetTap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003441D12178D003E68DC /* SDK_EthernetTap.cpp */; }; + 7CC004891D131E21003E68DC /* SDK_Intercept.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003461D12178D003E68DC /* SDK_Intercept.c */; }; + 7CC0048A1D131E21003E68DC /* SDK_Proxy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003481D12178D003E68DC /* SDK_Proxy.cpp */; }; + 7CC0048B1D131E21003E68DC /* SDK_RPC.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003491D12178D003E68DC /* SDK_RPC.c */; }; + 7CC0048C1D131E21003E68DC /* SDK_ServiceSetup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0034B1D12178D003E68DC /* SDK_ServiceSetup.cpp */; }; + 7CC0048D1D131E21003E68DC /* SDK_Sockets.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0034E1D12178D003E68DC /* SDK_Sockets.c */; }; + 7CC0048E1D131E21003E68DC /* ControlPlane.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004361D12184F003E68DC /* ControlPlane.cpp */; }; + 7CC0048F1D131E21003E68DC /* OneService.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004381D12184F003E68DC /* OneService.cpp */; }; + 7CC004901D131E21003E68DC /* C25519.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003E61D121840003E68DC /* C25519.cpp */; }; + 7CC004911D131E21003E68DC /* CertificateOfMembership.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003E81D121840003E68DC /* CertificateOfMembership.cpp */; }; + 7CC004921D131E21003E68DC /* Cluster.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003EA1D121840003E68DC /* Cluster.cpp */; }; + 7CC004931D131E21003E68DC /* DeferredPackets.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003ED1D121840003E68DC /* DeferredPackets.cpp */; }; + 7CC004941D131E21003E68DC /* Dictionary.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003EF1D121840003E68DC /* Dictionary.cpp */; }; + 7CC004951D131E21003E68DC /* Identity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003F21D121840003E68DC /* Identity.cpp */; }; + 7CC004961D131E21003E68DC /* IncomingPacket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003F41D121840003E68DC /* IncomingPacket.cpp */; }; + 7CC004971D131E21003E68DC /* InetAddress.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003F61D121840003E68DC /* InetAddress.cpp */; }; + 7CC004981D131E21003E68DC /* Multicaster.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003F91D121840003E68DC /* Multicaster.cpp */; }; + 7CC004991D131E21003E68DC /* Network.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003FD1D121840003E68DC /* Network.cpp */; }; + 7CC0049A1D131E21003E68DC /* NetworkConfig.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003FF1D121840003E68DC /* NetworkConfig.cpp */; }; + 7CC0049B1D131E21003E68DC /* Node.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004031D121840003E68DC /* Node.cpp */; }; + 7CC0049C1D131E21003E68DC /* OutboundMulticast.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004061D121840003E68DC /* OutboundMulticast.cpp */; }; + 7CC0049D1D131E21003E68DC /* Packet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004081D121840003E68DC /* Packet.cpp */; }; + 7CC0049E1D131E21003E68DC /* Path.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0040A1D121840003E68DC /* Path.cpp */; }; + 7CC0049F1D131E21003E68DC /* Peer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0040C1D121840003E68DC /* Peer.cpp */; }; + 7CC004A01D131E21003E68DC /* Poly1305.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0040E1D121840003E68DC /* Poly1305.cpp */; }; + 7CC004A11D131E21003E68DC /* Salsa20.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004111D121840003E68DC /* Salsa20.cpp */; }; + 7CC004A21D131E21003E68DC /* SelfAwareness.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004131D121840003E68DC /* SelfAwareness.cpp */; }; + 7CC004A31D131E21003E68DC /* SHA512.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004151D121840003E68DC /* SHA512.cpp */; }; + 7CC004A41D131E21003E68DC /* Switch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004181D121840003E68DC /* Switch.cpp */; }; + 7CC004A51D131E21003E68DC /* Topology.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0041A1D121840003E68DC /* Topology.cpp */; }; + 7CC004A61D131E21003E68DC /* Utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0041C1D121840003E68DC /* Utils.cpp */; }; + 7CC004A71D131E21003E68DC /* Arp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003CC1D121833003E68DC /* Arp.cpp */; }; + 7CC004A81D131E21003E68DC /* BackgroundResolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003CE1D121833003E68DC /* BackgroundResolver.cpp */; }; + 7CC004A91D131E21003E68DC /* Http.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003D11D121833003E68DC /* Http.cpp */; }; + 7CC004AA1D131E21003E68DC /* OSUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003D31D121833003E68DC /* OSUtils.cpp */; }; + 7CC004AB1D131E21003E68DC /* PortMapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003D61D121833003E68DC /* PortMapper.cpp */; }; + 7CC004AC1D131E21003E68DC /* RoutingTable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003D81D121833003E68DC /* RoutingTable.cpp */; }; + 7CC004AD1D131E2D003E68DC /* etharp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0039D1D1217F2003E68DC /* etharp.c */; }; + 7CC004AE1D131E2D003E68DC /* ethernetif.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0039E1D1217F2003E68DC /* ethernetif.c */; }; + 7CC004AF1D131E2D003E68DC /* slipif.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0039F1D1217F2003E68DC /* slipif.c */; }; + 7CC004B01D131E2D003E68DC /* autoip.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0038D1D1217DD003E68DC /* autoip.c */; }; + 7CC004B11D131E2D003E68DC /* icmp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0038E1D1217DD003E68DC /* icmp.c */; }; + 7CC004B21D131E2D003E68DC /* igmp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0038F1D1217DD003E68DC /* igmp.c */; }; + 7CC004B31D131E2D003E68DC /* inet_chksum.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003901D1217DD003E68DC /* inet_chksum.c */; }; + 7CC004B41D131E2D003E68DC /* inet.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003911D1217DD003E68DC /* inet.c */; }; + 7CC004B61D131E2D003E68DC /* ip_frag.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003931D1217DD003E68DC /* ip_frag.c */; }; + 7CC004B71D131E2D003E68DC /* ip.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003941D1217DD003E68DC /* ip.c */; }; + 7CC004B81D131E2D003E68DC /* def.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0036D1D1217D1003E68DC /* def.c */; }; + 7CC004B91D131E2D003E68DC /* dhcp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0036E1D1217D1003E68DC /* dhcp.c */; }; + 7CC004BA1D131E2D003E68DC /* dns.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0036F1D1217D1003E68DC /* dns.c */; }; + 7CC004BB1D131E2D003E68DC /* init.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003701D1217D1003E68DC /* init.c */; }; + 7CC004BC1D131E2D003E68DC /* mem.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003711D1217D1003E68DC /* mem.c */; }; + 7CC004BD1D131E2D003E68DC /* memp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003721D1217D1003E68DC /* memp.c */; }; + 7CC004BE1D131E2D003E68DC /* netif.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003731D1217D1003E68DC /* netif.c */; }; + 7CC004BF1D131E2D003E68DC /* pbuf.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003741D1217D1003E68DC /* pbuf.c */; }; + 7CC004C01D131E2D003E68DC /* raw.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003751D1217D1003E68DC /* raw.c */; }; + 7CC004C11D131E2D003E68DC /* stats.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003761D1217D1003E68DC /* stats.c */; }; + 7CC004C21D131E2D003E68DC /* sys.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003771D1217D1003E68DC /* sys.c */; }; + 7CC004C31D131E2D003E68DC /* tcp_in.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003781D1217D1003E68DC /* tcp_in.c */; }; + 7CC004C41D131E2D003E68DC /* tcp_out.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003791D1217D1003E68DC /* tcp_out.c */; }; + 7CC004C51D131E2D003E68DC /* tcp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0037A1D1217D1003E68DC /* tcp.c */; }; + 7CC004C61D131E2D003E68DC /* timers.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0037B1D1217D1003E68DC /* timers.c */; }; + 7CC004C71D131E2D003E68DC /* udp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0037C1D1217D1003E68DC /* udp.c */; }; + 7CC004C81D131E2D003E68DC /* api_lib.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0035D1D1217C3003E68DC /* api_lib.c */; }; + 7CC004C91D131E2D003E68DC /* api_msg.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0035E1D1217C3003E68DC /* api_msg.c */; }; + 7CC004CA1D131E2D003E68DC /* err.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0035F1D1217C3003E68DC /* err.c */; }; + 7CC004CB1D131E2D003E68DC /* netbuf.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003601D1217C3003E68DC /* netbuf.c */; }; + 7CC004CC1D131E2D003E68DC /* netdb.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003611D1217C3003E68DC /* netdb.c */; }; + 7CC004CD1D131E2D003E68DC /* netifapi.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003621D1217C3003E68DC /* netifapi.c */; }; + 7CC004CE1D131E2D003E68DC /* sockets.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003631D1217C3003E68DC /* sockets.c */; }; + 7CC004CF1D131E2D003E68DC /* tcpip.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003641D1217C3003E68DC /* tcpip.c */; }; + 7CC004D01D131E37003E68DC /* lz4.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0035A1D1217B2003E68DC /* lz4.c */; }; + 7CC004D11D131E37003E68DC /* http_parser.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003571D1217A1003E68DC /* http_parser.c */; }; + 7CC004D21D131F76003E68DC /* ip_addr.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003921D1217DD003E68DC /* ip_addr.c */; }; + 7CC004D71D13247A003E68DC /* SDK_Debug.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003421D12178D003E68DC /* SDK_Debug.c */; }; + 7CC004D81D13247A003E68DC /* SDK_EthernetTap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003441D12178D003E68DC /* SDK_EthernetTap.cpp */; }; + 7CC004D91D13247A003E68DC /* SDK_Intercept.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003461D12178D003E68DC /* SDK_Intercept.c */; }; + 7CC004DA1D13247A003E68DC /* SDK_Proxy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003481D12178D003E68DC /* SDK_Proxy.cpp */; }; + 7CC004DB1D13247A003E68DC /* SDK_RPC.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003491D12178D003E68DC /* SDK_RPC.c */; }; + 7CC004DC1D13247A003E68DC /* SDK_ServiceSetup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0034B1D12178D003E68DC /* SDK_ServiceSetup.cpp */; }; + 7CC004DD1D13247A003E68DC /* SDK_Sockets.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0034E1D12178D003E68DC /* SDK_Sockets.c */; }; + 7CC004DE1D1324A2003E68DC /* ControlPlane.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004361D12184F003E68DC /* ControlPlane.cpp */; }; + 7CC004DF1D1324A2003E68DC /* OneService.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004381D12184F003E68DC /* OneService.cpp */; }; + 7CC004E01D1324A2003E68DC /* C25519.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003E61D121840003E68DC /* C25519.cpp */; }; + 7CC004E11D1324A2003E68DC /* CertificateOfMembership.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003E81D121840003E68DC /* CertificateOfMembership.cpp */; }; + 7CC004E21D1324A2003E68DC /* Cluster.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003EA1D121840003E68DC /* Cluster.cpp */; }; + 7CC004E31D1324A2003E68DC /* DeferredPackets.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003ED1D121840003E68DC /* DeferredPackets.cpp */; }; + 7CC004E41D1324A2003E68DC /* Dictionary.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003EF1D121840003E68DC /* Dictionary.cpp */; }; + 7CC004E51D1324A2003E68DC /* Identity.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003F21D121840003E68DC /* Identity.cpp */; }; + 7CC004E61D1324A2003E68DC /* IncomingPacket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003F41D121840003E68DC /* IncomingPacket.cpp */; }; + 7CC004E71D1324A2003E68DC /* InetAddress.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003F61D121840003E68DC /* InetAddress.cpp */; }; + 7CC004E81D1324A2003E68DC /* Multicaster.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003F91D121840003E68DC /* Multicaster.cpp */; }; + 7CC004E91D1324A2003E68DC /* Network.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003FD1D121840003E68DC /* Network.cpp */; }; + 7CC004EA1D1324A2003E68DC /* NetworkConfig.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003FF1D121840003E68DC /* NetworkConfig.cpp */; }; + 7CC004EB1D1324A2003E68DC /* Node.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004031D121840003E68DC /* Node.cpp */; }; + 7CC004EC1D1324A2003E68DC /* OutboundMulticast.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004061D121840003E68DC /* OutboundMulticast.cpp */; }; + 7CC004ED1D1324A2003E68DC /* Packet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004081D121840003E68DC /* Packet.cpp */; }; + 7CC004EE1D1324A2003E68DC /* Path.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0040A1D121840003E68DC /* Path.cpp */; }; + 7CC004EF1D1324A2003E68DC /* Peer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0040C1D121840003E68DC /* Peer.cpp */; }; + 7CC004F01D1324A2003E68DC /* Poly1305.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0040E1D121840003E68DC /* Poly1305.cpp */; }; + 7CC004F11D1324A2003E68DC /* Salsa20.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004111D121840003E68DC /* Salsa20.cpp */; }; + 7CC004F21D1324A2003E68DC /* SelfAwareness.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004131D121840003E68DC /* SelfAwareness.cpp */; }; + 7CC004F31D1324A2003E68DC /* SHA512.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004151D121840003E68DC /* SHA512.cpp */; }; + 7CC004F41D1324A2003E68DC /* Switch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC004181D121840003E68DC /* Switch.cpp */; }; + 7CC004F51D1324A2003E68DC /* Topology.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0041A1D121840003E68DC /* Topology.cpp */; }; + 7CC004F61D1324A2003E68DC /* Utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0041C1D121840003E68DC /* Utils.cpp */; }; + 7CC004F71D1324A2003E68DC /* Arp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003CC1D121833003E68DC /* Arp.cpp */; }; + 7CC004F81D1324A2003E68DC /* BackgroundResolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003CE1D121833003E68DC /* BackgroundResolver.cpp */; }; + 7CC004F91D1324A2003E68DC /* Http.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003D11D121833003E68DC /* Http.cpp */; }; + 7CC004FA1D1324A2003E68DC /* OSUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003D31D121833003E68DC /* OSUtils.cpp */; }; + 7CC004FB1D1324A2003E68DC /* PortMapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003D61D121833003E68DC /* PortMapper.cpp */; }; + 7CC004FC1D1324A2003E68DC /* RoutingTable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003D81D121833003E68DC /* RoutingTable.cpp */; }; + 7CC004FD1D1324AB003E68DC /* etharp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0039D1D1217F2003E68DC /* etharp.c */; }; + 7CC004FE1D1324AB003E68DC /* ethernetif.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0039E1D1217F2003E68DC /* ethernetif.c */; }; + 7CC004FF1D1324AB003E68DC /* slipif.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0039F1D1217F2003E68DC /* slipif.c */; }; + 7CC005001D1324AB003E68DC /* autoip.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0038D1D1217DD003E68DC /* autoip.c */; }; + 7CC005011D1324AB003E68DC /* icmp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0038E1D1217DD003E68DC /* icmp.c */; }; + 7CC005021D1324AB003E68DC /* igmp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0038F1D1217DD003E68DC /* igmp.c */; }; + 7CC005031D1324AB003E68DC /* inet_chksum.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003901D1217DD003E68DC /* inet_chksum.c */; }; + 7CC005041D1324AB003E68DC /* inet.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003911D1217DD003E68DC /* inet.c */; }; + 7CC005051D1324AB003E68DC /* ip_addr.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003921D1217DD003E68DC /* ip_addr.c */; }; + 7CC005061D1324AB003E68DC /* ip_frag.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003931D1217DD003E68DC /* ip_frag.c */; }; + 7CC005071D1324AB003E68DC /* ip.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003941D1217DD003E68DC /* ip.c */; }; + 7CC005081D1324AB003E68DC /* def.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0036D1D1217D1003E68DC /* def.c */; }; + 7CC005091D1324AB003E68DC /* dhcp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0036E1D1217D1003E68DC /* dhcp.c */; }; + 7CC0050A1D1324AB003E68DC /* dns.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0036F1D1217D1003E68DC /* dns.c */; }; + 7CC0050B1D1324AB003E68DC /* init.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003701D1217D1003E68DC /* init.c */; }; + 7CC0050C1D1324AB003E68DC /* mem.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003711D1217D1003E68DC /* mem.c */; }; + 7CC0050D1D1324AB003E68DC /* memp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003721D1217D1003E68DC /* memp.c */; }; + 7CC0050E1D1324AB003E68DC /* netif.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003731D1217D1003E68DC /* netif.c */; }; + 7CC0050F1D1324AB003E68DC /* pbuf.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003741D1217D1003E68DC /* pbuf.c */; }; + 7CC005101D1324AB003E68DC /* raw.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003751D1217D1003E68DC /* raw.c */; }; + 7CC005111D1324AB003E68DC /* stats.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003761D1217D1003E68DC /* stats.c */; }; + 7CC005121D1324AB003E68DC /* sys.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003771D1217D1003E68DC /* sys.c */; }; + 7CC005131D1324AB003E68DC /* tcp_in.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003781D1217D1003E68DC /* tcp_in.c */; }; + 7CC005141D1324AB003E68DC /* tcp_out.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003791D1217D1003E68DC /* tcp_out.c */; }; + 7CC005151D1324AB003E68DC /* tcp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0037A1D1217D1003E68DC /* tcp.c */; }; + 7CC005161D1324AB003E68DC /* timers.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0037B1D1217D1003E68DC /* timers.c */; }; + 7CC005171D1324AB003E68DC /* udp.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0037C1D1217D1003E68DC /* udp.c */; }; + 7CC005181D1324AB003E68DC /* api_lib.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0035D1D1217C3003E68DC /* api_lib.c */; }; + 7CC005191D1324AB003E68DC /* api_msg.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0035E1D1217C3003E68DC /* api_msg.c */; }; + 7CC0051A1D1324AB003E68DC /* err.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0035F1D1217C3003E68DC /* err.c */; }; + 7CC0051B1D1324AB003E68DC /* netbuf.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003601D1217C3003E68DC /* netbuf.c */; }; + 7CC0051C1D1324AB003E68DC /* netdb.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003611D1217C3003E68DC /* netdb.c */; }; + 7CC0051D1D1324AB003E68DC /* netifapi.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003621D1217C3003E68DC /* netifapi.c */; }; + 7CC0051E1D1324AB003E68DC /* sockets.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003631D1217C3003E68DC /* sockets.c */; }; + 7CC0051F1D1324AB003E68DC /* tcpip.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003641D1217C3003E68DC /* tcpip.c */; }; + 7CC005201D1324B3003E68DC /* lz4.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC0035A1D1217B2003E68DC /* lz4.c */; }; + 7CC005211D1324B3003E68DC /* http_parser.c in Sources */ = {isa = PBXBuildFile; fileRef = 7CC003571D1217A1003E68DC /* http_parser.c */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 7CC003181D1216B0003E68DC /* ZeroTierSDK_Unity3D_iOS.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ZeroTierSDK_Unity3D_iOS.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 7CC0031A1D1216B0003E68DC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 7CC003231D1216E3003E68DC /* ZeroTierSDK_iOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ZeroTierSDK_iOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 7CC003251D1216E3003E68DC /* ZeroTierSDK_iOS.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ZeroTierSDK_iOS.h; sourceTree = ""; }; + 7CC003271D1216E3003E68DC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 7CC003301D1216F8003E68DC /* ZeroTierSDK_OSX.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ZeroTierSDK_OSX.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 7CC003321D1216F8003E68DC /* ZeroTierSDK_OSX.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ZeroTierSDK_OSX.h; sourceTree = ""; }; + 7CC003341D1216F8003E68DC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 7CC0033C1D121741003E68DC /* ZeroTierSDK_Unity3D_OSX.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ZeroTierSDK_Unity3D_OSX.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 7CC0033E1D121742003E68DC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 7CC003421D12178D003E68DC /* SDK_Debug.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SDK_Debug.c; path = ../../../src/SDK_Debug.c; sourceTree = ""; }; + 7CC003431D12178D003E68DC /* SDK_Debug.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDK_Debug.h; path = ../../../src/SDK_Debug.h; sourceTree = ""; }; + 7CC003441D12178D003E68DC /* SDK_EthernetTap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SDK_EthernetTap.cpp; path = ../../../src/SDK_EthernetTap.cpp; sourceTree = ""; }; + 7CC003451D12178D003E68DC /* SDK_EthernetTap.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = SDK_EthernetTap.hpp; path = ../../../src/SDK_EthernetTap.hpp; sourceTree = ""; }; + 7CC003461D12178D003E68DC /* SDK_Intercept.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SDK_Intercept.c; path = ../../../src/SDK_Intercept.c; sourceTree = ""; }; + 7CC003471D12178D003E68DC /* SDK_LWIPStack.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = SDK_LWIPStack.hpp; path = ../../../src/SDK_LWIPStack.hpp; sourceTree = ""; }; + 7CC003481D12178D003E68DC /* SDK_Proxy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SDK_Proxy.cpp; path = ../../../src/SDK_Proxy.cpp; sourceTree = ""; }; + 7CC003491D12178D003E68DC /* SDK_RPC.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SDK_RPC.c; path = ../../../src/SDK_RPC.c; sourceTree = ""; }; + 7CC0034A1D12178D003E68DC /* SDK_RPC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDK_RPC.h; path = ../../../src/SDK_RPC.h; sourceTree = ""; }; + 7CC0034B1D12178D003E68DC /* SDK_ServiceSetup.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SDK_ServiceSetup.cpp; path = ../../../src/SDK_ServiceSetup.cpp; sourceTree = ""; }; + 7CC0034C1D12178D003E68DC /* SDK_ServiceSetup.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = SDK_ServiceSetup.hpp; path = ../../../src/SDK_ServiceSetup.hpp; sourceTree = ""; }; + 7CC0034D1D12178D003E68DC /* SDK_Signatures.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDK_Signatures.h; path = ../../../src/SDK_Signatures.h; sourceTree = ""; }; + 7CC0034E1D12178D003E68DC /* SDK_Sockets.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = SDK_Sockets.c; path = ../../../src/SDK_Sockets.c; sourceTree = ""; }; + 7CC0034F1D12178D003E68DC /* SDK.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDK.h; path = ../../../src/SDK.h; sourceTree = ""; }; + 7CC003571D1217A1003E68DC /* http_parser.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = http_parser.c; path = "../../../zerotierone/ext/http-parser/http_parser.c"; sourceTree = ""; }; + 7CC003581D1217A1003E68DC /* http_parser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = http_parser.h; path = "../../../zerotierone/ext/http-parser/http_parser.h"; sourceTree = ""; }; + 7CC0035A1D1217B2003E68DC /* lz4.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lz4.c; path = ../../../zerotierone/ext/lz4/lz4.c; sourceTree = ""; }; + 7CC0035B1D1217B2003E68DC /* lz4.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = lz4.h; path = ../../../zerotierone/ext/lz4/lz4.h; sourceTree = ""; }; + 7CC0035D1D1217C3003E68DC /* api_lib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = api_lib.c; path = ../../../ext/lwip/src/api/api_lib.c; sourceTree = ""; }; + 7CC0035E1D1217C3003E68DC /* api_msg.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = api_msg.c; path = ../../../ext/lwip/src/api/api_msg.c; sourceTree = ""; }; + 7CC0035F1D1217C3003E68DC /* err.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = err.c; path = ../../../ext/lwip/src/api/err.c; sourceTree = ""; }; + 7CC003601D1217C3003E68DC /* netbuf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = netbuf.c; path = ../../../ext/lwip/src/api/netbuf.c; sourceTree = ""; }; + 7CC003611D1217C3003E68DC /* netdb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = netdb.c; path = ../../../ext/lwip/src/api/netdb.c; sourceTree = ""; }; + 7CC003621D1217C3003E68DC /* netifapi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = netifapi.c; path = ../../../ext/lwip/src/api/netifapi.c; sourceTree = ""; }; + 7CC003631D1217C3003E68DC /* sockets.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = sockets.c; path = ../../../ext/lwip/src/api/sockets.c; sourceTree = ""; }; + 7CC003641D1217C3003E68DC /* tcpip.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tcpip.c; path = ../../../ext/lwip/src/api/tcpip.c; sourceTree = ""; }; + 7CC0036D1D1217D1003E68DC /* def.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = def.c; path = ../../../ext/lwip/src/core/def.c; sourceTree = ""; }; + 7CC0036E1D1217D1003E68DC /* dhcp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = dhcp.c; path = ../../../ext/lwip/src/core/dhcp.c; sourceTree = ""; }; + 7CC0036F1D1217D1003E68DC /* dns.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = dns.c; path = ../../../ext/lwip/src/core/dns.c; sourceTree = ""; }; + 7CC003701D1217D1003E68DC /* init.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = init.c; path = ../../../ext/lwip/src/core/init.c; sourceTree = ""; }; + 7CC003711D1217D1003E68DC /* mem.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = mem.c; path = ../../../ext/lwip/src/core/mem.c; sourceTree = ""; }; + 7CC003721D1217D1003E68DC /* memp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = memp.c; path = ../../../ext/lwip/src/core/memp.c; sourceTree = ""; }; + 7CC003731D1217D1003E68DC /* netif.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = netif.c; path = ../../../ext/lwip/src/core/netif.c; sourceTree = ""; }; + 7CC003741D1217D1003E68DC /* pbuf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pbuf.c; path = ../../../ext/lwip/src/core/pbuf.c; sourceTree = ""; }; + 7CC003751D1217D1003E68DC /* raw.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = raw.c; path = ../../../ext/lwip/src/core/raw.c; sourceTree = ""; }; + 7CC003761D1217D1003E68DC /* stats.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = stats.c; path = ../../../ext/lwip/src/core/stats.c; sourceTree = ""; }; + 7CC003771D1217D1003E68DC /* sys.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = sys.c; path = ../../../ext/lwip/src/core/sys.c; sourceTree = ""; }; + 7CC003781D1217D1003E68DC /* tcp_in.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tcp_in.c; path = ../../../ext/lwip/src/core/tcp_in.c; sourceTree = ""; }; + 7CC003791D1217D1003E68DC /* tcp_out.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tcp_out.c; path = ../../../ext/lwip/src/core/tcp_out.c; sourceTree = ""; }; + 7CC0037A1D1217D1003E68DC /* tcp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tcp.c; path = ../../../ext/lwip/src/core/tcp.c; sourceTree = ""; }; + 7CC0037B1D1217D1003E68DC /* timers.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = timers.c; path = ../../../ext/lwip/src/core/timers.c; sourceTree = ""; }; + 7CC0037C1D1217D1003E68DC /* udp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = udp.c; path = ../../../ext/lwip/src/core/udp.c; sourceTree = ""; }; + 7CC0038D1D1217DD003E68DC /* autoip.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = autoip.c; path = ../../../ext/lwip/src/core/ipv4/autoip.c; sourceTree = ""; }; + 7CC0038E1D1217DD003E68DC /* icmp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = icmp.c; path = ../../../ext/lwip/src/core/ipv4/icmp.c; sourceTree = ""; }; + 7CC0038F1D1217DD003E68DC /* igmp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = igmp.c; path = ../../../ext/lwip/src/core/ipv4/igmp.c; sourceTree = ""; }; + 7CC003901D1217DD003E68DC /* inet_chksum.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = inet_chksum.c; path = ../../../ext/lwip/src/core/ipv4/inet_chksum.c; sourceTree = ""; }; + 7CC003911D1217DD003E68DC /* inet.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = inet.c; path = ../../../ext/lwip/src/core/ipv4/inet.c; sourceTree = ""; }; + 7CC003921D1217DD003E68DC /* ip_addr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ip_addr.c; path = ../../../ext/lwip/src/core/ipv4/ip_addr.c; sourceTree = ""; }; + 7CC003931D1217DD003E68DC /* ip_frag.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ip_frag.c; path = ../../../ext/lwip/src/core/ipv4/ip_frag.c; sourceTree = ""; }; + 7CC003941D1217DD003E68DC /* ip.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ip.c; path = ../../../ext/lwip/src/core/ipv4/ip.c; sourceTree = ""; }; + 7CC0039D1D1217F2003E68DC /* etharp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = etharp.c; path = ../../../ext/lwip/src/netif/etharp.c; sourceTree = ""; }; + 7CC0039E1D1217F2003E68DC /* ethernetif.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = ethernetif.c; path = ../../../ext/lwip/src/netif/ethernetif.c; sourceTree = ""; }; + 7CC0039F1D1217F2003E68DC /* slipif.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = slipif.c; path = ../../../ext/lwip/src/netif/slipif.c; sourceTree = ""; }; + 7CC003A31D121800003E68DC /* autoip.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = autoip.h; path = ../../../ext/lwip/src/include/ipv4/lwip/autoip.h; sourceTree = ""; }; + 7CC003A41D121800003E68DC /* icmp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = icmp.h; path = ../../../ext/lwip/src/include/ipv4/lwip/icmp.h; sourceTree = ""; }; + 7CC003A51D121800003E68DC /* igmp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = igmp.h; path = ../../../ext/lwip/src/include/ipv4/lwip/igmp.h; sourceTree = ""; }; + 7CC003A61D121800003E68DC /* inet_chksum.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = inet_chksum.h; path = ../../../ext/lwip/src/include/ipv4/lwip/inet_chksum.h; sourceTree = ""; }; + 7CC003A71D121800003E68DC /* inet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = inet.h; path = ../../../ext/lwip/src/include/ipv4/lwip/inet.h; sourceTree = ""; }; + 7CC003A81D121800003E68DC /* ip_addr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ip_addr.h; path = ../../../ext/lwip/src/include/ipv4/lwip/ip_addr.h; sourceTree = ""; }; + 7CC003A91D121800003E68DC /* ip_frag.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ip_frag.h; path = ../../../ext/lwip/src/include/ipv4/lwip/ip_frag.h; sourceTree = ""; }; + 7CC003AA1D121800003E68DC /* ip.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ip.h; path = ../../../ext/lwip/src/include/ipv4/lwip/ip.h; sourceTree = ""; }; + 7CC003AB1D12180E003E68DC /* api_msg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = api_msg.h; path = ../../../ext/lwip/src/include/lwip/api_msg.h; sourceTree = ""; }; + 7CC003AC1D12180E003E68DC /* api.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = api.h; path = ../../../ext/lwip/src/include/lwip/api.h; sourceTree = ""; }; + 7CC003AD1D12180E003E68DC /* arch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = arch.h; path = ../../../ext/lwip/src/include/lwip/arch.h; sourceTree = ""; }; + 7CC003AE1D12180E003E68DC /* debug.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = debug.h; path = ../../../ext/lwip/src/include/lwip/debug.h; sourceTree = ""; }; + 7CC003AF1D12180E003E68DC /* def.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = def.h; path = ../../../ext/lwip/src/include/lwip/def.h; sourceTree = ""; }; + 7CC003B01D12180E003E68DC /* dhcp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dhcp.h; path = ../../../ext/lwip/src/include/lwip/dhcp.h; sourceTree = ""; }; + 7CC003B11D12180E003E68DC /* dns.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dns.h; path = ../../../ext/lwip/src/include/lwip/dns.h; sourceTree = ""; }; + 7CC003B21D12180E003E68DC /* err.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = err.h; path = ../../../ext/lwip/src/include/lwip/err.h; sourceTree = ""; }; + 7CC003B31D12180E003E68DC /* init.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = init.h; path = ../../../ext/lwip/src/include/lwip/init.h; sourceTree = ""; }; + 7CC003B41D12180E003E68DC /* ip.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ip.h; path = ../../../ext/lwip/src/include/lwip/ip.h; sourceTree = ""; }; + 7CC003B51D12180E003E68DC /* mem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = mem.h; path = ../../../ext/lwip/src/include/lwip/mem.h; sourceTree = ""; }; + 7CC003B61D12180E003E68DC /* memp_std.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = memp_std.h; path = ../../../ext/lwip/src/include/lwip/memp_std.h; sourceTree = ""; }; + 7CC003B71D12180E003E68DC /* memp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = memp.h; path = ../../../ext/lwip/src/include/lwip/memp.h; sourceTree = ""; }; + 7CC003B81D12180E003E68DC /* netbuf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = netbuf.h; path = ../../../ext/lwip/src/include/lwip/netbuf.h; sourceTree = ""; }; + 7CC003B91D12180E003E68DC /* netdb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = netdb.h; path = ../../../ext/lwip/src/include/lwip/netdb.h; sourceTree = ""; }; + 7CC003BA1D12180E003E68DC /* netif.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = netif.h; path = ../../../ext/lwip/src/include/lwip/netif.h; sourceTree = ""; }; + 7CC003BB1D12180E003E68DC /* netifapi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = netifapi.h; path = ../../../ext/lwip/src/include/lwip/netifapi.h; sourceTree = ""; }; + 7CC003BC1D12180E003E68DC /* opt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = opt.h; path = ../../../ext/lwip/src/include/lwip/opt.h; sourceTree = ""; }; + 7CC003BD1D12180E003E68DC /* pbuf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pbuf.h; path = ../../../ext/lwip/src/include/lwip/pbuf.h; sourceTree = ""; }; + 7CC003BE1D12180E003E68DC /* raw.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = raw.h; path = ../../../ext/lwip/src/include/lwip/raw.h; sourceTree = ""; }; + 7CC003BF1D12180E003E68DC /* sio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sio.h; path = ../../../ext/lwip/src/include/lwip/sio.h; sourceTree = ""; }; + 7CC003C01D12180E003E68DC /* snmp_asn1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = snmp_asn1.h; path = ../../../ext/lwip/src/include/lwip/snmp_asn1.h; sourceTree = ""; }; + 7CC003C11D12180E003E68DC /* snmp_msg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = snmp_msg.h; path = ../../../ext/lwip/src/include/lwip/snmp_msg.h; sourceTree = ""; }; + 7CC003C21D12180E003E68DC /* snmp_structs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = snmp_structs.h; path = ../../../ext/lwip/src/include/lwip/snmp_structs.h; sourceTree = ""; }; + 7CC003C31D12180E003E68DC /* snmp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = snmp.h; path = ../../../ext/lwip/src/include/lwip/snmp.h; sourceTree = ""; }; + 7CC003C41D12180E003E68DC /* sockets.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sockets.h; path = ../../../ext/lwip/src/include/lwip/sockets.h; sourceTree = ""; }; + 7CC003C51D12180E003E68DC /* stats.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = stats.h; path = ../../../ext/lwip/src/include/lwip/stats.h; sourceTree = ""; }; + 7CC003C61D12180E003E68DC /* sys.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = sys.h; path = ../../../ext/lwip/src/include/lwip/sys.h; sourceTree = ""; }; + 7CC003C71D12180E003E68DC /* tcp_impl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tcp_impl.h; path = ../../../ext/lwip/src/include/lwip/tcp_impl.h; sourceTree = ""; }; + 7CC003C81D12180E003E68DC /* tcp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tcp.h; path = ../../../ext/lwip/src/include/lwip/tcp.h; sourceTree = ""; }; + 7CC003C91D12180E003E68DC /* tcpip.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tcpip.h; path = ../../../ext/lwip/src/include/lwip/tcpip.h; sourceTree = ""; }; + 7CC003CA1D12180E003E68DC /* timers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = timers.h; path = ../../../ext/lwip/src/include/lwip/timers.h; sourceTree = ""; }; + 7CC003CB1D12180E003E68DC /* udp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = udp.h; path = ../../../ext/lwip/src/include/lwip/udp.h; sourceTree = ""; }; + 7CC003CC1D121833003E68DC /* Arp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Arp.cpp; path = ../../../zerotierone/osdep/Arp.cpp; sourceTree = ""; }; + 7CC003CD1D121833003E68DC /* Arp.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Arp.hpp; path = ../../../zerotierone/osdep/Arp.hpp; sourceTree = ""; }; + 7CC003CE1D121833003E68DC /* BackgroundResolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = BackgroundResolver.cpp; path = ../../../zerotierone/osdep/BackgroundResolver.cpp; sourceTree = ""; }; + 7CC003CF1D121833003E68DC /* BackgroundResolver.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = BackgroundResolver.hpp; path = ../../../zerotierone/osdep/BackgroundResolver.hpp; sourceTree = ""; }; + 7CC003D01D121833003E68DC /* Binder.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Binder.hpp; path = ../../../zerotierone/osdep/Binder.hpp; sourceTree = ""; }; + 7CC003D11D121833003E68DC /* Http.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Http.cpp; path = ../../../zerotierone/osdep/Http.cpp; sourceTree = ""; }; + 7CC003D21D121833003E68DC /* Http.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Http.hpp; path = ../../../zerotierone/osdep/Http.hpp; sourceTree = ""; }; + 7CC003D31D121833003E68DC /* OSUtils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = OSUtils.cpp; path = ../../../zerotierone/osdep/OSUtils.cpp; sourceTree = ""; }; + 7CC003D41D121833003E68DC /* OSUtils.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = OSUtils.hpp; path = ../../../zerotierone/osdep/OSUtils.hpp; sourceTree = ""; }; + 7CC003D51D121833003E68DC /* Phy.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Phy.hpp; path = ../../../zerotierone/osdep/Phy.hpp; sourceTree = ""; }; + 7CC003D61D121833003E68DC /* PortMapper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PortMapper.cpp; path = ../../../zerotierone/osdep/PortMapper.cpp; sourceTree = ""; }; + 7CC003D71D121833003E68DC /* PortMapper.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = PortMapper.hpp; path = ../../../zerotierone/osdep/PortMapper.hpp; sourceTree = ""; }; + 7CC003D81D121833003E68DC /* RoutingTable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RoutingTable.cpp; path = ../../../zerotierone/osdep/RoutingTable.cpp; sourceTree = ""; }; + 7CC003D91D121833003E68DC /* RoutingTable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = RoutingTable.hpp; path = ../../../zerotierone/osdep/RoutingTable.hpp; sourceTree = ""; }; + 7CC003DA1D121833003E68DC /* Thread.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Thread.hpp; path = ../../../zerotierone/osdep/Thread.hpp; sourceTree = ""; }; + 7CC003E11D121840003E68DC /* Address.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Address.hpp; path = ../../../zerotierone/node/Address.hpp; sourceTree = ""; }; + 7CC003E21D121840003E68DC /* Array.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Array.hpp; path = ../../../zerotierone/node/Array.hpp; sourceTree = ""; }; + 7CC003E31D121840003E68DC /* AtomicCounter.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = AtomicCounter.hpp; path = ../../../zerotierone/node/AtomicCounter.hpp; sourceTree = ""; }; + 7CC003E41D121840003E68DC /* BinarySemaphore.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = BinarySemaphore.hpp; path = ../../../zerotierone/node/BinarySemaphore.hpp; sourceTree = ""; }; + 7CC003E51D121840003E68DC /* Buffer.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Buffer.hpp; path = ../../../zerotierone/node/Buffer.hpp; sourceTree = ""; }; + 7CC003E61D121840003E68DC /* C25519.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = C25519.cpp; path = ../../../zerotierone/node/C25519.cpp; sourceTree = ""; }; + 7CC003E71D121840003E68DC /* C25519.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = C25519.hpp; path = ../../../zerotierone/node/C25519.hpp; sourceTree = ""; }; + 7CC003E81D121840003E68DC /* CertificateOfMembership.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CertificateOfMembership.cpp; path = ../../../zerotierone/node/CertificateOfMembership.cpp; sourceTree = ""; }; + 7CC003E91D121840003E68DC /* CertificateOfMembership.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = CertificateOfMembership.hpp; path = ../../../zerotierone/node/CertificateOfMembership.hpp; sourceTree = ""; }; + 7CC003EA1D121840003E68DC /* Cluster.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Cluster.cpp; path = ../../../zerotierone/node/Cluster.cpp; sourceTree = ""; }; + 7CC003EB1D121840003E68DC /* Cluster.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Cluster.hpp; path = ../../../zerotierone/node/Cluster.hpp; sourceTree = ""; }; + 7CC003EC1D121840003E68DC /* Constants.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Constants.hpp; path = ../../../zerotierone/node/Constants.hpp; sourceTree = ""; }; + 7CC003ED1D121840003E68DC /* DeferredPackets.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DeferredPackets.cpp; path = ../../../zerotierone/node/DeferredPackets.cpp; sourceTree = ""; }; + 7CC003EE1D121840003E68DC /* DeferredPackets.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = DeferredPackets.hpp; path = ../../../zerotierone/node/DeferredPackets.hpp; sourceTree = ""; }; + 7CC003EF1D121840003E68DC /* Dictionary.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Dictionary.cpp; path = ../../../zerotierone/node/Dictionary.cpp; sourceTree = ""; }; + 7CC003F01D121840003E68DC /* Dictionary.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Dictionary.hpp; path = ../../../zerotierone/node/Dictionary.hpp; sourceTree = ""; }; + 7CC003F11D121840003E68DC /* Hashtable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Hashtable.hpp; path = ../../../zerotierone/node/Hashtable.hpp; sourceTree = ""; }; + 7CC003F21D121840003E68DC /* Identity.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Identity.cpp; path = ../../../zerotierone/node/Identity.cpp; sourceTree = ""; }; + 7CC003F31D121840003E68DC /* Identity.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Identity.hpp; path = ../../../zerotierone/node/Identity.hpp; sourceTree = ""; }; + 7CC003F41D121840003E68DC /* IncomingPacket.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = IncomingPacket.cpp; path = ../../../zerotierone/node/IncomingPacket.cpp; sourceTree = ""; }; + 7CC003F51D121840003E68DC /* IncomingPacket.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = IncomingPacket.hpp; path = ../../../zerotierone/node/IncomingPacket.hpp; sourceTree = ""; }; + 7CC003F61D121840003E68DC /* InetAddress.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = InetAddress.cpp; path = ../../../zerotierone/node/InetAddress.cpp; sourceTree = ""; }; + 7CC003F71D121840003E68DC /* InetAddress.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = InetAddress.hpp; path = ../../../zerotierone/node/InetAddress.hpp; sourceTree = ""; }; + 7CC003F81D121840003E68DC /* MAC.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = MAC.hpp; path = ../../../zerotierone/node/MAC.hpp; sourceTree = ""; }; + 7CC003F91D121840003E68DC /* Multicaster.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Multicaster.cpp; path = ../../../zerotierone/node/Multicaster.cpp; sourceTree = ""; }; + 7CC003FA1D121840003E68DC /* Multicaster.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Multicaster.hpp; path = ../../../zerotierone/node/Multicaster.hpp; sourceTree = ""; }; + 7CC003FB1D121840003E68DC /* MulticastGroup.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = MulticastGroup.hpp; path = ../../../zerotierone/node/MulticastGroup.hpp; sourceTree = ""; }; + 7CC003FC1D121840003E68DC /* Mutex.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Mutex.hpp; path = ../../../zerotierone/node/Mutex.hpp; sourceTree = ""; }; + 7CC003FD1D121840003E68DC /* Network.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Network.cpp; path = ../../../zerotierone/node/Network.cpp; sourceTree = ""; }; + 7CC003FE1D121840003E68DC /* Network.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Network.hpp; path = ../../../zerotierone/node/Network.hpp; sourceTree = ""; }; + 7CC003FF1D121840003E68DC /* NetworkConfig.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = NetworkConfig.cpp; path = ../../../zerotierone/node/NetworkConfig.cpp; sourceTree = ""; }; + 7CC004001D121840003E68DC /* NetworkConfig.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = NetworkConfig.hpp; path = ../../../zerotierone/node/NetworkConfig.hpp; sourceTree = ""; }; + 7CC004011D121840003E68DC /* NetworkConfigRequestMetaData.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = NetworkConfigRequestMetaData.hpp; path = ../../../zerotierone/node/NetworkConfigRequestMetaData.hpp; sourceTree = ""; }; + 7CC004021D121840003E68DC /* NetworkController.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = NetworkController.hpp; path = ../../../zerotierone/node/NetworkController.hpp; sourceTree = ""; }; + 7CC004031D121840003E68DC /* Node.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Node.cpp; path = ../../../zerotierone/node/Node.cpp; sourceTree = ""; }; + 7CC004041D121840003E68DC /* Node.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Node.hpp; path = ../../../zerotierone/node/Node.hpp; sourceTree = ""; }; + 7CC004051D121840003E68DC /* NonCopyable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = NonCopyable.hpp; path = ../../../zerotierone/node/NonCopyable.hpp; sourceTree = ""; }; + 7CC004061D121840003E68DC /* OutboundMulticast.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = OutboundMulticast.cpp; path = ../../../zerotierone/node/OutboundMulticast.cpp; sourceTree = ""; }; + 7CC004071D121840003E68DC /* OutboundMulticast.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = OutboundMulticast.hpp; path = ../../../zerotierone/node/OutboundMulticast.hpp; sourceTree = ""; }; + 7CC004081D121840003E68DC /* Packet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Packet.cpp; path = ../../../zerotierone/node/Packet.cpp; sourceTree = ""; }; + 7CC004091D121840003E68DC /* Packet.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Packet.hpp; path = ../../../zerotierone/node/Packet.hpp; sourceTree = ""; }; + 7CC0040A1D121840003E68DC /* Path.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Path.cpp; path = ../../../zerotierone/node/Path.cpp; sourceTree = ""; }; + 7CC0040B1D121840003E68DC /* Path.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Path.hpp; path = ../../../zerotierone/node/Path.hpp; sourceTree = ""; }; + 7CC0040C1D121840003E68DC /* Peer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Peer.cpp; path = ../../../zerotierone/node/Peer.cpp; sourceTree = ""; }; + 7CC0040D1D121840003E68DC /* Peer.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Peer.hpp; path = ../../../zerotierone/node/Peer.hpp; sourceTree = ""; }; + 7CC0040E1D121840003E68DC /* Poly1305.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Poly1305.cpp; path = ../../../zerotierone/node/Poly1305.cpp; sourceTree = ""; }; + 7CC0040F1D121840003E68DC /* Poly1305.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Poly1305.hpp; path = ../../../zerotierone/node/Poly1305.hpp; sourceTree = ""; }; + 7CC004101D121840003E68DC /* RuntimeEnvironment.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = RuntimeEnvironment.hpp; path = ../../../zerotierone/node/RuntimeEnvironment.hpp; sourceTree = ""; }; + 7CC004111D121840003E68DC /* Salsa20.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Salsa20.cpp; path = ../../../zerotierone/node/Salsa20.cpp; sourceTree = ""; }; + 7CC004121D121840003E68DC /* Salsa20.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Salsa20.hpp; path = ../../../zerotierone/node/Salsa20.hpp; sourceTree = ""; }; + 7CC004131D121840003E68DC /* SelfAwareness.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SelfAwareness.cpp; path = ../../../zerotierone/node/SelfAwareness.cpp; sourceTree = ""; }; + 7CC004141D121840003E68DC /* SelfAwareness.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = SelfAwareness.hpp; path = ../../../zerotierone/node/SelfAwareness.hpp; sourceTree = ""; }; + 7CC004151D121840003E68DC /* SHA512.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SHA512.cpp; path = ../../../zerotierone/node/SHA512.cpp; sourceTree = ""; }; + 7CC004161D121840003E68DC /* SHA512.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = SHA512.hpp; path = ../../../zerotierone/node/SHA512.hpp; sourceTree = ""; }; + 7CC004171D121840003E68DC /* SharedPtr.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = SharedPtr.hpp; path = ../../../zerotierone/node/SharedPtr.hpp; sourceTree = ""; }; + 7CC004181D121840003E68DC /* Switch.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Switch.cpp; path = ../../../zerotierone/node/Switch.cpp; sourceTree = ""; }; + 7CC004191D121840003E68DC /* Switch.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Switch.hpp; path = ../../../zerotierone/node/Switch.hpp; sourceTree = ""; }; + 7CC0041A1D121840003E68DC /* Topology.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Topology.cpp; path = ../../../zerotierone/node/Topology.cpp; sourceTree = ""; }; + 7CC0041B1D121840003E68DC /* Topology.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Topology.hpp; path = ../../../zerotierone/node/Topology.hpp; sourceTree = ""; }; + 7CC0041C1D121840003E68DC /* Utils.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Utils.cpp; path = ../../../zerotierone/node/Utils.cpp; sourceTree = ""; }; + 7CC0041D1D121840003E68DC /* Utils.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = Utils.hpp; path = ../../../zerotierone/node/Utils.hpp; sourceTree = ""; }; + 7CC0041E1D121840003E68DC /* World.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = World.hpp; path = ../../../zerotierone/node/World.hpp; sourceTree = ""; }; + 7CC004361D12184F003E68DC /* ControlPlane.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ControlPlane.cpp; path = ../../../zerotierone/service/ControlPlane.cpp; sourceTree = ""; }; + 7CC004371D12184F003E68DC /* ControlPlane.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = ControlPlane.hpp; path = ../../../zerotierone/service/ControlPlane.hpp; sourceTree = ""; }; + 7CC004381D12184F003E68DC /* OneService.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = OneService.cpp; path = ../../../zerotierone/service/OneService.cpp; sourceTree = ""; }; + 7CC004391D12184F003E68DC /* OneService.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = OneService.hpp; path = ../../../zerotierone/service/OneService.hpp; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 7CC003151D1216B0003E68DC /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7CC0031F1D1216E3003E68DC /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7CC0032C1D1216F8003E68DC /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7CC003391D121741003E68DC /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 7CC002FB1D12164D003E68DC = { + isa = PBXGroup; + children = ( + 7CC003131D12167D003E68DC /* SDK */, + 7CC003121D121677003E68DC /* ZeroTier */, + 7CC003111D121670003E68DC /* lwIP */, + 7CC003101D12166B003E68DC /* ext */, + 7CC003191D1216B0003E68DC /* ZeroTierSDK_Unity3D_iOS */, + 7CC003241D1216E3003E68DC /* ZeroTierSDK_iOS */, + 7CC003311D1216F8003E68DC /* ZeroTierSDK_OSX */, + 7CC0033D1D121742003E68DC /* ZeroTierSDK_Unity3D_OSX */, + 7CC003061D12164D003E68DC /* Products */, + ); + sourceTree = ""; + }; + 7CC003061D12164D003E68DC /* Products */ = { + isa = PBXGroup; + children = ( + 7CC003181D1216B0003E68DC /* ZeroTierSDK_Unity3D_iOS.bundle */, + 7CC003231D1216E3003E68DC /* ZeroTierSDK_iOS.framework */, + 7CC003301D1216F8003E68DC /* ZeroTierSDK_OSX.framework */, + 7CC0033C1D121741003E68DC /* ZeroTierSDK_Unity3D_OSX.bundle */, + ); + name = Products; + sourceTree = ""; + }; + 7CC003101D12166B003E68DC /* ext */ = { + isa = PBXGroup; + children = ( + 7CC0035A1D1217B2003E68DC /* lz4.c */, + 7CC0035B1D1217B2003E68DC /* lz4.h */, + 7CC003571D1217A1003E68DC /* http_parser.c */, + 7CC003581D1217A1003E68DC /* http_parser.h */, + ); + name = ext; + sourceTree = ""; + }; + 7CC003111D121670003E68DC /* lwIP */ = { + isa = PBXGroup; + children = ( + 7CC003AB1D12180E003E68DC /* api_msg.h */, + 7CC003AC1D12180E003E68DC /* api.h */, + 7CC003AD1D12180E003E68DC /* arch.h */, + 7CC003AE1D12180E003E68DC /* debug.h */, + 7CC003AF1D12180E003E68DC /* def.h */, + 7CC003B01D12180E003E68DC /* dhcp.h */, + 7CC003B11D12180E003E68DC /* dns.h */, + 7CC003B21D12180E003E68DC /* err.h */, + 7CC003B31D12180E003E68DC /* init.h */, + 7CC003B41D12180E003E68DC /* ip.h */, + 7CC003B51D12180E003E68DC /* mem.h */, + 7CC003B61D12180E003E68DC /* memp_std.h */, + 7CC003B71D12180E003E68DC /* memp.h */, + 7CC003B81D12180E003E68DC /* netbuf.h */, + 7CC003B91D12180E003E68DC /* netdb.h */, + 7CC003BA1D12180E003E68DC /* netif.h */, + 7CC003BB1D12180E003E68DC /* netifapi.h */, + 7CC003BC1D12180E003E68DC /* opt.h */, + 7CC003BD1D12180E003E68DC /* pbuf.h */, + 7CC003BE1D12180E003E68DC /* raw.h */, + 7CC003BF1D12180E003E68DC /* sio.h */, + 7CC003C01D12180E003E68DC /* snmp_asn1.h */, + 7CC003C11D12180E003E68DC /* snmp_msg.h */, + 7CC003C21D12180E003E68DC /* snmp_structs.h */, + 7CC003C31D12180E003E68DC /* snmp.h */, + 7CC003C41D12180E003E68DC /* sockets.h */, + 7CC003C51D12180E003E68DC /* stats.h */, + 7CC003C61D12180E003E68DC /* sys.h */, + 7CC003C71D12180E003E68DC /* tcp_impl.h */, + 7CC003C81D12180E003E68DC /* tcp.h */, + 7CC003C91D12180E003E68DC /* tcpip.h */, + 7CC003CA1D12180E003E68DC /* timers.h */, + 7CC003CB1D12180E003E68DC /* udp.h */, + 7CC003A31D121800003E68DC /* autoip.h */, + 7CC003A41D121800003E68DC /* icmp.h */, + 7CC003A51D121800003E68DC /* igmp.h */, + 7CC003A61D121800003E68DC /* inet_chksum.h */, + 7CC003A71D121800003E68DC /* inet.h */, + 7CC003A81D121800003E68DC /* ip_addr.h */, + 7CC003A91D121800003E68DC /* ip_frag.h */, + 7CC003AA1D121800003E68DC /* ip.h */, + 7CC0039D1D1217F2003E68DC /* etharp.c */, + 7CC0039E1D1217F2003E68DC /* ethernetif.c */, + 7CC0039F1D1217F2003E68DC /* slipif.c */, + 7CC0038D1D1217DD003E68DC /* autoip.c */, + 7CC0038E1D1217DD003E68DC /* icmp.c */, + 7CC0038F1D1217DD003E68DC /* igmp.c */, + 7CC003901D1217DD003E68DC /* inet_chksum.c */, + 7CC003911D1217DD003E68DC /* inet.c */, + 7CC003921D1217DD003E68DC /* ip_addr.c */, + 7CC003931D1217DD003E68DC /* ip_frag.c */, + 7CC003941D1217DD003E68DC /* ip.c */, + 7CC0036D1D1217D1003E68DC /* def.c */, + 7CC0036E1D1217D1003E68DC /* dhcp.c */, + 7CC0036F1D1217D1003E68DC /* dns.c */, + 7CC003701D1217D1003E68DC /* init.c */, + 7CC003711D1217D1003E68DC /* mem.c */, + 7CC003721D1217D1003E68DC /* memp.c */, + 7CC003731D1217D1003E68DC /* netif.c */, + 7CC003741D1217D1003E68DC /* pbuf.c */, + 7CC003751D1217D1003E68DC /* raw.c */, + 7CC003761D1217D1003E68DC /* stats.c */, + 7CC003771D1217D1003E68DC /* sys.c */, + 7CC003781D1217D1003E68DC /* tcp_in.c */, + 7CC003791D1217D1003E68DC /* tcp_out.c */, + 7CC0037A1D1217D1003E68DC /* tcp.c */, + 7CC0037B1D1217D1003E68DC /* timers.c */, + 7CC0037C1D1217D1003E68DC /* udp.c */, + 7CC0035D1D1217C3003E68DC /* api_lib.c */, + 7CC0035E1D1217C3003E68DC /* api_msg.c */, + 7CC0035F1D1217C3003E68DC /* err.c */, + 7CC003601D1217C3003E68DC /* netbuf.c */, + 7CC003611D1217C3003E68DC /* netdb.c */, + 7CC003621D1217C3003E68DC /* netifapi.c */, + 7CC003631D1217C3003E68DC /* sockets.c */, + 7CC003641D1217C3003E68DC /* tcpip.c */, + ); + name = lwIP; + sourceTree = ""; + }; + 7CC003121D121677003E68DC /* ZeroTier */ = { + isa = PBXGroup; + children = ( + 7CC004361D12184F003E68DC /* ControlPlane.cpp */, + 7CC004371D12184F003E68DC /* ControlPlane.hpp */, + 7CC004381D12184F003E68DC /* OneService.cpp */, + 7CC004391D12184F003E68DC /* OneService.hpp */, + 7CC003E11D121840003E68DC /* Address.hpp */, + 7CC003E21D121840003E68DC /* Array.hpp */, + 7CC003E31D121840003E68DC /* AtomicCounter.hpp */, + 7CC003E41D121840003E68DC /* BinarySemaphore.hpp */, + 7CC003E51D121840003E68DC /* Buffer.hpp */, + 7CC003E61D121840003E68DC /* C25519.cpp */, + 7CC003E71D121840003E68DC /* C25519.hpp */, + 7CC003E81D121840003E68DC /* CertificateOfMembership.cpp */, + 7CC003E91D121840003E68DC /* CertificateOfMembership.hpp */, + 7CC003EA1D121840003E68DC /* Cluster.cpp */, + 7CC003EB1D121840003E68DC /* Cluster.hpp */, + 7CC003EC1D121840003E68DC /* Constants.hpp */, + 7CC003ED1D121840003E68DC /* DeferredPackets.cpp */, + 7CC003EE1D121840003E68DC /* DeferredPackets.hpp */, + 7CC003EF1D121840003E68DC /* Dictionary.cpp */, + 7CC003F01D121840003E68DC /* Dictionary.hpp */, + 7CC003F11D121840003E68DC /* Hashtable.hpp */, + 7CC003F21D121840003E68DC /* Identity.cpp */, + 7CC003F31D121840003E68DC /* Identity.hpp */, + 7CC003F41D121840003E68DC /* IncomingPacket.cpp */, + 7CC003F51D121840003E68DC /* IncomingPacket.hpp */, + 7CC003F61D121840003E68DC /* InetAddress.cpp */, + 7CC003F71D121840003E68DC /* InetAddress.hpp */, + 7CC003F81D121840003E68DC /* MAC.hpp */, + 7CC003F91D121840003E68DC /* Multicaster.cpp */, + 7CC003FA1D121840003E68DC /* Multicaster.hpp */, + 7CC003FB1D121840003E68DC /* MulticastGroup.hpp */, + 7CC003FC1D121840003E68DC /* Mutex.hpp */, + 7CC003FD1D121840003E68DC /* Network.cpp */, + 7CC003FE1D121840003E68DC /* Network.hpp */, + 7CC003FF1D121840003E68DC /* NetworkConfig.cpp */, + 7CC004001D121840003E68DC /* NetworkConfig.hpp */, + 7CC004011D121840003E68DC /* NetworkConfigRequestMetaData.hpp */, + 7CC004021D121840003E68DC /* NetworkController.hpp */, + 7CC004031D121840003E68DC /* Node.cpp */, + 7CC004041D121840003E68DC /* Node.hpp */, + 7CC004051D121840003E68DC /* NonCopyable.hpp */, + 7CC004061D121840003E68DC /* OutboundMulticast.cpp */, + 7CC004071D121840003E68DC /* OutboundMulticast.hpp */, + 7CC004081D121840003E68DC /* Packet.cpp */, + 7CC004091D121840003E68DC /* Packet.hpp */, + 7CC0040A1D121840003E68DC /* Path.cpp */, + 7CC0040B1D121840003E68DC /* Path.hpp */, + 7CC0040C1D121840003E68DC /* Peer.cpp */, + 7CC0040D1D121840003E68DC /* Peer.hpp */, + 7CC0040E1D121840003E68DC /* Poly1305.cpp */, + 7CC0040F1D121840003E68DC /* Poly1305.hpp */, + 7CC004101D121840003E68DC /* RuntimeEnvironment.hpp */, + 7CC004111D121840003E68DC /* Salsa20.cpp */, + 7CC004121D121840003E68DC /* Salsa20.hpp */, + 7CC004131D121840003E68DC /* SelfAwareness.cpp */, + 7CC004141D121840003E68DC /* SelfAwareness.hpp */, + 7CC004151D121840003E68DC /* SHA512.cpp */, + 7CC004161D121840003E68DC /* SHA512.hpp */, + 7CC004171D121840003E68DC /* SharedPtr.hpp */, + 7CC004181D121840003E68DC /* Switch.cpp */, + 7CC004191D121840003E68DC /* Switch.hpp */, + 7CC0041A1D121840003E68DC /* Topology.cpp */, + 7CC0041B1D121840003E68DC /* Topology.hpp */, + 7CC0041C1D121840003E68DC /* Utils.cpp */, + 7CC0041D1D121840003E68DC /* Utils.hpp */, + 7CC0041E1D121840003E68DC /* World.hpp */, + 7CC003CC1D121833003E68DC /* Arp.cpp */, + 7CC003CD1D121833003E68DC /* Arp.hpp */, + 7CC003CE1D121833003E68DC /* BackgroundResolver.cpp */, + 7CC003CF1D121833003E68DC /* BackgroundResolver.hpp */, + 7CC003D01D121833003E68DC /* Binder.hpp */, + 7CC003D11D121833003E68DC /* Http.cpp */, + 7CC003D21D121833003E68DC /* Http.hpp */, + 7CC003D31D121833003E68DC /* OSUtils.cpp */, + 7CC003D41D121833003E68DC /* OSUtils.hpp */, + 7CC003D51D121833003E68DC /* Phy.hpp */, + 7CC003D61D121833003E68DC /* PortMapper.cpp */, + 7CC003D71D121833003E68DC /* PortMapper.hpp */, + 7CC003D81D121833003E68DC /* RoutingTable.cpp */, + 7CC003D91D121833003E68DC /* RoutingTable.hpp */, + 7CC003DA1D121833003E68DC /* Thread.hpp */, + ); + name = ZeroTier; + sourceTree = ""; + }; + 7CC003131D12167D003E68DC /* SDK */ = { + isa = PBXGroup; + children = ( + 7CC003421D12178D003E68DC /* SDK_Debug.c */, + 7CC003431D12178D003E68DC /* SDK_Debug.h */, + 7CC003441D12178D003E68DC /* SDK_EthernetTap.cpp */, + 7CC003451D12178D003E68DC /* SDK_EthernetTap.hpp */, + 7CC003461D12178D003E68DC /* SDK_Intercept.c */, + 7CC003471D12178D003E68DC /* SDK_LWIPStack.hpp */, + 7CC003481D12178D003E68DC /* SDK_Proxy.cpp */, + 7CC003491D12178D003E68DC /* SDK_RPC.c */, + 7CC0034A1D12178D003E68DC /* SDK_RPC.h */, + 7CC0034B1D12178D003E68DC /* SDK_ServiceSetup.cpp */, + 7CC0034C1D12178D003E68DC /* SDK_ServiceSetup.hpp */, + 7CC0034D1D12178D003E68DC /* SDK_Signatures.h */, + 7CC0034E1D12178D003E68DC /* SDK_Sockets.c */, + 7CC0034F1D12178D003E68DC /* SDK.h */, + ); + name = SDK; + sourceTree = ""; + }; + 7CC003191D1216B0003E68DC /* ZeroTierSDK_Unity3D_iOS */ = { + isa = PBXGroup; + children = ( + 7CC0031A1D1216B0003E68DC /* Info.plist */, + ); + path = ZeroTierSDK_Unity3D_iOS; + sourceTree = ""; + }; + 7CC003241D1216E3003E68DC /* ZeroTierSDK_iOS */ = { + isa = PBXGroup; + children = ( + 7CC003251D1216E3003E68DC /* ZeroTierSDK_iOS.h */, + 7CC003271D1216E3003E68DC /* Info.plist */, + ); + path = ZeroTierSDK_iOS; + sourceTree = ""; + }; + 7CC003311D1216F8003E68DC /* ZeroTierSDK_OSX */ = { + isa = PBXGroup; + children = ( + 7CC003321D1216F8003E68DC /* ZeroTierSDK_OSX.h */, + 7CC003341D1216F8003E68DC /* Info.plist */, + ); + path = ZeroTierSDK_OSX; + sourceTree = ""; + }; + 7CC0033D1D121742003E68DC /* ZeroTierSDK_Unity3D_OSX */ = { + isa = PBXGroup; + children = ( + 7CC0033E1D121742003E68DC /* Info.plist */, + ); + path = ZeroTierSDK_Unity3D_OSX; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 7CC003201D1216E3003E68DC /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 7CC003261D1216E3003E68DC /* ZeroTierSDK_iOS.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7CC0032D1D1216F8003E68DC /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 7CC003171D1216B0003E68DC /* ZeroTierSDK_Unity3D_iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 7CC0031B1D1216B0003E68DC /* Build configuration list for PBXNativeTarget "ZeroTierSDK_Unity3D_iOS" */; + buildPhases = ( + 7CC003141D1216B0003E68DC /* Sources */, + 7CC003151D1216B0003E68DC /* Frameworks */, + 7CC003161D1216B0003E68DC /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = ZeroTierSDK_Unity3D_iOS; + productName = ZeroTierSDK_Unity3D_iOS; + productReference = 7CC003181D1216B0003E68DC /* ZeroTierSDK_Unity3D_iOS.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 7CC003221D1216E3003E68DC /* ZeroTierSDK_iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 7CC003281D1216E3003E68DC /* Build configuration list for PBXNativeTarget "ZeroTierSDK_iOS" */; + buildPhases = ( + 7CC0031E1D1216E3003E68DC /* Sources */, + 7CC0031F1D1216E3003E68DC /* Frameworks */, + 7CC003201D1216E3003E68DC /* Headers */, + 7CC003211D1216E3003E68DC /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = ZeroTierSDK_iOS; + productName = ZeroTierSDK_iOS; + productReference = 7CC003231D1216E3003E68DC /* ZeroTierSDK_iOS.framework */; + productType = "com.apple.product-type.framework"; + }; + 7CC0032F1D1216F8003E68DC /* ZeroTierSDK_OSX */ = { + isa = PBXNativeTarget; + buildConfigurationList = 7CC003351D1216F8003E68DC /* Build configuration list for PBXNativeTarget "ZeroTierSDK_OSX" */; + buildPhases = ( + 7CC0032B1D1216F8003E68DC /* Sources */, + 7CC0032C1D1216F8003E68DC /* Frameworks */, + 7CC0032D1D1216F8003E68DC /* Headers */, + 7CC0032E1D1216F8003E68DC /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = ZeroTierSDK_OSX; + productName = ZeroTierSDK_OSX; + productReference = 7CC003301D1216F8003E68DC /* ZeroTierSDK_OSX.framework */; + productType = "com.apple.product-type.framework"; + }; + 7CC0033B1D121741003E68DC /* ZeroTierSDK_Unity3D_OSX */ = { + isa = PBXNativeTarget; + buildConfigurationList = 7CC0033F1D121742003E68DC /* Build configuration list for PBXNativeTarget "ZeroTierSDK_Unity3D_OSX" */; + buildPhases = ( + 7CC003381D121741003E68DC /* Sources */, + 7CC003391D121741003E68DC /* Frameworks */, + 7CC0033A1D121741003E68DC /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = ZeroTierSDK_Unity3D_OSX; + productName = ZeroTierSDK_Unity3D_OSX; + productReference = 7CC0033C1D121741003E68DC /* ZeroTierSDK_Unity3D_OSX.bundle */; + productType = "com.apple.product-type.bundle"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 7CC002FC1D12164D003E68DC /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0730; + ORGANIZATIONNAME = "ZeroTier Inc."; + TargetAttributes = { + 7CC003171D1216B0003E68DC = { + CreatedOnToolsVersion = 7.3; + }; + 7CC003221D1216E3003E68DC = { + CreatedOnToolsVersion = 7.3; + }; + 7CC0032F1D1216F8003E68DC = { + CreatedOnToolsVersion = 7.3; + }; + 7CC0033B1D121741003E68DC = { + CreatedOnToolsVersion = 7.3; + }; + }; + }; + buildConfigurationList = 7CC002FF1D12164D003E68DC /* Build configuration list for PBXProject "ZeroTierSDK_Apple" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 7CC002FB1D12164D003E68DC; + productRefGroup = 7CC003061D12164D003E68DC /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 7CC003171D1216B0003E68DC /* ZeroTierSDK_Unity3D_iOS */, + 7CC0033B1D121741003E68DC /* ZeroTierSDK_Unity3D_OSX */, + 7CC003221D1216E3003E68DC /* ZeroTierSDK_iOS */, + 7CC0032F1D1216F8003E68DC /* ZeroTierSDK_OSX */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 7CC003161D1216B0003E68DC /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7CC003211D1216E3003E68DC /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7CC0032E1D1216F8003E68DC /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7CC0033A1D121741003E68DC /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 7CC003141D1216B0003E68DC /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 7CC0038C1D1217D1003E68DC /* udp.c in Sources */, + 7CC003821D1217D1003E68DC /* memp.c in Sources */, + 7CC003661D1217C3003E68DC /* api_msg.c in Sources */, + 7CC004291D121840003E68DC /* NetworkConfig.cpp in Sources */, + 7CC003501D12178D003E68DC /* SDK_Debug.c in Sources */, + 7CC004321D121840003E68DC /* SHA512.cpp in Sources */, + 7CC003531D12178D003E68DC /* SDK_Proxy.cpp in Sources */, + 7CC003961D1217DD003E68DC /* icmp.c in Sources */, + 7CC0037F1D1217D1003E68DC /* dns.c in Sources */, + 7CC004241D121840003E68DC /* Identity.cpp in Sources */, + 7CC004341D121840003E68DC /* Topology.cpp in Sources */, + 7CC0042E1D121840003E68DC /* Peer.cpp in Sources */, + 7CC003871D1217D1003E68DC /* sys.c in Sources */, + 7CC004351D121840003E68DC /* Utils.cpp in Sources */, + 7CC004221D121840003E68DC /* DeferredPackets.cpp in Sources */, + 7CC003841D1217D1003E68DC /* pbuf.c in Sources */, + 7CC003881D1217D1003E68DC /* tcp_in.c in Sources */, + 7CC003671D1217C3003E68DC /* err.c in Sources */, + 7CC003831D1217D1003E68DC /* netif.c in Sources */, + 7CC003971D1217DD003E68DC /* igmp.c in Sources */, + 7CC003A01D1217F2003E68DC /* etharp.c in Sources */, + 7CC003981D1217DD003E68DC /* inet_chksum.c in Sources */, + 7CC0043A1D12184F003E68DC /* ControlPlane.cpp in Sources */, + 7CC003DB1D121833003E68DC /* Arp.cpp in Sources */, + 7CC0042C1D121840003E68DC /* Packet.cpp in Sources */, + 7CC0042A1D121840003E68DC /* Node.cpp in Sources */, + 7CC003651D1217C3003E68DC /* api_lib.c in Sources */, + 7CC0041F1D121840003E68DC /* C25519.cpp in Sources */, + 7CC004211D121840003E68DC /* Cluster.cpp in Sources */, + 7CC003681D1217C3003E68DC /* netbuf.c in Sources */, + 7CC0036B1D1217C3003E68DC /* sockets.c in Sources */, + 7CC0038B1D1217D1003E68DC /* timers.c in Sources */, + 7CC003DF1D121833003E68DC /* PortMapper.cpp in Sources */, + 7CC0039C1D1217DD003E68DC /* ip.c in Sources */, + 7CC004251D121840003E68DC /* IncomingPacket.cpp in Sources */, + 7CC003DC1D121833003E68DC /* BackgroundResolver.cpp in Sources */, + 7CC003A21D1217F2003E68DC /* slipif.c in Sources */, + 7CC0039B1D1217DD003E68DC /* ip_frag.c in Sources */, + 7CC003591D1217A1003E68DC /* http_parser.c in Sources */, + 7CC003861D1217D1003E68DC /* stats.c in Sources */, + 7CC004201D121840003E68DC /* CertificateOfMembership.cpp in Sources */, + 7CC0043B1D12184F003E68DC /* OneService.cpp in Sources */, + 7CC0037E1D1217D1003E68DC /* dhcp.c in Sources */, + 7CC003561D12178D003E68DC /* SDK_Sockets.c in Sources */, + 7CC003A11D1217F2003E68DC /* ethernetif.c in Sources */, + 7CC003851D1217D1003E68DC /* raw.c in Sources */, + 7CC003811D1217D1003E68DC /* mem.c in Sources */, + 7CC003DE1D121833003E68DC /* OSUtils.cpp in Sources */, + 7CC003951D1217DD003E68DC /* autoip.c in Sources */, + 7CC004231D121840003E68DC /* Dictionary.cpp in Sources */, + 7CC003551D12178D003E68DC /* SDK_ServiceSetup.cpp in Sources */, + 7CC003891D1217D1003E68DC /* tcp_out.c in Sources */, + 7CC003991D1217DD003E68DC /* inet.c in Sources */, + 7CC0042B1D121840003E68DC /* OutboundMulticast.cpp in Sources */, + 7CC003801D1217D1003E68DC /* init.c in Sources */, + 7CC0038A1D1217D1003E68DC /* tcp.c in Sources */, + 7CC004311D121840003E68DC /* SelfAwareness.cpp in Sources */, + 7CC003511D12178D003E68DC /* SDK_EthernetTap.cpp in Sources */, + 7CC0036A1D1217C3003E68DC /* netifapi.c in Sources */, + 7CC004261D121840003E68DC /* InetAddress.cpp in Sources */, + 7CC004301D121840003E68DC /* Salsa20.cpp in Sources */, + 7CC004331D121840003E68DC /* Switch.cpp in Sources */, + 7CC0039A1D1217DD003E68DC /* ip_addr.c in Sources */, + 7CC0042D1D121840003E68DC /* Path.cpp in Sources */, + 7CC0035C1D1217B2003E68DC /* lz4.c in Sources */, + 7CC003691D1217C3003E68DC /* netdb.c in Sources */, + 7CC0042F1D121840003E68DC /* Poly1305.cpp in Sources */, + 7CC0036C1D1217C3003E68DC /* tcpip.c in Sources */, + 7CC0037D1D1217D1003E68DC /* def.c in Sources */, + 7CC003541D12178D003E68DC /* SDK_RPC.c in Sources */, + 7CC003DD1D121833003E68DC /* Http.cpp in Sources */, + 7CC004271D121840003E68DC /* Multicaster.cpp in Sources */, + 7CC003521D12178D003E68DC /* SDK_Intercept.c in Sources */, + 7CC004281D121840003E68DC /* Network.cpp in Sources */, + 7CC003E01D121833003E68DC /* RoutingTable.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7CC0031E1D1216E3003E68DC /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 7CC004851D1318DA003E68DC /* lz4.c in Sources */, + 7CC004861D1318DA003E68DC /* http_parser.c in Sources */, + 7CC004621D131704003E68DC /* etharp.c in Sources */, + 7CC004631D131704003E68DC /* ethernetif.c in Sources */, + 7CC004641D131704003E68DC /* slipif.c in Sources */, + 7CC004651D131704003E68DC /* autoip.c in Sources */, + 7CC004661D131704003E68DC /* icmp.c in Sources */, + 7CC004671D131704003E68DC /* igmp.c in Sources */, + 7CC004681D131704003E68DC /* inet_chksum.c in Sources */, + 7CC004691D131704003E68DC /* inet.c in Sources */, + 7CC0046A1D131704003E68DC /* ip_addr.c in Sources */, + 7CC0046B1D131704003E68DC /* ip_frag.c in Sources */, + 7CC0046C1D131704003E68DC /* ip.c in Sources */, + 7CC0046D1D131704003E68DC /* def.c in Sources */, + 7CC0046E1D131704003E68DC /* dhcp.c in Sources */, + 7CC0046F1D131704003E68DC /* dns.c in Sources */, + 7CC004701D131704003E68DC /* init.c in Sources */, + 7CC004711D131704003E68DC /* mem.c in Sources */, + 7CC004721D131704003E68DC /* memp.c in Sources */, + 7CC004731D131704003E68DC /* netif.c in Sources */, + 7CC004741D131704003E68DC /* pbuf.c in Sources */, + 7CC004751D131704003E68DC /* raw.c in Sources */, + 7CC004761D131704003E68DC /* stats.c in Sources */, + 7CC004771D131704003E68DC /* sys.c in Sources */, + 7CC004781D131704003E68DC /* tcp_in.c in Sources */, + 7CC004791D131704003E68DC /* tcp_out.c in Sources */, + 7CC0047A1D131704003E68DC /* tcp.c in Sources */, + 7CC0047B1D131704003E68DC /* timers.c in Sources */, + 7CC0047C1D131704003E68DC /* udp.c in Sources */, + 7CC0047D1D131704003E68DC /* api_lib.c in Sources */, + 7CC0047E1D131704003E68DC /* api_msg.c in Sources */, + 7CC0047F1D131704003E68DC /* err.c in Sources */, + 7CC004801D131704003E68DC /* netbuf.c in Sources */, + 7CC004811D131704003E68DC /* netdb.c in Sources */, + 7CC004821D131704003E68DC /* netifapi.c in Sources */, + 7CC004831D131704003E68DC /* sockets.c in Sources */, + 7CC004841D131704003E68DC /* tcpip.c in Sources */, + 7CC004431D1316F5003E68DC /* ControlPlane.cpp in Sources */, + 7CC004441D1316F5003E68DC /* OneService.cpp in Sources */, + 7CC004451D1316F5003E68DC /* C25519.cpp in Sources */, + 7CC004461D1316F5003E68DC /* CertificateOfMembership.cpp in Sources */, + 7CC004471D1316F5003E68DC /* Cluster.cpp in Sources */, + 7CC004481D1316F5003E68DC /* DeferredPackets.cpp in Sources */, + 7CC004491D1316F5003E68DC /* Dictionary.cpp in Sources */, + 7CC0044A1D1316F5003E68DC /* Identity.cpp in Sources */, + 7CC0044B1D1316F5003E68DC /* IncomingPacket.cpp in Sources */, + 7CC0044C1D1316F5003E68DC /* InetAddress.cpp in Sources */, + 7CC0044D1D1316F5003E68DC /* Multicaster.cpp in Sources */, + 7CC0044E1D1316F5003E68DC /* Network.cpp in Sources */, + 7CC0044F1D1316F5003E68DC /* NetworkConfig.cpp in Sources */, + 7CC004501D1316F5003E68DC /* Node.cpp in Sources */, + 7CC004511D1316F5003E68DC /* OutboundMulticast.cpp in Sources */, + 7CC004521D1316F5003E68DC /* Packet.cpp in Sources */, + 7CC004531D1316F5003E68DC /* Path.cpp in Sources */, + 7CC004541D1316F5003E68DC /* Peer.cpp in Sources */, + 7CC004551D1316F5003E68DC /* Poly1305.cpp in Sources */, + 7CC004561D1316F5003E68DC /* Salsa20.cpp in Sources */, + 7CC004571D1316F5003E68DC /* SelfAwareness.cpp in Sources */, + 7CC004581D1316F5003E68DC /* SHA512.cpp in Sources */, + 7CC004591D1316F5003E68DC /* Switch.cpp in Sources */, + 7CC0045A1D1316F5003E68DC /* Topology.cpp in Sources */, + 7CC0045B1D1316F5003E68DC /* Utils.cpp in Sources */, + 7CC0045C1D1316F5003E68DC /* Arp.cpp in Sources */, + 7CC0045D1D1316F5003E68DC /* BackgroundResolver.cpp in Sources */, + 7CC0045E1D1316F5003E68DC /* Http.cpp in Sources */, + 7CC0045F1D1316F5003E68DC /* OSUtils.cpp in Sources */, + 7CC004601D1316F5003E68DC /* PortMapper.cpp in Sources */, + 7CC004611D1316F5003E68DC /* RoutingTable.cpp in Sources */, + 7CC0043C1D1316BF003E68DC /* SDK_Debug.c in Sources */, + 7CC0043D1D1316BF003E68DC /* SDK_EthernetTap.cpp in Sources */, + 7CC0043E1D1316BF003E68DC /* SDK_Intercept.c in Sources */, + 7CC0043F1D1316BF003E68DC /* SDK_Proxy.cpp in Sources */, + 7CC004401D1316BF003E68DC /* SDK_RPC.c in Sources */, + 7CC004411D1316BF003E68DC /* SDK_ServiceSetup.cpp in Sources */, + 7CC004421D1316BF003E68DC /* SDK_Sockets.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7CC0032B1D1216F8003E68DC /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 7CC004D21D131F76003E68DC /* ip_addr.c in Sources */, + 7CC004D01D131E37003E68DC /* lz4.c in Sources */, + 7CC004D11D131E37003E68DC /* http_parser.c in Sources */, + 7CC004AD1D131E2D003E68DC /* etharp.c in Sources */, + 7CC004AE1D131E2D003E68DC /* ethernetif.c in Sources */, + 7CC004AF1D131E2D003E68DC /* slipif.c in Sources */, + 7CC004B01D131E2D003E68DC /* autoip.c in Sources */, + 7CC004B11D131E2D003E68DC /* icmp.c in Sources */, + 7CC004B21D131E2D003E68DC /* igmp.c in Sources */, + 7CC004B31D131E2D003E68DC /* inet_chksum.c in Sources */, + 7CC004B41D131E2D003E68DC /* inet.c in Sources */, + 7CC004B61D131E2D003E68DC /* ip_frag.c in Sources */, + 7CC004B71D131E2D003E68DC /* ip.c in Sources */, + 7CC004B81D131E2D003E68DC /* def.c in Sources */, + 7CC004B91D131E2D003E68DC /* dhcp.c in Sources */, + 7CC004BA1D131E2D003E68DC /* dns.c in Sources */, + 7CC004BB1D131E2D003E68DC /* init.c in Sources */, + 7CC004BC1D131E2D003E68DC /* mem.c in Sources */, + 7CC004BD1D131E2D003E68DC /* memp.c in Sources */, + 7CC004BE1D131E2D003E68DC /* netif.c in Sources */, + 7CC004BF1D131E2D003E68DC /* pbuf.c in Sources */, + 7CC004C01D131E2D003E68DC /* raw.c in Sources */, + 7CC004C11D131E2D003E68DC /* stats.c in Sources */, + 7CC004C21D131E2D003E68DC /* sys.c in Sources */, + 7CC004C31D131E2D003E68DC /* tcp_in.c in Sources */, + 7CC004C41D131E2D003E68DC /* tcp_out.c in Sources */, + 7CC004C51D131E2D003E68DC /* tcp.c in Sources */, + 7CC004C61D131E2D003E68DC /* timers.c in Sources */, + 7CC004C71D131E2D003E68DC /* udp.c in Sources */, + 7CC004C81D131E2D003E68DC /* api_lib.c in Sources */, + 7CC004C91D131E2D003E68DC /* api_msg.c in Sources */, + 7CC004CA1D131E2D003E68DC /* err.c in Sources */, + 7CC004CB1D131E2D003E68DC /* netbuf.c in Sources */, + 7CC004CC1D131E2D003E68DC /* netdb.c in Sources */, + 7CC004CD1D131E2D003E68DC /* netifapi.c in Sources */, + 7CC004CE1D131E2D003E68DC /* sockets.c in Sources */, + 7CC004CF1D131E2D003E68DC /* tcpip.c in Sources */, + 7CC004871D131E21003E68DC /* SDK_Debug.c in Sources */, + 7CC004881D131E21003E68DC /* SDK_EthernetTap.cpp in Sources */, + 7CC004891D131E21003E68DC /* SDK_Intercept.c in Sources */, + 7CC0048A1D131E21003E68DC /* SDK_Proxy.cpp in Sources */, + 7CC0048B1D131E21003E68DC /* SDK_RPC.c in Sources */, + 7CC0048C1D131E21003E68DC /* SDK_ServiceSetup.cpp in Sources */, + 7CC0048D1D131E21003E68DC /* SDK_Sockets.c in Sources */, + 7CC0048E1D131E21003E68DC /* ControlPlane.cpp in Sources */, + 7CC0048F1D131E21003E68DC /* OneService.cpp in Sources */, + 7CC004901D131E21003E68DC /* C25519.cpp in Sources */, + 7CC004911D131E21003E68DC /* CertificateOfMembership.cpp in Sources */, + 7CC004921D131E21003E68DC /* Cluster.cpp in Sources */, + 7CC004931D131E21003E68DC /* DeferredPackets.cpp in Sources */, + 7CC004941D131E21003E68DC /* Dictionary.cpp in Sources */, + 7CC004951D131E21003E68DC /* Identity.cpp in Sources */, + 7CC004961D131E21003E68DC /* IncomingPacket.cpp in Sources */, + 7CC004971D131E21003E68DC /* InetAddress.cpp in Sources */, + 7CC004981D131E21003E68DC /* Multicaster.cpp in Sources */, + 7CC004991D131E21003E68DC /* Network.cpp in Sources */, + 7CC0049A1D131E21003E68DC /* NetworkConfig.cpp in Sources */, + 7CC0049B1D131E21003E68DC /* Node.cpp in Sources */, + 7CC0049C1D131E21003E68DC /* OutboundMulticast.cpp in Sources */, + 7CC0049D1D131E21003E68DC /* Packet.cpp in Sources */, + 7CC0049E1D131E21003E68DC /* Path.cpp in Sources */, + 7CC0049F1D131E21003E68DC /* Peer.cpp in Sources */, + 7CC004A01D131E21003E68DC /* Poly1305.cpp in Sources */, + 7CC004A11D131E21003E68DC /* Salsa20.cpp in Sources */, + 7CC004A21D131E21003E68DC /* SelfAwareness.cpp in Sources */, + 7CC004A31D131E21003E68DC /* SHA512.cpp in Sources */, + 7CC004A41D131E21003E68DC /* Switch.cpp in Sources */, + 7CC004A51D131E21003E68DC /* Topology.cpp in Sources */, + 7CC004A61D131E21003E68DC /* Utils.cpp in Sources */, + 7CC004A71D131E21003E68DC /* Arp.cpp in Sources */, + 7CC004A81D131E21003E68DC /* BackgroundResolver.cpp in Sources */, + 7CC004A91D131E21003E68DC /* Http.cpp in Sources */, + 7CC004AA1D131E21003E68DC /* OSUtils.cpp in Sources */, + 7CC004AB1D131E21003E68DC /* PortMapper.cpp in Sources */, + 7CC004AC1D131E21003E68DC /* RoutingTable.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7CC003381D121741003E68DC /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 7CC005201D1324B3003E68DC /* lz4.c in Sources */, + 7CC005211D1324B3003E68DC /* http_parser.c in Sources */, + 7CC004FD1D1324AB003E68DC /* etharp.c in Sources */, + 7CC004FE1D1324AB003E68DC /* ethernetif.c in Sources */, + 7CC004FF1D1324AB003E68DC /* slipif.c in Sources */, + 7CC005001D1324AB003E68DC /* autoip.c in Sources */, + 7CC005011D1324AB003E68DC /* icmp.c in Sources */, + 7CC005021D1324AB003E68DC /* igmp.c in Sources */, + 7CC005031D1324AB003E68DC /* inet_chksum.c in Sources */, + 7CC005041D1324AB003E68DC /* inet.c in Sources */, + 7CC005051D1324AB003E68DC /* ip_addr.c in Sources */, + 7CC005061D1324AB003E68DC /* ip_frag.c in Sources */, + 7CC005071D1324AB003E68DC /* ip.c in Sources */, + 7CC005081D1324AB003E68DC /* def.c in Sources */, + 7CC005091D1324AB003E68DC /* dhcp.c in Sources */, + 7CC0050A1D1324AB003E68DC /* dns.c in Sources */, + 7CC0050B1D1324AB003E68DC /* init.c in Sources */, + 7CC0050C1D1324AB003E68DC /* mem.c in Sources */, + 7CC0050D1D1324AB003E68DC /* memp.c in Sources */, + 7CC0050E1D1324AB003E68DC /* netif.c in Sources */, + 7CC0050F1D1324AB003E68DC /* pbuf.c in Sources */, + 7CC005101D1324AB003E68DC /* raw.c in Sources */, + 7CC005111D1324AB003E68DC /* stats.c in Sources */, + 7CC005121D1324AB003E68DC /* sys.c in Sources */, + 7CC005131D1324AB003E68DC /* tcp_in.c in Sources */, + 7CC005141D1324AB003E68DC /* tcp_out.c in Sources */, + 7CC005151D1324AB003E68DC /* tcp.c in Sources */, + 7CC005161D1324AB003E68DC /* timers.c in Sources */, + 7CC005171D1324AB003E68DC /* udp.c in Sources */, + 7CC005181D1324AB003E68DC /* api_lib.c in Sources */, + 7CC005191D1324AB003E68DC /* api_msg.c in Sources */, + 7CC0051A1D1324AB003E68DC /* err.c in Sources */, + 7CC0051B1D1324AB003E68DC /* netbuf.c in Sources */, + 7CC0051C1D1324AB003E68DC /* netdb.c in Sources */, + 7CC0051D1D1324AB003E68DC /* netifapi.c in Sources */, + 7CC0051E1D1324AB003E68DC /* sockets.c in Sources */, + 7CC0051F1D1324AB003E68DC /* tcpip.c in Sources */, + 7CC004DE1D1324A2003E68DC /* ControlPlane.cpp in Sources */, + 7CC004DF1D1324A2003E68DC /* OneService.cpp in Sources */, + 7CC004E01D1324A2003E68DC /* C25519.cpp in Sources */, + 7CC004E11D1324A2003E68DC /* CertificateOfMembership.cpp in Sources */, + 7CC004E21D1324A2003E68DC /* Cluster.cpp in Sources */, + 7CC004E31D1324A2003E68DC /* DeferredPackets.cpp in Sources */, + 7CC004E41D1324A2003E68DC /* Dictionary.cpp in Sources */, + 7CC004E51D1324A2003E68DC /* Identity.cpp in Sources */, + 7CC004E61D1324A2003E68DC /* IncomingPacket.cpp in Sources */, + 7CC004E71D1324A2003E68DC /* InetAddress.cpp in Sources */, + 7CC004E81D1324A2003E68DC /* Multicaster.cpp in Sources */, + 7CC004E91D1324A2003E68DC /* Network.cpp in Sources */, + 7CC004EA1D1324A2003E68DC /* NetworkConfig.cpp in Sources */, + 7CC004EB1D1324A2003E68DC /* Node.cpp in Sources */, + 7CC004EC1D1324A2003E68DC /* OutboundMulticast.cpp in Sources */, + 7CC004ED1D1324A2003E68DC /* Packet.cpp in Sources */, + 7CC004EE1D1324A2003E68DC /* Path.cpp in Sources */, + 7CC004EF1D1324A2003E68DC /* Peer.cpp in Sources */, + 7CC004F01D1324A2003E68DC /* Poly1305.cpp in Sources */, + 7CC004F11D1324A2003E68DC /* Salsa20.cpp in Sources */, + 7CC004F21D1324A2003E68DC /* SelfAwareness.cpp in Sources */, + 7CC004F31D1324A2003E68DC /* SHA512.cpp in Sources */, + 7CC004F41D1324A2003E68DC /* Switch.cpp in Sources */, + 7CC004F51D1324A2003E68DC /* Topology.cpp in Sources */, + 7CC004F61D1324A2003E68DC /* Utils.cpp in Sources */, + 7CC004F71D1324A2003E68DC /* Arp.cpp in Sources */, + 7CC004F81D1324A2003E68DC /* BackgroundResolver.cpp in Sources */, + 7CC004F91D1324A2003E68DC /* Http.cpp in Sources */, + 7CC004FA1D1324A2003E68DC /* OSUtils.cpp in Sources */, + 7CC004FB1D1324A2003E68DC /* PortMapper.cpp in Sources */, + 7CC004FC1D1324A2003E68DC /* RoutingTable.cpp in Sources */, + 7CC004D71D13247A003E68DC /* SDK_Debug.c in Sources */, + 7CC004D81D13247A003E68DC /* SDK_EthernetTap.cpp in Sources */, + 7CC004D91D13247A003E68DC /* SDK_Intercept.c in Sources */, + 7CC004DA1D13247A003E68DC /* SDK_Proxy.cpp in Sources */, + 7CC004DB1D13247A003E68DC /* SDK_RPC.c in Sources */, + 7CC004DC1D13247A003E68DC /* SDK_ServiceSetup.cpp in Sources */, + 7CC004DD1D13247A003E68DC /* SDK_Sockets.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + 7CC0030B1D12164D003E68DC /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.11; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 7CC0030C1D12164D003E68DC /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.11; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 7CC0031C1D1216B0003E68DC /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = ZeroTierSDK_Unity3D_iOS/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = "zerotier.ZeroTierSDK-Unity3D-iOS"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 7CC0031D1D1216B0003E68DC /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = ZeroTierSDK_Unity3D_iOS/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + PRODUCT_BUNDLE_IDENTIFIER = "zerotier.ZeroTierSDK-Unity3D-iOS"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; + 7CC003291D1216E3003E68DC /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../../../ext/lwip/src/include/ipv4/", + "$(SRCROOT)/../../../ext/lwip/src/include/", + "$(SRCROOT)/../../../zerotierone", + ); + INFOPLIST_FILE = ZeroTierSDK_iOS/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.3; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + OTHER_CFLAGS = ( + "-DZT_SDK_DEBUG", + "-DZT_SDK", + "-D__IOS__", + ); + PRODUCT_BUNDLE_IDENTIFIER = "zerotier.ZeroTierSDK-iOS"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 7CC0032A1D1216E3003E68DC /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../../../ext/lwip/src/include/ipv4/", + "$(SRCROOT)/../../../ext/lwip/src/include/", + "$(SRCROOT)/../../../zerotierone", + ); + INFOPLIST_FILE = ZeroTierSDK_iOS/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 9.3; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + OTHER_CFLAGS = ( + "-DZT_SDK_DEBUG", + "-DZT_SDK", + "-D__IOS__", + ); + PRODUCT_BUNDLE_IDENTIFIER = "zerotier.ZeroTierSDK-iOS"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 7CC003361D1216F8003E68DC /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + FRAMEWORK_VERSION = A; + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../../../zerotierone/", + "$(SRCROOT)/../../../ext/lwip/src/include/", + "$(SRCROOT)/../../../ext/lwip/src/include/ipv4/", + ); + INFOPLIST_FILE = ZeroTierSDK_OSX/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + OTHER_CFLAGS = ( + "-DZT_SDK", + "-DZT_SDK_DEBUG", + ); + PRODUCT_BUNDLE_IDENTIFIER = "zerotier.ZeroTierSDK-OSX"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + 7CC003371D1216F8003E68DC /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + FRAMEWORK_VERSION = A; + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../../../zerotierone/", + "$(SRCROOT)/../../../ext/lwip/src/include/", + "$(SRCROOT)/../../../ext/lwip/src/include/ipv4/", + ); + INFOPLIST_FILE = ZeroTierSDK_OSX/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + OTHER_CFLAGS = ( + "-DZT_SDK", + "-DZT_SDK_DEBUG", + ); + PRODUCT_BUNDLE_IDENTIFIER = "zerotier.ZeroTierSDK-OSX"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + }; + name = Release; + }; + 7CC003401D121742003E68DC /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../../../ext/lwip/src/include/ipv4/", + "$(SRCROOT)/../../../zerotierone", + "$(SRCROOT)/../../../ext/lwip/src/include/", + ); + INFOPLIST_FILE = ZeroTierSDK_Unity3D_OSX/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + OTHER_CFLAGS = ( + "-DZT_SDK_DEBUG", + "-DZT_SDK", + "-D__UNITY_3D__", + ); + PRODUCT_BUNDLE_IDENTIFIER = "zerotier.ZeroTierSDK-Unity3D-OSX"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 7CC003411D121742003E68DC /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + COMBINE_HIDPI_IMAGES = YES; + HEADER_SEARCH_PATHS = ( + "$(SRCROOT)/../../../ext/lwip/src/include/ipv4/", + "$(SRCROOT)/../../../zerotierone", + "$(SRCROOT)/../../../ext/lwip/src/include/", + ); + INFOPLIST_FILE = ZeroTierSDK_Unity3D_OSX/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + OTHER_CFLAGS = ( + "-DZT_SDK_DEBUG", + "-DZT_SDK", + "-D__UNITY_3D__", + ); + PRODUCT_BUNDLE_IDENTIFIER = "zerotier.ZeroTierSDK-Unity3D-OSX"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 7CC002FF1D12164D003E68DC /* Build configuration list for PBXProject "ZeroTierSDK_Apple" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7CC0030B1D12164D003E68DC /* Debug */, + 7CC0030C1D12164D003E68DC /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 7CC0031B1D1216B0003E68DC /* Build configuration list for PBXNativeTarget "ZeroTierSDK_Unity3D_iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7CC0031C1D1216B0003E68DC /* Debug */, + 7CC0031D1D1216B0003E68DC /* Release */, + ); + defaultConfigurationIsVisible = 0; + }; + 7CC003281D1216E3003E68DC /* Build configuration list for PBXNativeTarget "ZeroTierSDK_iOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7CC003291D1216E3003E68DC /* Debug */, + 7CC0032A1D1216E3003E68DC /* Release */, + ); + defaultConfigurationIsVisible = 0; + }; + 7CC003351D1216F8003E68DC /* Build configuration list for PBXNativeTarget "ZeroTierSDK_OSX" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7CC003361D1216F8003E68DC /* Debug */, + 7CC003371D1216F8003E68DC /* Release */, + ); + defaultConfigurationIsVisible = 0; + }; + 7CC0033F1D121742003E68DC /* Build configuration list for PBXNativeTarget "ZeroTierSDK_Unity3D_OSX" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7CC003401D121742003E68DC /* Debug */, + 7CC003411D121742003E68DC /* Release */, + ); + defaultConfigurationIsVisible = 0; + }; +/* End XCConfigurationList section */ + }; + rootObject = 7CC002FC1D12164D003E68DC /* Project object */; +} diff --git a/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..7e32231 --- /dev/null +++ b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.xcworkspace/xcuserdata/Joseph.xcuserdatad/UserInterfaceState.xcuserstate b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.xcworkspace/xcuserdata/Joseph.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000..96f4a97 Binary files /dev/null and b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/project.xcworkspace/xcuserdata/Joseph.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist new file mode 100644 index 0000000..fe2b454 --- /dev/null +++ b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -0,0 +1,5 @@ + + + diff --git a/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZeroTierSDK_OSX.xcscheme b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZeroTierSDK_OSX.xcscheme new file mode 100644 index 0000000..2347ba1 --- /dev/null +++ b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZeroTierSDK_OSX.xcscheme @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZeroTierSDK_Unity3D_OSX.xcscheme b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZeroTierSDK_Unity3D_OSX.xcscheme new file mode 100644 index 0000000..9f39e50 --- /dev/null +++ b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZeroTierSDK_Unity3D_OSX.xcscheme @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZeroTierSDK_Unity3D_iOS.xcscheme b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZeroTierSDK_Unity3D_iOS.xcscheme new file mode 100644 index 0000000..70130bd --- /dev/null +++ b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZeroTierSDK_Unity3D_iOS.xcscheme @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZeroTierSDK_iOS.xcscheme b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZeroTierSDK_iOS.xcscheme new file mode 100644 index 0000000..ac6a8e6 --- /dev/null +++ b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/ZeroTierSDK_iOS.xcscheme @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/xcschememanagement.plist b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..d7ccf77 --- /dev/null +++ b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Apple.xcodeproj/xcuserdata/Joseph.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,57 @@ + + + + + SchemeUserState + + ZeroTierSDK_OSX.xcscheme + + orderHint + 3 + + ZeroTierSDK_Unity3D_OSX.xcscheme + + orderHint + 4 + + ZeroTierSDK_Unity3D_iOS.xcscheme + + orderHint + 1 + + ZeroTierSDK_iOS.xcscheme + + orderHint + 2 + + + SuppressBuildableAutocreation + + 7CC003041D12164D003E68DC + + primary + + + 7CC003171D1216B0003E68DC + + primary + + + 7CC003221D1216E3003E68DC + + primary + + + 7CC0032F1D1216F8003E68DC + + primary + + + 7CC0033B1D121741003E68DC + + primary + + + + + diff --git a/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_OSX/Info.plist b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_OSX/Info.plist new file mode 100644 index 0000000..44f4d61 --- /dev/null +++ b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_OSX/Info.plist @@ -0,0 +1,28 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + NSHumanReadableCopyright + Copyright © 2016 ZeroTier Inc. All rights reserved. + NSPrincipalClass + + + diff --git a/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_OSX/ZeroTierSDK_OSX.h b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_OSX/ZeroTierSDK_OSX.h new file mode 100644 index 0000000..8325739 --- /dev/null +++ b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_OSX/ZeroTierSDK_OSX.h @@ -0,0 +1,19 @@ +// +// ZeroTierSDK_OSX.h +// ZeroTierSDK_OSX +// +// Created by Joseph Henry on 6/15/16. +// Copyright © 2016 ZeroTier Inc. All rights reserved. +// + +#import + +//! Project version number for ZeroTierSDK_OSX. +FOUNDATION_EXPORT double ZeroTierSDK_OSXVersionNumber; + +//! Project version string for ZeroTierSDK_OSX. +FOUNDATION_EXPORT const unsigned char ZeroTierSDK_OSXVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + + diff --git a/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Unity3D_OSX/Info.plist b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Unity3D_OSX/Info.plist new file mode 100644 index 0000000..a3ef5c8 --- /dev/null +++ b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Unity3D_OSX/Info.plist @@ -0,0 +1,28 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + NSHumanReadableCopyright + Copyright © 2016 ZeroTier Inc. All rights reserved. + NSPrincipalClass + + + diff --git a/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Unity3D_iOS/Info.plist b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Unity3D_iOS/Info.plist new file mode 100644 index 0000000..a3ef5c8 --- /dev/null +++ b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_Unity3D_iOS/Info.plist @@ -0,0 +1,28 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + NSHumanReadableCopyright + Copyright © 2016 ZeroTier Inc. All rights reserved. + NSPrincipalClass + + + diff --git a/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_iOS/Info.plist b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_iOS/Info.plist new file mode 100644 index 0000000..d3de8ee --- /dev/null +++ b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_iOS/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + NSPrincipalClass + + + diff --git a/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_iOS/ZeroTierSDK_iOS.h b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_iOS/ZeroTierSDK_iOS.h new file mode 100644 index 0000000..65f44c2 --- /dev/null +++ b/integrations/Apple_new/ZeroTierSDK_Apple/ZeroTierSDK_iOS/ZeroTierSDK_iOS.h @@ -0,0 +1,19 @@ +// +// ZeroTierSDK_iOS.h +// ZeroTierSDK_iOS +// +// Created by Joseph Henry on 6/15/16. +// Copyright © 2016 ZeroTier Inc. All rights reserved. +// + +#import + +//! Project version number for ZeroTierSDK_iOS. +FOUNDATION_EXPORT double ZeroTierSDK_iOSVersionNumber; + +//! Project version string for ZeroTierSDK_iOS. +FOUNDATION_EXPORT const unsigned char ZeroTierSDK_iOSVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + + diff --git a/integrations/Docker/README.md b/integrations/Docker/README.md index d7a4e4b..bfd4bf1 100644 --- a/integrations/Docker/README.md +++ b/integrations/Docker/README.md @@ -9,7 +9,7 @@ This short tutorial will show you how to enable ZeroTier functionality for your **Step 1: Build the ZeroTier service binaries** -From the ZeroTier source directory, `make netcon` Optionally, if you'd like to see some debug output during execution, use `make netcon NETCON_DEBUG=1` +From the ZeroTier source directory, `make netcon` Optionally, if you'd like to see some debug output during execution, use `make sdk ZT_SDK_DEBUG=1` **Step 2: Build your Docker image** diff --git a/integrations/Unity3D/Assembly-CSharp-Editor.csproj b/integrations/Unity3D/Assembly-CSharp-Editor.csproj new file mode 100644 index 0000000..3287151 --- /dev/null +++ b/integrations/Unity3D/Assembly-CSharp-Editor.csproj @@ -0,0 +1,109 @@ + + + + Debug + AnyCPU + 10.0.20506 + 2.0 + + {24F9E71C-1810-2FEA-B9CC-4258EB20D4CD} + Library + Properties + Assembly-CSharp-Editor + v3.5 + 512 + Assets + + + true + full + false + Temp\bin\Debug\ + DEBUG;TRACE;UNITY_5_3_OR_NEWER;UNITY_5_3_5;UNITY_5_3;UNITY_5;ENABLE_NEW_BUGREPORTER;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_DUCK_TYPING;ENABLE_FRAME_DEBUGGER;ENABLE_GENERICS;ENABLE_HOME_SCREEN;ENABLE_IMAGEEFFECTS;ENABLE_LIGHT_PROBES_LEGACY;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_PLUGIN_INSPECTOR;ENABLE_SHADOWS;ENABLE_SINGLE_INSTANCE_BUILD_SETTING;ENABLE_SPRITERENDERER_FLIPPING;ENABLE_SPRITES;ENABLE_SPRITE_POLYGON;ENABLE_TERRAIN;ENABLE_RAKNET;ENABLE_UNET;ENABLE_UNITYEVENTS;ENABLE_VR;ENABLE_WEBCAM;ENABLE_WWW;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_HUB;ENABLE_CLOUD_PROJECT_ID;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_METRICS;ENABLE_EDITOR_METRICS_CACHING;INCLUDE_DYNAMIC_GI;INCLUDE_GI;INCLUDE_IL2CPP;INCLUDE_DIRECTX12;PLATFORM_SUPPORTS_MONO;RENDER_SOFTWARE_CURSOR;ENABLE_LOCALIZATION;ENABLE_ANDROID_ATLAS_ETC1_COMPRESSION;ENABLE_EDITOR_TESTS_RUNNER;UNITY_STANDALONE_OSX;UNITY_STANDALONE;ENABLE_SUBSTANCE;ENABLE_GAMECENTER;ENABLE_TEXTUREID_MAP;ENABLE_RUNTIME_GI;ENABLE_MOVIES;ENABLE_NETWORK;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_LOG_MIXED_STACKTRACE;ENABLE_UNITYWEBREQUEST;ENABLE_CLUSTERINPUT;ENABLE_WEBSOCKET_HOST;ENABLE_MONO;ENABLE_PROFILER;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_OSX + prompt + 4 + 0169 + + + pdbonly + true + Temp\bin\Release\ + prompt + 4 + 0169 + + + + + + + + /Applications/Unity/Unity.app/Contents/Frameworks/Managed/UnityEngine.dll + + + /Applications/Unity/Unity.app/Contents/Frameworks/Managed/UnityEditor.dll + + + + + + + /Users/Joseph/ZeroTier-Unity3D-Test/Library/ScriptAssemblies/Assembly-UnityScript.dll + + + /Applications/Unity/Unity.app/Contents/UnityExtensions/Unity/Networking/UnityEngine.Networking.dll + + + /Applications/Unity/Unity.app/Contents/UnityExtensions/Unity/Networking/Editor/UnityEditor.Networking.dll + + + /Applications/Unity/Unity.app/Contents/UnityExtensions/Unity/GUISystem/UnityEngine.UI.dll + + + /Applications/Unity/Unity.app/Contents/UnityExtensions/Unity/GUISystem/Editor/UnityEditor.UI.dll + + + /Applications/Unity/Unity.app/Contents/UnityExtensions/Unity/Advertisements/Editor/UnityEditor.Advertisements.dll + + + /Applications/Unity/Unity.app/Contents/UnityExtensions/Unity/EditorTestsRunner/Editor/nunit.framework.dll + + + /Applications/Unity/Unity.app/Contents/UnityExtensions/Unity/EditorTestsRunner/Editor/UnityEditor.EditorTestsRunner.dll + + + /Applications/Unity/Unity.app/Contents/UnityExtensions/Unity/TreeEditor/Editor/UnityEditor.TreeEditor.dll + + + /Applications/Unity/Unity.app/Contents/Frameworks/Managed/UnityEditor.Graphs.dll + + + /Applications/Unity/PlaybackEngines/AndroidPlayer/UnityEditor.Android.Extensions.dll + + + /Applications/Unity/PlaybackEngines/iOSSupport/UnityEditor.iOS.Extensions.dll + + + /Applications/Unity/PlaybackEngines/MacStandaloneSupport/UnityEditor.OSXStandalone.Extensions.dll + + + /Applications/Unity/PlaybackEngines/iOSSupport/UnityEditor.iOS.Extensions.Xcode.dll + + + /Applications/Unity/PlaybackEngines/iOSSupport/UnityEditor.iOS.Extensions.Common.dll + + + + + {5AB900A8-5B14-044A-A52D-10417305A5D2} Assembly-CSharp + + + + + diff --git a/integrations/Unity3D/Assembly-CSharp.csproj b/integrations/Unity3D/Assembly-CSharp.csproj new file mode 100644 index 0000000..0f53ec6 --- /dev/null +++ b/integrations/Unity3D/Assembly-CSharp.csproj @@ -0,0 +1,85 @@ + + + + Debug + AnyCPU + 10.0.20506 + 2.0 + + {5AB900A8-5B14-044A-A52D-10417305A5D2} + Library + Properties + Assembly-CSharp + v3.5 + 512 + Assets + + + true + full + false + Temp\bin\Debug\ + DEBUG;TRACE;UNITY_5_3_OR_NEWER;UNITY_5_3_5;UNITY_5_3;UNITY_5;ENABLE_NEW_BUGREPORTER;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_DUCK_TYPING;ENABLE_FRAME_DEBUGGER;ENABLE_GENERICS;ENABLE_HOME_SCREEN;ENABLE_IMAGEEFFECTS;ENABLE_LIGHT_PROBES_LEGACY;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_PLUGIN_INSPECTOR;ENABLE_SHADOWS;ENABLE_SINGLE_INSTANCE_BUILD_SETTING;ENABLE_SPRITERENDERER_FLIPPING;ENABLE_SPRITES;ENABLE_SPRITE_POLYGON;ENABLE_TERRAIN;ENABLE_RAKNET;ENABLE_UNET;ENABLE_UNITYEVENTS;ENABLE_VR;ENABLE_WEBCAM;ENABLE_WWW;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_HUB;ENABLE_CLOUD_PROJECT_ID;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_METRICS;ENABLE_EDITOR_METRICS_CACHING;INCLUDE_DYNAMIC_GI;INCLUDE_GI;INCLUDE_IL2CPP;INCLUDE_DIRECTX12;PLATFORM_SUPPORTS_MONO;RENDER_SOFTWARE_CURSOR;ENABLE_LOCALIZATION;ENABLE_ANDROID_ATLAS_ETC1_COMPRESSION;ENABLE_EDITOR_TESTS_RUNNER;UNITY_STANDALONE_OSX;UNITY_STANDALONE;ENABLE_SUBSTANCE;ENABLE_GAMECENTER;ENABLE_TEXTUREID_MAP;ENABLE_RUNTIME_GI;ENABLE_MOVIES;ENABLE_NETWORK;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_LOG_MIXED_STACKTRACE;ENABLE_UNITYWEBREQUEST;ENABLE_CLUSTERINPUT;ENABLE_WEBSOCKET_HOST;ENABLE_MONO;ENABLE_PROFILER;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_OSX + prompt + 4 + 0169 + + + pdbonly + true + Temp\bin\Release\ + prompt + 4 + 0169 + + + + + + + + /Applications/Unity/Unity.app/Contents/Frameworks/Managed/UnityEngine.dll + + + /Applications/Unity/Unity.app/Contents/Frameworks/Managed/UnityEditor.dll + + + + + + + + + + + + + + + + + + + + + + + + + + /Applications/Unity/Unity.app/Contents/UnityExtensions/Unity/Networking/UnityEngine.Networking.dll + + + /Applications/Unity/Unity.app/Contents/UnityExtensions/Unity/GUISystem/UnityEngine.UI.dll + + + + + + diff --git a/integrations/Unity3D/Assets/CameraControl.js b/integrations/Unity3D/Assets/CameraControl.js new file mode 100644 index 0000000..5585fbf --- /dev/null +++ b/integrations/Unity3D/Assets/CameraControl.js @@ -0,0 +1,194 @@ + +var zoomSpeed : float = 3.0f; +var moveSpeed : float = 3.0f; +var rotateSpeed : float = 6.0f; + +var optionalMaterialForSelection : Material; + +// Some internal placeholders +private var orbitVector : GameObject; +private var materialForSelection : Material; +private var selectedObjects = new ArrayList(); +private var selectedObjectsMaterial = new ArrayList(); + +function Start() { + // Create a capsule (which will be the lookAt target and global orbit vector) + orbitVector = GameObject.CreatePrimitive(PrimitiveType.Capsule); + orbitVector.transform.position = Vector3.zero; + // Snap the camera to align with the grid in set starting position (otherwise everything gets a bit wonky) + transform.position = Vector3(4, 4, 4); + // Point the camera towards the capsule + transform.LookAt(orbitVector.transform.position, Vector3.up); + // Hide the capsule (disable the mesh renderer) + orbitVector.GetComponent.().enabled = false; + // Create material to apply for selections (or use material supplied by user) + if (optionalMaterialForSelection) { + materialForSelection = optionalMaterialForSelection; + } else { + materialForSelection = new Material(Shader.Find("Diffuse")); + materialForSelection.color = Color.green; + } +} + +function Update(){ + +orbitVector.transform.position = Vector3.zero; + + if (Input.GetAxis("Mouse ScrollWheel") < 0) { + var currentZoomSpeedin = -10; + transform.Translate(Vector3.forward * ( currentZoomSpeedin)); + } + if (Input.GetAxis("Mouse ScrollWheel") > 0) { + var currentZoomSpeedout = 10; + transform.Translate(Vector3.forward * ( currentZoomSpeedout)); + } +} + +// Call all of our functionality in LateUpdate() to avoid weird behaviour (as seen in Update()) +function LateUpdate() { + // Get mouse vectors + var x = Input.GetAxis("Mouse X"); + var y = Input.GetAxis("Mouse Y"); + + // ALT is pressed, start navigation + //if (Input.GetKey(KeyCode.RightAlt) || Input.GetKey(KeyCode.LeftAlt)) { + + // Distance between camera and orbitVector. We'll need this in a few places + var distanceToOrbit = Vector3.Distance(transform.position, orbitVector.transform.position); + + //RMB - ZOOM + if (Input.GetMouseButton(2)) { + + // Refine the rotateSpeed based on distance to orbitVector + var currentZoomSpeed = Mathf.Clamp(zoomSpeed * (distanceToOrbit / 50), 0.1f, 2.0f); + + // Move the camera in/out + transform.Translate(Vector3.forward * (x * currentZoomSpeed)); + + // If about to collide with the orbitVector, repulse the orbitVector slightly to keep it in front of us + if (Vector3.Distance(transform.position, orbitVector.transform.position) < 3) { + orbitVector.transform.Translate(Vector3.forward, transform); + } + + + //LMB - PIVOT + } else if (Input.GetMouseButton(1)) { + + // Refine the rotateSpeed based on distance to orbitVector + var currentRotateSpeed = Mathf.Clamp(rotateSpeed * (distanceToOrbit / 50), 1.0f, rotateSpeed); + + // Temporarily parent the camera to orbitVector and rotate orbitVector as desired + transform.parent = orbitVector.transform; + orbitVector.transform.Rotate(Vector3.right * (y * currentRotateSpeed)); + orbitVector.transform.Rotate(Vector3.up * (x * currentRotateSpeed), Space.World); + transform.parent = null; + + + //MMB - PAN + } else if (Input.GetMouseButton(0)) { + + // Calculate move speed + var translateX = Vector3.right * (x * moveSpeed) * -1; + var translateY = Vector3.up * (y * moveSpeed) * -1; + + // Move the camera + transform.Translate(translateX); + transform.Translate(translateY); + + // Move the orbitVector with the same values, along the camera's axes. In effect causing it to behave as if temporarily parented. + orbitVector.transform.Translate(translateX, transform); + orbitVector.transform.Translate(translateY, transform); + } + + + /* + // If we're not currently navigating, grab selection if something is clicked + } else if (Input.GetMouseButtonDown(0)) { + var hitInfo : RaycastHit; + var ray : Ray = camera.ScreenPointToRay(Input.mousePosition); + var allowMultiSelect : boolean = false; + + // See if the user is holding in CTRL or SHIFT. If so, enable multiselection + if(Input.GetKey(KeyCode.RightShift) || Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightControl) || Input.GetKey(KeyCode.LeftControl)) { + allowMultiSelect = true; + } + + // Something was clicked. Fetch. + if (Physics.Raycast(ray, hitInfo, camera.farClipPlane)) { + target = hitInfo.transform; + + // If NOT multiselection, remove all prior selections + if (!allowMultiSelect) { + deselectAll(); + } + + //Toggle between selected and unselected (depending on current state) + if (target.renderer.sharedMaterial != materialForSelection) { + selectedObjects.Add(target.gameObject); + selectedObjectsMaterial.Add(target.gameObject.renderer.sharedMaterial); + target.gameObject.renderer.sharedMaterial = materialForSelection; + + } else { + var arrayLocation : int = selectedObjects.IndexOf(target.gameObject); + if (arrayLocation == -1) {return;}; //this shouldn't happen. Ever. But still. + + target.gameObject.renderer.sharedMaterial = selectedObjectsMaterial[arrayLocation]; + selectedObjects.RemoveAt(arrayLocation); + selectedObjectsMaterial.RemoveAt(arrayLocation); + + } + + // Else deselect all selected objects (ie. click on empty background) + } else { + + // Don't deselect if allowMultiSelect is true + if (!allowMultiSelect) {deselectAll();}; + } + + + + // Fetch input of the F-button (focus) -- this is a very dodgy implementation... + } else if (Input.GetKeyDown("f")) { + var backtrack = Vector3(0, 0, -15); + var selectedObject : GameObject; + + // If dealing with only one selected object + if (selectedObjects.Count == 1) { + selectedObject = selectedObjects[0]; + transform.position = selectedObject.transform.position; + orbitVector.transform.position = selectedObject.transform.position; + transform.Translate(backtrack); + + // Else we need to average out the position vectors (this is the proper dodgy part of the implementation) + } else if (selectedObjects.Count > 1) { + selectedObject = selectedObjects[0]; + var average = selectedObject.transform.position; + + for (var i = 1; i < selectedObjects.Count; i++) { + selectedObject = selectedObjects[i]; + average = (average + selectedObject.transform.position) / 2; + } + + transform.position = average; + orbitVector.transform.position = average; + transform.Translate(backtrack); + } + } + */ +} + + + +// Function to handle the de-selection of all objects in scene +function deselectAll() { + + // Run through the list of selected objects and restore their original materials + for (var currentItem = 0; currentItem < selectedObjects.Count; currentItem++) { + var selectedObject : GameObject = selectedObjects[currentItem]; + selectedObject.GetComponent.().sharedMaterial = selectedObjectsMaterial[currentItem]; + } + + // Clear both arrays + selectedObjects.Clear(); + selectedObjectsMaterial.Clear(); +} \ No newline at end of file diff --git a/integrations/Unity3D/Assets/Demo.cs b/integrations/Unity3D/Assets/Demo.cs new file mode 100644 index 0000000..72b8032 --- /dev/null +++ b/integrations/Unity3D/Assets/Demo.cs @@ -0,0 +1,90 @@ +using UnityEngine; +using System.Collections; +using System.Threading; +using System.Runtime.Serialization.Formatters.Binary; +using System.IO; + +public class Demo : MonoBehaviour +{ + public float speed = 300f; + + private ZeroTierNetworkInterface zt; + string nwid = ""; + + private void zt_sample_network_test_thread() + { + print("test_network"); + + byte error; + // Prepare sample data buffer + /* + byte[] buffer = new byte[1024]; + Stream stream = new MemoryStream(buffer); + BinaryFormatter f = new BinaryFormatter(); + f.Serialize ( stream , "Welcome to the machine! (from Unity3D)" ); + int error; + */ + + // Connect to server + int connfd = zt.Connect (0, "172.22.211.245", 8888, out error); + print(connfd); + + // Send sample data to server + //int bytes_written = zt.Send(connfd,buffer,0, out error); + //print(bytes_written); + + char[] buffer = new char[1024]; + buffer = "hello".ToCharArray(); + //print (buffer); + //Stream stream = new MemoryStream(buffer); + //BinaryFormatter formatter = new BinaryFormatter(); + //formatter.Serialize(stream, "HelloServer"); + //int bufferSize = 1024; + + int bytes_written = zt.Send(connfd, "hello".ToCharArray(),4, out error); + print(bytes_written); + } + + public void zt_test_network() + { + Thread networkTestThread = new Thread(() => { zt_sample_network_test_thread();}); + networkTestThread.IsBackground = true; + networkTestThread.Start(); + } + + void Start() + { + // Create new instance of ZeroTier in separate thread + zt = new ZeroTierNetworkInterface ("/Users/Joseph/utest2"); + + /* This new instance will communicate via a named pipe, so any + * API calls (ZeroTier.Connect(), ZeroTier.Send(), etc) will be sent to the service + * via this pipe. + */ + } + + // Terminate the ZeroTier service when the application quits + void OnApplicationQuit() { + zt.Terminate (); + } + + // Update is called once per frame + void Update () { + + // Rotate ZTCube when ZT is running + /* + if (zt.IsRunning ()) { + GameObject go = GameObject.Find ("ZTCube"); + Vector3 rotvec = new Vector3 (10f, 10f, 10f); + go.transform.Rotate (rotvec, speed * Time.deltaTime); + } + */ + /* + GameObject go = GameObject.Find("ZTCube"); + Text text = go.GetComponents ()[0]; + if (text) { + text.text = IsRunning() ? "ZeroTier Status: Online" : "ZeroTier Status: Offline"; + } + */ + } +} \ No newline at end of file diff --git a/integrations/Unity3D/Assets/MainScene.unity b/integrations/Unity3D/Assets/MainScene.unity new file mode 100644 index 0000000..e1f3e57 Binary files /dev/null and b/integrations/Unity3D/Assets/MainScene.unity differ diff --git a/integrations/Unity3D/Assets/MyZeroTier.cs b/integrations/Unity3D/Assets/MyZeroTier.cs new file mode 100644 index 0000000..0286ab4 --- /dev/null +++ b/integrations/Unity3D/Assets/MyZeroTier.cs @@ -0,0 +1,8 @@ +using UnityEngine; +using System.Collections; + +public class MyZeroTier : MonoBehaviour { + void Start() { + Application.OpenURL("https://my.zerotier.com"); + } +} diff --git a/integrations/Unity3D/Assets/OBJ-IO/Editor.meta b/integrations/Unity3D/Assets/OBJ-IO/Editor.meta new file mode 100644 index 0000000..e4dbe3f --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Editor.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 4de3d2c20fafa4cb5a4d9fa9ff529971 +folderAsset: yes +timeCreated: 1465591252 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Editor/OBJEditor.cs b/integrations/Unity3D/Assets/OBJ-IO/Editor/OBJEditor.cs new file mode 100644 index 0000000..2dba06e --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Editor/OBJEditor.cs @@ -0,0 +1,50 @@ + +using System; +using System.IO; +using System.Collections; + +using UnityEngine; +using UnityEditor; + +using UnityExtension; + +public class OBJWindow : EditorWindow +{ + //------------------------------------------------------------------------------------------------------------ + private MeshFilter m_MeshFilter = null; + + //------------------------------------------------------------------------------------------------------------ + [MenuItem("OBJ-IO/OBJ Mesh Exporter")] + public static void Execute() + { + OBJWindow.GetWindow(); + } + + //------------------------------------------------------------------------------------------------------------ + private void OnGUI() + { + m_MeshFilter = (MeshFilter)EditorGUILayout.ObjectField("MeshFilter", m_MeshFilter, typeof(MeshFilter), true); + + if (m_MeshFilter != null) + { + if (GUILayout.Button("Export OBJ")) + { + var lOutputPath = EditorUtility.SaveFilePanel("Save Mesh as OBJ", "", m_MeshFilter.name + ".obj", "obj"); + + if (File.Exists(lOutputPath)) + { + File.Delete(lOutputPath); + } + + var lStream = new FileStream(lOutputPath, FileMode.Create); + var lOBJData = m_MeshFilter.sharedMesh.EncodeOBJ(); + OBJLoader.ExportOBJ(lOBJData, lStream); + lStream.Close(); + } + } + else + { + GUILayout.Label("Please provide a MeshFilter"); + } + } +} diff --git a/integrations/Unity3D/Assets/OBJ-IO/Editor/OBJEditor.cs.meta b/integrations/Unity3D/Assets/OBJ-IO/Editor/OBJEditor.cs.meta new file mode 100644 index 0000000..edb50dc --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Editor/OBJEditor.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 5cb377fb273c8634296cc421905b1d34 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Examples.meta b/integrations/Unity3D/Assets/OBJ-IO/Examples.meta new file mode 100644 index 0000000..b32fe9f --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Examples.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 85a0cef7e364f48d881582114249bfd1 +folderAsset: yes +timeCreated: 1465591252 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes.meta b/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes.meta new file mode 100644 index 0000000..e270850 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 1cec0b7c513af4f2985399042ae83c15 +folderAsset: yes +timeCreated: 1465591252 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Materials.meta b/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Materials.meta new file mode 100644 index 0000000..acf9487 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Materials.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d2f76706cb1d54b54801e02c996080eb +folderAsset: yes +timeCreated: 1465591253 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Materials/Cube_Instance_0Mat.mat b/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Materials/Cube_Instance_0Mat.mat new file mode 100644 index 0000000..30be487 Binary files /dev/null and b/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Materials/Cube_Instance_0Mat.mat differ diff --git a/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Materials/Cube_Instance_0Mat.mat.meta b/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Materials/Cube_Instance_0Mat.mat.meta new file mode 100644 index 0000000..bdbabbe --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Materials/Cube_Instance_0Mat.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9962569753c3d46ef836238f2aa6b33b +timeCreated: 1465591475 +licenseType: Free +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Materials/Teapot001Mat.mat b/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Materials/Teapot001Mat.mat new file mode 100644 index 0000000..9f3b9dc Binary files /dev/null and b/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Materials/Teapot001Mat.mat differ diff --git a/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Materials/Teapot001Mat.mat.meta b/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Materials/Teapot001Mat.mat.meta new file mode 100644 index 0000000..2cc6f76 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Materials/Teapot001Mat.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: de5cfcc17119041818768dc28e0c3e4b +timeCreated: 1465591253 +licenseType: Free +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Materials/Teapot001_Instance_0Mat.mat b/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Materials/Teapot001_Instance_0Mat.mat new file mode 100644 index 0000000..34de0dd Binary files /dev/null and b/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Materials/Teapot001_Instance_0Mat.mat differ diff --git a/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Materials/Teapot001_Instance_0Mat.mat.meta b/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Materials/Teapot001_Instance_0Mat.mat.meta new file mode 100644 index 0000000..1bfa660 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Materials/Teapot001_Instance_0Mat.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2c4a7e93244894f7ea111b89b950bb85 +timeCreated: 1465591814 +licenseType: Free +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Teapot.obj b/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Teapot.obj new file mode 100644 index 0000000..c4e58e1 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Teapot.obj @@ -0,0 +1,2354 @@ +# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware +# File Created: 06.03.2014 21:07:42 + +# +# object Teapot001 +# + +v 17.3454 -6.9354 33.2189 +v 18.7821 0.3405 33.2189 +v 19.0443 0.3405 32.2275 +v 17.5874 -7.0383 32.2275 +v 17.6261 -7.0548 33.5494 +v 19.0863 0.3405 33.5494 +v 18.1971 -7.2977 33.2189 +v 19.7053 0.3405 33.2189 +v 18.8261 -7.5654 32.2275 +v 20.3872 0.3405 32.2275 +v 13.4063 -12.8209 33.2189 +v 13.5925 -13.0071 32.2275 +v 13.6223 -13.0369 33.5494 +v 14.0618 -13.4764 33.2189 +v 14.5459 -13.9605 32.2275 +v 7.5208 -16.7600 33.2189 +v 7.6237 -17.0020 32.2275 +v 7.6402 -17.0407 33.5494 +v 7.8831 -17.6117 33.2189 +v 8.1508 -18.2407 32.2275 +v 0.2449 -18.1967 33.2189 +v 0.2449 -18.4589 32.2275 +v 0.2449 -18.5009 33.5494 +v 0.2449 -19.1199 33.2189 +v 0.2449 -19.8018 32.2275 +v -7.2460 -16.7600 33.2189 +v -7.6437 -17.0020 32.2275 +v -7.2140 -17.0407 33.5494 +v -7.4012 -17.6117 33.2189 +v -7.6609 -18.2407 32.2275 +v -13.1076 -12.8209 33.2189 +v -13.5558 -13.0071 32.2275 +v -13.1891 -13.0369 33.5494 +v -13.5790 -13.4764 33.2189 +v -14.0560 -13.9605 32.2275 +v -16.9272 -6.9354 33.2189 +v -17.2674 -7.0383 32.2275 +v -17.1574 -7.0548 33.5494 +v -17.7098 -7.2977 33.2189 +v -18.3362 -7.5654 32.2275 +v -18.2922 0.3405 33.2189 +v -18.5544 0.3405 32.2275 +v -18.5964 0.3405 33.5494 +v -19.2154 0.3405 33.2189 +v -19.8973 0.3405 32.2275 +v -16.8556 7.6163 33.2189 +v -17.0975 7.7192 32.2275 +v -17.1362 7.7357 33.5494 +v -17.7072 7.9786 33.2189 +v -18.3362 8.2463 32.2275 +v -12.9164 13.5018 33.2189 +v -13.1026 13.6880 32.2275 +v -13.1324 13.7178 33.5494 +v -13.5719 14.1573 33.2189 +v -14.0560 14.6414 32.2275 +v -7.0309 17.4410 33.2189 +v -7.1338 17.6829 32.2275 +v -7.1503 17.7216 33.5494 +v -7.3932 18.2926 33.2189 +v -7.6609 18.9216 32.2275 +v 0.2449 18.8776 33.2189 +v 0.2449 19.1399 32.2275 +v 0.2449 19.1818 33.5494 +v 0.2449 19.8008 33.2189 +v 0.2449 20.4827 32.2275 +v 7.5208 17.4410 33.2189 +v 7.6237 17.6829 32.2275 +v 7.6402 17.7216 33.5494 +v 7.8831 18.2926 33.2189 +v 8.1508 18.9216 32.2275 +v 13.4063 13.5018 33.2189 +v 13.5925 13.6880 32.2275 +v 13.6223 13.7178 33.5494 +v 14.0618 14.1573 33.2189 +v 14.5459 14.6414 32.2275 +v 17.3455 7.6163 33.2189 +v 17.5874 7.7192 32.2275 +v 17.6261 7.7357 33.5494 +v 18.1971 7.9786 33.2189 +v 18.8261 8.2463 32.2275 +v 21.1004 -8.5330 26.9559 +v 22.8525 0.3405 26.9559 +v 23.0843 -9.3771 21.7788 +v 25.0031 0.3405 21.7788 +v 24.4876 -9.9742 16.7904 +v 26.5242 0.3405 16.7904 +v 25.0199 -10.2006 12.0853 +v 27.1012 0.3405 12.0853 +v 16.2963 -15.7109 26.9559 +v 17.8232 -17.2378 21.7788 +v 18.9032 -18.3178 16.7904 +v 19.3129 -18.7275 12.0853 +v 9.1184 -20.5150 26.9559 +v 9.9625 -22.4989 21.7788 +v 10.5596 -23.9022 16.7904 +v 10.7860 -24.4345 12.0853 +v 0.2449 -22.2671 26.9559 +v 0.2449 -24.4177 21.7788 +v 0.2449 -25.9388 16.7904 +v 0.2449 -26.5158 12.0853 +v -8.6285 -20.5150 26.9559 +v -9.4726 -22.4989 21.7788 +v -10.0697 -23.9022 16.7904 +v -10.2961 -24.4345 12.0853 +v -15.8064 -15.7109 26.9559 +v -17.3333 -17.2378 21.7788 +v -18.4133 -18.3178 16.7904 +v -18.8230 -18.7275 12.0853 +v -20.6105 -8.5330 26.9559 +v -22.5944 -9.3771 21.7788 +v -23.9977 -9.9742 16.7904 +v -24.5300 -10.2006 12.0853 +v -22.3626 0.3405 26.9559 +v -24.5132 0.3405 21.7788 +v -26.0343 0.3405 16.7904 +v -26.6113 0.3405 12.0853 +v -20.6105 9.2139 26.9559 +v -22.5944 10.0580 21.7788 +v -23.9977 10.6551 16.7904 +v -24.5300 10.8815 12.0853 +v -15.8064 16.3918 26.9559 +v -17.3333 17.9187 21.7788 +v -18.4133 18.9988 16.7904 +v -18.8230 19.4084 12.0853 +v -8.6285 21.1959 26.9559 +v -9.4726 23.1798 21.7788 +v -10.0697 24.5831 16.7904 +v -10.2961 25.1154 12.0853 +v 0.2449 22.9480 26.9559 +v 0.2449 25.0986 21.7788 +v 0.2449 26.6197 16.7904 +v 0.2449 27.1967 12.0853 +v 9.1184 21.1959 26.9559 +v 9.9625 23.1798 21.7788 +v 10.5596 24.5831 16.7904 +v 10.7860 25.1154 12.0853 +v 16.2963 16.3918 26.9559 +v 17.8232 17.9187 21.7788 +v 18.9032 18.9988 16.7904 +v 19.3129 19.4084 12.0853 +v 21.1004 9.2139 26.9559 +v 23.0843 10.0580 21.7788 +v 24.4876 10.6551 16.7904 +v 25.0199 10.8815 12.0853 +v 24.0521 -9.7889 8.1041 +v 26.0522 0.3405 8.1041 +v 21.9230 -8.8830 5.1614 +v 23.7442 0.3405 5.1614 +v 19.7939 -7.9771 3.1630 +v 21.4362 0.3405 3.1630 +v 18.8261 -7.5654 2.0142 +v 20.3872 0.3405 2.0142 +v 18.5681 -17.9827 8.1041 +v 16.9294 -16.3440 5.1614 +v 15.2908 -14.7054 3.1630 +v 14.5459 -13.9605 2.0142 +v 10.3743 -23.4667 8.1041 +v 9.4684 -21.3376 5.1614 +v 8.5625 -19.2085 3.1630 +v 8.1508 -18.2407 2.0142 +v 0.2449 -25.4668 8.1041 +v 0.2449 -23.1588 5.1614 +v 0.2449 -20.8508 3.1630 +v 0.2449 -19.8018 2.0142 +v -9.8844 -23.4667 8.1041 +v -8.9785 -21.3376 5.1614 +v -8.0726 -19.2085 3.1630 +v -7.6609 -18.2407 2.0142 +v -18.0782 -17.9827 8.1041 +v -16.4395 -16.3440 5.1614 +v -14.8009 -14.7054 3.1630 +v -14.0560 -13.9605 2.0142 +v -23.5622 -9.7889 8.1041 +v -21.4331 -8.8830 5.1614 +v -19.3040 -7.9771 3.1630 +v -18.3362 -7.5654 2.0142 +v -25.5623 0.3405 8.1041 +v -23.2543 0.3405 5.1614 +v -20.9463 0.3405 3.1630 +v -19.8973 0.3405 2.0142 +v -23.5622 10.4698 8.1041 +v -21.4331 9.5639 5.1614 +v -19.3040 8.6580 3.1630 +v -18.3362 8.2463 2.0142 +v -18.0782 18.6636 8.1041 +v -16.4395 17.0249 5.1614 +v -14.8009 15.3863 3.1630 +v -14.0560 14.6414 2.0142 +v -9.8844 24.1476 8.1041 +v -8.9785 22.0185 5.1614 +v -8.0726 19.8894 3.1630 +v -7.6609 18.9216 2.0142 +v 0.2449 26.1477 8.1041 +v 0.2449 23.8397 5.1614 +v 0.2449 21.5317 3.1630 +v 0.2449 20.4827 2.0142 +v 10.3743 24.1476 8.1041 +v 9.4684 22.0185 5.1614 +v 8.5625 19.8894 3.1630 +v 8.1508 18.9216 2.0142 +v 18.5681 18.6636 8.1041 +v 16.9294 17.0249 5.1614 +v 15.2908 15.3863 3.1630 +v 14.5459 14.6414 2.0142 +v 24.0521 10.4698 8.1041 +v 21.9230 9.5639 5.1614 +v 19.7939 8.6580 3.1630 +v 18.8261 8.2463 2.0142 +v 18.4052 -7.3862 1.2746 +v 19.9308 0.3405 1.2746 +v 16.1551 -6.4289 0.6294 +v 17.4917 0.3405 0.6294 +v 10.5953 -4.0633 0.1731 +v 11.4648 0.3405 0.1731 +v 0.2449 0.3405 0.0000 +v 14.2219 -13.6365 1.2746 +v 12.4902 -11.9048 0.6294 +v 8.2110 -7.6256 0.1731 +v 7.9717 -17.8198 1.2746 +v 7.0143 -15.5697 0.6294 +v 4.6487 -10.0098 0.1731 +v 0.2449 -19.3454 1.2746 +v 0.2449 -16.9063 0.6294 +v 0.2449 -10.8794 0.1731 +v -7.4818 -17.8198 1.2746 +v -6.5244 -15.5697 0.6294 +v -4.1588 -10.0098 0.1731 +v -13.7320 -13.6365 1.2746 +v -12.0003 -11.9048 0.6294 +v -7.7211 -7.6256 0.1731 +v -17.9153 -7.3862 1.2746 +v -15.6652 -6.4289 0.6294 +v -10.1054 -4.0633 0.1731 +v -19.4409 0.3405 1.2746 +v -17.0018 0.3405 0.6294 +v -10.9749 0.3405 0.1731 +v -17.9153 8.0672 1.2746 +v -15.6652 7.1098 0.6294 +v -10.1054 4.7442 0.1731 +v -13.7320 14.3174 1.2746 +v -12.0003 12.5857 0.6294 +v -7.7211 8.3065 0.1731 +v -7.4818 18.5007 1.2746 +v -6.5244 16.2506 0.6294 +v -4.1588 10.6908 0.1731 +v 0.2449 20.0263 1.2746 +v 0.2449 17.5872 0.6294 +v 0.2449 11.5603 0.1731 +v 7.9717 18.5007 1.2746 +v 7.0143 16.2506 0.6294 +v 4.6487 10.6908 0.1731 +v 14.2219 14.3174 1.2746 +v 12.4902 12.5857 0.6294 +v 8.2110 8.3065 0.1731 +v 18.4052 8.0672 1.2746 +v 16.1551 7.1098 0.6294 +v 10.5953 4.7442 0.1731 +v -27.7004 -1.9255 27.6095 +v -27.5135 0.3405 27.1448 +v -21.2401 0.3405 27.1920 +v -21.0303 -1.9255 27.6641 +v -32.5963 -1.9255 27.2274 +v -32.1504 0.3405 26.8143 +v -35.6117 -1.9255 26.1903 +v -35.0249 0.3405 25.9174 +v -36.6405 -1.9255 24.1707 +v -36.0110 0.3405 24.1707 +v -28.1115 -2.6809 28.6318 +v -20.5687 -2.6809 28.7027 +v -33.5772 -2.6809 28.1362 +v -36.9027 -2.6809 26.7907 +v -38.0252 -2.6809 24.1707 +v -28.5226 -1.9255 29.6542 +v -20.1071 -1.9255 29.7412 +v -34.5581 -1.9255 29.0449 +v -38.1938 -1.9255 27.3911 +v -39.4100 -1.9255 24.1707 +v -28.7095 0.3405 30.1189 +v -19.8973 0.3405 30.2133 +v -35.0039 0.3405 29.4580 +v -38.7806 0.3405 27.6641 +v -40.0395 0.3405 24.1707 +v -28.5226 2.6065 29.6542 +v -20.1071 2.6065 29.7412 +v -34.5581 2.6065 29.0449 +v -38.1938 2.6065 27.3911 +v -39.4100 2.6065 24.1707 +v -28.1115 3.3618 28.6318 +v -20.5687 3.3618 28.7027 +v -33.5772 3.3618 28.1362 +v -36.9027 3.3618 26.7907 +v -38.0253 3.3618 24.1707 +v -27.7004 2.6065 27.6095 +v -21.0303 2.6065 27.6641 +v -32.5963 2.6065 27.2274 +v -35.6117 2.6065 26.1903 +v -36.6405 2.6065 24.1707 +v -36.0586 -1.9255 21.1683 +v -35.4865 0.3405 21.4326 +v -34.2355 -1.9255 17.7248 +v -33.8290 0.3405 18.1280 +v -31.0551 -1.9255 14.3255 +v -30.9125 0.3405 14.8234 +v -26.4015 -1.9255 11.4559 +v -37.3171 -2.6809 20.5868 +v -35.1298 -2.6809 16.8376 +v -31.3689 -2.6809 13.2301 +v -25.9399 -2.6809 10.0711 +v -38.5757 -1.9255 20.0053 +v -36.0241 -1.9255 15.9505 +v -31.6826 -1.9255 12.1347 +v -25.4783 -1.9255 8.6863 +v -39.1478 0.3405 19.7409 +v -36.4307 0.3405 15.5473 +v -31.8252 0.3405 11.6368 +v -25.2685 0.3405 8.0569 +v -38.5757 2.6065 20.0053 +v -36.0241 2.6065 15.9505 +v -31.6826 2.6065 12.1347 +v -25.4783 2.6065 8.6863 +v -37.3171 3.3618 20.5868 +v -35.1298 3.3618 16.8376 +v -31.3689 3.3618 13.2301 +v -25.9399 3.3618 10.0711 +v -36.0586 2.6065 21.1683 +v -34.2355 2.6065 17.7248 +v -31.0551 2.6065 14.3255 +v -26.4015 2.6065 11.4559 +v 30.0058 -4.1609 19.3308 +v 29.5141 0.3405 20.6143 +v 23.0728 0.3405 19.1351 +v 23.0728 -4.6447 17.4041 +v 32.9341 -3.0963 23.4232 +v 32.3046 0.3405 24.1707 +v 34.6034 -2.0318 28.2119 +v 33.8363 0.3405 28.4823 +v 37.7598 -1.5479 32.2275 +v 36.5009 0.3405 32.2275 +v 31.0877 -5.6613 16.5072 +v 23.0728 -6.3065 13.5960 +v 34.3189 -4.2419 21.7788 +v 36.2911 -2.8225 27.6169 +v 40.5294 -2.1773 32.2275 +v 32.1696 -4.1609 13.6835 +v 23.0728 -4.6447 9.7879 +v 35.7036 -3.0963 20.1343 +v 37.9788 -2.0318 27.0218 +v 43.2989 -1.5479 32.2275 +v 32.6613 0.3405 12.4001 +v 23.0728 0.3405 8.0569 +v 36.3331 0.3405 19.3869 +v 38.7459 0.3405 26.7514 +v 44.5578 0.3405 32.2275 +v 32.1696 4.8418 13.6835 +v 23.0728 5.3257 9.7879 +v 35.7036 3.7772 20.1343 +v 37.9788 2.7127 27.0218 +v 43.2989 2.2288 32.2275 +v 31.0877 6.3422 16.5072 +v 23.0728 6.9874 13.5960 +v 34.3189 4.9228 21.7788 +v 36.2911 3.5034 27.6169 +v 40.5294 2.8582 32.2275 +v 30.0058 4.8418 19.3308 +v 23.0728 5.3257 17.4041 +v 32.9341 3.7772 23.4232 +v 34.6034 2.7127 28.2119 +v 37.7598 2.2288 32.2275 +v 38.8143 -1.4299 32.8217 +v 37.4661 0.3405 32.7940 +v 39.4449 -1.1702 33.0271 +v 38.1794 0.3405 32.9829 +v 39.4637 -0.9106 32.8328 +v 38.3893 0.3405 32.7940 +v 38.6830 -0.7925 32.2275 +v 37.8437 0.3405 32.2275 +v 41.7804 -2.0200 32.8826 +v 42.2289 -1.6738 33.1245 +v 41.8276 -1.3276 32.9180 +v 40.5294 -1.1702 32.2275 +v 44.7465 -1.4299 32.9434 +v 45.0129 -1.1702 33.2219 +v 44.1915 -0.9106 33.0032 +v 42.3757 -0.7925 32.2275 +v 46.0947 0.3405 32.9711 +v 46.2783 0.3405 33.2661 +v 45.2659 0.3405 33.0419 +v 43.2150 0.3405 32.2275 +v 44.7465 2.1108 32.9434 +v 45.0129 1.8511 33.2219 +v 44.1915 1.5915 33.0032 +v 42.3757 1.4735 32.2275 +v 41.7804 2.7009 32.8826 +v 42.2289 2.3547 33.1245 +v 41.8276 2.0085 32.9180 +v 40.5294 1.8511 32.2275 +v 38.8143 2.1108 32.8217 +v 39.4449 1.8511 33.0271 +v 39.4637 1.5915 32.8328 +v 38.6830 1.4735 32.2275 +v 4.4660 -1.4596 41.6377 +v 4.8189 0.3405 41.6377 +v 0.2449 0.3405 42.2986 +v 4.2723 -1.3767 40.0326 +v 4.6091 0.3405 40.0326 +v 2.6843 -0.6988 38.0499 +v 2.8886 0.3405 38.0499 +v 2.7224 -0.7137 36.2560 +v 2.9306 0.3405 36.2560 +v 3.4967 -2.9113 41.6377 +v 3.3473 -2.7619 40.0326 +v 2.1234 -1.5380 38.0499 +v 2.1517 -1.5663 36.2560 +v 2.0450 -3.8806 41.6377 +v 1.9621 -3.6869 40.0326 +v 1.2842 -2.0989 38.0499 +v 1.2991 -2.1370 36.2560 +v 0.2449 -4.2335 41.6377 +v 0.2449 -4.0237 40.0326 +v 0.2449 -2.3032 38.0499 +v 0.2449 -2.3452 36.2560 +v -1.5551 -3.8806 41.6377 +v -1.4722 -3.6869 40.0326 +v -0.7943 -2.0989 38.0499 +v -0.8092 -2.1370 36.2560 +v -3.0068 -2.9113 41.6377 +v -2.8574 -2.7619 40.0326 +v -1.6335 -1.5380 38.0499 +v -1.6618 -1.5663 36.2560 +v -3.9761 -1.4596 41.6377 +v -3.7824 -1.3767 40.0326 +v -2.1944 -0.6988 38.0499 +v -2.2325 -0.7137 36.2560 +v -4.3290 0.3405 41.6377 +v -4.1192 0.3405 40.0326 +v -2.3987 0.3405 38.0499 +v -2.4407 0.3405 36.2560 +v -3.9761 2.1405 41.6377 +v -3.7824 2.0576 40.0326 +v -2.1944 1.3797 38.0499 +v -2.2325 1.3946 36.2560 +v -3.0068 3.5922 41.6377 +v -2.8574 3.4428 40.0326 +v -1.6335 2.2189 38.0499 +v -1.6618 2.2473 36.2560 +v -1.5551 4.5615 41.6377 +v -1.4722 4.3678 40.0326 +v -0.7943 2.7798 38.0499 +v -0.8092 2.8179 36.2560 +v 0.2449 4.9144 41.6377 +v 0.2449 4.7046 40.0326 +v 0.2449 2.9841 38.0499 +v 0.2449 3.0261 36.2560 +v 2.0450 4.5615 41.6377 +v 1.9621 4.3678 40.0326 +v 1.2842 2.7798 38.0499 +v 1.2991 2.8179 36.2560 +v 3.4967 3.5922 41.6377 +v 3.3473 3.4428 40.0326 +v 2.1234 2.2189 38.0499 +v 2.1517 2.2473 36.2560 +v 4.4660 2.1405 41.6377 +v 4.2723 2.0576 40.0326 +v 2.6843 1.3797 38.0499 +v 2.7224 1.3946 36.2560 +v 5.8967 -2.0642 35.0600 +v 6.3715 0.3405 35.0600 +v 10.4646 -4.0077 34.2418 +v 11.3232 0.3405 34.2418 +v 14.5679 -5.7536 33.4235 +v 15.7712 0.3405 33.4235 +v 16.3486 -6.5113 32.2275 +v 17.7015 0.3405 32.2275 +v 4.5948 -4.0094 35.0600 +v 8.1105 -7.5251 34.2418 +v 11.2686 -10.6832 33.4235 +v 12.6391 -12.0537 32.2275 +v 2.6496 -5.3113 35.0600 +v 4.5931 -9.8792 34.2418 +v 6.3390 -13.9825 33.4235 +v 7.0967 -15.7632 32.2275 +v 0.2449 -5.7861 35.0600 +v 0.2449 -10.7378 34.2418 +v 0.2449 -15.1858 33.4235 +v 0.2449 -17.1161 32.2275 +v -2.1597 -5.3113 35.0600 +v -4.1033 -9.8792 34.2418 +v -5.8491 -13.9825 33.4235 +v -6.6068 -15.7632 32.2275 +v -4.1049 -4.0094 35.0600 +v -7.6206 -7.5251 34.2418 +v -10.7787 -10.6832 33.4235 +v -12.1492 -12.0537 32.2275 +v -5.4068 -2.0642 35.0600 +v -9.9747 -4.0077 34.2418 +v -14.0781 -5.7536 33.4235 +v -15.8587 -6.5113 32.2275 +v -5.8816 0.3405 35.0600 +v -10.8333 0.3405 34.2418 +v -15.2813 0.3405 33.4235 +v -17.2116 0.3405 32.2275 +v -5.4068 2.7451 35.0600 +v -9.9747 4.6887 34.2418 +v -14.0781 6.4345 33.4235 +v -15.8587 7.1922 32.2275 +v -4.1049 4.6903 35.0600 +v -7.6206 8.2060 34.2418 +v -10.7787 11.3641 33.4235 +v -12.1492 12.7346 32.2275 +v -2.1597 5.9922 35.0600 +v -4.1033 10.5601 34.2418 +v -5.8491 14.6635 33.4235 +v -6.6068 16.4442 32.2275 +v 0.2449 6.4670 35.0600 +v 0.2449 11.4187 34.2418 +v 0.2449 15.8667 33.4235 +v 0.2449 17.7970 32.2275 +v 2.6496 5.9922 35.0600 +v 4.5931 10.5601 34.2418 +v 6.3390 14.6635 33.4235 +v 7.0967 16.4442 32.2275 +v 4.5948 4.6903 35.0600 +v 8.1105 8.2060 34.2418 +v 11.2686 11.3641 33.4235 +v 12.6391 12.7346 32.2275 +v 5.8967 2.7451 35.0600 +v 10.4646 4.6887 34.2418 +v 14.5679 6.4345 33.4235 +v 16.3486 7.1922 32.2275 +# 529 vertices + +vn -0.8934 0.3691 0.2560 +vn -0.9668 0.0000 0.2554 +vn -0.9667 0.0000 -0.2558 +vn -0.8930 0.3699 -0.2563 +vn -0.0839 0.0355 0.9958 +vn -0.0921 0.0000 0.9958 +vn 0.6297 -0.2604 0.7319 +vn 0.6820 -0.0000 0.7313 +vn 0.8037 -0.3326 0.4934 +vn 0.8703 -0.0000 0.4925 +vn -0.6835 0.6835 0.2561 +vn -0.6834 0.6834 -0.2567 +vn -0.0649 0.0649 0.9958 +vn 0.4814 -0.4814 0.7325 +vn 0.6148 -0.6148 0.4940 +vn -0.3691 0.8934 0.2560 +vn -0.3699 0.8930 -0.2563 +vn -0.0355 0.0839 0.9958 +vn 0.2604 -0.6297 0.7319 +vn 0.3326 -0.8037 0.4934 +vn -0.0019 0.9670 0.2547 +vn -0.0028 0.9662 -0.2579 +vn -0.0003 0.0923 0.9957 +vn 0.0000 -0.6821 0.7313 +vn -0.0000 -0.8703 0.4925 +vn 0.3771 0.9141 0.1491 +vn 0.3791 0.8528 -0.3593 +vn 0.0275 0.1226 0.9921 +vn -0.2610 -0.6354 0.7268 +vn -0.3325 -0.8043 0.4925 +vn 0.7127 0.6976 0.0737 +vn 0.6635 0.6253 -0.4108 +vn 0.0997 0.1220 0.9875 +vn -0.4873 -0.4886 0.7238 +vn -0.6152 -0.6155 0.4926 +vn 0.9173 0.3615 0.1671 +vn 0.8800 0.3387 -0.3329 +vn 0.1136 0.0481 0.9924 +vn -0.6341 -0.2619 0.7275 +vn -0.8041 -0.3327 0.4926 +vn 0.9674 -0.0081 0.2530 +vn 0.9667 -0.0105 -0.2557 +vn 0.0934 -0.0013 0.9956 +vn -0.6822 0.0003 0.7312 +vn -0.8703 0.0001 0.4925 +vn 0.8934 -0.3691 0.2560 +vn 0.8930 -0.3699 -0.2563 +vn 0.0839 -0.0355 0.9958 +vn -0.6297 0.2604 0.7319 +vn -0.8037 0.3326 0.4934 +vn 0.6835 -0.6835 0.2561 +vn 0.6834 -0.6834 -0.2567 +vn 0.0649 -0.0649 0.9958 +vn -0.4814 0.4814 0.7325 +vn -0.6148 0.6148 0.4940 +vn 0.3691 -0.8934 0.2560 +vn 0.3699 -0.8930 -0.2563 +vn 0.0355 -0.0839 0.9958 +vn -0.2604 0.6297 0.7319 +vn -0.3326 0.8037 0.4934 +vn -0.0000 -0.9668 0.2554 +vn -0.0000 -0.9667 -0.2558 +vn -0.0000 -0.0921 0.9958 +vn 0.0000 0.6820 0.7313 +vn 0.0000 0.8703 0.4925 +vn -0.3691 -0.8934 0.2560 +vn -0.3699 -0.8930 -0.2563 +vn -0.0355 -0.0839 0.9958 +vn 0.2604 0.6297 0.7319 +vn 0.3326 0.8037 0.4934 +vn -0.6835 -0.6835 0.2561 +vn -0.6834 -0.6834 -0.2567 +vn -0.0649 -0.0649 0.9958 +vn 0.4814 0.4814 0.7325 +vn 0.6148 0.6148 0.4940 +vn -0.8934 -0.3691 0.2560 +vn -0.8930 -0.3699 -0.2563 +vn -0.0839 -0.0355 0.9958 +vn 0.6297 0.2604 0.7319 +vn 0.8037 0.3326 0.4934 +vn 0.8454 -0.3498 0.4035 +vn 0.9153 -0.0000 0.4027 +vn 0.8700 -0.3600 0.3369 +vn 0.9418 -0.0000 0.3362 +vn 0.9042 -0.3743 0.2058 +vn 0.9787 -0.0000 0.2053 +vn 0.9219 -0.3818 -0.0664 +vn 0.9978 0.0000 -0.0662 +vn 0.6468 -0.6468 0.4041 +vn 0.6657 -0.6657 0.3374 +vn 0.6919 -0.6919 0.2061 +vn 0.7055 -0.7055 -0.0665 +vn 0.3498 -0.8454 0.4035 +vn 0.3600 -0.8700 0.3369 +vn 0.3743 -0.9042 0.2058 +vn 0.3818 -0.9219 -0.0664 +vn -0.0000 -0.9153 0.4027 +vn -0.0000 -0.9418 0.3362 +vn 0.0000 -0.9787 0.2053 +vn -0.0000 -0.9978 -0.0662 +vn -0.3498 -0.8454 0.4035 +vn -0.3600 -0.8700 0.3369 +vn -0.3743 -0.9042 0.2058 +vn -0.3818 -0.9219 -0.0664 +vn -0.6468 -0.6468 0.4041 +vn -0.6657 -0.6657 0.3374 +vn -0.6919 -0.6919 0.2061 +vn -0.7055 -0.7055 -0.0665 +vn -0.8454 -0.3498 0.4035 +vn -0.8700 -0.3600 0.3369 +vn -0.9042 -0.3743 0.2058 +vn -0.9219 -0.3818 -0.0664 +vn -0.9153 0.0000 0.4027 +vn -0.9418 0.0000 0.3362 +vn -0.9787 -0.0000 0.2053 +vn -0.9978 -0.0000 -0.0662 +vn -0.8454 0.3498 0.4035 +vn -0.8700 0.3600 0.3369 +vn -0.9042 0.3743 0.2058 +vn -0.9219 0.3818 -0.0664 +vn -0.6468 0.6468 0.4041 +vn -0.6657 0.6657 0.3374 +vn -0.6919 0.6919 0.2061 +vn -0.7055 0.7055 -0.0665 +vn -0.3498 0.8454 0.4035 +vn -0.3600 0.8700 0.3369 +vn -0.3743 0.9042 0.2058 +vn -0.3818 0.9219 -0.0664 +vn 0.0000 0.9153 0.4027 +vn 0.0000 0.9418 0.3362 +vn -0.0000 0.9787 0.2053 +vn 0.0000 0.9978 -0.0662 +vn 0.3498 0.8454 0.4035 +vn 0.3600 0.8700 0.3369 +vn 0.3743 0.9042 0.2058 +vn 0.3818 0.9219 -0.0664 +vn 0.6468 0.6468 0.4041 +vn 0.6657 0.6657 0.3374 +vn 0.6919 0.6919 0.2061 +vn 0.7055 0.7055 -0.0665 +vn 0.8454 0.3498 0.4035 +vn 0.8700 0.3600 0.3369 +vn 0.9042 0.3743 0.2058 +vn 0.9219 0.3818 -0.0664 +vn 0.8314 -0.3442 -0.4362 +vn 0.9002 0.0000 -0.4355 +vn 0.6735 -0.2786 -0.6847 +vn 0.7296 0.0000 -0.6839 +vn 0.6404 -0.2649 -0.7209 +vn 0.6940 -0.0000 -0.7200 +vn 0.7329 -0.3032 -0.6090 +vn 0.7939 -0.0000 -0.6080 +vn 0.6361 -0.6361 -0.4368 +vn 0.5150 -0.5150 -0.6853 +vn 0.4897 -0.4897 -0.7214 +vn 0.5606 -0.5606 -0.6096 +vn 0.3442 -0.8314 -0.4362 +vn 0.2786 -0.6735 -0.6847 +vn 0.2649 -0.6404 -0.7209 +vn 0.3032 -0.7329 -0.6090 +vn 0.0000 -0.9002 -0.4355 +vn 0.0000 -0.7296 -0.6839 +vn -0.0000 -0.6940 -0.7200 +vn -0.0000 -0.7939 -0.6080 +vn -0.3442 -0.8314 -0.4362 +vn -0.2786 -0.6735 -0.6847 +vn -0.2649 -0.6404 -0.7209 +vn -0.3032 -0.7329 -0.6090 +vn -0.6361 -0.6361 -0.4368 +vn -0.5150 -0.5150 -0.6853 +vn -0.4897 -0.4897 -0.7214 +vn -0.5606 -0.5606 -0.6096 +vn -0.8314 -0.3442 -0.4362 +vn -0.6735 -0.2786 -0.6847 +vn -0.6404 -0.2649 -0.7209 +vn -0.7329 -0.3032 -0.6090 +vn -0.9002 -0.0000 -0.4355 +vn -0.7296 -0.0000 -0.6839 +vn -0.6940 0.0000 -0.7200 +vn -0.7939 0.0000 -0.6080 +vn -0.8314 0.3442 -0.4362 +vn -0.6735 0.2786 -0.6847 +vn -0.6404 0.2649 -0.7209 +vn -0.7329 0.3032 -0.6090 +vn -0.6361 0.6361 -0.4368 +vn -0.5150 0.5150 -0.6853 +vn -0.4897 0.4897 -0.7214 +vn -0.5606 0.5606 -0.6096 +vn -0.3442 0.8314 -0.4362 +vn -0.2786 0.6735 -0.6847 +vn -0.2649 0.6404 -0.7209 +vn -0.3032 0.7329 -0.6090 +vn -0.0000 0.9002 -0.4355 +vn -0.0000 0.7296 -0.6839 +vn 0.0000 0.6940 -0.7200 +vn 0.0000 0.7939 -0.6080 +vn 0.3442 0.8314 -0.4362 +vn 0.2786 0.6735 -0.6847 +vn 0.2649 0.6404 -0.7209 +vn 0.3032 0.7329 -0.6090 +vn 0.6361 0.6361 -0.4368 +vn 0.5150 0.5150 -0.6853 +vn 0.4897 0.4897 -0.7214 +vn 0.5606 0.5606 -0.6096 +vn 0.8314 0.3442 -0.4362 +vn 0.6735 0.2786 -0.6847 +vn 0.6404 0.2649 -0.7209 +vn 0.7329 0.3032 -0.6090 +vn 0.5762 -0.2382 -0.7818 +vn 0.6239 0.0000 -0.7815 +vn 0.1636 -0.0675 -0.9842 +vn 0.1773 0.0000 -0.9842 +vn 0.0454 -0.0187 -0.9988 +vn 0.0492 0.0000 -0.9988 +vn 0.0000 0.0000 -1.0000 +vn 0.4404 -0.4404 -0.7823 +vn 0.1249 -0.1249 -0.9843 +vn 0.0347 -0.0347 -0.9988 +vn 0.2382 -0.5762 -0.7818 +vn 0.0675 -0.1636 -0.9842 +vn 0.0187 -0.0454 -0.9988 +vn 0.0000 -0.6239 -0.7815 +vn 0.0000 -0.1773 -0.9842 +vn 0.0000 -0.0492 -0.9988 +vn -0.2382 -0.5762 -0.7818 +vn -0.0675 -0.1636 -0.9842 +vn -0.0187 -0.0454 -0.9988 +vn -0.4404 -0.4404 -0.7823 +vn -0.1249 -0.1249 -0.9843 +vn -0.0347 -0.0347 -0.9988 +vn -0.5762 -0.2382 -0.7818 +vn -0.1636 -0.0675 -0.9842 +vn -0.0454 -0.0187 -0.9988 +vn -0.6239 -0.0000 -0.7815 +vn -0.1773 -0.0000 -0.9842 +vn -0.0492 -0.0000 -0.9988 +vn -0.5762 0.2382 -0.7818 +vn -0.1636 0.0675 -0.9842 +vn -0.0454 0.0187 -0.9988 +vn -0.4404 0.4404 -0.7823 +vn -0.1249 0.1249 -0.9843 +vn -0.0347 0.0347 -0.9988 +vn -0.2382 0.5762 -0.7818 +vn -0.0675 0.1636 -0.9842 +vn -0.0187 0.0454 -0.9988 +vn -0.0000 0.6239 -0.7815 +vn -0.0000 0.1773 -0.9842 +vn -0.0000 0.0492 -0.9988 +vn 0.2382 0.5762 -0.7818 +vn 0.0675 0.1636 -0.9842 +vn 0.0187 0.0454 -0.9988 +vn 0.4404 0.4404 -0.7823 +vn 0.1249 0.1249 -0.9843 +vn 0.0347 0.0347 -0.9988 +vn 0.5762 0.2382 -0.7818 +vn 0.1636 0.0675 -0.9842 +vn 0.0454 0.0187 -0.9988 +vn 0.0361 -0.5456 -0.8373 +vn 0.0391 0.0010 -0.9992 +vn 0.0078 0.0002 -1.0000 +vn 0.0070 -0.5829 -0.8125 +vn 0.1618 -0.5630 -0.8104 +vn 0.1795 0.0044 -0.9837 +vn 0.4824 -0.6427 -0.5951 +vn 0.6123 0.0105 -0.7906 +vn 0.7387 -0.6642 -0.1146 +vn 0.9862 0.0067 -0.1657 +vn 0.0028 -0.9998 0.0171 +vn -0.0019 -0.9868 0.1621 +vn 0.0105 -0.9972 0.0734 +vn -0.0660 -0.9893 0.1301 +vn -0.0944 -0.9954 0.0166 +vn -0.0486 -0.5395 0.8406 +vn -0.0092 -0.4903 0.8715 +vn -0.2233 -0.5527 0.8029 +vn -0.5964 -0.5751 0.5600 +vn -0.8033 -0.5916 0.0682 +vn -0.0588 -0.0007 0.9983 +vn -0.0106 -0.0001 0.9999 +vn -0.2807 -0.0033 0.9598 +vn -0.7497 -0.0043 0.6617 +vn -0.9974 -0.0021 0.0727 +vn -0.0465 0.5388 0.8412 +vn -0.0088 0.4903 0.8715 +vn -0.2179 0.5492 0.8068 +vn -0.5973 0.5741 0.5600 +vn -0.8040 0.5913 0.0629 +vn 0.0020 0.9999 0.0146 +vn -0.0018 0.9868 0.1617 +vn 0.0092 0.9982 0.0601 +vn -0.0593 0.9917 0.1139 +vn -0.0869 0.9961 0.0123 +vn 0.0338 0.5454 -0.8375 +vn 0.0064 0.5831 -0.8124 +vn 0.1571 0.5622 -0.8119 +vn 0.4844 0.6465 -0.5894 +vn 0.7389 0.6662 -0.1013 +vn 0.7256 -0.6374 0.2594 +vn 0.9465 0.0034 0.3227 +vn 0.6459 -0.6077 0.4620 +vn 0.8258 0.0075 0.5639 +vn 0.5316 -0.5586 0.6367 +vn 0.6500 0.0069 0.7599 +vn 0.4250 -0.5955 0.6817 +vn 0.5324 0.0052 0.8465 +vn -0.0496 -0.9986 -0.0198 +vn -0.0378 -0.9986 -0.0356 +vn -0.0379 -0.9986 -0.0365 +vn -0.1689 -0.9395 -0.2979 +vn -0.7423 -0.5995 -0.2992 +vn -0.6196 -0.5795 -0.5294 +vn -0.4837 -0.5438 -0.6858 +vn -0.4453 -0.4132 -0.7944 +vn -0.9265 -0.0020 -0.3763 +vn -0.7539 -0.0043 -0.6570 +vn -0.5662 -0.0035 -0.8242 +vn -0.4818 -0.0019 -0.8763 +vn -0.7447 0.5990 -0.2944 +vn -0.6219 0.5782 -0.5281 +vn -0.4812 0.5428 -0.6883 +vn -0.4381 0.4157 -0.7970 +vn -0.0443 0.9989 -0.0171 +vn -0.0262 0.9993 -0.0282 +vn -0.0253 0.9993 -0.0283 +vn -0.1575 0.9442 -0.2894 +vn 0.7282 0.6371 0.2524 +vn 0.6471 0.6083 0.4597 +vn 0.5230 0.5622 0.6407 +vn 0.4100 0.6047 0.6829 +vn -0.3167 -0.7021 0.6378 +vn -0.5489 0.0015 0.8359 +vn -0.2308 0.0065 0.9730 +vn -0.1529 -0.7102 0.6872 +vn -0.6011 -0.6453 0.4715 +vn -0.8757 -0.0099 0.4828 +vn -0.6359 -0.6298 0.4461 +vn -0.8776 -0.0191 0.4791 +vn -0.4357 -0.6700 0.6010 +vn -0.6962 -0.0245 0.7174 +vn 0.2233 -0.9747 0.0065 +vn 0.1111 -0.9902 -0.0851 +vn 0.1901 -0.9695 0.1550 +vn 0.0053 -0.9819 0.1895 +vn -0.0118 -0.9690 0.2467 +vn 0.5725 -0.5916 -0.5677 +vn 0.3439 -0.5994 -0.7228 +vn 0.7874 -0.5605 -0.2565 +vn 0.6471 -0.6981 -0.3064 +vn 0.4275 -0.7536 -0.4993 +vn 0.6715 0.0009 -0.7410 +vn 0.4109 -0.0013 -0.9117 +vn 0.9220 0.0073 -0.3871 +vn 0.8469 0.0139 -0.5316 +vn 0.5359 0.0105 -0.8442 +vn 0.5787 0.5918 -0.5611 +vn 0.3412 0.6009 -0.7228 +vn 0.7849 0.5665 -0.2510 +vn 0.6427 0.7040 -0.3023 +vn 0.4186 0.7581 -0.5000 +vn 0.2328 0.9724 0.0126 +vn 0.1158 0.9901 -0.0791 +vn 0.2067 0.9663 0.1536 +vn 0.0245 0.9866 0.1614 +vn 0.0034 0.9775 0.2111 +vn -0.3195 0.7051 0.6331 +vn -0.1349 0.7136 0.6875 +vn -0.6039 0.6499 0.4614 +vn -0.6318 0.6401 0.4372 +vn -0.4243 0.6667 0.6127 +vn -0.2599 -0.5525 0.7919 +vn -0.4258 -0.0108 0.9048 +vn 0.0095 0.0217 0.9997 +vn 0.0220 -0.0016 0.9998 +vn 0.4102 0.8491 0.3329 +vn 0.9996 -0.0116 0.0259 +vn 0.5415 0.6370 -0.5486 +vn 0.7096 -0.0097 -0.7046 +vn 0.0463 -0.8892 0.4552 +vn -0.0107 -0.1489 0.9888 +vn -0.0444 0.7291 0.6829 +vn 0.1228 0.9924 0.0092 +vn 0.4818 -0.8575 -0.1804 +vn 0.4553 -0.4999 0.7367 +vn -0.2205 0.3583 0.9072 +vn -0.2359 0.7158 0.6573 +vn 0.7281 0.0156 -0.6853 +vn 0.8887 0.0167 0.4581 +vn -0.2601 -0.0008 0.9656 +vn -0.3716 0.0044 0.9284 +vn 0.4802 0.8589 -0.1784 +vn 0.4881 0.4980 0.7168 +vn -0.2220 -0.3619 0.9054 +vn -0.2354 -0.7105 0.6632 +vn 0.0587 0.8972 0.4377 +vn 0.0013 0.1640 0.9865 +vn -0.0442 -0.7303 0.6817 +vn 0.1388 -0.9897 -0.0342 +vn -0.2589 0.5454 0.7972 +vn 0.0123 -0.0193 0.9997 +vn 0.3986 -0.8457 0.3549 +vn 0.5376 -0.6107 -0.5814 +vn 0.7626 -0.3148 0.5650 +vn 0.8245 -0.0000 0.5658 +vn -0.0000 -0.0000 1.0000 +vn 0.8480 -0.3500 -0.3980 +vn 0.9177 -0.0000 -0.3973 +vn 0.8641 -0.3564 -0.3553 +vn 0.9353 -0.0001 -0.3539 +vn 0.7210 -0.2979 0.6256 +vn 0.7807 -0.0001 0.6249 +vn 0.5834 -0.5833 0.5652 +vn 0.6485 -0.6484 -0.3987 +vn 0.6609 -0.6607 -0.3559 +vn 0.5519 -0.5518 0.6253 +vn 0.3148 -0.7626 0.5651 +vn 0.3500 -0.8480 -0.3980 +vn 0.3565 -0.8642 -0.3552 +vn 0.2980 -0.7211 0.6255 +vn -0.0000 -0.8245 0.5658 +vn -0.0000 -0.9177 -0.3973 +vn -0.0001 -0.9353 -0.3539 +vn -0.0001 -0.7807 0.6249 +vn -0.3148 -0.7626 0.5650 +vn -0.3500 -0.8480 -0.3980 +vn -0.3564 -0.8641 -0.3553 +vn -0.2979 -0.7210 0.6256 +vn -0.5833 -0.5834 0.5652 +vn -0.6484 -0.6485 -0.3987 +vn -0.6607 -0.6609 -0.3559 +vn -0.5518 -0.5519 0.6253 +vn -0.7626 -0.3148 0.5651 +vn -0.8480 -0.3500 -0.3980 +vn -0.8642 -0.3565 -0.3552 +vn -0.7211 -0.2980 0.6255 +vn -0.8245 0.0000 0.5658 +vn -0.9177 0.0000 -0.3973 +vn -0.9353 0.0001 -0.3539 +vn -0.7807 0.0001 0.6249 +vn -0.7626 0.3148 0.5650 +vn -0.8480 0.3500 -0.3980 +vn -0.8641 0.3564 -0.3553 +vn -0.7210 0.2979 0.6256 +vn -0.5834 0.5833 0.5652 +vn -0.6485 0.6484 -0.3987 +vn -0.6609 0.6607 -0.3559 +vn -0.5519 0.5518 0.6253 +vn -0.3148 0.7626 0.5651 +vn -0.3500 0.8480 -0.3980 +vn -0.3565 0.8642 -0.3552 +vn -0.2980 0.7211 0.6255 +vn 0.0000 0.8245 0.5658 +vn 0.0000 0.9177 -0.3973 +vn 0.0001 0.9353 -0.3539 +vn 0.0001 0.7807 0.6249 +vn 0.3148 0.7626 0.5650 +vn 0.3500 0.8480 -0.3980 +vn 0.3564 0.8641 -0.3553 +vn 0.2979 0.7210 0.6256 +vn 0.5833 0.5834 0.5652 +vn 0.6484 0.6485 -0.3987 +vn 0.6607 0.6609 -0.3559 +vn 0.5518 0.5519 0.6253 +vn 0.7626 0.3148 0.5651 +vn 0.8480 0.3500 -0.3980 +vn 0.8642 0.3565 -0.3552 +vn 0.7211 0.2980 0.6255 +vn 0.2180 -0.0902 0.9718 +vn 0.2366 -0.0000 0.9716 +vn 0.1596 -0.0660 0.9850 +vn 0.1731 -0.0000 0.9849 +vn 0.3505 -0.1447 0.9253 +vn 0.3797 -0.0000 0.9251 +vn 0.4856 -0.2015 0.8507 +vn 0.5267 -0.0000 0.8501 +vn 0.1666 -0.1666 0.9718 +vn 0.1219 -0.1219 0.9850 +vn 0.2677 -0.2677 0.9256 +vn 0.3713 -0.3713 0.8510 +vn 0.0902 -0.2180 0.9718 +vn 0.0660 -0.1596 0.9850 +vn 0.1447 -0.3505 0.9253 +vn 0.2015 -0.4856 0.8507 +vn -0.0000 -0.2366 0.9716 +vn -0.0000 -0.1731 0.9849 +vn -0.0000 -0.3797 0.9251 +vn -0.0000 -0.5267 0.8501 +vn -0.0902 -0.2180 0.9718 +vn -0.0660 -0.1596 0.9850 +vn -0.1447 -0.3505 0.9253 +vn -0.2015 -0.4856 0.8507 +vn -0.1666 -0.1666 0.9718 +vn -0.1219 -0.1219 0.9850 +vn -0.2677 -0.2677 0.9256 +vn -0.3713 -0.3713 0.8510 +vn -0.2180 -0.0902 0.9718 +vn -0.1596 -0.0660 0.9850 +vn -0.3505 -0.1447 0.9253 +vn -0.4856 -0.2015 0.8507 +vn -0.2366 0.0000 0.9716 +vn -0.1731 0.0000 0.9849 +vn -0.3797 0.0000 0.9251 +vn -0.5267 0.0000 0.8501 +vn -0.2180 0.0902 0.9718 +vn -0.1596 0.0660 0.9850 +vn -0.3505 0.1447 0.9253 +vn -0.4856 0.2015 0.8507 +vn -0.1666 0.1666 0.9718 +vn -0.1219 0.1219 0.9850 +vn -0.2677 0.2677 0.9256 +vn -0.3713 0.3713 0.8510 +vn -0.0902 0.2180 0.9718 +vn -0.0660 0.1596 0.9850 +vn -0.1447 0.3505 0.9253 +vn -0.2015 0.4856 0.8507 +vn 0.0000 0.2366 0.9716 +vn 0.0000 0.1731 0.9849 +vn 0.0000 0.3797 0.9251 +vn 0.0000 0.5267 0.8501 +vn 0.0902 0.2180 0.9718 +vn 0.0660 0.1596 0.9850 +vn 0.1447 0.3505 0.9253 +vn 0.2015 0.4856 0.8507 +vn 0.1666 0.1666 0.9718 +vn 0.1219 0.1219 0.9850 +vn 0.2677 0.2677 0.9256 +vn 0.3713 0.3713 0.8510 +vn 0.2180 0.0902 0.9718 +vn 0.1596 0.0660 0.9850 +vn 0.3505 0.1447 0.9253 +vn 0.4856 0.2015 0.8507 +# 530 vertex normals + +vt 1.7500 1.9750 0.0000 +vt 2.0000 1.9750 0.0000 +vt 2.0000 2.0000 0.0000 +vt 1.7500 2.0000 0.0000 +vt 1.7500 1.9500 0.0000 +vt 2.0000 1.9500 0.0000 +vt 1.7500 1.9250 0.0000 +vt 2.0000 1.9250 0.0000 +vt 1.7500 1.9000 0.0000 +vt 2.0000 1.9000 0.0000 +vt 1.5000 1.9750 0.0000 +vt 1.5000 2.0000 0.0000 +vt 1.5000 1.9500 0.0000 +vt 1.5000 1.9250 0.0000 +vt 1.5000 1.9000 0.0000 +vt 1.2500 1.9750 0.0000 +vt 1.2500 2.0000 0.0000 +vt 1.2500 1.9500 0.0000 +vt 1.2500 1.9250 0.0000 +vt 1.2500 1.9000 0.0000 +vt 1.0000 1.9750 0.0000 +vt 1.0000 2.0000 0.0000 +vt 1.0000 1.9500 0.0000 +vt 1.0000 1.9250 0.0000 +vt 1.0000 1.9000 0.0000 +vt 0.7500 1.9750 0.0000 +vt 0.7500 2.0000 0.0000 +vt 0.7500 1.9500 0.0000 +vt 0.7500 1.9250 0.0000 +vt 0.7500 1.9000 0.0000 +vt 0.5000 1.9750 0.0000 +vt 0.5000 2.0000 0.0000 +vt 0.5000 1.9500 0.0000 +vt 0.5000 1.9250 0.0000 +vt 0.5000 1.9000 0.0000 +vt 0.2500 1.9750 0.0000 +vt 0.2500 2.0000 0.0000 +vt 0.2500 1.9500 0.0000 +vt 0.2500 1.9250 0.0000 +vt 0.2500 1.9000 0.0000 +vt 0.0000 1.9750 0.0000 +vt 0.0000 2.0000 0.0000 +vt 0.0000 1.9500 0.0000 +vt 0.0000 1.9250 0.0000 +vt 0.0000 1.9000 0.0000 +vt 1.7500 1.6750 0.0000 +vt 2.0000 1.6750 0.0000 +vt 1.7500 1.4500 0.0000 +vt 2.0000 1.4500 0.0000 +vt 1.7500 1.2250 0.0000 +vt 2.0000 1.2250 0.0000 +vt 1.7500 1.0000 0.0000 +vt 2.0000 1.0000 0.0000 +vt 1.5000 1.6750 0.0000 +vt 1.5000 1.4500 0.0000 +vt 1.5000 1.2250 0.0000 +vt 1.5000 1.0000 0.0000 +vt 1.2500 1.6750 0.0000 +vt 1.2500 1.4500 0.0000 +vt 1.2500 1.2250 0.0000 +vt 1.2500 1.0000 0.0000 +vt 1.0000 1.6750 0.0000 +vt 1.0000 1.4500 0.0000 +vt 1.0000 1.2250 0.0000 +vt 1.0000 1.0000 0.0000 +vt 0.7500 1.6750 0.0000 +vt 0.7500 1.4500 0.0000 +vt 0.7500 1.2250 0.0000 +vt 0.7500 1.0000 0.0000 +vt 0.5000 1.6750 0.0000 +vt 0.5000 1.4500 0.0000 +vt 0.5000 1.2250 0.0000 +vt 0.5000 1.0000 0.0000 +vt 0.2500 1.6750 0.0000 +vt 0.2500 1.4500 0.0000 +vt 0.2500 1.2250 0.0000 +vt 0.2500 1.0000 0.0000 +vt 0.0000 1.6750 0.0000 +vt 0.0000 1.4500 0.0000 +vt 0.0000 1.2250 0.0000 +vt 0.0000 1.0000 0.0000 +vt 1.7500 0.8500 0.0000 +vt 2.0000 0.8500 0.0000 +vt 1.7500 0.7000 0.0000 +vt 2.0000 0.7000 0.0000 +vt 1.7500 0.5500 0.0000 +vt 2.0000 0.5500 0.0000 +vt 1.7500 0.4000 0.0000 +vt 2.0000 0.4000 0.0000 +vt 1.5000 0.8500 0.0000 +vt 1.5000 0.7000 0.0000 +vt 1.5000 0.5500 0.0000 +vt 1.5000 0.4000 0.0000 +vt 1.2500 0.8500 0.0000 +vt 1.2500 0.7000 0.0000 +vt 1.2500 0.5500 0.0000 +vt 1.2500 0.4000 0.0000 +vt 1.0000 0.8500 0.0000 +vt 1.0000 0.7000 0.0000 +vt 1.0000 0.5500 0.0000 +vt 1.0000 0.4000 0.0000 +vt 0.7500 0.8500 0.0000 +vt 0.7500 0.7000 0.0000 +vt 0.7500 0.5500 0.0000 +vt 0.7500 0.4000 0.0000 +vt 0.5000 0.8500 0.0000 +vt 0.5000 0.7000 0.0000 +vt 0.5000 0.5500 0.0000 +vt 0.5000 0.4000 0.0000 +vt 0.2500 0.8500 0.0000 +vt 0.2500 0.7000 0.0000 +vt 0.2500 0.5500 0.0000 +vt 0.2500 0.4000 0.0000 +vt 0.0000 0.8500 0.0000 +vt 0.0000 0.7000 0.0000 +vt 0.0000 0.5500 0.0000 +vt 0.0000 0.4000 0.0000 +vt 1.7500 0.3000 0.0000 +vt 2.0000 0.3000 0.0000 +vt 1.7500 0.2000 0.0000 +vt 2.0000 0.2000 0.0000 +vt 1.7500 0.1000 0.0000 +vt 2.0000 0.1000 0.0000 +vt 1.7500 0.0000 0.0000 +vt 1.5000 0.3000 0.0000 +vt 1.5000 0.2000 0.0000 +vt 1.5000 0.1000 0.0000 +vt 1.5000 0.0000 0.0000 +vt 1.2500 0.3000 0.0000 +vt 1.2500 0.2000 0.0000 +vt 1.2500 0.1000 0.0000 +vt 1.2500 0.0000 0.0000 +vt 1.0000 0.3000 0.0000 +vt 1.0000 0.2000 0.0000 +vt 1.0000 0.1000 0.0000 +vt 1.0000 0.0000 0.0000 +vt 0.7500 0.3000 0.0000 +vt 0.7500 0.2000 0.0000 +vt 0.7500 0.1000 0.0000 +vt 0.7500 0.0000 0.0000 +vt 0.5000 0.3000 0.0000 +vt 0.5000 0.2000 0.0000 +vt 0.5000 0.1000 0.0000 +vt 0.5000 0.0000 0.0000 +vt 0.2500 0.3000 0.0000 +vt 0.2500 0.2000 0.0000 +vt 0.2500 0.1000 0.0000 +vt 0.2500 0.0000 0.0000 +vt 0.0000 0.3000 0.0000 +vt 0.0000 0.2000 0.0000 +vt 0.0000 0.1000 0.0000 +vt 0.0000 0.0000 0.0000 +vt 0.8750 0.8750 0.0000 +vt 1.0000 0.8750 0.0000 +vt 0.8750 1.0000 0.0000 +vt 0.8750 0.7500 0.0000 +vt 1.0000 0.7500 0.0000 +vt 0.8750 0.6250 0.0000 +vt 1.0000 0.6250 0.0000 +vt 0.8750 0.5000 0.0000 +vt 1.0000 0.5000 0.0000 +vt 0.7500 0.8750 0.0000 +vt 0.7500 0.7500 0.0000 +vt 0.7500 0.6250 0.0000 +vt 0.7500 0.5000 0.0000 +vt 0.6250 0.8750 0.0000 +vt 0.6250 1.0000 0.0000 +vt 0.6250 0.7500 0.0000 +vt 0.6250 0.6250 0.0000 +vt 0.6250 0.5000 0.0000 +vt 0.5000 0.8750 0.0000 +vt 0.5000 0.7500 0.0000 +vt 0.5000 0.6250 0.0000 +vt 0.5000 0.5000 0.0000 +vt 0.3750 0.8750 0.0000 +vt 0.3750 1.0000 0.0000 +vt 0.3750 0.7500 0.0000 +vt 0.3750 0.6250 0.0000 +vt 0.3750 0.5000 0.0000 +vt 0.2500 0.8750 0.0000 +vt 0.2500 0.7500 0.0000 +vt 0.2500 0.6250 0.0000 +vt 0.2500 0.5000 0.0000 +vt 0.1250 0.8750 0.0000 +vt 0.1250 1.0000 0.0000 +vt 0.1250 0.7500 0.0000 +vt 0.1250 0.6250 0.0000 +vt 0.1250 0.5000 0.0000 +vt 0.0000 0.8750 0.0000 +vt 0.0000 0.7500 0.0000 +vt 0.0000 0.6250 0.0000 +vt 0.0000 0.5000 0.0000 +vt 0.8750 0.3750 0.0000 +vt 1.0000 0.3750 0.0000 +vt 0.8750 0.2500 0.0000 +vt 1.0000 0.2500 0.0000 +vt 0.8750 0.1250 0.0000 +vt 1.0000 0.1250 0.0000 +vt 0.8750 0.0000 0.0000 +vt 0.7500 0.3750 0.0000 +vt 0.7500 0.2500 0.0000 +vt 0.7500 0.1250 0.0000 +vt 0.6250 0.3750 0.0000 +vt 0.6250 0.2500 0.0000 +vt 0.6250 0.1250 0.0000 +vt 0.6250 0.0000 0.0000 +vt 0.5000 0.3750 0.0000 +vt 0.5000 0.2500 0.0000 +vt 0.5000 0.1250 0.0000 +vt 0.3750 0.3750 0.0000 +vt 0.3750 0.2500 0.0000 +vt 0.3750 0.1250 0.0000 +vt 0.3750 0.0000 0.0000 +vt 0.2500 0.3750 0.0000 +vt 0.2500 0.2500 0.0000 +vt 0.2500 0.1250 0.0000 +vt 0.1250 0.3750 0.0000 +vt 0.1250 0.2500 0.0000 +vt 0.1250 0.1250 0.0000 +vt 0.1250 0.0000 0.0000 +vt 0.0000 0.3750 0.0000 +vt 0.0000 0.2500 0.0000 +vt 0.0000 0.1250 0.0000 +vt 0.6250 0.2250 0.0000 +vt 0.5000 0.2250 0.0000 +vt 0.6250 0.4500 0.0000 +vt 0.5000 0.4500 0.0000 +vt 0.6250 0.6750 0.0000 +vt 0.5000 0.6750 0.0000 +vt 0.6250 0.9000 0.0000 +vt 0.5000 0.9000 0.0000 +vt 0.7500 0.2250 0.0000 +vt 0.7500 0.4500 0.0000 +vt 0.7500 0.6750 0.0000 +vt 0.7500 0.9000 0.0000 +vt 0.8750 0.2250 0.0000 +vt 0.8750 0.4500 0.0000 +vt 0.8750 0.6750 0.0000 +vt 0.8750 0.9000 0.0000 +vt 1.0000 0.2250 0.0000 +vt 1.0000 0.4500 0.0000 +vt 1.0000 0.6750 0.0000 +vt 1.0000 0.9000 0.0000 +vt 0.1250 0.2250 0.0000 +vt 0.0000 0.2250 0.0000 +vt 0.1250 0.4500 0.0000 +vt 0.0000 0.4500 0.0000 +vt 0.1250 0.6750 0.0000 +vt 0.0000 0.6750 0.0000 +vt 0.1250 0.9000 0.0000 +vt 0.0000 0.9000 0.0000 +vt 0.2500 0.2250 0.0000 +vt 0.2500 0.4500 0.0000 +vt 0.2500 0.6750 0.0000 +vt 0.2500 0.9000 0.0000 +vt 0.3750 0.2250 0.0000 +vt 0.3750 0.4500 0.0000 +vt 0.3750 0.6750 0.0000 +vt 0.3750 0.9000 0.0000 +vt 0.6250 0.9250 0.0000 +vt 0.5000 0.9250 0.0000 +vt 0.6250 0.9500 0.0000 +vt 0.5000 0.9500 0.0000 +vt 0.6250 0.9750 0.0000 +vt 0.5000 0.9750 0.0000 +vt 0.7500 0.9250 0.0000 +vt 0.7500 0.9500 0.0000 +vt 0.7500 0.9750 0.0000 +vt 0.8750 0.9250 0.0000 +vt 0.8750 0.9500 0.0000 +vt 0.8750 0.9750 0.0000 +vt 1.0000 0.9250 0.0000 +vt 1.0000 0.9500 0.0000 +vt 1.0000 0.9750 0.0000 +vt 0.1250 0.9250 0.0000 +vt 0.0000 0.9250 0.0000 +vt 0.1250 0.9500 0.0000 +vt 0.0000 0.9500 0.0000 +vt 0.1250 0.9750 0.0000 +vt 0.0000 0.9750 0.0000 +vt 0.2500 0.9250 0.0000 +vt 0.2500 0.9500 0.0000 +vt 0.2500 0.9750 0.0000 +vt 0.3750 0.9250 0.0000 +vt 0.3750 0.9500 0.0000 +vt 0.3750 0.9750 0.0000 +# 286 texture coords + +g Teapot001 +s 1 +f 1/1/1 2/2/2 3/3/3 +f 3/3/3 4/4/4 1/1/1 +f 5/5/5 6/6/6 2/2/2 +f 2/2/2 1/1/1 5/5/5 +f 7/7/7 8/8/8 6/6/6 +f 6/6/6 5/5/5 7/7/7 +f 9/9/9 10/10/10 8/8/8 +f 8/8/8 7/7/7 9/9/9 +f 11/11/11 1/1/1 4/4/4 +f 4/4/4 12/12/12 11/11/11 +f 13/13/13 5/5/5 1/1/1 +f 1/1/1 11/11/11 13/13/13 +f 14/14/14 7/7/7 5/5/5 +f 5/5/5 13/13/13 14/14/14 +f 15/15/15 9/9/9 7/7/7 +f 7/7/7 14/14/14 15/15/15 +f 16/16/16 11/11/11 12/12/12 +f 12/12/12 17/17/17 16/16/16 +f 18/18/18 13/13/13 11/11/11 +f 11/11/11 16/16/16 18/18/18 +f 19/19/19 14/14/14 13/13/13 +f 13/13/13 18/18/18 19/19/19 +f 20/20/20 15/15/15 14/14/14 +f 14/14/14 19/19/19 20/20/20 +f 21/21/21 16/16/16 17/17/17 +f 17/17/17 22/22/22 21/21/21 +f 23/23/23 18/18/18 16/16/16 +f 16/16/16 21/21/21 23/23/23 +f 24/24/24 19/19/19 18/18/18 +f 18/18/18 23/23/23 24/24/24 +f 25/25/25 20/20/20 19/19/19 +f 19/19/19 24/24/24 25/25/25 +f 26/26/26 21/21/21 22/22/22 +f 22/22/22 27/27/27 26/26/26 +f 28/28/28 23/23/23 21/21/21 +f 21/21/21 26/26/26 28/28/28 +f 29/29/29 24/24/24 23/23/23 +f 23/23/23 28/28/28 29/29/29 +f 30/30/30 25/25/25 24/24/24 +f 24/24/24 29/29/29 30/30/30 +f 31/31/31 26/26/26 27/27/27 +f 27/27/27 32/32/32 31/31/31 +f 33/33/33 28/28/28 26/26/26 +f 26/26/26 31/31/31 33/33/33 +f 34/34/34 29/29/29 28/28/28 +f 28/28/28 33/33/33 34/34/34 +f 35/35/35 30/30/30 29/29/29 +f 29/29/29 34/34/34 35/35/35 +f 36/36/36 31/31/31 32/32/32 +f 32/32/32 37/37/37 36/36/36 +f 38/38/38 33/33/33 31/31/31 +f 31/31/31 36/36/36 38/38/38 +f 39/39/39 34/34/34 33/33/33 +f 33/33/33 38/38/38 39/39/39 +f 40/40/40 35/35/35 34/34/34 +f 34/34/34 39/39/39 40/40/40 +f 41/41/41 36/36/36 37/37/37 +f 37/37/37 42/42/42 41/41/41 +f 43/43/43 38/38/38 36/36/36 +f 36/36/36 41/41/41 43/43/43 +f 44/44/44 39/39/39 38/38/38 +f 38/38/38 43/43/43 44/44/44 +f 45/45/45 40/40/40 39/39/39 +f 39/39/39 44/44/44 45/45/45 +f 46/1/46 41/2/41 42/3/42 +f 42/3/42 47/4/47 46/1/46 +f 48/5/48 43/6/43 41/2/41 +f 41/2/41 46/1/46 48/5/48 +f 49/7/49 44/8/44 43/6/43 +f 43/6/43 48/5/48 49/7/49 +f 50/9/50 45/10/45 44/8/44 +f 44/8/44 49/7/49 50/9/50 +f 51/11/51 46/1/46 47/4/47 +f 47/4/47 52/12/52 51/11/51 +f 53/13/53 48/5/48 46/1/46 +f 46/1/46 51/11/51 53/13/53 +f 54/14/54 49/7/49 48/5/48 +f 48/5/48 53/13/53 54/14/54 +f 55/15/55 50/9/50 49/7/49 +f 49/7/49 54/14/54 55/15/55 +f 56/16/56 51/11/51 52/12/52 +f 52/12/52 57/17/57 56/16/56 +f 58/18/58 53/13/53 51/11/51 +f 51/11/51 56/16/56 58/18/58 +f 59/19/59 54/14/54 53/13/53 +f 53/13/53 58/18/58 59/19/59 +f 60/20/60 55/15/55 54/14/54 +f 54/14/54 59/19/59 60/20/60 +f 61/21/61 56/16/56 57/17/57 +f 57/17/57 62/22/62 61/21/61 +f 63/23/63 58/18/58 56/16/56 +f 56/16/56 61/21/61 63/23/63 +f 64/24/64 59/19/59 58/18/58 +f 58/18/58 63/23/63 64/24/64 +f 65/25/65 60/20/60 59/19/59 +f 59/19/59 64/24/64 65/25/65 +f 66/26/66 61/21/61 62/22/62 +f 62/22/62 67/27/67 66/26/66 +f 68/28/68 63/23/63 61/21/61 +f 61/21/61 66/26/66 68/28/68 +f 69/29/69 64/24/64 63/23/63 +f 63/23/63 68/28/68 69/29/69 +f 70/30/70 65/25/65 64/24/64 +f 64/24/64 69/29/69 70/30/70 +f 71/31/71 66/26/66 67/27/67 +f 67/27/67 72/32/72 71/31/71 +f 73/33/73 68/28/68 66/26/66 +f 66/26/66 71/31/71 73/33/73 +f 74/34/74 69/29/69 68/28/68 +f 68/28/68 73/33/73 74/34/74 +f 75/35/75 70/30/70 69/29/69 +f 69/29/69 74/34/74 75/35/75 +f 76/36/76 71/31/71 72/32/72 +f 72/32/72 77/37/77 76/36/76 +f 78/38/78 73/33/73 71/31/71 +f 71/31/71 76/36/76 78/38/78 +f 79/39/79 74/34/74 73/33/73 +f 73/33/73 78/38/78 79/39/79 +f 80/40/80 75/35/75 74/34/74 +f 74/34/74 79/39/79 80/40/80 +f 2/41/2 76/36/76 77/37/77 +f 77/37/77 3/42/3 2/41/2 +f 6/43/6 78/38/78 76/36/76 +f 76/36/76 2/41/2 6/43/6 +f 8/44/8 79/39/79 78/38/78 +f 78/38/78 6/43/6 8/44/8 +f 10/45/10 80/40/80 79/39/79 +f 79/39/79 8/44/8 10/45/10 +f 81/46/81 82/47/82 10/10/10 +f 10/10/10 9/9/9 81/46/81 +f 83/48/83 84/49/84 82/47/82 +f 82/47/82 81/46/81 83/48/83 +f 85/50/85 86/51/86 84/49/84 +f 84/49/84 83/48/83 85/50/85 +f 87/52/87 88/53/88 86/51/86 +f 86/51/86 85/50/85 87/52/87 +f 89/54/89 81/46/81 9/9/9 +f 9/9/9 15/15/15 89/54/89 +f 90/55/90 83/48/83 81/46/81 +f 81/46/81 89/54/89 90/55/90 +f 91/56/91 85/50/85 83/48/83 +f 83/48/83 90/55/90 91/56/91 +f 92/57/92 87/52/87 85/50/85 +f 85/50/85 91/56/91 92/57/92 +f 93/58/93 89/54/89 15/15/15 +f 15/15/15 20/20/20 93/58/93 +f 94/59/94 90/55/90 89/54/89 +f 89/54/89 93/58/93 94/59/94 +f 95/60/95 91/56/91 90/55/90 +f 90/55/90 94/59/94 95/60/95 +f 96/61/96 92/57/92 91/56/91 +f 91/56/91 95/60/95 96/61/96 +f 97/62/97 93/58/93 20/20/20 +f 20/20/20 25/25/25 97/62/97 +f 98/63/98 94/59/94 93/58/93 +f 93/58/93 97/62/97 98/63/98 +f 99/64/99 95/60/95 94/59/94 +f 94/59/94 98/63/98 99/64/99 +f 100/65/100 96/61/96 95/60/95 +f 95/60/95 99/64/99 100/65/100 +f 101/66/101 97/62/97 25/25/25 +f 25/25/25 30/30/30 101/66/101 +f 102/67/102 98/63/98 97/62/97 +f 97/62/97 101/66/101 102/67/102 +f 103/68/103 99/64/99 98/63/98 +f 98/63/98 102/67/102 103/68/103 +f 104/69/104 100/65/100 99/64/99 +f 99/64/99 103/68/103 104/69/104 +f 105/70/105 101/66/101 30/30/30 +f 30/30/30 35/35/35 105/70/105 +f 106/71/106 102/67/102 101/66/101 +f 101/66/101 105/70/105 106/71/106 +f 107/72/107 103/68/103 102/67/102 +f 102/67/102 106/71/106 107/72/107 +f 108/73/108 104/69/104 103/68/103 +f 103/68/103 107/72/107 108/73/108 +f 109/74/109 105/70/105 35/35/35 +f 35/35/35 40/40/40 109/74/109 +f 110/75/110 106/71/106 105/70/105 +f 105/70/105 109/74/109 110/75/110 +f 111/76/111 107/72/107 106/71/106 +f 106/71/106 110/75/110 111/76/111 +f 112/77/112 108/73/108 107/72/107 +f 107/72/107 111/76/111 112/77/112 +f 113/78/113 109/74/109 40/40/40 +f 40/40/40 45/45/45 113/78/113 +f 114/79/114 110/75/110 109/74/109 +f 109/74/109 113/78/113 114/79/114 +f 115/80/115 111/76/111 110/75/110 +f 110/75/110 114/79/114 115/80/115 +f 116/81/116 112/77/112 111/76/111 +f 111/76/111 115/80/115 116/81/116 +f 117/46/117 113/47/113 45/10/45 +f 45/10/45 50/9/50 117/46/117 +f 118/48/118 114/49/114 113/47/113 +f 113/47/113 117/46/117 118/48/118 +f 119/50/119 115/51/115 114/49/114 +f 114/49/114 118/48/118 119/50/119 +f 120/52/120 116/53/116 115/51/115 +f 115/51/115 119/50/119 120/52/120 +f 121/54/121 117/46/117 50/9/50 +f 50/9/50 55/15/55 121/54/121 +f 122/55/122 118/48/118 117/46/117 +f 117/46/117 121/54/121 122/55/122 +f 123/56/123 119/50/119 118/48/118 +f 118/48/118 122/55/122 123/56/123 +f 124/57/124 120/52/120 119/50/119 +f 119/50/119 123/56/123 124/57/124 +f 125/58/125 121/54/121 55/15/55 +f 55/15/55 60/20/60 125/58/125 +f 126/59/126 122/55/122 121/54/121 +f 121/54/121 125/58/125 126/59/126 +f 127/60/127 123/56/123 122/55/122 +f 122/55/122 126/59/126 127/60/127 +f 128/61/128 124/57/124 123/56/123 +f 123/56/123 127/60/127 128/61/128 +f 129/62/129 125/58/125 60/20/60 +f 60/20/60 65/25/65 129/62/129 +f 130/63/130 126/59/126 125/58/125 +f 125/58/125 129/62/129 130/63/130 +f 131/64/131 127/60/127 126/59/126 +f 126/59/126 130/63/130 131/64/131 +f 132/65/132 128/61/128 127/60/127 +f 127/60/127 131/64/131 132/65/132 +f 133/66/133 129/62/129 65/25/65 +f 65/25/65 70/30/70 133/66/133 +f 134/67/134 130/63/130 129/62/129 +f 129/62/129 133/66/133 134/67/134 +f 135/68/135 131/64/131 130/63/130 +f 130/63/130 134/67/134 135/68/135 +f 136/69/136 132/65/132 131/64/131 +f 131/64/131 135/68/135 136/69/136 +f 137/70/137 133/66/133 70/30/70 +f 70/30/70 75/35/75 137/70/137 +f 138/71/138 134/67/134 133/66/133 +f 133/66/133 137/70/137 138/71/138 +f 139/72/139 135/68/135 134/67/134 +f 134/67/134 138/71/138 139/72/139 +f 140/73/140 136/69/136 135/68/135 +f 135/68/135 139/72/139 140/73/140 +f 141/74/141 137/70/137 75/35/75 +f 75/35/75 80/40/80 141/74/141 +f 142/75/142 138/71/138 137/70/137 +f 137/70/137 141/74/141 142/75/142 +f 143/76/143 139/72/139 138/71/138 +f 138/71/138 142/75/142 143/76/143 +f 144/77/144 140/73/140 139/72/139 +f 139/72/139 143/76/143 144/77/144 +f 82/78/82 141/74/141 80/40/80 +f 80/40/80 10/45/10 82/78/82 +f 84/79/84 142/75/142 141/74/141 +f 141/74/141 82/78/82 84/79/84 +f 86/80/86 143/76/143 142/75/142 +f 142/75/142 84/79/84 86/80/86 +f 88/81/88 144/77/144 143/76/143 +f 143/76/143 86/80/86 88/81/88 +f 145/82/145 146/83/146 88/53/88 +f 88/53/88 87/52/87 145/82/145 +f 147/84/147 148/85/148 146/83/146 +f 146/83/146 145/82/145 147/84/147 +f 149/86/149 150/87/150 148/85/148 +f 148/85/148 147/84/147 149/86/149 +f 151/88/151 152/89/152 150/87/150 +f 150/87/150 149/86/149 151/88/151 +f 153/90/153 145/82/145 87/52/87 +f 87/52/87 92/57/92 153/90/153 +f 154/91/154 147/84/147 145/82/145 +f 145/82/145 153/90/153 154/91/154 +f 155/92/155 149/86/149 147/84/147 +f 147/84/147 154/91/154 155/92/155 +f 156/93/156 151/88/151 149/86/149 +f 149/86/149 155/92/155 156/93/156 +f 157/94/157 153/90/153 92/57/92 +f 92/57/92 96/61/96 157/94/157 +f 158/95/158 154/91/154 153/90/153 +f 153/90/153 157/94/157 158/95/158 +f 159/96/159 155/92/155 154/91/154 +f 154/91/154 158/95/158 159/96/159 +f 160/97/160 156/93/156 155/92/155 +f 155/92/155 159/96/159 160/97/160 +f 161/98/161 157/94/157 96/61/96 +f 96/61/96 100/65/100 161/98/161 +f 162/99/162 158/95/158 157/94/157 +f 157/94/157 161/98/161 162/99/162 +f 163/100/163 159/96/159 158/95/158 +f 158/95/158 162/99/162 163/100/163 +f 164/101/164 160/97/160 159/96/159 +f 159/96/159 163/100/163 164/101/164 +f 165/102/165 161/98/161 100/65/100 +f 100/65/100 104/69/104 165/102/165 +f 166/103/166 162/99/162 161/98/161 +f 161/98/161 165/102/165 166/103/166 +f 167/104/167 163/100/163 162/99/162 +f 162/99/162 166/103/166 167/104/167 +f 168/105/168 164/101/164 163/100/163 +f 163/100/163 167/104/167 168/105/168 +f 169/106/169 165/102/165 104/69/104 +f 104/69/104 108/73/108 169/106/169 +f 170/107/170 166/103/166 165/102/165 +f 165/102/165 169/106/169 170/107/170 +f 171/108/171 167/104/167 166/103/166 +f 166/103/166 170/107/170 171/108/171 +f 172/109/172 168/105/168 167/104/167 +f 167/104/167 171/108/171 172/109/172 +f 173/110/173 169/106/169 108/73/108 +f 108/73/108 112/77/112 173/110/173 +f 174/111/174 170/107/170 169/106/169 +f 169/106/169 173/110/173 174/111/174 +f 175/112/175 171/108/171 170/107/170 +f 170/107/170 174/111/174 175/112/175 +f 176/113/176 172/109/172 171/108/171 +f 171/108/171 175/112/175 176/113/176 +f 177/114/177 173/110/173 112/77/112 +f 112/77/112 116/81/116 177/114/177 +f 178/115/178 174/111/174 173/110/173 +f 173/110/173 177/114/177 178/115/178 +f 179/116/179 175/112/175 174/111/174 +f 174/111/174 178/115/178 179/116/179 +f 180/117/180 176/113/176 175/112/175 +f 175/112/175 179/116/179 180/117/180 +f 181/82/181 177/83/177 116/53/116 +f 116/53/116 120/52/120 181/82/181 +f 182/84/182 178/85/178 177/83/177 +f 177/83/177 181/82/181 182/84/182 +f 183/86/183 179/87/179 178/85/178 +f 178/85/178 182/84/182 183/86/183 +f 184/88/184 180/89/180 179/87/179 +f 179/87/179 183/86/183 184/88/184 +f 185/90/185 181/82/181 120/52/120 +f 120/52/120 124/57/124 185/90/185 +f 186/91/186 182/84/182 181/82/181 +f 181/82/181 185/90/185 186/91/186 +f 187/92/187 183/86/183 182/84/182 +f 182/84/182 186/91/186 187/92/187 +f 188/93/188 184/88/184 183/86/183 +f 183/86/183 187/92/187 188/93/188 +f 189/94/189 185/90/185 124/57/124 +f 124/57/124 128/61/128 189/94/189 +f 190/95/190 186/91/186 185/90/185 +f 185/90/185 189/94/189 190/95/190 +f 191/96/191 187/92/187 186/91/186 +f 186/91/186 190/95/190 191/96/191 +f 192/97/192 188/93/188 187/92/187 +f 187/92/187 191/96/191 192/97/192 +f 193/98/193 189/94/189 128/61/128 +f 128/61/128 132/65/132 193/98/193 +f 194/99/194 190/95/190 189/94/189 +f 189/94/189 193/98/193 194/99/194 +f 195/100/195 191/96/191 190/95/190 +f 190/95/190 194/99/194 195/100/195 +f 196/101/196 192/97/192 191/96/191 +f 191/96/191 195/100/195 196/101/196 +f 197/102/197 193/98/193 132/65/132 +f 132/65/132 136/69/136 197/102/197 +f 198/103/198 194/99/194 193/98/193 +f 193/98/193 197/102/197 198/103/198 +f 199/104/199 195/100/195 194/99/194 +f 194/99/194 198/103/198 199/104/199 +f 200/105/200 196/101/196 195/100/195 +f 195/100/195 199/104/199 200/105/200 +f 201/106/201 197/102/197 136/69/136 +f 136/69/136 140/73/140 201/106/201 +f 202/107/202 198/103/198 197/102/197 +f 197/102/197 201/106/201 202/107/202 +f 203/108/203 199/104/199 198/103/198 +f 198/103/198 202/107/202 203/108/203 +f 204/109/204 200/105/200 199/104/199 +f 199/104/199 203/108/203 204/109/204 +f 205/110/205 201/106/201 140/73/140 +f 140/73/140 144/77/144 205/110/205 +f 206/111/206 202/107/202 201/106/201 +f 201/106/201 205/110/205 206/111/206 +f 207/112/207 203/108/203 202/107/202 +f 202/107/202 206/111/206 207/112/207 +f 208/113/208 204/109/204 203/108/203 +f 203/108/203 207/112/207 208/113/208 +f 146/114/146 205/110/205 144/77/144 +f 144/77/144 88/81/88 146/114/146 +f 148/115/148 206/111/206 205/110/205 +f 205/110/205 146/114/146 148/115/148 +f 150/116/150 207/112/207 206/111/206 +f 206/111/206 148/115/148 150/116/150 +f 152/117/152 208/113/208 207/112/207 +f 207/112/207 150/116/150 152/117/152 +f 209/118/209 210/119/210 152/89/152 +f 152/89/152 151/88/151 209/118/209 +f 211/120/211 212/121/212 210/119/210 +f 210/119/210 209/118/209 211/120/211 +f 213/122/213 214/123/214 212/121/212 +f 212/121/212 211/120/211 213/122/213 +f 214/123/214 213/122/213 215/124/215 +f 216/125/216 209/118/209 151/88/151 +f 151/88/151 156/93/156 216/125/216 +f 217/126/217 211/120/211 209/118/209 +f 209/118/209 216/125/216 217/126/217 +f 218/127/218 213/122/213 211/120/211 +f 211/120/211 217/126/217 218/127/218 +f 213/122/213 218/127/218 215/128/215 +f 219/129/219 216/125/216 156/93/156 +f 156/93/156 160/97/160 219/129/219 +f 220/130/220 217/126/217 216/125/216 +f 216/125/216 219/129/219 220/130/220 +f 221/131/221 218/127/218 217/126/217 +f 217/126/217 220/130/220 221/131/221 +f 218/127/218 221/131/221 215/132/215 +f 222/133/222 219/129/219 160/97/160 +f 160/97/160 164/101/164 222/133/222 +f 223/134/223 220/130/220 219/129/219 +f 219/129/219 222/133/222 223/134/223 +f 224/135/224 221/131/221 220/130/220 +f 220/130/220 223/134/223 224/135/224 +f 221/131/221 224/135/224 215/136/215 +f 225/137/225 222/133/222 164/101/164 +f 164/101/164 168/105/168 225/137/225 +f 226/138/226 223/134/223 222/133/222 +f 222/133/222 225/137/225 226/138/226 +f 227/139/227 224/135/224 223/134/223 +f 223/134/223 226/138/226 227/139/227 +f 224/135/224 227/139/227 215/140/215 +f 228/141/228 225/137/225 168/105/168 +f 168/105/168 172/109/172 228/141/228 +f 229/142/229 226/138/226 225/137/225 +f 225/137/225 228/141/228 229/142/229 +f 230/143/230 227/139/227 226/138/226 +f 226/138/226 229/142/229 230/143/230 +f 227/139/227 230/143/230 215/144/215 +f 231/145/231 228/141/228 172/109/172 +f 172/109/172 176/113/176 231/145/231 +f 232/146/232 229/142/229 228/141/228 +f 228/141/228 231/145/231 232/146/232 +f 233/147/233 230/143/230 229/142/229 +f 229/142/229 232/146/232 233/147/233 +f 230/143/230 233/147/233 215/148/215 +f 234/149/234 231/145/231 176/113/176 +f 176/113/176 180/117/180 234/149/234 +f 235/150/235 232/146/232 231/145/231 +f 231/145/231 234/149/234 235/150/235 +f 236/151/236 233/147/233 232/146/232 +f 232/146/232 235/150/235 236/151/236 +f 233/147/233 236/151/236 215/152/215 +f 237/118/237 234/119/234 180/89/180 +f 180/89/180 184/88/184 237/118/237 +f 238/120/238 235/121/235 234/119/234 +f 234/119/234 237/118/237 238/120/238 +f 239/122/239 236/123/236 235/121/235 +f 235/121/235 238/120/238 239/122/239 +f 236/123/236 239/122/239 215/124/215 +f 240/125/240 237/118/237 184/88/184 +f 184/88/184 188/93/188 240/125/240 +f 241/126/241 238/120/238 237/118/237 +f 237/118/237 240/125/240 241/126/241 +f 242/127/242 239/122/239 238/120/238 +f 238/120/238 241/126/241 242/127/242 +f 239/122/239 242/127/242 215/128/215 +f 243/129/243 240/125/240 188/93/188 +f 188/93/188 192/97/192 243/129/243 +f 244/130/244 241/126/241 240/125/240 +f 240/125/240 243/129/243 244/130/244 +f 245/131/245 242/127/242 241/126/241 +f 241/126/241 244/130/244 245/131/245 +f 242/127/242 245/131/245 215/132/215 +f 246/133/246 243/129/243 192/97/192 +f 192/97/192 196/101/196 246/133/246 +f 247/134/247 244/130/244 243/129/243 +f 243/129/243 246/133/246 247/134/247 +f 248/135/248 245/131/245 244/130/244 +f 244/130/244 247/134/247 248/135/248 +f 245/131/245 248/135/248 215/136/215 +f 249/137/249 246/133/246 196/101/196 +f 196/101/196 200/105/200 249/137/249 +f 250/138/250 247/134/247 246/133/246 +f 246/133/246 249/137/249 250/138/250 +f 251/139/251 248/135/248 247/134/247 +f 247/134/247 250/138/250 251/139/251 +f 248/135/248 251/139/251 215/140/215 +f 252/141/252 249/137/249 200/105/200 +f 200/105/200 204/109/204 252/141/252 +f 253/142/253 250/138/250 249/137/249 +f 249/137/249 252/141/252 253/142/253 +f 254/143/254 251/139/251 250/138/250 +f 250/138/250 253/142/253 254/143/254 +f 251/139/251 254/143/254 215/144/215 +f 255/145/255 252/141/252 204/109/204 +f 204/109/204 208/113/208 255/145/255 +f 256/146/256 253/142/253 252/141/252 +f 252/141/252 255/145/255 256/146/256 +f 257/147/257 254/143/254 253/142/253 +f 253/142/253 256/146/256 257/147/257 +f 254/143/254 257/147/257 215/148/215 +f 210/149/210 255/145/255 208/113/208 +f 208/113/208 152/117/152 210/149/210 +f 212/150/212 256/146/256 255/145/255 +f 255/145/255 210/149/210 212/150/212 +f 214/151/214 257/147/257 256/146/256 +f 256/146/256 212/150/212 214/151/214 +f 257/147/257 214/151/214 215/152/215 +f 258/153/258 259/154/259 260/65/260 +f 260/65/260 261/155/261 258/153/258 +f 262/156/262 263/157/263 259/154/259 +f 259/154/259 258/153/258 262/156/262 +f 264/158/264 265/159/265 263/157/263 +f 263/157/263 262/156/262 264/158/264 +f 266/160/266 267/161/267 265/159/265 +f 265/159/265 264/158/264 266/160/266 +f 268/162/268 258/153/258 261/155/261 +f 261/155/261 269/69/269 268/162/268 +f 270/163/270 262/156/262 258/153/258 +f 258/153/258 268/162/268 270/163/270 +f 271/164/271 264/158/264 262/156/262 +f 262/156/262 270/163/270 271/164/271 +f 272/165/272 266/160/266 264/158/264 +f 264/158/264 271/164/271 272/165/272 +f 273/166/273 268/162/268 269/69/269 +f 269/69/269 274/167/274 273/166/273 +f 275/168/275 270/163/270 268/162/268 +f 268/162/268 273/166/273 275/168/275 +f 276/169/276 271/164/271 270/163/270 +f 270/163/270 275/168/275 276/169/276 +f 277/170/277 272/165/272 271/164/271 +f 271/164/271 276/169/276 277/170/277 +f 278/171/278 273/166/273 274/167/274 +f 274/167/274 279/73/279 278/171/278 +f 280/172/280 275/168/275 273/166/273 +f 273/166/273 278/171/278 280/172/280 +f 281/173/281 276/169/276 275/168/275 +f 275/168/275 280/172/280 281/173/281 +f 282/174/282 277/170/277 276/169/276 +f 276/169/276 281/173/281 282/174/282 +f 283/175/283 278/171/278 279/73/279 +f 279/73/279 284/176/284 283/175/283 +f 285/177/285 280/172/280 278/171/278 +f 278/171/278 283/175/283 285/177/285 +f 286/178/286 281/173/281 280/172/280 +f 280/172/280 285/177/285 286/178/286 +f 287/179/287 282/174/282 281/173/281 +f 281/173/281 286/178/286 287/179/287 +f 288/180/288 283/175/283 284/176/284 +f 284/176/284 289/77/289 288/180/288 +f 290/181/290 285/177/285 283/175/283 +f 283/175/283 288/180/288 290/181/290 +f 291/182/291 286/178/286 285/177/285 +f 285/177/285 290/181/290 291/182/291 +f 292/183/292 287/179/287 286/178/286 +f 286/178/286 291/182/291 292/183/292 +f 293/184/293 288/180/288 289/77/289 +f 289/77/289 294/185/294 293/184/293 +f 295/186/295 290/181/290 288/180/288 +f 288/180/288 293/184/293 295/186/295 +f 296/187/296 291/182/291 290/181/290 +f 290/181/290 295/186/295 296/187/296 +f 297/188/297 292/183/292 291/182/291 +f 291/182/291 296/187/296 297/188/297 +f 259/189/259 293/184/293 294/185/294 +f 294/185/294 260/81/260 259/189/259 +f 263/190/263 295/186/295 293/184/293 +f 293/184/293 259/189/259 263/190/263 +f 265/191/265 296/187/296 295/186/295 +f 295/186/295 263/190/263 265/191/265 +f 267/192/267 297/188/297 296/187/296 +f 296/187/296 265/191/265 267/192/267 +f 298/193/298 299/194/299 267/161/267 +f 267/161/267 266/160/266 298/193/298 +f 300/195/300 301/196/301 299/194/299 +f 299/194/299 298/193/298 300/195/300 +f 302/197/302 303/198/303 301/196/301 +f 301/196/301 300/195/300 302/197/302 +f 304/199/304 116/136/305 303/198/303 +f 303/198/303 302/197/302 304/199/304 +f 305/200/306 298/193/298 266/160/266 +f 266/160/266 272/165/272 305/200/306 +f 306/201/307 300/195/300 298/193/298 +f 298/193/298 305/200/306 306/201/307 +f 307/202/308 302/197/302 300/195/300 +f 300/195/300 306/201/307 307/202/308 +f 308/140/309 304/199/304 302/197/302 +f 302/197/302 307/202/308 308/140/309 +f 309/203/310 305/200/306 272/165/272 +f 272/165/272 277/170/277 309/203/310 +f 310/204/311 306/201/307 305/200/306 +f 305/200/306 309/203/310 310/204/311 +f 311/205/312 307/202/308 306/201/307 +f 306/201/307 310/204/311 311/205/312 +f 312/206/313 308/140/309 307/202/308 +f 307/202/308 311/205/312 312/206/313 +f 313/207/314 309/203/310 277/170/277 +f 277/170/277 282/174/282 313/207/314 +f 314/208/315 310/204/311 309/203/310 +f 309/203/310 313/207/314 314/208/315 +f 315/209/316 311/205/312 310/204/311 +f 310/204/311 314/208/315 315/209/316 +f 316/144/317 312/206/313 311/205/312 +f 311/205/312 315/209/316 316/144/317 +f 317/210/318 313/207/314 282/174/282 +f 282/174/282 287/179/287 317/210/318 +f 318/211/319 314/208/315 313/207/314 +f 313/207/314 317/210/318 318/211/319 +f 319/212/320 315/209/316 314/208/315 +f 314/208/315 318/211/319 319/212/320 +f 320/213/321 316/144/317 315/209/316 +f 315/209/316 319/212/320 320/213/321 +f 321/214/322 317/210/318 287/179/287 +f 287/179/287 292/183/292 321/214/322 +f 322/215/323 318/211/319 317/210/318 +f 317/210/318 321/214/322 322/215/323 +f 323/216/324 319/212/320 318/211/319 +f 318/211/319 322/215/323 323/216/324 +f 324/148/325 320/213/321 319/212/320 +f 319/212/320 323/216/324 324/148/325 +f 325/217/326 321/214/322 292/183/292 +f 292/183/292 297/188/297 325/217/326 +f 326/218/327 322/215/323 321/214/322 +f 321/214/322 325/217/326 326/218/327 +f 327/219/328 323/216/324 322/215/323 +f 322/215/323 326/218/327 327/219/328 +f 328/220/329 324/148/325 323/216/324 +f 323/216/324 327/219/328 328/220/329 +f 299/221/299 325/217/326 297/188/297 +f 297/188/297 267/192/267 299/221/299 +f 301/222/301 326/218/327 325/217/326 +f 325/217/326 299/221/299 301/222/301 +f 303/223/303 327/219/328 326/218/327 +f 326/218/327 301/222/301 303/223/303 +f 116/152/305 328/220/329 327/219/328 +f 327/219/328 303/223/303 116/152/305 +f 329/224/330 330/225/331 331/144/332 +f 331/144/332 332/206/333 329/224/330 +f 333/226/334 334/227/335 330/225/331 +f 330/225/331 329/224/330 333/226/334 +f 335/228/336 336/229/337 334/227/335 +f 334/227/335 333/226/334 335/228/336 +f 337/230/338 338/231/339 336/229/337 +f 336/229/337 335/228/336 337/230/338 +f 339/232/340 329/224/330 332/206/333 +f 332/206/333 340/140/341 339/232/340 +f 341/233/342 333/226/334 329/224/330 +f 329/224/330 339/232/340 341/233/342 +f 342/234/343 335/228/336 333/226/334 +f 333/226/334 341/233/342 342/234/343 +f 343/235/344 337/230/338 335/228/336 +f 335/228/336 342/234/343 343/235/344 +f 344/236/345 339/232/340 340/140/341 +f 340/140/341 345/199/346 344/236/345 +f 346/237/347 341/233/342 339/232/340 +f 339/232/340 344/236/345 346/237/347 +f 347/238/348 342/234/343 341/233/342 +f 341/233/342 346/237/347 347/238/348 +f 348/239/349 343/235/344 342/234/343 +f 342/234/343 347/238/348 348/239/349 +f 349/240/350 344/236/345 345/199/346 +f 345/199/346 350/136/351 349/240/350 +f 351/241/352 346/237/347 344/236/345 +f 344/236/345 349/240/350 351/241/352 +f 352/242/353 347/238/348 346/237/347 +f 346/237/347 351/241/352 352/242/353 +f 353/243/354 348/239/349 347/238/348 +f 347/238/348 352/242/353 353/243/354 +f 354/244/355 349/245/350 350/152/351 +f 350/152/351 355/220/356 354/244/355 +f 356/246/357 351/247/352 349/245/350 +f 349/245/350 354/244/355 356/246/357 +f 357/248/358 352/249/353 351/247/352 +f 351/247/352 356/246/357 357/248/358 +f 358/250/359 353/251/354 352/249/353 +f 352/249/353 357/248/358 358/250/359 +f 359/252/360 354/244/355 355/220/356 +f 355/220/356 360/148/361 359/252/360 +f 361/253/362 356/246/357 354/244/355 +f 354/244/355 359/252/360 361/253/362 +f 362/254/363 357/248/358 356/246/357 +f 356/246/357 361/253/362 362/254/363 +f 363/255/364 358/250/359 357/248/358 +f 357/248/358 362/254/363 363/255/364 +f 364/256/365 359/252/360 360/148/361 +f 360/148/361 365/213/366 364/256/365 +f 366/257/367 361/253/362 359/252/360 +f 359/252/360 364/256/365 366/257/367 +f 367/258/368 362/254/363 361/253/362 +f 361/253/362 366/257/367 367/258/368 +f 368/259/369 363/255/364 362/254/363 +f 362/254/363 367/258/368 368/259/369 +f 330/225/331 364/256/365 365/213/366 +f 365/213/366 331/144/332 330/225/331 +f 334/227/335 366/257/367 364/256/365 +f 364/256/365 330/225/331 334/227/335 +f 336/229/337 367/258/368 366/257/367 +f 366/257/367 334/227/335 336/229/337 +f 338/231/339 368/259/369 367/258/368 +f 367/258/368 336/229/337 338/231/339 +f 369/260/370 370/261/371 338/231/339 +f 338/231/339 337/230/338 369/260/370 +f 371/262/372 372/263/373 370/261/371 +f 370/261/371 369/260/370 371/262/372 +f 373/264/374 374/265/375 372/263/373 +f 372/263/373 371/262/372 373/264/374 +f 375/167/376 376/73/377 374/265/375 +f 374/265/375 373/264/374 375/167/376 +f 377/266/378 369/260/370 337/230/338 +f 337/230/338 343/235/344 377/266/378 +f 378/267/379 371/262/372 369/260/370 +f 369/260/370 377/266/378 378/267/379 +f 379/268/380 373/264/374 371/262/372 +f 371/262/372 378/267/379 379/268/380 +f 380/69/381 375/167/376 373/264/374 +f 373/264/374 379/268/380 380/69/381 +f 381/269/382 377/266/378 343/235/344 +f 343/235/344 348/239/349 381/269/382 +f 382/270/383 378/267/379 377/266/378 +f 377/266/378 381/269/382 382/270/383 +f 383/271/384 379/268/380 378/267/379 +f 378/267/379 382/270/383 383/271/384 +f 384/155/385 380/69/381 379/268/380 +f 379/268/380 383/271/384 384/155/385 +f 385/272/386 381/269/382 348/239/349 +f 348/239/349 353/243/354 385/272/386 +f 386/273/387 382/270/383 381/269/382 +f 381/269/382 385/272/386 386/273/387 +f 387/274/388 383/271/384 382/270/383 +f 382/270/383 386/273/387 387/274/388 +f 388/65/389 384/155/385 383/271/384 +f 383/271/384 387/274/388 388/65/389 +f 389/275/390 385/276/386 353/251/354 +f 353/251/354 358/250/359 389/275/390 +f 390/277/391 386/278/387 385/276/386 +f 385/276/386 389/275/390 390/277/391 +f 391/279/392 387/280/388 386/278/387 +f 386/278/387 390/277/391 391/279/392 +f 392/185/393 388/81/389 387/280/388 +f 387/280/388 391/279/392 392/185/393 +f 393/281/394 389/275/390 358/250/359 +f 358/250/359 363/255/364 393/281/394 +f 394/282/395 390/277/391 389/275/390 +f 389/275/390 393/281/394 394/282/395 +f 395/283/396 391/279/392 390/277/391 +f 390/277/391 394/282/395 395/283/396 +f 396/77/397 392/185/393 391/279/392 +f 391/279/392 395/283/396 396/77/397 +f 397/284/398 393/281/394 363/255/364 +f 363/255/364 368/259/369 397/284/398 +f 398/285/399 394/282/395 393/281/394 +f 393/281/394 397/284/398 398/285/399 +f 399/286/400 395/283/396 394/282/395 +f 394/282/395 398/285/399 399/286/400 +f 400/176/401 396/77/397 395/283/396 +f 395/283/396 399/286/400 400/176/401 +f 370/261/371 397/284/398 368/259/369 +f 368/259/369 338/231/339 370/261/371 +f 372/263/373 398/285/399 397/284/398 +f 397/284/398 370/261/371 372/263/373 +f 374/265/375 399/286/400 398/285/399 +f 398/285/399 372/263/373 374/265/375 +f 376/73/377 400/176/401 399/286/400 +f 399/286/400 374/265/375 376/73/377 +f 401/156/402 402/157/403 403/65/404 +f 404/160/405 405/161/406 402/157/403 +f 402/157/403 401/156/402 404/160/405 +f 406/195/407 407/196/408 405/161/406 +f 405/161/406 404/160/405 406/195/407 +f 408/199/409 409/136/410 407/196/408 +f 407/196/408 406/195/407 408/199/409 +f 410/163/411 401/156/402 403/155/404 +f 411/165/412 404/160/405 401/156/402 +f 401/156/402 410/163/411 411/165/412 +f 412/201/413 406/195/407 404/160/405 +f 404/160/405 411/165/412 412/201/413 +f 413/140/414 408/199/409 406/195/407 +f 406/195/407 412/201/413 413/140/414 +f 414/168/415 410/163/411 403/69/404 +f 415/170/416 411/165/412 410/163/411 +f 410/163/411 414/168/415 415/170/416 +f 416/204/417 412/201/413 411/165/412 +f 411/165/412 415/170/416 416/204/417 +f 417/206/418 413/140/414 412/201/413 +f 412/201/413 416/204/417 417/206/418 +f 418/172/419 414/168/415 403/167/404 +f 419/174/420 415/170/416 414/168/415 +f 414/168/415 418/172/419 419/174/420 +f 420/208/421 416/204/417 415/170/416 +f 415/170/416 419/174/420 420/208/421 +f 421/144/422 417/206/418 416/204/417 +f 416/204/417 420/208/421 421/144/422 +f 422/177/423 418/172/419 403/73/404 +f 423/179/424 419/174/420 418/172/419 +f 418/172/419 422/177/423 423/179/424 +f 424/211/425 420/208/421 419/174/420 +f 419/174/420 423/179/424 424/211/425 +f 425/213/426 421/144/422 420/208/421 +f 420/208/421 424/211/425 425/213/426 +f 426/181/427 422/177/423 403/176/404 +f 427/183/428 423/179/424 422/177/423 +f 422/177/423 426/181/427 427/183/428 +f 428/215/429 424/211/425 423/179/424 +f 423/179/424 427/183/428 428/215/429 +f 429/148/430 425/213/426 424/211/425 +f 424/211/425 428/215/429 429/148/430 +f 430/186/431 426/181/427 403/77/404 +f 431/188/432 427/183/428 426/181/427 +f 426/181/427 430/186/431 431/188/432 +f 432/218/433 428/215/429 427/183/428 +f 427/183/428 431/188/432 432/218/433 +f 433/220/434 429/148/430 428/215/429 +f 428/215/429 432/218/433 433/220/434 +f 434/190/435 430/186/431 403/185/404 +f 435/192/436 431/188/432 430/186/431 +f 430/186/431 434/190/435 435/192/436 +f 436/222/437 432/218/433 431/188/432 +f 431/188/432 435/192/436 436/222/437 +f 437/152/438 433/220/434 432/218/433 +f 432/218/433 436/222/437 437/152/438 +f 438/156/439 434/157/435 403/65/404 +f 439/160/440 435/161/436 434/157/435 +f 434/157/435 438/156/439 439/160/440 +f 440/195/441 436/196/437 435/161/436 +f 435/161/436 439/160/440 440/195/441 +f 441/199/442 437/136/438 436/196/437 +f 436/196/437 440/195/441 441/199/442 +f 442/163/443 438/156/439 403/155/404 +f 443/165/444 439/160/440 438/156/439 +f 438/156/439 442/163/443 443/165/444 +f 444/201/445 440/195/441 439/160/440 +f 439/160/440 443/165/444 444/201/445 +f 445/140/446 441/199/442 440/195/441 +f 440/195/441 444/201/445 445/140/446 +f 446/168/447 442/163/443 403/69/404 +f 447/170/448 443/165/444 442/163/443 +f 442/163/443 446/168/447 447/170/448 +f 448/204/449 444/201/445 443/165/444 +f 443/165/444 447/170/448 448/204/449 +f 449/206/450 445/140/446 444/201/445 +f 444/201/445 448/204/449 449/206/450 +f 450/172/451 446/168/447 403/167/404 +f 451/174/452 447/170/448 446/168/447 +f 446/168/447 450/172/451 451/174/452 +f 452/208/453 448/204/449 447/170/448 +f 447/170/448 451/174/452 452/208/453 +f 453/144/454 449/206/450 448/204/449 +f 448/204/449 452/208/453 453/144/454 +f 454/177/455 450/172/451 403/73/404 +f 455/179/456 451/174/452 450/172/451 +f 450/172/451 454/177/455 455/179/456 +f 456/211/457 452/208/453 451/174/452 +f 451/174/452 455/179/456 456/211/457 +f 457/213/458 453/144/454 452/208/453 +f 452/208/453 456/211/457 457/213/458 +f 458/181/459 454/177/455 403/176/404 +f 459/183/460 455/179/456 454/177/455 +f 454/177/455 458/181/459 459/183/460 +f 460/215/461 456/211/457 455/179/456 +f 455/179/456 459/183/460 460/215/461 +f 461/148/462 457/213/458 456/211/457 +f 456/211/457 460/215/461 461/148/462 +f 462/186/463 458/181/459 403/77/404 +f 463/188/464 459/183/460 458/181/459 +f 458/181/459 462/186/463 463/188/464 +f 464/218/465 460/215/461 459/183/460 +f 459/183/460 463/188/464 464/218/465 +f 465/220/466 461/148/462 460/215/461 +f 460/215/461 464/218/465 465/220/466 +f 402/190/403 462/186/463 403/185/404 +f 405/192/406 463/188/464 462/186/463 +f 462/186/463 402/190/403 405/192/406 +f 407/222/408 464/218/465 463/188/464 +f 463/188/464 405/192/406 407/222/408 +f 409/152/410 465/220/466 464/218/465 +f 464/218/465 407/222/408 409/152/410 +f 466/156/467 467/157/468 409/65/410 +f 409/65/410 408/155/409 466/156/467 +f 468/160/469 469/161/470 467/157/468 +f 467/157/468 466/156/467 468/160/469 +f 470/195/471 471/196/472 469/161/470 +f 469/161/470 468/160/469 470/195/471 +f 472/199/473 473/136/474 471/196/472 +f 471/196/472 470/195/471 472/199/473 +f 474/163/475 466/156/467 408/155/409 +f 408/155/409 413/69/414 474/163/475 +f 475/165/476 468/160/469 466/156/467 +f 466/156/467 474/163/475 475/165/476 +f 476/201/477 470/195/471 468/160/469 +f 468/160/469 475/165/476 476/201/477 +f 477/140/478 472/199/473 470/195/471 +f 470/195/471 476/201/477 477/140/478 +f 478/168/479 474/163/475 413/69/414 +f 413/69/414 417/167/418 478/168/479 +f 479/170/480 475/165/476 474/163/475 +f 474/163/475 478/168/479 479/170/480 +f 480/204/481 476/201/477 475/165/476 +f 475/165/476 479/170/480 480/204/481 +f 481/206/482 477/140/478 476/201/477 +f 476/201/477 480/204/481 481/206/482 +f 482/172/483 478/168/479 417/167/418 +f 417/167/418 421/73/422 482/172/483 +f 483/174/484 479/170/480 478/168/479 +f 478/168/479 482/172/483 483/174/484 +f 484/208/485 480/204/481 479/170/480 +f 479/170/480 483/174/484 484/208/485 +f 485/144/486 481/206/482 480/204/481 +f 480/204/481 484/208/485 485/144/486 +f 486/177/487 482/172/483 421/73/422 +f 421/73/422 425/176/426 486/177/487 +f 487/179/488 483/174/484 482/172/483 +f 482/172/483 486/177/487 487/179/488 +f 488/211/489 484/208/485 483/174/484 +f 483/174/484 487/179/488 488/211/489 +f 489/213/490 485/144/486 484/208/485 +f 484/208/485 488/211/489 489/213/490 +f 490/181/491 486/177/487 425/176/426 +f 425/176/426 429/77/430 490/181/491 +f 491/183/492 487/179/488 486/177/487 +f 486/177/487 490/181/491 491/183/492 +f 492/215/493 488/211/489 487/179/488 +f 487/179/488 491/183/492 492/215/493 +f 493/148/494 489/213/490 488/211/489 +f 488/211/489 492/215/493 493/148/494 +f 494/186/495 490/181/491 429/77/430 +f 429/77/430 433/185/434 494/186/495 +f 495/188/496 491/183/492 490/181/491 +f 490/181/491 494/186/495 495/188/496 +f 496/218/497 492/215/493 491/183/492 +f 491/183/492 495/188/496 496/218/497 +f 497/220/498 493/148/494 492/215/493 +f 492/215/493 496/218/497 497/220/498 +f 498/190/499 494/186/495 433/185/434 +f 433/185/434 437/81/438 498/190/499 +f 499/192/500 495/188/496 494/186/495 +f 494/186/495 498/190/499 499/192/500 +f 500/222/501 496/218/497 495/188/496 +f 495/188/496 499/192/500 500/222/501 +f 501/152/502 497/220/498 496/218/497 +f 496/218/497 500/222/501 501/152/502 +f 502/156/503 498/157/499 437/65/438 +f 437/65/438 441/155/442 502/156/503 +f 503/160/504 499/161/500 498/157/499 +f 498/157/499 502/156/503 503/160/504 +f 504/195/505 500/196/501 499/161/500 +f 499/161/500 503/160/504 504/195/505 +f 505/199/506 501/136/502 500/196/501 +f 500/196/501 504/195/505 505/199/506 +f 506/163/507 502/156/503 441/155/442 +f 441/155/442 445/69/446 506/163/507 +f 507/165/508 503/160/504 502/156/503 +f 502/156/503 506/163/507 507/165/508 +f 508/201/509 504/195/505 503/160/504 +f 503/160/504 507/165/508 508/201/509 +f 509/140/510 505/199/506 504/195/505 +f 504/195/505 508/201/509 509/140/510 +f 510/168/511 506/163/507 445/69/446 +f 445/69/446 449/167/450 510/168/511 +f 511/170/512 507/165/508 506/163/507 +f 506/163/507 510/168/511 511/170/512 +f 512/204/513 508/201/509 507/165/508 +f 507/165/508 511/170/512 512/204/513 +f 513/206/514 509/140/510 508/201/509 +f 508/201/509 512/204/513 513/206/514 +f 514/172/515 510/168/511 449/167/450 +f 449/167/450 453/73/454 514/172/515 +f 515/174/516 511/170/512 510/168/511 +f 510/168/511 514/172/515 515/174/516 +f 516/208/517 512/204/513 511/170/512 +f 511/170/512 515/174/516 516/208/517 +f 517/144/518 513/206/514 512/204/513 +f 512/204/513 516/208/517 517/144/518 +f 518/177/519 514/172/515 453/73/454 +f 453/73/454 457/176/458 518/177/519 +f 519/179/520 515/174/516 514/172/515 +f 514/172/515 518/177/519 519/179/520 +f 520/211/521 516/208/517 515/174/516 +f 515/174/516 519/179/520 520/211/521 +f 521/213/522 517/144/518 516/208/517 +f 516/208/517 520/211/521 521/213/522 +f 522/181/523 518/177/519 457/176/458 +f 457/176/458 461/77/462 522/181/523 +f 523/183/524 519/179/520 518/177/519 +f 518/177/519 522/181/523 523/183/524 +f 524/215/525 520/211/521 519/179/520 +f 519/179/520 523/183/524 524/215/525 +f 525/148/526 521/213/522 520/211/521 +f 520/211/521 524/215/525 525/148/526 +f 526/186/527 522/181/523 461/77/462 +f 461/77/462 465/185/466 526/186/527 +f 527/188/528 523/183/524 522/181/523 +f 522/181/523 526/186/527 527/188/528 +f 528/218/529 524/215/525 523/183/524 +f 523/183/524 527/188/528 528/218/529 +f 529/220/530 525/148/526 524/215/525 +f 524/215/525 528/218/529 529/220/530 +f 467/190/468 526/186/527 465/185/466 +f 465/185/466 409/81/410 467/190/468 +f 469/192/470 527/188/528 526/186/527 +f 526/186/527 467/190/468 469/192/470 +f 471/222/472 528/218/529 527/188/528 +f 527/188/528 469/192/470 471/222/472 +f 473/152/474 529/220/530 528/218/529 +f 528/218/529 471/222/472 473/152/474 +# 992 faces + diff --git a/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Teapot.obj.meta b/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Teapot.obj.meta new file mode 100644 index 0000000..2f76cd7 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Teapot.obj.meta @@ -0,0 +1,77 @@ +fileFormatVersion: 2 +guid: 53158f4ed39ed53448df438bc212f7e8 +ModelImporter: + serializedVersion: 19 + fileIDToRecycleName: + 100000: //RootNode + 100002: Teapot001 + 400000: //RootNode + 400002: Teapot001 + 2300000: Teapot001 + 3300000: Teapot001 + 4300000: Teapot001 + 9500000: //RootNode + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleRotations: 1 + optimizeGameObjects: 0 + motionNodeName: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 0.1 + meshCompression: 0 + addColliders: 0 + importBlendShapes: 1 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 0 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 1 + tangentImportMode: 4 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + hasTranslationDoF: 0 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 0 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Teapot_Modified.obj b/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Teapot_Modified.obj new file mode 100644 index 0000000..eea5a08 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Teapot_Modified.obj @@ -0,0 +1,3506 @@ +# File exported by Unity3D version 5.3.5f1 +v 17.34540000 -6.93540000 33.21890000 +v 18.78210000 0.34050000 33.21890000 +v 19.04430000 0.34050000 32.22750000 +v 17.58740000 -7.03830000 32.22750000 +v 17.62610000 -7.05480000 33.54940000 +v 19.08630000 0.34050000 33.54940000 +v 18.19710000 -7.29770000 33.21890000 +v 19.70530000 0.34050000 33.21890000 +v 18.82610000 -7.56540000 32.22750000 +v 20.38720000 0.34050000 32.22750000 +v 13.40630000 -12.82090000 33.21890000 +v 13.59250000 -13.00710000 32.22750000 +v 13.62230000 -13.03690000 33.54940000 +v 14.06180000 -13.47640000 33.21890000 +v 14.54590000 -13.96050000 32.22750000 +v 7.52080000 -16.76000000 33.21890000 +v 7.62370000 -17.00200000 32.22750000 +v 7.64020000 -17.04070000 33.54940000 +v 7.88310000 -17.61170000 33.21890000 +v 8.15080000 -18.24070000 32.22750000 +v 0.24490000 -18.19670000 33.21890000 +v 0.24490000 -18.45890000 32.22750000 +v 0.24490000 -18.50090000 33.54940000 +v 0.24490000 -19.11990000 33.21890000 +v 0.24490000 -19.80180000 32.22750000 +v -7.24600000 -16.76000000 33.21890000 +v -7.64370000 -17.00200000 32.22750000 +v -7.21400000 -17.04070000 33.54940000 +v -7.40120000 -17.61170000 33.21890000 +v -7.66090000 -18.24070000 32.22750000 +v -13.10760000 -12.82090000 33.21890000 +v -13.55580000 -13.00710000 32.22750000 +v -13.18910000 -13.03690000 33.54940000 +v -13.57900000 -13.47640000 33.21890000 +v -14.05600000 -13.96050000 32.22750000 +v -16.92720000 -6.93540000 33.21890000 +v -17.26740000 -7.03830000 32.22750000 +v -17.15740000 -7.05480000 33.54940000 +v -17.70980000 -7.29770000 33.21890000 +v -18.33620000 -7.56540000 32.22750000 +v -18.29220000 0.34050000 33.21890000 +v -18.55440000 0.34050000 32.22750000 +v -18.59640000 0.34050000 33.54940000 +v -19.21540000 0.34050000 33.21890000 +v -19.89730000 0.34050000 32.22750000 +v -16.85560000 7.61630000 33.21890000 +v -18.29220000 0.34050000 33.21890000 +v -18.55440000 0.34050000 32.22750000 +v -17.09750000 7.71920000 32.22750000 +v -17.13620000 7.73570000 33.54940000 +v -18.59640000 0.34050000 33.54940000 +v -17.70720000 7.97860000 33.21890000 +v -19.21540000 0.34050000 33.21890000 +v -18.33620000 8.24630000 32.22750000 +v -19.89730000 0.34050000 32.22750000 +v -12.91640000 13.50180000 33.21890000 +v -13.10260000 13.68800000 32.22750000 +v -13.13240000 13.71780000 33.54940000 +v -13.57190000 14.15730000 33.21890000 +v -14.05600000 14.64140000 32.22750000 +v -7.03090000 17.44100000 33.21890000 +v -7.13380000 17.68290000 32.22750000 +v -7.15030000 17.72160000 33.54940000 +v -7.39320000 18.29260000 33.21890000 +v -7.66090000 18.92160000 32.22750000 +v 0.24490000 18.87760000 33.21890000 +v 0.24490000 19.13990000 32.22750000 +v 0.24490000 19.18180000 33.54940000 +v 0.24490000 19.80080000 33.21890000 +v 0.24490000 20.48270000 32.22750000 +v 7.52080000 17.44100000 33.21890000 +v 7.62370000 17.68290000 32.22750000 +v 7.64020000 17.72160000 33.54940000 +v 7.88310000 18.29260000 33.21890000 +v 8.15080000 18.92160000 32.22750000 +v 13.40630000 13.50180000 33.21890000 +v 13.59250000 13.68800000 32.22750000 +v 13.62230000 13.71780000 33.54940000 +v 14.06180000 14.15730000 33.21890000 +v 14.54590000 14.64140000 32.22750000 +v 17.34550000 7.61630000 33.21890000 +v 17.58740000 7.71920000 32.22750000 +v 17.62610000 7.73570000 33.54940000 +v 18.19710000 7.97860000 33.21890000 +v 18.82610000 8.24630000 32.22750000 +v 18.78210000 0.34050000 33.21890000 +v 19.04430000 0.34050000 32.22750000 +v 19.08630000 0.34050000 33.54940000 +v 19.70530000 0.34050000 33.21890000 +v 20.38720000 0.34050000 32.22750000 +v 21.10040000 -8.53300000 26.95590000 +v 22.85250000 0.34050000 26.95590000 +v 23.08430000 -9.37710000 21.77880000 +v 25.00310000 0.34050000 21.77880000 +v 24.48760000 -9.97420000 16.79040000 +v 26.52420000 0.34050000 16.79040000 +v 25.01990000 -10.20060000 12.08530000 +v 27.10120000 0.34050000 12.08530000 +v 16.29630000 -15.71090000 26.95590000 +v 17.82320000 -17.23780000 21.77880000 +v 18.90320000 -18.31780000 16.79040000 +v 19.31290000 -18.72750000 12.08530000 +v 9.11840000 -20.51500000 26.95590000 +v 9.96250000 -22.49890000 21.77880000 +v 10.55960000 -23.90220000 16.79040000 +v 10.78600000 -24.43450000 12.08530000 +v 0.24490000 -22.26710000 26.95590000 +v 0.24490000 -24.41770000 21.77880000 +v 0.24490000 -25.93880000 16.79040000 +v 0.24490000 -26.51580000 12.08530000 +v -8.62850000 -20.51500000 26.95590000 +v -9.47260000 -22.49890000 21.77880000 +v -10.06970000 -23.90220000 16.79040000 +v -10.29610000 -24.43450000 12.08530000 +v -15.80640000 -15.71090000 26.95590000 +v -17.33330000 -17.23780000 21.77880000 +v -18.41330000 -18.31780000 16.79040000 +v -18.82300000 -18.72750000 12.08530000 +v -20.61050000 -8.53300000 26.95590000 +v -22.59440000 -9.37710000 21.77880000 +v -23.99770000 -9.97420000 16.79040000 +v -24.53000000 -10.20060000 12.08530000 +v -22.36260000 0.34050000 26.95590000 +v -24.51320000 0.34050000 21.77880000 +v -26.03430000 0.34050000 16.79040000 +v -26.61130000 0.34050000 12.08530000 +v -20.61050000 9.21390000 26.95590000 +v -22.36260000 0.34050000 26.95590000 +v -22.59440000 10.05800000 21.77880000 +v -24.51320000 0.34050000 21.77880000 +v -23.99770000 10.65510000 16.79040000 +v -26.03430000 0.34050000 16.79040000 +v -24.53000000 10.88150000 12.08530000 +v -26.61130000 0.34050000 12.08530000 +v -15.80640000 16.39180000 26.95590000 +v -17.33330000 17.91870000 21.77880000 +v -18.41330000 18.99880000 16.79040000 +v -18.82300000 19.40840000 12.08530000 +v -8.62850000 21.19590000 26.95590000 +v -9.47260000 23.17980000 21.77880000 +v -10.06970000 24.58310000 16.79040000 +v -10.29610000 25.11540000 12.08530000 +v 0.24490000 22.94800000 26.95590000 +v 0.24490000 25.09860000 21.77880000 +v 0.24490000 26.61970000 16.79040000 +v 0.24490000 27.19670000 12.08530000 +v 9.11840000 21.19590000 26.95590000 +v 9.96250000 23.17980000 21.77880000 +v 10.55960000 24.58310000 16.79040000 +v 10.78600000 25.11540000 12.08530000 +v 16.29630000 16.39180000 26.95590000 +v 17.82320000 17.91870000 21.77880000 +v 18.90320000 18.99880000 16.79040000 +v 19.31290000 19.40840000 12.08530000 +v 21.10040000 9.21390000 26.95590000 +v 23.08430000 10.05800000 21.77880000 +v 24.48760000 10.65510000 16.79040000 +v 25.01990000 10.88150000 12.08530000 +v 22.85250000 0.34050000 26.95590000 +v 25.00310000 0.34050000 21.77880000 +v 26.52420000 0.34050000 16.79040000 +v 27.10120000 0.34050000 12.08530000 +v 24.05210000 -9.78890000 8.10410000 +v 26.05220000 0.34050000 8.10410000 +v 21.92300000 -8.88300000 5.16140000 +v 23.74420000 0.34050000 5.16140000 +v 19.79390000 -7.97710000 3.16300000 +v 21.43620000 0.34050000 3.16300000 +v 18.82610000 -7.56540000 2.01420000 +v 20.38720000 0.34050000 2.01420000 +v 18.56810000 -17.98270000 8.10410000 +v 16.92940000 -16.34400000 5.16140000 +v 15.29080000 -14.70540000 3.16300000 +v 14.54590000 -13.96050000 2.01420000 +v 10.37430000 -23.46670000 8.10410000 +v 9.46840000 -21.33760000 5.16140000 +v 8.56250000 -19.20850000 3.16300000 +v 8.15080000 -18.24070000 2.01420000 +v 0.24490000 -25.46680000 8.10410000 +v 0.24490000 -23.15880000 5.16140000 +v 0.24490000 -20.85080000 3.16300000 +v 0.24490000 -19.80180000 2.01420000 +v -9.88440000 -23.46670000 8.10410000 +v -8.97850000 -21.33760000 5.16140000 +v -8.07260000 -19.20850000 3.16300000 +v -7.66090000 -18.24070000 2.01420000 +v -18.07820000 -17.98270000 8.10410000 +v -16.43950000 -16.34400000 5.16140000 +v -14.80090000 -14.70540000 3.16300000 +v -14.05600000 -13.96050000 2.01420000 +v -23.56220000 -9.78890000 8.10410000 +v -21.43310000 -8.88300000 5.16140000 +v -19.30400000 -7.97710000 3.16300000 +v -18.33620000 -7.56540000 2.01420000 +v -25.56230000 0.34050000 8.10410000 +v -23.25430000 0.34050000 5.16140000 +v -20.94630000 0.34050000 3.16300000 +v -19.89730000 0.34050000 2.01420000 +v -23.56220000 10.46980000 8.10410000 +v -25.56230000 0.34050000 8.10410000 +v -21.43310000 9.56390000 5.16140000 +v -23.25430000 0.34050000 5.16140000 +v -19.30400000 8.65800000 3.16300000 +v -20.94630000 0.34050000 3.16300000 +v -18.33620000 8.24630000 2.01420000 +v -19.89730000 0.34050000 2.01420000 +v -18.07820000 18.66360000 8.10410000 +v -16.43950000 17.02490000 5.16140000 +v -14.80090000 15.38630000 3.16300000 +v -14.05600000 14.64140000 2.01420000 +v -9.88440000 24.14760000 8.10410000 +v -8.97850000 22.01850000 5.16140000 +v -8.07260000 19.88940000 3.16300000 +v -7.66090000 18.92160000 2.01420000 +v 0.24490000 26.14770000 8.10410000 +v 0.24490000 23.83970000 5.16140000 +v 0.24490000 21.53170000 3.16300000 +v 0.24490000 20.48270000 2.01420000 +v 10.37430000 24.14760000 8.10410000 +v 9.46840000 22.01850000 5.16140000 +v 8.56250000 19.88940000 3.16300000 +v 8.15080000 18.92160000 2.01420000 +v 18.56810000 18.66360000 8.10410000 +v 16.92940000 17.02490000 5.16140000 +v 15.29080000 15.38630000 3.16300000 +v 14.54590000 14.64140000 2.01420000 +v 24.05210000 10.46980000 8.10410000 +v 21.92300000 9.56390000 5.16140000 +v 19.79390000 8.65800000 3.16300000 +v 18.82610000 8.24630000 2.01420000 +v 26.05220000 0.34050000 8.10410000 +v 23.74420000 0.34050000 5.16140000 +v 21.43620000 0.34050000 3.16300000 +v 20.38720000 0.34050000 2.01420000 +v 18.40520000 -7.38620000 1.27460000 +v 19.93080000 0.34050000 1.27460000 +v 16.15510000 -6.42890000 0.62940000 +v 17.49170000 0.34050000 0.62940000 +v 10.59530000 -4.06330000 0.17310000 +v 11.46480000 0.34050000 0.17310000 +v 0.24490000 0.34050000 0.00000000 +v 14.22190000 -13.63650000 1.27460000 +v 12.49020000 -11.90480000 0.62940000 +v 8.21100000 -7.62560000 0.17310000 +v 0.24490000 0.34050000 0.00000000 +v 7.97170000 -17.81980000 1.27460000 +v 7.01430000 -15.56970000 0.62940000 +v 4.64870000 -10.00980000 0.17310000 +v 0.24490000 0.34050000 0.00000000 +v 0.24490000 -19.34540000 1.27460000 +v 0.24490000 -16.90630000 0.62940000 +v 0.24490000 -10.87940000 0.17310000 +v 0.24490000 0.34050000 0.00000000 +v -7.48180000 -17.81980000 1.27460000 +v -6.52440000 -15.56970000 0.62940000 +v -4.15880000 -10.00980000 0.17310000 +v 0.24490000 0.34050000 0.00000000 +v -13.73200000 -13.63650000 1.27460000 +v -12.00030000 -11.90480000 0.62940000 +v -7.72110000 -7.62560000 0.17310000 +v 0.24490000 0.34050000 0.00000000 +v -17.91530000 -7.38620000 1.27460000 +v -15.66520000 -6.42890000 0.62940000 +v -10.10540000 -4.06330000 0.17310000 +v 0.24490000 0.34050000 0.00000000 +v -19.44090000 0.34050000 1.27460000 +v -17.00180000 0.34050000 0.62940000 +v -10.97490000 0.34050000 0.17310000 +v 0.24490000 0.34050000 0.00000000 +v -17.91530000 8.06720000 1.27460000 +v -19.44090000 0.34050000 1.27460000 +v -15.66520000 7.10980000 0.62940000 +v -17.00180000 0.34050000 0.62940000 +v -10.10540000 4.74420000 0.17310000 +v -10.97490000 0.34050000 0.17310000 +v -13.73200000 14.31740000 1.27460000 +v -12.00030000 12.58570000 0.62940000 +v -7.72110000 8.30650000 0.17310000 +v -7.48180000 18.50070000 1.27460000 +v -6.52440000 16.25060000 0.62940000 +v -4.15880000 10.69080000 0.17310000 +v 0.24490000 20.02630000 1.27460000 +v 0.24490000 17.58720000 0.62940000 +v 0.24490000 11.56030000 0.17310000 +v 7.97170000 18.50070000 1.27460000 +v 7.01430000 16.25060000 0.62940000 +v 4.64870000 10.69080000 0.17310000 +v 14.22190000 14.31740000 1.27460000 +v 12.49020000 12.58570000 0.62940000 +v 8.21100000 8.30650000 0.17310000 +v 18.40520000 8.06720000 1.27460000 +v 16.15510000 7.10980000 0.62940000 +v 10.59530000 4.74420000 0.17310000 +v 19.93080000 0.34050000 1.27460000 +v 17.49170000 0.34050000 0.62940000 +v 11.46480000 0.34050000 0.17310000 +v -27.70040000 -1.92550000 27.60950000 +v -27.51350000 0.34050000 27.14480000 +v -21.24010000 0.34050000 27.19200000 +v -21.03030000 -1.92550000 27.66410000 +v -32.59630000 -1.92550000 27.22740000 +v -32.15040000 0.34050000 26.81430000 +v -35.61170000 -1.92550000 26.19030000 +v -35.02490000 0.34050000 25.91740000 +v -36.64050000 -1.92550000 24.17070000 +v -36.01100000 0.34050000 24.17070000 +v -28.11150000 -2.68090000 28.63180000 +v -20.56870000 -2.68090000 28.70270000 +v -33.57720000 -2.68090000 28.13620000 +v -36.90270000 -2.68090000 26.79070000 +v -38.02520000 -2.68090000 24.17070000 +v -28.52260000 -1.92550000 29.65420000 +v -20.10710000 -1.92550000 29.74120000 +v -34.55810000 -1.92550000 29.04490000 +v -38.19380000 -1.92550000 27.39110000 +v -39.41000000 -1.92550000 24.17070000 +v -28.70950000 0.34050000 30.11890000 +v -19.89730000 0.34050000 30.21330000 +v -35.00390000 0.34050000 29.45800000 +v -38.78060000 0.34050000 27.66410000 +v -40.03950000 0.34050000 24.17070000 +v -28.52260000 2.60650000 29.65420000 +v -20.10710000 2.60650000 29.74120000 +v -34.55810000 2.60650000 29.04490000 +v -38.19380000 2.60650000 27.39110000 +v -39.41000000 2.60650000 24.17070000 +v -28.11150000 3.36180000 28.63180000 +v -20.56870000 3.36180000 28.70270000 +v -33.57720000 3.36180000 28.13620000 +v -36.90270000 3.36180000 26.79070000 +v -38.02530000 3.36180000 24.17070000 +v -27.70040000 2.60650000 27.60950000 +v -21.03030000 2.60650000 27.66410000 +v -32.59630000 2.60650000 27.22740000 +v -35.61170000 2.60650000 26.19030000 +v -36.64050000 2.60650000 24.17070000 +v -27.51350000 0.34050000 27.14480000 +v -21.24010000 0.34050000 27.19200000 +v -32.15040000 0.34050000 26.81430000 +v -35.02490000 0.34050000 25.91740000 +v -36.01100000 0.34050000 24.17070000 +v -36.05860000 -1.92550000 21.16830000 +v -35.48650000 0.34050000 21.43260000 +v -34.23550000 -1.92550000 17.72480000 +v -33.82900000 0.34050000 18.12800000 +v -31.05510000 -1.92550000 14.32550000 +v -30.91250000 0.34050000 14.82340000 +v -26.40150000 -1.92550000 11.45590000 +v -26.61130000 0.34050000 12.08530000 +v -37.31710000 -2.68090000 20.58680000 +v -35.12980000 -2.68090000 16.83760000 +v -31.36890000 -2.68090000 13.23010000 +v -25.93990000 -2.68090000 10.07110000 +v -38.57570000 -1.92550000 20.00530000 +v -36.02410000 -1.92550000 15.95050000 +v -31.68260000 -1.92550000 12.13470000 +v -25.47830000 -1.92550000 8.68630000 +v -39.14780000 0.34050000 19.74090000 +v -36.43070000 0.34050000 15.54730000 +v -31.82520000 0.34050000 11.63680000 +v -25.26850000 0.34050000 8.05690000 +v -38.57570000 2.60650000 20.00530000 +v -36.02410000 2.60650000 15.95050000 +v -31.68260000 2.60650000 12.13470000 +v -25.47830000 2.60650000 8.68630000 +v -37.31710000 3.36180000 20.58680000 +v -35.12980000 3.36180000 16.83760000 +v -31.36890000 3.36180000 13.23010000 +v -25.93990000 3.36180000 10.07110000 +v -36.05860000 2.60650000 21.16830000 +v -34.23550000 2.60650000 17.72480000 +v -31.05510000 2.60650000 14.32550000 +v -26.40150000 2.60650000 11.45590000 +v -35.48650000 0.34050000 21.43260000 +v -33.82900000 0.34050000 18.12800000 +v -30.91250000 0.34050000 14.82340000 +v -26.61130000 0.34050000 12.08530000 +v 30.00580000 -4.16090000 19.33080000 +v 29.51410000 0.34050000 20.61430000 +v 23.07280000 0.34050000 19.13510000 +v 23.07280000 -4.64470000 17.40410000 +v 32.93410000 -3.09630000 23.42320000 +v 32.30460000 0.34050000 24.17070000 +v 34.60340000 -2.03180000 28.21190000 +v 33.83630000 0.34050000 28.48230000 +v 37.75980000 -1.54790000 32.22750000 +v 36.50090000 0.34050000 32.22750000 +v 31.08770000 -5.66130000 16.50720000 +v 23.07280000 -6.30650000 13.59600000 +v 34.31890000 -4.24190000 21.77880000 +v 36.29110000 -2.82250000 27.61690000 +v 40.52940000 -2.17730000 32.22750000 +v 32.16960000 -4.16090000 13.68350000 +v 23.07280000 -4.64470000 9.78790000 +v 35.70360000 -3.09630000 20.13430000 +v 37.97880000 -2.03180000 27.02180000 +v 43.29890000 -1.54790000 32.22750000 +v 32.66130000 0.34050000 12.40010000 +v 23.07280000 0.34050000 8.05690000 +v 36.33310000 0.34050000 19.38690000 +v 38.74590000 0.34050000 26.75140000 +v 44.55780000 0.34050000 32.22750000 +v 32.16960000 4.84180000 13.68350000 +v 32.66130000 0.34050000 12.40010000 +v 23.07280000 0.34050000 8.05690000 +v 23.07280000 5.32570000 9.78790000 +v 35.70360000 3.77720000 20.13430000 +v 36.33310000 0.34050000 19.38690000 +v 37.97880000 2.71270000 27.02180000 +v 38.74590000 0.34050000 26.75140000 +v 43.29890000 2.22880000 32.22750000 +v 44.55780000 0.34050000 32.22750000 +v 31.08770000 6.34220000 16.50720000 +v 23.07280000 6.98740000 13.59600000 +v 34.31890000 4.92280000 21.77880000 +v 36.29110000 3.50340000 27.61690000 +v 40.52940000 2.85820000 32.22750000 +v 30.00580000 4.84180000 19.33080000 +v 23.07280000 5.32570000 17.40410000 +v 32.93410000 3.77720000 23.42320000 +v 34.60340000 2.71270000 28.21190000 +v 37.75980000 2.22880000 32.22750000 +v 38.81430000 -1.42990000 32.82170000 +v 37.46610000 0.34050000 32.79400000 +v 39.44490000 -1.17020000 33.02710000 +v 38.17940000 0.34050000 32.98290000 +v 39.46370000 -0.91060000 32.83280000 +v 38.38930000 0.34050000 32.79400000 +v 38.68300000 -0.79250000 32.22750000 +v 37.84370000 0.34050000 32.22750000 +v 41.78040000 -2.02000000 32.88260000 +v 42.22890000 -1.67380000 33.12450000 +v 41.82760000 -1.32760000 32.91800000 +v 40.52940000 -1.17020000 32.22750000 +v 44.74650000 -1.42990000 32.94340000 +v 45.01290000 -1.17020000 33.22190000 +v 44.19150000 -0.91060000 33.00320000 +v 42.37570000 -0.79250000 32.22750000 +v 46.09470000 0.34050000 32.97110000 +v 46.27830000 0.34050000 33.26610000 +v 45.26590000 0.34050000 33.04190000 +v 43.21500000 0.34050000 32.22750000 +v 44.74650000 2.11080000 32.94340000 +v 46.09470000 0.34050000 32.97110000 +v 45.01290000 1.85110000 33.22190000 +v 46.27830000 0.34050000 33.26610000 +v 44.19150000 1.59150000 33.00320000 +v 45.26590000 0.34050000 33.04190000 +v 42.37570000 1.47350000 32.22750000 +v 43.21500000 0.34050000 32.22750000 +v 41.78040000 2.70090000 32.88260000 +v 42.22890000 2.35470000 33.12450000 +v 41.82760000 2.00850000 32.91800000 +v 40.52940000 1.85110000 32.22750000 +v 38.81430000 2.11080000 32.82170000 +v 39.44490000 1.85110000 33.02710000 +v 39.46370000 1.59150000 32.83280000 +v 38.68300000 1.47350000 32.22750000 +v 4.46600000 -1.45960000 41.63770000 +v 4.81890000 0.34050000 41.63770000 +v 0.24490000 0.34050000 42.29860000 +v 4.27230000 -1.37670000 40.03260000 +v 4.60910000 0.34050000 40.03260000 +v 2.68430000 -0.69880000 38.04990000 +v 2.88860000 0.34050000 38.04990000 +v 2.72240000 -0.71370000 36.25600000 +v 2.93060000 0.34050000 36.25600000 +v 3.49670000 -2.91130000 41.63770000 +v 0.24490000 0.34050000 42.29860000 +v 3.34730000 -2.76190000 40.03260000 +v 2.12340000 -1.53800000 38.04990000 +v 2.15170000 -1.56630000 36.25600000 +v 2.04500000 -3.88060000 41.63770000 +v 0.24490000 0.34050000 42.29860000 +v 1.96210000 -3.68690000 40.03260000 +v 1.28420000 -2.09890000 38.04990000 +v 1.29910000 -2.13700000 36.25600000 +v 0.24490000 -4.23350000 41.63770000 +v 0.24490000 0.34050000 42.29860000 +v 0.24490000 -4.02370000 40.03260000 +v 0.24490000 -2.30320000 38.04990000 +v 0.24490000 -2.34520000 36.25600000 +v -1.55510000 -3.88060000 41.63770000 +v 0.24490000 0.34050000 42.29860000 +v -1.47220000 -3.68690000 40.03260000 +v -0.79430000 -2.09890000 38.04990000 +v -0.80920000 -2.13700000 36.25600000 +v -3.00680000 -2.91130000 41.63770000 +v 0.24490000 0.34050000 42.29860000 +v -2.85740000 -2.76190000 40.03260000 +v -1.63350000 -1.53800000 38.04990000 +v -1.66180000 -1.56630000 36.25600000 +v -3.97610000 -1.45960000 41.63770000 +v 0.24490000 0.34050000 42.29860000 +v -3.78240000 -1.37670000 40.03260000 +v -2.19440000 -0.69880000 38.04990000 +v -2.23250000 -0.71370000 36.25600000 +v -4.32900000 0.34050000 41.63770000 +v 0.24490000 0.34050000 42.29860000 +v -4.11920000 0.34050000 40.03260000 +v -2.39870000 0.34050000 38.04990000 +v -2.44070000 0.34050000 36.25600000 +v -3.97610000 2.14050000 41.63770000 +v -4.32900000 0.34050000 41.63770000 +v -3.78240000 2.05760000 40.03260000 +v -4.11920000 0.34050000 40.03260000 +v -2.19440000 1.37970000 38.04990000 +v -2.39870000 0.34050000 38.04990000 +v -2.23250000 1.39460000 36.25600000 +v -2.44070000 0.34050000 36.25600000 +v -3.00680000 3.59220000 41.63770000 +v -2.85740000 3.44280000 40.03260000 +v -1.63350000 2.21890000 38.04990000 +v -1.66180000 2.24730000 36.25600000 +v -1.55510000 4.56150000 41.63770000 +v -1.47220000 4.36780000 40.03260000 +v -0.79430000 2.77980000 38.04990000 +v -0.80920000 2.81790000 36.25600000 +v 0.24490000 4.91440000 41.63770000 +v 0.24490000 4.70460000 40.03260000 +v 0.24490000 2.98410000 38.04990000 +v 0.24490000 3.02610000 36.25600000 +v 2.04500000 4.56150000 41.63770000 +v 1.96210000 4.36780000 40.03260000 +v 1.28420000 2.77980000 38.04990000 +v 1.29910000 2.81790000 36.25600000 +v 3.49670000 3.59220000 41.63770000 +v 3.34730000 3.44280000 40.03260000 +v 2.12340000 2.21890000 38.04990000 +v 2.15170000 2.24730000 36.25600000 +v 4.46600000 2.14050000 41.63770000 +v 4.27230000 2.05760000 40.03260000 +v 2.68430000 1.37970000 38.04990000 +v 2.72240000 1.39460000 36.25600000 +v 4.81890000 0.34050000 41.63770000 +v 4.60910000 0.34050000 40.03260000 +v 2.88860000 0.34050000 38.04990000 +v 2.93060000 0.34050000 36.25600000 +v 5.89670000 -2.06420000 35.06000000 +v 6.37150000 0.34050000 35.06000000 +v 2.93060000 0.34050000 36.25600000 +v 2.72240000 -0.71370000 36.25600000 +v 10.46460000 -4.00770000 34.24180000 +v 11.32320000 0.34050000 34.24180000 +v 14.56790000 -5.75360000 33.42350000 +v 15.77120000 0.34050000 33.42350000 +v 16.34860000 -6.51130000 32.22750000 +v 17.70150000 0.34050000 32.22750000 +v 4.59480000 -4.00940000 35.06000000 +v 2.15170000 -1.56630000 36.25600000 +v 8.11050000 -7.52510000 34.24180000 +v 11.26860000 -10.68320000 33.42350000 +v 12.63910000 -12.05370000 32.22750000 +v 2.64960000 -5.31130000 35.06000000 +v 1.29910000 -2.13700000 36.25600000 +v 4.59310000 -9.87920000 34.24180000 +v 6.33900000 -13.98250000 33.42350000 +v 7.09670000 -15.76320000 32.22750000 +v 0.24490000 -5.78610000 35.06000000 +v 0.24490000 -2.34520000 36.25600000 +v 0.24490000 -10.73780000 34.24180000 +v 0.24490000 -15.18580000 33.42350000 +v 0.24490000 -17.11610000 32.22750000 +v -2.15970000 -5.31130000 35.06000000 +v -0.80920000 -2.13700000 36.25600000 +v -4.10330000 -9.87920000 34.24180000 +v -5.84910000 -13.98250000 33.42350000 +v -6.60680000 -15.76320000 32.22750000 +v -4.10490000 -4.00940000 35.06000000 +v -1.66180000 -1.56630000 36.25600000 +v -7.62060000 -7.52510000 34.24180000 +v -10.77870000 -10.68320000 33.42350000 +v -12.14920000 -12.05370000 32.22750000 +v -5.40680000 -2.06420000 35.06000000 +v -2.23250000 -0.71370000 36.25600000 +v -9.97470000 -4.00770000 34.24180000 +v -14.07810000 -5.75360000 33.42350000 +v -15.85870000 -6.51130000 32.22750000 +v -5.88160000 0.34050000 35.06000000 +v -2.44070000 0.34050000 36.25600000 +v -10.83330000 0.34050000 34.24180000 +v -15.28130000 0.34050000 33.42350000 +v -17.21160000 0.34050000 32.22750000 +v -5.40680000 2.74510000 35.06000000 +v -5.88160000 0.34050000 35.06000000 +v -2.44070000 0.34050000 36.25600000 +v -2.23250000 1.39460000 36.25600000 +v -9.97470000 4.68870000 34.24180000 +v -10.83330000 0.34050000 34.24180000 +v -14.07810000 6.43450000 33.42350000 +v -15.28130000 0.34050000 33.42350000 +v -15.85870000 7.19220000 32.22750000 +v -17.21160000 0.34050000 32.22750000 +v -4.10490000 4.69030000 35.06000000 +v -1.66180000 2.24730000 36.25600000 +v -7.62060000 8.20600000 34.24180000 +v -10.77870000 11.36410000 33.42350000 +v -12.14920000 12.73460000 32.22750000 +v -2.15970000 5.99220000 35.06000000 +v -0.80920000 2.81790000 36.25600000 +v -4.10330000 10.56010000 34.24180000 +v -5.84910000 14.66350000 33.42350000 +v -6.60680000 16.44420000 32.22750000 +v 0.24490000 6.46700000 35.06000000 +v 0.24490000 3.02610000 36.25600000 +v 0.24490000 11.41870000 34.24180000 +v 0.24490000 15.86670000 33.42350000 +v 0.24490000 17.79700000 32.22750000 +v 2.64960000 5.99220000 35.06000000 +v 1.29910000 2.81790000 36.25600000 +v 4.59310000 10.56010000 34.24180000 +v 6.33900000 14.66350000 33.42350000 +v 7.09670000 16.44420000 32.22750000 +v 4.59480000 4.69030000 35.06000000 +v 2.15170000 2.24730000 36.25600000 +v 8.11050000 8.20600000 34.24180000 +v 11.26860000 11.36410000 33.42350000 +v 12.63910000 12.73460000 32.22750000 +v 5.89670000 2.74510000 35.06000000 +v 2.72240000 1.39460000 36.25600000 +v 10.46460000 4.68870000 34.24180000 +v 14.56790000 6.43450000 33.42350000 +v 16.34860000 7.19220000 32.22750000 +v 6.37150000 0.34050000 35.06000000 +v 2.93060000 0.34050000 36.25600000 +v 11.32320000 0.34050000 34.24180000 +v 15.77120000 0.34050000 33.42350000 +v 17.70150000 0.34050000 32.22750000 +vt 1.75000 1.97500 +vt 2.00000 1.97500 +vt 2.00000 2.00000 +vt 1.75000 2.00000 +vt 1.75000 1.95000 +vt 2.00000 1.95000 +vt 1.75000 1.92500 +vt 2.00000 1.92500 +vt 1.75000 1.90000 +vt 2.00000 1.90000 +vt 1.50000 1.97500 +vt 1.50000 2.00000 +vt 1.50000 1.95000 +vt 1.50000 1.92500 +vt 1.50000 1.90000 +vt 1.25000 1.97500 +vt 1.25000 2.00000 +vt 1.25000 1.95000 +vt 1.25000 1.92500 +vt 1.25000 1.90000 +vt 1.00000 1.97500 +vt 1.00000 2.00000 +vt 1.00000 1.95000 +vt 1.00000 1.92500 +vt 1.00000 1.90000 +vt 0.75000 1.97500 +vt 0.75000 2.00000 +vt 0.75000 1.95000 +vt 0.75000 1.92500 +vt 0.75000 1.90000 +vt 0.50000 1.97500 +vt 0.50000 2.00000 +vt 0.50000 1.95000 +vt 0.50000 1.92500 +vt 0.50000 1.90000 +vt 0.25000 1.97500 +vt 0.25000 2.00000 +vt 0.25000 1.95000 +vt 0.25000 1.92500 +vt 0.25000 1.90000 +vt 0.00000 1.97500 +vt 0.00000 2.00000 +vt 0.00000 1.95000 +vt 0.00000 1.92500 +vt 0.00000 1.90000 +vt 1.75000 1.97500 +vt 2.00000 1.97500 +vt 2.00000 2.00000 +vt 1.75000 2.00000 +vt 1.75000 1.95000 +vt 2.00000 1.95000 +vt 1.75000 1.92500 +vt 2.00000 1.92500 +vt 1.75000 1.90000 +vt 2.00000 1.90000 +vt 1.50000 1.97500 +vt 1.50000 2.00000 +vt 1.50000 1.95000 +vt 1.50000 1.92500 +vt 1.50000 1.90000 +vt 1.25000 1.97500 +vt 1.25000 2.00000 +vt 1.25000 1.95000 +vt 1.25000 1.92500 +vt 1.25000 1.90000 +vt 1.00000 1.97500 +vt 1.00000 2.00000 +vt 1.00000 1.95000 +vt 1.00000 1.92500 +vt 1.00000 1.90000 +vt 0.75000 1.97500 +vt 0.75000 2.00000 +vt 0.75000 1.95000 +vt 0.75000 1.92500 +vt 0.75000 1.90000 +vt 0.50000 1.97500 +vt 0.50000 2.00000 +vt 0.50000 1.95000 +vt 0.50000 1.92500 +vt 0.50000 1.90000 +vt 0.25000 1.97500 +vt 0.25000 2.00000 +vt 0.25000 1.95000 +vt 0.25000 1.92500 +vt 0.25000 1.90000 +vt 0.00000 1.97500 +vt 0.00000 2.00000 +vt 0.00000 1.95000 +vt 0.00000 1.92500 +vt 0.00000 1.90000 +vt 1.75000 1.67500 +vt 2.00000 1.67500 +vt 1.75000 1.45000 +vt 2.00000 1.45000 +vt 1.75000 1.22500 +vt 2.00000 1.22500 +vt 1.75000 1.00000 +vt 2.00000 1.00000 +vt 1.50000 1.67500 +vt 1.50000 1.45000 +vt 1.50000 1.22500 +vt 1.50000 1.00000 +vt 1.25000 1.67500 +vt 1.25000 1.45000 +vt 1.25000 1.22500 +vt 1.25000 1.00000 +vt 1.00000 1.67500 +vt 1.00000 1.45000 +vt 1.00000 1.22500 +vt 1.00000 1.00000 +vt 0.75000 1.67500 +vt 0.75000 1.45000 +vt 0.75000 1.22500 +vt 0.75000 1.00000 +vt 0.50000 1.67500 +vt 0.50000 1.45000 +vt 0.50000 1.22500 +vt 0.50000 1.00000 +vt 0.25000 1.67500 +vt 0.25000 1.45000 +vt 0.25000 1.22500 +vt 0.25000 1.00000 +vt 0.00000 1.67500 +vt 0.00000 1.45000 +vt 0.00000 1.22500 +vt 0.00000 1.00000 +vt 1.75000 1.67500 +vt 2.00000 1.67500 +vt 1.75000 1.45000 +vt 2.00000 1.45000 +vt 1.75000 1.22500 +vt 2.00000 1.22500 +vt 1.75000 1.00000 +vt 2.00000 1.00000 +vt 1.50000 1.67500 +vt 1.50000 1.45000 +vt 1.50000 1.22500 +vt 1.50000 1.00000 +vt 1.25000 1.67500 +vt 1.25000 1.45000 +vt 1.25000 1.22500 +vt 1.25000 1.00000 +vt 1.00000 1.67500 +vt 1.00000 1.45000 +vt 1.00000 1.22500 +vt 1.00000 1.00000 +vt 0.75000 1.67500 +vt 0.75000 1.45000 +vt 0.75000 1.22500 +vt 0.75000 1.00000 +vt 0.50000 1.67500 +vt 0.50000 1.45000 +vt 0.50000 1.22500 +vt 0.50000 1.00000 +vt 0.25000 1.67500 +vt 0.25000 1.45000 +vt 0.25000 1.22500 +vt 0.25000 1.00000 +vt 0.00000 1.67500 +vt 0.00000 1.45000 +vt 0.00000 1.22500 +vt 0.00000 1.00000 +vt 1.75000 0.85000 +vt 2.00000 0.85000 +vt 1.75000 0.70000 +vt 2.00000 0.70000 +vt 1.75000 0.55000 +vt 2.00000 0.55000 +vt 1.75000 0.40000 +vt 2.00000 0.40000 +vt 1.50000 0.85000 +vt 1.50000 0.70000 +vt 1.50000 0.55000 +vt 1.50000 0.40000 +vt 1.25000 0.85000 +vt 1.25000 0.70000 +vt 1.25000 0.55000 +vt 1.25000 0.40000 +vt 1.00000 0.85000 +vt 1.00000 0.70000 +vt 1.00000 0.55000 +vt 1.00000 0.40000 +vt 0.75000 0.85000 +vt 0.75000 0.70000 +vt 0.75000 0.55000 +vt 0.75000 0.40000 +vt 0.50000 0.85000 +vt 0.50000 0.70000 +vt 0.50000 0.55000 +vt 0.50000 0.40000 +vt 0.25000 0.85000 +vt 0.25000 0.70000 +vt 0.25000 0.55000 +vt 0.25000 0.40000 +vt 0.00000 0.85000 +vt 0.00000 0.70000 +vt 0.00000 0.55000 +vt 0.00000 0.40000 +vt 1.75000 0.85000 +vt 2.00000 0.85000 +vt 1.75000 0.70000 +vt 2.00000 0.70000 +vt 1.75000 0.55000 +vt 2.00000 0.55000 +vt 1.75000 0.40000 +vt 2.00000 0.40000 +vt 1.50000 0.85000 +vt 1.50000 0.70000 +vt 1.50000 0.55000 +vt 1.50000 0.40000 +vt 1.25000 0.85000 +vt 1.25000 0.70000 +vt 1.25000 0.55000 +vt 1.25000 0.40000 +vt 1.00000 0.85000 +vt 1.00000 0.70000 +vt 1.00000 0.55000 +vt 1.00000 0.40000 +vt 0.75000 0.85000 +vt 0.75000 0.70000 +vt 0.75000 0.55000 +vt 0.75000 0.40000 +vt 0.50000 0.85000 +vt 0.50000 0.70000 +vt 0.50000 0.55000 +vt 0.50000 0.40000 +vt 0.25000 0.85000 +vt 0.25000 0.70000 +vt 0.25000 0.55000 +vt 0.25000 0.40000 +vt 0.00000 0.85000 +vt 0.00000 0.70000 +vt 0.00000 0.55000 +vt 0.00000 0.40000 +vt 1.75000 0.30000 +vt 2.00000 0.30000 +vt 1.75000 0.20000 +vt 2.00000 0.20000 +vt 1.75000 0.10000 +vt 2.00000 0.10000 +vt 1.75000 0.00000 +vt 1.50000 0.30000 +vt 1.50000 0.20000 +vt 1.50000 0.10000 +vt 1.50000 0.00000 +vt 1.25000 0.30000 +vt 1.25000 0.20000 +vt 1.25000 0.10000 +vt 1.25000 0.00000 +vt 1.00000 0.30000 +vt 1.00000 0.20000 +vt 1.00000 0.10000 +vt 1.00000 0.00000 +vt 0.75000 0.30000 +vt 0.75000 0.20000 +vt 0.75000 0.10000 +vt 0.75000 0.00000 +vt 0.50000 0.30000 +vt 0.50000 0.20000 +vt 0.50000 0.10000 +vt 0.50000 0.00000 +vt 0.25000 0.30000 +vt 0.25000 0.20000 +vt 0.25000 0.10000 +vt 0.25000 0.00000 +vt 0.00000 0.30000 +vt 0.00000 0.20000 +vt 0.00000 0.10000 +vt 0.00000 0.00000 +vt 1.75000 0.30000 +vt 2.00000 0.30000 +vt 1.75000 0.20000 +vt 2.00000 0.20000 +vt 1.75000 0.10000 +vt 2.00000 0.10000 +vt 1.50000 0.30000 +vt 1.50000 0.20000 +vt 1.50000 0.10000 +vt 1.25000 0.30000 +vt 1.25000 0.20000 +vt 1.25000 0.10000 +vt 1.00000 0.30000 +vt 1.00000 0.20000 +vt 1.00000 0.10000 +vt 0.75000 0.30000 +vt 0.75000 0.20000 +vt 0.75000 0.10000 +vt 0.50000 0.30000 +vt 0.50000 0.20000 +vt 0.50000 0.10000 +vt 0.25000 0.30000 +vt 0.25000 0.20000 +vt 0.25000 0.10000 +vt 0.00000 0.30000 +vt 0.00000 0.20000 +vt 0.00000 0.10000 +vt 0.87500 0.87500 +vt 1.00000 0.87500 +vt 1.00000 1.00000 +vt 0.87500 1.00000 +vt 0.87500 0.75000 +vt 1.00000 0.75000 +vt 0.87500 0.62500 +vt 1.00000 0.62500 +vt 0.87500 0.50000 +vt 1.00000 0.50000 +vt 0.75000 0.87500 +vt 0.75000 1.00000 +vt 0.75000 0.75000 +vt 0.75000 0.62500 +vt 0.75000 0.50000 +vt 0.62500 0.87500 +vt 0.62500 1.00000 +vt 0.62500 0.75000 +vt 0.62500 0.62500 +vt 0.62500 0.50000 +vt 0.50000 0.87500 +vt 0.50000 1.00000 +vt 0.50000 0.75000 +vt 0.50000 0.62500 +vt 0.50000 0.50000 +vt 0.37500 0.87500 +vt 0.37500 1.00000 +vt 0.37500 0.75000 +vt 0.37500 0.62500 +vt 0.37500 0.50000 +vt 0.25000 0.87500 +vt 0.25000 1.00000 +vt 0.25000 0.75000 +vt 0.25000 0.62500 +vt 0.25000 0.50000 +vt 0.12500 0.87500 +vt 0.12500 1.00000 +vt 0.12500 0.75000 +vt 0.12500 0.62500 +vt 0.12500 0.50000 +vt 0.00000 0.87500 +vt 0.00000 1.00000 +vt 0.00000 0.75000 +vt 0.00000 0.62500 +vt 0.00000 0.50000 +vt 0.87500 0.37500 +vt 1.00000 0.37500 +vt 0.87500 0.25000 +vt 1.00000 0.25000 +vt 0.87500 0.12500 +vt 1.00000 0.12500 +vt 0.87500 0.00000 +vt 1.00000 0.00000 +vt 0.75000 0.37500 +vt 0.75000 0.25000 +vt 0.75000 0.12500 +vt 0.75000 0.00000 +vt 0.62500 0.37500 +vt 0.62500 0.25000 +vt 0.62500 0.12500 +vt 0.62500 0.00000 +vt 0.50000 0.37500 +vt 0.50000 0.25000 +vt 0.50000 0.12500 +vt 0.50000 0.00000 +vt 0.37500 0.37500 +vt 0.37500 0.25000 +vt 0.37500 0.12500 +vt 0.37500 0.00000 +vt 0.25000 0.37500 +vt 0.25000 0.25000 +vt 0.25000 0.12500 +vt 0.25000 0.00000 +vt 0.12500 0.37500 +vt 0.12500 0.25000 +vt 0.12500 0.12500 +vt 0.12500 0.00000 +vt 0.00000 0.37500 +vt 0.00000 0.25000 +vt 0.00000 0.12500 +vt 0.00000 0.00000 +vt 0.62500 0.22500 +vt 0.50000 0.22500 +vt 0.50000 0.00000 +vt 0.62500 0.00000 +vt 0.62500 0.45000 +vt 0.50000 0.45000 +vt 0.62500 0.67500 +vt 0.50000 0.67500 +vt 0.62500 0.90000 +vt 0.50000 0.90000 +vt 0.75000 0.22500 +vt 0.75000 0.00000 +vt 0.75000 0.45000 +vt 0.75000 0.67500 +vt 0.75000 0.90000 +vt 0.87500 0.22500 +vt 0.87500 0.00000 +vt 0.87500 0.45000 +vt 0.87500 0.67500 +vt 0.87500 0.90000 +vt 1.00000 0.22500 +vt 1.00000 0.00000 +vt 1.00000 0.45000 +vt 1.00000 0.67500 +vt 1.00000 0.90000 +vt 0.12500 0.22500 +vt 0.00000 0.22500 +vt 0.00000 0.00000 +vt 0.12500 0.00000 +vt 0.12500 0.45000 +vt 0.00000 0.45000 +vt 0.12500 0.67500 +vt 0.00000 0.67500 +vt 0.12500 0.90000 +vt 0.00000 0.90000 +vt 0.25000 0.22500 +vt 0.25000 0.00000 +vt 0.25000 0.45000 +vt 0.25000 0.67500 +vt 0.25000 0.90000 +vt 0.37500 0.22500 +vt 0.37500 0.00000 +vt 0.37500 0.45000 +vt 0.37500 0.67500 +vt 0.37500 0.90000 +vt 0.62500 0.92500 +vt 0.50000 0.92500 +vt 0.62500 0.95000 +vt 0.50000 0.95000 +vt 0.62500 0.97500 +vt 0.50000 0.97500 +vt 0.62500 1.00000 +vt 0.50000 1.00000 +vt 0.75000 0.92500 +vt 0.75000 0.95000 +vt 0.75000 0.97500 +vt 0.75000 1.00000 +vt 0.87500 0.92500 +vt 0.87500 0.95000 +vt 0.87500 0.97500 +vt 0.87500 1.00000 +vt 1.00000 0.92500 +vt 1.00000 0.95000 +vt 1.00000 0.97500 +vt 1.00000 1.00000 +vt 0.12500 0.92500 +vt 0.00000 0.92500 +vt 0.12500 0.95000 +vt 0.00000 0.95000 +vt 0.12500 0.97500 +vt 0.00000 0.97500 +vt 0.12500 1.00000 +vt 0.00000 1.00000 +vt 0.25000 0.92500 +vt 0.25000 0.95000 +vt 0.25000 0.97500 +vt 0.25000 1.00000 +vt 0.37500 0.92500 +vt 0.37500 0.95000 +vt 0.37500 0.97500 +vt 0.37500 1.00000 +vt 0.87500 0.75000 +vt 1.00000 0.75000 +vt 1.00000 1.00000 +vt 0.87500 0.50000 +vt 1.00000 0.50000 +vt 0.87500 0.25000 +vt 1.00000 0.25000 +vt 0.87500 0.00000 +vt 1.00000 0.00000 +vt 0.75000 0.75000 +vt 0.87500 1.00000 +vt 0.75000 0.50000 +vt 0.75000 0.25000 +vt 0.75000 0.00000 +vt 0.62500 0.75000 +vt 0.75000 1.00000 +vt 0.62500 0.50000 +vt 0.62500 0.25000 +vt 0.62500 0.00000 +vt 0.50000 0.75000 +vt 0.62500 1.00000 +vt 0.50000 0.50000 +vt 0.50000 0.25000 +vt 0.50000 0.00000 +vt 0.37500 0.75000 +vt 0.50000 1.00000 +vt 0.37500 0.50000 +vt 0.37500 0.25000 +vt 0.37500 0.00000 +vt 0.25000 0.75000 +vt 0.37500 1.00000 +vt 0.25000 0.50000 +vt 0.25000 0.25000 +vt 0.25000 0.00000 +vt 0.12500 0.75000 +vt 0.25000 1.00000 +vt 0.12500 0.50000 +vt 0.12500 0.25000 +vt 0.12500 0.00000 +vt 0.00000 0.75000 +vt 0.12500 1.00000 +vt 0.00000 0.50000 +vt 0.00000 0.25000 +vt 0.00000 0.00000 +vt 0.87500 0.75000 +vt 1.00000 0.75000 +vt 0.87500 0.50000 +vt 1.00000 0.50000 +vt 0.87500 0.25000 +vt 1.00000 0.25000 +vt 0.87500 0.00000 +vt 1.00000 0.00000 +vt 0.75000 0.75000 +vt 0.75000 0.50000 +vt 0.75000 0.25000 +vt 0.75000 0.00000 +vt 0.62500 0.75000 +vt 0.62500 0.50000 +vt 0.62500 0.25000 +vt 0.62500 0.00000 +vt 0.50000 0.75000 +vt 0.50000 0.50000 +vt 0.50000 0.25000 +vt 0.50000 0.00000 +vt 0.37500 0.75000 +vt 0.37500 0.50000 +vt 0.37500 0.25000 +vt 0.37500 0.00000 +vt 0.25000 0.75000 +vt 0.25000 0.50000 +vt 0.25000 0.25000 +vt 0.25000 0.00000 +vt 0.12500 0.75000 +vt 0.12500 0.50000 +vt 0.12500 0.25000 +vt 0.12500 0.00000 +vt 0.00000 0.75000 +vt 0.00000 0.50000 +vt 0.00000 0.25000 +vt 0.00000 0.00000 +vt 0.87500 0.75000 +vt 1.00000 0.75000 +vt 1.00000 1.00000 +vt 0.87500 1.00000 +vt 0.87500 0.50000 +vt 1.00000 0.50000 +vt 0.87500 0.25000 +vt 1.00000 0.25000 +vt 0.87500 0.00000 +vt 1.00000 0.00000 +vt 0.75000 0.75000 +vt 0.75000 1.00000 +vt 0.75000 0.50000 +vt 0.75000 0.25000 +vt 0.75000 0.00000 +vt 0.62500 0.75000 +vt 0.62500 1.00000 +vt 0.62500 0.50000 +vt 0.62500 0.25000 +vt 0.62500 0.00000 +vt 0.50000 0.75000 +vt 0.50000 1.00000 +vt 0.50000 0.50000 +vt 0.50000 0.25000 +vt 0.50000 0.00000 +vt 0.37500 0.75000 +vt 0.37500 1.00000 +vt 0.37500 0.50000 +vt 0.37500 0.25000 +vt 0.37500 0.00000 +vt 0.25000 0.75000 +vt 0.25000 1.00000 +vt 0.25000 0.50000 +vt 0.25000 0.25000 +vt 0.25000 0.00000 +vt 0.12500 0.75000 +vt 0.12500 1.00000 +vt 0.12500 0.50000 +vt 0.12500 0.25000 +vt 0.12500 0.00000 +vt 0.00000 0.75000 +vt 0.00000 1.00000 +vt 0.00000 0.50000 +vt 0.00000 0.25000 +vt 0.00000 0.00000 +vt 0.87500 0.75000 +vt 1.00000 0.75000 +vt 1.00000 1.00000 +vt 0.87500 1.00000 +vt 0.87500 0.50000 +vt 1.00000 0.50000 +vt 0.87500 0.25000 +vt 1.00000 0.25000 +vt 0.87500 0.00000 +vt 1.00000 0.00000 +vt 0.75000 0.75000 +vt 0.75000 1.00000 +vt 0.75000 0.50000 +vt 0.75000 0.25000 +vt 0.75000 0.00000 +vt 0.62500 0.75000 +vt 0.62500 1.00000 +vt 0.62500 0.50000 +vt 0.62500 0.25000 +vt 0.62500 0.00000 +vt 0.50000 0.75000 +vt 0.50000 1.00000 +vt 0.50000 0.50000 +vt 0.50000 0.25000 +vt 0.50000 0.00000 +vt 0.37500 0.75000 +vt 0.37500 1.00000 +vt 0.37500 0.50000 +vt 0.37500 0.25000 +vt 0.37500 0.00000 +vt 0.25000 0.75000 +vt 0.25000 1.00000 +vt 0.25000 0.50000 +vt 0.25000 0.25000 +vt 0.25000 0.00000 +vt 0.12500 0.75000 +vt 0.12500 1.00000 +vt 0.12500 0.50000 +vt 0.12500 0.25000 +vt 0.12500 0.00000 +vt 0.00000 0.75000 +vt 0.00000 1.00000 +vt 0.00000 0.50000 +vt 0.00000 0.25000 +vt 0.00000 0.00000 +vt2 1.75000 1.97500 +vt2 2.00000 1.97500 +vt2 2.00000 2.00000 +vt2 1.75000 2.00000 +vt2 1.75000 1.95000 +vt2 2.00000 1.95000 +vt2 1.75000 1.92500 +vt2 2.00000 1.92500 +vt2 1.75000 1.90000 +vt2 2.00000 1.90000 +vt2 1.50000 1.97500 +vt2 1.50000 2.00000 +vt2 1.50000 1.95000 +vt2 1.50000 1.92500 +vt2 1.50000 1.90000 +vt2 1.25000 1.97500 +vt2 1.25000 2.00000 +vt2 1.25000 1.95000 +vt2 1.25000 1.92500 +vt2 1.25000 1.90000 +vt2 1.00000 1.97500 +vt2 1.00000 2.00000 +vt2 1.00000 1.95000 +vt2 1.00000 1.92500 +vt2 1.00000 1.90000 +vt2 0.75000 1.97500 +vt2 0.75000 2.00000 +vt2 0.75000 1.95000 +vt2 0.75000 1.92500 +vt2 0.75000 1.90000 +vt2 0.50000 1.97500 +vt2 0.50000 2.00000 +vt2 0.50000 1.95000 +vt2 0.50000 1.92500 +vt2 0.50000 1.90000 +vt2 0.25000 1.97500 +vt2 0.25000 2.00000 +vt2 0.25000 1.95000 +vt2 0.25000 1.92500 +vt2 0.25000 1.90000 +vt2 0.00000 1.97500 +vt2 0.00000 2.00000 +vt2 0.00000 1.95000 +vt2 0.00000 1.92500 +vt2 0.00000 1.90000 +vt2 1.75000 1.97500 +vt2 2.00000 1.97500 +vt2 2.00000 2.00000 +vt2 1.75000 2.00000 +vt2 1.75000 1.95000 +vt2 2.00000 1.95000 +vt2 1.75000 1.92500 +vt2 2.00000 1.92500 +vt2 1.75000 1.90000 +vt2 2.00000 1.90000 +vt2 1.50000 1.97500 +vt2 1.50000 2.00000 +vt2 1.50000 1.95000 +vt2 1.50000 1.92500 +vt2 1.50000 1.90000 +vt2 1.25000 1.97500 +vt2 1.25000 2.00000 +vt2 1.25000 1.95000 +vt2 1.25000 1.92500 +vt2 1.25000 1.90000 +vt2 1.00000 1.97500 +vt2 1.00000 2.00000 +vt2 1.00000 1.95000 +vt2 1.00000 1.92500 +vt2 1.00000 1.90000 +vt2 0.75000 1.97500 +vt2 0.75000 2.00000 +vt2 0.75000 1.95000 +vt2 0.75000 1.92500 +vt2 0.75000 1.90000 +vt2 0.50000 1.97500 +vt2 0.50000 2.00000 +vt2 0.50000 1.95000 +vt2 0.50000 1.92500 +vt2 0.50000 1.90000 +vt2 0.25000 1.97500 +vt2 0.25000 2.00000 +vt2 0.25000 1.95000 +vt2 0.25000 1.92500 +vt2 0.25000 1.90000 +vt2 0.00000 1.97500 +vt2 0.00000 2.00000 +vt2 0.00000 1.95000 +vt2 0.00000 1.92500 +vt2 0.00000 1.90000 +vt2 1.75000 1.67500 +vt2 2.00000 1.67500 +vt2 1.75000 1.45000 +vt2 2.00000 1.45000 +vt2 1.75000 1.22500 +vt2 2.00000 1.22500 +vt2 1.75000 1.00000 +vt2 2.00000 1.00000 +vt2 1.50000 1.67500 +vt2 1.50000 1.45000 +vt2 1.50000 1.22500 +vt2 1.50000 1.00000 +vt2 1.25000 1.67500 +vt2 1.25000 1.45000 +vt2 1.25000 1.22500 +vt2 1.25000 1.00000 +vt2 1.00000 1.67500 +vt2 1.00000 1.45000 +vt2 1.00000 1.22500 +vt2 1.00000 1.00000 +vt2 0.75000 1.67500 +vt2 0.75000 1.45000 +vt2 0.75000 1.22500 +vt2 0.75000 1.00000 +vt2 0.50000 1.67500 +vt2 0.50000 1.45000 +vt2 0.50000 1.22500 +vt2 0.50000 1.00000 +vt2 0.25000 1.67500 +vt2 0.25000 1.45000 +vt2 0.25000 1.22500 +vt2 0.25000 1.00000 +vt2 0.00000 1.67500 +vt2 0.00000 1.45000 +vt2 0.00000 1.22500 +vt2 0.00000 1.00000 +vt2 1.75000 1.67500 +vt2 2.00000 1.67500 +vt2 1.75000 1.45000 +vt2 2.00000 1.45000 +vt2 1.75000 1.22500 +vt2 2.00000 1.22500 +vt2 1.75000 1.00000 +vt2 2.00000 1.00000 +vt2 1.50000 1.67500 +vt2 1.50000 1.45000 +vt2 1.50000 1.22500 +vt2 1.50000 1.00000 +vt2 1.25000 1.67500 +vt2 1.25000 1.45000 +vt2 1.25000 1.22500 +vt2 1.25000 1.00000 +vt2 1.00000 1.67500 +vt2 1.00000 1.45000 +vt2 1.00000 1.22500 +vt2 1.00000 1.00000 +vt2 0.75000 1.67500 +vt2 0.75000 1.45000 +vt2 0.75000 1.22500 +vt2 0.75000 1.00000 +vt2 0.50000 1.67500 +vt2 0.50000 1.45000 +vt2 0.50000 1.22500 +vt2 0.50000 1.00000 +vt2 0.25000 1.67500 +vt2 0.25000 1.45000 +vt2 0.25000 1.22500 +vt2 0.25000 1.00000 +vt2 0.00000 1.67500 +vt2 0.00000 1.45000 +vt2 0.00000 1.22500 +vt2 0.00000 1.00000 +vt2 1.75000 0.85000 +vt2 2.00000 0.85000 +vt2 1.75000 0.70000 +vt2 2.00000 0.70000 +vt2 1.75000 0.55000 +vt2 2.00000 0.55000 +vt2 1.75000 0.40000 +vt2 2.00000 0.40000 +vt2 1.50000 0.85000 +vt2 1.50000 0.70000 +vt2 1.50000 0.55000 +vt2 1.50000 0.40000 +vt2 1.25000 0.85000 +vt2 1.25000 0.70000 +vt2 1.25000 0.55000 +vt2 1.25000 0.40000 +vt2 1.00000 0.85000 +vt2 1.00000 0.70000 +vt2 1.00000 0.55000 +vt2 1.00000 0.40000 +vt2 0.75000 0.85000 +vt2 0.75000 0.70000 +vt2 0.75000 0.55000 +vt2 0.75000 0.40000 +vt2 0.50000 0.85000 +vt2 0.50000 0.70000 +vt2 0.50000 0.55000 +vt2 0.50000 0.40000 +vt2 0.25000 0.85000 +vt2 0.25000 0.70000 +vt2 0.25000 0.55000 +vt2 0.25000 0.40000 +vt2 0.00000 0.85000 +vt2 0.00000 0.70000 +vt2 0.00000 0.55000 +vt2 0.00000 0.40000 +vt2 1.75000 0.85000 +vt2 2.00000 0.85000 +vt2 1.75000 0.70000 +vt2 2.00000 0.70000 +vt2 1.75000 0.55000 +vt2 2.00000 0.55000 +vt2 1.75000 0.40000 +vt2 2.00000 0.40000 +vt2 1.50000 0.85000 +vt2 1.50000 0.70000 +vt2 1.50000 0.55000 +vt2 1.50000 0.40000 +vt2 1.25000 0.85000 +vt2 1.25000 0.70000 +vt2 1.25000 0.55000 +vt2 1.25000 0.40000 +vt2 1.00000 0.85000 +vt2 1.00000 0.70000 +vt2 1.00000 0.55000 +vt2 1.00000 0.40000 +vt2 0.75000 0.85000 +vt2 0.75000 0.70000 +vt2 0.75000 0.55000 +vt2 0.75000 0.40000 +vt2 0.50000 0.85000 +vt2 0.50000 0.70000 +vt2 0.50000 0.55000 +vt2 0.50000 0.40000 +vt2 0.25000 0.85000 +vt2 0.25000 0.70000 +vt2 0.25000 0.55000 +vt2 0.25000 0.40000 +vt2 0.00000 0.85000 +vt2 0.00000 0.70000 +vt2 0.00000 0.55000 +vt2 0.00000 0.40000 +vt2 1.75000 0.30000 +vt2 2.00000 0.30000 +vt2 1.75000 0.20000 +vt2 2.00000 0.20000 +vt2 1.75000 0.10000 +vt2 2.00000 0.10000 +vt2 1.75000 0.00000 +vt2 1.50000 0.30000 +vt2 1.50000 0.20000 +vt2 1.50000 0.10000 +vt2 1.50000 0.00000 +vt2 1.25000 0.30000 +vt2 1.25000 0.20000 +vt2 1.25000 0.10000 +vt2 1.25000 0.00000 +vt2 1.00000 0.30000 +vt2 1.00000 0.20000 +vt2 1.00000 0.10000 +vt2 1.00000 0.00000 +vt2 0.75000 0.30000 +vt2 0.75000 0.20000 +vt2 0.75000 0.10000 +vt2 0.75000 0.00000 +vt2 0.50000 0.30000 +vt2 0.50000 0.20000 +vt2 0.50000 0.10000 +vt2 0.50000 0.00000 +vt2 0.25000 0.30000 +vt2 0.25000 0.20000 +vt2 0.25000 0.10000 +vt2 0.25000 0.00000 +vt2 0.00000 0.30000 +vt2 0.00000 0.20000 +vt2 0.00000 0.10000 +vt2 0.00000 0.00000 +vt2 1.75000 0.30000 +vt2 2.00000 0.30000 +vt2 1.75000 0.20000 +vt2 2.00000 0.20000 +vt2 1.75000 0.10000 +vt2 2.00000 0.10000 +vt2 1.50000 0.30000 +vt2 1.50000 0.20000 +vt2 1.50000 0.10000 +vt2 1.25000 0.30000 +vt2 1.25000 0.20000 +vt2 1.25000 0.10000 +vt2 1.00000 0.30000 +vt2 1.00000 0.20000 +vt2 1.00000 0.10000 +vt2 0.75000 0.30000 +vt2 0.75000 0.20000 +vt2 0.75000 0.10000 +vt2 0.50000 0.30000 +vt2 0.50000 0.20000 +vt2 0.50000 0.10000 +vt2 0.25000 0.30000 +vt2 0.25000 0.20000 +vt2 0.25000 0.10000 +vt2 0.00000 0.30000 +vt2 0.00000 0.20000 +vt2 0.00000 0.10000 +vt2 0.87500 0.87500 +vt2 1.00000 0.87500 +vt2 1.00000 1.00000 +vt2 0.87500 1.00000 +vt2 0.87500 0.75000 +vt2 1.00000 0.75000 +vt2 0.87500 0.62500 +vt2 1.00000 0.62500 +vt2 0.87500 0.50000 +vt2 1.00000 0.50000 +vt2 0.75000 0.87500 +vt2 0.75000 1.00000 +vt2 0.75000 0.75000 +vt2 0.75000 0.62500 +vt2 0.75000 0.50000 +vt2 0.62500 0.87500 +vt2 0.62500 1.00000 +vt2 0.62500 0.75000 +vt2 0.62500 0.62500 +vt2 0.62500 0.50000 +vt2 0.50000 0.87500 +vt2 0.50000 1.00000 +vt2 0.50000 0.75000 +vt2 0.50000 0.62500 +vt2 0.50000 0.50000 +vt2 0.37500 0.87500 +vt2 0.37500 1.00000 +vt2 0.37500 0.75000 +vt2 0.37500 0.62500 +vt2 0.37500 0.50000 +vt2 0.25000 0.87500 +vt2 0.25000 1.00000 +vt2 0.25000 0.75000 +vt2 0.25000 0.62500 +vt2 0.25000 0.50000 +vt2 0.12500 0.87500 +vt2 0.12500 1.00000 +vt2 0.12500 0.75000 +vt2 0.12500 0.62500 +vt2 0.12500 0.50000 +vt2 0.00000 0.87500 +vt2 0.00000 1.00000 +vt2 0.00000 0.75000 +vt2 0.00000 0.62500 +vt2 0.00000 0.50000 +vt2 0.87500 0.37500 +vt2 1.00000 0.37500 +vt2 0.87500 0.25000 +vt2 1.00000 0.25000 +vt2 0.87500 0.12500 +vt2 1.00000 0.12500 +vt2 0.87500 0.00000 +vt2 1.00000 0.00000 +vt2 0.75000 0.37500 +vt2 0.75000 0.25000 +vt2 0.75000 0.12500 +vt2 0.75000 0.00000 +vt2 0.62500 0.37500 +vt2 0.62500 0.25000 +vt2 0.62500 0.12500 +vt2 0.62500 0.00000 +vt2 0.50000 0.37500 +vt2 0.50000 0.25000 +vt2 0.50000 0.12500 +vt2 0.50000 0.00000 +vt2 0.37500 0.37500 +vt2 0.37500 0.25000 +vt2 0.37500 0.12500 +vt2 0.37500 0.00000 +vt2 0.25000 0.37500 +vt2 0.25000 0.25000 +vt2 0.25000 0.12500 +vt2 0.25000 0.00000 +vt2 0.12500 0.37500 +vt2 0.12500 0.25000 +vt2 0.12500 0.12500 +vt2 0.12500 0.00000 +vt2 0.00000 0.37500 +vt2 0.00000 0.25000 +vt2 0.00000 0.12500 +vt2 0.00000 0.00000 +vt2 0.62500 0.22500 +vt2 0.50000 0.22500 +vt2 0.50000 0.00000 +vt2 0.62500 0.00000 +vt2 0.62500 0.45000 +vt2 0.50000 0.45000 +vt2 0.62500 0.67500 +vt2 0.50000 0.67500 +vt2 0.62500 0.90000 +vt2 0.50000 0.90000 +vt2 0.75000 0.22500 +vt2 0.75000 0.00000 +vt2 0.75000 0.45000 +vt2 0.75000 0.67500 +vt2 0.75000 0.90000 +vt2 0.87500 0.22500 +vt2 0.87500 0.00000 +vt2 0.87500 0.45000 +vt2 0.87500 0.67500 +vt2 0.87500 0.90000 +vt2 1.00000 0.22500 +vt2 1.00000 0.00000 +vt2 1.00000 0.45000 +vt2 1.00000 0.67500 +vt2 1.00000 0.90000 +vt2 0.12500 0.22500 +vt2 0.00000 0.22500 +vt2 0.00000 0.00000 +vt2 0.12500 0.00000 +vt2 0.12500 0.45000 +vt2 0.00000 0.45000 +vt2 0.12500 0.67500 +vt2 0.00000 0.67500 +vt2 0.12500 0.90000 +vt2 0.00000 0.90000 +vt2 0.25000 0.22500 +vt2 0.25000 0.00000 +vt2 0.25000 0.45000 +vt2 0.25000 0.67500 +vt2 0.25000 0.90000 +vt2 0.37500 0.22500 +vt2 0.37500 0.00000 +vt2 0.37500 0.45000 +vt2 0.37500 0.67500 +vt2 0.37500 0.90000 +vt2 0.62500 0.92500 +vt2 0.50000 0.92500 +vt2 0.62500 0.95000 +vt2 0.50000 0.95000 +vt2 0.62500 0.97500 +vt2 0.50000 0.97500 +vt2 0.62500 1.00000 +vt2 0.50000 1.00000 +vt2 0.75000 0.92500 +vt2 0.75000 0.95000 +vt2 0.75000 0.97500 +vt2 0.75000 1.00000 +vt2 0.87500 0.92500 +vt2 0.87500 0.95000 +vt2 0.87500 0.97500 +vt2 0.87500 1.00000 +vt2 1.00000 0.92500 +vt2 1.00000 0.95000 +vt2 1.00000 0.97500 +vt2 1.00000 1.00000 +vt2 0.12500 0.92500 +vt2 0.00000 0.92500 +vt2 0.12500 0.95000 +vt2 0.00000 0.95000 +vt2 0.12500 0.97500 +vt2 0.00000 0.97500 +vt2 0.12500 1.00000 +vt2 0.00000 1.00000 +vt2 0.25000 0.92500 +vt2 0.25000 0.95000 +vt2 0.25000 0.97500 +vt2 0.25000 1.00000 +vt2 0.37500 0.92500 +vt2 0.37500 0.95000 +vt2 0.37500 0.97500 +vt2 0.37500 1.00000 +vt2 0.87500 0.75000 +vt2 1.00000 0.75000 +vt2 1.00000 1.00000 +vt2 0.87500 0.50000 +vt2 1.00000 0.50000 +vt2 0.87500 0.25000 +vt2 1.00000 0.25000 +vt2 0.87500 0.00000 +vt2 1.00000 0.00000 +vt2 0.75000 0.75000 +vt2 0.87500 1.00000 +vt2 0.75000 0.50000 +vt2 0.75000 0.25000 +vt2 0.75000 0.00000 +vt2 0.62500 0.75000 +vt2 0.75000 1.00000 +vt2 0.62500 0.50000 +vt2 0.62500 0.25000 +vt2 0.62500 0.00000 +vt2 0.50000 0.75000 +vt2 0.62500 1.00000 +vt2 0.50000 0.50000 +vt2 0.50000 0.25000 +vt2 0.50000 0.00000 +vt2 0.37500 0.75000 +vt2 0.50000 1.00000 +vt2 0.37500 0.50000 +vt2 0.37500 0.25000 +vt2 0.37500 0.00000 +vt2 0.25000 0.75000 +vt2 0.37500 1.00000 +vt2 0.25000 0.50000 +vt2 0.25000 0.25000 +vt2 0.25000 0.00000 +vt2 0.12500 0.75000 +vt2 0.25000 1.00000 +vt2 0.12500 0.50000 +vt2 0.12500 0.25000 +vt2 0.12500 0.00000 +vt2 0.00000 0.75000 +vt2 0.12500 1.00000 +vt2 0.00000 0.50000 +vt2 0.00000 0.25000 +vt2 0.00000 0.00000 +vt2 0.87500 0.75000 +vt2 1.00000 0.75000 +vt2 0.87500 0.50000 +vt2 1.00000 0.50000 +vt2 0.87500 0.25000 +vt2 1.00000 0.25000 +vt2 0.87500 0.00000 +vt2 1.00000 0.00000 +vt2 0.75000 0.75000 +vt2 0.75000 0.50000 +vt2 0.75000 0.25000 +vt2 0.75000 0.00000 +vt2 0.62500 0.75000 +vt2 0.62500 0.50000 +vt2 0.62500 0.25000 +vt2 0.62500 0.00000 +vt2 0.50000 0.75000 +vt2 0.50000 0.50000 +vt2 0.50000 0.25000 +vt2 0.50000 0.00000 +vt2 0.37500 0.75000 +vt2 0.37500 0.50000 +vt2 0.37500 0.25000 +vt2 0.37500 0.00000 +vt2 0.25000 0.75000 +vt2 0.25000 0.50000 +vt2 0.25000 0.25000 +vt2 0.25000 0.00000 +vt2 0.12500 0.75000 +vt2 0.12500 0.50000 +vt2 0.12500 0.25000 +vt2 0.12500 0.00000 +vt2 0.00000 0.75000 +vt2 0.00000 0.50000 +vt2 0.00000 0.25000 +vt2 0.00000 0.00000 +vt2 0.87500 0.75000 +vt2 1.00000 0.75000 +vt2 1.00000 1.00000 +vt2 0.87500 1.00000 +vt2 0.87500 0.50000 +vt2 1.00000 0.50000 +vt2 0.87500 0.25000 +vt2 1.00000 0.25000 +vt2 0.87500 0.00000 +vt2 1.00000 0.00000 +vt2 0.75000 0.75000 +vt2 0.75000 1.00000 +vt2 0.75000 0.50000 +vt2 0.75000 0.25000 +vt2 0.75000 0.00000 +vt2 0.62500 0.75000 +vt2 0.62500 1.00000 +vt2 0.62500 0.50000 +vt2 0.62500 0.25000 +vt2 0.62500 0.00000 +vt2 0.50000 0.75000 +vt2 0.50000 1.00000 +vt2 0.50000 0.50000 +vt2 0.50000 0.25000 +vt2 0.50000 0.00000 +vt2 0.37500 0.75000 +vt2 0.37500 1.00000 +vt2 0.37500 0.50000 +vt2 0.37500 0.25000 +vt2 0.37500 0.00000 +vt2 0.25000 0.75000 +vt2 0.25000 1.00000 +vt2 0.25000 0.50000 +vt2 0.25000 0.25000 +vt2 0.25000 0.00000 +vt2 0.12500 0.75000 +vt2 0.12500 1.00000 +vt2 0.12500 0.50000 +vt2 0.12500 0.25000 +vt2 0.12500 0.00000 +vt2 0.00000 0.75000 +vt2 0.00000 1.00000 +vt2 0.00000 0.50000 +vt2 0.00000 0.25000 +vt2 0.00000 0.00000 +vt2 0.87500 0.75000 +vt2 1.00000 0.75000 +vt2 1.00000 1.00000 +vt2 0.87500 1.00000 +vt2 0.87500 0.50000 +vt2 1.00000 0.50000 +vt2 0.87500 0.25000 +vt2 1.00000 0.25000 +vt2 0.87500 0.00000 +vt2 1.00000 0.00000 +vt2 0.75000 0.75000 +vt2 0.75000 1.00000 +vt2 0.75000 0.50000 +vt2 0.75000 0.25000 +vt2 0.75000 0.00000 +vt2 0.62500 0.75000 +vt2 0.62500 1.00000 +vt2 0.62500 0.50000 +vt2 0.62500 0.25000 +vt2 0.62500 0.00000 +vt2 0.50000 0.75000 +vt2 0.50000 1.00000 +vt2 0.50000 0.50000 +vt2 0.50000 0.25000 +vt2 0.50000 0.00000 +vt2 0.37500 0.75000 +vt2 0.37500 1.00000 +vt2 0.37500 0.50000 +vt2 0.37500 0.25000 +vt2 0.37500 0.00000 +vt2 0.25000 0.75000 +vt2 0.25000 1.00000 +vt2 0.25000 0.50000 +vt2 0.25000 0.25000 +vt2 0.25000 0.00000 +vt2 0.12500 0.75000 +vt2 0.12500 1.00000 +vt2 0.12500 0.50000 +vt2 0.12500 0.25000 +vt2 0.12500 0.00000 +vt2 0.00000 0.75000 +vt2 0.00000 1.00000 +vt2 0.00000 0.50000 +vt2 0.00000 0.25000 +vt2 0.00000 0.00000 +vn -0.89340000 0.36910000 0.25600000 +vn -0.96680000 0.00000000 0.25540000 +vn -0.96670000 0.00000000 -0.25580000 +vn -0.89300000 0.36990000 -0.25630000 +vn -0.08390000 0.03550000 0.99580000 +vn -0.09210000 0.00000000 0.99580000 +vn 0.62970000 -0.26040000 0.73190000 +vn 0.68200000 0.00000000 0.73130000 +vn 0.80370000 -0.33260000 0.49340000 +vn 0.87030000 0.00000000 0.49250000 +vn -0.68350000 0.68350000 0.25610000 +vn -0.68340000 0.68340000 -0.25670000 +vn -0.06490000 0.06490000 0.99580000 +vn 0.48140000 -0.48140000 0.73250000 +vn 0.61480000 -0.61480000 0.49400000 +vn -0.36910000 0.89340000 0.25600000 +vn -0.36990000 0.89300000 -0.25630000 +vn -0.03550000 0.08390000 0.99580000 +vn 0.26040000 -0.62970000 0.73190000 +vn 0.33260000 -0.80370000 0.49340000 +vn -0.00190000 0.96700000 0.25470000 +vn -0.00280000 0.96620000 -0.25790000 +vn -0.00030000 0.09230000 0.99570000 +vn 0.00000000 -0.68210000 0.73130000 +vn 0.00000000 -0.87030000 0.49250000 +vn 0.37710000 0.91410000 0.14910000 +vn 0.37910000 0.85280000 -0.35930000 +vn 0.02750000 0.12260000 0.99210000 +vn -0.26100000 -0.63540000 0.72680000 +vn -0.33250000 -0.80430000 0.49250000 +vn 0.71270000 0.69760000 0.07370000 +vn 0.66350000 0.62530000 -0.41080000 +vn 0.09970000 0.12200000 0.98750000 +vn -0.48730000 -0.48860000 0.72380000 +vn -0.61520000 -0.61550000 0.49260000 +vn 0.91730000 0.36150000 0.16710000 +vn 0.88000000 0.33870000 -0.33290000 +vn 0.11360000 0.04810000 0.99240000 +vn -0.63410000 -0.26190000 0.72750000 +vn -0.80410000 -0.33270000 0.49260000 +vn 0.96740000 -0.00810000 0.25300000 +vn 0.96670000 -0.01050000 -0.25570000 +vn 0.09340000 -0.00130000 0.99560000 +vn -0.68220000 0.00030000 0.73120000 +vn -0.87030000 0.00010000 0.49250000 +vn 0.89340000 -0.36910000 0.25600000 +vn 0.96740000 -0.00810000 0.25300000 +vn 0.96670000 -0.01050000 -0.25570000 +vn 0.89300000 -0.36990000 -0.25630000 +vn 0.08390000 -0.03550000 0.99580000 +vn 0.09340000 -0.00130000 0.99560000 +vn -0.62970000 0.26040000 0.73190000 +vn -0.68220000 0.00030000 0.73120000 +vn -0.80370000 0.33260000 0.49340000 +vn -0.87030000 0.00010000 0.49250000 +vn 0.68350000 -0.68350000 0.25610000 +vn 0.68340000 -0.68340000 -0.25670000 +vn 0.06490000 -0.06490000 0.99580000 +vn -0.48140000 0.48140000 0.73250000 +vn -0.61480000 0.61480000 0.49400000 +vn 0.36910000 -0.89340000 0.25600000 +vn 0.36990000 -0.89300000 -0.25630000 +vn 0.03550000 -0.08390000 0.99580000 +vn -0.26040000 0.62970000 0.73190000 +vn -0.33260000 0.80370000 0.49340000 +vn 0.00000000 -0.96680000 0.25540000 +vn 0.00000000 -0.96670000 -0.25580000 +vn 0.00000000 -0.09210000 0.99580000 +vn 0.00000000 0.68200000 0.73130000 +vn 0.00000000 0.87030000 0.49250000 +vn -0.36910000 -0.89340000 0.25600000 +vn -0.36990000 -0.89300000 -0.25630000 +vn -0.03550000 -0.08390000 0.99580000 +vn 0.26040000 0.62970000 0.73190000 +vn 0.33260000 0.80370000 0.49340000 +vn -0.68350000 -0.68350000 0.25610000 +vn -0.68340000 -0.68340000 -0.25670000 +vn -0.06490000 -0.06490000 0.99580000 +vn 0.48140000 0.48140000 0.73250000 +vn 0.61480000 0.61480000 0.49400000 +vn -0.89340000 -0.36910000 0.25600000 +vn -0.89300000 -0.36990000 -0.25630000 +vn -0.08390000 -0.03550000 0.99580000 +vn 0.62970000 0.26040000 0.73190000 +vn 0.80370000 0.33260000 0.49340000 +vn -0.96680000 0.00000000 0.25540000 +vn -0.96670000 0.00000000 -0.25580000 +vn -0.09210000 0.00000000 0.99580000 +vn 0.68200000 0.00000000 0.73130000 +vn 0.87030000 0.00000000 0.49250000 +vn 0.84540000 -0.34980000 0.40350000 +vn 0.91530000 0.00000000 0.40270000 +vn 0.87000000 -0.36000000 0.33690000 +vn 0.94180000 0.00000000 0.33620000 +vn 0.90420000 -0.37430000 0.20580000 +vn 0.97870000 0.00000000 0.20530000 +vn 0.92190000 -0.38180000 -0.06640000 +vn 0.99780000 0.00000000 -0.06620000 +vn 0.64680000 -0.64680000 0.40410000 +vn 0.66570000 -0.66570000 0.33740000 +vn 0.69190000 -0.69190000 0.20610000 +vn 0.70550000 -0.70550000 -0.06650000 +vn 0.34980000 -0.84540000 0.40350000 +vn 0.36000000 -0.87000000 0.33690000 +vn 0.37430000 -0.90420000 0.20580000 +vn 0.38180000 -0.92190000 -0.06640000 +vn 0.00000000 -0.91530000 0.40270000 +vn 0.00000000 -0.94180000 0.33620000 +vn 0.00000000 -0.97870000 0.20530000 +vn 0.00000000 -0.99780000 -0.06620000 +vn -0.34980000 -0.84540000 0.40350000 +vn -0.36000000 -0.87000000 0.33690000 +vn -0.37430000 -0.90420000 0.20580000 +vn -0.38180000 -0.92190000 -0.06640000 +vn -0.64680000 -0.64680000 0.40410000 +vn -0.66570000 -0.66570000 0.33740000 +vn -0.69190000 -0.69190000 0.20610000 +vn -0.70550000 -0.70550000 -0.06650000 +vn -0.84540000 -0.34980000 0.40350000 +vn -0.87000000 -0.36000000 0.33690000 +vn -0.90420000 -0.37430000 0.20580000 +vn -0.92190000 -0.38180000 -0.06640000 +vn -0.91530000 0.00000000 0.40270000 +vn -0.94180000 0.00000000 0.33620000 +vn -0.97870000 0.00000000 0.20530000 +vn -0.99780000 0.00000000 -0.06620000 +vn -0.84540000 0.34980000 0.40350000 +vn -0.91530000 0.00000000 0.40270000 +vn -0.87000000 0.36000000 0.33690000 +vn -0.94180000 0.00000000 0.33620000 +vn -0.90420000 0.37430000 0.20580000 +vn -0.97870000 0.00000000 0.20530000 +vn -0.92190000 0.38180000 -0.06640000 +vn -0.99780000 0.00000000 -0.06620000 +vn -0.64680000 0.64680000 0.40410000 +vn -0.66570000 0.66570000 0.33740000 +vn -0.69190000 0.69190000 0.20610000 +vn -0.70550000 0.70550000 -0.06650000 +vn -0.34980000 0.84540000 0.40350000 +vn -0.36000000 0.87000000 0.33690000 +vn -0.37430000 0.90420000 0.20580000 +vn -0.38180000 0.92190000 -0.06640000 +vn 0.00000000 0.91530000 0.40270000 +vn 0.00000000 0.94180000 0.33620000 +vn 0.00000000 0.97870000 0.20530000 +vn 0.00000000 0.99780000 -0.06620000 +vn 0.34980000 0.84540000 0.40350000 +vn 0.36000000 0.87000000 0.33690000 +vn 0.37430000 0.90420000 0.20580000 +vn 0.38180000 0.92190000 -0.06640000 +vn 0.64680000 0.64680000 0.40410000 +vn 0.66570000 0.66570000 0.33740000 +vn 0.69190000 0.69190000 0.20610000 +vn 0.70550000 0.70550000 -0.06650000 +vn 0.84540000 0.34980000 0.40350000 +vn 0.87000000 0.36000000 0.33690000 +vn 0.90420000 0.37430000 0.20580000 +vn 0.92190000 0.38180000 -0.06640000 +vn 0.91530000 0.00000000 0.40270000 +vn 0.94180000 0.00000000 0.33620000 +vn 0.97870000 0.00000000 0.20530000 +vn 0.99780000 0.00000000 -0.06620000 +vn 0.83140000 -0.34420000 -0.43620000 +vn 0.90020000 0.00000000 -0.43550000 +vn 0.67350000 -0.27860000 -0.68470000 +vn 0.72960000 0.00000000 -0.68390000 +vn 0.64040000 -0.26490000 -0.72090000 +vn 0.69400000 0.00000000 -0.72000000 +vn 0.73290000 -0.30320000 -0.60900000 +vn 0.79390000 0.00000000 -0.60800000 +vn 0.63610000 -0.63610000 -0.43680000 +vn 0.51500000 -0.51500000 -0.68530000 +vn 0.48970000 -0.48970000 -0.72140000 +vn 0.56060000 -0.56060000 -0.60960000 +vn 0.34420000 -0.83140000 -0.43620000 +vn 0.27860000 -0.67350000 -0.68470000 +vn 0.26490000 -0.64040000 -0.72090000 +vn 0.30320000 -0.73290000 -0.60900000 +vn 0.00000000 -0.90020000 -0.43550000 +vn 0.00000000 -0.72960000 -0.68390000 +vn 0.00000000 -0.69400000 -0.72000000 +vn 0.00000000 -0.79390000 -0.60800000 +vn -0.34420000 -0.83140000 -0.43620000 +vn -0.27860000 -0.67350000 -0.68470000 +vn -0.26490000 -0.64040000 -0.72090000 +vn -0.30320000 -0.73290000 -0.60900000 +vn -0.63610000 -0.63610000 -0.43680000 +vn -0.51500000 -0.51500000 -0.68530000 +vn -0.48970000 -0.48970000 -0.72140000 +vn -0.56060000 -0.56060000 -0.60960000 +vn -0.83140000 -0.34420000 -0.43620000 +vn -0.67350000 -0.27860000 -0.68470000 +vn -0.64040000 -0.26490000 -0.72090000 +vn -0.73290000 -0.30320000 -0.60900000 +vn -0.90020000 0.00000000 -0.43550000 +vn -0.72960000 0.00000000 -0.68390000 +vn -0.69400000 0.00000000 -0.72000000 +vn -0.79390000 0.00000000 -0.60800000 +vn -0.83140000 0.34420000 -0.43620000 +vn -0.90020000 0.00000000 -0.43550000 +vn -0.67350000 0.27860000 -0.68470000 +vn -0.72960000 0.00000000 -0.68390000 +vn -0.64040000 0.26490000 -0.72090000 +vn -0.69400000 0.00000000 -0.72000000 +vn -0.73290000 0.30320000 -0.60900000 +vn -0.79390000 0.00000000 -0.60800000 +vn -0.63610000 0.63610000 -0.43680000 +vn -0.51500000 0.51500000 -0.68530000 +vn -0.48970000 0.48970000 -0.72140000 +vn -0.56060000 0.56060000 -0.60960000 +vn -0.34420000 0.83140000 -0.43620000 +vn -0.27860000 0.67350000 -0.68470000 +vn -0.26490000 0.64040000 -0.72090000 +vn -0.30320000 0.73290000 -0.60900000 +vn 0.00000000 0.90020000 -0.43550000 +vn 0.00000000 0.72960000 -0.68390000 +vn 0.00000000 0.69400000 -0.72000000 +vn 0.00000000 0.79390000 -0.60800000 +vn 0.34420000 0.83140000 -0.43620000 +vn 0.27860000 0.67350000 -0.68470000 +vn 0.26490000 0.64040000 -0.72090000 +vn 0.30320000 0.73290000 -0.60900000 +vn 0.63610000 0.63610000 -0.43680000 +vn 0.51500000 0.51500000 -0.68530000 +vn 0.48970000 0.48970000 -0.72140000 +vn 0.56060000 0.56060000 -0.60960000 +vn 0.83140000 0.34420000 -0.43620000 +vn 0.67350000 0.27860000 -0.68470000 +vn 0.64040000 0.26490000 -0.72090000 +vn 0.73290000 0.30320000 -0.60900000 +vn 0.90020000 0.00000000 -0.43550000 +vn 0.72960000 0.00000000 -0.68390000 +vn 0.69400000 0.00000000 -0.72000000 +vn 0.79390000 0.00000000 -0.60800000 +vn 0.57620000 -0.23820000 -0.78180000 +vn 0.62390000 0.00000000 -0.78150000 +vn 0.16360000 -0.06750000 -0.98420000 +vn 0.17730000 0.00000000 -0.98420000 +vn 0.04540000 -0.01870000 -0.99880000 +vn 0.04920000 0.00000000 -0.99880000 +vn 0.00000000 0.00000000 -1.00000000 +vn 0.44040000 -0.44040000 -0.78230000 +vn 0.12490000 -0.12490000 -0.98430000 +vn 0.03470000 -0.03470000 -0.99880000 +vn 0.00000000 0.00000000 -1.00000000 +vn 0.23820000 -0.57620000 -0.78180000 +vn 0.06750000 -0.16360000 -0.98420000 +vn 0.01870000 -0.04540000 -0.99880000 +vn 0.00000000 0.00000000 -1.00000000 +vn 0.00000000 -0.62390000 -0.78150000 +vn 0.00000000 -0.17730000 -0.98420000 +vn 0.00000000 -0.04920000 -0.99880000 +vn 0.00000000 0.00000000 -1.00000000 +vn -0.23820000 -0.57620000 -0.78180000 +vn -0.06750000 -0.16360000 -0.98420000 +vn -0.01870000 -0.04540000 -0.99880000 +vn 0.00000000 0.00000000 -1.00000000 +vn -0.44040000 -0.44040000 -0.78230000 +vn -0.12490000 -0.12490000 -0.98430000 +vn -0.03470000 -0.03470000 -0.99880000 +vn 0.00000000 0.00000000 -1.00000000 +vn -0.57620000 -0.23820000 -0.78180000 +vn -0.16360000 -0.06750000 -0.98420000 +vn -0.04540000 -0.01870000 -0.99880000 +vn 0.00000000 0.00000000 -1.00000000 +vn -0.62390000 0.00000000 -0.78150000 +vn -0.17730000 0.00000000 -0.98420000 +vn -0.04920000 0.00000000 -0.99880000 +vn 0.00000000 0.00000000 -1.00000000 +vn -0.57620000 0.23820000 -0.78180000 +vn -0.62390000 0.00000000 -0.78150000 +vn -0.16360000 0.06750000 -0.98420000 +vn -0.17730000 0.00000000 -0.98420000 +vn -0.04540000 0.01870000 -0.99880000 +vn -0.04920000 0.00000000 -0.99880000 +vn -0.44040000 0.44040000 -0.78230000 +vn -0.12490000 0.12490000 -0.98430000 +vn -0.03470000 0.03470000 -0.99880000 +vn -0.23820000 0.57620000 -0.78180000 +vn -0.06750000 0.16360000 -0.98420000 +vn -0.01870000 0.04540000 -0.99880000 +vn 0.00000000 0.62390000 -0.78150000 +vn 0.00000000 0.17730000 -0.98420000 +vn 0.00000000 0.04920000 -0.99880000 +vn 0.23820000 0.57620000 -0.78180000 +vn 0.06750000 0.16360000 -0.98420000 +vn 0.01870000 0.04540000 -0.99880000 +vn 0.44040000 0.44040000 -0.78230000 +vn 0.12490000 0.12490000 -0.98430000 +vn 0.03470000 0.03470000 -0.99880000 +vn 0.57620000 0.23820000 -0.78180000 +vn 0.16360000 0.06750000 -0.98420000 +vn 0.04540000 0.01870000 -0.99880000 +vn 0.62390000 0.00000000 -0.78150000 +vn 0.17730000 0.00000000 -0.98420000 +vn 0.04920000 0.00000000 -0.99880000 +vn 0.03610000 -0.54560000 -0.83730000 +vn 0.03910000 0.00100000 -0.99920000 +vn 0.00780000 0.00020000 -1.00000000 +vn 0.00700000 -0.58290000 -0.81250000 +vn 0.16180000 -0.56300000 -0.81040000 +vn 0.17950000 0.00440000 -0.98370000 +vn 0.48240000 -0.64270000 -0.59510000 +vn 0.61230000 0.01050000 -0.79060000 +vn 0.73870000 -0.66420000 -0.11460000 +vn 0.98620000 0.00670000 -0.16570000 +vn 0.00280000 -0.99980000 0.01710000 +vn -0.00190000 -0.98680000 0.16210000 +vn 0.01050000 -0.99720000 0.07340000 +vn -0.06600000 -0.98930000 0.13010000 +vn -0.09440000 -0.99540000 0.01660000 +vn -0.04860000 -0.53950000 0.84060000 +vn -0.00920000 -0.49030000 0.87150000 +vn -0.22330000 -0.55270000 0.80290000 +vn -0.59640000 -0.57510000 0.56000000 +vn -0.80330000 -0.59160000 0.06820000 +vn -0.05880000 -0.00070000 0.99830000 +vn -0.01060000 -0.00010000 0.99990000 +vn -0.28070000 -0.00330000 0.95980000 +vn -0.74970000 -0.00430000 0.66170000 +vn -0.99740000 -0.00210000 0.07270000 +vn -0.04650000 0.53880000 0.84120000 +vn -0.00880000 0.49030000 0.87150000 +vn -0.21790000 0.54920000 0.80680000 +vn -0.59730000 0.57410000 0.56000000 +vn -0.80400000 0.59130000 0.06290000 +vn 0.00200000 0.99990000 0.01460000 +vn -0.00180000 0.98680000 0.16170000 +vn 0.00920000 0.99820000 0.06010000 +vn -0.05930000 0.99170000 0.11390000 +vn -0.08690000 0.99610000 0.01230000 +vn 0.03380000 0.54540000 -0.83750000 +vn 0.00640000 0.58310000 -0.81240000 +vn 0.15710000 0.56220000 -0.81190000 +vn 0.48440000 0.64650000 -0.58940000 +vn 0.73890000 0.66620000 -0.10130000 +vn 0.03910000 0.00100000 -0.99920000 +vn 0.00780000 0.00020000 -1.00000000 +vn 0.17950000 0.00440000 -0.98370000 +vn 0.61230000 0.01050000 -0.79060000 +vn 0.98620000 0.00670000 -0.16570000 +vn 0.72560000 -0.63740000 0.25940000 +vn 0.94650000 0.00340000 0.32270000 +vn 0.64590000 -0.60770000 0.46200000 +vn 0.82580000 0.00750000 0.56390000 +vn 0.53160000 -0.55860000 0.63670000 +vn 0.65000000 0.00690000 0.75990000 +vn 0.42500000 -0.59550000 0.68170000 +vn 0.53240000 0.00520000 0.84650000 +vn -0.04960000 -0.99860000 -0.01980000 +vn -0.03780000 -0.99860000 -0.03560000 +vn -0.03790000 -0.99860000 -0.03650000 +vn -0.16890000 -0.93950000 -0.29790000 +vn -0.74230000 -0.59950000 -0.29920000 +vn -0.61960000 -0.57950000 -0.52940000 +vn -0.48370000 -0.54380000 -0.68580000 +vn -0.44530000 -0.41320000 -0.79440000 +vn -0.92650000 -0.00200000 -0.37630000 +vn -0.75390000 -0.00430000 -0.65700000 +vn -0.56620000 -0.00350000 -0.82420000 +vn -0.48180000 -0.00190000 -0.87630000 +vn -0.74470000 0.59900000 -0.29440000 +vn -0.62190000 0.57820000 -0.52810000 +vn -0.48120000 0.54280000 -0.68830000 +vn -0.43810000 0.41570000 -0.79700000 +vn -0.04430000 0.99890000 -0.01710000 +vn -0.02620000 0.99930000 -0.02820000 +vn -0.02530000 0.99930000 -0.02830000 +vn -0.15750000 0.94420000 -0.28940000 +vn 0.72820000 0.63710000 0.25240000 +vn 0.64710000 0.60830000 0.45970000 +vn 0.52300000 0.56220000 0.64070000 +vn 0.41000000 0.60470000 0.68290000 +vn 0.94650000 0.00340000 0.32270000 +vn 0.82580000 0.00750000 0.56390000 +vn 0.65000000 0.00690000 0.75990000 +vn 0.53240000 0.00520000 0.84650000 +vn -0.31670000 -0.70210000 0.63780000 +vn -0.54890000 0.00150000 0.83590000 +vn -0.23080000 0.00650000 0.97300000 +vn -0.15290000 -0.71020000 0.68720000 +vn -0.60110000 -0.64530000 0.47150000 +vn -0.87570000 -0.00990000 0.48280000 +vn -0.63590000 -0.62980000 0.44610000 +vn -0.87760000 -0.01910000 0.47910000 +vn -0.43570000 -0.67000000 0.60100000 +vn -0.69620000 -0.02450000 0.71740000 +vn 0.22330000 -0.97470000 0.00650000 +vn 0.11110000 -0.99020000 -0.08510000 +vn 0.19010000 -0.96950000 0.15500000 +vn 0.00530000 -0.98190000 0.18950000 +vn -0.01180000 -0.96900000 0.24670000 +vn 0.57250000 -0.59160000 -0.56770000 +vn 0.34390000 -0.59940000 -0.72280000 +vn 0.78740000 -0.56050000 -0.25650000 +vn 0.64710000 -0.69810000 -0.30640000 +vn 0.42750000 -0.75360000 -0.49930000 +vn 0.67150000 0.00090000 -0.74100000 +vn 0.41090000 -0.00130000 -0.91170000 +vn 0.92200000 0.00730000 -0.38710000 +vn 0.84690000 0.01390000 -0.53160000 +vn 0.53590000 0.01050000 -0.84420000 +vn 0.57870000 0.59180000 -0.56110000 +vn 0.67150000 0.00090000 -0.74100000 +vn 0.41090000 -0.00130000 -0.91170000 +vn 0.34120000 0.60090000 -0.72280000 +vn 0.78490000 0.56650000 -0.25100000 +vn 0.92200000 0.00730000 -0.38710000 +vn 0.64270000 0.70400000 -0.30230000 +vn 0.84690000 0.01390000 -0.53160000 +vn 0.41860000 0.75810000 -0.50000000 +vn 0.53590000 0.01050000 -0.84420000 +vn 0.23280000 0.97240000 0.01260000 +vn 0.11580000 0.99010000 -0.07910000 +vn 0.20670000 0.96630000 0.15360000 +vn 0.02450000 0.98660000 0.16140000 +vn 0.00340000 0.97750000 0.21110000 +vn -0.31950000 0.70510000 0.63310000 +vn -0.13490000 0.71360000 0.68750000 +vn -0.60390000 0.64990000 0.46140000 +vn -0.63180000 0.64010000 0.43720000 +vn -0.42430000 0.66670000 0.61270000 +vn -0.25990000 -0.55250000 0.79190000 +vn -0.42580000 -0.01080000 0.90480000 +vn 0.00950000 0.02170000 0.99970000 +vn 0.02200000 -0.00160000 0.99980000 +vn 0.41020000 0.84910000 0.33290000 +vn 0.99960000 -0.01160000 0.02590000 +vn 0.54150000 0.63700000 -0.54860000 +vn 0.70960000 -0.00970000 -0.70460000 +vn 0.04630000 -0.88920000 0.45520000 +vn -0.01070000 -0.14890000 0.98880000 +vn -0.04440000 0.72910000 0.68290000 +vn 0.12280000 0.99240000 0.00920000 +vn 0.48180000 -0.85750000 -0.18040000 +vn 0.45530000 -0.49990000 0.73670000 +vn -0.22050000 0.35830000 0.90720000 +vn -0.23590000 0.71580000 0.65730000 +vn 0.72810000 0.01560000 -0.68530000 +vn 0.88870000 0.01670000 0.45810000 +vn -0.26010000 -0.00080000 0.96560000 +vn -0.37160000 0.00440000 0.92840000 +vn 0.48020000 0.85890000 -0.17840000 +vn 0.72810000 0.01560000 -0.68530000 +vn 0.48810000 0.49800000 0.71680000 +vn 0.88870000 0.01670000 0.45810000 +vn -0.22200000 -0.36190000 0.90540000 +vn -0.26010000 -0.00080000 0.96560000 +vn -0.23540000 -0.71050000 0.66320000 +vn -0.37160000 0.00440000 0.92840000 +vn 0.05870000 0.89720000 0.43770000 +vn 0.00130000 0.16400000 0.98650000 +vn -0.04420000 -0.73030000 0.68170000 +vn 0.13880000 -0.98970000 -0.03420000 +vn -0.25890000 0.54540000 0.79720000 +vn 0.01230000 -0.01930000 0.99970000 +vn 0.39860000 -0.84570000 0.35490000 +vn 0.53760000 -0.61070000 -0.58140000 +vn 0.76260000 -0.31480000 0.56500000 +vn 0.82450000 0.00000000 0.56580000 +vn 0.00000000 0.00000000 1.00000000 +vn 0.84800000 -0.35000000 -0.39800000 +vn 0.91770000 0.00000000 -0.39730000 +vn 0.86410000 -0.35640000 -0.35530000 +vn 0.93530000 -0.00010000 -0.35390000 +vn 0.72100000 -0.29790000 0.62560000 +vn 0.78070000 -0.00010000 0.62490000 +vn 0.58340000 -0.58330000 0.56520000 +vn 0.00000000 0.00000000 1.00000000 +vn 0.64850000 -0.64840000 -0.39870000 +vn 0.66090000 -0.66070000 -0.35590000 +vn 0.55190000 -0.55180000 0.62530000 +vn 0.31480000 -0.76260000 0.56510000 +vn 0.00000000 0.00000000 1.00000000 +vn 0.35000000 -0.84800000 -0.39800000 +vn 0.35650000 -0.86420000 -0.35520000 +vn 0.29800000 -0.72110000 0.62550000 +vn 0.00000000 -0.82450000 0.56580000 +vn 0.00000000 0.00000000 1.00000000 +vn 0.00000000 -0.91770000 -0.39730000 +vn -0.00010000 -0.93530000 -0.35390000 +vn -0.00010000 -0.78070000 0.62490000 +vn -0.31480000 -0.76260000 0.56500000 +vn 0.00000000 0.00000000 1.00000000 +vn -0.35000000 -0.84800000 -0.39800000 +vn -0.35640000 -0.86410000 -0.35530000 +vn -0.29790000 -0.72100000 0.62560000 +vn -0.58330000 -0.58340000 0.56520000 +vn 0.00000000 0.00000000 1.00000000 +vn -0.64840000 -0.64850000 -0.39870000 +vn -0.66070000 -0.66090000 -0.35590000 +vn -0.55180000 -0.55190000 0.62530000 +vn -0.76260000 -0.31480000 0.56510000 +vn 0.00000000 0.00000000 1.00000000 +vn -0.84800000 -0.35000000 -0.39800000 +vn -0.86420000 -0.35650000 -0.35520000 +vn -0.72110000 -0.29800000 0.62550000 +vn -0.82450000 0.00000000 0.56580000 +vn 0.00000000 0.00000000 1.00000000 +vn -0.91770000 0.00000000 -0.39730000 +vn -0.93530000 0.00010000 -0.35390000 +vn -0.78070000 0.00010000 0.62490000 +vn -0.76260000 0.31480000 0.56500000 +vn -0.82450000 0.00000000 0.56580000 +vn -0.84800000 0.35000000 -0.39800000 +vn -0.91770000 0.00000000 -0.39730000 +vn -0.86410000 0.35640000 -0.35530000 +vn -0.93530000 0.00010000 -0.35390000 +vn -0.72100000 0.29790000 0.62560000 +vn -0.78070000 0.00010000 0.62490000 +vn -0.58340000 0.58330000 0.56520000 +vn -0.64850000 0.64840000 -0.39870000 +vn -0.66090000 0.66070000 -0.35590000 +vn -0.55190000 0.55180000 0.62530000 +vn -0.31480000 0.76260000 0.56510000 +vn -0.35000000 0.84800000 -0.39800000 +vn -0.35650000 0.86420000 -0.35520000 +vn -0.29800000 0.72110000 0.62550000 +vn 0.00000000 0.82450000 0.56580000 +vn 0.00000000 0.91770000 -0.39730000 +vn 0.00010000 0.93530000 -0.35390000 +vn 0.00010000 0.78070000 0.62490000 +vn 0.31480000 0.76260000 0.56500000 +vn 0.35000000 0.84800000 -0.39800000 +vn 0.35640000 0.86410000 -0.35530000 +vn 0.29790000 0.72100000 0.62560000 +vn 0.58330000 0.58340000 0.56520000 +vn 0.64840000 0.64850000 -0.39870000 +vn 0.66070000 0.66090000 -0.35590000 +vn 0.55180000 0.55190000 0.62530000 +vn 0.76260000 0.31480000 0.56510000 +vn 0.84800000 0.35000000 -0.39800000 +vn 0.86420000 0.35650000 -0.35520000 +vn 0.72110000 0.29800000 0.62550000 +vn 0.82450000 0.00000000 0.56580000 +vn 0.91770000 0.00000000 -0.39730000 +vn 0.93530000 -0.00010000 -0.35390000 +vn 0.78070000 -0.00010000 0.62490000 +vn 0.21800000 -0.09020000 0.97180000 +vn 0.23660000 0.00000000 0.97160000 +vn 0.78070000 -0.00010000 0.62490000 +vn 0.72100000 -0.29790000 0.62560000 +vn 0.15960000 -0.06600000 0.98500000 +vn 0.17310000 0.00000000 0.98490000 +vn 0.35050000 -0.14470000 0.92530000 +vn 0.37970000 0.00000000 0.92510000 +vn 0.48560000 -0.20150000 0.85070000 +vn 0.52670000 0.00000000 0.85010000 +vn 0.16660000 -0.16660000 0.97180000 +vn 0.55190000 -0.55180000 0.62530000 +vn 0.12190000 -0.12190000 0.98500000 +vn 0.26770000 -0.26770000 0.92560000 +vn 0.37130000 -0.37130000 0.85100000 +vn 0.09020000 -0.21800000 0.97180000 +vn 0.29800000 -0.72110000 0.62550000 +vn 0.06600000 -0.15960000 0.98500000 +vn 0.14470000 -0.35050000 0.92530000 +vn 0.20150000 -0.48560000 0.85070000 +vn 0.00000000 -0.23660000 0.97160000 +vn -0.00010000 -0.78070000 0.62490000 +vn 0.00000000 -0.17310000 0.98490000 +vn 0.00000000 -0.37970000 0.92510000 +vn 0.00000000 -0.52670000 0.85010000 +vn -0.09020000 -0.21800000 0.97180000 +vn -0.29790000 -0.72100000 0.62560000 +vn -0.06600000 -0.15960000 0.98500000 +vn -0.14470000 -0.35050000 0.92530000 +vn -0.20150000 -0.48560000 0.85070000 +vn -0.16660000 -0.16660000 0.97180000 +vn -0.55180000 -0.55190000 0.62530000 +vn -0.12190000 -0.12190000 0.98500000 +vn -0.26770000 -0.26770000 0.92560000 +vn -0.37130000 -0.37130000 0.85100000 +vn -0.21800000 -0.09020000 0.97180000 +vn -0.72110000 -0.29800000 0.62550000 +vn -0.15960000 -0.06600000 0.98500000 +vn -0.35050000 -0.14470000 0.92530000 +vn -0.48560000 -0.20150000 0.85070000 +vn -0.23660000 0.00000000 0.97160000 +vn -0.78070000 0.00010000 0.62490000 +vn -0.17310000 0.00000000 0.98490000 +vn -0.37970000 0.00000000 0.92510000 +vn -0.52670000 0.00000000 0.85010000 +vn -0.21800000 0.09020000 0.97180000 +vn -0.23660000 0.00000000 0.97160000 +vn -0.78070000 0.00010000 0.62490000 +vn -0.72100000 0.29790000 0.62560000 +vn -0.15960000 0.06600000 0.98500000 +vn -0.17310000 0.00000000 0.98490000 +vn -0.35050000 0.14470000 0.92530000 +vn -0.37970000 0.00000000 0.92510000 +vn -0.48560000 0.20150000 0.85070000 +vn -0.52670000 0.00000000 0.85010000 +vn -0.16660000 0.16660000 0.97180000 +vn -0.55190000 0.55180000 0.62530000 +vn -0.12190000 0.12190000 0.98500000 +vn -0.26770000 0.26770000 0.92560000 +vn -0.37130000 0.37130000 0.85100000 +vn -0.09020000 0.21800000 0.97180000 +vn -0.29800000 0.72110000 0.62550000 +vn -0.06600000 0.15960000 0.98500000 +vn -0.14470000 0.35050000 0.92530000 +vn -0.20150000 0.48560000 0.85070000 +vn 0.00000000 0.23660000 0.97160000 +vn 0.00010000 0.78070000 0.62490000 +vn 0.00000000 0.17310000 0.98490000 +vn 0.00000000 0.37970000 0.92510000 +vn 0.00000000 0.52670000 0.85010000 +vn 0.09020000 0.21800000 0.97180000 +vn 0.29790000 0.72100000 0.62560000 +vn 0.06600000 0.15960000 0.98500000 +vn 0.14470000 0.35050000 0.92530000 +vn 0.20150000 0.48560000 0.85070000 +vn 0.16660000 0.16660000 0.97180000 +vn 0.55180000 0.55190000 0.62530000 +vn 0.12190000 0.12190000 0.98500000 +vn 0.26770000 0.26770000 0.92560000 +vn 0.37130000 0.37130000 0.85100000 +vn 0.21800000 0.09020000 0.97180000 +vn 0.72110000 0.29800000 0.62550000 +vn 0.15960000 0.06600000 0.98500000 +vn 0.35050000 0.14470000 0.92530000 +vn 0.48560000 0.20150000 0.85070000 +vn 0.23660000 0.00000000 0.97160000 +vn 0.78070000 -0.00010000 0.62490000 +vn 0.17310000 0.00000000 0.98490000 +vn 0.37970000 0.00000000 0.92510000 +vn 0.52670000 0.00000000 0.85010000 +g Cube Instance_0 +f 1/1/1/1 2/2/2/2 3/3/3/3 +f 3/3/3/3 4/4/4/4 1/1/1/1 +f 5/5/5/5 6/6/6/6 2/2/2/2 +f 2/2/2/2 1/1/1/1 5/5/5/5 +f 7/7/7/7 8/8/8/8 6/6/6/6 +f 6/6/6/6 5/5/5/5 7/7/7/7 +f 9/9/9/9 10/10/10/10 8/8/8/8 +f 8/8/8/8 7/7/7/7 9/9/9/9 +f 11/11/11/11 1/1/1/1 4/4/4/4 +f 4/4/4/4 12/12/12/12 11/11/11/11 +f 13/13/13/13 5/5/5/5 1/1/1/1 +f 1/1/1/1 11/11/11/11 13/13/13/13 +f 14/14/14/14 7/7/7/7 5/5/5/5 +f 5/5/5/5 13/13/13/13 14/14/14/14 +f 15/15/15/15 9/9/9/9 7/7/7/7 +f 7/7/7/7 14/14/14/14 15/15/15/15 +f 16/16/16/16 11/11/11/11 12/12/12/12 +f 12/12/12/12 17/17/17/17 16/16/16/16 +f 18/18/18/18 13/13/13/13 11/11/11/11 +f 11/11/11/11 16/16/16/16 18/18/18/18 +f 19/19/19/19 14/14/14/14 13/13/13/13 +f 13/13/13/13 18/18/18/18 19/19/19/19 +f 20/20/20/20 15/15/15/15 14/14/14/14 +f 14/14/14/14 19/19/19/19 20/20/20/20 +f 21/21/21/21 16/16/16/16 17/17/17/17 +f 17/17/17/17 22/22/22/22 21/21/21/21 +f 23/23/23/23 18/18/18/18 16/16/16/16 +f 16/16/16/16 21/21/21/21 23/23/23/23 +f 24/24/24/24 19/19/19/19 18/18/18/18 +f 18/18/18/18 23/23/23/23 24/24/24/24 +f 25/25/25/25 20/20/20/20 19/19/19/19 +f 19/19/19/19 24/24/24/24 25/25/25/25 +f 26/26/26/26 21/21/21/21 22/22/22/22 +f 22/22/22/22 27/27/27/27 26/26/26/26 +f 28/28/28/28 23/23/23/23 21/21/21/21 +f 21/21/21/21 26/26/26/26 28/28/28/28 +f 29/29/29/29 24/24/24/24 23/23/23/23 +f 23/23/23/23 28/28/28/28 29/29/29/29 +f 30/30/30/30 25/25/25/25 24/24/24/24 +f 24/24/24/24 29/29/29/29 30/30/30/30 +f 31/31/31/31 26/26/26/26 27/27/27/27 +f 27/27/27/27 32/32/32/32 31/31/31/31 +f 33/33/33/33 28/28/28/28 26/26/26/26 +f 26/26/26/26 31/31/31/31 33/33/33/33 +f 34/34/34/34 29/29/29/29 28/28/28/28 +f 28/28/28/28 33/33/33/33 34/34/34/34 +f 35/35/35/35 30/30/30/30 29/29/29/29 +f 29/29/29/29 34/34/34/34 35/35/35/35 +f 36/36/36/36 31/31/31/31 32/32/32/32 +f 32/32/32/32 37/37/37/37 36/36/36/36 +f 38/38/38/38 33/33/33/33 31/31/31/31 +f 31/31/31/31 36/36/36/36 38/38/38/38 +f 39/39/39/39 34/34/34/34 33/33/33/33 +f 33/33/33/33 38/38/38/38 39/39/39/39 +f 40/40/40/40 35/35/35/35 34/34/34/34 +f 34/34/34/34 39/39/39/39 40/40/40/40 +f 41/41/41/41 36/36/36/36 37/37/37/37 +f 37/37/37/37 42/42/42/42 41/41/41/41 +f 43/43/43/43 38/38/38/38 36/36/36/36 +f 36/36/36/36 41/41/41/41 43/43/43/43 +f 44/44/44/44 39/39/39/39 38/38/38/38 +f 38/38/38/38 43/43/43/43 44/44/44/44 +f 45/45/45/45 40/40/40/40 39/39/39/39 +f 39/39/39/39 44/44/44/44 45/45/45/45 +f 46/46/46/46 47/47/47/47 48/48/48/48 +f 48/48/48/48 49/49/49/49 46/46/46/46 +f 50/50/50/50 51/51/51/51 47/47/47/47 +f 47/47/47/47 46/46/46/46 50/50/50/50 +f 52/52/52/52 53/53/53/53 51/51/51/51 +f 51/51/51/51 50/50/50/50 52/52/52/52 +f 54/54/54/54 55/55/55/55 53/53/53/53 +f 53/53/53/53 52/52/52/52 54/54/54/54 +f 56/56/56/56 46/46/46/46 49/49/49/49 +f 49/49/49/49 57/57/57/57 56/56/56/56 +f 58/58/58/58 50/50/50/50 46/46/46/46 +f 46/46/46/46 56/56/56/56 58/58/58/58 +f 59/59/59/59 52/52/52/52 50/50/50/50 +f 50/50/50/50 58/58/58/58 59/59/59/59 +f 60/60/60/60 54/54/54/54 52/52/52/52 +f 52/52/52/52 59/59/59/59 60/60/60/60 +f 61/61/61/61 56/56/56/56 57/57/57/57 +f 57/57/57/57 62/62/62/62 61/61/61/61 +f 63/63/63/63 58/58/58/58 56/56/56/56 +f 56/56/56/56 61/61/61/61 63/63/63/63 +f 64/64/64/64 59/59/59/59 58/58/58/58 +f 58/58/58/58 63/63/63/63 64/64/64/64 +f 65/65/65/65 60/60/60/60 59/59/59/59 +f 59/59/59/59 64/64/64/64 65/65/65/65 +f 66/66/66/66 61/61/61/61 62/62/62/62 +f 62/62/62/62 67/67/67/67 66/66/66/66 +f 68/68/68/68 63/63/63/63 61/61/61/61 +f 61/61/61/61 66/66/66/66 68/68/68/68 +f 69/69/69/69 64/64/64/64 63/63/63/63 +f 63/63/63/63 68/68/68/68 69/69/69/69 +f 70/70/70/70 65/65/65/65 64/64/64/64 +f 64/64/64/64 69/69/69/69 70/70/70/70 +f 71/71/71/71 66/66/66/66 67/67/67/67 +f 67/67/67/67 72/72/72/72 71/71/71/71 +f 73/73/73/73 68/68/68/68 66/66/66/66 +f 66/66/66/66 71/71/71/71 73/73/73/73 +f 74/74/74/74 69/69/69/69 68/68/68/68 +f 68/68/68/68 73/73/73/73 74/74/74/74 +f 75/75/75/75 70/70/70/70 69/69/69/69 +f 69/69/69/69 74/74/74/74 75/75/75/75 +f 76/76/76/76 71/71/71/71 72/72/72/72 +f 72/72/72/72 77/77/77/77 76/76/76/76 +f 78/78/78/78 73/73/73/73 71/71/71/71 +f 71/71/71/71 76/76/76/76 78/78/78/78 +f 79/79/79/79 74/74/74/74 73/73/73/73 +f 73/73/73/73 78/78/78/78 79/79/79/79 +f 80/80/80/80 75/75/75/75 74/74/74/74 +f 74/74/74/74 79/79/79/79 80/80/80/80 +f 81/81/81/81 76/76/76/76 77/77/77/77 +f 77/77/77/77 82/82/82/82 81/81/81/81 +f 83/83/83/83 78/78/78/78 76/76/76/76 +f 76/76/76/76 81/81/81/81 83/83/83/83 +f 84/84/84/84 79/79/79/79 78/78/78/78 +f 78/78/78/78 83/83/83/83 84/84/84/84 +f 85/85/85/85 80/80/80/80 79/79/79/79 +f 79/79/79/79 84/84/84/84 85/85/85/85 +f 86/86/86/86 81/81/81/81 82/82/82/82 +f 82/82/82/82 87/87/87/87 86/86/86/86 +f 88/88/88/88 83/83/83/83 81/81/81/81 +f 81/81/81/81 86/86/86/86 88/88/88/88 +f 89/89/89/89 84/84/84/84 83/83/83/83 +f 83/83/83/83 88/88/88/88 89/89/89/89 +f 90/90/90/90 85/85/85/85 84/84/84/84 +f 84/84/84/84 89/89/89/89 90/90/90/90 +f 91/91/91/91 92/92/92/92 10/10/10/10 +f 10/10/10/10 9/9/9/9 91/91/91/91 +f 93/93/93/93 94/94/94/94 92/92/92/92 +f 92/92/92/92 91/91/91/91 93/93/93/93 +f 95/95/95/95 96/96/96/96 94/94/94/94 +f 94/94/94/94 93/93/93/93 95/95/95/95 +f 97/97/97/97 98/98/98/98 96/96/96/96 +f 96/96/96/96 95/95/95/95 97/97/97/97 +f 99/99/99/99 91/91/91/91 9/9/9/9 +f 9/9/9/9 15/15/15/15 99/99/99/99 +f 100/100/100/100 93/93/93/93 91/91/91/91 +f 91/91/91/91 99/99/99/99 100/100/100/100 +f 101/101/101/101 95/95/95/95 93/93/93/93 +f 93/93/93/93 100/100/100/100 101/101/101/101 +f 102/102/102/102 97/97/97/97 95/95/95/95 +f 95/95/95/95 101/101/101/101 102/102/102/102 +f 103/103/103/103 99/99/99/99 15/15/15/15 +f 15/15/15/15 20/20/20/20 103/103/103/103 +f 104/104/104/104 100/100/100/100 99/99/99/99 +f 99/99/99/99 103/103/103/103 104/104/104/104 +f 105/105/105/105 101/101/101/101 100/100/100/100 +f 100/100/100/100 104/104/104/104 105/105/105/105 +f 106/106/106/106 102/102/102/102 101/101/101/101 +f 101/101/101/101 105/105/105/105 106/106/106/106 +f 107/107/107/107 103/103/103/103 20/20/20/20 +f 20/20/20/20 25/25/25/25 107/107/107/107 +f 108/108/108/108 104/104/104/104 103/103/103/103 +f 103/103/103/103 107/107/107/107 108/108/108/108 +f 109/109/109/109 105/105/105/105 104/104/104/104 +f 104/104/104/104 108/108/108/108 109/109/109/109 +f 110/110/110/110 106/106/106/106 105/105/105/105 +f 105/105/105/105 109/109/109/109 110/110/110/110 +f 111/111/111/111 107/107/107/107 25/25/25/25 +f 25/25/25/25 30/30/30/30 111/111/111/111 +f 112/112/112/112 108/108/108/108 107/107/107/107 +f 107/107/107/107 111/111/111/111 112/112/112/112 +f 113/113/113/113 109/109/109/109 108/108/108/108 +f 108/108/108/108 112/112/112/112 113/113/113/113 +f 114/114/114/114 110/110/110/110 109/109/109/109 +f 109/109/109/109 113/113/113/113 114/114/114/114 +f 115/115/115/115 111/111/111/111 30/30/30/30 +f 30/30/30/30 35/35/35/35 115/115/115/115 +f 116/116/116/116 112/112/112/112 111/111/111/111 +f 111/111/111/111 115/115/115/115 116/116/116/116 +f 117/117/117/117 113/113/113/113 112/112/112/112 +f 112/112/112/112 116/116/116/116 117/117/117/117 +f 118/118/118/118 114/114/114/114 113/113/113/113 +f 113/113/113/113 117/117/117/117 118/118/118/118 +f 119/119/119/119 115/115/115/115 35/35/35/35 +f 35/35/35/35 40/40/40/40 119/119/119/119 +f 120/120/120/120 116/116/116/116 115/115/115/115 +f 115/115/115/115 119/119/119/119 120/120/120/120 +f 121/121/121/121 117/117/117/117 116/116/116/116 +f 116/116/116/116 120/120/120/120 121/121/121/121 +f 122/122/122/122 118/118/118/118 117/117/117/117 +f 117/117/117/117 121/121/121/121 122/122/122/122 +f 123/123/123/123 119/119/119/119 40/40/40/40 +f 40/40/40/40 45/45/45/45 123/123/123/123 +f 124/124/124/124 120/120/120/120 119/119/119/119 +f 119/119/119/119 123/123/123/123 124/124/124/124 +f 125/125/125/125 121/121/121/121 120/120/120/120 +f 120/120/120/120 124/124/124/124 125/125/125/125 +f 126/126/126/126 122/122/122/122 121/121/121/121 +f 121/121/121/121 125/125/125/125 126/126/126/126 +f 127/127/127/127 128/128/128/128 55/55/55/55 +f 55/55/55/55 54/54/54/54 127/127/127/127 +f 129/129/129/129 130/130/130/130 128/128/128/128 +f 128/128/128/128 127/127/127/127 129/129/129/129 +f 131/131/131/131 132/132/132/132 130/130/130/130 +f 130/130/130/130 129/129/129/129 131/131/131/131 +f 133/133/133/133 134/134/134/134 132/132/132/132 +f 132/132/132/132 131/131/131/131 133/133/133/133 +f 135/135/135/135 127/127/127/127 54/54/54/54 +f 54/54/54/54 60/60/60/60 135/135/135/135 +f 136/136/136/136 129/129/129/129 127/127/127/127 +f 127/127/127/127 135/135/135/135 136/136/136/136 +f 137/137/137/137 131/131/131/131 129/129/129/129 +f 129/129/129/129 136/136/136/136 137/137/137/137 +f 138/138/138/138 133/133/133/133 131/131/131/131 +f 131/131/131/131 137/137/137/137 138/138/138/138 +f 139/139/139/139 135/135/135/135 60/60/60/60 +f 60/60/60/60 65/65/65/65 139/139/139/139 +f 140/140/140/140 136/136/136/136 135/135/135/135 +f 135/135/135/135 139/139/139/139 140/140/140/140 +f 141/141/141/141 137/137/137/137 136/136/136/136 +f 136/136/136/136 140/140/140/140 141/141/141/141 +f 142/142/142/142 138/138/138/138 137/137/137/137 +f 137/137/137/137 141/141/141/141 142/142/142/142 +f 143/143/143/143 139/139/139/139 65/65/65/65 +f 65/65/65/65 70/70/70/70 143/143/143/143 +f 144/144/144/144 140/140/140/140 139/139/139/139 +f 139/139/139/139 143/143/143/143 144/144/144/144 +f 145/145/145/145 141/141/141/141 140/140/140/140 +f 140/140/140/140 144/144/144/144 145/145/145/145 +f 146/146/146/146 142/142/142/142 141/141/141/141 +f 141/141/141/141 145/145/145/145 146/146/146/146 +f 147/147/147/147 143/143/143/143 70/70/70/70 +f 70/70/70/70 75/75/75/75 147/147/147/147 +f 148/148/148/148 144/144/144/144 143/143/143/143 +f 143/143/143/143 147/147/147/147 148/148/148/148 +f 149/149/149/149 145/145/145/145 144/144/144/144 +f 144/144/144/144 148/148/148/148 149/149/149/149 +f 150/150/150/150 146/146/146/146 145/145/145/145 +f 145/145/145/145 149/149/149/149 150/150/150/150 +f 151/151/151/151 147/147/147/147 75/75/75/75 +f 75/75/75/75 80/80/80/80 151/151/151/151 +f 152/152/152/152 148/148/148/148 147/147/147/147 +f 147/147/147/147 151/151/151/151 152/152/152/152 +f 153/153/153/153 149/149/149/149 148/148/148/148 +f 148/148/148/148 152/152/152/152 153/153/153/153 +f 154/154/154/154 150/150/150/150 149/149/149/149 +f 149/149/149/149 153/153/153/153 154/154/154/154 +f 155/155/155/155 151/151/151/151 80/80/80/80 +f 80/80/80/80 85/85/85/85 155/155/155/155 +f 156/156/156/156 152/152/152/152 151/151/151/151 +f 151/151/151/151 155/155/155/155 156/156/156/156 +f 157/157/157/157 153/153/153/153 152/152/152/152 +f 152/152/152/152 156/156/156/156 157/157/157/157 +f 158/158/158/158 154/154/154/154 153/153/153/153 +f 153/153/153/153 157/157/157/157 158/158/158/158 +f 159/159/159/159 155/155/155/155 85/85/85/85 +f 85/85/85/85 90/90/90/90 159/159/159/159 +f 160/160/160/160 156/156/156/156 155/155/155/155 +f 155/155/155/155 159/159/159/159 160/160/160/160 +f 161/161/161/161 157/157/157/157 156/156/156/156 +f 156/156/156/156 160/160/160/160 161/161/161/161 +f 162/162/162/162 158/158/158/158 157/157/157/157 +f 157/157/157/157 161/161/161/161 162/162/162/162 +f 163/163/163/163 164/164/164/164 98/98/98/98 +f 98/98/98/98 97/97/97/97 163/163/163/163 +f 165/165/165/165 166/166/166/166 164/164/164/164 +f 164/164/164/164 163/163/163/163 165/165/165/165 +f 167/167/167/167 168/168/168/168 166/166/166/166 +f 166/166/166/166 165/165/165/165 167/167/167/167 +f 169/169/169/169 170/170/170/170 168/168/168/168 +f 168/168/168/168 167/167/167/167 169/169/169/169 +f 171/171/171/171 163/163/163/163 97/97/97/97 +f 97/97/97/97 102/102/102/102 171/171/171/171 +f 172/172/172/172 165/165/165/165 163/163/163/163 +f 163/163/163/163 171/171/171/171 172/172/172/172 +f 173/173/173/173 167/167/167/167 165/165/165/165 +f 165/165/165/165 172/172/172/172 173/173/173/173 +f 174/174/174/174 169/169/169/169 167/167/167/167 +f 167/167/167/167 173/173/173/173 174/174/174/174 +f 175/175/175/175 171/171/171/171 102/102/102/102 +f 102/102/102/102 106/106/106/106 175/175/175/175 +f 176/176/176/176 172/172/172/172 171/171/171/171 +f 171/171/171/171 175/175/175/175 176/176/176/176 +f 177/177/177/177 173/173/173/173 172/172/172/172 +f 172/172/172/172 176/176/176/176 177/177/177/177 +f 178/178/178/178 174/174/174/174 173/173/173/173 +f 173/173/173/173 177/177/177/177 178/178/178/178 +f 179/179/179/179 175/175/175/175 106/106/106/106 +f 106/106/106/106 110/110/110/110 179/179/179/179 +f 180/180/180/180 176/176/176/176 175/175/175/175 +f 175/175/175/175 179/179/179/179 180/180/180/180 +f 181/181/181/181 177/177/177/177 176/176/176/176 +f 176/176/176/176 180/180/180/180 181/181/181/181 +f 182/182/182/182 178/178/178/178 177/177/177/177 +f 177/177/177/177 181/181/181/181 182/182/182/182 +f 183/183/183/183 179/179/179/179 110/110/110/110 +f 110/110/110/110 114/114/114/114 183/183/183/183 +f 184/184/184/184 180/180/180/180 179/179/179/179 +f 179/179/179/179 183/183/183/183 184/184/184/184 +f 185/185/185/185 181/181/181/181 180/180/180/180 +f 180/180/180/180 184/184/184/184 185/185/185/185 +f 186/186/186/186 182/182/182/182 181/181/181/181 +f 181/181/181/181 185/185/185/185 186/186/186/186 +f 187/187/187/187 183/183/183/183 114/114/114/114 +f 114/114/114/114 118/118/118/118 187/187/187/187 +f 188/188/188/188 184/184/184/184 183/183/183/183 +f 183/183/183/183 187/187/187/187 188/188/188/188 +f 189/189/189/189 185/185/185/185 184/184/184/184 +f 184/184/184/184 188/188/188/188 189/189/189/189 +f 190/190/190/190 186/186/186/186 185/185/185/185 +f 185/185/185/185 189/189/189/189 190/190/190/190 +f 191/191/191/191 187/187/187/187 118/118/118/118 +f 118/118/118/118 122/122/122/122 191/191/191/191 +f 192/192/192/192 188/188/188/188 187/187/187/187 +f 187/187/187/187 191/191/191/191 192/192/192/192 +f 193/193/193/193 189/189/189/189 188/188/188/188 +f 188/188/188/188 192/192/192/192 193/193/193/193 +f 194/194/194/194 190/190/190/190 189/189/189/189 +f 189/189/189/189 193/193/193/193 194/194/194/194 +f 195/195/195/195 191/191/191/191 122/122/122/122 +f 122/122/122/122 126/126/126/126 195/195/195/195 +f 196/196/196/196 192/192/192/192 191/191/191/191 +f 191/191/191/191 195/195/195/195 196/196/196/196 +f 197/197/197/197 193/193/193/193 192/192/192/192 +f 192/192/192/192 196/196/196/196 197/197/197/197 +f 198/198/198/198 194/194/194/194 193/193/193/193 +f 193/193/193/193 197/197/197/197 198/198/198/198 +f 199/199/199/199 200/200/200/200 134/134/134/134 +f 134/134/134/134 133/133/133/133 199/199/199/199 +f 201/201/201/201 202/202/202/202 200/200/200/200 +f 200/200/200/200 199/199/199/199 201/201/201/201 +f 203/203/203/203 204/204/204/204 202/202/202/202 +f 202/202/202/202 201/201/201/201 203/203/203/203 +f 205/205/205/205 206/206/206/206 204/204/204/204 +f 204/204/204/204 203/203/203/203 205/205/205/205 +f 207/207/207/207 199/199/199/199 133/133/133/133 +f 133/133/133/133 138/138/138/138 207/207/207/207 +f 208/208/208/208 201/201/201/201 199/199/199/199 +f 199/199/199/199 207/207/207/207 208/208/208/208 +f 209/209/209/209 203/203/203/203 201/201/201/201 +f 201/201/201/201 208/208/208/208 209/209/209/209 +f 210/210/210/210 205/205/205/205 203/203/203/203 +f 203/203/203/203 209/209/209/209 210/210/210/210 +f 211/211/211/211 207/207/207/207 138/138/138/138 +f 138/138/138/138 142/142/142/142 211/211/211/211 +f 212/212/212/212 208/208/208/208 207/207/207/207 +f 207/207/207/207 211/211/211/211 212/212/212/212 +f 213/213/213/213 209/209/209/209 208/208/208/208 +f 208/208/208/208 212/212/212/212 213/213/213/213 +f 214/214/214/214 210/210/210/210 209/209/209/209 +f 209/209/209/209 213/213/213/213 214/214/214/214 +f 215/215/215/215 211/211/211/211 142/142/142/142 +f 142/142/142/142 146/146/146/146 215/215/215/215 +f 216/216/216/216 212/212/212/212 211/211/211/211 +f 211/211/211/211 215/215/215/215 216/216/216/216 +f 217/217/217/217 213/213/213/213 212/212/212/212 +f 212/212/212/212 216/216/216/216 217/217/217/217 +f 218/218/218/218 214/214/214/214 213/213/213/213 +f 213/213/213/213 217/217/217/217 218/218/218/218 +f 219/219/219/219 215/215/215/215 146/146/146/146 +f 146/146/146/146 150/150/150/150 219/219/219/219 +f 220/220/220/220 216/216/216/216 215/215/215/215 +f 215/215/215/215 219/219/219/219 220/220/220/220 +f 221/221/221/221 217/217/217/217 216/216/216/216 +f 216/216/216/216 220/220/220/220 221/221/221/221 +f 222/222/222/222 218/218/218/218 217/217/217/217 +f 217/217/217/217 221/221/221/221 222/222/222/222 +f 223/223/223/223 219/219/219/219 150/150/150/150 +f 150/150/150/150 154/154/154/154 223/223/223/223 +f 224/224/224/224 220/220/220/220 219/219/219/219 +f 219/219/219/219 223/223/223/223 224/224/224/224 +f 225/225/225/225 221/221/221/221 220/220/220/220 +f 220/220/220/220 224/224/224/224 225/225/225/225 +f 226/226/226/226 222/222/222/222 221/221/221/221 +f 221/221/221/221 225/225/225/225 226/226/226/226 +f 227/227/227/227 223/223/223/223 154/154/154/154 +f 154/154/154/154 158/158/158/158 227/227/227/227 +f 228/228/228/228 224/224/224/224 223/223/223/223 +f 223/223/223/223 227/227/227/227 228/228/228/228 +f 229/229/229/229 225/225/225/225 224/224/224/224 +f 224/224/224/224 228/228/228/228 229/229/229/229 +f 230/230/230/230 226/226/226/226 225/225/225/225 +f 225/225/225/225 229/229/229/229 230/230/230/230 +f 231/231/231/231 227/227/227/227 158/158/158/158 +f 158/158/158/158 162/162/162/162 231/231/231/231 +f 232/232/232/232 228/228/228/228 227/227/227/227 +f 227/227/227/227 231/231/231/231 232/232/232/232 +f 233/233/233/233 229/229/229/229 228/228/228/228 +f 228/228/228/228 232/232/232/232 233/233/233/233 +f 234/234/234/234 230/230/230/230 229/229/229/229 +f 229/229/229/229 233/233/233/233 234/234/234/234 +f 235/235/235/235 236/236/236/236 170/170/170/170 +f 170/170/170/170 169/169/169/169 235/235/235/235 +f 237/237/237/237 238/238/238/238 236/236/236/236 +f 236/236/236/236 235/235/235/235 237/237/237/237 +f 239/239/239/239 240/240/240/240 238/238/238/238 +f 238/238/238/238 237/237/237/237 239/239/239/239 +f 240/240/240/240 239/239/239/239 241/241/241/241 +f 242/242/242/242 235/235/235/235 169/169/169/169 +f 169/169/169/169 174/174/174/174 242/242/242/242 +f 243/243/243/243 237/237/237/237 235/235/235/235 +f 235/235/235/235 242/242/242/242 243/243/243/243 +f 244/244/244/244 239/239/239/239 237/237/237/237 +f 237/237/237/237 243/243/243/243 244/244/244/244 +f 239/239/239/239 244/244/244/244 245/245/245/245 +f 246/246/246/246 242/242/242/242 174/174/174/174 +f 174/174/174/174 178/178/178/178 246/246/246/246 +f 247/247/247/247 243/243/243/243 242/242/242/242 +f 242/242/242/242 246/246/246/246 247/247/247/247 +f 248/248/248/248 244/244/244/244 243/243/243/243 +f 243/243/243/243 247/247/247/247 248/248/248/248 +f 244/244/244/244 248/248/248/248 249/249/249/249 +f 250/250/250/250 246/246/246/246 178/178/178/178 +f 178/178/178/178 182/182/182/182 250/250/250/250 +f 251/251/251/251 247/247/247/247 246/246/246/246 +f 246/246/246/246 250/250/250/250 251/251/251/251 +f 252/252/252/252 248/248/248/248 247/247/247/247 +f 247/247/247/247 251/251/251/251 252/252/252/252 +f 248/248/248/248 252/252/252/252 253/253/253/253 +f 254/254/254/254 250/250/250/250 182/182/182/182 +f 182/182/182/182 186/186/186/186 254/254/254/254 +f 255/255/255/255 251/251/251/251 250/250/250/250 +f 250/250/250/250 254/254/254/254 255/255/255/255 +f 256/256/256/256 252/252/252/252 251/251/251/251 +f 251/251/251/251 255/255/255/255 256/256/256/256 +f 252/252/252/252 256/256/256/256 257/257/257/257 +f 258/258/258/258 254/254/254/254 186/186/186/186 +f 186/186/186/186 190/190/190/190 258/258/258/258 +f 259/259/259/259 255/255/255/255 254/254/254/254 +f 254/254/254/254 258/258/258/258 259/259/259/259 +f 260/260/260/260 256/256/256/256 255/255/255/255 +f 255/255/255/255 259/259/259/259 260/260/260/260 +f 256/256/256/256 260/260/260/260 261/261/261/261 +f 262/262/262/262 258/258/258/258 190/190/190/190 +f 190/190/190/190 194/194/194/194 262/262/262/262 +f 263/263/263/263 259/259/259/259 258/258/258/258 +f 258/258/258/258 262/262/262/262 263/263/263/263 +f 264/264/264/264 260/260/260/260 259/259/259/259 +f 259/259/259/259 263/263/263/263 264/264/264/264 +f 260/260/260/260 264/264/264/264 265/265/265/265 +f 266/266/266/266 262/262/262/262 194/194/194/194 +f 194/194/194/194 198/198/198/198 266/266/266/266 +f 267/267/267/267 263/263/263/263 262/262/262/262 +f 262/262/262/262 266/266/266/266 267/267/267/267 +f 268/268/268/268 264/264/264/264 263/263/263/263 +f 263/263/263/263 267/267/267/267 268/268/268/268 +f 264/264/264/264 268/268/268/268 269/269/269/269 +f 270/270/270/270 271/271/271/271 206/206/206/206 +f 206/206/206/206 205/205/205/205 270/270/270/270 +f 272/272/272/272 273/273/273/273 271/271/271/271 +f 271/271/271/271 270/270/270/270 272/272/272/272 +f 274/274/274/274 275/275/275/275 273/273/273/273 +f 273/273/273/273 272/272/272/272 274/274/274/274 +f 275/275/275/275 274/274/274/274 241/241/241/241 +f 276/276/276/276 270/270/270/270 205/205/205/205 +f 205/205/205/205 210/210/210/210 276/276/276/276 +f 277/277/277/277 272/272/272/272 270/270/270/270 +f 270/270/270/270 276/276/276/276 277/277/277/277 +f 278/278/278/278 274/274/274/274 272/272/272/272 +f 272/272/272/272 277/277/277/277 278/278/278/278 +f 274/274/274/274 278/278/278/278 245/245/245/245 +f 279/279/279/279 276/276/276/276 210/210/210/210 +f 210/210/210/210 214/214/214/214 279/279/279/279 +f 280/280/280/280 277/277/277/277 276/276/276/276 +f 276/276/276/276 279/279/279/279 280/280/280/280 +f 281/281/281/281 278/278/278/278 277/277/277/277 +f 277/277/277/277 280/280/280/280 281/281/281/281 +f 278/278/278/278 281/281/281/281 249/249/249/249 +f 282/282/282/282 279/279/279/279 214/214/214/214 +f 214/214/214/214 218/218/218/218 282/282/282/282 +f 283/283/283/283 280/280/280/280 279/279/279/279 +f 279/279/279/279 282/282/282/282 283/283/283/283 +f 284/284/284/284 281/281/281/281 280/280/280/280 +f 280/280/280/280 283/283/283/283 284/284/284/284 +f 281/281/281/281 284/284/284/284 253/253/253/253 +f 285/285/285/285 282/282/282/282 218/218/218/218 +f 218/218/218/218 222/222/222/222 285/285/285/285 +f 286/286/286/286 283/283/283/283 282/282/282/282 +f 282/282/282/282 285/285/285/285 286/286/286/286 +f 287/287/287/287 284/284/284/284 283/283/283/283 +f 283/283/283/283 286/286/286/286 287/287/287/287 +f 284/284/284/284 287/287/287/287 257/257/257/257 +f 288/288/288/288 285/285/285/285 222/222/222/222 +f 222/222/222/222 226/226/226/226 288/288/288/288 +f 289/289/289/289 286/286/286/286 285/285/285/285 +f 285/285/285/285 288/288/288/288 289/289/289/289 +f 290/290/290/290 287/287/287/287 286/286/286/286 +f 286/286/286/286 289/289/289/289 290/290/290/290 +f 287/287/287/287 290/290/290/290 261/261/261/261 +f 291/291/291/291 288/288/288/288 226/226/226/226 +f 226/226/226/226 230/230/230/230 291/291/291/291 +f 292/292/292/292 289/289/289/289 288/288/288/288 +f 288/288/288/288 291/291/291/291 292/292/292/292 +f 293/293/293/293 290/290/290/290 289/289/289/289 +f 289/289/289/289 292/292/292/292 293/293/293/293 +f 290/290/290/290 293/293/293/293 265/265/265/265 +f 294/294/294/294 291/291/291/291 230/230/230/230 +f 230/230/230/230 234/234/234/234 294/294/294/294 +f 295/295/295/295 292/292/292/292 291/291/291/291 +f 291/291/291/291 294/294/294/294 295/295/295/295 +f 296/296/296/296 293/293/293/293 292/292/292/292 +f 292/292/292/292 295/295/295/295 296/296/296/296 +f 293/293/293/293 296/296/296/296 269/269/269/269 +f 297/297/297/297 298/298/298/298 299/299/299/299 +f 299/299/299/299 300/300/300/300 297/297/297/297 +f 301/301/301/301 302/302/302/302 298/298/298/298 +f 298/298/298/298 297/297/297/297 301/301/301/301 +f 303/303/303/303 304/304/304/304 302/302/302/302 +f 302/302/302/302 301/301/301/301 303/303/303/303 +f 305/305/305/305 306/306/306/306 304/304/304/304 +f 304/304/304/304 303/303/303/303 305/305/305/305 +f 307/307/307/307 297/297/297/297 300/300/300/300 +f 300/300/300/300 308/308/308/308 307/307/307/307 +f 309/309/309/309 301/301/301/301 297/297/297/297 +f 297/297/297/297 307/307/307/307 309/309/309/309 +f 310/310/310/310 303/303/303/303 301/301/301/301 +f 301/301/301/301 309/309/309/309 310/310/310/310 +f 311/311/311/311 305/305/305/305 303/303/303/303 +f 303/303/303/303 310/310/310/310 311/311/311/311 +f 312/312/312/312 307/307/307/307 308/308/308/308 +f 308/308/308/308 313/313/313/313 312/312/312/312 +f 314/314/314/314 309/309/309/309 307/307/307/307 +f 307/307/307/307 312/312/312/312 314/314/314/314 +f 315/315/315/315 310/310/310/310 309/309/309/309 +f 309/309/309/309 314/314/314/314 315/315/315/315 +f 316/316/316/316 311/311/311/311 310/310/310/310 +f 310/310/310/310 315/315/315/315 316/316/316/316 +f 317/317/317/317 312/312/312/312 313/313/313/313 +f 313/313/313/313 318/318/318/318 317/317/317/317 +f 319/319/319/319 314/314/314/314 312/312/312/312 +f 312/312/312/312 317/317/317/317 319/319/319/319 +f 320/320/320/320 315/315/315/315 314/314/314/314 +f 314/314/314/314 319/319/319/319 320/320/320/320 +f 321/321/321/321 316/316/316/316 315/315/315/315 +f 315/315/315/315 320/320/320/320 321/321/321/321 +f 322/322/322/322 317/317/317/317 318/318/318/318 +f 318/318/318/318 323/323/323/323 322/322/322/322 +f 324/324/324/324 319/319/319/319 317/317/317/317 +f 317/317/317/317 322/322/322/322 324/324/324/324 +f 325/325/325/325 320/320/320/320 319/319/319/319 +f 319/319/319/319 324/324/324/324 325/325/325/325 +f 326/326/326/326 321/321/321/321 320/320/320/320 +f 320/320/320/320 325/325/325/325 326/326/326/326 +f 327/327/327/327 322/322/322/322 323/323/323/323 +f 323/323/323/323 328/328/328/328 327/327/327/327 +f 329/329/329/329 324/324/324/324 322/322/322/322 +f 322/322/322/322 327/327/327/327 329/329/329/329 +f 330/330/330/330 325/325/325/325 324/324/324/324 +f 324/324/324/324 329/329/329/329 330/330/330/330 +f 331/331/331/331 326/326/326/326 325/325/325/325 +f 325/325/325/325 330/330/330/330 331/331/331/331 +f 332/332/332/332 327/327/327/327 328/328/328/328 +f 328/328/328/328 333/333/333/333 332/332/332/332 +f 334/334/334/334 329/329/329/329 327/327/327/327 +f 327/327/327/327 332/332/332/332 334/334/334/334 +f 335/335/335/335 330/330/330/330 329/329/329/329 +f 329/329/329/329 334/334/334/334 335/335/335/335 +f 336/336/336/336 331/331/331/331 330/330/330/330 +f 330/330/330/330 335/335/335/335 336/336/336/336 +f 337/337/337/337 332/332/332/332 333/333/333/333 +f 333/333/333/333 338/338/338/338 337/337/337/337 +f 339/339/339/339 334/334/334/334 332/332/332/332 +f 332/332/332/332 337/337/337/337 339/339/339/339 +f 340/340/340/340 335/335/335/335 334/334/334/334 +f 334/334/334/334 339/339/339/339 340/340/340/340 +f 341/341/341/341 336/336/336/336 335/335/335/335 +f 335/335/335/335 340/340/340/340 341/341/341/341 +f 342/342/342/342 343/343/343/343 306/306/306/306 +f 306/306/306/306 305/305/305/305 342/342/342/342 +f 344/344/344/344 345/345/345/345 343/343/343/343 +f 343/343/343/343 342/342/342/342 344/344/344/344 +f 346/346/346/346 347/347/347/347 345/345/345/345 +f 345/345/345/345 344/344/344/344 346/346/346/346 +f 348/348/348/348 349/349/349/349 347/347/347/347 +f 347/347/347/347 346/346/346/346 348/348/348/348 +f 350/350/350/350 342/342/342/342 305/305/305/305 +f 305/305/305/305 311/311/311/311 350/350/350/350 +f 351/351/351/351 344/344/344/344 342/342/342/342 +f 342/342/342/342 350/350/350/350 351/351/351/351 +f 352/352/352/352 346/346/346/346 344/344/344/344 +f 344/344/344/344 351/351/351/351 352/352/352/352 +f 353/353/353/353 348/348/348/348 346/346/346/346 +f 346/346/346/346 352/352/352/352 353/353/353/353 +f 354/354/354/354 350/350/350/350 311/311/311/311 +f 311/311/311/311 316/316/316/316 354/354/354/354 +f 355/355/355/355 351/351/351/351 350/350/350/350 +f 350/350/350/350 354/354/354/354 355/355/355/355 +f 356/356/356/356 352/352/352/352 351/351/351/351 +f 351/351/351/351 355/355/355/355 356/356/356/356 +f 357/357/357/357 353/353/353/353 352/352/352/352 +f 352/352/352/352 356/356/356/356 357/357/357/357 +f 358/358/358/358 354/354/354/354 316/316/316/316 +f 316/316/316/316 321/321/321/321 358/358/358/358 +f 359/359/359/359 355/355/355/355 354/354/354/354 +f 354/354/354/354 358/358/358/358 359/359/359/359 +f 360/360/360/360 356/356/356/356 355/355/355/355 +f 355/355/355/355 359/359/359/359 360/360/360/360 +f 361/361/361/361 357/357/357/357 356/356/356/356 +f 356/356/356/356 360/360/360/360 361/361/361/361 +f 362/362/362/362 358/358/358/358 321/321/321/321 +f 321/321/321/321 326/326/326/326 362/362/362/362 +f 363/363/363/363 359/359/359/359 358/358/358/358 +f 358/358/358/358 362/362/362/362 363/363/363/363 +f 364/364/364/364 360/360/360/360 359/359/359/359 +f 359/359/359/359 363/363/363/363 364/364/364/364 +f 365/365/365/365 361/361/361/361 360/360/360/360 +f 360/360/360/360 364/364/364/364 365/365/365/365 +f 366/366/366/366 362/362/362/362 326/326/326/326 +f 326/326/326/326 331/331/331/331 366/366/366/366 +f 367/367/367/367 363/363/363/363 362/362/362/362 +f 362/362/362/362 366/366/366/366 367/367/367/367 +f 368/368/368/368 364/364/364/364 363/363/363/363 +f 363/363/363/363 367/367/367/367 368/368/368/368 +f 369/369/369/369 365/365/365/365 364/364/364/364 +f 364/364/364/364 368/368/368/368 369/369/369/369 +f 370/370/370/370 366/366/366/366 331/331/331/331 +f 331/331/331/331 336/336/336/336 370/370/370/370 +f 371/371/371/371 367/367/367/367 366/366/366/366 +f 366/366/366/366 370/370/370/370 371/371/371/371 +f 372/372/372/372 368/368/368/368 367/367/367/367 +f 367/367/367/367 371/371/371/371 372/372/372/372 +f 373/373/373/373 369/369/369/369 368/368/368/368 +f 368/368/368/368 372/372/372/372 373/373/373/373 +f 374/374/374/374 370/370/370/370 336/336/336/336 +f 336/336/336/336 341/341/341/341 374/374/374/374 +f 375/375/375/375 371/371/371/371 370/370/370/370 +f 370/370/370/370 374/374/374/374 375/375/375/375 +f 376/376/376/376 372/372/372/372 371/371/371/371 +f 371/371/371/371 375/375/375/375 376/376/376/376 +f 377/377/377/377 373/373/373/373 372/372/372/372 +f 372/372/372/372 376/376/376/376 377/377/377/377 +f 378/378/378/378 379/379/379/379 380/380/380/380 +f 380/380/380/380 381/381/381/381 378/378/378/378 +f 382/382/382/382 383/383/383/383 379/379/379/379 +f 379/379/379/379 378/378/378/378 382/382/382/382 +f 384/384/384/384 385/385/385/385 383/383/383/383 +f 383/383/383/383 382/382/382/382 384/384/384/384 +f 386/386/386/386 387/387/387/387 385/385/385/385 +f 385/385/385/385 384/384/384/384 386/386/386/386 +f 388/388/388/388 378/378/378/378 381/381/381/381 +f 381/381/381/381 389/389/389/389 388/388/388/388 +f 390/390/390/390 382/382/382/382 378/378/378/378 +f 378/378/378/378 388/388/388/388 390/390/390/390 +f 391/391/391/391 384/384/384/384 382/382/382/382 +f 382/382/382/382 390/390/390/390 391/391/391/391 +f 392/392/392/392 386/386/386/386 384/384/384/384 +f 384/384/384/384 391/391/391/391 392/392/392/392 +f 393/393/393/393 388/388/388/388 389/389/389/389 +f 389/389/389/389 394/394/394/394 393/393/393/393 +f 395/395/395/395 390/390/390/390 388/388/388/388 +f 388/388/388/388 393/393/393/393 395/395/395/395 +f 396/396/396/396 391/391/391/391 390/390/390/390 +f 390/390/390/390 395/395/395/395 396/396/396/396 +f 397/397/397/397 392/392/392/392 391/391/391/391 +f 391/391/391/391 396/396/396/396 397/397/397/397 +f 398/398/398/398 393/393/393/393 394/394/394/394 +f 394/394/394/394 399/399/399/399 398/398/398/398 +f 400/400/400/400 395/395/395/395 393/393/393/393 +f 393/393/393/393 398/398/398/398 400/400/400/400 +f 401/401/401/401 396/396/396/396 395/395/395/395 +f 395/395/395/395 400/400/400/400 401/401/401/401 +f 402/402/402/402 397/397/397/397 396/396/396/396 +f 396/396/396/396 401/401/401/401 402/402/402/402 +f 403/403/403/403 404/404/404/404 405/405/405/405 +f 405/405/405/405 406/406/406/406 403/403/403/403 +f 407/407/407/407 408/408/408/408 404/404/404/404 +f 404/404/404/404 403/403/403/403 407/407/407/407 +f 409/409/409/409 410/410/410/410 408/408/408/408 +f 408/408/408/408 407/407/407/407 409/409/409/409 +f 411/411/411/411 412/412/412/412 410/410/410/410 +f 410/410/410/410 409/409/409/409 411/411/411/411 +f 413/413/413/413 403/403/403/403 406/406/406/406 +f 406/406/406/406 414/414/414/414 413/413/413/413 +f 415/415/415/415 407/407/407/407 403/403/403/403 +f 403/403/403/403 413/413/413/413 415/415/415/415 +f 416/416/416/416 409/409/409/409 407/407/407/407 +f 407/407/407/407 415/415/415/415 416/416/416/416 +f 417/417/417/417 411/411/411/411 409/409/409/409 +f 409/409/409/409 416/416/416/416 417/417/417/417 +f 418/418/418/418 413/413/413/413 414/414/414/414 +f 414/414/414/414 419/419/419/419 418/418/418/418 +f 420/420/420/420 415/415/415/415 413/413/413/413 +f 413/413/413/413 418/418/418/418 420/420/420/420 +f 421/421/421/421 416/416/416/416 415/415/415/415 +f 415/415/415/415 420/420/420/420 421/421/421/421 +f 422/422/422/422 417/417/417/417 416/416/416/416 +f 416/416/416/416 421/421/421/421 422/422/422/422 +f 379/379/379/379 418/418/418/418 419/419/419/419 +f 419/419/419/419 380/380/380/380 379/379/379/379 +f 383/383/383/383 420/420/420/420 418/418/418/418 +f 418/418/418/418 379/379/379/379 383/383/383/383 +f 385/385/385/385 421/421/421/421 420/420/420/420 +f 420/420/420/420 383/383/383/383 385/385/385/385 +f 387/387/387/387 422/422/422/422 421/421/421/421 +f 421/421/421/421 385/385/385/385 387/387/387/387 +f 423/423/423/423 424/424/424/424 387/387/387/387 +f 387/387/387/387 386/386/386/386 423/423/423/423 +f 425/425/425/425 426/426/426/426 424/424/424/424 +f 424/424/424/424 423/423/423/423 425/425/425/425 +f 427/427/427/427 428/428/428/428 426/426/426/426 +f 426/426/426/426 425/425/425/425 427/427/427/427 +f 429/429/429/429 430/430/430/430 428/428/428/428 +f 428/428/428/428 427/427/427/427 429/429/429/429 +f 431/431/431/431 423/423/423/423 386/386/386/386 +f 386/386/386/386 392/392/392/392 431/431/431/431 +f 432/432/432/432 425/425/425/425 423/423/423/423 +f 423/423/423/423 431/431/431/431 432/432/432/432 +f 433/433/433/433 427/427/427/427 425/425/425/425 +f 425/425/425/425 432/432/432/432 433/433/433/433 +f 434/434/434/434 429/429/429/429 427/427/427/427 +f 427/427/427/427 433/433/433/433 434/434/434/434 +f 435/435/435/435 431/431/431/431 392/392/392/392 +f 392/392/392/392 397/397/397/397 435/435/435/435 +f 436/436/436/436 432/432/432/432 431/431/431/431 +f 431/431/431/431 435/435/435/435 436/436/436/436 +f 437/437/437/437 433/433/433/433 432/432/432/432 +f 432/432/432/432 436/436/436/436 437/437/437/437 +f 438/438/438/438 434/434/434/434 433/433/433/433 +f 433/433/433/433 437/437/437/437 438/438/438/438 +f 439/439/439/439 435/435/435/435 397/397/397/397 +f 397/397/397/397 402/402/402/402 439/439/439/439 +f 440/440/440/440 436/436/436/436 435/435/435/435 +f 435/435/435/435 439/439/439/439 440/440/440/440 +f 441/441/441/441 437/437/437/437 436/436/436/436 +f 436/436/436/436 440/440/440/440 441/441/441/441 +f 442/442/442/442 438/438/438/438 437/437/437/437 +f 437/437/437/437 441/441/441/441 442/442/442/442 +f 443/443/443/443 444/444/444/444 412/412/412/412 +f 412/412/412/412 411/411/411/411 443/443/443/443 +f 445/445/445/445 446/446/446/446 444/444/444/444 +f 444/444/444/444 443/443/443/443 445/445/445/445 +f 447/447/447/447 448/448/448/448 446/446/446/446 +f 446/446/446/446 445/445/445/445 447/447/447/447 +f 449/449/449/449 450/450/450/450 448/448/448/448 +f 448/448/448/448 447/447/447/447 449/449/449/449 +f 451/451/451/451 443/443/443/443 411/411/411/411 +f 411/411/411/411 417/417/417/417 451/451/451/451 +f 452/452/452/452 445/445/445/445 443/443/443/443 +f 443/443/443/443 451/451/451/451 452/452/452/452 +f 453/453/453/453 447/447/447/447 445/445/445/445 +f 445/445/445/445 452/452/452/452 453/453/453/453 +f 454/454/454/454 449/449/449/449 447/447/447/447 +f 447/447/447/447 453/453/453/453 454/454/454/454 +f 455/455/455/455 451/451/451/451 417/417/417/417 +f 417/417/417/417 422/422/422/422 455/455/455/455 +f 456/456/456/456 452/452/452/452 451/451/451/451 +f 451/451/451/451 455/455/455/455 456/456/456/456 +f 457/457/457/457 453/453/453/453 452/452/452/452 +f 452/452/452/452 456/456/456/456 457/457/457/457 +f 458/458/458/458 454/454/454/454 453/453/453/453 +f 453/453/453/453 457/457/457/457 458/458/458/458 +f 424/424/424/424 455/455/455/455 422/422/422/422 +f 422/422/422/422 387/387/387/387 424/424/424/424 +f 426/426/426/426 456/456/456/456 455/455/455/455 +f 455/455/455/455 424/424/424/424 426/426/426/426 +f 428/428/428/428 457/457/457/457 456/456/456/456 +f 456/456/456/456 426/426/426/426 428/428/428/428 +f 430/430/430/430 458/458/458/458 457/457/457/457 +f 457/457/457/457 428/428/428/428 430/430/430/430 +f 459/459/459/459 460/460/460/460 461/461/461/461 +f 462/462/462/462 463/463/463/463 460/460/460/460 +f 460/460/460/460 459/459/459/459 462/462/462/462 +f 464/464/464/464 465/465/465/465 463/463/463/463 +f 463/463/463/463 462/462/462/462 464/464/464/464 +f 466/466/466/466 467/467/467/467 465/465/465/465 +f 465/465/465/465 464/464/464/464 466/466/466/466 +f 468/468/468/468 459/459/459/459 469/469/469/469 +f 470/470/470/470 462/462/462/462 459/459/459/459 +f 459/459/459/459 468/468/468/468 470/470/470/470 +f 471/471/471/471 464/464/464/464 462/462/462/462 +f 462/462/462/462 470/470/470/470 471/471/471/471 +f 472/472/472/472 466/466/466/466 464/464/464/464 +f 464/464/464/464 471/471/471/471 472/472/472/472 +f 473/473/473/473 468/468/468/468 474/474/474/474 +f 475/475/475/475 470/470/470/470 468/468/468/468 +f 468/468/468/468 473/473/473/473 475/475/475/475 +f 476/476/476/476 471/471/471/471 470/470/470/470 +f 470/470/470/470 475/475/475/475 476/476/476/476 +f 477/477/477/477 472/472/472/472 471/471/471/471 +f 471/471/471/471 476/476/476/476 477/477/477/477 +f 478/478/478/478 473/473/473/473 479/479/479/479 +f 480/480/480/480 475/475/475/475 473/473/473/473 +f 473/473/473/473 478/478/478/478 480/480/480/480 +f 481/481/481/481 476/476/476/476 475/475/475/475 +f 475/475/475/475 480/480/480/480 481/481/481/481 +f 482/482/482/482 477/477/477/477 476/476/476/476 +f 476/476/476/476 481/481/481/481 482/482/482/482 +f 483/483/483/483 478/478/478/478 484/484/484/484 +f 485/485/485/485 480/480/480/480 478/478/478/478 +f 478/478/478/478 483/483/483/483 485/485/485/485 +f 486/486/486/486 481/481/481/481 480/480/480/480 +f 480/480/480/480 485/485/485/485 486/486/486/486 +f 487/487/487/487 482/482/482/482 481/481/481/481 +f 481/481/481/481 486/486/486/486 487/487/487/487 +f 488/488/488/488 483/483/483/483 489/489/489/489 +f 490/490/490/490 485/485/485/485 483/483/483/483 +f 483/483/483/483 488/488/488/488 490/490/490/490 +f 491/491/491/491 486/486/486/486 485/485/485/485 +f 485/485/485/485 490/490/490/490 491/491/491/491 +f 492/492/492/492 487/487/487/487 486/486/486/486 +f 486/486/486/486 491/491/491/491 492/492/492/492 +f 493/493/493/493 488/488/488/488 494/494/494/494 +f 495/495/495/495 490/490/490/490 488/488/488/488 +f 488/488/488/488 493/493/493/493 495/495/495/495 +f 496/496/496/496 491/491/491/491 490/490/490/490 +f 490/490/490/490 495/495/495/495 496/496/496/496 +f 497/497/497/497 492/492/492/492 491/491/491/491 +f 491/491/491/491 496/496/496/496 497/497/497/497 +f 498/498/498/498 493/493/493/493 499/499/499/499 +f 500/500/500/500 495/495/495/495 493/493/493/493 +f 493/493/493/493 498/498/498/498 500/500/500/500 +f 501/501/501/501 496/496/496/496 495/495/495/495 +f 495/495/495/495 500/500/500/500 501/501/501/501 +f 502/502/502/502 497/497/497/497 496/496/496/496 +f 496/496/496/496 501/501/501/501 502/502/502/502 +f 503/503/503/503 504/504/504/504 461/461/461/461 +f 505/505/505/505 506/506/506/506 504/504/504/504 +f 504/504/504/504 503/503/503/503 505/505/505/505 +f 507/507/507/507 508/508/508/508 506/506/506/506 +f 506/506/506/506 505/505/505/505 507/507/507/507 +f 509/509/509/509 510/510/510/510 508/508/508/508 +f 508/508/508/508 507/507/507/507 509/509/509/509 +f 511/511/511/511 503/503/503/503 469/469/469/469 +f 512/512/512/512 505/505/505/505 503/503/503/503 +f 503/503/503/503 511/511/511/511 512/512/512/512 +f 513/513/513/513 507/507/507/507 505/505/505/505 +f 505/505/505/505 512/512/512/512 513/513/513/513 +f 514/514/514/514 509/509/509/509 507/507/507/507 +f 507/507/507/507 513/513/513/513 514/514/514/514 +f 515/515/515/515 511/511/511/511 474/474/474/474 +f 516/516/516/516 512/512/512/512 511/511/511/511 +f 511/511/511/511 515/515/515/515 516/516/516/516 +f 517/517/517/517 513/513/513/513 512/512/512/512 +f 512/512/512/512 516/516/516/516 517/517/517/517 +f 518/518/518/518 514/514/514/514 513/513/513/513 +f 513/513/513/513 517/517/517/517 518/518/518/518 +f 519/519/519/519 515/515/515/515 479/479/479/479 +f 520/520/520/520 516/516/516/516 515/515/515/515 +f 515/515/515/515 519/519/519/519 520/520/520/520 +f 521/521/521/521 517/517/517/517 516/516/516/516 +f 516/516/516/516 520/520/520/520 521/521/521/521 +f 522/522/522/522 518/518/518/518 517/517/517/517 +f 517/517/517/517 521/521/521/521 522/522/522/522 +f 523/523/523/523 519/519/519/519 484/484/484/484 +f 524/524/524/524 520/520/520/520 519/519/519/519 +f 519/519/519/519 523/523/523/523 524/524/524/524 +f 525/525/525/525 521/521/521/521 520/520/520/520 +f 520/520/520/520 524/524/524/524 525/525/525/525 +f 526/526/526/526 522/522/522/522 521/521/521/521 +f 521/521/521/521 525/525/525/525 526/526/526/526 +f 527/527/527/527 523/523/523/523 489/489/489/489 +f 528/528/528/528 524/524/524/524 523/523/523/523 +f 523/523/523/523 527/527/527/527 528/528/528/528 +f 529/529/529/529 525/525/525/525 524/524/524/524 +f 524/524/524/524 528/528/528/528 529/529/529/529 +f 530/530/530/530 526/526/526/526 525/525/525/525 +f 525/525/525/525 529/529/529/529 530/530/530/530 +f 531/531/531/531 527/527/527/527 494/494/494/494 +f 532/532/532/532 528/528/528/528 527/527/527/527 +f 527/527/527/527 531/531/531/531 532/532/532/532 +f 533/533/533/533 529/529/529/529 528/528/528/528 +f 528/528/528/528 532/532/532/532 533/533/533/533 +f 534/534/534/534 530/530/530/530 529/529/529/529 +f 529/529/529/529 533/533/533/533 534/534/534/534 +f 535/535/535/535 531/531/531/531 499/499/499/499 +f 536/536/536/536 532/532/532/532 531/531/531/531 +f 531/531/531/531 535/535/535/535 536/536/536/536 +f 537/537/537/537 533/533/533/533 532/532/532/532 +f 532/532/532/532 536/536/536/536 537/537/537/537 +f 538/538/538/538 534/534/534/534 533/533/533/533 +f 533/533/533/533 537/537/537/537 538/538/538/538 +f 539/539/539/539 540/540/540/540 541/541/541/541 +f 541/541/541/541 542/542/542/542 539/539/539/539 +f 543/543/543/543 544/544/544/544 540/540/540/540 +f 540/540/540/540 539/539/539/539 543/543/543/543 +f 545/545/545/545 546/546/546/546 544/544/544/544 +f 544/544/544/544 543/543/543/543 545/545/545/545 +f 547/547/547/547 548/548/548/548 546/546/546/546 +f 546/546/546/546 545/545/545/545 547/547/547/547 +f 549/549/549/549 539/539/539/539 542/542/542/542 +f 542/542/542/542 550/550/550/550 549/549/549/549 +f 551/551/551/551 543/543/543/543 539/539/539/539 +f 539/539/539/539 549/549/549/549 551/551/551/551 +f 552/552/552/552 545/545/545/545 543/543/543/543 +f 543/543/543/543 551/551/551/551 552/552/552/552 +f 553/553/553/553 547/547/547/547 545/545/545/545 +f 545/545/545/545 552/552/552/552 553/553/553/553 +f 554/554/554/554 549/549/549/549 550/550/550/550 +f 550/550/550/550 555/555/555/555 554/554/554/554 +f 556/556/556/556 551/551/551/551 549/549/549/549 +f 549/549/549/549 554/554/554/554 556/556/556/556 +f 557/557/557/557 552/552/552/552 551/551/551/551 +f 551/551/551/551 556/556/556/556 557/557/557/557 +f 558/558/558/558 553/553/553/553 552/552/552/552 +f 552/552/552/552 557/557/557/557 558/558/558/558 +f 559/559/559/559 554/554/554/554 555/555/555/555 +f 555/555/555/555 560/560/560/560 559/559/559/559 +f 561/561/561/561 556/556/556/556 554/554/554/554 +f 554/554/554/554 559/559/559/559 561/561/561/561 +f 562/562/562/562 557/557/557/557 556/556/556/556 +f 556/556/556/556 561/561/561/561 562/562/562/562 +f 563/563/563/563 558/558/558/558 557/557/557/557 +f 557/557/557/557 562/562/562/562 563/563/563/563 +f 564/564/564/564 559/559/559/559 560/560/560/560 +f 560/560/560/560 565/565/565/565 564/564/564/564 +f 566/566/566/566 561/561/561/561 559/559/559/559 +f 559/559/559/559 564/564/564/564 566/566/566/566 +f 567/567/567/567 562/562/562/562 561/561/561/561 +f 561/561/561/561 566/566/566/566 567/567/567/567 +f 568/568/568/568 563/563/563/563 562/562/562/562 +f 562/562/562/562 567/567/567/567 568/568/568/568 +f 569/569/569/569 564/564/564/564 565/565/565/565 +f 565/565/565/565 570/570/570/570 569/569/569/569 +f 571/571/571/571 566/566/566/566 564/564/564/564 +f 564/564/564/564 569/569/569/569 571/571/571/571 +f 572/572/572/572 567/567/567/567 566/566/566/566 +f 566/566/566/566 571/571/571/571 572/572/572/572 +f 573/573/573/573 568/568/568/568 567/567/567/567 +f 567/567/567/567 572/572/572/572 573/573/573/573 +f 574/574/574/574 569/569/569/569 570/570/570/570 +f 570/570/570/570 575/575/575/575 574/574/574/574 +f 576/576/576/576 571/571/571/571 569/569/569/569 +f 569/569/569/569 574/574/574/574 576/576/576/576 +f 577/577/577/577 572/572/572/572 571/571/571/571 +f 571/571/571/571 576/576/576/576 577/577/577/577 +f 578/578/578/578 573/573/573/573 572/572/572/572 +f 572/572/572/572 577/577/577/577 578/578/578/578 +f 579/579/579/579 574/574/574/574 575/575/575/575 +f 575/575/575/575 580/580/580/580 579/579/579/579 +f 581/581/581/581 576/576/576/576 574/574/574/574 +f 574/574/574/574 579/579/579/579 581/581/581/581 +f 582/582/582/582 577/577/577/577 576/576/576/576 +f 576/576/576/576 581/581/581/581 582/582/582/582 +f 583/583/583/583 578/578/578/578 577/577/577/577 +f 577/577/577/577 582/582/582/582 583/583/583/583 +f 584/584/584/584 585/585/585/585 586/586/586/586 +f 586/586/586/586 587/587/587/587 584/584/584/584 +f 588/588/588/588 589/589/589/589 585/585/585/585 +f 585/585/585/585 584/584/584/584 588/588/588/588 +f 590/590/590/590 591/591/591/591 589/589/589/589 +f 589/589/589/589 588/588/588/588 590/590/590/590 +f 592/592/592/592 593/593/593/593 591/591/591/591 +f 591/591/591/591 590/590/590/590 592/592/592/592 +f 594/594/594/594 584/584/584/584 587/587/587/587 +f 587/587/587/587 595/595/595/595 594/594/594/594 +f 596/596/596/596 588/588/588/588 584/584/584/584 +f 584/584/584/584 594/594/594/594 596/596/596/596 +f 597/597/597/597 590/590/590/590 588/588/588/588 +f 588/588/588/588 596/596/596/596 597/597/597/597 +f 598/598/598/598 592/592/592/592 590/590/590/590 +f 590/590/590/590 597/597/597/597 598/598/598/598 +f 599/599/599/599 594/594/594/594 595/595/595/595 +f 595/595/595/595 600/600/600/600 599/599/599/599 +f 601/601/601/601 596/596/596/596 594/594/594/594 +f 594/594/594/594 599/599/599/599 601/601/601/601 +f 602/602/602/602 597/597/597/597 596/596/596/596 +f 596/596/596/596 601/601/601/601 602/602/602/602 +f 603/603/603/603 598/598/598/598 597/597/597/597 +f 597/597/597/597 602/602/602/602 603/603/603/603 +f 604/604/604/604 599/599/599/599 600/600/600/600 +f 600/600/600/600 605/605/605/605 604/604/604/604 +f 606/606/606/606 601/601/601/601 599/599/599/599 +f 599/599/599/599 604/604/604/604 606/606/606/606 +f 607/607/607/607 602/602/602/602 601/601/601/601 +f 601/601/601/601 606/606/606/606 607/607/607/607 +f 608/608/608/608 603/603/603/603 602/602/602/602 +f 602/602/602/602 607/607/607/607 608/608/608/608 +f 609/609/609/609 604/604/604/604 605/605/605/605 +f 605/605/605/605 610/610/610/610 609/609/609/609 +f 611/611/611/611 606/606/606/606 604/604/604/604 +f 604/604/604/604 609/609/609/609 611/611/611/611 +f 612/612/612/612 607/607/607/607 606/606/606/606 +f 606/606/606/606 611/611/611/611 612/612/612/612 +f 613/613/613/613 608/608/608/608 607/607/607/607 +f 607/607/607/607 612/612/612/612 613/613/613/613 +f 614/614/614/614 609/609/609/609 610/610/610/610 +f 610/610/610/610 615/615/615/615 614/614/614/614 +f 616/616/616/616 611/611/611/611 609/609/609/609 +f 609/609/609/609 614/614/614/614 616/616/616/616 +f 617/617/617/617 612/612/612/612 611/611/611/611 +f 611/611/611/611 616/616/616/616 617/617/617/617 +f 618/618/618/618 613/613/613/613 612/612/612/612 +f 612/612/612/612 617/617/617/617 618/618/618/618 +f 619/619/619/619 614/614/614/614 615/615/615/615 +f 615/615/615/615 620/620/620/620 619/619/619/619 +f 621/621/621/621 616/616/616/616 614/614/614/614 +f 614/614/614/614 619/619/619/619 621/621/621/621 +f 622/622/622/622 617/617/617/617 616/616/616/616 +f 616/616/616/616 621/621/621/621 622/622/622/622 +f 623/623/623/623 618/618/618/618 617/617/617/617 +f 617/617/617/617 622/622/622/622 623/623/623/623 +f 624/624/624/624 619/619/619/619 620/620/620/620 +f 620/620/620/620 625/625/625/625 624/624/624/624 +f 626/626/626/626 621/621/621/621 619/619/619/619 +f 619/619/619/619 624/624/624/624 626/626/626/626 +f 627/627/627/627 622/622/622/622 621/621/621/621 +f 621/621/621/621 626/626/626/626 627/627/627/627 +f 628/628/628/628 623/623/623/623 622/622/622/622 +f 622/622/622/622 627/627/627/627 628/628/628/628 diff --git a/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Teapot_Modified.obj.meta b/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Teapot_Modified.obj.meta new file mode 100644 index 0000000..1c54db1 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Examples/Meshes/Teapot_Modified.obj.meta @@ -0,0 +1,83 @@ +fileFormatVersion: 2 +guid: dacaee67ec5e14226b9ec02527c457b5 +timeCreated: 1465591475 +licenseType: Free +ModelImporter: + serializedVersion: 19 + fileIDToRecycleName: + 100000: Cube_Instance_0 + 100002: //RootNode + 100004: Teapot001_Instance_0 + 400000: Cube_Instance_0 + 400002: //RootNode + 400004: Teapot001_Instance_0 + 2300000: Cube_Instance_0 + 2300002: Teapot001_Instance_0 + 3300000: Cube_Instance_0 + 3300002: Teapot001_Instance_0 + 4300000: Cube_Instance_0 + 4300002: Teapot001_Instance_0 + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleRotations: 1 + optimizeGameObjects: 0 + motionNodeName: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + importBlendShapes: 1 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + hasTranslationDoF: 0 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 0 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Examples/Scenes.meta b/integrations/Unity3D/Assets/OBJ-IO/Examples/Scenes.meta new file mode 100644 index 0000000..287e808 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Examples/Scenes.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: de90c25035683439686941d132beb13c +folderAsset: yes +timeCreated: 1465591252 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Examples/Scenes/Example.unity b/integrations/Unity3D/Assets/OBJ-IO/Examples/Scenes/Example.unity new file mode 100644 index 0000000..156264d Binary files /dev/null and b/integrations/Unity3D/Assets/OBJ-IO/Examples/Scenes/Example.unity differ diff --git a/integrations/Unity3D/Assets/OBJ-IO/Examples/Scenes/Example.unity.meta b/integrations/Unity3D/Assets/OBJ-IO/Examples/Scenes/Example.unity.meta new file mode 100644 index 0000000..30497ae --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Examples/Scenes/Example.unity.meta @@ -0,0 +1,6 @@ +fileFormatVersion: 2 +guid: 8573b7b1c7256de4896b3054d17de1b7 +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Examples/Scripts.meta b/integrations/Unity3D/Assets/OBJ-IO/Examples/Scripts.meta new file mode 100644 index 0000000..7115e66 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Examples/Scripts.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 960be3fc0da534863bcaece34b55fe5b +folderAsset: yes +timeCreated: 1465591252 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Examples/Scripts/Example.cs b/integrations/Unity3D/Assets/OBJ-IO/Examples/Scripts/Example.cs new file mode 100644 index 0000000..070deb0 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Examples/Scripts/Example.cs @@ -0,0 +1,52 @@ + +using System; +using System.IO; +using System.Collections; +using System.Collections.Generic; + +using UnityEngine; + +using UnityExtension; + +using Random = UnityEngine.Random; + +[RequireComponent(typeof(MeshFilter))] +public class Example : MonoBehaviour +{ + //------------------------------------------------------------------------------------------------------------ + private const string INPUT_PATH = @"Assets/OBJ-IO/Examples/Meshes/Teapot.obj"; + private const string OUTPUT_PATH = @"Assets/OBJ-IO/Examples/Meshes/Teapot_Modified.obj"; + + //------------------------------------------------------------------------------------------------------------ + private void Start() + { + // Load the OBJ in + var lStream = new FileStream(INPUT_PATH, FileMode.Open); + var lOBJData = OBJLoader.LoadOBJ(lStream); + var lMeshFilter = GetComponent(); + lMeshFilter.mesh.LoadOBJ(lOBJData); + lStream.Close(); + + lStream = null; + lOBJData = null; + + // Wiggle Vertices in Mesh + /* + var lVertices = lMeshFilter.mesh.vertices; + for (int lCount = 0; lCount < lVertices.Length; ++lCount) + { + lVertices[lCount] = lVertices[lCount] + Vector3.up * Mathf.Sin(lVertices[lCount].x) * 4f; + } + lMeshFilter.mesh.vertices = lVertices; +*/ + // Export the new Wiggled Mesh + if (File.Exists(OUTPUT_PATH)) + { + File.Delete(OUTPUT_PATH); + } + lStream = new FileStream(OUTPUT_PATH, FileMode.Create); + lOBJData = lMeshFilter.mesh.EncodeOBJ(); + OBJLoader.ExportOBJ(lOBJData, lStream); + lStream.Close(); + } +} \ No newline at end of file diff --git a/integrations/Unity3D/Assets/OBJ-IO/Examples/Scripts/Example.cs.meta b/integrations/Unity3D/Assets/OBJ-IO/Examples/Scripts/Example.cs.meta new file mode 100644 index 0000000..2f53ad0 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Examples/Scripts/Example.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: f3ab7cfdf40b84b41a7adc35c545c226 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins.meta b/integrations/Unity3D/Assets/OBJ-IO/Plugins.meta new file mode 100644 index 0000000..4756c3f --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a34eacd8a28f549b4afede06cd79972e +folderAsset: yes +timeCreated: 1465591252 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension.meta b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension.meta new file mode 100644 index 0000000..10583cd --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 222144ab5ea5b4732b84d8eff5735d91 +folderAsset: yes +timeCreated: 1465591252 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/GameObjectExtension.cs b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/GameObjectExtension.cs new file mode 100644 index 0000000..90e5591 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/GameObjectExtension.cs @@ -0,0 +1,112 @@ + +using System; +using System.IO; +using System.Collections.Generic; +using System.Text.RegularExpressions; + +using UnityEngine; + +namespace UnityExtension +{ + public static class GameObjectExt + { + //------------------------------------------------------------------------------------------------------------ + public static T GetOrAddComponent(this GameObject lGo) where T : Component + { + T lComponent = lGo.GetComponent(); + if (lComponent == null) + { + lComponent = lGo.gameObject.AddComponent(); + } + return lComponent; + } + + //------------------------------------------------------------------------------------------------------------ + public static T GetComponentOfChild(this GameObject lGo, string lName) where T : Component + { + T lComponent = null; + Transform lTransform = lGo.transform.FindChild(lName); + if (lTransform != null) + { + lComponent = lTransform.GetComponent(); + } + return lComponent; + } + + //------------------------------------------------------------------------------------------------------------ + public static T[] GetComponentsOfChild(this GameObject lGo, string lName) where T : Component + { + T[] lComponent = null; + Transform lTransform = lGo.transform.FindChild(lName); + if (lTransform != null) + { + lComponent = lTransform.GetComponents(); + } + return lComponent; + } + + //------------------------------------------------------------------------------------------------------------ + public static GameObject InstantiateAsChild(this GameObject lGo, GameObject lObject) + { + GameObject lNewGo = lObject != null ? (GameObject)GameObject.Instantiate(lObject) : new GameObject(); + lNewGo.transform.parent = lGo.transform; + lNewGo.transform.localPosition = Vector3.zero; + lNewGo.transform.localRotation = Quaternion.identity; + lNewGo.transform.localScale = Vector3.one; + return lNewGo; + } + + //------------------------------------------------------------------------------------------------------------ + public static bool DestroyChildIfExists(this GameObject lGo, string lName) + { + Transform lTransform = lGo.transform.FindChild(lName); + if (lTransform != null) + { + GameObject.Destroy(lTransform.gameObject); + return true; + } + else + { + return false; + } + } + + //------------------------------------------------------------------------------------------------------------ + public static bool ContainsChildren(this GameObject lGo, params string[] lPaths) + { + for (int lCount = 0; lCount < lPaths.Length; ++lCount) + { + if (lGo.transform.FindChild(lPaths[lCount]) == null) + { + return false; + } + } + return true; + } + + //------------------------------------------------------------------------------------------------------------ + public static bool IsChildOf(this GameObject lGo, GameObject lParent) + { + Transform lTransform = lGo.transform; + while (lTransform.parent != null) + { + if (lTransform == lParent.transform) + { + return true; + } + lTransform = lTransform.parent; + } + return false; + } + + //------------------------------------------------------------------------------------------------------------ + public static void SetLayerRecursively(this GameObject lGo, int lLayer) + { + lGo.layer = lLayer; + foreach (Transform lTransform in lGo.transform) + { + lTransform.gameObject.SetLayerRecursively(lLayer); + } + } + } +} diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/GameObjectExtension.cs.meta b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/GameObjectExtension.cs.meta new file mode 100644 index 0000000..db440fc --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/GameObjectExtension.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 35b132c59c7910c4b99e560a0f9baf95 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/MeshExtension.cs b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/MeshExtension.cs new file mode 100644 index 0000000..0714e27 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/MeshExtension.cs @@ -0,0 +1,627 @@ + +using System; +using System.IO; +using System.Collections.Generic; +using System.Runtime.InteropServices; + +using UnityEngine; + +namespace UnityExtension +{ + public static class MeshExt + { + //------------------------------------------------------------------------------------------------------------ + public static void RecalculateTangents(this Mesh lMesh) + { + //speed up math by copying the mesh arrays + int[] triangles = lMesh.triangles; + Vector3[] vertices = lMesh.vertices; + Vector2[] uv = lMesh.uv; + Vector3[] normals = lMesh.normals; + + //variable definitions + int triangleCount = triangles.Length; + int vertexCount = vertices.Length; + + Vector3[] tan1 = new Vector3[vertexCount]; + Vector3[] tan2 = new Vector3[vertexCount]; + + Vector4[] tangents = new Vector4[vertexCount]; + + for (long a = 0; a < triangleCount; a += 3) + { + long i1 = triangles[a + 0]; + long i2 = triangles[a + 1]; + long i3 = triangles[a + 2]; + + Vector3 v1 = vertices[i1]; + Vector3 v2 = vertices[i2]; + Vector3 v3 = vertices[i3]; + + Vector2 w1 = uv[i1]; + Vector2 w2 = uv[i2]; + Vector2 w3 = uv[i3]; + + float x1 = v2.x - v1.x; + float x2 = v3.x - v1.x; + float y1 = v2.y - v1.y; + float y2 = v3.y - v1.y; + float z1 = v2.z - v1.z; + float z2 = v3.z - v1.z; + + float s1 = w2.x - w1.x; + float s2 = w3.x - w1.x; + float t1 = w2.y - w1.y; + float t2 = w3.y - w1.y; + + float r = 1.0f / (s1 * t2 - s2 * t1); + + Vector3 sdir = new Vector3((t2 * x1 - t1 * x2) * r, (t2 * y1 - t1 * y2) * r, (t2 * z1 - t1 * z2) * r); + Vector3 tdir = new Vector3((s1 * x2 - s2 * x1) * r, (s1 * y2 - s2 * y1) * r, (s1 * z2 - s2 * z1) * r); + + tan1[i1] += sdir; + tan1[i2] += sdir; + tan1[i3] += sdir; + + tan2[i1] += tdir; + tan2[i2] += tdir; + tan2[i3] += tdir; + } + + + for (long a = 0; a < vertexCount; ++a) + { + Vector3 n = normals[a]; + Vector3 t = tan1[a]; + + //Vector3 tmp = (t - n * Vector3.Dot(n, t)).normalized; + //tangents[a] = new Vector4(tmp.x, tmp.y, tmp.z); + Vector3.OrthoNormalize(ref n, ref t); + tangents[a].x = t.x; + tangents[a].y = t.y; + tangents[a].z = t.z; + + tangents[a].w = (Vector3.Dot(Vector3.Cross(n, t), tan2[a]) < 0.0f) ? -1.0f : 1.0f; + } + + lMesh.tangents = tangents; + } + + //------------------------------------------------------------------------------------------------------------ + public static void LoadOBJ(this Mesh lMesh, OBJData lData) + { + List lVertices = new List(); + List lNormals = new List(); + List lUVs = new List(); + List[] lIndices = new List[lData.m_Groups.Count]; + Dictionary lVertexIndexRemap = new Dictionary(); + bool lHasNormals = lData.m_Normals.Count > 0; + bool lHasUVs = lData.m_UVs.Count > 0; + + lMesh.subMeshCount = lData.m_Groups.Count; + for (int lGCount = 0; lGCount < lData.m_Groups.Count; ++lGCount) + { + OBJGroup lGroup = lData.m_Groups[lGCount]; + lIndices[lGCount] = new List(); + + for (int lFCount = 0; lFCount < lGroup.Faces.Count; ++lFCount) + { + OBJFace lFace = lGroup.Faces[lFCount]; + + // Unity3d doesn't support non-triangle faces + // so we do simple fan triangulation + for (int lVCount = 1; lVCount < lFace.Count - 1; ++lVCount) + { + foreach (int i in new int[]{0, lVCount, lVCount + 1}) + { + OBJFaceVertex lFaceVertex = lFace[i]; + int lVertexIndex = -1; + + if (!lVertexIndexRemap.TryGetValue(lFaceVertex, out lVertexIndex)) { + lVertexIndexRemap[lFaceVertex] = lVertices.Count; + lVertexIndex = lVertices.Count; + + lVertices.Add(lData.m_Vertices[lFaceVertex.m_VertexIndex]); + if (lHasUVs) + { + lUVs.Add(lData.m_UVs[lFaceVertex.m_UVIndex]); + } + if (lHasNormals) + { + lNormals.Add(lData.m_Normals[lFaceVertex.m_NormalIndex]); + } + } + + lIndices[lGCount].Add(lVertexIndex); + } + } + } + } + + lMesh.triangles = new int[]{ }; + lMesh.vertices = lVertices.ToArray(); + lMesh.uv = lUVs.ToArray(); + lMesh.normals = lNormals.ToArray(); + if (!lHasNormals) + { + lMesh.RecalculateNormals(); + } + + lMesh.RecalculateTangents(); + + for (int lGCount = 0; lGCount < lData.m_Groups.Count; ++lGCount) + { + lMesh.SetTriangles(lIndices[lGCount].ToArray(), lGCount); + } + } + + //------------------------------------------------------------------------------------------------------------ + public static OBJData EncodeOBJ(this Mesh lMesh) + { + OBJData lData = new OBJData + { + m_Vertices = new List(lMesh.vertices), + m_UVs = new List(lMesh.uv), + m_Normals = new List(lMesh.normals), + m_UV2s = new List(lMesh.uv2), + m_Colors = new List(lMesh.colors) + }; + + int[] lIndices = null; + OBJGroup lGroup = null; + OBJFace lFace = null; + OBJFaceVertex lFaceVertex = null; + + for (int lMCount = 0; lMCount < lMesh.subMeshCount; ++lMCount) + { + lIndices = lMesh.GetTriangles(lMCount); + lGroup = new OBJGroup(lMesh.name + "_" + lMCount.ToString()); + + for (int lCount = 0; lCount < lIndices.Length; lCount += 3) + { + lFace = new OBJFace(); + + lFaceVertex = new OBJFaceVertex(); + lFaceVertex.m_VertexIndex = lData.m_Vertices.Count > 0 ? lIndices[lCount] : -1; + lFaceVertex.m_UVIndex = lData.m_UVs.Count > 0 ? lIndices[lCount] : -1; + lFaceVertex.m_NormalIndex = lData.m_Normals.Count > 0 ? lIndices[lCount] : -1; + lFaceVertex.m_UV2Index = lData.m_UV2s.Count > 0 ? lIndices[lCount] : -1; + lFaceVertex.m_ColorIndex = lData.m_Colors.Count > 0 ? lIndices[lCount] : -1; + lFace.AddVertex(lFaceVertex); + + lFaceVertex = new OBJFaceVertex(); + lFaceVertex.m_VertexIndex = lData.m_Vertices.Count > 0 ? lIndices[lCount + 1] : -1; + lFaceVertex.m_UVIndex = lData.m_UVs.Count > 0 ? lIndices[lCount + 1] : -1; + lFaceVertex.m_NormalIndex = lData.m_Normals.Count > 0 ? lIndices[lCount + 1] : -1; + lFaceVertex.m_UV2Index = lData.m_UV2s.Count > 0 ? lIndices[lCount + 1] : -1; + lFaceVertex.m_ColorIndex = lData.m_Colors.Count > 0 ? lIndices[lCount + 1] : -1; + lFace.AddVertex(lFaceVertex); + + lFaceVertex = new OBJFaceVertex(); + lFaceVertex.m_VertexIndex = lData.m_Vertices.Count > 0 ? lIndices[lCount + 2] : -1; + lFaceVertex.m_UVIndex = lData.m_UVs.Count > 0 ? lIndices[lCount + 2] : -1; + lFaceVertex.m_NormalIndex = lData.m_Normals.Count > 0 ? lIndices[lCount + 2] : -1; + lFaceVertex.m_UV2Index = lData.m_UV2s.Count > 0 ? lIndices[lCount + 2] : -1; + lFaceVertex.m_ColorIndex = lData.m_Colors.Count > 0 ? lIndices[lCount + 2] : -1; + lFace.AddVertex(lFaceVertex); + + lGroup.AddFace(lFace); + } + + lData.m_Groups.Add(lGroup); + } + + return lData; + } + + //------------------------------------------------------------------------------------------------------------ + internal const int MESH_BINARY_HEADER_SIZE = 20; + internal const short MESH_BINARY_SIGNATURE = 0xF5; + internal const short MESH_BINARY_VERSION = 1; + + //------------------------------------------------------------------------------------------------------------ + public static bool LoadBinary(this Mesh lMesh, byte[] lData) + { + int lSizeOfVector2 = Marshal.SizeOf(typeof(Vector2)); + int lSizeOfVector3 = Marshal.SizeOf(typeof(Vector3)); + int lSizeOfVector4 = Marshal.SizeOf(typeof(Vector4)); + int lSizeOfMatrix4x4 = Marshal.SizeOf(typeof(Matrix4x4)); + int lSizeOfBoneWeight = Marshal.SizeOf(typeof(BoneWeight)); + int lSizeOfColor = Marshal.SizeOf(typeof(Color)); + + int lDataOffset = MESH_BINARY_HEADER_SIZE; + int lDeltaOffset = 0; + + if (lData == null || + lData.Length < MESH_BINARY_HEADER_SIZE) + { + return false; + } + + // Header + short lSignature = BitConverter.ToInt16(lData, 0); + short lVersion = BitConverter.ToInt16(lData, 2); + + if (lSignature != MESH_BINARY_SIGNATURE || + lVersion != MESH_BINARY_VERSION) + { + return false; + } + + lMesh.Clear(); + + int lVertexCount = BitConverter.ToInt32(lData, 4); + int lIndexCount = BitConverter.ToInt32(lData, 8); + int lSubMeshCount = BitConverter.ToInt32(lData, 12); + + byte lFlags = lData[16]; + + bool lUVFlag = (lFlags & 1) > 0; + bool lUV1Flag = (lFlags & 2) > 0; + bool lUV2Flag = (lFlags & 4) > 0; + bool lNormalFlag = (lFlags & 8) > 0; + bool lTangentFlag = (lFlags & 16) > 0; + bool lColorFlag = (lFlags & 32) > 0; + bool lBindPoseFlag = (lFlags & 64) > 0; + bool lBoneWeightFlag = (lFlags & 128) > 0; + + // Vertices + Vector3[] lVertices = new Vector3[lVertexCount]; + lDeltaOffset = lVertices.Length * lSizeOfVector3; + GCHandle lHandle = GCHandle.Alloc(lVertices, GCHandleType.Pinned); + Marshal.Copy(lData, lDataOffset, lHandle.AddrOfPinnedObject(), lDeltaOffset); + lHandle.Free(); + lDataOffset += lDeltaOffset; + lMesh.vertices = lVertices; + lVertices = null; + + // UV Channel 0 + Vector2[] lUVs = null; + if (lUVFlag == true) + { + lUVs = new Vector2[lVertexCount]; + lDeltaOffset = lUVs.Length * lSizeOfVector2; + lHandle = GCHandle.Alloc(lUVs, GCHandleType.Pinned); + Marshal.Copy(lData, lDataOffset, lHandle.AddrOfPinnedObject(), lDeltaOffset); + lHandle.Free(); + lDataOffset += lDeltaOffset; + lMesh.uv = lUVs; + Debug.Log("UV Count : " + lUVs.Length); + lUVs = null; + } + + // UV Channel 1 + if (lUV1Flag == true) + { + lUVs = new Vector2[lVertexCount]; + lDeltaOffset = lUVs.Length * lSizeOfVector2; + lHandle = GCHandle.Alloc(lUVs, GCHandleType.Pinned); + Marshal.Copy(lData, lDataOffset, lHandle.AddrOfPinnedObject(), lDeltaOffset); + lHandle.Free(); + lDataOffset += lDeltaOffset; + lMesh.uv2 = lUVs; + Debug.Log("UV1 Count : " + lUVs.Length); + lUVs = null; + } + + // UV Channel 2 + if (lUV2Flag == true) + { + lUVs = new Vector2[lVertexCount]; + lDeltaOffset = lUVs.Length * lSizeOfVector2; + lHandle = GCHandle.Alloc(lUVs, GCHandleType.Pinned); + Marshal.Copy(lData, lDataOffset, lHandle.AddrOfPinnedObject(), lDeltaOffset); + lHandle.Free(); + lDataOffset += lDeltaOffset; + lMesh.uv2 = lUVs; + Debug.Log("UV2 Count : " + lUVs.Length); + lUVs = null; + } + + // Normals + if (lNormalFlag == true) + { + Vector3[] lNormals = new Vector3[lVertexCount]; + lDeltaOffset = lNormals.Length * lSizeOfVector3; + lHandle = GCHandle.Alloc(lNormals, GCHandleType.Pinned); + Marshal.Copy(lData, lDataOffset, lHandle.AddrOfPinnedObject(), lDeltaOffset); + lHandle.Free(); + lDataOffset += lDeltaOffset; + lMesh.normals = lNormals; + Debug.Log("Normal Count : " + lNormals.Length); + lNormals = null; + } + + // Tangents + if (lTangentFlag == true) + { + Vector4[] lTangents = new Vector4[lVertexCount]; + lDeltaOffset = lTangents.Length * lSizeOfVector4; + lHandle = GCHandle.Alloc(lTangents, GCHandleType.Pinned); + Marshal.Copy(lData, lDataOffset, lHandle.AddrOfPinnedObject(), lDeltaOffset); + lHandle.Free(); + lDataOffset += lDeltaOffset; + lMesh.tangents = lTangents; + Debug.Log("Tangents Count : " + lTangents.Length); + lTangents = null; + } + + // Colors + if (lColorFlag == true) + { + Color[] lColors = new Color[lVertexCount]; + lDeltaOffset = lColors.Length * lSizeOfColor; + lHandle = GCHandle.Alloc(lColors, GCHandleType.Pinned); + Marshal.Copy(lData, lDataOffset, lHandle.AddrOfPinnedObject(), lDeltaOffset); + lHandle.Free(); + lDataOffset += lDeltaOffset; + lMesh.colors = lColors; + lColors = null; + } + + // Bind Poses + if (lBindPoseFlag == true) + { + Matrix4x4[] lBindPoses = new Matrix4x4[lVertexCount]; + lDeltaOffset = lBindPoses.Length * lSizeOfMatrix4x4; + lHandle = GCHandle.Alloc(lBindPoses, GCHandleType.Pinned); + Marshal.Copy(lData, lDataOffset, lHandle.AddrOfPinnedObject(), lDeltaOffset); + lHandle.Free(); + lDataOffset += lDeltaOffset; + lMesh.bindposes = lBindPoses; + lBindPoses = null; + } + + // Bone Weights + if (lBoneWeightFlag == true) + { + BoneWeight[] lBoneWeight = new BoneWeight[lVertexCount]; + lDeltaOffset = lBoneWeight.Length * lSizeOfBoneWeight; + lHandle = GCHandle.Alloc(lBoneWeight, GCHandleType.Pinned); + Marshal.Copy(lData, lDataOffset, lHandle.AddrOfPinnedObject(), lDeltaOffset); + lHandle.Free(); + lDataOffset += lDeltaOffset; + lMesh.boneWeights = lBoneWeight; + lBoneWeight = null; + } + + // Indices + int[] lIndices = new int[lIndexCount]; + lDeltaOffset = lIndices.Length * sizeof(int); + Buffer.BlockCopy(lData, lDataOffset, lIndices, 0, lDeltaOffset); + lDataOffset += lDeltaOffset; + lMesh.triangles = lIndices; + lIndices = null; + + // SubMesh Indices + for (int lSubMeshIndex = 0; lSubMeshIndex < lSubMeshCount; ++lSubMeshIndex) + { + int lSubMeshIndexCount = BitConverter.ToInt32(lData, lDataOffset); + lDataOffset += sizeof(int); + + lIndices = new int[lSubMeshIndexCount]; + lDeltaOffset = lIndices.Length * sizeof(int); + Buffer.BlockCopy(lData, lDataOffset, lIndices, 0, lDeltaOffset); + lDataOffset += lDeltaOffset; + + if (lIndices.Length > 0 && + lIndices.Length % 3 == 0) + { + lMesh.SetTriangles(lIndices, lSubMeshIndex); + } + + lIndices = null; + } + + return true; + } + + //------------------------------------------------------------------------------------------------------------ + public static byte[] EncodeBinary(this Mesh lMesh) + { + // Currently no support for BlendShape + + int lSizeOfVector2 = Marshal.SizeOf(typeof(Vector2)); + int lSizeOfVector3 = Marshal.SizeOf(typeof(Vector3)); + int lSizeOfVector4 = Marshal.SizeOf(typeof(Vector4)); + int lSizeOfMatrix4x4 = Marshal.SizeOf(typeof(Matrix4x4)); + int lSizeOfBoneWeight = Marshal.SizeOf(typeof(BoneWeight)); + int lSizeOfColor = Marshal.SizeOf(typeof(Color)); + + int lDataSize = MESH_BINARY_HEADER_SIZE; + int lDeltaSize = 0; + + bool lUVFlag = false, lUV1Flag = false, lUV2Flag = false, + lNormalFlag = false, lTangentFlag = false, lColorFlag = false, + lBindPoseFlag = false, lBoneWeightFlag = false; + + byte[] lData = new byte[lDataSize]; + + // Vertices + Vector3[] lVertices = lMesh.vertices; + Int32Converter lVertexCount = lVertices.Length; + lDeltaSize = lVertices.Length * lSizeOfVector3; + Array.Resize(ref lData, lDataSize + lDeltaSize); + GCHandle lHandle = GCHandle.Alloc(lVertices, GCHandleType.Pinned); + Marshal.Copy(lHandle.AddrOfPinnedObject(), lData, lDataSize, lDeltaSize); + lHandle.Free(); + lDataSize += lDeltaSize; + lVertices = null; + + // UV Channel 0 + Vector2[] lUVs = lMesh.uv; + if (lUVs.Length > 0) + { + lUVFlag = true; + lDeltaSize = lUVs.Length * lSizeOfVector2; + Array.Resize(ref lData, lDataSize + lDeltaSize); + lHandle = GCHandle.Alloc(lUVs, GCHandleType.Pinned); + Marshal.Copy(lHandle.AddrOfPinnedObject(), lData, lDataSize, lDeltaSize); + lHandle.Free(); + lDataSize += lDeltaSize; + } + lUVs = null; + + // UV Channel 1 + lUVs = lMesh.uv2; + if (lUVs.Length > 0) + { + lUV1Flag = true; + lDeltaSize = lUVs.Length * lSizeOfVector2; + Array.Resize(ref lData, lDataSize + lDeltaSize); + lHandle = GCHandle.Alloc(lUVs, GCHandleType.Pinned); + Marshal.Copy(lHandle.AddrOfPinnedObject(), lData, lDataSize, lDeltaSize); + lHandle.Free(); + lDataSize += lDeltaSize; + } + lUVs = null; + + // UV Channel 2 + lUVs = lMesh.uv2; + if (lUVs.Length > 0) + { + lUV2Flag = true; + lDeltaSize = lUVs.Length * lSizeOfVector2; + Array.Resize(ref lData, lDataSize + lDeltaSize); + lHandle = GCHandle.Alloc(lUVs, GCHandleType.Pinned); + Marshal.Copy(lHandle.AddrOfPinnedObject(), lData, lDataSize, lDeltaSize); + lHandle.Free(); + lDataSize += lDeltaSize; + } + lUVs = null; + + // Normals + Vector3[] lNormals = lMesh.normals; + if (lNormals.Length > 0) + { + lNormalFlag = true; + lDeltaSize = lNormals.Length * lSizeOfVector3; + Array.Resize(ref lData, lDataSize + lDeltaSize); + lHandle = GCHandle.Alloc(lNormals, GCHandleType.Pinned); + Marshal.Copy(lHandle.AddrOfPinnedObject(), lData, lDataSize, lDeltaSize); + lHandle.Free(); + lDataSize += lDeltaSize; + } + lNormals = null; + + // Tangents + Vector4[] lTangents = lMesh.tangents; + if (lTangents.Length > 0) + { + lTangentFlag = true; + lDeltaSize = lTangents.Length * lSizeOfVector4; + Array.Resize(ref lData, lDataSize + lDeltaSize); + lHandle = GCHandle.Alloc(lTangents, GCHandleType.Pinned); + Marshal.Copy(lHandle.AddrOfPinnedObject(), lData, lDataSize, lDeltaSize); + lHandle.Free(); + lDataSize += lDeltaSize; + } + lTangents = null; + + // Colors + Color[] lColors = lMesh.colors; + if (lColors.Length > 0) + { + lColorFlag = true; + lDeltaSize = lColors.Length * lSizeOfColor; + Array.Resize(ref lData, lDataSize + lDeltaSize); + lHandle = GCHandle.Alloc(lColors, GCHandleType.Pinned); + Marshal.Copy(lHandle.AddrOfPinnedObject(), lData, lDataSize, lDeltaSize); + lHandle.Free(); + lDataSize += lDeltaSize; + } + lColors = null; + + // BindPoses + Matrix4x4[] lBindPoses = lMesh.bindposes; + if (lBindPoses.Length > 0) + { + lBindPoseFlag = true; + lDeltaSize = lBindPoses.Length * lSizeOfMatrix4x4; + Array.Resize(ref lData, lDataSize + lDeltaSize); + lHandle = GCHandle.Alloc(lBindPoses, GCHandleType.Pinned); + Marshal.Copy(lHandle.AddrOfPinnedObject(), lData, lDataSize, lDeltaSize); + lHandle.Free(); + lDataSize += lDeltaSize; + } + lBindPoses = null; + + // BoneWeight + BoneWeight[] lBoneWeight = lMesh.boneWeights; + if (lBoneWeight.Length > 0) + { + lBoneWeightFlag = true; + lDeltaSize = lBoneWeight.Length * lSizeOfBoneWeight; + Array.Resize(ref lData, lDataSize + lDeltaSize); + lHandle = GCHandle.Alloc(lBoneWeight, GCHandleType.Pinned); + Marshal.Copy(lHandle.AddrOfPinnedObject(), lData, lDataSize, lDeltaSize); + lHandle.Free(); + lDataSize += lDeltaSize; + } + lBoneWeight = null; + + // Indices + int[] lIndices = lMesh.triangles; + Int32Converter lIndexCount = lIndices.Length; + lDeltaSize = lIndices.Length * sizeof(int); + Array.Resize(ref lData, lDataSize + lDeltaSize); + Buffer.BlockCopy(lIndices, 0, lData, lDataSize, lDeltaSize); + lDataSize += lDeltaSize; + lIndices = null; + + // SubMesh Indices + Int32Converter lSubMeshCount = lMesh.subMeshCount; + for (int lSubMeshIndex = 0; lSubMeshIndex < lSubMeshCount; ++lSubMeshIndex) + { + lIndices = lMesh.GetTriangles(lSubMeshIndex); + + Int32Converter lSubMeshIndexCount = lIndices.Length; + + lDeltaSize = sizeof(int) + (lIndices.Length * sizeof(int)); + Array.Resize(ref lData, lDataSize + lDeltaSize); + + lData[lDataSize + 0] = lSubMeshIndexCount.Byte1; + lData[lDataSize + 1] = lSubMeshIndexCount.Byte2; + lData[lDataSize + 2] = lSubMeshIndexCount.Byte3; + lData[lDataSize + 3] = lSubMeshIndexCount.Byte4; + + Buffer.BlockCopy(lIndices, 0, lData, lDataSize, lDeltaSize - sizeof(int)); + lDataSize += lDeltaSize; + } + + // Header + lData[0] = (byte)(MESH_BINARY_SIGNATURE & 0xFF); + lData[1] = (byte)((MESH_BINARY_SIGNATURE >> 8) & 0xFF); + + lData[2] = (byte)(MESH_BINARY_VERSION & 0xFF); + lData[3] = (byte)((MESH_BINARY_VERSION >> 8) & 0xFF); + + lData[4] = lVertexCount.Byte1; + lData[5] = lVertexCount.Byte2; + lData[6] = lVertexCount.Byte3; + lData[7] = lVertexCount.Byte4; + + lData[8] = lIndexCount.Byte1; + lData[9] = lIndexCount.Byte2; + lData[10] = lIndexCount.Byte3; + lData[11] = lIndexCount.Byte4; + + lData[12] = lSubMeshCount.Byte1; + lData[13] = lSubMeshCount.Byte2; + lData[14] = lSubMeshCount.Byte3; + lData[15] = lSubMeshCount.Byte4; + + lData[16] = (byte)( + (lUVFlag ? 1 : 0) | + (lUV1Flag ? 2 : 0) | + (lUV2Flag ? 4 : 0) | + (lNormalFlag ? 8 : 0) | + (lTangentFlag ? 16 : 0) | + (lColorFlag ? 32 : 0) | + (lBindPoseFlag ? 64 : 0) | + (lBoneWeightFlag ? 128 : 0)); + + return lData; + } + } +} diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/MeshExtension.cs.meta b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/MeshExtension.cs.meta new file mode 100644 index 0000000..49a47a8 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/MeshExtension.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: a643d266ae55c8845ac48528640b7e8e +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/StringExtensions.cs b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/StringExtensions.cs new file mode 100644 index 0000000..9c9b2bc --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/StringExtensions.cs @@ -0,0 +1,43 @@ + +using System; +using System.Globalization; + +public static class StringExt +{ + //------------------------------------------------------------------------------------------------------------ + public static float ParseInvariantFloat(this string floatString) + { + return float.Parse(floatString, CultureInfo.InvariantCulture.NumberFormat); + } + + //------------------------------------------------------------------------------------------------------------ + public static int ParseInvariantInt(this string intString) + { + return int.Parse(intString, CultureInfo.InvariantCulture.NumberFormat); + } + + //------------------------------------------------------------------------------------------------------------ + public static bool EqualsInvariantCultureIgnoreCase(this string str, string s) + { + return str.Equals(s, StringComparison.InvariantCultureIgnoreCase); + } + + //------------------------------------------------------------------------------------------------------------ + public static bool IsNullOrEmpty(this string str) + { + return string.IsNullOrEmpty(str); + } + + //------------------------------------------------------------------------------------------------------------ + public static bool IsNullOrWhiteSpace(string value) + { + if (value == null) + return true; + for (int index = 0; index < value.Length; ++index) + { + if (!char.IsWhiteSpace(value[index])) + return false; + } + return true; + } +} \ No newline at end of file diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/StringExtensions.cs.meta b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/StringExtensions.cs.meta new file mode 100644 index 0000000..d3720b0 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/StringExtensions.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 5403d11ff2ec0124a9a20522559dfcfa +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/Texture2DExtension.cs b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/Texture2DExtension.cs new file mode 100644 index 0000000..6648b22 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/Texture2DExtension.cs @@ -0,0 +1,55 @@ + +using System; +using System.IO; +using System.Collections.Generic; + +using UnityEngine; + +namespace UnityExtension +{ + public static class Texture2DExt + { + //------------------------------------------------------------------------------------------------------------ + public static byte[] EncodeToTGA(this Texture2D lTexture) + { + MemoryStream lDataStream = new MemoryStream(18 + (lTexture.width * lTexture.height * 3)); + BinaryWriter lDataWriter = new BinaryWriter(lDataStream); + + if (lDataWriter != null) + { + lDataWriter.Write((short)0); + lDataWriter.Write((byte)2); + lDataWriter.Write((int)0); + lDataWriter.Write((int)0); + lDataWriter.Write((byte)0); + lDataWriter.Write((short)lTexture.width); + lDataWriter.Write((short)lTexture.height); + lDataWriter.Write((byte)24); + lDataWriter.Write((byte)0); + + Color32[] lPixelData = lTexture.GetPixels32(); + for (int lCount = 0; lCount < lPixelData.Length; ++lCount) + { + lDataWriter.Write(lPixelData[lCount].b); + lDataWriter.Write(lPixelData[lCount].g); + lDataWriter.Write(lPixelData[lCount].r); + } + } + + return lDataStream.GetBuffer(); + } + + //------------------------------------------------------------------------------------------------------------ + public static void ConvertLightmapToMobile(this Texture2D lTexture) + { + Color[] lColorData = lTexture.GetPixels(); + for (int lCount = 0; lCount < lColorData.Length; ++lCount) + { + lColorData[lCount] = (lColorData[lCount] * (8f * lColorData[lCount].a)) * 0.5f; + } + lTexture.SetPixels(lColorData); + lTexture.Apply(); + lColorData = null; + } + } +} \ No newline at end of file diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/Texture2DExtension.cs.meta b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/Texture2DExtension.cs.meta new file mode 100644 index 0000000..3e17a53 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/Texture2DExtension.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 9260066d99f960241b2a222401bcb685 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/TransformExtension.cs b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/TransformExtension.cs new file mode 100644 index 0000000..1da3491 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/TransformExtension.cs @@ -0,0 +1,28 @@ + +using System; +using System.IO; +using System.Collections.Generic; +using System.Text.RegularExpressions; + +using UnityEngine; + +namespace UnityExtension +{ + public static class TransformExt + { + //------------------------------------------------------------------------------------------------------------ + public static void LocalReset(this Transform lTransform) + { + lTransform.localPosition = Vector3.zero; + lTransform.localRotation = Quaternion.identity; + lTransform.localScale = Vector3.one; + } + + //------------------------------------------------------------------------------------------------------------ + public static void Align(this Transform lTransform, Transform lTarget) + { + lTransform.position = lTarget.position; + lTransform.rotation = lTarget.rotation; + } + } +} diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/TransformExtension.cs.meta b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/TransformExtension.cs.meta new file mode 100644 index 0000000..50e2c33 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/TransformExtension.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: a8e76b9c1894ec743ae076720e775f49 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/UnityExtension.cs b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/UnityExtension.cs new file mode 100644 index 0000000..9c49373 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/UnityExtension.cs @@ -0,0 +1,239 @@ + +using System; +using System.IO; +using System.Collections.Generic; +using System.Text.RegularExpressions; + +using UnityEngine; + +namespace UnityExtension +{ + //------------------------------------------------------------------------------------------------------------ + public static class Utils + { + //------------------------------------------------------------------------------------------------------------ + public static bool HasKeys(Dictionary lData, params string[] lKeys) + { + if (lKeys != null) + { + for (int lCount = 0; lCount < lKeys.Length; ++lCount) + { + if (!lData.ContainsKey(lKeys[lCount])) + { + return false; + } + } + } + return true; + } + + //------------------------------------------------------------------------------------------------------------ + public static void ClearChildren(GameObject lGo, string lTarget) + { + if (lGo != null) + { + Transform lTransform = null; + for (int lCount = lGo.transform.childCount - 1; lCount > -1; --lCount) + { + lTransform = lGo.transform.GetChild(lCount); + if (lTransform.name.Contains(lTarget)) + { + lTransform.parent = null; + GameObject.Destroy(lTransform.gameObject); + } + } + } + } + + //------------------------------------------------------------------------------------------------------------ + public static void ClearChildrenRegex(GameObject lGo, string lPattern) + { + if (lGo != null) + { + Transform lTransform = null; + Regex lRegex = new Regex(lPattern); + for (int lCount = lGo.transform.childCount - 1; lCount > -1; --lCount) + { + lTransform = lGo.transform.GetChild(lCount); + if (lRegex.IsMatch(lTransform.name)) + { + lTransform.parent = null; + GameObject.Destroy(lTransform.gameObject); + } + } + } + } + + //------------------------------------------------------------------------------------------------------------ + public static void VerifyObjects(string lMsg, params object[] lObjects) + { + for (int lCount = 0; lCount < lObjects.Length; ++lCount) + { + if (lObjects[lCount] == null) + { + Debug.LogError(lMsg); + break; + } + } + } + + //------------------------------------------------------------------------------------------------------------ + public static bool JSONCheck(string lText) + { + return !string.IsNullOrEmpty(lText) && lText[0] == '{'; + } + + //------------------------------------------------------------------------------------------------------------ + public static Vector3 ParseVector3Json(string lJsonData) + { + string[] lVector3Array = lJsonData.Replace("(", "").Replace(")", "").Replace(" ", "").Split(','); + Vector3 lVector3 = Vector3.zero; + + if (float.TryParse(lVector3Array[0], out lVector3.x) == false) + { + return Vector3.zero; + } + if (float.TryParse(lVector3Array[1], out lVector3.y) == false) + { + return Vector3.zero; + } + if (float.TryParse(lVector3Array[2], out lVector3.z) == false) + { + return Vector3.zero; + } + + return lVector3; + } + + //------------------------------------------------------------------------------------------------------------ + public static Vector4 ParseVector4Json(string lJsonData) + { + string[] lVector4Array = lJsonData.Replace("(", "").Replace(")", "").Replace(" ", "").Split(','); + Vector4 lVector4 = Vector4.zero; + + if (float.TryParse(lVector4Array[0], out lVector4.x) == false) + { + return Vector4.zero; + } + if (float.TryParse(lVector4Array[1], out lVector4.y) == false) + { + return Vector4.zero; + } + if (float.TryParse(lVector4Array[2], out lVector4.z) == false) + { + return Vector4.zero; + } + if (float.TryParse(lVector4Array[3], out lVector4.w) == false) + { + return Vector4.zero; + } + + return lVector4; + } + + //------------------------------------------------------------------------------------------------------------ + public static Vector2 ParseVector2String(string lData, char lSeperator = ' ') + { + string[] lParts = lData.Split(new char[] { lSeperator }, StringSplitOptions.RemoveEmptyEntries); + + float lX = lParts[0].ParseInvariantFloat(); + float lY = lParts[1].ParseInvariantFloat(); + + return new Vector2(lX, lY); + } + + //------------------------------------------------------------------------------------------------------------ + public static Vector3 ParseVector3String(string lData, char lSeperator = ' ') + { + string[] lParts = lData.Split(new char[] { lSeperator }, StringSplitOptions.RemoveEmptyEntries); + + float lX = lParts[0].ParseInvariantFloat(); + float lY = lParts[1].ParseInvariantFloat(); + float lZ = lParts[2].ParseInvariantFloat(); + + return new Vector3(lX, lY, lZ); + } + + //------------------------------------------------------------------------------------------------------------ + public static Vector4 ParseVector4String(string lData, char lSeperator = ' ') + { + string[] lParts = lData.Split(new char[] { lSeperator }, StringSplitOptions.RemoveEmptyEntries); + + float lX = lParts[0].ParseInvariantFloat(); + float lY = lParts[1].ParseInvariantFloat(); + float lZ = lParts[2].ParseInvariantFloat(); + float lW = lParts[3].ParseInvariantFloat(); + + return new Vector4(lX, lY, lZ, lW); + } + + //------------------------------------------------------------------------------------------------------------ + public static Quaternion ParseQuaternion(string lJsonData) + { + string[] lQuaternionArray = lJsonData.Replace("(", "").Replace(")", "").Replace(" ", "").Split(','); + Quaternion lQuaternion = Quaternion.identity; + + if (float.TryParse(lQuaternionArray[0], out lQuaternion.x) == false) + { + return Quaternion.identity; + } + if (float.TryParse(lQuaternionArray[1], out lQuaternion.y) == false) + { + return Quaternion.identity; + } + if (float.TryParse(lQuaternionArray[2], out lQuaternion.z) == false) + { + return Quaternion.identity; + } + if (float.TryParse(lQuaternionArray[3], out lQuaternion.w) == false) + { + return Quaternion.identity; + } + + return lQuaternion; + } + + //------------------------------------------------------------------------------------------------------------ + public static string Vector3String(Vector3 lVector3) + { + return "(" + + lVector3.x.ToString("f3") + "," + + lVector3.y.ToString("f3") + "," + + lVector3.z.ToString("f3") + + ")"; + } + + //------------------------------------------------------------------------------------------------------------ + public static string Vector4String(Vector4 lVector4) + { + return "(" + + lVector4.x.ToString("f3") + "," + + lVector4.y.ToString("f3") + "," + + lVector4.z.ToString("f3") + "," + + lVector4.w.ToString("f3") + + ")"; + } + + //------------------------------------------------------------------------------------------------------------ + public static string QuaternionString(Quaternion lQuaternion) + { + return "(" + + lQuaternion.x.ToString("f3") + "," + + lQuaternion.y.ToString("f3") + "," + + lQuaternion.z.ToString("f3") + "," + + lQuaternion.w.ToString("f3") + + ")"; + } + + //------------------------------------------------------------------------------------------------------------ + public static int FirstInt(string lJsonData) + { + string lDigits = ""; + for (int lCount = 0; lCount < lJsonData.Length && Char.IsDigit(lJsonData[lCount]); ++lCount) + { + lDigits += lJsonData[lCount]; + } + return int.Parse(lDigits); + } + } +} diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/UnityExtension.cs.meta b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/UnityExtension.cs.meta new file mode 100644 index 0000000..9a9c9d3 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/UnityExtension.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 06a010ef6a1e94840a51827a2a02badc +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/VectorExtension.cs b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/VectorExtension.cs new file mode 100644 index 0000000..9e6ddbd --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/VectorExtension.cs @@ -0,0 +1,35 @@ + +using System; +using System.IO; +using System.Collections.Generic; +using System.Text.RegularExpressions; + +using UnityEngine; + +namespace UnityExtension +{ + //------------------------------------------------------------------------------------------------------------ + public static class Vector3Ext + { + //------------------------------------------------------------------------------------------------------------ + public static readonly Vector3 IgnoreX = new Vector3(0f, 1f, 1f); + public static readonly Vector3 IgnoreY = new Vector3(1f, 0f, 1f); + public static readonly Vector3 IgnoreZ = new Vector3(1f, 1f, 0f); + + //------------------------------------------------------------------------------------------------------------ + public static Color ToColor(this Vector3 lVector) + { + return new Color(lVector.x, lVector.y, lVector.z); + } + } + + //------------------------------------------------------------------------------------------------------------ + public static class Vector4Ext + { + //------------------------------------------------------------------------------------------------------------ + public static Color ToColor(this Vector4 lVector) + { + return new Color(lVector.x, lVector.y, lVector.z, lVector.w); + } + } +} diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/VectorExtension.cs.meta b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/VectorExtension.cs.meta new file mode 100644 index 0000000..89d8c8e --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Extension/VectorExtension.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 18a26dda21abdf5468d5731a6dbd26c4 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh.meta b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh.meta new file mode 100644 index 0000000..48409ba --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 398bd6d854d804239926cbd17c9ee93c +folderAsset: yes +timeCreated: 1465591252 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ.meta b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ.meta new file mode 100644 index 0000000..e87c22f --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8700a9474fed74e75b15b31742f639e2 +folderAsset: yes +timeCreated: 1465591252 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJData.cs b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJData.cs new file mode 100644 index 0000000..239a519 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJData.cs @@ -0,0 +1,18 @@ + +using System.Collections.Generic; + +using UnityEngine; + +public class OBJData +{ + //------------------------------------------------------------------------------------------------------------ + public List m_Vertices = new List(); + public List m_Normals = new List(); + public List m_UVs = new List(); + public List m_UV2s = new List(); + public List m_Colors = new List(); + + //------------------------------------------------------------------------------------------------------------ + public List m_Materials = new List(); + public List m_Groups = new List(); +} \ No newline at end of file diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJData.cs.meta b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJData.cs.meta new file mode 100644 index 0000000..30be016 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJData.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 5c57f7fdab36a3f4d9d97f4785a884f6 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJFace.cs b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJFace.cs new file mode 100644 index 0000000..ac8f61d --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJFace.cs @@ -0,0 +1,101 @@ + +using System; +using System.IO; +using System.Linq; +using System.Collections.Generic; + +using UnityEngine; + +using UnityExtension; + +public class OBJFace +{ + //------------------------------------------------------------------------------------------------------------ + private readonly List m_Vertices = new List(); + + //------------------------------------------------------------------------------------------------------------ + public void AddVertex(OBJFaceVertex lVertex) + { + m_Vertices.Add(lVertex); + } + + //------------------------------------------------------------------------------------------------------------ + public void ParseVertex(string lVertexString) + { + var fields = lVertexString.Split(new[] { '/' }, StringSplitOptions.None); + + var lIndex = fields[0].ParseInvariantInt(); + var faceVertex = new OBJFaceVertex + { + m_VertexIndex = lIndex - 1 + }; + + if (fields.Length > 1) + { + lIndex = fields[1].Length == 0 ? 0 : fields[1].ParseInvariantInt(); + faceVertex.m_UVIndex = lIndex - 1; + } + + if (fields.Length > 2) + { + lIndex = fields[2].Length == 0 ? 0 : fields[2].ParseInvariantInt(); + faceVertex.m_NormalIndex = lIndex - 1; + } + + if (fields.Length > 3) + { + lIndex = fields[3].Length == 0 ? 0 : fields[3].ParseInvariantInt(); + faceVertex.m_UV2Index = lIndex - 1; + } + + if (fields.Length > 4) + { + lIndex = fields[4].Length == 0 ? 0 : fields[4].ParseInvariantInt(); + faceVertex.m_ColorIndex = lIndex - 1; + } + + AddVertex(faceVertex); + } + + //------------------------------------------------------------------------------------------------------------ + public string ToString(int lIndex) + { + OBJFaceVertex lFaceVertex = m_Vertices[lIndex]; + + string lOutput = (lFaceVertex.m_VertexIndex + 1).ToString(); + + if (lFaceVertex.m_UVIndex > -1) + { + lOutput += string.Format("/{0}", (lFaceVertex.m_UVIndex + 1).ToString()); + } + + if (lFaceVertex.m_NormalIndex > -1) + { + lOutput += string.Format("/{0}", (lFaceVertex.m_NormalIndex + 1).ToString()); + } + + if (lFaceVertex.m_UV2Index > -1) + { + lOutput += string.Format("/{0}", (lFaceVertex.m_UV2Index + 1).ToString()); + } + + if (lFaceVertex.m_ColorIndex > -1) + { + lOutput += string.Format("/{0}", (lFaceVertex.m_ColorIndex + 1).ToString()); + } + + return lOutput; + } + + //------------------------------------------------------------------------------------------------------------ + public OBJFaceVertex this[int i] + { + get { return m_Vertices[i]; } + } + + //------------------------------------------------------------------------------------------------------------ + public int Count + { + get { return m_Vertices.Count; } + } +} diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJFace.cs.meta b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJFace.cs.meta new file mode 100644 index 0000000..9489fb2 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJFace.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 07402f6cbfe2d0e40ab4d7363cb0ed64 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJFaceVertex.cs b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJFaceVertex.cs new file mode 100644 index 0000000..47e52fb --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJFaceVertex.cs @@ -0,0 +1,25 @@ + +public class OBJFaceVertex +{ + //------------------------------------------------------------------------------------------------------------ + public int m_VertexIndex = -1; + public int m_UVIndex = -1; + public int m_UV2Index = -1; + public int m_NormalIndex = -1; + public int m_ColorIndex = -1; + + public override int GetHashCode() + { + return m_VertexIndex ^ m_UVIndex ^ m_UV2Index ^ m_NormalIndex ^ m_ColorIndex; + } + + public override bool Equals(object obj) + { + OBJFaceVertex faceVertex = (OBJFaceVertex)obj; + return m_VertexIndex == faceVertex.m_VertexIndex + && m_UVIndex == faceVertex.m_UVIndex + && m_UV2Index == faceVertex.m_UV2Index + && m_NormalIndex == faceVertex.m_NormalIndex + && m_ColorIndex == m_ColorIndex; + } +} \ No newline at end of file diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJFaceVertex.cs.meta b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJFaceVertex.cs.meta new file mode 100644 index 0000000..e099066 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJFaceVertex.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 1f5cff977d3365a4f9f33933bb603037 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJGroup.cs b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJGroup.cs new file mode 100644 index 0000000..c85190e --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJGroup.cs @@ -0,0 +1,27 @@ + +using System.Collections.Generic; + +public class OBJGroup +{ + //------------------------------------------------------------------------------------------------------------ + private readonly List m_Faces = new List(); + + //------------------------------------------------------------------------------------------------------------ + public OBJGroup(string lName) + { + m_Name = lName; + } + + //------------------------------------------------------------------------------------------------------------ + public string m_Name { get; private set; } + public OBJMaterial m_Material { get; set; } + + //------------------------------------------------------------------------------------------------------------ + public IList Faces { get { return m_Faces; } } + + //------------------------------------------------------------------------------------------------------------ + public void AddFace(OBJFace lFace) + { + m_Faces.Add(lFace); + } +} \ No newline at end of file diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJGroup.cs.meta b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJGroup.cs.meta new file mode 100644 index 0000000..f60404a --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJGroup.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 8508b6de42212c84ebaec559aed6c7b6 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJLoader.cs b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJLoader.cs new file mode 100644 index 0000000..f57e0e4 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJLoader.cs @@ -0,0 +1,219 @@ + +using System; +using System.IO; +using System.Linq; +using System.Collections.Generic; + +using UnityEngine; + +using UnityExtension; + +/* + * Currently only supports Triangluar Meshes + */ + +public class OBJLoader +{ + //------------------------------------------------------------------------------------------------------------ + private static OBJData m_OBJData = null; + + //------------------------------------------------------------------------------------------------------------ + private static OBJMaterial m_CurrentMaterial = null; + private static OBJGroup m_CurrentGroup = null; + + #region PROCESSORS + + //------------------------------------------------------------------------------------------------------------ + private static readonly Dictionary> m_ParseOBJActionDictionary = new Dictionary> + { + { "mtllib", (lEntry) => { /*Load MTL*/ } }, + { "usemtl", (lEntry) => { PushOBJGroupIfNeeded(); m_CurrentGroup.m_Material = m_OBJData.m_Materials.SingleOrDefault((lX) => { return lX.m_Name.EqualsInvariantCultureIgnoreCase(lEntry); }); } }, + { "v", (lEntry) => { m_OBJData.m_Vertices.Add(Utils.ParseVector3String(lEntry)); } }, + { "vn", (lEntry) => { m_OBJData.m_Normals.Add(Utils.ParseVector3String(lEntry)); } }, + { "vt", (lEntry) => { m_OBJData.m_UVs.Add(Utils.ParseVector2String(lEntry)); } }, + { "vt2", (lEntry) => { m_OBJData.m_UV2s.Add(Utils.ParseVector2String(lEntry)); } }, + { "vc", (lEntry) => { m_OBJData.m_Colors.Add(Utils.ParseVector4String(lEntry).ToColor()); } }, + { "f", PushOBJFace }, + { "g", PushOBJGroup }, + }; + + //------------------------------------------------------------------------------------------------------------ + private static readonly Dictionary> m_ParseMTLActionDictionary = new Dictionary> + { + { "newmtl", PushOBJMaterial }, + { "Ka", (lEntry) => { m_CurrentMaterial.m_AmbientColor = Utils.ParseVector3String(lEntry).ToColor(); } }, + { "Kd", (lEntry) => { m_CurrentMaterial.m_DiffuseColor = Utils.ParseVector3String(lEntry).ToColor(); } }, + { "Ks", (lEntry) => { m_CurrentMaterial.m_SpecularColor = Utils.ParseVector3String(lEntry).ToColor(); } }, + { "Ns", (lEntry) => { m_CurrentMaterial.m_SpecularCoefficient = lEntry.ParseInvariantFloat(); } }, + { "d", (lEntry) => { m_CurrentMaterial.m_Transparency = lEntry.ParseInvariantFloat(); } }, + { "Tr", (lEntry) => { m_CurrentMaterial.m_Transparency = lEntry.ParseInvariantFloat(); } }, + { "illum", (lEntry) => { m_CurrentMaterial.m_IlluminationModel = lEntry.ParseInvariantInt(); } }, + { "map_Ka", (lEntry) => { m_CurrentMaterial.m_AmbientTextureMap = lEntry; } }, + { "map_Kd", (lEntry) => { m_CurrentMaterial.m_DiffuseTextureMap = lEntry; } }, + { "map_Ks", (lEntry) => { m_CurrentMaterial.m_SpecularTextureMap = lEntry; } }, + { "map_Ns", (lEntry) => { m_CurrentMaterial.m_SpecularHighlightTextureMap = lEntry; } }, + { "map_d", (lEntry) => { m_CurrentMaterial.m_AlphaTextureMap = lEntry; } }, + { "map_bump", (lEntry) => { m_CurrentMaterial.m_BumpMap = lEntry; } }, + { "bump", (lEntry) => { m_CurrentMaterial.m_BumpMap = lEntry; } }, + { "disp", (lEntry) => { m_CurrentMaterial.m_DisplacementMap = lEntry; } }, + { "decal",(lEntry) => { m_CurrentMaterial.m_StencilDecalMap = lEntry; } }, + }; + + #endregion + + #region PUBLIC_INTERFACE + + //------------------------------------------------------------------------------------------------------------ + public static OBJData LoadOBJ(Stream lStream) + { + m_OBJData = new OBJData(); + + m_CurrentMaterial = null; + m_CurrentGroup = null; + + StreamReader lLineStreamReader = new StreamReader(lStream); + + Action lAction = null; + string lCurrentLine = null; + string[] lFields = null; + string lKeyword = null; + string lData = null; + + while (!lLineStreamReader.EndOfStream) + { + lCurrentLine = lLineStreamReader.ReadLine(); + + if (StringExt.IsNullOrWhiteSpace(lCurrentLine) + || lCurrentLine[0] == '#') + { + continue; + } + + lFields = lCurrentLine.Trim().Split(null, 2); + if (lFields.Length < 2) + { + continue; + } + + lKeyword = lFields[0].Trim(); + lData = lFields[1].Trim(); + + lAction = null; + m_ParseOBJActionDictionary.TryGetValue(lKeyword.ToLowerInvariant(), out lAction); + + if (lAction != null) + { + lAction(lData); + } + } + + var lOBJData = m_OBJData; + m_OBJData = null; + + return lOBJData; + } + + //------------------------------------------------------------------------------------------------------------ + public static void ExportOBJ(OBJData lData, Stream lStream) + { + StreamWriter lLineStreamWriter = new StreamWriter(lStream); + + lLineStreamWriter.WriteLine(string.Format("# File exported by Unity3D version {0}", Application.unityVersion)); + + for (int lCount = 0; lCount < lData.m_Vertices.Count; ++lCount) + { + lLineStreamWriter.WriteLine(string.Format("v {0} {1} {2}", + lData.m_Vertices[lCount].x.ToString("n8"), + lData.m_Vertices[lCount].y.ToString("n8"), + lData.m_Vertices[lCount].z.ToString("n8"))); + } + + for (int lCount = 0; lCount < lData.m_UVs.Count; ++lCount) + { + lLineStreamWriter.WriteLine(string.Format("vt {0} {1}", + lData.m_UVs[lCount].x.ToString("n5"), + lData.m_UVs[lCount].y.ToString("n5"))); + } + + for (int lCount = 0; lCount < lData.m_UV2s.Count; ++lCount) + { + lLineStreamWriter.WriteLine(string.Format("vt2 {0} {1}", + lData.m_UVs[lCount].x.ToString("n5"), + lData.m_UVs[lCount].y.ToString("n5"))); + } + + for (int lCount = 0; lCount < lData.m_Normals.Count; ++lCount) + { + lLineStreamWriter.WriteLine(string.Format("vn {0} {1} {2}", + lData.m_Normals[lCount].x.ToString("n8"), + lData.m_Normals[lCount].y.ToString("n8"), + lData.m_Normals[lCount].z.ToString("n8"))); + } + + for (int lCount = 0; lCount < lData.m_Colors.Count; ++lCount) + { + lLineStreamWriter.WriteLine(string.Format("vc {0} {1} {2} {3}", + lData.m_Colors[lCount].r.ToString("n8"), + lData.m_Colors[lCount].g.ToString("n8"), + lData.m_Colors[lCount].b.ToString("n8"), + lData.m_Colors[lCount].a.ToString("n8"))); + } + + for (int lGroup = 0; lGroup < lData.m_Groups.Count; ++lGroup) + { + lLineStreamWriter.WriteLine(string.Format("g {0}", lData.m_Groups[lGroup].m_Name)); + + for (int lFace = 0; lFace < lData.m_Groups[lGroup].Faces.Count; ++lFace) + { + lLineStreamWriter.WriteLine(string.Format("f {0} {1} {2}", + lData.m_Groups[lGroup].Faces[lFace].ToString(0), + lData.m_Groups[lGroup].Faces[lFace].ToString(1), + lData.m_Groups[lGroup].Faces[lFace].ToString(2))); + } + } + + lLineStreamWriter.Flush(); + } + + #endregion + + //------------------------------------------------------------------------------------------------------------ + private static void PushOBJMaterial(string lMaterialName) + { + m_CurrentMaterial = new OBJMaterial(lMaterialName); + m_OBJData.m_Materials.Add(m_CurrentMaterial); + } + + //------------------------------------------------------------------------------------------------------------ + private static void PushOBJGroup(string lGroupName) + { + m_CurrentGroup = new OBJGroup(lGroupName); + m_OBJData.m_Groups.Add(m_CurrentGroup); + } + + //------------------------------------------------------------------------------------------------------------ + private static void PushOBJGroupIfNeeded() + { + if (m_CurrentGroup == null) + { + PushOBJGroup("default"); + } + } + + //------------------------------------------------------------------------------------------------------------ + private static void PushOBJFace(string lFaceLine) + { + PushOBJGroupIfNeeded(); + + var vertices = lFaceLine.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); + + var face = new OBJFace(); + + foreach (var vertexString in vertices) + { + face.ParseVertex(vertexString); + } + + m_CurrentGroup.AddFace(face); + } +} \ No newline at end of file diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJLoader.cs.meta b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJLoader.cs.meta new file mode 100644 index 0000000..6f1b11a --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJLoader.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: bda02739f6fbaeb4c8c3da925164b8cf +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJMaterial.cs b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJMaterial.cs new file mode 100644 index 0000000..92fac43 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJMaterial.cs @@ -0,0 +1,42 @@ + +using UnityEngine; + +public class OBJMaterial +{ + //------------------------------------------------------------------------------------------------------------ + public OBJMaterial(string lMaterialName) + { + m_Name = lMaterialName; + } + + //------------------------------------------------------------------------------------------------------------ + public string m_Name; + + //------------------------------------------------------------------------------------------------------------ + public Color m_AmbientColor; + public Color m_DiffuseColor; + public Color m_SpecularColor; + public float m_SpecularCoefficient; + + //------------------------------------------------------------------------------------------------------------ + public float m_Transparency; + + //------------------------------------------------------------------------------------------------------------ + public int m_IlluminationModel; + + //------------------------------------------------------------------------------------------------------------ + public string m_AmbientTextureMap; + public string m_DiffuseTextureMap; + + //------------------------------------------------------------------------------------------------------------ + public string m_SpecularTextureMap; + public string m_SpecularHighlightTextureMap; + + //------------------------------------------------------------------------------------------------------------ + public string m_BumpMap; + public string m_DisplacementMap; + public string m_StencilDecalMap; + + //------------------------------------------------------------------------------------------------------------ + public string m_AlphaTextureMap; +} \ No newline at end of file diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJMaterial.cs.meta b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJMaterial.cs.meta new file mode 100644 index 0000000..6bc3d38 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Mesh/OBJ/OBJMaterial.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: ceb2526c78b78c04592f312a4e65ec95 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Utils.meta b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Utils.meta new file mode 100644 index 0000000..0fc5553 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Utils.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 32ca95fc59e8743b3b0033ddfb038e11 +folderAsset: yes +timeCreated: 1465591252 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Utils/Int32Converter.cs b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Utils/Int32Converter.cs new file mode 100644 index 0000000..dabbd7c --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Utils/Int32Converter.cs @@ -0,0 +1,39 @@ + +using System; +using System.Collections.Generic; +using System.Runtime.InteropServices; + +[StructLayout(LayoutKind.Explicit)] +public struct Int32Converter +{ + //------------------------------------------------------------------------------------------------------------ + [FieldOffset(0)] + public int Value; + [FieldOffset(0)] + public byte Byte1; + [FieldOffset(1)] + public byte Byte2; + [FieldOffset(2)] + public byte Byte3; + [FieldOffset(3)] + public byte Byte4; + + //------------------------------------------------------------------------------------------------------------ + public Int32Converter(int value) + { + Byte1 = Byte2 = Byte3 = Byte4 = 0; + Value = value; + } + + //------------------------------------------------------------------------------------------------------------ + public static implicit operator Int32(Int32Converter value) + { + return value.Value; + } + + //------------------------------------------------------------------------------------------------------------ + public static implicit operator Int32Converter(int value) + { + return new Int32Converter(value); + } +} diff --git a/integrations/Unity3D/Assets/OBJ-IO/Plugins/Utils/Int32Converter.cs.meta b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Utils/Int32Converter.cs.meta new file mode 100644 index 0000000..2999c35 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Plugins/Utils/Int32Converter.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 2980235c1e3576a4ab7dca278af19308 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/OBJ-IO/Readme.txt b/integrations/Unity3D/Assets/OBJ-IO/Readme.txt new file mode 100644 index 0000000..6134cda --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Readme.txt @@ -0,0 +1,36 @@ + +/* * * * * * * * * * * * Author's note * * * * * * * * * * * * * *\ +* * +* ZZ$$Z$$$$Z$$$ * +* ZZZZZZZZZZZZZ * +* ZZZZZZZZZZZZZ * +* $ZZZZZZZZZZZZ * +* $ZZZZZZZZZZZZ * +* ZZ7=$OOO$?$ZO * +* Z7 $OZ IO * +* ZZZZZZZZOOOZOOOOOZZ8OZZZZZZZZZ * +* NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO * +* NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO * +* 8O8OOOOO8 88O88O8888888 D88888888 * +* 8OOOOOOO8 8OOON OO88 DO8888888 * +* DDDDDDDDD DDDD DDDD NDDDDDDDD * +* * +* http://octo-dev.co.uk * +* * +* OBJ-IO * +* * +* Copyright (c) Octo-Dev * +* * +\* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +The scripts for this plugin are in [OBJ-IO/Plugins/OBJ] +and [OBJ-IO/Plugins/Extension]. + +There is an Example scene that Imports the Teapot OBJ at runtime, +distorts the vertexs and exports it again. The Export and Import +functions take System.IO.Stream as a parameter so this can be adapted +for your needs. + +The System Current only supports geometry. + +If there is any issue or bugs please contact : tim.leader.octo@gmail.com \ No newline at end of file diff --git a/integrations/Unity3D/Assets/OBJ-IO/Readme.txt.meta b/integrations/Unity3D/Assets/OBJ-IO/Readme.txt.meta new file mode 100644 index 0000000..6372bc3 --- /dev/null +++ b/integrations/Unity3D/Assets/OBJ-IO/Readme.txt.meta @@ -0,0 +1,6 @@ +fileFormatVersion: 2 +guid: e1f277bf041647445ac3bf5b643a46fe +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/integrations/Unity3D/Assets/WorldMain.cs b/integrations/Unity3D/Assets/WorldMain.cs new file mode 100644 index 0000000..5f28270 --- /dev/null +++ b/integrations/Unity3D/Assets/WorldMain.cs @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/integrations/Unity3D/Assets/ZT.mat b/integrations/Unity3D/Assets/ZT.mat new file mode 100644 index 0000000..584ed8e Binary files /dev/null and b/integrations/Unity3D/Assets/ZT.mat differ diff --git a/integrations/Unity3D/Assets/ZeroTier.cs b/integrations/Unity3D/Assets/ZeroTier.cs new file mode 100644 index 0000000..c7c776b --- /dev/null +++ b/integrations/Unity3D/Assets/ZeroTier.cs @@ -0,0 +1,282 @@ +/* + * ZeroTier One - Network Virtualization Everywhere + * Copyright (C) 2011-2015 ZeroTier, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * -- + * + * ZeroTier may be used and distributed under the terms of the GPLv3, which + * are available at: http://www.gnu.org/licenses/gpl-3.0.html + * + * If you would like to embed ZeroTier into a commercial application or + * redistribute it in a modified binary form, please contact ZeroTier Networks + * LLC. Start here: http://www.zerotier.com/ + */ + +using UnityEngine; +using UnityEngine.UI; +using System; +using System.Collections; +using System.Runtime.InteropServices; +using System.Threading; +using UnityEngine.Networking; + +using System.Net.Sockets; +using System.Net; + +using System.IO; + + +public class ZeroTierNetworkInterface { + + // ZeroTier background thread + private Thread ztThread; + + // Interop structures + [System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential, CharSet=System.Runtime.InteropServices.CharSet.Ansi)] + public struct sockaddr { + /// u_short->unsigned short + public ushort sa_family; + /// char[14] + [System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst=14)] + public string sa_data; + } + + // Virtual network interace config + private int MaxPacketSize; + private string rpc_path = "/does/this/work"; + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void MyDelegate(string str); + + static void CallBackFunction(string str) { + Debug.Log("Native ZT Plugin: " + str); + } + + // ZeroTier service / debug initialization + [DllImport ("ZeroTierSDK_Unity3D_OSX")] + public static extern void SetDebugFunction( IntPtr fp ); + [DllImport ("ZeroTierSDK_Unity3D_OSX")] + private static extern int unity_start_service(string path); + + // Connection calls + [DllImport ("ZeroTierSDK_Unity3D_OSX")] + private static extern int zt_socket(int family, int type, int protocol); + + + [DllImport ("ZeroTierSDK_Unity3D_OSX")] + unsafe private static extern int zt_bind(int sockfd, System.IntPtr addr, int addrlen); + [DllImport ("ZeroTierSDK_Unity3D_OSX")] + unsafe private static extern int zt_connect(int sockfd, System.IntPtr addr, int addrlen); + + [DllImport ("ZeroTierSDK_Unity3D_OSX")] + private static extern int zt_accept(int sockfd); + [DllImport ("ZeroTierSDK_Unity3D_OSX")] + private static extern int zt_listen(int sockfd, int backlog); + [DllImport ("ZeroTierSDK_Unity3D_OSX")] + private static extern int zt_close(int sockfd); + + // RX / TX + [DllImport ("ZeroTierSDK_Unity3D_OSX")] + unsafe private static extern int zt_recv(int sockfd, System.IntPtr buf, int len); + [DllImport ("ZeroTierSDK_Unity3D_OSX")] + unsafe private static extern int zt_send(int sockfd, System.IntPtr buf, int len); + + // ZT Thread controls + [DllImport ("ZeroTierSDK_Unity3D_OSX")] + private static extern bool zt_is_running(); + [DllImport ("ZeroTierSDK_Unity3D_OSX")] + private static extern void zt_terminate(); + + // ZT Network controls + [DllImport ("ZeroTierSDK_Unity3D_OSX")] + private static extern bool zt_join_network(string nwid); + [DllImport ("ZeroTierSDK_Unity3D_OSX")] + private static extern void zt_leave_network(string nwid); + + // Thread which starts the ZeroTier service + // The ZeroTier service may spin off a SOCKS5 proxy server + // if -DUSE_SOCKS_PROXY is set when building the bundle + private void zt_service_thread() + { + MyDelegate callback_delegate = new MyDelegate( CallBackFunction ); + // Convert callback_delegate into a function pointer that can be + // used in unmanaged code. + IntPtr intptr_delegate = + Marshal.GetFunctionPointerForDelegate(callback_delegate); + // Call the API passing along the function pointer. + SetDebugFunction( intptr_delegate ); + unity_start_service (rpc_path); + } + + // Start the ZeroTier service + private void Init() + { + // TODO: Handle exceptions from unmanaged code + ztThread = new Thread(() => { + try { + zt_service_thread(); + } catch(Exception e) { + Debug.Log(e.Message.ToString()); + } + }); + ztThread.IsBackground = true; // Allow the thread to be aborted safely + ztThread.Start(); + } + + // Initialize the ZeroTier service with a given path + public ZeroTierNetworkInterface(string path) + { + rpc_path = path; + Init(); + } + + // Initialize the ZeroTier service + public ZeroTierNetworkInterface() + { + Init(); + } + + // Initialize the ZeroTier service + // Use the GlobalConfig to set things like the max packet size + public ZeroTierNetworkInterface(GlobalConfig gConfig) + { + MaxPacketSize = gConfig.MaxPacketSize; // TODO: Do something with this! + Init(); + } + + // Joins a ZeroTier virtual network + public void JoinNetwork(string nwid) + { + zt_join_network(nwid); + } + + // Leaves a ZeroTier virtual network + public void LeaveNetwork(string nwid) + { + zt_leave_network(nwid); + } + + // Creates a ZeroTier Socket and binds on the port provided + // A client instance can now connect to this "host" + public int AddHost(int port) + { + int sockfd = zt_socket ((int)AddressFamily.InterNetwork, (int)SocketType.Stream, (int)ProtocolType.Unspecified); + if (sockfd < 0) { + return -1; + } + GCHandle sockaddr_ptr = ZeroTierUtils.Generate_unmananged_sockaddr("0.0.0.0" + ":" + port); + IntPtr pSockAddr = sockaddr_ptr.AddrOfPinnedObject (); + int addrlen = Marshal.SizeOf (pSockAddr); + return zt_bind (sockfd, pSockAddr, addrlen); + } + + // hostId - host socket ID for this connection + public int Connect(int hostId, string address, int port, out byte error) + { + int sockfd = zt_socket ((int)AddressFamily.InterNetwork, (int)SocketType.Stream, (int)ProtocolType.Unspecified); + Debug.Log ("sockfd = " + sockfd); + + if (sockfd < 0) { + error = (byte)sockfd; + return -1; + } + GCHandle sockaddr_ptr = ZeroTierUtils.Generate_unmananged_sockaddr(address + ":" + port); + IntPtr pSockAddr = sockaddr_ptr.AddrOfPinnedObject (); + int addrlen = Marshal.SizeOf (pSockAddr); + error = (byte)zt_connect (sockfd, pSockAddr, addrlen); + return sockfd; + } + + // Returns whether the ZeroTier service is currently running + public bool IsRunning() + { + return zt_is_running (); + } + + // Terminates the ZeroTier service + public void Terminate() + { + zt_terminate (); + } + + // Shutdown a given connection + public int Disconnect(int fd) + { + return zt_close (fd); + } + + // Sends data out over the network + + public int Send(int fd, char[] buf, int len, out byte error) + { + int bytes_written = 0; + error = 0; + + GCHandle buf_handle = GCHandle.Alloc (buf, GCHandleType.Pinned); + IntPtr pBufPtr = buf_handle.AddrOfPinnedObject (); + + //int len = Marshal.SizeOf (pBufPtr); + if((bytes_written = zt_send (fd, pBufPtr, len)) < 0) { + error = (byte)bytes_written; + } + return bytes_written; + } + + + // Structure used to house arrays meant to be sent to unmanaged memory and passed to the + // ZeroTier service + public struct UnityArrayInput + { + public IntPtr array; + } + + /* + // Sends data out over the network + public int Send(int fd, char[] buf, int len, out byte error) + { + //char[] buffer = new char[1024]; + UnityArrayInput data = new UnityArrayInput (); + data.array = Marshal.AllocHGlobal (Marshal.SizeOf (typeof(char))*buf.Length); + //data.len = buf.Length; + int bytes_written = 0; + error = 0; + + try + { + Marshal.Copy(buf, 0, data.array, buf.Length); + + Debug.Log(buf.Length); + // ZT API call + if((bytes_written = zt_send (fd, data.array, buf.Length)) < 0) { + error = (byte)bytes_written; + } + return bytes_written; + } + finally + { + Marshal.FreeHGlobal (data.array); + } + return 0; + } + */ + + // Checks for data to RX + public int OnReceive(int fd, byte[] buf, int len) + { + return 0; + //return zt_read(fd, buf, len); + } +} diff --git a/integrations/Unity3D/Assets/ZeroTierUtils.cs b/integrations/Unity3D/Assets/ZeroTierUtils.cs new file mode 100644 index 0000000..a1da79d --- /dev/null +++ b/integrations/Unity3D/Assets/ZeroTierUtils.cs @@ -0,0 +1,55 @@ +using UnityEngine; +using System.Collections; +using System.Net; +using System; +using System.Globalization; +using System.Runtime.InteropServices; + +public class ZeroTierUtils { + + // Handles IPv4 and IPv6 notation. + public static IPEndPoint CreateIPEndPoint(string endPoint) + { + string[] ep = endPoint.Split(':'); + if (ep.Length < 2) throw new FormatException("Invalid endpoint format"); + IPAddress ip; + if (ep.Length > 2) { + if (!IPAddress.TryParse(string.Join(":", ep, 0, ep.Length - 1), out ip)) { + throw new FormatException("Invalid ip-adress"); + } + } + else { + if (!IPAddress.TryParse(ep[0], out ip)) { + throw new FormatException("Invalid ip-adress"); + } + } + int port; + if (!int.TryParse(ep[ep.Length - 1], NumberStyles.None, NumberFormatInfo.CurrentInfo, out port)) { + throw new FormatException("Invalid port"); + } + return new IPEndPoint(ip, port); + } + + // Generates an unmanaged sockaddr structure from a string-formatted endpoint + public static GCHandle Generate_unmananged_sockaddr(string endpoint_str) + { + IPEndPoint ipEndPoint; + ipEndPoint = ZeroTierUtils.CreateIPEndPoint (endpoint_str); + SocketAddress socketAddress = ipEndPoint.Serialize (); + + // use an array of bytes instead of the sockaddr structure + byte[] sockAddrStructureBytes = new byte[socketAddress.Size]; + GCHandle sockAddrHandle = GCHandle.Alloc (sockAddrStructureBytes, GCHandleType.Pinned); + for (int i = 0; i < socketAddress.Size; ++i) { + sockAddrStructureBytes [i] = socketAddress [i]; + } + return sockAddrHandle; + } + + public static GCHandle Generate_unmanaged_buffer(byte[] buf) + { + // use an array of bytes instead of the sockaddr structure + GCHandle sockAddrHandle = GCHandle.Alloc (buf, GCHandleType.Pinned); + return sockAddrHandle; + } +} diff --git a/integrations/Unity3D/Assets/smcs.rsp b/integrations/Unity3D/Assets/smcs.rsp new file mode 100644 index 0000000..46ef843 --- /dev/null +++ b/integrations/Unity3D/Assets/smcs.rsp @@ -0,0 +1 @@ +-unsafe \ No newline at end of file diff --git a/integrations/Unity3D/Assets/zerotier-icon.png b/integrations/Unity3D/Assets/zerotier-icon.png new file mode 100644 index 0000000..4d9641b Binary files /dev/null and b/integrations/Unity3D/Assets/zerotier-icon.png differ diff --git a/integrations/Unity3D/ProjectSettings/AudioManager.asset b/integrations/Unity3D/ProjectSettings/AudioManager.asset new file mode 100644 index 0000000..d2a92d7 Binary files /dev/null and b/integrations/Unity3D/ProjectSettings/AudioManager.asset differ diff --git a/integrations/Unity3D/ProjectSettings/ClusterInputManager.asset b/integrations/Unity3D/ProjectSettings/ClusterInputManager.asset new file mode 100644 index 0000000..de328e5 Binary files /dev/null and b/integrations/Unity3D/ProjectSettings/ClusterInputManager.asset differ diff --git a/integrations/Unity3D/ProjectSettings/DynamicsManager.asset b/integrations/Unity3D/ProjectSettings/DynamicsManager.asset new file mode 100644 index 0000000..188d025 Binary files /dev/null and b/integrations/Unity3D/ProjectSettings/DynamicsManager.asset differ diff --git a/integrations/Unity3D/ProjectSettings/EditorBuildSettings.asset b/integrations/Unity3D/ProjectSettings/EditorBuildSettings.asset new file mode 100644 index 0000000..84a3acf Binary files /dev/null and b/integrations/Unity3D/ProjectSettings/EditorBuildSettings.asset differ diff --git a/integrations/Unity3D/ProjectSettings/EditorSettings.asset b/integrations/Unity3D/ProjectSettings/EditorSettings.asset new file mode 100644 index 0000000..d32ad8c Binary files /dev/null and b/integrations/Unity3D/ProjectSettings/EditorSettings.asset differ diff --git a/integrations/Unity3D/ProjectSettings/GraphicsSettings.asset b/integrations/Unity3D/ProjectSettings/GraphicsSettings.asset new file mode 100644 index 0000000..96548d5 Binary files /dev/null and b/integrations/Unity3D/ProjectSettings/GraphicsSettings.asset differ diff --git a/integrations/Unity3D/ProjectSettings/InputManager.asset b/integrations/Unity3D/ProjectSettings/InputManager.asset new file mode 100644 index 0000000..9eeb05c Binary files /dev/null and b/integrations/Unity3D/ProjectSettings/InputManager.asset differ diff --git a/integrations/Unity3D/ProjectSettings/NavMeshAreas.asset b/integrations/Unity3D/ProjectSettings/NavMeshAreas.asset new file mode 100644 index 0000000..f3360b0 Binary files /dev/null and b/integrations/Unity3D/ProjectSettings/NavMeshAreas.asset differ diff --git a/integrations/Unity3D/ProjectSettings/NetworkManager.asset b/integrations/Unity3D/ProjectSettings/NetworkManager.asset new file mode 100644 index 0000000..4488849 Binary files /dev/null and b/integrations/Unity3D/ProjectSettings/NetworkManager.asset differ diff --git a/integrations/Unity3D/ProjectSettings/Physics2DSettings.asset b/integrations/Unity3D/ProjectSettings/Physics2DSettings.asset new file mode 100644 index 0000000..3994ead Binary files /dev/null and b/integrations/Unity3D/ProjectSettings/Physics2DSettings.asset differ diff --git a/integrations/Unity3D/ProjectSettings/ProjectSettings.asset b/integrations/Unity3D/ProjectSettings/ProjectSettings.asset new file mode 100644 index 0000000..a97930a Binary files /dev/null and b/integrations/Unity3D/ProjectSettings/ProjectSettings.asset differ diff --git a/integrations/Unity3D/ProjectSettings/ProjectVersion.txt b/integrations/Unity3D/ProjectSettings/ProjectVersion.txt new file mode 100644 index 0000000..558807b --- /dev/null +++ b/integrations/Unity3D/ProjectSettings/ProjectVersion.txt @@ -0,0 +1,2 @@ +m_EditorVersion: 5.3.5f1 +m_StandardAssetsVersion: 0 diff --git a/integrations/Unity3D/ProjectSettings/QualitySettings.asset b/integrations/Unity3D/ProjectSettings/QualitySettings.asset new file mode 100644 index 0000000..1c2eecf Binary files /dev/null and b/integrations/Unity3D/ProjectSettings/QualitySettings.asset differ diff --git a/integrations/Unity3D/ProjectSettings/TagManager.asset b/integrations/Unity3D/ProjectSettings/TagManager.asset new file mode 100644 index 0000000..239cc3a Binary files /dev/null and b/integrations/Unity3D/ProjectSettings/TagManager.asset differ diff --git a/integrations/Unity3D/ProjectSettings/TimeManager.asset b/integrations/Unity3D/ProjectSettings/TimeManager.asset new file mode 100644 index 0000000..a25d708 Binary files /dev/null and b/integrations/Unity3D/ProjectSettings/TimeManager.asset differ diff --git a/integrations/Unity3D/ProjectSettings/UnityAdsSettings.asset b/integrations/Unity3D/ProjectSettings/UnityAdsSettings.asset new file mode 100644 index 0000000..b8c7eb7 Binary files /dev/null and b/integrations/Unity3D/ProjectSettings/UnityAdsSettings.asset differ diff --git a/integrations/Unity3D/ProjectSettings/UnityConnectSettings.asset b/integrations/Unity3D/ProjectSettings/UnityConnectSettings.asset new file mode 100644 index 0000000..ec04bc7 Binary files /dev/null and b/integrations/Unity3D/ProjectSettings/UnityConnectSettings.asset differ diff --git a/integrations/Unity3D/ZeroTier-Unity3D-Test.sln b/integrations/Unity3D/ZeroTier-Unity3D-Test.sln new file mode 100644 index 0000000..44dad97 --- /dev/null +++ b/integrations/Unity3D/ZeroTier-Unity3D-Test.sln @@ -0,0 +1,29 @@ +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2008 + +Project("{9AF94C27-9A63-1F6F-49AF-DCF505B8257A}") = "ZeroTier-Unity3D-Test", "Assembly-CSharp.csproj", "{5AB900A8-5B14-044A-A52D-10417305A5D2}" +EndProject +Project("{9AF94C27-9A63-1F6F-49AF-DCF505B8257A}") = "ZeroTier-Unity3D-Test", "Assembly-CSharp-Editor.csproj", "{24F9E71C-1810-2FEA-B9CC-4258EB20D4CD}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {5AB900A8-5B14-044A-A52D-10417305A5D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5AB900A8-5B14-044A-A52D-10417305A5D2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5AB900A8-5B14-044A-A52D-10417305A5D2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5AB900A8-5B14-044A-A52D-10417305A5D2}.Release|Any CPU.Build.0 = Release|Any CPU + {24F9E71C-1810-2FEA-B9CC-4258EB20D4CD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {24F9E71C-1810-2FEA-B9CC-4258EB20D4CD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {24F9E71C-1810-2FEA-B9CC-4258EB20D4CD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {24F9E71C-1810-2FEA-B9CC-4258EB20D4CD}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(MonoDevelopProperties) = preSolution + StartupItem = Assembly-CSharp.csproj + EndGlobalSection +EndGlobal diff --git a/integrations/Unity3D/ZeroTier-Unity3D-Test.userprefs b/integrations/Unity3D/ZeroTier-Unity3D-Test.userprefs new file mode 100644 index 0000000..45e7d23 --- /dev/null +++ b/integrations/Unity3D/ZeroTier-Unity3D-Test.userprefs @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/make-linux.mk b/make-linux.mk index 808e14e..d67c3c9 100644 --- a/make-linux.mk +++ b/make-linux.mk @@ -83,8 +83,8 @@ endif # Debug output for Network Containers # Specific levels can be controlled in netcon/common.inc.c -ifeq ($(NETCON_DEBUG),1) - DEFS+=-DNETCON_DEBUG +ifeq ($(SDK_DEBUG),1) + DEFS+=-DSDK_DEBUG endif # Uncomment for gprof profile build @@ -104,7 +104,7 @@ one: $(OBJS) service/OneService.o one.o osdep/LinuxEthernetTap.o netcon: $(OBJS) FORCE rm -f *.o # Need to selectively rebuild one.cpp and OneService.cpp with ZT_SERVICE_NETCON and ZT_ONE_NO_ROOT_CHECK defined, and also NetconEthernetTap - $(CXX) $(CXXFLAGS) $(LDFLAGS) -DZT_SERVICE_NETCON -DZT_ONE_NO_ROOT_CHECK -Iext/lwip/src/include -Iext/lwip/src/include/ipv4 -Iext/lwip/src/include/ipv6 -o zerotier-netcon-service $(OBJS) service/OneService.cpp netcon/NetconEthernetTap.cpp netcon/NetconProxy.cpp one.cpp -x c netcon/NetconRPC.c $(LDLIBS) -ldl + $(CXX) $(CXXFLAGS) $(LDFLAGS) -DZT_SDK -DZT_ONE_NO_ROOT_CHECK -Iext/lwip/src/include -Iext/lwip/src/include/ipv4 -Iext/lwip/src/include/ipv6 -o zerotier-netcon-service $(OBJS) service/OneService.cpp netcon/NetconEthernetTap.cpp netcon/NetconProxy.cpp one.cpp -x c netcon/NetconRPC.c $(LDLIBS) -ldl # Build netcon/liblwip.so which must be placed in ZT home for zerotier-netcon-service to work cd netcon ; make -f make-liblwip.mk # Use gcc not clang to build standalone intercept library since gcc is typically used for libc and we want to ensure maximal ABI compatibility diff --git a/make-mac.mk b/make-mac.mk index fe23a94..f14f340 100644 --- a/make-mac.mk +++ b/make-mac.mk @@ -69,8 +69,8 @@ endif # Debug output for Network Containers # Specific levels can be controlled in netcon/common.inc.c -ifeq ($(NETCON_DEBUG),1) - DEFS+=-DNETCON_DEBUG +ifeq ($(SDK_DEBUG),1) + DEFS+=-DSDK_DEBUG endif CXXFLAGS=$(CFLAGS) -fno-rtti @@ -85,10 +85,10 @@ one: $(OBJS) service/OneService.o one.o $(CODESIGN) -f -s $(CODESIGN_APP_CERT) zerotier-one $(CODESIGN) -vvv zerotier-one -sdk: $(OBJS) +netcon: $(OBJS) rm -f *.o # Need to selectively rebuild one.cpp and OneService.cpp with ZT_SERVICE_NETCON and ZT_ONE_NO_ROOT_CHECK defined, and also NetconEthernetTap - $(CXX) $(CXXFLAGS) $(LDFLAGS) -DZT_SERVICE_NETCON -DZT_ONE_NO_ROOT_CHECK -Iext/lwip/src/include -Iext/lwip/src/include/ipv4 -Iext/lwip/src/include/ipv6 -o zerotier-netcon-service $(OBJS) service/OneService.cpp netcon/NetconEthernetTap.cpp netcon/NetconProxy.cpp one.cpp -x c netcon/NetconRPC.c $(LDLIBS) -ldl + $(CXX) $(CXXFLAGS) $(LDFLAGS) -DZT_SDK -DZT_ONE_NO_ROOT_CHECK -Iext/lwip/src/include -Iext/lwip/src/include/ipv4 -Iext/lwip/src/include/ipv6 -o zerotier-netcon-service $(OBJS) service/OneService.cpp netcon/NetconEthernetTap.cpp netcon/NetconProxy.cpp one.cpp -x c netcon/NetconRPC.c $(LDLIBS) -ldl # Build netcon/liblwip.so which must be placed in ZT home for zerotier-netcon-service to work cd netcon ; make -f make-liblwip.mk # Use gcc not clang to build standalone intercept library since gcc is typically used for libc and we want to ensure maximal ABI compatibility diff --git a/src/SDK_Debug.c b/src/SDK_Debug.c index 092fc24..b04163c 100644 --- a/src/SDK_Debug.c +++ b/src/SDK_Debug.c @@ -57,7 +57,7 @@ void dwr(int level, const char *fmt, ... ); void dwr(int level, const char *fmt, ... ) { -#if defined(_SDK_DEBUG) +#if defined(ZT_SDK_DEBUG) if(level > DEBUG_LEVEL) return; int saveerr; diff --git a/src/SDK_EthernetTap.cpp b/src/SDK_EthernetTap.cpp index 415eafc..e77d31a 100644 --- a/src/SDK_EthernetTap.cpp +++ b/src/SDK_EthernetTap.cpp @@ -60,7 +60,7 @@ #include "SDK_Debug.c" #include "SDK_ServiceSetup.hpp" -#if !defined(__IOS__) && !defined(__ANDROID__) && !defined(__UNITY_3D__) +#if !defined(__IOS__) && !defined(__ANDROID__) && !defined(__UNITY_3D__) && !defined(__APPLE__) const ip_addr_t ip_addr_any = { IPADDR_ANY }; #endif diff --git a/src/SDK_Intercept.c b/src/SDK_Intercept.c index 5e96eae..8ea2b35 100644 --- a/src/SDK_Intercept.c +++ b/src/SDK_Intercept.c @@ -25,6 +25,8 @@ * LLC. Start here: http://www.zerotier.com/ */ +#if defined(ZT_SDK_INTERCEPT) + #include #include #include @@ -569,3 +571,5 @@ pthread_key_t thr_id_key; #endif #endif +#endif // ZT_SDK_INTERCEPT + diff --git a/src/SDK_ServiceSetup.cpp b/src/SDK_ServiceSetup.cpp index 0a8abde..eaa406e 100644 --- a/src/SDK_ServiceSetup.cpp +++ b/src/SDK_ServiceSetup.cpp @@ -132,9 +132,9 @@ extern "C" { intercept_thread_id = (int*)malloc(sizeof(int)); *intercept_thread_id = mode; pthread_setspecific(thr_id_key, intercept_thread_id); - #if !defined(__UNITY_3D__) - check_intercept_enabled_for_thread(); - #endif + //#if !defined(__UNITY_3D__) + // check_intercept_enabled_for_thread(); + //#endif } #endif diff --git a/tests/kq/build.sh b/tests/kq/build.sh index 4a57255..3c86554 100755 --- a/tests/kq/build.sh +++ b/tests/kq/build.sh @@ -1,4 +1,4 @@ -gcc kq_test_client.c ../../kq.c ../../zt_api.c ../../RPC.c -DNETCON_DEBUG -DNETCON_INTERCEPT -o kq_test_client +gcc kq_test_client.c ../../kq.c ../../zt_api.c ../../RPC.c -DZT_SDK_DEBUG -DNETCON_INTERCEPT -o kq_test_client #gcc kq_test_server.c ../../kq.c -o kq_test_server gcc server.c -o server