Repository: IvanCampos/visionOS-examples
Branch: main
Commit: 16ecfd45e65e
Files: 382
Total size: 995.9 KB
Directory structure:
gitextract_0bsx795n/
├── .gitignore
├── AnchorToHead/
│ ├── AnchorToHead/
│ │ ├── AnchorToHeadApp.swift
│ │ ├── Assets.xcassets/
│ │ │ ├── AppIcon.solidimagestack/
│ │ │ │ ├── Back.solidimagestacklayer/
│ │ │ │ │ ├── Content.imageset/
│ │ │ │ │ │ └── Contents.json
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── Contents.json
│ │ │ │ ├── Front.solidimagestacklayer/
│ │ │ │ │ ├── Content.imageset/
│ │ │ │ │ │ └── Contents.json
│ │ │ │ │ └── Contents.json
│ │ │ │ └── Middle.solidimagestacklayer/
│ │ │ │ ├── Content.imageset/
│ │ │ │ │ └── Contents.json
│ │ │ │ └── Contents.json
│ │ │ └── Contents.json
│ │ ├── ContentView.swift
│ │ ├── ImmersiveView.swift
│ │ ├── Info.plist
│ │ └── Preview Content/
│ │ └── Preview Assets.xcassets/
│ │ └── Contents.json
│ ├── AnchorToHead.xcodeproj/
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace/
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata/
│ │ └── IDEWorkspaceChecks.plist
│ ├── Packages/
│ │ └── RealityKitContent/
│ │ ├── Package.realitycomposerpro/
│ │ │ ├── ProjectData/
│ │ │ │ └── main.json
│ │ │ └── WorkspaceData/
│ │ │ ├── SceneMetadataList.json
│ │ │ └── Settings.rcprojectdata
│ │ ├── Package.swift
│ │ ├── README.md
│ │ └── Sources/
│ │ └── RealityKitContent/
│ │ ├── RealityKitContent.rkassets/
│ │ │ ├── Immersive.usda
│ │ │ ├── Materials/
│ │ │ │ └── GridMaterial.usda
│ │ │ └── Scene.usda
│ │ └── RealityKitContent.swift
│ └── README.md
├── Battery Life/
│ ├── Battery Life/
│ │ ├── Assets.xcassets/
│ │ │ ├── AppIcon.solidimagestack/
│ │ │ │ ├── Back.solidimagestacklayer/
│ │ │ │ │ ├── Content.imageset/
│ │ │ │ │ │ └── Contents.json
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── Contents.json
│ │ │ │ ├── Front.solidimagestacklayer/
│ │ │ │ │ ├── Content.imageset/
│ │ │ │ │ │ └── Contents.json
│ │ │ │ │ └── Contents.json
│ │ │ │ └── Middle.solidimagestacklayer/
│ │ │ │ ├── Content.imageset/
│ │ │ │ │ └── Contents.json
│ │ │ │ └── Contents.json
│ │ │ └── Contents.json
│ │ ├── Battery_LifeApp.swift
│ │ ├── ContentView.swift
│ │ ├── Fonts/
│ │ │ └── SF-Pro-Display-Regular.otf
│ │ ├── Info.plist
│ │ └── Preview Content/
│ │ └── Preview Assets.xcassets/
│ │ └── Contents.json
│ ├── Battery Life.xcodeproj/
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace/
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata/
│ │ └── IDEWorkspaceChecks.plist
│ ├── Packages/
│ │ └── RealityKitContent/
│ │ ├── Package.realitycomposerpro/
│ │ │ ├── ProjectData/
│ │ │ │ └── main.json
│ │ │ └── WorkspaceData/
│ │ │ ├── SceneMetadataList.json
│ │ │ └── Settings.rcprojectdata
│ │ ├── Package.swift
│ │ ├── README.md
│ │ └── Sources/
│ │ └── RealityKitContent/
│ │ ├── RealityKitContent.rkassets/
│ │ │ ├── Materials/
│ │ │ │ └── GridMaterial.usda
│ │ │ └── Scene.usda
│ │ └── RealityKitContent.swift
│ ├── README.md
│ └── ViewModel.swift
├── ChatAVP/
│ ├── ChatAVP/
│ │ ├── Assets.xcassets/
│ │ │ ├── AppIcon.solidimagestack/
│ │ │ │ ├── Back.solidimagestacklayer/
│ │ │ │ │ ├── Content.imageset/
│ │ │ │ │ │ └── Contents.json
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── Contents.json
│ │ │ │ ├── Front.solidimagestacklayer/
│ │ │ │ │ ├── Content.imageset/
│ │ │ │ │ │ └── Contents.json
│ │ │ │ │ └── Contents.json
│ │ │ │ └── Middle.solidimagestacklayer/
│ │ │ │ ├── Content.imageset/
│ │ │ │ │ └── Contents.json
│ │ │ │ └── Contents.json
│ │ │ └── Contents.json
│ │ ├── ChatAVPApp.swift
│ │ ├── ContentView.swift
│ │ ├── Info.plist
│ │ ├── Preview Content/
│ │ │ └── Preview Assets.xcassets/
│ │ │ └── Contents.json
│ │ ├── SearchBar.swift
│ │ └── TypewriterEffect.swift
│ ├── ChatAVP.xcodeproj/
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace/
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata/
│ │ └── IDEWorkspaceChecks.plist
│ ├── Packages/
│ │ └── RealityKitContent/
│ │ ├── Package.realitycomposerpro/
│ │ │ ├── ProjectData/
│ │ │ │ └── main.json
│ │ │ └── WorkspaceData/
│ │ │ ├── SceneMetadataList.json
│ │ │ └── Settings.rcprojectdata
│ │ ├── Package.swift
│ │ ├── README.md
│ │ └── Sources/
│ │ └── RealityKitContent/
│ │ ├── RealityKitContent.rkassets/
│ │ │ ├── Materials/
│ │ │ │ └── GridMaterial.usda
│ │ │ └── Scene.usda
│ │ └── RealityKitContent.swift
│ └── README.md
├── Countdown/
│ ├── Countdown/
│ │ ├── Assets.xcassets/
│ │ │ ├── AppIcon.solidimagestack/
│ │ │ │ ├── Back.solidimagestacklayer/
│ │ │ │ │ ├── Content.imageset/
│ │ │ │ │ │ └── Contents.json
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── Contents.json
│ │ │ │ ├── Front.solidimagestacklayer/
│ │ │ │ │ ├── Content.imageset/
│ │ │ │ │ │ └── Contents.json
│ │ │ │ │ └── Contents.json
│ │ │ │ └── Middle.solidimagestacklayer/
│ │ │ │ ├── Content.imageset/
│ │ │ │ │ └── Contents.json
│ │ │ │ └── Contents.json
│ │ │ └── Contents.json
│ │ ├── ContentView.swift
│ │ ├── CountdownApp.swift
│ │ ├── Extensions.swift
│ │ ├── ImmersiveView.swift
│ │ ├── Info.plist
│ │ └── Preview Content/
│ │ └── Preview Assets.xcassets/
│ │ └── Contents.json
│ ├── Countdown.xcodeproj/
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace/
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata/
│ │ └── IDEWorkspaceChecks.plist
│ ├── Packages/
│ │ └── RealityKitContent/
│ │ ├── Package.realitycomposerpro/
│ │ │ ├── ProjectData/
│ │ │ │ └── main.json
│ │ │ └── WorkspaceData/
│ │ │ ├── SceneMetadataList.json
│ │ │ └── Settings.rcprojectdata
│ │ ├── Package.swift
│ │ ├── README.md
│ │ └── Sources/
│ │ └── RealityKitContent/
│ │ ├── RealityKitContent.rkassets/
│ │ │ ├── Immersive.usda
│ │ │ ├── Materials/
│ │ │ │ └── GridMaterial.usda
│ │ │ └── Scene.usda
│ │ └── RealityKitContent.swift
│ └── README.md
├── DualSense/
│ ├── DualSense/
│ │ ├── Assets.xcassets/
│ │ │ ├── AccentColor.colorset/
│ │ │ │ └── Contents.json
│ │ │ ├── AppIcon.solidimagestack/
│ │ │ │ ├── Back.solidimagestacklayer/
│ │ │ │ │ ├── Content.imageset/
│ │ │ │ │ │ └── Contents.json
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── Contents.json
│ │ │ │ ├── Front.solidimagestacklayer/
│ │ │ │ │ ├── Content.imageset/
│ │ │ │ │ │ └── Contents.json
│ │ │ │ │ └── Contents.json
│ │ │ │ └── Middle.solidimagestacklayer/
│ │ │ │ ├── Content.imageset/
│ │ │ │ │ └── Contents.json
│ │ │ │ └── Contents.json
│ │ │ └── Contents.json
│ │ ├── ContentView.swift
│ │ ├── ControllerManager.swift
│ │ ├── DualSenseApp.swift
│ │ ├── Info.plist
│ │ └── Preview Content/
│ │ └── Preview Assets.xcassets/
│ │ └── Contents.json
│ ├── DualSense.xcodeproj/
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace/
│ │ └── contents.xcworkspacedata
│ ├── Packages/
│ │ └── RealityKitContent/
│ │ ├── Package.realitycomposerpro/
│ │ │ ├── ProjectData/
│ │ │ │ └── main.json
│ │ │ └── WorkspaceData/
│ │ │ ├── SceneMetadataList.json
│ │ │ └── Settings.rcprojectdata
│ │ ├── Package.swift
│ │ ├── README.md
│ │ └── Sources/
│ │ └── RealityKitContent/
│ │ ├── RealityKitContent.rkassets/
│ │ │ ├── Materials/
│ │ │ │ └── GridMaterial.usda
│ │ │ └── Scene.usda
│ │ └── RealityKitContent.swift
│ └── README.md
├── FearAndGreed/
│ ├── FearAndGreed/
│ │ ├── Assets.xcassets/
│ │ │ ├── AppIcon.solidimagestack/
│ │ │ │ ├── Back.solidimagestacklayer/
│ │ │ │ │ ├── Content.imageset/
│ │ │ │ │ │ └── Contents.json
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── Contents.json
│ │ │ │ ├── Front.solidimagestacklayer/
│ │ │ │ │ ├── Content.imageset/
│ │ │ │ │ │ └── Contents.json
│ │ │ │ │ └── Contents.json
│ │ │ │ └── Middle.solidimagestacklayer/
│ │ │ │ ├── Content.imageset/
│ │ │ │ │ └── Contents.json
│ │ │ │ └── Contents.json
│ │ │ └── Contents.json
│ │ ├── Colors.swift
│ │ ├── ContentView.swift
│ │ ├── FearAndGreedApp.swift
│ │ ├── FearGreedIndexService.swift
│ │ ├── FearGreedIndexViewModel.swift
│ │ ├── Info.plist
│ │ └── Preview Content/
│ │ └── Preview Assets.xcassets/
│ │ └── Contents.json
│ ├── FearAndGreed.xcodeproj/
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace/
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata/
│ │ └── IDEWorkspaceChecks.plist
│ ├── Packages/
│ │ └── RealityKitContent/
│ │ ├── Package.realitycomposerpro/
│ │ │ ├── ProjectData/
│ │ │ │ └── main.json
│ │ │ └── WorkspaceData/
│ │ │ ├── SceneMetadataList.json
│ │ │ └── Settings.rcprojectdata
│ │ ├── Package.swift
│ │ ├── README.md
│ │ └── Sources/
│ │ └── RealityKitContent/
│ │ ├── RealityKitContent.rkassets/
│ │ │ ├── Materials/
│ │ │ │ └── GridMaterial.usda
│ │ │ └── Scene.usda
│ │ └── RealityKitContent.swift
│ └── README.md
├── HandTracking/
│ ├── HandTracking/
│ │ ├── Assets.xcassets/
│ │ │ ├── AppIcon.solidimagestack/
│ │ │ │ ├── Back.solidimagestacklayer/
│ │ │ │ │ ├── Content.imageset/
│ │ │ │ │ │ └── Contents.json
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── Contents.json
│ │ │ │ ├── Front.solidimagestacklayer/
│ │ │ │ │ ├── Content.imageset/
│ │ │ │ │ │ └── Contents.json
│ │ │ │ │ └── Contents.json
│ │ │ │ └── Middle.solidimagestacklayer/
│ │ │ │ ├── Content.imageset/
│ │ │ │ │ └── Contents.json
│ │ │ │ └── Contents.json
│ │ │ └── Contents.json
│ │ ├── ContentView.swift
│ │ ├── Extensions.swift
│ │ ├── HandTrackingApp.swift
│ │ ├── HandTrackingModel.swift
│ │ ├── ImmersiveView.swift
│ │ ├── Info.plist
│ │ └── Preview Content/
│ │ └── Preview Assets.xcassets/
│ │ └── Contents.json
│ ├── HandTracking.xcodeproj/
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace/
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata/
│ │ └── IDEWorkspaceChecks.plist
│ ├── Packages/
│ │ └── RealityKitContent/
│ │ ├── Package.realitycomposerpro/
│ │ │ ├── ProjectData/
│ │ │ │ └── main.json
│ │ │ └── WorkspaceData/
│ │ │ ├── SceneMetadataList.json
│ │ │ └── Settings.rcprojectdata
│ │ ├── Package.swift
│ │ ├── README.md
│ │ └── Sources/
│ │ └── RealityKitContent/
│ │ ├── RealityKitContent.rkassets/
│ │ │ ├── Immersive.usda
│ │ │ ├── Materials/
│ │ │ │ └── GridMaterial.usda
│ │ │ └── Scene.usda
│ │ └── RealityKitContent.swift
│ └── README.md
├── LICENSE
├── LLLM/
│ ├── LLLM/
│ │ ├── APIResponseService.swift
│ │ ├── APIResponseView.swift
│ │ ├── APIResponseViewModel.swift
│ │ ├── Assets.xcassets/
│ │ │ ├── AppIcon.solidimagestack/
│ │ │ │ ├── Back.solidimagestacklayer/
│ │ │ │ │ ├── Content.imageset/
│ │ │ │ │ │ └── Contents.json
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── Contents.json
│ │ │ │ ├── Front.solidimagestacklayer/
│ │ │ │ │ ├── Content.imageset/
│ │ │ │ │ │ └── Contents.json
│ │ │ │ │ └── Contents.json
│ │ │ │ └── Middle.solidimagestacklayer/
│ │ │ │ ├── Content.imageset/
│ │ │ │ │ └── Contents.json
│ │ │ │ └── Contents.json
│ │ │ └── Contents.json
│ │ ├── Info.plist
│ │ ├── LLLMApp.swift
│ │ ├── Preview Content/
│ │ │ └── Preview Assets.xcassets/
│ │ │ └── Contents.json
│ │ └── SearchBar.swift
│ ├── LLLM.xcodeproj/
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace/
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata/
│ │ └── IDEWorkspaceChecks.plist
│ ├── Packages/
│ │ └── RealityKitContent/
│ │ ├── Package.realitycomposerpro/
│ │ │ ├── ProjectData/
│ │ │ │ └── main.json
│ │ │ └── WorkspaceData/
│ │ │ ├── SceneMetadataList.json
│ │ │ └── Settings.rcprojectdata
│ │ ├── Package.swift
│ │ ├── README.md
│ │ └── Sources/
│ │ └── RealityKitContent/
│ │ ├── RealityKitContent.rkassets/
│ │ │ ├── Immersive.usda
│ │ │ ├── Materials/
│ │ │ │ └── GridMaterial.usda
│ │ │ └── Scene.usda
│ │ └── RealityKitContent.swift
│ └── README.md
├── Music Kit/
│ ├── Music Kit/
│ │ ├── AppModel.swift
│ │ ├── Assets.xcassets/
│ │ │ ├── AccentColor.colorset/
│ │ │ │ └── Contents.json
│ │ │ ├── AppIcon.solidimagestack/
│ │ │ │ ├── Back.solidimagestacklayer/
│ │ │ │ │ ├── Content.imageset/
│ │ │ │ │ │ └── Contents.json
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── Contents.json
│ │ │ │ ├── Front.solidimagestacklayer/
│ │ │ │ │ ├── Content.imageset/
│ │ │ │ │ │ └── Contents.json
│ │ │ │ │ └── Contents.json
│ │ │ │ └── Middle.solidimagestacklayer/
│ │ │ │ ├── Content.imageset/
│ │ │ │ │ └── Contents.json
│ │ │ │ └── Contents.json
│ │ │ └── Contents.json
│ │ ├── ContentView.swift
│ │ ├── Extensions.swift
│ │ ├── Helpers.swift
│ │ ├── ImmersiveView.swift
│ │ ├── Info.plist
│ │ ├── MusicManager.swift
│ │ ├── Music_KitApp.swift
│ │ └── ToggleImmersiveSpaceButton.swift
│ ├── Music Kit.xcodeproj/
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace/
│ │ └── contents.xcworkspacedata
│ ├── Packages/
│ │ └── RealityKitContent/
│ │ ├── Package.realitycomposerpro/
│ │ │ ├── ProjectData/
│ │ │ │ └── main.json
│ │ │ └── WorkspaceData/
│ │ │ ├── SceneMetadataList.json
│ │ │ └── Settings.rcprojectdata
│ │ ├── Package.swift
│ │ ├── README.md
│ │ └── Sources/
│ │ └── RealityKitContent/
│ │ ├── RealityKitContent.rkassets/
│ │ │ ├── Ground/
│ │ │ │ ├── DefaultAttenuationMap.exr
│ │ │ │ └── Ground.usda
│ │ │ ├── Immersive.usda
│ │ │ └── SkyDome.usdz
│ │ └── RealityKitContent.swift
│ └── README.md
├── Pencil/
│ ├── Packages/
│ │ └── RealityKitContent/
│ │ ├── Package.realitycomposerpro/
│ │ │ ├── ProjectData/
│ │ │ │ └── main.json
│ │ │ └── WorkspaceData/
│ │ │ ├── SceneMetadataList.json
│ │ │ └── Settings.rcprojectdata
│ │ ├── Package.swift
│ │ ├── README.md
│ │ └── Sources/
│ │ └── RealityKitContent/
│ │ ├── RealityKitContent.rkassets/
│ │ │ ├── Immersive.usda
│ │ │ ├── Materials/
│ │ │ │ └── GridMaterial.usda
│ │ │ └── Scene.usda
│ │ └── RealityKitContent.swift
│ ├── Pencil/
│ │ ├── Assets.xcassets/
│ │ │ ├── AppIcon.solidimagestack/
│ │ │ │ ├── Back.solidimagestacklayer/
│ │ │ │ │ ├── Content.imageset/
│ │ │ │ │ │ └── Contents.json
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── Contents.json
│ │ │ │ ├── Front.solidimagestacklayer/
│ │ │ │ │ ├── Content.imageset/
│ │ │ │ │ │ └── Contents.json
│ │ │ │ │ └── Contents.json
│ │ │ │ └── Middle.solidimagestacklayer/
│ │ │ │ ├── Content.imageset/
│ │ │ │ │ └── Contents.json
│ │ │ │ └── Contents.json
│ │ │ └── Contents.json
│ │ ├── ContentView.swift
│ │ ├── Info.plist
│ │ ├── PencilApp.swift
│ │ └── Preview Content/
│ │ └── Preview Assets.xcassets/
│ │ └── Contents.json
│ ├── Pencil.xcodeproj/
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace/
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata/
│ │ └── IDEWorkspaceChecks.plist
│ └── README.md
├── Plane Detection/
│ ├── Packages/
│ │ └── RealityKitContent/
│ │ ├── Package.realitycomposerpro/
│ │ │ ├── ProjectData/
│ │ │ │ └── main.json
│ │ │ └── WorkspaceData/
│ │ │ ├── SceneMetadataList.json
│ │ │ └── Settings.rcprojectdata
│ │ ├── Package.swift
│ │ ├── README.md
│ │ └── Sources/
│ │ └── RealityKitContent/
│ │ ├── RealityKitContent.rkassets/
│ │ │ ├── Immersive.usda
│ │ │ ├── Materials/
│ │ │ │ └── GridMaterial.usda
│ │ │ └── Scene.usda
│ │ └── RealityKitContent.swift
│ ├── Plane Detection/
│ │ ├── Assets.xcassets/
│ │ │ ├── AppIcon.solidimagestack/
│ │ │ │ ├── Back.solidimagestacklayer/
│ │ │ │ │ ├── Content.imageset/
│ │ │ │ │ │ └── Contents.json
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── Contents.json
│ │ │ │ ├── Front.solidimagestacklayer/
│ │ │ │ │ ├── Content.imageset/
│ │ │ │ │ │ └── Contents.json
│ │ │ │ │ └── Contents.json
│ │ │ │ └── Middle.solidimagestacklayer/
│ │ │ │ ├── Content.imageset/
│ │ │ │ │ └── Contents.json
│ │ │ │ └── Contents.json
│ │ │ └── Contents.json
│ │ ├── Colors.swift
│ │ ├── ContentView.swift
│ │ ├── ImmersiveView.swift
│ │ ├── Info.plist
│ │ ├── PlaneDetectionModel.swift
│ │ ├── Plane_DetectionApp.swift
│ │ └── Preview Content/
│ │ └── Preview Assets.xcassets/
│ │ └── Contents.json
│ ├── Plane Detection.xcodeproj/
│ │ ├── project.pbxproj
│ │ └── project.xcworkspace/
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata/
│ │ └── IDEWorkspaceChecks.plist
│ └── README.md
├── README.md
├── Timer Vision/
│ ├── Packages/
│ │ └── RealityKitContent/
│ │ ├── Package.realitycomposerpro/
│ │ │ ├── ProjectData/
│ │ │ │ └── main.json
│ │ │ └── WorkspaceData/
│ │ │ ├── SceneMetadataList.json
│ │ │ └── Settings.rcprojectdata
│ │ ├── Package.swift
│ │ ├── README.md
│ │ └── Sources/
│ │ └── RealityKitContent/
│ │ ├── RealityKitContent.rkassets/
│ │ │ ├── Materials/
│ │ │ │ └── GridMaterial.usda
│ │ │ └── Scene.usda
│ │ └── RealityKitContent.swift
│ ├── README.md
│ ├── Timer Vision/
│ │ ├── Assets.xcassets/
│ │ │ ├── AppIcon.solidimagestack/
│ │ │ │ ├── Back.solidimagestacklayer/
│ │ │ │ │ ├── Content.imageset/
│ │ │ │ │ │ └── Contents.json
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ └── bg-green.imageset/
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── Contents.json
│ │ │ │ ├── Front.solidimagestacklayer/
│ │ │ │ │ ├── Content.imageset/
│ │ │ │ │ │ └── Contents.json
│ │ │ │ │ └── Contents.json
│ │ │ │ └── Middle.solidimagestacklayer/
│ │ │ │ ├── Content.imageset/
│ │ │ │ │ └── Contents.json
│ │ │ │ └── Contents.json
│ │ │ └── Contents.json
│ │ ├── ContentView.swift
│ │ ├── Info.plist
│ │ ├── Preview Content/
│ │ │ └── Preview Assets.xcassets/
│ │ │ └── Contents.json
│ │ ├── TimerViewModel.swift
│ │ └── Timer_VisionApp.swift
│ └── Timer Vision.xcodeproj/
│ ├── project.pbxproj
│ └── project.xcworkspace/
│ ├── contents.xcworkspacedata
│ └── xcshareddata/
│ └── IDEWorkspaceChecks.plist
├── WebSockets/
│ ├── Packages/
│ │ └── RealityKitContent/
│ │ ├── Package.realitycomposerpro/
│ │ │ ├── ProjectData/
│ │ │ │ └── main.json
│ │ │ └── WorkspaceData/
│ │ │ ├── SceneMetadataList.json
│ │ │ └── Settings.rcprojectdata
│ │ ├── Package.swift
│ │ ├── README.md
│ │ └── Sources/
│ │ └── RealityKitContent/
│ │ ├── RealityKitContent.rkassets/
│ │ │ ├── Materials/
│ │ │ │ └── GridMaterial.usda
│ │ │ └── Scene.usda
│ │ └── RealityKitContent.swift
│ ├── README.md
│ ├── WebSockets/
│ │ ├── Assets.xcassets/
│ │ │ ├── AppIcon.solidimagestack/
│ │ │ │ ├── Back.solidimagestacklayer/
│ │ │ │ │ ├── Content.imageset/
│ │ │ │ │ │ └── Contents.json
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── Contents.json
│ │ │ │ ├── Front.solidimagestacklayer/
│ │ │ │ │ ├── Content.imageset/
│ │ │ │ │ │ └── Contents.json
│ │ │ │ │ └── Contents.json
│ │ │ │ └── Middle.solidimagestacklayer/
│ │ │ │ ├── Content.imageset/
│ │ │ │ │ └── Contents.json
│ │ │ │ └── Contents.json
│ │ │ └── Contents.json
│ │ ├── ContentView.swift
│ │ ├── Info.plist
│ │ ├── Preview Content/
│ │ │ └── Preview Assets.xcassets/
│ │ │ └── Contents.json
│ │ ├── WebSocketService.swift
│ │ └── WebSocketsApp.swift
│ └── WebSockets.xcodeproj/
│ ├── project.pbxproj
│ └── project.xcworkspace/
│ ├── contents.xcworkspacedata
│ └── xcshareddata/
│ └── IDEWorkspaceChecks.plist
└── bsky 3D/
├── Packages/
│ └── RealityKitContent/
│ ├── Package.realitycomposerpro/
│ │ ├── ProjectData/
│ │ │ └── main.json
│ │ └── WorkspaceData/
│ │ ├── SceneMetadataList.json
│ │ └── Settings.rcprojectdata
│ ├── Package.swift
│ ├── README.md
│ └── Sources/
│ └── RealityKitContent/
│ ├── RealityKitContent.rkassets/
│ │ ├── Ground/
│ │ │ ├── DefaultAttenuationMap.exr
│ │ │ └── Ground.usda
│ │ ├── Immersive.usda
│ │ └── SkyDome.usdz
│ └── RealityKitContent.swift
├── README.md
├── bsky 3D/
│ ├── AppModel.swift
│ ├── Assets.xcassets/
│ │ ├── AccentColor.colorset/
│ │ │ └── Contents.json
│ │ ├── AppIcon.solidimagestack/
│ │ │ ├── Back.solidimagestacklayer/
│ │ │ │ ├── Content.imageset/
│ │ │ │ │ └── Contents.json
│ │ │ │ └── Contents.json
│ │ │ ├── Contents.json
│ │ │ ├── Front.solidimagestacklayer/
│ │ │ │ ├── Content.imageset/
│ │ │ │ │ └── Contents.json
│ │ │ │ └── Contents.json
│ │ │ └── Middle.solidimagestacklayer/
│ │ │ ├── Content.imageset/
│ │ │ │ └── Contents.json
│ │ │ └── Contents.json
│ │ └── Contents.json
│ ├── ContentView.swift
│ ├── ImmersiveView.swift
│ ├── Info.plist
│ ├── Preview Content/
│ │ └── Preview Assets.xcassets/
│ │ └── Contents.json
│ ├── Root.swift
│ ├── ToggleImmersiveSpaceButton.swift
│ ├── WebSocketService.swift
│ └── bsky_3DApp.swift
└── bsky 3D.xcodeproj/
├── project.pbxproj
└── project.xcworkspace/
└── contents.xcworkspacedata
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
# Xcode
#
# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
## User settings
xcuserdata/
## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9)
*.xcscmblueprint
*.xccheckout
## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4)
build/
DerivedData/
*.moved-aside
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
## Obj-C/Swift specific
*.hmap
## App packaging
*.ipa
*.dSYM.zip
*.dSYM
## Playgrounds
timeline.xctimeline
playground.xcworkspace
# Swift Package Manager
#
# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.
# Packages/
# Package.pins
# Package.resolved
# *.xcodeproj
#
# Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata
# hence it is not needed unless you have added a package configuration file to your project
# .swiftpm
.build/
# CocoaPods
#
# We recommend against adding the Pods directory to your .gitignore. However
# you should judge for yourself, the pros and cons are mentioned at:
# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
#
# Pods/
#
# Add this line if you want to avoid checking in source code from the Xcode workspace
# *.xcworkspace
# Carthage
#
# Add this line if you want to avoid checking in source code from Carthage dependencies.
# Carthage/Checkouts
Carthage/Build/
# Accio dependency management
Dependencies/
.accio/
# fastlane
#
# It is recommended to not store the screenshots in the git repo.
# Instead, use fastlane to re-generate the screenshots whenever they are needed.
# For more information about the recommended setup visit:
# https://docs.fastlane.tools/best-practices/source-control/#source-control
fastlane/report.xml
fastlane/Preview.html
fastlane/screenshots/**/*.png
fastlane/test_output
# Code Injection
#
# After new code Injection tools there's a generated folder /iOSInjectionProject
# https://github.com/johnno1962/injectionforxcode
iOSInjectionProject/
.DS_Store
**/.DS_Store
**/Secrets.swift
**/*.xcuserstate
*.xcuserstate
================================================
FILE: AnchorToHead/AnchorToHead/AnchorToHeadApp.swift
================================================
//
// AnchorToHeadApp.swift
// AnchorToHead
//
// Created by IVAN CAMPOS on 2/21/24.
//
import SwiftUI
@main
struct AnchorToHeadApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
ImmersiveSpace(id: "ImmersiveSpace") {
ImmersiveView()
}
}
}
================================================
FILE: AnchorToHead/AnchorToHead/Assets.xcassets/AppIcon.solidimagestack/Back.solidimagestacklayer/Content.imageset/Contents.json
================================================
{
"images" : [
{
"idiom" : "vision",
"scale" : "2x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: AnchorToHead/AnchorToHead/Assets.xcassets/AppIcon.solidimagestack/Back.solidimagestacklayer/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: AnchorToHead/AnchorToHead/Assets.xcassets/AppIcon.solidimagestack/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
},
"layers" : [
{
"filename" : "Front.solidimagestacklayer"
},
{
"filename" : "Middle.solidimagestacklayer"
},
{
"filename" : "Back.solidimagestacklayer"
}
]
}
================================================
FILE: AnchorToHead/AnchorToHead/Assets.xcassets/AppIcon.solidimagestack/Front.solidimagestacklayer/Content.imageset/Contents.json
================================================
{
"images" : [
{
"idiom" : "vision",
"scale" : "2x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: AnchorToHead/AnchorToHead/Assets.xcassets/AppIcon.solidimagestack/Front.solidimagestacklayer/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: AnchorToHead/AnchorToHead/Assets.xcassets/AppIcon.solidimagestack/Middle.solidimagestacklayer/Content.imageset/Contents.json
================================================
{
"images" : [
{
"idiom" : "vision",
"scale" : "2x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: AnchorToHead/AnchorToHead/Assets.xcassets/AppIcon.solidimagestack/Middle.solidimagestacklayer/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: AnchorToHead/AnchorToHead/Assets.xcassets/Contents.json
================================================
{
"info" : {
"version" : 1,
"author" : "xcode"
}
}
================================================
FILE: AnchorToHead/AnchorToHead/ContentView.swift
================================================
//
// ContentView.swift
// AnchorToHead
//
// Created by IVAN CAMPOS on 2/21/24.
//
import SwiftUI
import RealityKit
import RealityKitContent
struct ContentView: View {
@State private var showImmersiveSpace = false
@State private var immersiveSpaceIsShown = false
@Environment(\.openImmersiveSpace) var openImmersiveSpace
@Environment(\.dismissImmersiveSpace) var dismissImmersiveSpace
var body: some View {
VStack {
Text("Head Tracking Anchor")
Toggle("Show Immersive Space", isOn: $showImmersiveSpace)
.toggleStyle(.button)
.padding(.top, 50)
}
.padding()
.onChange(of: showImmersiveSpace) { _, newValue in
Task {
if newValue {
switch await openImmersiveSpace(id: "ImmersiveSpace") {
case .opened:
immersiveSpaceIsShown = true
case .error, .userCancelled:
fallthrough
@unknown default:
immersiveSpaceIsShown = false
showImmersiveSpace = false
}
} else if immersiveSpaceIsShown {
await dismissImmersiveSpace()
immersiveSpaceIsShown = false
}
}
}
}
}
================================================
FILE: AnchorToHead/AnchorToHead/ImmersiveView.swift
================================================
//
// ImmersiveView.swift
// AnchorToHead
//
// Created by IVAN CAMPOS on 2/21/24.
//
import SwiftUI
import RealityKit
import RealityKitContent
struct ImmersiveView: View {
@State var headTrackedEntity: Entity = {
let headAnchor = AnchorEntity(.head)
headAnchor.position = [0, -0.15, -1]
return headAnchor
}()
var body: some View {
RealityView { content in
let boxEntity = ModelEntity(
mesh: .generateBox(size: 0.1),
materials: [UnlitMaterial(color: UIColor(hex: "7DFDFE"))]
)
headTrackedEntity.addChild(boxEntity)
content.add(headTrackedEntity)
}
}
}
// Function to create UIColor from hex string
extension UIColor {
convenience init(hex: String) {
let hexString = hex.trimmingCharacters(in: .whitespacesAndNewlines)
let scanner = Scanner(string: hexString)
var color: UInt64 = 0
scanner.scanHexInt64(&color)
let r = CGFloat((color & 0xFF0000) >> 16) / 255.0
let g = CGFloat((color & 0x00FF00) >> 8) / 255.0
let b = CGFloat(color & 0x0000FF) / 255.0
self.init(red: r, green: g, blue: b, alpha: 1.0)
}
}
================================================
FILE: AnchorToHead/AnchorToHead/Info.plist
================================================
UIApplicationSceneManifest
UIApplicationPreferredDefaultSceneSessionRole
UIWindowSceneSessionRoleApplication
UIApplicationSupportsMultipleScenes
UISceneConfigurations
================================================
FILE: AnchorToHead/AnchorToHead/Preview Content/Preview Assets.xcassets/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: AnchorToHead/AnchorToHead.xcodeproj/project.pbxproj
================================================
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 56;
objects = {
/* Begin PBXBuildFile section */
3B2421A92B86D53900BDC25D /* RealityKitContent in Frameworks */ = {isa = PBXBuildFile; productRef = 3B2421A82B86D53900BDC25D /* RealityKitContent */; };
3B2421AB2B86D53900BDC25D /* AnchorToHeadApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B2421AA2B86D53900BDC25D /* AnchorToHeadApp.swift */; };
3B2421AD2B86D53900BDC25D /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B2421AC2B86D53900BDC25D /* ContentView.swift */; };
3B2421AF2B86D53900BDC25D /* ImmersiveView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B2421AE2B86D53900BDC25D /* ImmersiveView.swift */; };
3B2421B12B86D53A00BDC25D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3B2421B02B86D53A00BDC25D /* Assets.xcassets */; };
3B2421B42B86D53A00BDC25D /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3B2421B32B86D53A00BDC25D /* Preview Assets.xcassets */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
3B2421A32B86D53900BDC25D /* AnchorToHead.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AnchorToHead.app; sourceTree = BUILT_PRODUCTS_DIR; };
3B2421A72B86D53900BDC25D /* RealityKitContent */ = {isa = PBXFileReference; lastKnownFileType = wrapper; path = RealityKitContent; sourceTree = ""; };
3B2421AA2B86D53900BDC25D /* AnchorToHeadApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnchorToHeadApp.swift; sourceTree = ""; };
3B2421AC2B86D53900BDC25D /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; };
3B2421AE2B86D53900BDC25D /* ImmersiveView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImmersiveView.swift; sourceTree = ""; };
3B2421B02B86D53A00BDC25D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
3B2421B32B86D53A00BDC25D /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; };
3B2421B52B86D53A00BDC25D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
3B2421A02B86D53900BDC25D /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
3B2421A92B86D53900BDC25D /* RealityKitContent in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
3B24219A2B86D53900BDC25D = {
isa = PBXGroup;
children = (
3B2421A52B86D53900BDC25D /* AnchorToHead */,
3B2421A62B86D53900BDC25D /* Packages */,
3B2421A42B86D53900BDC25D /* Products */,
);
sourceTree = "";
};
3B2421A42B86D53900BDC25D /* Products */ = {
isa = PBXGroup;
children = (
3B2421A32B86D53900BDC25D /* AnchorToHead.app */,
);
name = Products;
sourceTree = "";
};
3B2421A52B86D53900BDC25D /* AnchorToHead */ = {
isa = PBXGroup;
children = (
3B2421AA2B86D53900BDC25D /* AnchorToHeadApp.swift */,
3B2421AC2B86D53900BDC25D /* ContentView.swift */,
3B2421AE2B86D53900BDC25D /* ImmersiveView.swift */,
3B2421B02B86D53A00BDC25D /* Assets.xcassets */,
3B2421B52B86D53A00BDC25D /* Info.plist */,
3B2421B22B86D53A00BDC25D /* Preview Content */,
);
path = AnchorToHead;
sourceTree = "";
};
3B2421A62B86D53900BDC25D /* Packages */ = {
isa = PBXGroup;
children = (
3B2421A72B86D53900BDC25D /* RealityKitContent */,
);
path = Packages;
sourceTree = "";
};
3B2421B22B86D53A00BDC25D /* Preview Content */ = {
isa = PBXGroup;
children = (
3B2421B32B86D53A00BDC25D /* Preview Assets.xcassets */,
);
path = "Preview Content";
sourceTree = "";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
3B2421A22B86D53900BDC25D /* AnchorToHead */ = {
isa = PBXNativeTarget;
buildConfigurationList = 3B2421B82B86D53A00BDC25D /* Build configuration list for PBXNativeTarget "AnchorToHead" */;
buildPhases = (
3B24219F2B86D53900BDC25D /* Sources */,
3B2421A02B86D53900BDC25D /* Frameworks */,
3B2421A12B86D53900BDC25D /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = AnchorToHead;
packageProductDependencies = (
3B2421A82B86D53900BDC25D /* RealityKitContent */,
);
productName = AnchorToHead;
productReference = 3B2421A32B86D53900BDC25D /* AnchorToHead.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
3B24219B2B86D53900BDC25D /* Project object */ = {
isa = PBXProject;
attributes = {
BuildIndependentTargetsInParallel = 1;
LastSwiftUpdateCheck = 1520;
LastUpgradeCheck = 1520;
TargetAttributes = {
3B2421A22B86D53900BDC25D = {
CreatedOnToolsVersion = 15.2;
};
};
};
buildConfigurationList = 3B24219E2B86D53900BDC25D /* Build configuration list for PBXProject "AnchorToHead" */;
compatibilityVersion = "Xcode 14.0";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = 3B24219A2B86D53900BDC25D;
productRefGroup = 3B2421A42B86D53900BDC25D /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
3B2421A22B86D53900BDC25D /* AnchorToHead */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
3B2421A12B86D53900BDC25D /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
3B2421B42B86D53A00BDC25D /* Preview Assets.xcassets in Resources */,
3B2421B12B86D53A00BDC25D /* Assets.xcassets in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
3B24219F2B86D53900BDC25D /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
3B2421AD2B86D53900BDC25D /* ContentView.swift in Sources */,
3B2421AB2B86D53900BDC25D /* AnchorToHeadApp.swift in Sources */,
3B2421AF2B86D53900BDC25D /* ImmersiveView.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
3B2421B62B86D53A00BDC25D /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu17;
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;
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = xros;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
XROS_DEPLOYMENT_TARGET = 1.0;
};
name = Debug;
};
3B2421B72B86D53A00BDC25D /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu17;
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;
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = xros;
SWIFT_COMPILATION_MODE = wholemodule;
VALIDATE_PRODUCT = YES;
XROS_DEPLOYMENT_TARGET = 1.0;
};
name = Release;
};
3B2421B92B86D53A00BDC25D /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_ASSET_PATHS = "\"AnchorToHead/Preview Content\"";
DEVELOPMENT_TEAM = 2DJDH872JZ;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "$(TARGET_NAME)/Info.plist";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.ivancampos.AnchorToHead;
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "xros xrsimulator";
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2,7";
};
name = Debug;
};
3B2421BA2B86D53A00BDC25D /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_ASSET_PATHS = "\"AnchorToHead/Preview Content\"";
DEVELOPMENT_TEAM = 2DJDH872JZ;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "$(TARGET_NAME)/Info.plist";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.ivancampos.AnchorToHead;
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "xros xrsimulator";
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2,7";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
3B24219E2B86D53900BDC25D /* Build configuration list for PBXProject "AnchorToHead" */ = {
isa = XCConfigurationList;
buildConfigurations = (
3B2421B62B86D53A00BDC25D /* Debug */,
3B2421B72B86D53A00BDC25D /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
3B2421B82B86D53A00BDC25D /* Build configuration list for PBXNativeTarget "AnchorToHead" */ = {
isa = XCConfigurationList;
buildConfigurations = (
3B2421B92B86D53A00BDC25D /* Debug */,
3B2421BA2B86D53A00BDC25D /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
/* Begin XCSwiftPackageProductDependency section */
3B2421A82B86D53900BDC25D /* RealityKitContent */ = {
isa = XCSwiftPackageProductDependency;
productName = RealityKitContent;
};
/* End XCSwiftPackageProductDependency section */
};
rootObject = 3B24219B2B86D53900BDC25D /* Project object */;
}
================================================
FILE: AnchorToHead/AnchorToHead.xcodeproj/project.xcworkspace/contents.xcworkspacedata
================================================
================================================
FILE: AnchorToHead/AnchorToHead.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
================================================
IDEDidComputeMac32BitWarning
================================================
FILE: AnchorToHead/Packages/RealityKitContent/Package.realitycomposerpro/ProjectData/main.json
================================================
{
"pathsToIds" : {
"\/RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/GridMaterial.usda" : "CB766F92-EE55-4A63-9401-E7B8C009764D",
"\/RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/Immersive.usda" : "65F6F990-A780-4474-B78B-572E0E4E273D",
"\/RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/Scene.usda" : "0A9B4653-B11E-4D6A-850E-C6FCB621626C",
"\/RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/Untitled Scene.usda" : "D560BB77-AAF3-4BDE-B7C4-989332A4688B",
"RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/GridMaterial.usda" : "66168B71-AB05-424E-8B6C-D33D6E61B08F",
"RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/Immersive.usda" : "AF09ED6F-1707-48FD-8720-65B998362C09",
"RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/Scene.usda" : "D66134B1-3681-4A8E-AFE5-29F257229F3B"
}
}
================================================
FILE: AnchorToHead/Packages/RealityKitContent/Package.realitycomposerpro/WorkspaceData/SceneMetadataList.json
================================================
{
"0A9B4653-B11E-4D6A-850E-C6FCB621626C" : {
"cameraTransform" : [
1,
0,
0,
0,
0,
0.86602545,
-0.49999994,
0,
0,
0.49999994,
0.86602545,
0,
0.0035969093,
0.35542378,
0.62919164,
1
],
"objectMetadataList" : [
[
"0A9B4653-B11E-4D6A-850E-C6FCB621626C",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
},
"65F6F990-A780-4474-B78B-572E0E4E273D" : {
"cameraTransform" : [
1,
0,
-0,
0,
-0,
0.86602545,
-0.49999988,
0,
0,
0.49999988,
0.86602545,
0,
1.1972517e-08,
2.6179132,
0.43191218,
1
],
"objectMetadataList" : [
[
"65F6F990-A780-4474-B78B-572E0E4E273D",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
},
"66168B71-AB05-424E-8B6C-D33D6E61B08F" : {
"cameraTransform" : [
1,
0,
-0,
0,
-0,
0.8660254,
-0.5,
0,
0,
0.5,
0.8660254,
0,
0,
0.23875366,
0.4135335,
1
],
"objectMetadataList" : [
[
"66168B71-AB05-424E-8B6C-D33D6E61B08F",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
},
"AF09ED6F-1707-48FD-8720-65B998362C09" : {
"cameraTransform" : [
1,
0,
-0,
0,
-0,
0.7071069,
-0.7071067,
0,
0,
0.7071067,
0.7071069,
0,
0,
2.8836339,
-0.107588194,
1
],
"objectMetadataList" : [
[
"AF09ED6F-1707-48FD-8720-65B998362C09",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
},
[
"AF09ED6F-1707-48FD-8720-65B998362C09",
"Root",
"Sphere_Left"
],
{
"isExpanded" : true,
"isLocked" : false
},
[
"AF09ED6F-1707-48FD-8720-65B998362C09",
"Root",
"Sphere_Right"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
},
"CB766F92-EE55-4A63-9401-E7B8C009764D" : {
"cameraTransform" : [
1,
0,
-0,
0,
-0,
0.8660253,
-0.5000001,
0,
0,
0.5000001,
0.8660253,
0,
0,
0.27093494,
0.4692731,
1
],
"objectMetadataList" : [
[
"CB766F92-EE55-4A63-9401-E7B8C009764D",
"Root",
"GridMaterial"
],
{
"isExpanded" : true,
"isLocked" : false
},
[
"CB766F92-EE55-4A63-9401-E7B8C009764D",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
},
"D560BB77-AAF3-4BDE-B7C4-989332A4688B" : {
"cameraTransform" : [
1,
0,
-0,
0,
-0,
0.8660253,
-0.5000001,
0,
0,
0.5000001,
0.8660253,
0,
0,
0.27093494,
0.4692731,
1
],
"objectMetadataList" : [
]
},
"D66134B1-3681-4A8E-AFE5-29F257229F3B" : {
"cameraTransform" : [
1,
0,
-0,
0,
-0,
0.7071069,
-0.7071067,
0,
0,
0.7071067,
0.7071069,
0,
0,
0.26894823,
0.26934713,
1
],
"objectMetadataList" : [
[
"D66134B1-3681-4A8E-AFE5-29F257229F3B",
"Root",
"GridMaterial",
"GridMaterial"
],
{
"isExpanded" : true,
"isLocked" : false
},
[
"D66134B1-3681-4A8E-AFE5-29F257229F3B",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
}
}
================================================
FILE: AnchorToHead/Packages/RealityKitContent/Package.realitycomposerpro/WorkspaceData/Settings.rcprojectdata
================================================
{
"cameraPresets" : {
},
"secondaryToolbarData" : {
"isGridVisible" : true,
"sceneReverbPreset" : -1
},
"unitDefaults" : {
"°" : "°",
"kg" : "g",
"m" : "cm",
"m\/s" : "m\/s",
"m\/s²" : "m\/s²",
"s" : "s"
}
}
================================================
FILE: AnchorToHead/Packages/RealityKitContent/Package.swift
================================================
// swift-tools-version:5.9
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "RealityKitContent",
products: [
// Products define the executables and libraries a package produces, and make them visible to other packages.
.library(
name: "RealityKitContent",
targets: ["RealityKitContent"]),
],
dependencies: [
// Dependencies declare other packages that this package depends on.
// .package(url: /* package url */, from: "1.0.0"),
],
targets: [
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
// Targets can depend on other targets in this package, and on products in packages this package depends on.
.target(
name: "RealityKitContent",
dependencies: []),
]
)
================================================
FILE: AnchorToHead/Packages/RealityKitContent/README.md
================================================
# RealityKitContent
A description of this package.
================================================
FILE: AnchorToHead/Packages/RealityKitContent/Sources/RealityKitContent/RealityKitContent.rkassets/Immersive.usda
================================================
#usda 1.0
(
defaultPrim = "Root"
metersPerUnit = 1
upAxis = "Y"
)
def Xform "Root"
{
reorder nameChildren = ["Sphere_Left", "Sphere_Right", "GridMaterial"]
def Sphere "Sphere_Right" (
active = true
prepend apiSchemas = ["MaterialBindingAPI"]
)
{
rel material:binding = (
bindMaterialAs = "weakerThanDescendants"
)
double radius = 0.1
quatf xformOp:orient = (1, 0, 0, 0)
float3 xformOp:scale = (1, 1, 1)
float3 xformOp:translate = (0.5, 1.5, -1.5)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
}
def Sphere "Sphere_Left" (
active = true
prepend apiSchemas = ["MaterialBindingAPI"]
)
{
rel material:binding = (
bindMaterialAs = "weakerThanDescendants"
)
double radius = 0.1
quatf xformOp:orient = (1, 0, 0, 0)
float3 xformOp:scale = (1, 1, 1)
float3 xformOp:translate = (-0.5, 1.5, -1.5)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
}
def "GridMaterial" (
active = true
prepend references = @Materials/GridMaterial.usda@
)
{
float3 xformOp:scale = (1, 1, 1)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
}
}
================================================
FILE: AnchorToHead/Packages/RealityKitContent/Sources/RealityKitContent/RealityKitContent.rkassets/Materials/GridMaterial.usda
================================================
#usda 1.0
(
defaultPrim = "Root"
metersPerUnit = 1
upAxis = "Y"
)
def Xform "Root"
{
def Material "GridMaterial"
{
reorder nameChildren = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "DefaultSurfaceShader", "MaterialXPreviewSurface", "Texcoord", "Add", "Multiply", "Fractional", "LineCounts", "Multiply_1", "Separate2", "Separate2_1", "Ifgreater", "Ifgreater_1", "Max", "Background_Color"]
token outputs:mtlx:surface.connect =
token outputs:realitykit:vertex
token outputs:surface
float2 ui:nodegraph:realitykit:subgraphOutputs:pos = (2222, 300.5)
float2 ui:nodegraph:realitykit:subgraphOutputs:size = (182, 89)
int ui:nodegraph:realitykit:subgraphOutputs:stackingOrder = 749
def Shader "DefaultSurfaceShader"
{
uniform token info:id = "UsdPreviewSurface"
color3f inputs:diffuseColor = (1, 1, 1)
float inputs:roughness = 0.75
token outputs:surface
}
def Shader "MaterialXPreviewSurface"
{
uniform token info:id = "ND_UsdPreviewSurface_surfaceshader"
float inputs:clearcoat
float inputs:clearcoatRoughness
color3f inputs:diffuseColor.connect =
color3f inputs:emissiveColor
float inputs:ior
float inputs:metallic = 0.15
float3 inputs:normal
float inputs:occlusion
float inputs:opacity
float inputs:opacityThreshold
float inputs:roughness = 0.5
token outputs:out
float2 ui:nodegraph:node:pos = (1967, 300.5)
float2 ui:nodegraph:node:size = (208, 297)
int ui:nodegraph:node:stackingOrder = 870
string[] ui:nodegraph:realitykit:node:attributesShowingChildren = ["Advanced"]
}
def Shader "Texcoord"
{
uniform token info:id = "ND_texcoord_vector2"
float2 outputs:out
float2 ui:nodegraph:node:pos = (94.14453, 35.29297)
float2 ui:nodegraph:node:size = (182, 43)
int ui:nodegraph:node:stackingOrder = 1358
}
def Shader "Multiply"
{
uniform token info:id = "ND_multiply_vector2"
float2 inputs:in1.connect =
float2 inputs:in2 = (32, 15)
float2 inputs:in2.connect =
float2 outputs:out
float2 ui:nodegraph:node:pos = (275.64453, 47.29297)
float2 ui:nodegraph:node:size = (61, 36)
int ui:nodegraph:node:stackingOrder = 1348
string[] ui:nodegraph:realitykit:node:attributesShowingChildren = ["inputs:in2"]
}
def Shader "Fractional"
{
uniform token info:id = "ND_realitykit_fractional_vector2"
float2 inputs:in.connect =
float2 outputs:out
float2 ui:nodegraph:node:pos = (440.5, 49.5)
float2 ui:nodegraph:node:size = (155, 99)
int ui:nodegraph:node:stackingOrder = 1345
}
def Shader "BaseColor"
{
uniform token info:id = "ND_constant_color3"
color3f inputs:value = (0.89737034, 0.89737034, 0.89737034) (
colorSpace = "Input - Texture - sRGB - sRGB"
)
color3f inputs:value.connect = None
color3f outputs:out
float2 ui:nodegraph:node:pos = (1537.5977, 363.07812)
float2 ui:nodegraph:node:size = (150, 43)
int ui:nodegraph:node:stackingOrder = 1353
}
def Shader "LineColor"
{
uniform token info:id = "ND_constant_color3"
color3f inputs:value = (0.55945957, 0.55945957, 0.55945957) (
colorSpace = "Input - Texture - sRGB - sRGB"
)
color3f inputs:value.connect = None
color3f outputs:out
float2 ui:nodegraph:node:pos = (1536.9844, 287.86328)
float2 ui:nodegraph:node:size = (146, 43)
int ui:nodegraph:node:stackingOrder = 1355
}
def Shader "LineWidths"
{
uniform token info:id = "ND_combine2_vector2"
float inputs:in1 = 0.1
float inputs:in2 = 0.1
float2 outputs:out
float2 ui:nodegraph:node:pos = (443.64453, 233.79297)
float2 ui:nodegraph:node:size = (151, 43)
int ui:nodegraph:node:stackingOrder = 1361
}
def Shader "LineCounts"
{
uniform token info:id = "ND_combine2_vector2"
float inputs:in1 = 24
float inputs:in2 = 12
float2 outputs:out
float2 ui:nodegraph:node:pos = (94.14453, 138.29297)
float2 ui:nodegraph:node:size = (153, 43)
int ui:nodegraph:node:stackingOrder = 1359
}
def Shader "Remap"
{
uniform token info:id = "ND_remap_color3"
color3f inputs:in.connect =
color3f inputs:inhigh.connect = None
color3f inputs:inlow.connect = None
color3f inputs:outhigh.connect =
color3f inputs:outlow.connect =
color3f outputs:out
float2 ui:nodegraph:node:pos = (1755.5, 300.5)
float2 ui:nodegraph:node:size = (95, 171)
int ui:nodegraph:node:stackingOrder = 1282
string[] ui:nodegraph:realitykit:node:attributesShowingChildren = ["inputs:outlow"]
}
def Shader "Separate2"
{
uniform token info:id = "ND_separate2_vector2"
float2 inputs:in.connect =
float outputs:outx
float outputs:outy
float2 ui:nodegraph:node:pos = (1212.6445, 128.91797)
float2 ui:nodegraph:node:size = (116, 117)
int ui:nodegraph:node:stackingOrder = 1363
}
def Shader "Combine3"
{
uniform token info:id = "ND_combine3_color3"
float inputs:in1.connect =
float inputs:in2.connect =
float inputs:in3.connect =
color3f outputs:out
float2 ui:nodegraph:node:pos = (1578.1445, 128.91797)
float2 ui:nodegraph:node:size = (146, 54)
int ui:nodegraph:node:stackingOrder = 1348
}
def Shader "Range"
{
uniform token info:id = "ND_range_vector2"
bool inputs:doclamp = 1
float2 inputs:gamma = (2, 2)
float2 inputs:in.connect =
float2 inputs:inhigh.connect =
float2 inputs:inlow = (0.02, 0.02)
float2 inputs:outhigh
float2 inputs:outlow
float2 outputs:out
float2 ui:nodegraph:node:pos = (990.64453, 128.91797)
float2 ui:nodegraph:node:size = (98, 207)
int ui:nodegraph:node:stackingOrder = 1364
}
def Shader "Subtract"
{
uniform token info:id = "ND_subtract_vector2"
float2 inputs:in1.connect =
float2 inputs:in2.connect =
float2 outputs:out
float2 ui:nodegraph:node:pos = (612.64453, 87.04297)
float2 ui:nodegraph:node:size = (63, 36)
int ui:nodegraph:node:stackingOrder = 1348
}
def Shader "Absval"
{
uniform token info:id = "ND_absval_vector2"
float2 inputs:in.connect =
float2 outputs:out
float2 ui:nodegraph:node:pos = (765.64453, 87.04297)
float2 ui:nodegraph:node:size = (123, 43)
int ui:nodegraph:node:stackingOrder = 1348
}
def Shader "Min"
{
uniform token info:id = "ND_min_float"
float inputs:in1.connect =
float inputs:in2.connect =
float outputs:out
float2 ui:nodegraph:node:pos = (1388.1445, 128.91797)
float2 ui:nodegraph:node:size = (114, 36)
int ui:nodegraph:node:stackingOrder = 1363
}
}
}
================================================
FILE: AnchorToHead/Packages/RealityKitContent/Sources/RealityKitContent/RealityKitContent.rkassets/Scene.usda
================================================
#usda 1.0
(
defaultPrim = "Root"
metersPerUnit = 1
upAxis = "Y"
)
def Xform "Root"
{
reorder nameChildren = ["GridMaterial", "Sphere"]
rel material:binding = None (
bindMaterialAs = "weakerThanDescendants"
)
def Sphere "Sphere" (
active = true
prepend apiSchemas = ["MaterialBindingAPI"]
)
{
rel material:binding = (
bindMaterialAs = "weakerThanDescendants"
)
double radius = 0.05
quatf xformOp:orient = (1, 0, 0, 0)
float3 xformOp:scale = (1, 1, 1)
float3 xformOp:translate = (0, 0, 0.0004)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
def RealityKitComponent "Collider"
{
uint group = 1
uniform token info:id = "RealityKit.Collider"
uint mask = 4294967295
token type = "Default"
def RealityKitStruct "Shape"
{
float3 extent = (0.2, 0.2, 0.2)
float radius = 0.05
token shapeType = "Sphere"
}
}
def RealityKitComponent "InputTarget"
{
uniform token info:id = "RealityKit.InputTarget"
}
}
def "GridMaterial" (
active = true
prepend references = @Materials/GridMaterial.usda@
)
{
float3 xformOp:scale = (1, 1, 1)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
}
}
================================================
FILE: AnchorToHead/Packages/RealityKitContent/Sources/RealityKitContent/RealityKitContent.swift
================================================
import Foundation
/// Bundle for the RealityKitContent project
public let realityKitContentBundle = Bundle.module
================================================
FILE: AnchorToHead/README.md
================================================
# Anchor To Head
_Allow an entity to automatically follow your head, hands-free._
https://github.com/IvanCampos/visionOS-examples/assets/872137/5dbb1c74-0dbe-40a0-8df7-16d762ee7482
================================================
FILE: Battery Life/Battery Life/Assets.xcassets/AppIcon.solidimagestack/Back.solidimagestacklayer/Content.imageset/Contents.json
================================================
{
"images" : [
{
"idiom" : "vision",
"scale" : "2x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: Battery Life/Battery Life/Assets.xcassets/AppIcon.solidimagestack/Back.solidimagestacklayer/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: Battery Life/Battery Life/Assets.xcassets/AppIcon.solidimagestack/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
},
"layers" : [
{
"filename" : "Front.solidimagestacklayer"
},
{
"filename" : "Middle.solidimagestacklayer"
},
{
"filename" : "Back.solidimagestacklayer"
}
]
}
================================================
FILE: Battery Life/Battery Life/Assets.xcassets/AppIcon.solidimagestack/Front.solidimagestacklayer/Content.imageset/Contents.json
================================================
{
"images" : [
{
"idiom" : "vision",
"scale" : "2x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: Battery Life/Battery Life/Assets.xcassets/AppIcon.solidimagestack/Front.solidimagestacklayer/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: Battery Life/Battery Life/Assets.xcassets/AppIcon.solidimagestack/Middle.solidimagestacklayer/Content.imageset/Contents.json
================================================
{
"images" : [
{
"idiom" : "vision",
"scale" : "2x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: Battery Life/Battery Life/Assets.xcassets/AppIcon.solidimagestack/Middle.solidimagestacklayer/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: Battery Life/Battery Life/Assets.xcassets/Contents.json
================================================
{
"info" : {
"version" : 1,
"author" : "xcode"
}
}
================================================
FILE: Battery Life/Battery Life/Battery_LifeApp.swift
================================================
//
// Battery_LifeApp.swift
// Battery Life
//
// Created by IVAN CAMPOS on 3/13/24.
//
import SwiftUI
@main
struct Battery_LifeApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
.defaultSize(width: 600, height: 300)
}
}
================================================
FILE: Battery Life/Battery Life/ContentView.swift
================================================
//
// ContentView.swift
// Battery Life
//
// Created by IVAN CAMPOS on 3/13/24.
//
import SwiftUI
struct ContentView: View {
@ObservedObject var viewModel = ViewModel()
var body: some View {
VStack {
Text(batteryLevelText)
.font(.custom("SFProDisplay-Regular", size: 100))
.foregroundColor(batteryColor)
.padding()
Text(batteryStateText)
.font(.custom("SFProDisplay-Regular", size: 50))
.padding()
}
}
private var batteryLevelText: String {
let level = viewModel.batteryLevel
return level >= 0 ? "\(Int(level * 100))%" : "Unknown"
}
private var batteryColor: Color {
switch viewModel.batteryLevel {
case 0.0..<0.2: return .red
case 0.2..<0.4: return .orange
case 0.4..<0.6: return .yellow
default: return .green
}
}
private var batteryStateText: String {
switch viewModel.batteryState {
case .charging: return ""
case .unplugged: return "Unplugged"
case .full: return ""
default: return "Unknown"
}
}
}
================================================
FILE: Battery Life/Battery Life/Info.plist
================================================
UIAppFonts
SF-Pro-Display-Regular.otf
UIApplicationSceneManifest
UIApplicationPreferredDefaultSceneSessionRole
UIWindowSceneSessionRoleApplication
UIApplicationSupportsMultipleScenes
UISceneConfigurations
================================================
FILE: Battery Life/Battery Life/Preview Content/Preview Assets.xcassets/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: Battery Life/Battery Life.xcodeproj/project.pbxproj
================================================
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 56;
objects = {
/* Begin PBXBuildFile section */
3B9E088E2BA158C5008297EC /* ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B9E088D2BA158C5008297EC /* ViewModel.swift */; };
3B9E08902BA163B3008297EC /* SF-Pro-Display-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = 3B9E088F2BA163B3008297EC /* SF-Pro-Display-Regular.otf */; };
3BDFB9412B7D439600474AFB /* RealityKitContent in Frameworks */ = {isa = PBXBuildFile; productRef = 3BDFB9402B7D439600474AFB /* RealityKitContent */; };
3BDFB9432B7D439600474AFB /* Battery_LifeApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BDFB9422B7D439600474AFB /* Battery_LifeApp.swift */; };
3BDFB9452B7D439600474AFB /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BDFB9442B7D439600474AFB /* ContentView.swift */; };
3BDFB9472B7D439700474AFB /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3BDFB9462B7D439700474AFB /* Assets.xcassets */; };
3BDFB94A2B7D439700474AFB /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3BDFB9492B7D439700474AFB /* Preview Assets.xcassets */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
3B9E088D2BA158C5008297EC /* ViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = ViewModel.swift; path = ../ViewModel.swift; sourceTree = ""; };
3B9E088F2BA163B3008297EC /* SF-Pro-Display-Regular.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "SF-Pro-Display-Regular.otf"; sourceTree = ""; };
3BDFB93B2B7D439600474AFB /* Battery Life.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Battery Life.app"; sourceTree = BUILT_PRODUCTS_DIR; };
3BDFB93F2B7D439600474AFB /* RealityKitContent */ = {isa = PBXFileReference; lastKnownFileType = wrapper; path = RealityKitContent; sourceTree = ""; };
3BDFB9422B7D439600474AFB /* Battery_LifeApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Battery_LifeApp.swift; sourceTree = ""; };
3BDFB9442B7D439600474AFB /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; };
3BDFB9462B7D439700474AFB /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
3BDFB9492B7D439700474AFB /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; };
3BDFB94B2B7D439700474AFB /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
3BDFB9382B7D439600474AFB /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
3BDFB9412B7D439600474AFB /* RealityKitContent in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
3B9E08912BA1658B008297EC /* Fonts */ = {
isa = PBXGroup;
children = (
3B9E088F2BA163B3008297EC /* SF-Pro-Display-Regular.otf */,
);
path = Fonts;
sourceTree = "";
};
3BDFB9322B7D439600474AFB = {
isa = PBXGroup;
children = (
3BDFB93D2B7D439600474AFB /* Battery Life */,
3BDFB93E2B7D439600474AFB /* Packages */,
3BDFB93C2B7D439600474AFB /* Products */,
);
sourceTree = "";
};
3BDFB93C2B7D439600474AFB /* Products */ = {
isa = PBXGroup;
children = (
3BDFB93B2B7D439600474AFB /* Battery Life.app */,
);
name = Products;
sourceTree = "";
};
3BDFB93D2B7D439600474AFB /* Battery Life */ = {
isa = PBXGroup;
children = (
3B9E08912BA1658B008297EC /* Fonts */,
3BDFB9422B7D439600474AFB /* Battery_LifeApp.swift */,
3B9E088D2BA158C5008297EC /* ViewModel.swift */,
3BDFB9442B7D439600474AFB /* ContentView.swift */,
3BDFB9462B7D439700474AFB /* Assets.xcassets */,
3BDFB94B2B7D439700474AFB /* Info.plist */,
3BDFB9482B7D439700474AFB /* Preview Content */,
);
path = "Battery Life";
sourceTree = "";
};
3BDFB93E2B7D439600474AFB /* Packages */ = {
isa = PBXGroup;
children = (
3BDFB93F2B7D439600474AFB /* RealityKitContent */,
);
path = Packages;
sourceTree = "";
};
3BDFB9482B7D439700474AFB /* Preview Content */ = {
isa = PBXGroup;
children = (
3BDFB9492B7D439700474AFB /* Preview Assets.xcassets */,
);
path = "Preview Content";
sourceTree = "";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
3BDFB93A2B7D439600474AFB /* Battery Life */ = {
isa = PBXNativeTarget;
buildConfigurationList = 3BDFB94E2B7D439700474AFB /* Build configuration list for PBXNativeTarget "Battery Life" */;
buildPhases = (
3BDFB9372B7D439600474AFB /* Sources */,
3BDFB9382B7D439600474AFB /* Frameworks */,
3BDFB9392B7D439600474AFB /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = "Battery Life";
packageProductDependencies = (
3BDFB9402B7D439600474AFB /* RealityKitContent */,
);
productName = "Battery Life";
productReference = 3BDFB93B2B7D439600474AFB /* Battery Life.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
3BDFB9332B7D439600474AFB /* Project object */ = {
isa = PBXProject;
attributes = {
BuildIndependentTargetsInParallel = 1;
LastSwiftUpdateCheck = 1520;
LastUpgradeCheck = 1520;
TargetAttributes = {
3BDFB93A2B7D439600474AFB = {
CreatedOnToolsVersion = 15.2;
};
};
};
buildConfigurationList = 3BDFB9362B7D439600474AFB /* Build configuration list for PBXProject "Battery Life" */;
compatibilityVersion = "Xcode 14.0";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = 3BDFB9322B7D439600474AFB;
productRefGroup = 3BDFB93C2B7D439600474AFB /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
3BDFB93A2B7D439600474AFB /* Battery Life */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
3BDFB9392B7D439600474AFB /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
3BDFB94A2B7D439700474AFB /* Preview Assets.xcassets in Resources */,
3B9E08902BA163B3008297EC /* SF-Pro-Display-Regular.otf in Resources */,
3BDFB9472B7D439700474AFB /* Assets.xcassets in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
3BDFB9372B7D439600474AFB /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
3BDFB9452B7D439600474AFB /* ContentView.swift in Sources */,
3BDFB9432B7D439600474AFB /* Battery_LifeApp.swift in Sources */,
3B9E088E2BA158C5008297EC /* ViewModel.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
3BDFB94C2B7D439700474AFB /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu17;
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;
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = xros;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
XROS_DEPLOYMENT_TARGET = 1.0;
};
name = Debug;
};
3BDFB94D2B7D439700474AFB /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu17;
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;
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = xros;
SWIFT_COMPILATION_MODE = wholemodule;
VALIDATE_PRODUCT = YES;
XROS_DEPLOYMENT_TARGET = 1.0;
};
name = Release;
};
3BDFB94F2B7D439700474AFB /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_ASSET_PATHS = "\"Battery Life/Preview Content\"";
DEVELOPMENT_TEAM = 2DJDH872JZ;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "$(TARGET_NAME)/Info.plist";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = "com.ivancampos.Battery-Life";
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "xros xrsimulator";
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2,7";
};
name = Debug;
};
3BDFB9502B7D439700474AFB /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_ASSET_PATHS = "\"Battery Life/Preview Content\"";
DEVELOPMENT_TEAM = 2DJDH872JZ;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "$(TARGET_NAME)/Info.plist";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = "com.ivancampos.Battery-Life";
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "xros xrsimulator";
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2,7";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
3BDFB9362B7D439600474AFB /* Build configuration list for PBXProject "Battery Life" */ = {
isa = XCConfigurationList;
buildConfigurations = (
3BDFB94C2B7D439700474AFB /* Debug */,
3BDFB94D2B7D439700474AFB /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
3BDFB94E2B7D439700474AFB /* Build configuration list for PBXNativeTarget "Battery Life" */ = {
isa = XCConfigurationList;
buildConfigurations = (
3BDFB94F2B7D439700474AFB /* Debug */,
3BDFB9502B7D439700474AFB /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
/* Begin XCSwiftPackageProductDependency section */
3BDFB9402B7D439600474AFB /* RealityKitContent */ = {
isa = XCSwiftPackageProductDependency;
productName = RealityKitContent;
};
/* End XCSwiftPackageProductDependency section */
};
rootObject = 3BDFB9332B7D439600474AFB /* Project object */;
}
================================================
FILE: Battery Life/Battery Life.xcodeproj/project.xcworkspace/contents.xcworkspacedata
================================================
================================================
FILE: Battery Life/Battery Life.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
================================================
IDEDidComputeMac32BitWarning
================================================
FILE: Battery Life/Packages/RealityKitContent/Package.realitycomposerpro/ProjectData/main.json
================================================
{
"pathsToIds" : {
"\/RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/GridMaterial.usda" : "440DE5B4-E4E4-459B-AABF-9ACE96319272",
"\/RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/procedural_sphere_grid.usda" : "34C460AE-CA1B-4348-BD05-621ACBDFFE97",
"\/RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/Scene.usda" : "0A9B4653-B11E-4D6A-850E-C6FCB621626C",
"\/RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/Untitled Scene.usda" : "03E02005-EFA6-48D6-8A76-05B2822A74E9",
"RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/GridMaterial.usda" : "FBD8436F-6B8B-4B82-99B5-995D538B4704",
"RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/procedural_sphere_grid.usda" : "1CBF3893-ABFD-408C-8B91-045BFD257808",
"RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/Scene.usda" : "26DBAE76-5DD8-47B6-A085-1B4ADA111097"
}
}
================================================
FILE: Battery Life/Packages/RealityKitContent/Package.realitycomposerpro/WorkspaceData/SceneMetadataList.json
================================================
{
"0A9B4653-B11E-4D6A-850E-C6FCB621626C" : {
"cameraTransform" : [
0.9807314,
-1.9820146e-10,
-0.195361,
0,
-0.10051192,
0.85749435,
-0.5045798,
0,
0.16752096,
0.51449335,
0.84097165,
0,
0.09084191,
0.05849296,
0.13903293,
1
],
"objectMetadataList" : [
[
"0A9B4653-B11E-4D6A-850E-C6FCB621626C",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
},
[
"0A9B4653-B11E-4D6A-850E-C6FCB621626C",
"Root",
"GridMaterial"
],
{
"isExpanded" : true,
"isLocked" : false
},
[
"0A9B4653-B11E-4D6A-850E-C6FCB621626C",
"Root",
"Sphere"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
},
"1CBF3893-ABFD-408C-8B91-045BFD257808" : {
"cameraTransform" : [
0.99999994,
0,
-0,
0,
-0,
0.8660255,
-0.49999988,
0,
0,
0.49999988,
0.8660255,
0,
0,
0.27093542,
0.46927398,
1
],
"objectMetadataList" : [
]
},
"03E02005-EFA6-48D6-8A76-05B2822A74E9" : {
"cameraTransform" : [
0.99999994,
0,
-0,
0,
-0,
0.8660254,
-0.49999994,
0,
0,
0.49999994,
0.8660254,
0,
0,
0.5981957,
1.0361054,
1
],
"objectMetadataList" : [
]
},
"26DBAE76-5DD8-47B6-A085-1B4ADA111097" : {
"cameraTransform" : [
1,
0,
-0,
0,
-0,
0.7071069,
-0.7071067,
0,
0,
0.7071067,
0.7071069,
0,
0,
0.2681068,
0.26850593,
1
],
"objectMetadataList" : [
[
"26DBAE76-5DD8-47B6-A085-1B4ADA111097",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
},
"34C460AE-CA1B-4348-BD05-621ACBDFFE97" : {
"cameraTransform" : [
0.99999994,
0,
-0,
0,
-0,
0.8660255,
-0.49999988,
0,
0,
0.49999988,
0.8660255,
0,
0,
0.27093542,
0.46927398,
1
],
"objectMetadataList" : [
]
},
"440DE5B4-E4E4-459B-AABF-9ACE96319272" : {
"cameraTransform" : [
0.99999994,
0,
-0,
0,
-0,
0.8660254,
-0.49999994,
0,
0,
0.49999994,
0.8660254,
0,
0,
0.5981957,
1.0361054,
1
],
"objectMetadataList" : [
[
"440DE5B4-E4E4-459B-AABF-9ACE96319272",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
},
"FBD8436F-6B8B-4B82-99B5-995D538B4704" : {
"cameraTransform" : [
0.99999994,
0,
-0,
0,
-0,
0.8660254,
-0.49999994,
0,
0,
0.49999994,
0.8660254,
0,
0,
0.5981957,
1.0361054,
1
],
"objectMetadataList" : [
[
"FBD8436F-6B8B-4B82-99B5-995D538B4704",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
}
}
================================================
FILE: Battery Life/Packages/RealityKitContent/Package.realitycomposerpro/WorkspaceData/Settings.rcprojectdata
================================================
{
"cameraPresets" : {
},
"secondaryToolbarData" : {
"isGridVisible" : true,
"sceneReverbPreset" : -1
},
"unitDefaults" : {
"°" : "°",
"kg" : "g",
"m" : "cm",
"m\/s" : "m\/s",
"m\/s²" : "m\/s²",
"s" : "s"
}
}
================================================
FILE: Battery Life/Packages/RealityKitContent/Package.swift
================================================
// swift-tools-version:5.9
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "RealityKitContent",
products: [
// Products define the executables and libraries a package produces, and make them visible to other packages.
.library(
name: "RealityKitContent",
targets: ["RealityKitContent"]),
],
dependencies: [
// Dependencies declare other packages that this package depends on.
// .package(url: /* package url */, from: "1.0.0"),
],
targets: [
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
// Targets can depend on other targets in this package, and on products in packages this package depends on.
.target(
name: "RealityKitContent",
dependencies: []),
]
)
================================================
FILE: Battery Life/Packages/RealityKitContent/README.md
================================================
# RealityKitContent
A description of this package.
================================================
FILE: Battery Life/Packages/RealityKitContent/Sources/RealityKitContent/RealityKitContent.rkassets/Materials/GridMaterial.usda
================================================
#usda 1.0
(
defaultPrim = "Root"
metersPerUnit = 1
upAxis = "Y"
)
def Xform "Root"
{
def Material "GridMaterial"
{
reorder nameChildren = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "DefaultSurfaceShader", "MaterialXPreviewSurface", "Texcoord", "Add", "Multiply", "Fractional", "LineCounts", "Multiply_1", "Separate2", "Separate2_1", "Ifgreater", "Ifgreater_1", "Max", "Background_Color"]
token outputs:mtlx:surface.connect =
token outputs:realitykit:vertex
token outputs:surface
float2 ui:nodegraph:realitykit:subgraphOutputs:pos = (2222, 300.5)
float2 ui:nodegraph:realitykit:subgraphOutputs:size = (182, 89)
int ui:nodegraph:realitykit:subgraphOutputs:stackingOrder = 749
def Shader "DefaultSurfaceShader"
{
uniform token info:id = "UsdPreviewSurface"
color3f inputs:diffuseColor = (1, 1, 1)
float inputs:roughness = 0.75
token outputs:surface
}
def Shader "MaterialXPreviewSurface"
{
uniform token info:id = "ND_UsdPreviewSurface_surfaceshader"
float inputs:clearcoat
float inputs:clearcoatRoughness
color3f inputs:diffuseColor.connect =
color3f inputs:emissiveColor
float inputs:ior
float inputs:metallic = 0.15
float3 inputs:normal
float inputs:occlusion
float inputs:opacity
float inputs:opacityThreshold
float inputs:roughness = 0.5
token outputs:out
float2 ui:nodegraph:node:pos = (1967, 300.5)
float2 ui:nodegraph:node:size = (208, 297)
int ui:nodegraph:node:stackingOrder = 870
string[] ui:nodegraph:realitykit:node:attributesShowingChildren = ["Advanced"]
}
def Shader "Texcoord"
{
uniform token info:id = "ND_texcoord_vector2"
float2 outputs:out
float2 ui:nodegraph:node:pos = (94.14453, 35.29297)
float2 ui:nodegraph:node:size = (182, 43)
int ui:nodegraph:node:stackingOrder = 1358
}
def Shader "Multiply"
{
uniform token info:id = "ND_multiply_vector2"
float2 inputs:in1.connect =
float2 inputs:in2 = (32, 15)
float2 inputs:in2.connect =
float2 outputs:out
float2 ui:nodegraph:node:pos = (275.64453, 47.29297)
float2 ui:nodegraph:node:size = (61, 36)
int ui:nodegraph:node:stackingOrder = 1348
string[] ui:nodegraph:realitykit:node:attributesShowingChildren = ["inputs:in2"]
}
def Shader "Fractional"
{
uniform token info:id = "ND_realitykit_fractional_vector2"
float2 inputs:in.connect =
float2 outputs:out
float2 ui:nodegraph:node:pos = (440.5, 49.5)
float2 ui:nodegraph:node:size = (155, 99)
int ui:nodegraph:node:stackingOrder = 1345
}
def Shader "BaseColor"
{
uniform token info:id = "ND_constant_color3"
color3f inputs:value = (0.89737034, 0.89737034, 0.89737034) (
colorSpace = "Input - Texture - sRGB - sRGB"
)
color3f inputs:value.connect = None
color3f outputs:out
float2 ui:nodegraph:node:pos = (1537.5977, 363.07812)
float2 ui:nodegraph:node:size = (150, 43)
int ui:nodegraph:node:stackingOrder = 1353
}
def Shader "LineColor"
{
uniform token info:id = "ND_constant_color3"
color3f inputs:value = (0.55945957, 0.55945957, 0.55945957) (
colorSpace = "Input - Texture - sRGB - sRGB"
)
color3f inputs:value.connect = None
color3f outputs:out
float2 ui:nodegraph:node:pos = (1536.9844, 287.86328)
float2 ui:nodegraph:node:size = (146, 43)
int ui:nodegraph:node:stackingOrder = 1355
}
def Shader "LineWidths"
{
uniform token info:id = "ND_combine2_vector2"
float inputs:in1 = 0.1
float inputs:in2 = 0.1
float2 outputs:out
float2 ui:nodegraph:node:pos = (443.64453, 233.79297)
float2 ui:nodegraph:node:size = (151, 43)
int ui:nodegraph:node:stackingOrder = 1361
}
def Shader "LineCounts"
{
uniform token info:id = "ND_combine2_vector2"
float inputs:in1 = 24
float inputs:in2 = 12
float2 outputs:out
float2 ui:nodegraph:node:pos = (94.14453, 138.29297)
float2 ui:nodegraph:node:size = (153, 43)
int ui:nodegraph:node:stackingOrder = 1359
}
def Shader "Remap"
{
uniform token info:id = "ND_remap_color3"
color3f inputs:in.connect =
color3f inputs:inhigh.connect = None
color3f inputs:inlow.connect = None
color3f inputs:outhigh.connect =
color3f inputs:outlow.connect =
color3f outputs:out
float2 ui:nodegraph:node:pos = (1755.5, 300.5)
float2 ui:nodegraph:node:size = (95, 171)
int ui:nodegraph:node:stackingOrder = 1282
string[] ui:nodegraph:realitykit:node:attributesShowingChildren = ["inputs:outlow"]
}
def Shader "Separate2"
{
uniform token info:id = "ND_separate2_vector2"
float2 inputs:in.connect =
float outputs:outx
float outputs:outy
float2 ui:nodegraph:node:pos = (1212.6445, 128.91797)
float2 ui:nodegraph:node:size = (116, 117)
int ui:nodegraph:node:stackingOrder = 1363
}
def Shader "Combine3"
{
uniform token info:id = "ND_combine3_color3"
float inputs:in1.connect =
float inputs:in2.connect =
float inputs:in3.connect =
color3f outputs:out
float2 ui:nodegraph:node:pos = (1578.1445, 128.91797)
float2 ui:nodegraph:node:size = (146, 54)
int ui:nodegraph:node:stackingOrder = 1348
}
def Shader "Range"
{
uniform token info:id = "ND_range_vector2"
bool inputs:doclamp = 1
float2 inputs:gamma = (2, 2)
float2 inputs:in.connect =
float2 inputs:inhigh.connect =
float2 inputs:inlow = (0.02, 0.02)
float2 inputs:outhigh
float2 inputs:outlow
float2 outputs:out
float2 ui:nodegraph:node:pos = (990.64453, 128.91797)
float2 ui:nodegraph:node:size = (98, 207)
int ui:nodegraph:node:stackingOrder = 1364
}
def Shader "Subtract"
{
uniform token info:id = "ND_subtract_vector2"
float2 inputs:in1.connect =
float2 inputs:in2.connect =
float2 outputs:out
float2 ui:nodegraph:node:pos = (612.64453, 87.04297)
float2 ui:nodegraph:node:size = (63, 36)
int ui:nodegraph:node:stackingOrder = 1348
}
def Shader "Absval"
{
uniform token info:id = "ND_absval_vector2"
float2 inputs:in.connect =
float2 outputs:out
float2 ui:nodegraph:node:pos = (765.64453, 87.04297)
float2 ui:nodegraph:node:size = (123, 43)
int ui:nodegraph:node:stackingOrder = 1348
}
def Shader "Min"
{
uniform token info:id = "ND_min_float"
float inputs:in1.connect =
float inputs:in2.connect =
float outputs:out
float2 ui:nodegraph:node:pos = (1388.1445, 128.91797)
float2 ui:nodegraph:node:size = (114, 36)
int ui:nodegraph:node:stackingOrder = 1363
}
}
}
================================================
FILE: Battery Life/Packages/RealityKitContent/Sources/RealityKitContent/RealityKitContent.rkassets/Scene.usda
================================================
#usda 1.0
(
defaultPrim = "Root"
metersPerUnit = 1
upAxis = "Y"
)
def Xform "Root"
{
reorder nameChildren = ["GridMaterial", "Sphere"]
rel material:binding = None (
bindMaterialAs = "weakerThanDescendants"
)
def Sphere "Sphere" (
active = true
prepend apiSchemas = ["MaterialBindingAPI"]
)
{
rel material:binding = (
bindMaterialAs = "weakerThanDescendants"
)
double radius = 0.05
quatf xformOp:orient = (1, 0, 0, 0)
float3 xformOp:scale = (1, 1, 1)
float3 xformOp:translate = (0, 0, 0.0004)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
def RealityKitComponent "Collider"
{
uint group = 1
uniform token info:id = "RealityKit.Collider"
uint mask = 4294967295
token type = "Default"
def RealityKitStruct "Shape"
{
float3 extent = (0.2, 0.2, 0.2)
float radius = 0.05
token shapeType = "Sphere"
}
}
def RealityKitComponent "InputTarget"
{
uniform token info:id = "RealityKit.InputTarget"
}
}
def "GridMaterial" (
active = true
prepend references = @Materials/GridMaterial.usda@
)
{
float3 xformOp:scale = (1, 1, 1)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
}
}
================================================
FILE: Battery Life/Packages/RealityKitContent/Sources/RealityKitContent/RealityKitContent.swift
================================================
import Foundation
/// Bundle for the RealityKitContent project
public let realityKitContentBundle = Bundle.module
================================================
FILE: Battery Life/README.md
================================================
# Battery Life
Display the Apple Vision Pro's battery level and status
https://github.com/IvanCampos/visionOS-examples/assets/872137/e7f392f8-ea44-4ca8-9d55-457e35365acc
================================================
FILE: Battery Life/ViewModel.swift
================================================
//
// ViewModel.swift
// Battery Life
//
// Created by IVAN CAMPOS on 3/13/24.
//
import SwiftUI
// BatteryViewModel.swift
class ViewModel: ObservableObject {
@Published var batteryLevel: Float = UIDevice.current.batteryLevel
@Published var batteryState: UIDevice.BatteryState = UIDevice.current.batteryState
init() {
UIDevice.current.isBatteryMonitoringEnabled = true
updateBatteryStatus()
NotificationCenter.default.addObserver(self, selector: #selector(updateBatteryStatus), name: UIDevice.batteryLevelDidChangeNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(updateBatteryStatus), name: UIDevice.batteryStateDidChangeNotification, object: nil)
}
@objc private func updateBatteryStatus() {
self.batteryLevel = UIDevice.current.batteryLevel
self.batteryState = UIDevice.current.batteryState
}
deinit {
NotificationCenter.default.removeObserver(self)
}
}
================================================
FILE: ChatAVP/ChatAVP/Assets.xcassets/AppIcon.solidimagestack/Back.solidimagestacklayer/Content.imageset/Contents.json
================================================
{
"images" : [
{
"idiom" : "vision",
"scale" : "2x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: ChatAVP/ChatAVP/Assets.xcassets/AppIcon.solidimagestack/Back.solidimagestacklayer/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: ChatAVP/ChatAVP/Assets.xcassets/AppIcon.solidimagestack/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
},
"layers" : [
{
"filename" : "Front.solidimagestacklayer"
},
{
"filename" : "Middle.solidimagestacklayer"
},
{
"filename" : "Back.solidimagestacklayer"
}
]
}
================================================
FILE: ChatAVP/ChatAVP/Assets.xcassets/AppIcon.solidimagestack/Front.solidimagestacklayer/Content.imageset/Contents.json
================================================
{
"images" : [
{
"idiom" : "vision",
"scale" : "2x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: ChatAVP/ChatAVP/Assets.xcassets/AppIcon.solidimagestack/Front.solidimagestacklayer/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: ChatAVP/ChatAVP/Assets.xcassets/AppIcon.solidimagestack/Middle.solidimagestacklayer/Content.imageset/Contents.json
================================================
{
"images" : [
{
"idiom" : "vision",
"scale" : "2x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: ChatAVP/ChatAVP/Assets.xcassets/AppIcon.solidimagestack/Middle.solidimagestacklayer/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: ChatAVP/ChatAVP/Assets.xcassets/Contents.json
================================================
{
"info" : {
"version" : 1,
"author" : "xcode"
}
}
================================================
FILE: ChatAVP/ChatAVP/ChatAVPApp.swift
================================================
//
// ChatAVPApp.swift
// ChatAVP
//
// Created by IVAN CAMPOS on 1/26/24.
//
import SwiftUI
@main
struct ChatAVPApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
================================================
FILE: ChatAVP/ChatAVP/ContentView.swift
================================================
//
// ContentView.swift
// ChatAVP
//
// Created by IVAN CAMPOS on 1/26/24.
//
import SwiftUI
import RealityKit
import RealityKitContent
struct ContentView: View {
@State private var userInput: String = ""
//API Response will be rendered here
@State private var apiResponse: String = ""
private var openAiApiKey: String = Secrets.OPENAI_API_KEY // Replace this with your actual OpenAI API key
var body: some View {
VStack {
SearchBar(text: $userInput, onSearchButtonClicked: {
sendToOpenAI(input: userInput)
})
ScrollView {
TypewriterText(fullText: apiResponse, speed: 0.05)
.padding()
}
}
.padding(.top)
}
func sendToOpenAI(input: String) {
// Ensure the URL is correct and safe to use
guard let url = URL(string: "https://api.openai.com/v1/chat/completions") else {
print("Invalid URL")
return
}
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.addValue("Bearer \(openAiApiKey)", forHTTPHeaderField: "Authorization") // Replace YOUR_API_KEY with your actual API key
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
// Prepare the body with correct parameters
let body: [String: Any] = [
"model": "gpt-3.5-turbo",
"messages": [
["role": "user", "content": input]
]
]
// Ensure the request's body can be encoded
guard let httpBody = try? JSONSerialization.data(withJSONObject: body, options: []) else {
print("Failed to serialize body")
return
}
request.httpBody = httpBody
let task = URLSession.shared.dataTask(with: request) { data, response, error in
if let error = error {
DispatchQueue.main.async {
self.apiResponse = "Error making request: \(error.localizedDescription)"
}
return
}
guard let httpResponse = response as? HTTPURLResponse, (200...299).contains(httpResponse.statusCode) else {
DispatchQueue.main.async {
self.apiResponse = "Error: Server returned an error status code."
}
return
}
guard let data = data else {
DispatchQueue.main.async {
self.apiResponse = "Error: No data received."
}
return
}
// Decode the JSON response
do {
let decoder = JSONDecoder()
let response = try decoder.decode(OpenAIResponse.self, from: data)
DispatchQueue.main.async {
// Update the UI with the first choice's text
self.apiResponse = response.choices.first?.message.content ?? "No response text."
}
} catch {
DispatchQueue.main.async {
self.apiResponse = "Error decoding response: \(error.localizedDescription)"
}
}
}
task.resume()
}
struct OpenAIResponse: Codable {
let choices: [Choice]
}
struct Choice: Codable {
let message: Message
}
struct Message: Codable {
let role: String
let content: String
}
}
================================================
FILE: ChatAVP/ChatAVP/Info.plist
================================================
UIApplicationSceneManifest
UIApplicationPreferredDefaultSceneSessionRole
UIWindowSceneSessionRoleApplication
UIApplicationSupportsMultipleScenes
UISceneConfigurations
================================================
FILE: ChatAVP/ChatAVP/Preview Content/Preview Assets.xcassets/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: ChatAVP/ChatAVP/SearchBar.swift
================================================
//
// SearchBar.swift
// ChatAVP
//
// Created by IVAN CAMPOS on 2/15/24.
//
import SwiftUI
struct SearchBar: UIViewRepresentable {
@Binding var text: String
var onSearchButtonClicked: () -> Void
class Coordinator: NSObject, UISearchBarDelegate {
var parent: SearchBar
init(_ parent: SearchBar) {
self.parent = parent
}
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
parent.text = searchText
}
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
parent.onSearchButtonClicked()
searchBar.resignFirstResponder()
}
func searchBarTextDidEndEditing(_ searchBar: UISearchBar) {
searchBar.resignFirstResponder()
}
}
func makeCoordinator() -> Coordinator {
Coordinator(self)
}
func makeUIView(context: Context) -> UISearchBar {
let searchBar = UISearchBar(frame: .zero)
searchBar.delegate = context.coordinator
searchBar.searchBarStyle = .minimal
searchBar.placeholder = "Enter your prompt here"
return searchBar
}
func updateUIView(_ uiView: UISearchBar, context: Context) {
uiView.text = text
}
}
================================================
FILE: ChatAVP/ChatAVP/TypewriterEffect.swift
================================================
//
// TypewriterEffect.swift
// ChatAVP
//
// Created by IVAN CAMPOS on 2/18/24.
//
import SwiftUI
struct TypewriterText: View {
let fullText: String
let speed: TimeInterval
@State private var visibleCharactersCount: Int = 0
private let timer = Timer.publish(every: 0.05, on: .main, in: .common).autoconnect()
var body: some View {
Text(String(fullText.prefix(visibleCharactersCount)))
.font(.system(size: 24, weight: .bold, design: .monospaced)) // Customize font as needed
.padding()
.lineLimit(nil) // Ensure there is no line limit
.fixedSize(horizontal: false, vertical: true) // Allow the text to grow vertically
.multilineTextAlignment(.leading) // Align text to the left
.onReceive(timer) { _ in
// Incrementally reveal the text
if visibleCharactersCount < fullText.count {
visibleCharactersCount += 1
} else {
timer.upstream.connect().cancel() // Stop the timer when the entire text is displayed
}
}
.onAppear {
// Reset the visible character count when the view appears
visibleCharactersCount = 0
}
}
}
================================================
FILE: ChatAVP/ChatAVP.xcodeproj/project.pbxproj
================================================
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 56;
objects = {
/* Begin PBXBuildFile section */
3B3A05B52B64B149008FF558 /* RealityKitContent in Frameworks */ = {isa = PBXBuildFile; productRef = 3B3A05B42B64B149008FF558 /* RealityKitContent */; };
3B3A05B72B64B149008FF558 /* ChatAVPApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B3A05B62B64B149008FF558 /* ChatAVPApp.swift */; };
3B3A05B92B64B149008FF558 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B3A05B82B64B149008FF558 /* ContentView.swift */; };
3B3A05BB2B64B14A008FF558 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3B3A05BA2B64B14A008FF558 /* Assets.xcassets */; };
3B3A05BE2B64B14A008FF558 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3B3A05BD2B64B14A008FF558 /* Preview Assets.xcassets */; };
3B3C71E32B82A30E00167B5B /* SearchBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B3C71E22B82A30E00167B5B /* SearchBar.swift */; };
3B3C71E52B82AC9E00167B5B /* TypewriterEffect.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B3C71E42B82AC9E00167B5B /* TypewriterEffect.swift */; };
3B3D81C72B829D6900096853 /* Secrets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B3D81C62B829D6900096853 /* Secrets.swift */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
3B3A05AF2B64B149008FF558 /* ChatAVP.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ChatAVP.app; sourceTree = BUILT_PRODUCTS_DIR; };
3B3A05B32B64B149008FF558 /* RealityKitContent */ = {isa = PBXFileReference; lastKnownFileType = wrapper; path = RealityKitContent; sourceTree = ""; };
3B3A05B62B64B149008FF558 /* ChatAVPApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatAVPApp.swift; sourceTree = ""; };
3B3A05B82B64B149008FF558 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; };
3B3A05BA2B64B14A008FF558 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
3B3A05BD2B64B14A008FF558 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; };
3B3A05BF2B64B14A008FF558 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
3B3C71E22B82A30E00167B5B /* SearchBar.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SearchBar.swift; sourceTree = ""; };
3B3C71E42B82AC9E00167B5B /* TypewriterEffect.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TypewriterEffect.swift; sourceTree = ""; };
3B3D81C62B829D6900096853 /* Secrets.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Secrets.swift; sourceTree = ""; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
3B3A05AC2B64B149008FF558 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
3B3A05B52B64B149008FF558 /* RealityKitContent in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
3B3A05A62B64B149008FF558 = {
isa = PBXGroup;
children = (
3B3A05B12B64B149008FF558 /* ChatAVP */,
3B3A05B22B64B149008FF558 /* Packages */,
3B3A05B02B64B149008FF558 /* Products */,
);
sourceTree = "";
};
3B3A05B02B64B149008FF558 /* Products */ = {
isa = PBXGroup;
children = (
3B3A05AF2B64B149008FF558 /* ChatAVP.app */,
);
name = Products;
sourceTree = "";
};
3B3A05B12B64B149008FF558 /* ChatAVP */ = {
isa = PBXGroup;
children = (
3B3A05B62B64B149008FF558 /* ChatAVPApp.swift */,
3B3A05B82B64B149008FF558 /* ContentView.swift */,
3B3C71E22B82A30E00167B5B /* SearchBar.swift */,
3B3D81C62B829D6900096853 /* Secrets.swift */,
3B3C71E42B82AC9E00167B5B /* TypewriterEffect.swift */,
3B3A05BA2B64B14A008FF558 /* Assets.xcassets */,
3B3A05BF2B64B14A008FF558 /* Info.plist */,
3B3A05BC2B64B14A008FF558 /* Preview Content */,
);
path = ChatAVP;
sourceTree = "";
};
3B3A05B22B64B149008FF558 /* Packages */ = {
isa = PBXGroup;
children = (
3B3A05B32B64B149008FF558 /* RealityKitContent */,
);
path = Packages;
sourceTree = "";
};
3B3A05BC2B64B14A008FF558 /* Preview Content */ = {
isa = PBXGroup;
children = (
3B3A05BD2B64B14A008FF558 /* Preview Assets.xcassets */,
);
path = "Preview Content";
sourceTree = "";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
3B3A05AE2B64B149008FF558 /* ChatAVP */ = {
isa = PBXNativeTarget;
buildConfigurationList = 3B3A05C22B64B14A008FF558 /* Build configuration list for PBXNativeTarget "ChatAVP" */;
buildPhases = (
3B3A05AB2B64B149008FF558 /* Sources */,
3B3A05AC2B64B149008FF558 /* Frameworks */,
3B3A05AD2B64B149008FF558 /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = ChatAVP;
packageProductDependencies = (
3B3A05B42B64B149008FF558 /* RealityKitContent */,
);
productName = chatAVP;
productReference = 3B3A05AF2B64B149008FF558 /* ChatAVP.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
3B3A05A72B64B149008FF558 /* Project object */ = {
isa = PBXProject;
attributes = {
BuildIndependentTargetsInParallel = 1;
LastSwiftUpdateCheck = 1520;
LastUpgradeCheck = 1520;
TargetAttributes = {
3B3A05AE2B64B149008FF558 = {
CreatedOnToolsVersion = 15.2;
};
};
};
buildConfigurationList = 3B3A05AA2B64B149008FF558 /* Build configuration list for PBXProject "ChatAVP" */;
compatibilityVersion = "Xcode 14.0";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = 3B3A05A62B64B149008FF558;
productRefGroup = 3B3A05B02B64B149008FF558 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
3B3A05AE2B64B149008FF558 /* ChatAVP */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
3B3A05AD2B64B149008FF558 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
3B3A05BE2B64B14A008FF558 /* Preview Assets.xcassets in Resources */,
3B3A05BB2B64B14A008FF558 /* Assets.xcassets in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
3B3A05AB2B64B149008FF558 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
3B3A05B92B64B149008FF558 /* ContentView.swift in Sources */,
3B3C71E32B82A30E00167B5B /* SearchBar.swift in Sources */,
3B3D81C72B829D6900096853 /* Secrets.swift in Sources */,
3B3A05B72B64B149008FF558 /* ChatAVPApp.swift in Sources */,
3B3C71E52B82AC9E00167B5B /* TypewriterEffect.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
3B3A05C02B64B14A008FF558 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu17;
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;
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = xros;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
XROS_DEPLOYMENT_TARGET = 1.0;
};
name = Debug;
};
3B3A05C12B64B14A008FF558 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu17;
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;
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = xros;
SWIFT_COMPILATION_MODE = wholemodule;
VALIDATE_PRODUCT = YES;
XROS_DEPLOYMENT_TARGET = 1.0;
};
name = Release;
};
3B3A05C32B64B14A008FF558 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_ASSET_PATHS = "\"chatAVP/Preview Content\"";
DEVELOPMENT_TEAM = 2DJDH872JZ;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "$(TARGET_NAME)/Info.plist";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.ivancampos.chatAVP;
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "xros xrsimulator";
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2,7";
};
name = Debug;
};
3B3A05C42B64B14A008FF558 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_ASSET_PATHS = "\"chatAVP/Preview Content\"";
DEVELOPMENT_TEAM = 2DJDH872JZ;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "$(TARGET_NAME)/Info.plist";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.ivancampos.chatAVP;
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "xros xrsimulator";
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2,7";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
3B3A05AA2B64B149008FF558 /* Build configuration list for PBXProject "ChatAVP" */ = {
isa = XCConfigurationList;
buildConfigurations = (
3B3A05C02B64B14A008FF558 /* Debug */,
3B3A05C12B64B14A008FF558 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
3B3A05C22B64B14A008FF558 /* Build configuration list for PBXNativeTarget "ChatAVP" */ = {
isa = XCConfigurationList;
buildConfigurations = (
3B3A05C32B64B14A008FF558 /* Debug */,
3B3A05C42B64B14A008FF558 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
/* Begin XCSwiftPackageProductDependency section */
3B3A05B42B64B149008FF558 /* RealityKitContent */ = {
isa = XCSwiftPackageProductDependency;
productName = RealityKitContent;
};
/* End XCSwiftPackageProductDependency section */
};
rootObject = 3B3A05A72B64B149008FF558 /* Project object */;
}
================================================
FILE: ChatAVP/ChatAVP.xcodeproj/project.xcworkspace/contents.xcworkspacedata
================================================
================================================
FILE: ChatAVP/ChatAVP.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
================================================
IDEDidComputeMac32BitWarning
================================================
FILE: ChatAVP/Packages/RealityKitContent/Package.realitycomposerpro/ProjectData/main.json
================================================
{
"pathsToIds" : {
"\/RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/GridMaterial.usda" : "440DE5B4-E4E4-459B-AABF-9ACE96319272",
"\/RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/procedural_sphere_grid.usda" : "34C460AE-CA1B-4348-BD05-621ACBDFFE97",
"\/RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/Scene.usda" : "0A9B4653-B11E-4D6A-850E-C6FCB621626C",
"\/RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/Untitled Scene.usda" : "03E02005-EFA6-48D6-8A76-05B2822A74E9",
"RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/GridMaterial.usda" : "FBD8436F-6B8B-4B82-99B5-995D538B4704",
"RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/procedural_sphere_grid.usda" : "1CBF3893-ABFD-408C-8B91-045BFD257808",
"RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/Scene.usda" : "26DBAE76-5DD8-47B6-A085-1B4ADA111097"
}
}
================================================
FILE: ChatAVP/Packages/RealityKitContent/Package.realitycomposerpro/WorkspaceData/SceneMetadataList.json
================================================
{
"0A9B4653-B11E-4D6A-850E-C6FCB621626C" : {
"cameraTransform" : [
0.9807314,
-1.9820146e-10,
-0.195361,
0,
-0.10051192,
0.85749435,
-0.5045798,
0,
0.16752096,
0.51449335,
0.84097165,
0,
0.09084191,
0.05849296,
0.13903293,
1
],
"objectMetadataList" : [
[
"0A9B4653-B11E-4D6A-850E-C6FCB621626C",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
},
[
"0A9B4653-B11E-4D6A-850E-C6FCB621626C",
"Root",
"GridMaterial"
],
{
"isExpanded" : true,
"isLocked" : false
},
[
"0A9B4653-B11E-4D6A-850E-C6FCB621626C",
"Root",
"Sphere"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
},
"1CBF3893-ABFD-408C-8B91-045BFD257808" : {
"cameraTransform" : [
0.99999994,
0,
-0,
0,
-0,
0.8660255,
-0.49999988,
0,
0,
0.49999988,
0.8660255,
0,
0,
0.27093542,
0.46927398,
1
],
"objectMetadataList" : [
]
},
"03E02005-EFA6-48D6-8A76-05B2822A74E9" : {
"cameraTransform" : [
0.99999994,
0,
-0,
0,
-0,
0.8660254,
-0.49999994,
0,
0,
0.49999994,
0.8660254,
0,
0,
0.5981957,
1.0361054,
1
],
"objectMetadataList" : [
]
},
"26DBAE76-5DD8-47B6-A085-1B4ADA111097" : {
"cameraTransform" : [
1,
0,
-0,
0,
-0,
0.7071069,
-0.7071067,
0,
0,
0.7071067,
0.7071069,
0,
0,
0.2681068,
0.26850593,
1
],
"objectMetadataList" : [
[
"26DBAE76-5DD8-47B6-A085-1B4ADA111097",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
},
"34C460AE-CA1B-4348-BD05-621ACBDFFE97" : {
"cameraTransform" : [
0.99999994,
0,
-0,
0,
-0,
0.8660255,
-0.49999988,
0,
0,
0.49999988,
0.8660255,
0,
0,
0.27093542,
0.46927398,
1
],
"objectMetadataList" : [
]
},
"440DE5B4-E4E4-459B-AABF-9ACE96319272" : {
"cameraTransform" : [
0.99999994,
0,
-0,
0,
-0,
0.8660254,
-0.49999994,
0,
0,
0.49999994,
0.8660254,
0,
0,
0.5981957,
1.0361054,
1
],
"objectMetadataList" : [
[
"440DE5B4-E4E4-459B-AABF-9ACE96319272",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
},
"FBD8436F-6B8B-4B82-99B5-995D538B4704" : {
"cameraTransform" : [
0.99999994,
0,
-0,
0,
-0,
0.8660254,
-0.49999994,
0,
0,
0.49999994,
0.8660254,
0,
0,
0.5981957,
1.0361054,
1
],
"objectMetadataList" : [
[
"FBD8436F-6B8B-4B82-99B5-995D538B4704",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
}
}
================================================
FILE: ChatAVP/Packages/RealityKitContent/Package.realitycomposerpro/WorkspaceData/Settings.rcprojectdata
================================================
{
"cameraPresets" : {
},
"secondaryToolbarData" : {
"isGridVisible" : true,
"sceneReverbPreset" : -1
},
"unitDefaults" : {
"°" : "°",
"kg" : "g",
"m" : "cm",
"m\/s" : "m\/s",
"m\/s²" : "m\/s²",
"s" : "s"
}
}
================================================
FILE: ChatAVP/Packages/RealityKitContent/Package.swift
================================================
// swift-tools-version:5.9
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "RealityKitContent",
products: [
// Products define the executables and libraries a package produces, and make them visible to other packages.
.library(
name: "RealityKitContent",
targets: ["RealityKitContent"]),
],
dependencies: [
// Dependencies declare other packages that this package depends on.
// .package(url: /* package url */, from: "1.0.0"),
],
targets: [
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
// Targets can depend on other targets in this package, and on products in packages this package depends on.
.target(
name: "RealityKitContent",
dependencies: []),
]
)
================================================
FILE: ChatAVP/Packages/RealityKitContent/README.md
================================================
# RealityKitContent
A description of this package.
================================================
FILE: ChatAVP/Packages/RealityKitContent/Sources/RealityKitContent/RealityKitContent.rkassets/Materials/GridMaterial.usda
================================================
#usda 1.0
(
defaultPrim = "Root"
metersPerUnit = 1
upAxis = "Y"
)
def Xform "Root"
{
def Material "GridMaterial"
{
reorder nameChildren = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "DefaultSurfaceShader", "MaterialXPreviewSurface", "Texcoord", "Add", "Multiply", "Fractional", "LineCounts", "Multiply_1", "Separate2", "Separate2_1", "Ifgreater", "Ifgreater_1", "Max", "Background_Color"]
token outputs:mtlx:surface.connect =
token outputs:realitykit:vertex
token outputs:surface
float2 ui:nodegraph:realitykit:subgraphOutputs:pos = (2222, 300.5)
float2 ui:nodegraph:realitykit:subgraphOutputs:size = (182, 89)
int ui:nodegraph:realitykit:subgraphOutputs:stackingOrder = 749
def Shader "DefaultSurfaceShader"
{
uniform token info:id = "UsdPreviewSurface"
color3f inputs:diffuseColor = (1, 1, 1)
float inputs:roughness = 0.75
token outputs:surface
}
def Shader "MaterialXPreviewSurface"
{
uniform token info:id = "ND_UsdPreviewSurface_surfaceshader"
float inputs:clearcoat
float inputs:clearcoatRoughness
color3f inputs:diffuseColor.connect =
color3f inputs:emissiveColor
float inputs:ior
float inputs:metallic = 0.15
float3 inputs:normal
float inputs:occlusion
float inputs:opacity
float inputs:opacityThreshold
float inputs:roughness = 0.5
token outputs:out
float2 ui:nodegraph:node:pos = (1967, 300.5)
float2 ui:nodegraph:node:size = (208, 297)
int ui:nodegraph:node:stackingOrder = 870
string[] ui:nodegraph:realitykit:node:attributesShowingChildren = ["Advanced"]
}
def Shader "Texcoord"
{
uniform token info:id = "ND_texcoord_vector2"
float2 outputs:out
float2 ui:nodegraph:node:pos = (94.14453, 35.29297)
float2 ui:nodegraph:node:size = (182, 43)
int ui:nodegraph:node:stackingOrder = 1358
}
def Shader "Multiply"
{
uniform token info:id = "ND_multiply_vector2"
float2 inputs:in1.connect =
float2 inputs:in2 = (32, 15)
float2 inputs:in2.connect =
float2 outputs:out
float2 ui:nodegraph:node:pos = (275.64453, 47.29297)
float2 ui:nodegraph:node:size = (61, 36)
int ui:nodegraph:node:stackingOrder = 1348
string[] ui:nodegraph:realitykit:node:attributesShowingChildren = ["inputs:in2"]
}
def Shader "Fractional"
{
uniform token info:id = "ND_realitykit_fractional_vector2"
float2 inputs:in.connect =
float2 outputs:out
float2 ui:nodegraph:node:pos = (440.5, 49.5)
float2 ui:nodegraph:node:size = (155, 99)
int ui:nodegraph:node:stackingOrder = 1345
}
def Shader "BaseColor"
{
uniform token info:id = "ND_constant_color3"
color3f inputs:value = (0.89737034, 0.89737034, 0.89737034) (
colorSpace = "Input - Texture - sRGB - sRGB"
)
color3f inputs:value.connect = None
color3f outputs:out
float2 ui:nodegraph:node:pos = (1537.5977, 363.07812)
float2 ui:nodegraph:node:size = (150, 43)
int ui:nodegraph:node:stackingOrder = 1353
}
def Shader "LineColor"
{
uniform token info:id = "ND_constant_color3"
color3f inputs:value = (0.55945957, 0.55945957, 0.55945957) (
colorSpace = "Input - Texture - sRGB - sRGB"
)
color3f inputs:value.connect = None
color3f outputs:out
float2 ui:nodegraph:node:pos = (1536.9844, 287.86328)
float2 ui:nodegraph:node:size = (146, 43)
int ui:nodegraph:node:stackingOrder = 1355
}
def Shader "LineWidths"
{
uniform token info:id = "ND_combine2_vector2"
float inputs:in1 = 0.1
float inputs:in2 = 0.1
float2 outputs:out
float2 ui:nodegraph:node:pos = (443.64453, 233.79297)
float2 ui:nodegraph:node:size = (151, 43)
int ui:nodegraph:node:stackingOrder = 1361
}
def Shader "LineCounts"
{
uniform token info:id = "ND_combine2_vector2"
float inputs:in1 = 24
float inputs:in2 = 12
float2 outputs:out
float2 ui:nodegraph:node:pos = (94.14453, 138.29297)
float2 ui:nodegraph:node:size = (153, 43)
int ui:nodegraph:node:stackingOrder = 1359
}
def Shader "Remap"
{
uniform token info:id = "ND_remap_color3"
color3f inputs:in.connect =
color3f inputs:inhigh.connect = None
color3f inputs:inlow.connect = None
color3f inputs:outhigh.connect =
color3f inputs:outlow.connect =
color3f outputs:out
float2 ui:nodegraph:node:pos = (1755.5, 300.5)
float2 ui:nodegraph:node:size = (95, 171)
int ui:nodegraph:node:stackingOrder = 1282
string[] ui:nodegraph:realitykit:node:attributesShowingChildren = ["inputs:outlow"]
}
def Shader "Separate2"
{
uniform token info:id = "ND_separate2_vector2"
float2 inputs:in.connect =
float outputs:outx
float outputs:outy
float2 ui:nodegraph:node:pos = (1212.6445, 128.91797)
float2 ui:nodegraph:node:size = (116, 117)
int ui:nodegraph:node:stackingOrder = 1363
}
def Shader "Combine3"
{
uniform token info:id = "ND_combine3_color3"
float inputs:in1.connect =
float inputs:in2.connect =
float inputs:in3.connect =
color3f outputs:out
float2 ui:nodegraph:node:pos = (1578.1445, 128.91797)
float2 ui:nodegraph:node:size = (146, 54)
int ui:nodegraph:node:stackingOrder = 1348
}
def Shader "Range"
{
uniform token info:id = "ND_range_vector2"
bool inputs:doclamp = 1
float2 inputs:gamma = (2, 2)
float2 inputs:in.connect =
float2 inputs:inhigh.connect =
float2 inputs:inlow = (0.02, 0.02)
float2 inputs:outhigh
float2 inputs:outlow
float2 outputs:out
float2 ui:nodegraph:node:pos = (990.64453, 128.91797)
float2 ui:nodegraph:node:size = (98, 207)
int ui:nodegraph:node:stackingOrder = 1364
}
def Shader "Subtract"
{
uniform token info:id = "ND_subtract_vector2"
float2 inputs:in1.connect =
float2 inputs:in2.connect =
float2 outputs:out
float2 ui:nodegraph:node:pos = (612.64453, 87.04297)
float2 ui:nodegraph:node:size = (63, 36)
int ui:nodegraph:node:stackingOrder = 1348
}
def Shader "Absval"
{
uniform token info:id = "ND_absval_vector2"
float2 inputs:in.connect =
float2 outputs:out
float2 ui:nodegraph:node:pos = (765.64453, 87.04297)
float2 ui:nodegraph:node:size = (123, 43)
int ui:nodegraph:node:stackingOrder = 1348
}
def Shader "Min"
{
uniform token info:id = "ND_min_float"
float inputs:in1.connect =
float inputs:in2.connect =
float outputs:out
float2 ui:nodegraph:node:pos = (1388.1445, 128.91797)
float2 ui:nodegraph:node:size = (114, 36)
int ui:nodegraph:node:stackingOrder = 1363
}
}
}
================================================
FILE: ChatAVP/Packages/RealityKitContent/Sources/RealityKitContent/RealityKitContent.rkassets/Scene.usda
================================================
#usda 1.0
(
defaultPrim = "Root"
metersPerUnit = 1
upAxis = "Y"
)
def Xform "Root"
{
reorder nameChildren = ["GridMaterial", "Sphere"]
rel material:binding = None (
bindMaterialAs = "weakerThanDescendants"
)
def Sphere "Sphere" (
active = true
prepend apiSchemas = ["MaterialBindingAPI"]
)
{
rel material:binding = (
bindMaterialAs = "weakerThanDescendants"
)
double radius = 0.05
quatf xformOp:orient = (1, 0, 0, 0)
float3 xformOp:scale = (1, 1, 1)
float3 xformOp:translate = (0, 0, 0.0004)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
def RealityKitComponent "Collider"
{
uint group = 1
uniform token info:id = "RealityKit.Collider"
uint mask = 4294967295
token type = "Default"
def RealityKitStruct "Shape"
{
float3 extent = (0.2, 0.2, 0.2)
float radius = 0.05
token shapeType = "Sphere"
}
}
def RealityKitComponent "InputTarget"
{
uniform token info:id = "RealityKit.InputTarget"
}
}
def "GridMaterial" (
active = true
prepend references = @Materials/GridMaterial.usda@
)
{
float3 xformOp:scale = (1, 1, 1)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
}
}
================================================
FILE: ChatAVP/Packages/RealityKitContent/Sources/RealityKitContent/RealityKitContent.swift
================================================
import Foundation
/// Bundle for the RealityKitContent project
public let realityKitContentBundle = Bundle.module
================================================
FILE: ChatAVP/README.md
================================================
# ChatAVP
**Chat Apple Vision Pro (ChatAVP):** Chat with the OpenAI API for visionOS
## Instructions
***Before running locally,*** be sure to update the following line in ContentView.swift:
* **From:**
`private var openAiApiKey: String = Secrets.OPENAI_API_KEY // Replace this with your actual OpenAI API key`
* **To:**
`private var openAiApiKey: String = "sk-##############..."`
https://github.com/IvanCampos/visionOS-examples/assets/872137/11528bf5-edcf-457b-b822-7b430fc1dd30
================================================
FILE: Countdown/Countdown/Assets.xcassets/AppIcon.solidimagestack/Back.solidimagestacklayer/Content.imageset/Contents.json
================================================
{
"images" : [
{
"idiom" : "vision",
"scale" : "2x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: Countdown/Countdown/Assets.xcassets/AppIcon.solidimagestack/Back.solidimagestacklayer/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: Countdown/Countdown/Assets.xcassets/AppIcon.solidimagestack/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
},
"layers" : [
{
"filename" : "Front.solidimagestacklayer"
},
{
"filename" : "Middle.solidimagestacklayer"
},
{
"filename" : "Back.solidimagestacklayer"
}
]
}
================================================
FILE: Countdown/Countdown/Assets.xcassets/AppIcon.solidimagestack/Front.solidimagestacklayer/Content.imageset/Contents.json
================================================
{
"images" : [
{
"idiom" : "vision",
"scale" : "2x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: Countdown/Countdown/Assets.xcassets/AppIcon.solidimagestack/Front.solidimagestacklayer/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: Countdown/Countdown/Assets.xcassets/AppIcon.solidimagestack/Middle.solidimagestacklayer/Content.imageset/Contents.json
================================================
{
"images" : [
{
"idiom" : "vision",
"scale" : "2x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: Countdown/Countdown/Assets.xcassets/AppIcon.solidimagestack/Middle.solidimagestacklayer/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: Countdown/Countdown/Assets.xcassets/Contents.json
================================================
{
"info" : {
"version" : 1,
"author" : "xcode"
}
}
================================================
FILE: Countdown/Countdown/ContentView.swift
================================================
//
// ContentView.swift
// Countdown
//
// Created by IVAN CAMPOS on 3/17/24.
//
import SwiftUI
import RealityKit
import RealityKitContent
struct ContentView: View {
@State private var showImmersiveSpace = false
@State private var immersiveSpaceIsShown = false
@Environment(\.openImmersiveSpace) var openImmersiveSpace
@Environment(\.dismissImmersiveSpace) var dismissImmersiveSpace
var body: some View {
VStack {
Model3D(named: "Scene", bundle: realityKitContentBundle)
.padding(.bottom, 50)
Toggle("Show Immersive Space", isOn: $showImmersiveSpace)
.toggleStyle(.button)
.padding(.top, 50)
}
.padding()
.onChange(of: showImmersiveSpace) { _, newValue in
Task {
if newValue {
switch await openImmersiveSpace(id: "ImmersiveSpace") {
case .opened:
immersiveSpaceIsShown = true
case .error, .userCancelled:
fallthrough
@unknown default:
immersiveSpaceIsShown = false
showImmersiveSpace = false
}
} else if immersiveSpaceIsShown {
await dismissImmersiveSpace()
immersiveSpaceIsShown = false
}
}
}
}
}
================================================
FILE: Countdown/Countdown/CountdownApp.swift
================================================
//
// CountdownApp.swift
// Countdown
//
// Created by IVAN CAMPOS on 3/17/24.
//
import SwiftUI
@main
struct CountdownApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
ImmersiveSpace(id: "ImmersiveSpace") {
ImmersiveView()
}
}
}
================================================
FILE: Countdown/Countdown/Extensions.swift
================================================
//
// Extensions.swift
// Countdown
//
// Created by IVAN CAMPOS on 3/17/24.
//
import SwiftUI
// Function to create UIColor from hex string
extension UIColor {
convenience init(hex: String) {
let hexString = hex.trimmingCharacters(in: .whitespacesAndNewlines)
let scanner = Scanner(string: hexString)
var color: UInt64 = 0
scanner.scanHexInt64(&color)
let r = CGFloat((color & 0xFF0000) >> 16) / 255.0
let g = CGFloat((color & 0x00FF00) >> 8) / 255.0
let b = CGFloat(color & 0x0000FF) / 255.0
self.init(red: r, green: g, blue: b, alpha: 1.0)
}
}
================================================
FILE: Countdown/Countdown/ImmersiveView.swift
================================================
//
// ImmersiveView.swift
// Countdown
//
// Created by IVAN CAMPOS on 3/17/24.
//
import SwiftUI
import RealityKit
import RealityKitContent
struct ImmersiveView: View {
let BASE_FONT = "Audiowide-Regular"
let BASE_TEXTURE = "Starfield.jpg"
let TEXTURE_NOT_FOUND = "Base Texture Not Found!"
let COUNTDOWN_COLOR = "ff9900"
let END_MESSAGE = "GAME\nOVER"
let END_MESSAGE_COLOR = "FF0000"
let FONT_SIZE = 0.3
var body: some View {
let timerEntity = createTimer()
RealityView { content in
content.add(timerEntity)
var resource = try! await TextureResource.load(named: BASE_TEXTURE)
var material = SimpleMaterial()
material.color = SimpleMaterial.BaseColor(tint: .white, texture: .init(resource))
let environment = Entity()
environment.components.set(ModelComponent(
mesh: .generateSphere(radius: 2000),
materials: [material]
))
environment.scale *= .init(x: -2, y: 2, z: 2)
content.add(environment)
}
}
func updatePosition(entity: Entity, x: Float, y: Float, z: Float) {
entity.position = SIMD3(x, y, z)
}
func createTimer() -> ModelEntity {
var startTime = 10
var timer: Timer?
let timerEntity = ModelEntity(
mesh: .generateText(String(startTime), extrusionDepth: 0, font: UIFont(name: BASE_FONT, size: FONT_SIZE) ?? .systemFont(ofSize: FONT_SIZE), containerFrame: .zero,
alignment: .center, lineBreakMode: .byCharWrapping),
materials: [SimpleMaterial(color: UIColor(hex: COUNTDOWN_COLOR), isMetallic: false)]
)
updatePosition(entity: timerEntity, x: 0.0, y: 1.75, z: -2)
timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { _ in
startTime = startTime - 1
if (startTime >= 0) {
DispatchQueue.main.async {
timerEntity.model?.mesh = .generateText(String(startTime), extrusionDepth: 0, font: UIFont(name: BASE_FONT, size: FONT_SIZE) ?? .systemFont(ofSize: FONT_SIZE), containerFrame: .zero, alignment: .center, lineBreakMode: .byCharWrapping)
pulseEffect(entity: timerEntity)
}
} else {
timer?.invalidate()
DispatchQueue.main.async {
updatePosition(entity: timerEntity, x: -1.25, y: 1.75, z: -2)
timerEntity.model?.mesh = .generateText(END_MESSAGE, extrusionDepth: 0, font: UIFont(name: BASE_FONT, size: FONT_SIZE) ?? .systemFont(ofSize: FONT_SIZE), containerFrame: .zero, alignment: .center, lineBreakMode: .byCharWrapping)
timerEntity.model?.materials = [SimpleMaterial(color: UIColor(hex: END_MESSAGE_COLOR), isMetallic: false)]
}
}
}
return timerEntity
}
func pulseEffect(entity: ModelEntity) {
let initialScale = entity.scale
let SCALE: Float = 3.0
let largerScale = SIMD3(initialScale.x * SCALE, initialScale.y * SCALE, initialScale.z * SCALE)
entity.scale = largerScale
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
entity.scale = initialScale
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
entity.scale = initialScale
}
}
}
}
================================================
FILE: Countdown/Countdown/Info.plist
================================================
UIAppFonts
Audiowide-Regular.ttf
UIApplicationSceneManifest
UIApplicationPreferredDefaultSceneSessionRole
UISceneSessionRoleImmersiveSpaceApplication
UIApplicationSupportsMultipleScenes
UISceneConfigurations
================================================
FILE: Countdown/Countdown/Preview Content/Preview Assets.xcassets/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: Countdown/Countdown.xcodeproj/project.pbxproj
================================================
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 56;
objects = {
/* Begin PBXBuildFile section */
3B2A044F2BA78446005543D6 /* RealityKitContent in Frameworks */ = {isa = PBXBuildFile; productRef = 3B2A044E2BA78446005543D6 /* RealityKitContent */; };
3B2A04512BA78446005543D6 /* CountdownApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B2A04502BA78446005543D6 /* CountdownApp.swift */; };
3B2A04532BA78446005543D6 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B2A04522BA78446005543D6 /* ContentView.swift */; };
3B2A04552BA78446005543D6 /* ImmersiveView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B2A04542BA78446005543D6 /* ImmersiveView.swift */; };
3B2A04572BA78447005543D6 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3B2A04562BA78447005543D6 /* Assets.xcassets */; };
3B2A045A2BA78447005543D6 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3B2A04592BA78447005543D6 /* Preview Assets.xcassets */; };
3B2A04692BA7878B005543D6 /* Starfield.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 3B2A04672BA78737005543D6 /* Starfield.jpg */; };
3B2A046A2BA7878B005543D6 /* Audiowide-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 3B2A04682BA7873F005543D6 /* Audiowide-Regular.ttf */; };
3B2A046E2BA7886F005543D6 /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B2A046D2BA7886F005543D6 /* Extensions.swift */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
3B2A04492BA78446005543D6 /* Countdown.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Countdown.app; sourceTree = BUILT_PRODUCTS_DIR; };
3B2A044D2BA78446005543D6 /* RealityKitContent */ = {isa = PBXFileReference; lastKnownFileType = wrapper; path = RealityKitContent; sourceTree = ""; };
3B2A04502BA78446005543D6 /* CountdownApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CountdownApp.swift; sourceTree = ""; };
3B2A04522BA78446005543D6 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; };
3B2A04542BA78446005543D6 /* ImmersiveView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImmersiveView.swift; sourceTree = ""; };
3B2A04562BA78447005543D6 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
3B2A04592BA78447005543D6 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; };
3B2A045B2BA78447005543D6 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
3B2A04672BA78737005543D6 /* Starfield.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = Starfield.jpg; sourceTree = ""; };
3B2A04682BA7873F005543D6 /* Audiowide-Regular.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Audiowide-Regular.ttf"; sourceTree = ""; };
3B2A046D2BA7886F005543D6 /* Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Extensions.swift; sourceTree = ""; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
3B2A04462BA78446005543D6 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
3B2A044F2BA78446005543D6 /* RealityKitContent in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
3B2A04402BA78446005543D6 = {
isa = PBXGroup;
children = (
3B2A044B2BA78446005543D6 /* Countdown */,
3B2A044C2BA78446005543D6 /* Packages */,
3B2A044A2BA78446005543D6 /* Products */,
);
sourceTree = "";
};
3B2A044A2BA78446005543D6 /* Products */ = {
isa = PBXGroup;
children = (
3B2A04492BA78446005543D6 /* Countdown.app */,
);
name = Products;
sourceTree = "";
};
3B2A044B2BA78446005543D6 /* Countdown */ = {
isa = PBXGroup;
children = (
3B2A046C2BA787BB005543D6 /* Fonts */,
3B2A046B2BA787B1005543D6 /* Textures */,
3B2A04502BA78446005543D6 /* CountdownApp.swift */,
3B2A04522BA78446005543D6 /* ContentView.swift */,
3B2A04542BA78446005543D6 /* ImmersiveView.swift */,
3B2A046D2BA7886F005543D6 /* Extensions.swift */,
3B2A04562BA78447005543D6 /* Assets.xcassets */,
3B2A045B2BA78447005543D6 /* Info.plist */,
3B2A04582BA78447005543D6 /* Preview Content */,
);
path = Countdown;
sourceTree = "";
};
3B2A044C2BA78446005543D6 /* Packages */ = {
isa = PBXGroup;
children = (
3B2A044D2BA78446005543D6 /* RealityKitContent */,
);
path = Packages;
sourceTree = "";
};
3B2A04582BA78447005543D6 /* Preview Content */ = {
isa = PBXGroup;
children = (
3B2A04592BA78447005543D6 /* Preview Assets.xcassets */,
);
path = "Preview Content";
sourceTree = "";
};
3B2A046B2BA787B1005543D6 /* Textures */ = {
isa = PBXGroup;
children = (
3B2A04672BA78737005543D6 /* Starfield.jpg */,
);
path = Textures;
sourceTree = "";
};
3B2A046C2BA787BB005543D6 /* Fonts */ = {
isa = PBXGroup;
children = (
3B2A04682BA7873F005543D6 /* Audiowide-Regular.ttf */,
);
path = Fonts;
sourceTree = "";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
3B2A04482BA78446005543D6 /* Countdown */ = {
isa = PBXNativeTarget;
buildConfigurationList = 3B2A045E2BA78447005543D6 /* Build configuration list for PBXNativeTarget "Countdown" */;
buildPhases = (
3B2A04452BA78446005543D6 /* Sources */,
3B2A04462BA78446005543D6 /* Frameworks */,
3B2A04472BA78446005543D6 /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = Countdown;
packageProductDependencies = (
3B2A044E2BA78446005543D6 /* RealityKitContent */,
);
productName = Countdown;
productReference = 3B2A04492BA78446005543D6 /* Countdown.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
3B2A04412BA78446005543D6 /* Project object */ = {
isa = PBXProject;
attributes = {
BuildIndependentTargetsInParallel = 1;
LastSwiftUpdateCheck = 1520;
LastUpgradeCheck = 1520;
TargetAttributes = {
3B2A04482BA78446005543D6 = {
CreatedOnToolsVersion = 15.2;
};
};
};
buildConfigurationList = 3B2A04442BA78446005543D6 /* Build configuration list for PBXProject "Countdown" */;
compatibilityVersion = "Xcode 14.0";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = 3B2A04402BA78446005543D6;
productRefGroup = 3B2A044A2BA78446005543D6 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
3B2A04482BA78446005543D6 /* Countdown */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
3B2A04472BA78446005543D6 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
3B2A04692BA7878B005543D6 /* Starfield.jpg in Resources */,
3B2A046A2BA7878B005543D6 /* Audiowide-Regular.ttf in Resources */,
3B2A045A2BA78447005543D6 /* Preview Assets.xcassets in Resources */,
3B2A04572BA78447005543D6 /* Assets.xcassets in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
3B2A04452BA78446005543D6 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
3B2A04532BA78446005543D6 /* ContentView.swift in Sources */,
3B2A046E2BA7886F005543D6 /* Extensions.swift in Sources */,
3B2A04512BA78446005543D6 /* CountdownApp.swift in Sources */,
3B2A04552BA78446005543D6 /* ImmersiveView.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
3B2A045C2BA78447005543D6 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu17;
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;
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = xros;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
XROS_DEPLOYMENT_TARGET = 1.0;
};
name = Debug;
};
3B2A045D2BA78447005543D6 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu17;
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;
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = xros;
SWIFT_COMPILATION_MODE = wholemodule;
VALIDATE_PRODUCT = YES;
XROS_DEPLOYMENT_TARGET = 1.0;
};
name = Release;
};
3B2A045F2BA78447005543D6 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_ASSET_PATHS = "\"Countdown/Preview Content\"";
DEVELOPMENT_TEAM = 2DJDH872JZ;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "$(TARGET_NAME)/Info.plist";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.ivancampos.Countdown;
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "xros xrsimulator";
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2,7";
};
name = Debug;
};
3B2A04602BA78447005543D6 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_ASSET_PATHS = "\"Countdown/Preview Content\"";
DEVELOPMENT_TEAM = 2DJDH872JZ;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "$(TARGET_NAME)/Info.plist";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.ivancampos.Countdown;
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "xros xrsimulator";
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2,7";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
3B2A04442BA78446005543D6 /* Build configuration list for PBXProject "Countdown" */ = {
isa = XCConfigurationList;
buildConfigurations = (
3B2A045C2BA78447005543D6 /* Debug */,
3B2A045D2BA78447005543D6 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
3B2A045E2BA78447005543D6 /* Build configuration list for PBXNativeTarget "Countdown" */ = {
isa = XCConfigurationList;
buildConfigurations = (
3B2A045F2BA78447005543D6 /* Debug */,
3B2A04602BA78447005543D6 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
/* Begin XCSwiftPackageProductDependency section */
3B2A044E2BA78446005543D6 /* RealityKitContent */ = {
isa = XCSwiftPackageProductDependency;
productName = RealityKitContent;
};
/* End XCSwiftPackageProductDependency section */
};
rootObject = 3B2A04412BA78446005543D6 /* Project object */;
}
================================================
FILE: Countdown/Countdown.xcodeproj/project.xcworkspace/contents.xcworkspacedata
================================================
================================================
FILE: Countdown/Countdown.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
================================================
IDEDidComputeMac32BitWarning
================================================
FILE: Countdown/Packages/RealityKitContent/Package.realitycomposerpro/ProjectData/main.json
================================================
{
"pathsToIds" : {
"\/RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/GridMaterial.usda" : "CB766F92-EE55-4A63-9401-E7B8C009764D",
"\/RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/Immersive.usda" : "65F6F990-A780-4474-B78B-572E0E4E273D",
"\/RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/Scene.usda" : "0A9B4653-B11E-4D6A-850E-C6FCB621626C",
"\/RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/Untitled Scene.usda" : "D560BB77-AAF3-4BDE-B7C4-989332A4688B",
"RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/GridMaterial.usda" : "66168B71-AB05-424E-8B6C-D33D6E61B08F",
"RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/Immersive.usda" : "AF09ED6F-1707-48FD-8720-65B998362C09",
"RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/Scene.usda" : "D66134B1-3681-4A8E-AFE5-29F257229F3B"
}
}
================================================
FILE: Countdown/Packages/RealityKitContent/Package.realitycomposerpro/WorkspaceData/SceneMetadataList.json
================================================
{
"0A9B4653-B11E-4D6A-850E-C6FCB621626C" : {
"cameraTransform" : [
1,
0,
0,
0,
0,
0.86602545,
-0.49999994,
0,
0,
0.49999994,
0.86602545,
0,
0.0035969093,
0.35542378,
0.62919164,
1
],
"objectMetadataList" : [
[
"0A9B4653-B11E-4D6A-850E-C6FCB621626C",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
},
"65F6F990-A780-4474-B78B-572E0E4E273D" : {
"cameraTransform" : [
1,
0,
-0,
0,
-0,
0.86602545,
-0.49999988,
0,
0,
0.49999988,
0.86602545,
0,
1.1972517e-08,
2.6179132,
0.43191218,
1
],
"objectMetadataList" : [
[
"65F6F990-A780-4474-B78B-572E0E4E273D",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
},
"66168B71-AB05-424E-8B6C-D33D6E61B08F" : {
"cameraTransform" : [
1,
0,
-0,
0,
-0,
0.8660254,
-0.5,
0,
0,
0.5,
0.8660254,
0,
0,
0.23875366,
0.4135335,
1
],
"objectMetadataList" : [
[
"66168B71-AB05-424E-8B6C-D33D6E61B08F",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
},
"AF09ED6F-1707-48FD-8720-65B998362C09" : {
"cameraTransform" : [
1,
0,
-0,
0,
-0,
0.7071069,
-0.7071067,
0,
0,
0.7071067,
0.7071069,
0,
0,
2.8836339,
-0.107588194,
1
],
"objectMetadataList" : [
[
"AF09ED6F-1707-48FD-8720-65B998362C09",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
},
[
"AF09ED6F-1707-48FD-8720-65B998362C09",
"Root",
"Sphere_Left"
],
{
"isExpanded" : true,
"isLocked" : false
},
[
"AF09ED6F-1707-48FD-8720-65B998362C09",
"Root",
"Sphere_Right"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
},
"CB766F92-EE55-4A63-9401-E7B8C009764D" : {
"cameraTransform" : [
1,
0,
-0,
0,
-0,
0.8660253,
-0.5000001,
0,
0,
0.5000001,
0.8660253,
0,
0,
0.27093494,
0.4692731,
1
],
"objectMetadataList" : [
[
"CB766F92-EE55-4A63-9401-E7B8C009764D",
"Root",
"GridMaterial"
],
{
"isExpanded" : true,
"isLocked" : false
},
[
"CB766F92-EE55-4A63-9401-E7B8C009764D",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
},
"D560BB77-AAF3-4BDE-B7C4-989332A4688B" : {
"cameraTransform" : [
1,
0,
-0,
0,
-0,
0.8660253,
-0.5000001,
0,
0,
0.5000001,
0.8660253,
0,
0,
0.27093494,
0.4692731,
1
],
"objectMetadataList" : [
]
},
"D66134B1-3681-4A8E-AFE5-29F257229F3B" : {
"cameraTransform" : [
1,
0,
-0,
0,
-0,
0.7071069,
-0.7071067,
0,
0,
0.7071067,
0.7071069,
0,
0,
0.26894823,
0.26934713,
1
],
"objectMetadataList" : [
[
"D66134B1-3681-4A8E-AFE5-29F257229F3B",
"Root",
"GridMaterial",
"GridMaterial"
],
{
"isExpanded" : true,
"isLocked" : false
},
[
"D66134B1-3681-4A8E-AFE5-29F257229F3B",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
}
}
================================================
FILE: Countdown/Packages/RealityKitContent/Package.realitycomposerpro/WorkspaceData/Settings.rcprojectdata
================================================
{
"cameraPresets" : {
},
"secondaryToolbarData" : {
"isGridVisible" : true,
"sceneReverbPreset" : -1
},
"unitDefaults" : {
"°" : "°",
"kg" : "g",
"m" : "cm",
"m\/s" : "m\/s",
"m\/s²" : "m\/s²",
"s" : "s"
}
}
================================================
FILE: Countdown/Packages/RealityKitContent/Package.swift
================================================
// swift-tools-version:5.9
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "RealityKitContent",
products: [
// Products define the executables and libraries a package produces, and make them visible to other packages.
.library(
name: "RealityKitContent",
targets: ["RealityKitContent"]),
],
dependencies: [
// Dependencies declare other packages that this package depends on.
// .package(url: /* package url */, from: "1.0.0"),
],
targets: [
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
// Targets can depend on other targets in this package, and on products in packages this package depends on.
.target(
name: "RealityKitContent",
dependencies: []),
]
)
================================================
FILE: Countdown/Packages/RealityKitContent/README.md
================================================
# RealityKitContent
A description of this package.
================================================
FILE: Countdown/Packages/RealityKitContent/Sources/RealityKitContent/RealityKitContent.rkassets/Immersive.usda
================================================
#usda 1.0
(
defaultPrim = "Root"
metersPerUnit = 1
upAxis = "Y"
)
def Xform "Root"
{
reorder nameChildren = ["Sphere_Left", "Sphere_Right", "GridMaterial"]
def Sphere "Sphere_Right" (
active = true
prepend apiSchemas = ["MaterialBindingAPI"]
)
{
rel material:binding = (
bindMaterialAs = "weakerThanDescendants"
)
double radius = 0.1
quatf xformOp:orient = (1, 0, 0, 0)
float3 xformOp:scale = (1, 1, 1)
float3 xformOp:translate = (0.5, 1.5, -1.5)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
}
def Sphere "Sphere_Left" (
active = true
prepend apiSchemas = ["MaterialBindingAPI"]
)
{
rel material:binding = (
bindMaterialAs = "weakerThanDescendants"
)
double radius = 0.1
quatf xformOp:orient = (1, 0, 0, 0)
float3 xformOp:scale = (1, 1, 1)
float3 xformOp:translate = (-0.5, 1.5, -1.5)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
}
def "GridMaterial" (
active = true
prepend references = @Materials/GridMaterial.usda@
)
{
float3 xformOp:scale = (1, 1, 1)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
}
}
================================================
FILE: Countdown/Packages/RealityKitContent/Sources/RealityKitContent/RealityKitContent.rkassets/Materials/GridMaterial.usda
================================================
#usda 1.0
(
defaultPrim = "Root"
metersPerUnit = 1
upAxis = "Y"
)
def Xform "Root"
{
def Material "GridMaterial"
{
reorder nameChildren = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "DefaultSurfaceShader", "MaterialXPreviewSurface", "Texcoord", "Add", "Multiply", "Fractional", "LineCounts", "Multiply_1", "Separate2", "Separate2_1", "Ifgreater", "Ifgreater_1", "Max", "Background_Color"]
token outputs:mtlx:surface.connect =
token outputs:realitykit:vertex
token outputs:surface
float2 ui:nodegraph:realitykit:subgraphOutputs:pos = (2222, 300.5)
float2 ui:nodegraph:realitykit:subgraphOutputs:size = (182, 89)
int ui:nodegraph:realitykit:subgraphOutputs:stackingOrder = 749
def Shader "DefaultSurfaceShader"
{
uniform token info:id = "UsdPreviewSurface"
color3f inputs:diffuseColor = (1, 1, 1)
float inputs:roughness = 0.75
token outputs:surface
}
def Shader "MaterialXPreviewSurface"
{
uniform token info:id = "ND_UsdPreviewSurface_surfaceshader"
float inputs:clearcoat
float inputs:clearcoatRoughness
color3f inputs:diffuseColor.connect =
color3f inputs:emissiveColor
float inputs:ior
float inputs:metallic = 0.15
float3 inputs:normal
float inputs:occlusion
float inputs:opacity
float inputs:opacityThreshold
float inputs:roughness = 0.5
token outputs:out
float2 ui:nodegraph:node:pos = (1967, 300.5)
float2 ui:nodegraph:node:size = (208, 297)
int ui:nodegraph:node:stackingOrder = 870
string[] ui:nodegraph:realitykit:node:attributesShowingChildren = ["Advanced"]
}
def Shader "Texcoord"
{
uniform token info:id = "ND_texcoord_vector2"
float2 outputs:out
float2 ui:nodegraph:node:pos = (94.14453, 35.29297)
float2 ui:nodegraph:node:size = (182, 43)
int ui:nodegraph:node:stackingOrder = 1358
}
def Shader "Multiply"
{
uniform token info:id = "ND_multiply_vector2"
float2 inputs:in1.connect =
float2 inputs:in2 = (32, 15)
float2 inputs:in2.connect =
float2 outputs:out
float2 ui:nodegraph:node:pos = (275.64453, 47.29297)
float2 ui:nodegraph:node:size = (61, 36)
int ui:nodegraph:node:stackingOrder = 1348
string[] ui:nodegraph:realitykit:node:attributesShowingChildren = ["inputs:in2"]
}
def Shader "Fractional"
{
uniform token info:id = "ND_realitykit_fractional_vector2"
float2 inputs:in.connect =
float2 outputs:out
float2 ui:nodegraph:node:pos = (440.5, 49.5)
float2 ui:nodegraph:node:size = (155, 99)
int ui:nodegraph:node:stackingOrder = 1345
}
def Shader "BaseColor"
{
uniform token info:id = "ND_constant_color3"
color3f inputs:value = (0.89737034, 0.89737034, 0.89737034) (
colorSpace = "Input - Texture - sRGB - sRGB"
)
color3f inputs:value.connect = None
color3f outputs:out
float2 ui:nodegraph:node:pos = (1537.5977, 363.07812)
float2 ui:nodegraph:node:size = (150, 43)
int ui:nodegraph:node:stackingOrder = 1353
}
def Shader "LineColor"
{
uniform token info:id = "ND_constant_color3"
color3f inputs:value = (0.55945957, 0.55945957, 0.55945957) (
colorSpace = "Input - Texture - sRGB - sRGB"
)
color3f inputs:value.connect = None
color3f outputs:out
float2 ui:nodegraph:node:pos = (1536.9844, 287.86328)
float2 ui:nodegraph:node:size = (146, 43)
int ui:nodegraph:node:stackingOrder = 1355
}
def Shader "LineWidths"
{
uniform token info:id = "ND_combine2_vector2"
float inputs:in1 = 0.1
float inputs:in2 = 0.1
float2 outputs:out
float2 ui:nodegraph:node:pos = (443.64453, 233.79297)
float2 ui:nodegraph:node:size = (151, 43)
int ui:nodegraph:node:stackingOrder = 1361
}
def Shader "LineCounts"
{
uniform token info:id = "ND_combine2_vector2"
float inputs:in1 = 24
float inputs:in2 = 12
float2 outputs:out
float2 ui:nodegraph:node:pos = (94.14453, 138.29297)
float2 ui:nodegraph:node:size = (153, 43)
int ui:nodegraph:node:stackingOrder = 1359
}
def Shader "Remap"
{
uniform token info:id = "ND_remap_color3"
color3f inputs:in.connect =
color3f inputs:inhigh.connect = None
color3f inputs:inlow.connect = None
color3f inputs:outhigh.connect =
color3f inputs:outlow.connect =
color3f outputs:out
float2 ui:nodegraph:node:pos = (1755.5, 300.5)
float2 ui:nodegraph:node:size = (95, 171)
int ui:nodegraph:node:stackingOrder = 1282
string[] ui:nodegraph:realitykit:node:attributesShowingChildren = ["inputs:outlow"]
}
def Shader "Separate2"
{
uniform token info:id = "ND_separate2_vector2"
float2 inputs:in.connect =
float outputs:outx
float outputs:outy
float2 ui:nodegraph:node:pos = (1212.6445, 128.91797)
float2 ui:nodegraph:node:size = (116, 117)
int ui:nodegraph:node:stackingOrder = 1363
}
def Shader "Combine3"
{
uniform token info:id = "ND_combine3_color3"
float inputs:in1.connect =
float inputs:in2.connect =
float inputs:in3.connect =
color3f outputs:out
float2 ui:nodegraph:node:pos = (1578.1445, 128.91797)
float2 ui:nodegraph:node:size = (146, 54)
int ui:nodegraph:node:stackingOrder = 1348
}
def Shader "Range"
{
uniform token info:id = "ND_range_vector2"
bool inputs:doclamp = 1
float2 inputs:gamma = (2, 2)
float2 inputs:in.connect =
float2 inputs:inhigh.connect =
float2 inputs:inlow = (0.02, 0.02)
float2 inputs:outhigh
float2 inputs:outlow
float2 outputs:out
float2 ui:nodegraph:node:pos = (990.64453, 128.91797)
float2 ui:nodegraph:node:size = (98, 207)
int ui:nodegraph:node:stackingOrder = 1364
}
def Shader "Subtract"
{
uniform token info:id = "ND_subtract_vector2"
float2 inputs:in1.connect =
float2 inputs:in2.connect =
float2 outputs:out
float2 ui:nodegraph:node:pos = (612.64453, 87.04297)
float2 ui:nodegraph:node:size = (63, 36)
int ui:nodegraph:node:stackingOrder = 1348
}
def Shader "Absval"
{
uniform token info:id = "ND_absval_vector2"
float2 inputs:in.connect =
float2 outputs:out
float2 ui:nodegraph:node:pos = (765.64453, 87.04297)
float2 ui:nodegraph:node:size = (123, 43)
int ui:nodegraph:node:stackingOrder = 1348
}
def Shader "Min"
{
uniform token info:id = "ND_min_float"
float inputs:in1.connect =
float inputs:in2.connect =
float outputs:out
float2 ui:nodegraph:node:pos = (1388.1445, 128.91797)
float2 ui:nodegraph:node:size = (114, 36)
int ui:nodegraph:node:stackingOrder = 1363
}
}
}
================================================
FILE: Countdown/Packages/RealityKitContent/Sources/RealityKitContent/RealityKitContent.rkassets/Scene.usda
================================================
#usda 1.0
(
defaultPrim = "Root"
metersPerUnit = 1
upAxis = "Y"
)
def Xform "Root"
{
reorder nameChildren = ["GridMaterial", "Sphere"]
rel material:binding = None (
bindMaterialAs = "weakerThanDescendants"
)
def Sphere "Sphere" (
active = true
prepend apiSchemas = ["MaterialBindingAPI"]
)
{
rel material:binding = (
bindMaterialAs = "weakerThanDescendants"
)
double radius = 0.05
quatf xformOp:orient = (1, 0, 0, 0)
float3 xformOp:scale = (1, 1, 1)
float3 xformOp:translate = (0, 0, 0.0004)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
def RealityKitComponent "Collider"
{
uint group = 1
uniform token info:id = "RealityKit.Collider"
uint mask = 4294967295
token type = "Default"
def RealityKitStruct "Shape"
{
float3 extent = (0.2, 0.2, 0.2)
float radius = 0.05
token shapeType = "Sphere"
}
}
def RealityKitComponent "InputTarget"
{
uniform token info:id = "RealityKit.InputTarget"
}
}
def "GridMaterial" (
active = true
prepend references = @Materials/GridMaterial.usda@
)
{
float3 xformOp:scale = (1, 1, 1)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
}
}
================================================
FILE: Countdown/Packages/RealityKitContent/Sources/RealityKitContent/RealityKitContent.swift
================================================
import Foundation
/// Bundle for the RealityKitContent project
public let realityKitContentBundle = Bundle.module
================================================
FILE: Countdown/README.md
================================================
**Countdown:** Countdown in Immersive Space
https://github.com/IvanCampos/visionOS-examples/assets/872137/9c1d8406-d95c-436c-bfd1-e4fd3daf2529
================================================
FILE: DualSense/DualSense/Assets.xcassets/AccentColor.colorset/Contents.json
================================================
{
"colors" : [
{
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: DualSense/DualSense/Assets.xcassets/AppIcon.solidimagestack/Back.solidimagestacklayer/Content.imageset/Contents.json
================================================
{
"images" : [
{
"idiom" : "vision",
"scale" : "2x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: DualSense/DualSense/Assets.xcassets/AppIcon.solidimagestack/Back.solidimagestacklayer/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: DualSense/DualSense/Assets.xcassets/AppIcon.solidimagestack/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
},
"layers" : [
{
"filename" : "Front.solidimagestacklayer"
},
{
"filename" : "Middle.solidimagestacklayer"
},
{
"filename" : "Back.solidimagestacklayer"
}
]
}
================================================
FILE: DualSense/DualSense/Assets.xcassets/AppIcon.solidimagestack/Front.solidimagestacklayer/Content.imageset/Contents.json
================================================
{
"images" : [
{
"idiom" : "vision",
"scale" : "2x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: DualSense/DualSense/Assets.xcassets/AppIcon.solidimagestack/Front.solidimagestacklayer/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: DualSense/DualSense/Assets.xcassets/AppIcon.solidimagestack/Middle.solidimagestacklayer/Content.imageset/Contents.json
================================================
{
"images" : [
{
"idiom" : "vision",
"scale" : "2x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: DualSense/DualSense/Assets.xcassets/AppIcon.solidimagestack/Middle.solidimagestacklayer/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: DualSense/DualSense/Assets.xcassets/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: DualSense/DualSense/ContentView.swift
================================================
//
// ContentView.swift
// DualSense
//
// Created by IVAN CAMPOS on 1/12/25.
//
import SwiftUI
import GameController
struct ContentView: View {
@StateObject private var controllerManager = ControllerManager()
// MARK: - Predefined Rainbow Colors (ROYGBIV)
private let rainbowColors: [(name: String, color: Color, rgb: (Float, Float, Float))] = [
("Red", .red, (1.0, 0.0, 0.0)),
("Orange", .orange, (1.0, 0.5, 0.0)),
("Yellow", .yellow, (1.0, 1.0, 0.0)),
("Green", .green, (0.0, 1.0, 0.0)),
("Blue", .blue, (0.0, 0.0, 1.0)),
("Indigo", Color(red: 0.29, green: 0.0, blue: 0.51), (0.29, 0.0, 0.51)),
("Violet", Color(red: 0.56, green: 0.0, blue: 1.0), (0.56, 0.0, 1.0))
]
var body: some View {
VStack(spacing: 20) {
if (controllerManager.controllerName != nil) {
VStack(spacing: 20) {
ZStack {
Group {
Image(systemName: "battery.0percent")
.font(.system(size: 50))
}
// The text is drawn *in front of* the battery image
Text(
controllerManager.batteryLevel != nil
? "\(String(format: "%.0f", controllerManager.batteryLevel! * 100))%"
: "N/A"
)
.font(.subheadline)
.foregroundColor(.green)
}
VStack {
HStack(spacing: 20) {
VStack {
Text(
"\(String(format: "%.2f", controllerManager.leftTriggerValue))"
)
.font(.headline)
if (controllerManager.leftTriggerValue > 0.00) {
Image(
systemName: "l2.button.angledtop.vertical.left.fill"
)
.font(.system(size: 50))
} else {
Image(
systemName: "l2.button.angledtop.vertical.left"
)
.font(.system(size: 50))
}
}
VStack {
Text(
"\(String(format: "%.2f", controllerManager.rightTriggerValue))"
)
.font(.headline)
if (
controllerManager.rightTriggerValue > 0.00
) {
Image(
systemName: "r2.button.angledtop.vertical.right.fill"
)
.font(.system(size: 50))
} else {
Image(
systemName: "r2.button.angledtop.vertical.right"
)
.font(.system(size: 50))
}
}
}
HStack {
if (controllerManager.leftShoulderValue > 0.00) {
Image(
systemName: "l1.button.roundedbottom.horizontal.fill"
)
.font(.system(size: 50))
} else {
Image(
systemName: "l1.button.roundedbottom.horizontal"
)
.font(.system(size: 50))
}
if (controllerManager.rightShoulderValue > 0.00) {
Image(
systemName: "r1.button.roundedbottom.horizontal.fill"
)
.font(.system(size: 50))
} else {
Image(
systemName: "r1.button.roundedbottom.horizontal"
)
.font(.system(size: 50))
}
}
}
HStack(spacing: 20) {
//Options
if (controllerManager.buttonOptions > 0.0) {
Image(systemName: "light.max")
.font(.system(size: 50))
.foregroundColor(controllerManager.lightBar?.imageColor)
} else {
Image(systemName: "light.max")
.font(.system(size: 50))
}
if (controllerManager.touchpad == true) {
Image(systemName: "inset.filled.rectangle")
.font(.system(size: 50))
.foregroundColor(controllerManager.lightBar?.imageColor)
} else {
Image(systemName: "rectangle")
.font(.system(size: 50))
}
//Menu
if (controllerManager.buttonMenu > 0.0) {
Image(systemName: "line.3.horizontal")
.font(.system(size: 50))
.foregroundColor(controllerManager.lightBar?.imageColor)
} else {
Image(systemName: "line.3.horizontal")
.font(.system(size: 50))
}
}
HStack(spacing: 20) {
if (controllerManager.dPadDown > 0.0) {
Image(systemName: "dpad.down.fill")
.font(.system(size: 50))
.padding(.trailing, 20)
} else if (controllerManager.dPadLeft > 0.0) {
Image(systemName: "dpad.left.fill")
.font(.system(size: 50))
.padding(.trailing, 20)
} else if (controllerManager.dPadRight > 0.0) {
Image(systemName: "dpad.right.fill")
.font(.system(size: 50))
.padding(.trailing, 20)
} else if (controllerManager.dPadUp > 0.0) {
Image(systemName: "dpad.up.fill")
.font(.system(size: 50))
.padding(.trailing, 20)
} else {
Image(systemName: "dpad")
.font(.system(size: 50))
.padding(.trailing, 20)
}
if (controllerManager.buttonX == true) {
Image(systemName: "square.circle.fill")
.font(.system(size: 50))
} else {
Image(systemName: "square.circle")
.font(.system(size: 50))
}
if (controllerManager.buttonY == true) {
Image(systemName: "triangle.circle.fill")
.font(.system(size: 50))
} else {
Image(systemName: "triangle.circle")
.font(.system(size: 50))
}
if (controllerManager.buttonA == true) {
Image(systemName: "x.circle.fill")
.font(.system(size: 50))
} else {
Image(systemName: "x.circle")
.font(.system(size: 50))
}
if (controllerManager.buttonB == true) {
Image(systemName: "circle.circle.fill")
.font(.system(size: 50))
} else {
Image(systemName: "circle.circle")
.font(.system(size: 50))
}
}
HStack(spacing: 20) {
if (controllerManager.leftThumbstick > 0.0) {
Image(systemName: "l.joystick.tilt.down.fill")
.font(.system(size: 50))
} else {
Image(systemName: "l.joystick.tilt.down")
.font(.system(size: 50))
}
Text("\(Image(systemName: "playstation.logo"))")
.font(.system(size: 35))
.foregroundColor(Color(UIColor.darkGray))
.padding(.horizontal, 25)
if (controllerManager.rightThumbstick > 0.0) {
Image(systemName: "r.joystick.tilt.down.fill")
.font(.system(size: 50))
} else {
Image(systemName: "r.joystick.tilt.down")
.font(.system(size: 50))
}
}
// MARK: - Thumbstick Axes & Angles
VStack(spacing: 6) {
Text("Left Thumbstick: X=\(String(format: "%.2f", controllerManager.leftThumbstickX)) Y=\(String(format: "%.2f", controllerManager.leftThumbstickY))")
.font(.subheadline)
Text("Angle=\(String(format: "%.0f", controllerManager.leftThumbstickAngle))°")
.font(.subheadline)
.foregroundColor(.secondary)
}
VStack(spacing: 6) {
Text("Right Thumbstick: X=\(String(format: "%.2f", controllerManager.rightThumbstickX)) Y=\(String(format: "%.2f", controllerManager.rightThumbstickY))")
.font(.subheadline)
Text("Angle=\(String(format: "%.0f", controllerManager.rightThumbstickAngle))°")
.font(.subheadline)
.foregroundColor(.secondary)
}
// MARK: - Touchpad Finger Locations
VStack(spacing: 6) {
Text("Touchpad Primary: (X=\(String(format: "%.2f", controllerManager.touchpadPrimaryX)), Y=\(String(format: "%.2f", controllerManager.touchpadPrimaryY)))")
.font(.subheadline)
Text("Swipe Direction: \(String(describing: controllerManager.touchpadSwipeDirection))")
.font(.subheadline)
}
// MARK: - Color Circles (ROYGBIV)
HStack(spacing: 12) {
ForEach(rainbowColors, id: \.name) { colorItem in
Button {
let (r, g, b) = colorItem.rgb
// Call your manager's function to change the light bar color
controllerManager.setLightBarColor(red: r, green: g, blue: b)
} label: {
Circle()
.fill(colorItem.color)
.frame(width: 30, height: 30)
.overlay(
Circle()
.strokeBorder(Color.white.opacity(0.8), lineWidth: 1)
)
}
.buttonStyle(.plain)
.accessibilityLabel(colorItem.name)
}
}
.padding(.top, 10)
}
.padding()
} else {
Text("\(Image(systemName: "playstation.logo"))")
.font(.system(size: 50))
Text("No PS5 DualSense controller connected")
.font(.headline)
.foregroundColor(.red)
}
}
.onAppear {
controllerManager.startMonitoringControllers()
}
.onDisappear {
controllerManager.stopMonitoringControllers()
}
}
}
extension GCColor {
var imageColor: Color {
Color(red: Double(self.red), green: Double(self.green), blue: Double(self.blue))
}
}
================================================
FILE: DualSense/DualSense/ControllerManager.swift
================================================
//
// ControllerManager.swift
// DualSense
//
// Created by IVAN CAMPOS on 1/12/25.
//
import SwiftUI
import GameController
import AVFoundation
class ControllerManager: ObservableObject {
@Published var controllerName: String?
@Published var lightBar: GCColor?
@Published var batteryLevel: Float?
// Face Buttons
@Published var buttonA: Bool = false
@Published var buttonB: Bool = false
@Published var buttonX: Bool = false
@Published var buttonY: Bool = false
// Trigger values
@Published var leftTriggerValue: Float = 0.0
@Published var rightTriggerValue: Float = 0.0
// Shoulder values
@Published var leftShoulderValue: Float = 0.0
@Published var rightShoulderValue: Float = 0.0
// DualSense’s touchpad
@Published var touchpad: Bool = false
// Finger locations on the touchpad (0.0 to 1.0)
@Published var touchpadPrimaryX: Float = 0.0
@Published var touchpadPrimaryY: Float = 0.0
@Published var touchpadSwipeDirection: SwipeDirection?
// Misc Buttons
@Published var buttonMenu: Float = 0.0
@Published var buttonOptions: Float = 0.0
// D-Pad
@Published var dPadUp: Float = 0.0
@Published var dPadDown: Float = 0.0
@Published var dPadLeft: Float = 0.0
@Published var dPadRight: Float = 0.0
// Thumbsticks
@Published var leftThumbstick: Float = 0.0
@Published var rightThumbstick: Float = 0.0
// Thumbstick axis values
@Published var leftThumbstickX: Float = 0.0
@Published var leftThumbstickY: Float = 0.0
@Published var rightThumbstickX: Float = 0.0
@Published var rightThumbstickY: Float = 0.0
// Thumbstick angles (in degrees, -180...180)
@Published var leftThumbstickAngle: Float = 0.0
@Published var rightThumbstickAngle: Float = 0.0
// MARK: - Sequence Tracking
enum ControllerInput {
case dPadUp
case dPadDown
case dPadLeft
case dPadRight
case buttonA
case buttonB
case buttonX
case buttonY
case buttonMenu
case buttonOptions
}
enum SwipeDirection {
case left
case right
case up
case down
}
struct CheatSequence {
let name: String
let steps: [ControllerInput]
let audioFile: String
var currentIndex: Int = 0
}
private var cheatSequences: [CheatSequence] = [
CheatSequence(
name: "Konami Code",
steps: [
.dPadUp, .dPadUp, .dPadDown, .dPadDown,
.dPadLeft, .dPadRight, .dPadLeft, .dPadRight,
.buttonA, .buttonB, .buttonMenu
],
audioFile: "cheat1.mp3"
),
CheatSequence(
name: "Secret Mode",
steps: [
.dPadLeft, .dPadLeft, .buttonB, .buttonA
],
audioFile: "cheat2.mp3"
)
// Add more if needed...
]
// MARK: - Audio
private var audioPlayer: AVAudioPlayer?
// MARK: - For Gesture Detection
// A simple approach to detect tap/swipe on the primary touch.
private var lastTouchPosition: CGPoint?
private var touchStartTime: Date?
private let swipeThreshold: CGFloat = 0.5 // 0.5 of the trackpad's range
private let tapMaxDuration: TimeInterval = 0.25
private var currentController: GCController?
private var dualSensePad: GCDualSenseGamepad?
// MARK: - Start Monitoring
func startMonitoringControllers() {
NotificationCenter.default.addObserver(
self,
selector: #selector(controllerDidConnect(_:)),
name: .GCControllerDidConnect,
object: nil
)
NotificationCenter.default.addObserver(
self,
selector: #selector(controllerDidDisconnect(_:)),
name: .GCControllerDidDisconnect,
object: nil
)
// If a controller is already connected at launch
if let controller = GCController.controllers().first {
setupController(controller)
}
}
// MARK: - Stop Monitoring
func stopMonitoringControllers() {
NotificationCenter.default.removeObserver(self, name: .GCControllerDidConnect, object: nil)
NotificationCenter.default.removeObserver(self, name: .GCControllerDidDisconnect, object: nil)
}
// MARK: - Notifications
@objc private func controllerDidConnect(_ notification: Notification) {
guard let controller = notification.object as? GCController else { return }
setupController(controller)
}
@objc private func controllerDidDisconnect(_ notification: Notification) {
guard let controller = notification.object as? GCController else { return }
// If the currently tracked controller disconnected, clear references
if controller == currentController {
clearCurrentController()
}
}
private func clearCurrentController() {
DispatchQueue.main.async {
self.currentController = nil
self.dualSensePad = nil
self.controllerName = nil
// Reset all published properties to default
self.resetAllValues()
}
}
private func resetAllValues() {
batteryLevel = nil
lightBar = nil
buttonA = false
buttonB = false
buttonX = false
buttonY = false
leftTriggerValue = 0.0
rightTriggerValue = 0.0
leftShoulderValue = 0.0
rightShoulderValue = 0.0
touchpad = false
buttonMenu = 0.0
buttonOptions = 0.0
dPadUp = 0.0
dPadDown = 0.0
dPadLeft = 0.0
dPadRight = 0.0
leftThumbstick = 0.0
rightThumbstick = 0.0
lastTouchPosition = nil
touchStartTime = nil
}
// MARK: - Setup Controller
private func setupController(_ controller: GCController) {
currentController = controller
controllerName = controller.vendorName ?? "Unknown Controller"
guard let dualSense = controller.extendedGamepad as? GCDualSenseGamepad else {
print("Controller is not recognized as a DualSense.")
return
}
// Store the DualSense reference for later (e.g. adaptive triggers)
dualSensePad = dualSense
// MARK: Battery
if let battery = controller.battery {
DispatchQueue.main.async {
self.batteryLevel = battery.batteryLevel
}
}
// MARK: Light Bar
// Example: set to green at start
let defaultColor = GCColor(red: 0.0, green: 1.0, blue: 0.0)
lightBar = defaultColor
controller.light?.color = defaultColor
// MARK: Thumbsticks (Buttons on L3/R3)
controller.extendedGamepad?.leftThumbstickButton?.valueChangedHandler = { [weak self] _, value, _ in
DispatchQueue.main.async {
self?.leftThumbstick = value
}
}
controller.extendedGamepad?.rightThumbstickButton?.valueChangedHandler = { [weak self] _, value, _ in
DispatchQueue.main.async {
self?.rightThumbstick = value
}
}
// MARK: Thumbstick Directions (x, y)
// This allows capturing the actual axes of each thumbstick
controller.extendedGamepad?.leftThumbstick.valueChangedHandler = { [weak self] _, xValue, yValue in
DispatchQueue.main.async {
self?.leftThumbstickX = xValue
self?.leftThumbstickY = yValue
self?.leftThumbstickAngle = self?.calculateAngle(x: xValue, y: yValue) ?? 0.0
}
}
controller.extendedGamepad?.rightThumbstick.valueChangedHandler = { [weak self] _, xValue, yValue in
DispatchQueue.main.async {
self?.rightThumbstickX = xValue
self?.rightThumbstickY = yValue
self?.rightThumbstickAngle = self?.calculateAngle(x: xValue, y: yValue) ?? 0.0
}
}
// MARK: D-Pad
controller.extendedGamepad?.dpad.up.valueChangedHandler = { [weak self] _, value, _ in
DispatchQueue.main.async {
self?.dPadUp = value
if value > 0.0 {
self?.handleInput(.dPadUp)
}
}
}
controller.extendedGamepad?.dpad.down.valueChangedHandler = { [weak self] _, value, _ in
DispatchQueue.main.async {
self?.dPadDown = value
if value > 0.0 {
self?.handleInput(.dPadDown)
}
}
}
controller.extendedGamepad?.dpad.left.valueChangedHandler = { [weak self] _, value, _ in
DispatchQueue.main.async {
self?.dPadLeft = value
if value > 0.0 {
self?.handleInput(.dPadLeft)
}
}
}
controller.extendedGamepad?.dpad.right.valueChangedHandler = { [weak self] _, value, _ in
DispatchQueue.main.async {
self?.dPadRight = value
if value > 0.0 {
self?.handleInput(.dPadRight)
}
}
}
// MARK: Face Buttons
dualSense.buttonA.pressedChangedHandler = { [weak self] _, _, pressed in
DispatchQueue.main.async {
self?.buttonA = pressed
if pressed {
self?.handleInput(.buttonA)
}
}
}
dualSense.buttonB.pressedChangedHandler = { [weak self] _, _, pressed in
DispatchQueue.main.async {
self?.buttonB = pressed
if pressed {
self?.handleInput(.buttonB)
}
}
}
dualSense.buttonX.pressedChangedHandler = { [weak self] _, _, pressed in
DispatchQueue.main.async {
self?.buttonX = pressed
if pressed {
self?.handleInput(.buttonX)
}
}
}
dualSense.buttonY.pressedChangedHandler = { [weak self] _, _, pressed in
DispatchQueue.main.async {
self?.buttonY = pressed
if pressed {
self?.handleInput(.buttonY)
}
}
}
// MARK: Menu / Options Buttons
if let menuButton = controller.extendedGamepad?.buttonMenu {
menuButton.valueChangedHandler = { [weak self] _, value, _ in
DispatchQueue.main.async {
// e.g. interpret this as "Options" or "Pause"
self?.buttonMenu = value
if value > 0.0 {
self?.handleInput(.buttonMenu)
}
}
}
}
if let optionsButton = controller.extendedGamepad?.buttonOptions {
optionsButton.valueChangedHandler = { [weak self] _, value, _ in
DispatchQueue.main.async {
// e.g. interpret this as "Menu" or "Select"
self?.buttonOptions = value
if value > 0.0 {
self?.handleInput(.buttonOptions)
}
}
}
}
// MARK: Triggers and Shoulders
dualSense.leftTrigger.valueChangedHandler = { [weak self] _, value, _ in
DispatchQueue.main.async {
self?.leftTriggerValue = value
}
}
dualSense.rightTrigger.valueChangedHandler = { [weak self] _, value, _ in
DispatchQueue.main.async {
self?.rightTriggerValue = value
}
}
controller.extendedGamepad?.leftShoulder.valueChangedHandler = { [weak self] _, value, _ in
DispatchQueue.main.async {
self?.leftShoulderValue = value
}
}
controller.extendedGamepad?.rightShoulder.valueChangedHandler = { [weak self] _, value, _ in
DispatchQueue.main.async {
self?.rightShoulderValue = value
}
}
// MARK: Touchpad
dualSense.touchpadButton.pressedChangedHandler = { [weak self] _, _, pressed in
DispatchQueue.main.async {
self?.touchpad = pressed
}
}
// Primary Touchpad Finger (xValue, yValue range: 0.0 to 1.0)
dualSense.touchpadPrimary.valueChangedHandler = { [weak self] _, xValue, yValue in
DispatchQueue.main.async {
self?.touchpadPrimaryX = xValue
self?.touchpadPrimaryY = yValue
self?.touchpadSwipeDirection = self?.detectTouchpadGestures(xValue: xValue, yValue: yValue)
}
}
// Up/Down/Left/Right on the primary portion of the touchpad
dualSense.touchpadPrimary.down.valueChangedHandler = { _, value, _ in
// print("Touchpad Primary Down: \(value)")
}
dualSense.touchpadPrimary.up.valueChangedHandler = { _, value, _ in
// print("Touchpad Primary Up: \(value)")
}
dualSense.touchpadPrimary.left.valueChangedHandler = { _, value, _ in
// print("Touchpad Primary Left: \(value)")
}
dualSense.touchpadPrimary.right.valueChangedHandler = { _, value, _ in
// print("Touchpad Primary Right: \(value)")
}
}
// MARK: - Manage Tap or Swipe Gestures on the Touchpad
/// Detects a tap or swipe gesture on the touchpad, returning a direction
/// if the gesture qualifies as a swipe.
///
/// - Parameters:
/// - xValue: The current X coordinate of the primary touch (range 0–1)
/// - yValue: The current Y coordinate of the primary touch (range 0–1)
///
/// - Returns: A `SwipeDirection` if this call detects a swipe, otherwise `nil`.
func detectTouchpadGestures(xValue: Float, yValue: Float) -> SwipeDirection? {
let currentPoint = CGPoint(x: CGFloat(xValue), y: CGFloat(yValue))
// If we have no recorded position yet, treat this as a "touch began."
guard let start = lastTouchPosition else {
lastTouchPosition = currentPoint
touchStartTime = Date()
return nil
}
// If xValue or yValue jumps quickly, check for swipe
let dx = currentPoint.x - start.x
let dy = currentPoint.y - start.y
let distance = sqrt(dx*dx + dy*dy)
// Check for swipe if the distance exceeds the threshold
if distance > swipeThreshold {
// It's a swipe!
print("Detected swipe on touchpad: dx=\(dx), dy=\(dy)")
let swipeDirection: SwipeDirection
if abs(dx) > abs(dy) {
// Horizontal swipe
swipeDirection = dx > 0 ? .right : .left
} else {
// Vertical swipe
swipeDirection = dy > 0 ? .down : .up
}
touchpadSwipeDirection = swipeDirection
print("Swipe Direction: \(swipeDirection)")
// Reset state for the next gesture
lastTouchPosition = nil
touchStartTime = nil
return swipeDirection
}
// If the user lifts their finger or movement is minimal, you might interpret a tap.
// In this example, we detect a "tap" if the user quickly pressed and did NOT move far.
if let startTime = touchStartTime {
let elapsed = Date().timeIntervalSince(startTime)
if elapsed > tapMaxDuration && distance < swipeThreshold {
// This was a longer hold, so maybe not a tap; do nothing yet
return nil
}
}
// No swipe detected yet
return nil
}
// MARK: - Compute Angle Helper
private func calculateAngle(x: Float, y: Float) -> Float {
// atan2 returns angle in radians; convert to degrees for clarity
let radians = atan2(y, x)
return radians * 180.0 / .pi
}
// MARK: - Adaptive Feedback
func triggerAdaptiveFeedback() {
guard let dualSense = dualSensePad else { return }
let adaptiveTrigger = dualSense.rightTrigger
// Example: a simple adaptive feedback effect
let resistiveStrength = min(1.0, 0.2 + adaptiveTrigger.value)
if adaptiveTrigger.value < 0.9 {
adaptiveTrigger.setModeFeedbackWithStartPosition(
0.0,
resistiveStrength: resistiveStrength
)
} else {
adaptiveTrigger.setModeVibrationWithStartPosition(
0.0,
amplitude: resistiveStrength,
frequency: 0.03
)
}
// Turn it off after 1 second
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
adaptiveTrigger.setModeOff()
}
}
// MARK: - Handle Multiple Cheat Sequences
private func handleInput(_ input: ControllerInput) {
for i in cheatSequences.indices {
let expected = cheatSequences[i].steps[cheatSequences[i].currentIndex]
if input == expected {
cheatSequences[i].currentIndex += 1
// Check for completion
if cheatSequences[i].currentIndex == cheatSequences[i].steps.count {
playCheatCodeAudio(filename: cheatSequences[i].audioFile)
print("\(cheatSequences[i].name) completed!")
// Reset so user can attempt it again if they want
cheatSequences[i].currentIndex = 0
}
} else {
// Mismatch, reset index
cheatSequences[i].currentIndex = 0
}
}
}
// MARK: - Audio Playback
private func playCheatCodeAudio(filename: String) {
guard let url = Bundle.main.url(forResource: filename, withExtension: nil) else {
print("Audio file not found: \(filename)")
return
}
do {
audioPlayer = try AVAudioPlayer(contentsOf: url)
audioPlayer?.play()
} catch {
print("Error playing audio: \(error.localizedDescription)")
}
}
// MARK: - Light Bar Color Changer
func setLightBarColor(red: Float, green: Float, blue: Float) {
guard let controller = currentController else { return }
let color = GCColor(red: red, green: green, blue: blue)
controller.light?.color = color
self.lightBar = color
}
}
================================================
FILE: DualSense/DualSense/DualSenseApp.swift
================================================
//
// DualSenseApp.swift
// DualSense
//
// Created by IVAN CAMPOS on 1/12/25.
//
import SwiftUI
@main
struct DualSenseApp: App {
var body: some Scene {
WindowGroup {
ContentView()
.handlesGameControllerEvents(matching: .gamepad)
}
}
}
================================================
FILE: DualSense/DualSense/Info.plist
================================================
UIApplicationSceneManifest
UIApplicationPreferredDefaultSceneSessionRole
UIWindowSceneSessionRoleApplication
UIApplicationSupportsMultipleScenes
UISceneConfigurations
================================================
FILE: DualSense/DualSense/Preview Content/Preview Assets.xcassets/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: DualSense/DualSense.xcodeproj/project.pbxproj
================================================
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 77;
objects = {
/* Begin PBXBuildFile section */
3BDEF2272D338B300005B577 /* RealityKitContent in Frameworks */ = {isa = PBXBuildFile; productRef = 3BDEF2262D338B300005B577 /* RealityKitContent */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
3BDEF2212D338B300005B577 /* DualSense.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = DualSense.app; sourceTree = BUILT_PRODUCTS_DIR; };
3BDEF2252D338B300005B577 /* RealityKitContent */ = {isa = PBXFileReference; lastKnownFileType = wrapper; path = RealityKitContent; sourceTree = ""; };
/* End PBXFileReference section */
/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */
3BDEF2322D338B310005B577 /* Exceptions for "DualSense" folder in "DualSense" target */ = {
isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
membershipExceptions = (
Info.plist,
);
target = 3BDEF2202D338B300005B577 /* DualSense */;
};
/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */
/* Begin PBXFileSystemSynchronizedRootGroup section */
3BDEF2232D338B300005B577 /* DualSense */ = {
isa = PBXFileSystemSynchronizedRootGroup;
exceptions = (
3BDEF2322D338B310005B577 /* Exceptions for "DualSense" folder in "DualSense" target */,
);
path = DualSense;
sourceTree = "";
};
/* End PBXFileSystemSynchronizedRootGroup section */
/* Begin PBXFrameworksBuildPhase section */
3BDEF21E2D338B300005B577 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
3BDEF2272D338B300005B577 /* RealityKitContent in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
3BDEF2182D338B300005B577 = {
isa = PBXGroup;
children = (
3BDEF2232D338B300005B577 /* DualSense */,
3BDEF2242D338B300005B577 /* Packages */,
3BDEF2222D338B300005B577 /* Products */,
);
sourceTree = "";
};
3BDEF2222D338B300005B577 /* Products */ = {
isa = PBXGroup;
children = (
3BDEF2212D338B300005B577 /* DualSense.app */,
);
name = Products;
sourceTree = "";
};
3BDEF2242D338B300005B577 /* Packages */ = {
isa = PBXGroup;
children = (
3BDEF2252D338B300005B577 /* RealityKitContent */,
);
path = Packages;
sourceTree = "";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
3BDEF2202D338B300005B577 /* DualSense */ = {
isa = PBXNativeTarget;
buildConfigurationList = 3BDEF2332D338B310005B577 /* Build configuration list for PBXNativeTarget "DualSense" */;
buildPhases = (
3BDEF21D2D338B300005B577 /* Sources */,
3BDEF21E2D338B300005B577 /* Frameworks */,
3BDEF21F2D338B300005B577 /* Resources */,
);
buildRules = (
);
dependencies = (
);
fileSystemSynchronizedGroups = (
3BDEF2232D338B300005B577 /* DualSense */,
);
name = DualSense;
packageProductDependencies = (
3BDEF2262D338B300005B577 /* RealityKitContent */,
);
productName = DualSense;
productReference = 3BDEF2212D338B300005B577 /* DualSense.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
3BDEF2192D338B300005B577 /* Project object */ = {
isa = PBXProject;
attributes = {
BuildIndependentTargetsInParallel = 1;
LastSwiftUpdateCheck = 1620;
LastUpgradeCheck = 1620;
TargetAttributes = {
3BDEF2202D338B300005B577 = {
CreatedOnToolsVersion = 16.2;
};
};
};
buildConfigurationList = 3BDEF21C2D338B300005B577 /* Build configuration list for PBXProject "DualSense" */;
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = 3BDEF2182D338B300005B577;
minimizedProjectReferenceProxies = 1;
preferredProjectObjectVersion = 77;
productRefGroup = 3BDEF2222D338B300005B577 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
3BDEF2202D338B300005B577 /* DualSense */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
3BDEF21F2D338B300005B577 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
3BDEF21D2D338B300005B577 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
3BDEF2342D338B310005B577 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_ASSET_PATHS = "\"DualSense/Preview Content\"";
DEVELOPMENT_TEAM = 2DJDH872JZ;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "$(TARGET_NAME)/Info.plist";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.ivancampos.DualSense;
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "xros xrsimulator";
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = 7;
};
name = Debug;
};
3BDEF2352D338B310005B577 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_ASSET_PATHS = "\"DualSense/Preview Content\"";
DEVELOPMENT_TEAM = 2DJDH872JZ;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "$(TARGET_NAME)/Info.plist";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.ivancampos.DualSense;
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "xros xrsimulator";
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = 7;
};
name = Release;
};
3BDEF2362D338B310005B577 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu17;
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;
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = xros;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
XROS_DEPLOYMENT_TARGET = 2.1;
};
name = Debug;
};
3BDEF2372D338B310005B577 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu17;
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;
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = xros;
SWIFT_COMPILATION_MODE = wholemodule;
VALIDATE_PRODUCT = YES;
XROS_DEPLOYMENT_TARGET = 2.1;
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
3BDEF21C2D338B300005B577 /* Build configuration list for PBXProject "DualSense" */ = {
isa = XCConfigurationList;
buildConfigurations = (
3BDEF2362D338B310005B577 /* Debug */,
3BDEF2372D338B310005B577 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
3BDEF2332D338B310005B577 /* Build configuration list for PBXNativeTarget "DualSense" */ = {
isa = XCConfigurationList;
buildConfigurations = (
3BDEF2342D338B310005B577 /* Debug */,
3BDEF2352D338B310005B577 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
/* Begin XCSwiftPackageProductDependency section */
3BDEF2262D338B300005B577 /* RealityKitContent */ = {
isa = XCSwiftPackageProductDependency;
productName = RealityKitContent;
};
/* End XCSwiftPackageProductDependency section */
};
rootObject = 3BDEF2192D338B300005B577 /* Project object */;
}
================================================
FILE: DualSense/DualSense.xcodeproj/project.xcworkspace/contents.xcworkspacedata
================================================
================================================
FILE: DualSense/Packages/RealityKitContent/Package.realitycomposerpro/ProjectData/main.json
================================================
{
"pathsToIds" : {
"\/RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/GridMaterial.usda" : "440DE5B4-E4E4-459B-AABF-9ACE96319272",
"\/RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/procedural_sphere_grid.usda" : "34C460AE-CA1B-4348-BD05-621ACBDFFE97",
"\/RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/Scene.usda" : "0A9B4653-B11E-4D6A-850E-C6FCB621626C",
"\/RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/Untitled Scene.usda" : "03E02005-EFA6-48D6-8A76-05B2822A74E9",
"RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/GridMaterial.usda" : "FBD8436F-6B8B-4B82-99B5-995D538B4704",
"RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/procedural_sphere_grid.usda" : "1CBF3893-ABFD-408C-8B91-045BFD257808",
"RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/Scene.usda" : "26DBAE76-5DD8-47B6-A085-1B4ADA111097"
}
}
================================================
FILE: DualSense/Packages/RealityKitContent/Package.realitycomposerpro/WorkspaceData/SceneMetadataList.json
================================================
{
"0A9B4653-B11E-4D6A-850E-C6FCB621626C" : {
"cameraTransform" : [
0.9807314,
-1.9820146e-10,
-0.195361,
0,
-0.10051192,
0.85749435,
-0.5045798,
0,
0.16752096,
0.51449335,
0.84097165,
0,
0.09084191,
0.05849296,
0.13903293,
1
],
"objectMetadataList" : [
[
"0A9B4653-B11E-4D6A-850E-C6FCB621626C",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
},
[
"0A9B4653-B11E-4D6A-850E-C6FCB621626C",
"Root",
"GridMaterial"
],
{
"isExpanded" : true,
"isLocked" : false
},
[
"0A9B4653-B11E-4D6A-850E-C6FCB621626C",
"Root",
"Sphere"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
},
"1CBF3893-ABFD-408C-8B91-045BFD257808" : {
"cameraTransform" : [
0.99999994,
0,
-0,
0,
-0,
0.8660255,
-0.49999988,
0,
0,
0.49999988,
0.8660255,
0,
0,
0.27093542,
0.46927398,
1
],
"objectMetadataList" : [
]
},
"03E02005-EFA6-48D6-8A76-05B2822A74E9" : {
"cameraTransform" : [
0.99999994,
0,
-0,
0,
-0,
0.8660254,
-0.49999994,
0,
0,
0.49999994,
0.8660254,
0,
0,
0.5981957,
1.0361054,
1
],
"objectMetadataList" : [
]
},
"26DBAE76-5DD8-47B6-A085-1B4ADA111097" : {
"cameraTransform" : [
1,
0,
-0,
0,
-0,
0.7071069,
-0.7071067,
0,
0,
0.7071067,
0.7071069,
0,
0,
0.2681068,
0.26850593,
1
],
"objectMetadataList" : [
[
"26DBAE76-5DD8-47B6-A085-1B4ADA111097",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
},
"34C460AE-CA1B-4348-BD05-621ACBDFFE97" : {
"cameraTransform" : [
0.99999994,
0,
-0,
0,
-0,
0.8660255,
-0.49999988,
0,
0,
0.49999988,
0.8660255,
0,
0,
0.27093542,
0.46927398,
1
],
"objectMetadataList" : [
]
},
"440DE5B4-E4E4-459B-AABF-9ACE96319272" : {
"cameraTransform" : [
0.99999994,
0,
-0,
0,
-0,
0.8660254,
-0.49999994,
0,
0,
0.49999994,
0.8660254,
0,
0,
0.5981957,
1.0361054,
1
],
"objectMetadataList" : [
[
"440DE5B4-E4E4-459B-AABF-9ACE96319272",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
},
"FBD8436F-6B8B-4B82-99B5-995D538B4704" : {
"cameraTransform" : [
0.99999994,
0,
-0,
0,
-0,
0.8660254,
-0.49999994,
0,
0,
0.49999994,
0.8660254,
0,
0,
0.5981957,
1.0361054,
1
],
"objectMetadataList" : [
[
"FBD8436F-6B8B-4B82-99B5-995D538B4704",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
}
}
================================================
FILE: DualSense/Packages/RealityKitContent/Package.realitycomposerpro/WorkspaceData/Settings.rcprojectdata
================================================
{
"cameraPresets" : {
},
"secondaryToolbarData" : {
"isGridVisible" : true,
"sceneReverbPreset" : -1
},
"unitDefaults" : {
"°" : "°",
"kg" : "g",
"m" : "cm",
"m\/s" : "m\/s",
"m\/s²" : "m\/s²",
"s" : "s"
}
}
================================================
FILE: DualSense/Packages/RealityKitContent/Package.swift
================================================
// swift-tools-version:6.0
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "RealityKitContent",
platforms: [
.visionOS(.v2),
.macOS(.v15),
.iOS(.v18)
],
products: [
// Products define the executables and libraries a package produces, and make them visible to other packages.
.library(
name: "RealityKitContent",
targets: ["RealityKitContent"]),
],
dependencies: [
// Dependencies declare other packages that this package depends on.
// .package(url: /* package url */, from: "1.0.0"),
],
targets: [
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
// Targets can depend on other targets in this package, and on products in packages this package depends on.
.target(
name: "RealityKitContent",
dependencies: []),
]
)
================================================
FILE: DualSense/Packages/RealityKitContent/README.md
================================================
# RealityKitContent
A description of this package.
================================================
FILE: DualSense/Packages/RealityKitContent/Sources/RealityKitContent/RealityKitContent.rkassets/Materials/GridMaterial.usda
================================================
#usda 1.0
(
defaultPrim = "Root"
metersPerUnit = 1
upAxis = "Y"
)
def Xform "Root"
{
def Material "GridMaterial"
{
reorder nameChildren = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "DefaultSurfaceShader", "MaterialXPreviewSurface", "Texcoord", "Add", "Multiply", "Fractional", "LineCounts", "Multiply_1", "Separate2", "Separate2_1", "Ifgreater", "Ifgreater_1", "Max", "Background_Color"]
token outputs:mtlx:surface.connect =
token outputs:realitykit:vertex
token outputs:surface
float2 ui:nodegraph:realitykit:subgraphOutputs:pos = (2222, 300.5)
float2 ui:nodegraph:realitykit:subgraphOutputs:size = (182, 89)
int ui:nodegraph:realitykit:subgraphOutputs:stackingOrder = 749
def Shader "DefaultSurfaceShader"
{
uniform token info:id = "UsdPreviewSurface"
color3f inputs:diffuseColor = (1, 1, 1)
float inputs:roughness = 0.75
token outputs:surface
}
def Shader "MaterialXPreviewSurface"
{
uniform token info:id = "ND_UsdPreviewSurface_surfaceshader"
float inputs:clearcoat
float inputs:clearcoatRoughness
color3f inputs:diffuseColor.connect =
color3f inputs:emissiveColor
float inputs:ior
float inputs:metallic = 0.15
float3 inputs:normal
float inputs:occlusion
float inputs:opacity
float inputs:opacityThreshold
float inputs:roughness = 0.5
token outputs:out
float2 ui:nodegraph:node:pos = (1967, 300.5)
float2 ui:nodegraph:node:size = (208, 297)
int ui:nodegraph:node:stackingOrder = 870
string[] ui:nodegraph:realitykit:node:attributesShowingChildren = ["Advanced"]
}
def Shader "Texcoord"
{
uniform token info:id = "ND_texcoord_vector2"
float2 outputs:out
float2 ui:nodegraph:node:pos = (94.14453, 35.29297)
float2 ui:nodegraph:node:size = (182, 43)
int ui:nodegraph:node:stackingOrder = 1358
}
def Shader "Multiply"
{
uniform token info:id = "ND_multiply_vector2"
float2 inputs:in1.connect =
float2 inputs:in2 = (32, 15)
float2 inputs:in2.connect =
float2 outputs:out
float2 ui:nodegraph:node:pos = (275.64453, 47.29297)
float2 ui:nodegraph:node:size = (61, 36)
int ui:nodegraph:node:stackingOrder = 1348
string[] ui:nodegraph:realitykit:node:attributesShowingChildren = ["inputs:in2"]
}
def Shader "Fractional"
{
uniform token info:id = "ND_realitykit_fractional_vector2"
float2 inputs:in.connect =
float2 outputs:out
float2 ui:nodegraph:node:pos = (440.5, 49.5)
float2 ui:nodegraph:node:size = (155, 99)
int ui:nodegraph:node:stackingOrder = 1345
}
def Shader "BaseColor"
{
uniform token info:id = "ND_constant_color3"
color3f inputs:value = (0.89737034, 0.89737034, 0.89737034) (
colorSpace = "Input - Texture - sRGB - sRGB"
)
color3f inputs:value.connect = None
color3f outputs:out
float2 ui:nodegraph:node:pos = (1537.5977, 363.07812)
float2 ui:nodegraph:node:size = (150, 43)
int ui:nodegraph:node:stackingOrder = 1353
}
def Shader "LineColor"
{
uniform token info:id = "ND_constant_color3"
color3f inputs:value = (0.55945957, 0.55945957, 0.55945957) (
colorSpace = "Input - Texture - sRGB - sRGB"
)
color3f inputs:value.connect = None
color3f outputs:out
float2 ui:nodegraph:node:pos = (1536.9844, 287.86328)
float2 ui:nodegraph:node:size = (146, 43)
int ui:nodegraph:node:stackingOrder = 1355
}
def Shader "LineWidths"
{
uniform token info:id = "ND_combine2_vector2"
float inputs:in1 = 0.1
float inputs:in2 = 0.1
float2 outputs:out
float2 ui:nodegraph:node:pos = (443.64453, 233.79297)
float2 ui:nodegraph:node:size = (151, 43)
int ui:nodegraph:node:stackingOrder = 1361
}
def Shader "LineCounts"
{
uniform token info:id = "ND_combine2_vector2"
float inputs:in1 = 24
float inputs:in2 = 12
float2 outputs:out
float2 ui:nodegraph:node:pos = (94.14453, 138.29297)
float2 ui:nodegraph:node:size = (153, 43)
int ui:nodegraph:node:stackingOrder = 1359
}
def Shader "Remap"
{
uniform token info:id = "ND_remap_color3"
color3f inputs:in.connect =
color3f inputs:inhigh.connect = None
color3f inputs:inlow.connect = None
color3f inputs:outhigh.connect =
color3f inputs:outlow.connect =
color3f outputs:out
float2 ui:nodegraph:node:pos = (1755.5, 300.5)
float2 ui:nodegraph:node:size = (95, 171)
int ui:nodegraph:node:stackingOrder = 1282
string[] ui:nodegraph:realitykit:node:attributesShowingChildren = ["inputs:outlow"]
}
def Shader "Separate2"
{
uniform token info:id = "ND_separate2_vector2"
float2 inputs:in.connect =
float outputs:outx
float outputs:outy
float2 ui:nodegraph:node:pos = (1212.6445, 128.91797)
float2 ui:nodegraph:node:size = (116, 117)
int ui:nodegraph:node:stackingOrder = 1363
}
def Shader "Combine3"
{
uniform token info:id = "ND_combine3_color3"
float inputs:in1.connect =
float inputs:in2.connect =
float inputs:in3.connect =
color3f outputs:out
float2 ui:nodegraph:node:pos = (1578.1445, 128.91797)
float2 ui:nodegraph:node:size = (146, 54)
int ui:nodegraph:node:stackingOrder = 1348
}
def Shader "Range"
{
uniform token info:id = "ND_range_vector2"
bool inputs:doclamp = 1
float2 inputs:gamma = (2, 2)
float2 inputs:in.connect =
float2 inputs:inhigh.connect =
float2 inputs:inlow = (0.02, 0.02)
float2 inputs:outhigh
float2 inputs:outlow
float2 outputs:out
float2 ui:nodegraph:node:pos = (990.64453, 128.91797)
float2 ui:nodegraph:node:size = (98, 207)
int ui:nodegraph:node:stackingOrder = 1364
}
def Shader "Subtract"
{
uniform token info:id = "ND_subtract_vector2"
float2 inputs:in1.connect =
float2 inputs:in2.connect =
float2 outputs:out
float2 ui:nodegraph:node:pos = (612.64453, 87.04297)
float2 ui:nodegraph:node:size = (63, 36)
int ui:nodegraph:node:stackingOrder = 1348
}
def Shader "Absval"
{
uniform token info:id = "ND_absval_vector2"
float2 inputs:in.connect =
float2 outputs:out
float2 ui:nodegraph:node:pos = (765.64453, 87.04297)
float2 ui:nodegraph:node:size = (123, 43)
int ui:nodegraph:node:stackingOrder = 1348
}
def Shader "Min"
{
uniform token info:id = "ND_min_float"
float inputs:in1.connect =
float inputs:in2.connect =
float outputs:out
float2 ui:nodegraph:node:pos = (1388.1445, 128.91797)
float2 ui:nodegraph:node:size = (114, 36)
int ui:nodegraph:node:stackingOrder = 1363
}
}
}
================================================
FILE: DualSense/Packages/RealityKitContent/Sources/RealityKitContent/RealityKitContent.rkassets/Scene.usda
================================================
#usda 1.0
(
defaultPrim = "Root"
metersPerUnit = 1
upAxis = "Y"
)
def Xform "Root"
{
reorder nameChildren = ["GridMaterial", "Sphere"]
rel material:binding = None (
bindMaterialAs = "weakerThanDescendants"
)
def Sphere "Sphere" (
active = true
prepend apiSchemas = ["MaterialBindingAPI"]
)
{
rel material:binding = (
bindMaterialAs = "weakerThanDescendants"
)
double radius = 0.05
quatf xformOp:orient = (1, 0, 0, 0)
float3 xformOp:scale = (1, 1, 1)
float3 xformOp:translate = (0, 0, 0.0004)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
def RealityKitComponent "Collider"
{
uint group = 1
uniform token info:id = "RealityKit.Collider"
uint mask = 4294967295
token type = "Default"
def RealityKitStruct "Shape"
{
float3 extent = (0.2, 0.2, 0.2)
float radius = 0.05
token shapeType = "Sphere"
}
}
def RealityKitComponent "InputTarget"
{
uniform token info:id = "RealityKit.InputTarget"
}
}
def "GridMaterial" (
active = true
prepend references = @Materials/GridMaterial.usda@
)
{
float3 xformOp:scale = (1, 1, 1)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
}
}
================================================
FILE: DualSense/Packages/RealityKitContent/Sources/RealityKitContent/RealityKitContent.swift
================================================
import Foundation
/// Bundle for the RealityKitContent project
public let realityKitContentBundle = Bundle.module
================================================
FILE: DualSense/README.md
================================================
**DualSense**
PS5 DualSense Controller integration for Apple Vision Pro
https://github.com/user-attachments/assets/b759d180-0bb0-4ab4-a039-a814aab1199a
================================================
FILE: FearAndGreed/FearAndGreed/Assets.xcassets/AppIcon.solidimagestack/Back.solidimagestacklayer/Content.imageset/Contents.json
================================================
{
"images" : [
{
"idiom" : "vision",
"scale" : "2x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: FearAndGreed/FearAndGreed/Assets.xcassets/AppIcon.solidimagestack/Back.solidimagestacklayer/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: FearAndGreed/FearAndGreed/Assets.xcassets/AppIcon.solidimagestack/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
},
"layers" : [
{
"filename" : "Front.solidimagestacklayer"
},
{
"filename" : "Middle.solidimagestacklayer"
},
{
"filename" : "Back.solidimagestacklayer"
}
]
}
================================================
FILE: FearAndGreed/FearAndGreed/Assets.xcassets/AppIcon.solidimagestack/Front.solidimagestacklayer/Content.imageset/Contents.json
================================================
{
"images" : [
{
"idiom" : "vision",
"scale" : "2x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: FearAndGreed/FearAndGreed/Assets.xcassets/AppIcon.solidimagestack/Front.solidimagestacklayer/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: FearAndGreed/FearAndGreed/Assets.xcassets/AppIcon.solidimagestack/Middle.solidimagestacklayer/Content.imageset/Contents.json
================================================
{
"images" : [
{
"idiom" : "vision",
"scale" : "2x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: FearAndGreed/FearAndGreed/Assets.xcassets/AppIcon.solidimagestack/Middle.solidimagestacklayer/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: FearAndGreed/FearAndGreed/Assets.xcassets/Contents.json
================================================
{
"info" : {
"version" : 1,
"author" : "xcode"
}
}
================================================
FILE: FearAndGreed/FearAndGreed/Colors.swift
================================================
//
// Colors.swift
// Swift Helpers
//
// Created by IVAN CAMPOS on 2/13/24.
//
import UIKit
enum ColorName: String {
case money = "#85bb65"
case tron = "#18CAE6"
case matrix = "#00ff2b"
case offWhite = "#fffff0"
case akira = "#9C3111"
case dark = "#424242"
case orange = "#E65100"
case dolphinsAqua = "#008E97"
case dolphinsOrange = "#FC4C02"
case usRed = "#BF0A30"
case usBlue = "#002868"
case coolGrey = "#5E6167"
case yeezy1 = "#EF4657"
case foams = "#1E3F9F"
case tiffany = "#00FFEC"
case jordan1 = "#B01301"
case volt = "#CEFF00"
case violet = "#6B5B95"
case sailor = "#2E4A62"
case tomato = "#E94B3C"
case ok = "#00ff7f"
case seafoam = "#C4DFE6"
case darkG = "#474747"
case yellow = "#F7DB4F"
case lightG = "#f4f4f8"
case rb = "#251e3e"
case blue = "#0392cf"
case coffee = "#be9b7b"
case tone = "#f1c27d"
case fall = "#c9cba3"
case blueGray = "#6497b1"
case lightY = "#fdf498"
case prBlue = "#50eee0"
case prRed = "#ed0000"
case dodgers = "#1e90ff"
case nikeBox = "#ec4e33"
case bitcoin = "#ff9900"
case supreme = "#FF0400"
case nvidia = "#76b900"
case playstation = "#003087"
case spotify = "#191414"
case tesla = "#cc0000"
var color: UIColor {
return UIColor(hex: self.rawValue) ?? .black
}
}
extension UIColor {
convenience init?(hex: String) {
let r, g, b, a: CGFloat
if hex.hasPrefix("#") {
let start = hex.index(hex.startIndex, offsetBy: 1)
let hexColor = String(hex[start...])
if hexColor.count == 6 {
let scanner = Scanner(string: hexColor)
var hexNumber: UInt64 = 0
if scanner.scanHexInt64(&hexNumber) {
r = CGFloat((hexNumber & 0xff0000) >> 16) / 255
g = CGFloat((hexNumber & 0x00ff00) >> 8) / 255
b = CGFloat(hexNumber & 0x0000ff) / 255
a = 1.0
self.init(red: r, green: g, blue: b, alpha: a)
return
}
}
}
return nil
}
}
================================================
FILE: FearAndGreed/FearAndGreed/ContentView.swift
================================================
//
// ContentView.swift
// FearAndGreed
//
// Created by IVAN CAMPOS on 2/16/24.
//
import SwiftUI
let EXTREME_FEAR = "EXTREME FEAR"
let FEAR = "FEAR"
let GREED = "GREED"
let EXTREME_GREED = "EXTREME GREED"
struct ContentView: View {
@StateObject var viewModel = FearGreedIndexViewModel()
var body: some View {
VStack {
RectangleView(classification: EXTREME_FEAR, currentClassification: $viewModel.classification)
RectangleView(classification: FEAR, currentClassification: $viewModel.classification)
RectangleView(classification: GREED, currentClassification: $viewModel.classification)
RectangleView(classification: EXTREME_GREED, currentClassification: $viewModel.classification)
}
}
}
struct RectangleView: View {
let classification: String
@Binding var currentClassification: String
var body: some View {
var classificationColor = colorForClassification(classification)
Text(classification)
.bold()
.font(.largeTitle)
.frame(width: 400, height: 100)
.background(classificationColor)
.cornerRadius(10)
.padding()
.scaleEffect(currentClassification == classification ? 1.1 : 1.0)
.shadow(color: classificationColor, radius: 12, x: 0, y: 0)
.animation(.easeInOut(duration: 1).repeatForever(), value: currentClassification == classification)
}
func colorForClassification(_ classification: String) -> Color {
guard classification == currentClassification else { return Color(uiColor: UIColor(hex: ColorName.coolGrey.rawValue)!) }
switch classification {
case EXTREME_FEAR:
return Color(uiColor: UIColor(hex: ColorName.supreme.rawValue)!)
case FEAR:
return Color(uiColor: UIColor(hex: ColorName.yeezy1.rawValue)!)
case GREED:
return Color(uiColor: UIColor(hex: ColorName.ok.rawValue)!)
case EXTREME_GREED:
return Color(uiColor: UIColor(hex: ColorName.matrix.rawValue)!)
default:
return Color(uiColor: UIColor(hex: ColorName.coolGrey.rawValue)!)
}
}
}
================================================
FILE: FearAndGreed/FearAndGreed/FearAndGreedApp.swift
================================================
//
// FearAndGreedApp.swift
// FearAndGreed
//
// Created by IVAN CAMPOS on 2/16/24.
//
import SwiftUI
@main
struct FearAndGreedApp: App {
var body: some Scene {
WindowGroup {
ContentView()
.persistentSystemOverlays(.hidden)
}
.windowStyle(.volumetric)
.defaultSize(width: 0.5, height: 0.5, depth: 0.1, in: .meters)
}
}
================================================
FILE: FearAndGreed/FearAndGreed/FearGreedIndexService.swift
================================================
//
// FearGreedIndexService.swift
// FearAndGreed
//
// Created by IVAN CAMPOS on 2/16/24.
//
import Foundation
class FearGreedIndexService {
func fetchIndex(completion: @escaping (FearGreedIndex?) -> Void) {
guard let url = URL(string: "https://api.alternative.me/fng/") else { return }
URLSession.shared.dataTask(with: url) { data, _, error in
guard let data = data, error == nil else {
completion(nil)
return
}
let response = try? JSONDecoder().decode(FearGreedIndex.self, from: data)
completion(response)
}.resume()
}
}
struct FearGreedIndex: Decodable {
let data: [IndexData]
struct IndexData: Decodable {
let value_classification: String
}
}
================================================
FILE: FearAndGreed/FearAndGreed/FearGreedIndexViewModel.swift
================================================
//
// FearGreedIndexViewModel.swift
// FearAndGreed
//
// Created by IVAN CAMPOS on 2/16/24.
//
import Combine
import SwiftUI
class FearGreedIndexViewModel: ObservableObject {
private var service = FearGreedIndexService()
private var timer: Timer?
@Published var classification: String = ""
init() {
fetchData()
timer = Timer.scheduledTimer(withTimeInterval: 300, repeats: true) { _ in
self.fetchData()
}
}
func fetchData() {
service.fetchIndex { [weak self] response in
DispatchQueue.main.async {
self?.classification = ""
self?.classification = response?.data.first?.value_classification.uppercased() ?? ""
}
}
}
}
================================================
FILE: FearAndGreed/FearAndGreed/Info.plist
================================================
UIApplicationSceneManifest
UIApplicationPreferredDefaultSceneSessionRole
UIWindowSceneSessionRoleVolumetricApplication
UIApplicationSupportsMultipleScenes
UISceneConfigurations
================================================
FILE: FearAndGreed/FearAndGreed/Preview Content/Preview Assets.xcassets/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: FearAndGreed/FearAndGreed.xcodeproj/project.pbxproj
================================================
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 56;
objects = {
/* Begin PBXBuildFile section */
3BDFBA722B7F256200474AFB /* RealityKitContent in Frameworks */ = {isa = PBXBuildFile; productRef = 3BDFBA712B7F256200474AFB /* RealityKitContent */; };
3BDFBA742B7F256200474AFB /* FearAndGreedApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BDFBA732B7F256200474AFB /* FearAndGreedApp.swift */; };
3BDFBA762B7F256200474AFB /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BDFBA752B7F256200474AFB /* ContentView.swift */; };
3BDFBA782B7F256300474AFB /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3BDFBA772B7F256300474AFB /* Assets.xcassets */; };
3BDFBA7B2B7F256300474AFB /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3BDFBA7A2B7F256300474AFB /* Preview Assets.xcassets */; };
3BDFBA832B7F258800474AFB /* FearGreedIndexService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BDFBA822B7F258800474AFB /* FearGreedIndexService.swift */; };
3BDFBA852B7F25A000474AFB /* FearGreedIndexViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BDFBA842B7F25A000474AFB /* FearGreedIndexViewModel.swift */; };
3BDFBA872B7F274D00474AFB /* Colors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BDFBA862B7F274D00474AFB /* Colors.swift */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
3BDFBA6C2B7F256200474AFB /* FearAndGreed.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FearAndGreed.app; sourceTree = BUILT_PRODUCTS_DIR; };
3BDFBA702B7F256200474AFB /* RealityKitContent */ = {isa = PBXFileReference; lastKnownFileType = wrapper; path = RealityKitContent; sourceTree = ""; };
3BDFBA732B7F256200474AFB /* FearAndGreedApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FearAndGreedApp.swift; sourceTree = ""; };
3BDFBA752B7F256200474AFB /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; };
3BDFBA772B7F256300474AFB /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
3BDFBA7A2B7F256300474AFB /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; };
3BDFBA7C2B7F256300474AFB /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
3BDFBA822B7F258800474AFB /* FearGreedIndexService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FearGreedIndexService.swift; sourceTree = ""; };
3BDFBA842B7F25A000474AFB /* FearGreedIndexViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FearGreedIndexViewModel.swift; sourceTree = ""; };
3BDFBA862B7F274D00474AFB /* Colors.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Colors.swift; sourceTree = ""; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
3BDFBA692B7F256200474AFB /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
3BDFBA722B7F256200474AFB /* RealityKitContent in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
3BDFBA632B7F256200474AFB = {
isa = PBXGroup;
children = (
3BDFBA6E2B7F256200474AFB /* FearAndGreed */,
3BDFBA6F2B7F256200474AFB /* Packages */,
3BDFBA6D2B7F256200474AFB /* Products */,
);
sourceTree = "";
};
3BDFBA6D2B7F256200474AFB /* Products */ = {
isa = PBXGroup;
children = (
3BDFBA6C2B7F256200474AFB /* FearAndGreed.app */,
);
name = Products;
sourceTree = "";
};
3BDFBA6E2B7F256200474AFB /* FearAndGreed */ = {
isa = PBXGroup;
children = (
3BDFBA732B7F256200474AFB /* FearAndGreedApp.swift */,
3BDFBA752B7F256200474AFB /* ContentView.swift */,
3BDFBA822B7F258800474AFB /* FearGreedIndexService.swift */,
3BDFBA842B7F25A000474AFB /* FearGreedIndexViewModel.swift */,
3BDFBA862B7F274D00474AFB /* Colors.swift */,
3BDFBA772B7F256300474AFB /* Assets.xcassets */,
3BDFBA7C2B7F256300474AFB /* Info.plist */,
3BDFBA792B7F256300474AFB /* Preview Content */,
);
path = FearAndGreed;
sourceTree = "";
};
3BDFBA6F2B7F256200474AFB /* Packages */ = {
isa = PBXGroup;
children = (
3BDFBA702B7F256200474AFB /* RealityKitContent */,
);
path = Packages;
sourceTree = "";
};
3BDFBA792B7F256300474AFB /* Preview Content */ = {
isa = PBXGroup;
children = (
3BDFBA7A2B7F256300474AFB /* Preview Assets.xcassets */,
);
path = "Preview Content";
sourceTree = "";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
3BDFBA6B2B7F256200474AFB /* FearAndGreed */ = {
isa = PBXNativeTarget;
buildConfigurationList = 3BDFBA7F2B7F256300474AFB /* Build configuration list for PBXNativeTarget "FearAndGreed" */;
buildPhases = (
3BDFBA682B7F256200474AFB /* Sources */,
3BDFBA692B7F256200474AFB /* Frameworks */,
3BDFBA6A2B7F256200474AFB /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = FearAndGreed;
packageProductDependencies = (
3BDFBA712B7F256200474AFB /* RealityKitContent */,
);
productName = FearAndGreed;
productReference = 3BDFBA6C2B7F256200474AFB /* FearAndGreed.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
3BDFBA642B7F256200474AFB /* Project object */ = {
isa = PBXProject;
attributes = {
BuildIndependentTargetsInParallel = 1;
LastSwiftUpdateCheck = 1520;
LastUpgradeCheck = 1520;
TargetAttributes = {
3BDFBA6B2B7F256200474AFB = {
CreatedOnToolsVersion = 15.2;
};
};
};
buildConfigurationList = 3BDFBA672B7F256200474AFB /* Build configuration list for PBXProject "FearAndGreed" */;
compatibilityVersion = "Xcode 14.0";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = 3BDFBA632B7F256200474AFB;
productRefGroup = 3BDFBA6D2B7F256200474AFB /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
3BDFBA6B2B7F256200474AFB /* FearAndGreed */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
3BDFBA6A2B7F256200474AFB /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
3BDFBA7B2B7F256300474AFB /* Preview Assets.xcassets in Resources */,
3BDFBA782B7F256300474AFB /* Assets.xcassets in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
3BDFBA682B7F256200474AFB /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
3BDFBA762B7F256200474AFB /* ContentView.swift in Sources */,
3BDFBA872B7F274D00474AFB /* Colors.swift in Sources */,
3BDFBA852B7F25A000474AFB /* FearGreedIndexViewModel.swift in Sources */,
3BDFBA832B7F258800474AFB /* FearGreedIndexService.swift in Sources */,
3BDFBA742B7F256200474AFB /* FearAndGreedApp.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
3BDFBA7D2B7F256300474AFB /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu17;
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;
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = xros;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
XROS_DEPLOYMENT_TARGET = 1.0;
};
name = Debug;
};
3BDFBA7E2B7F256300474AFB /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu17;
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;
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = xros;
SWIFT_COMPILATION_MODE = wholemodule;
VALIDATE_PRODUCT = YES;
XROS_DEPLOYMENT_TARGET = 1.0;
};
name = Release;
};
3BDFBA802B7F256300474AFB /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_ASSET_PATHS = "\"FearAndGreed/Preview Content\"";
DEVELOPMENT_TEAM = 2DJDH872JZ;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "$(TARGET_NAME)/Info.plist";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.ivancampos.FearAndGreed;
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "xros xrsimulator";
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2,7";
};
name = Debug;
};
3BDFBA812B7F256300474AFB /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_ASSET_PATHS = "\"FearAndGreed/Preview Content\"";
DEVELOPMENT_TEAM = 2DJDH872JZ;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "$(TARGET_NAME)/Info.plist";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.ivancampos.FearAndGreed;
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "xros xrsimulator";
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2,7";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
3BDFBA672B7F256200474AFB /* Build configuration list for PBXProject "FearAndGreed" */ = {
isa = XCConfigurationList;
buildConfigurations = (
3BDFBA7D2B7F256300474AFB /* Debug */,
3BDFBA7E2B7F256300474AFB /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
3BDFBA7F2B7F256300474AFB /* Build configuration list for PBXNativeTarget "FearAndGreed" */ = {
isa = XCConfigurationList;
buildConfigurations = (
3BDFBA802B7F256300474AFB /* Debug */,
3BDFBA812B7F256300474AFB /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
/* Begin XCSwiftPackageProductDependency section */
3BDFBA712B7F256200474AFB /* RealityKitContent */ = {
isa = XCSwiftPackageProductDependency;
productName = RealityKitContent;
};
/* End XCSwiftPackageProductDependency section */
};
rootObject = 3BDFBA642B7F256200474AFB /* Project object */;
}
================================================
FILE: FearAndGreed/FearAndGreed.xcodeproj/project.xcworkspace/contents.xcworkspacedata
================================================
================================================
FILE: FearAndGreed/FearAndGreed.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
================================================
IDEDidComputeMac32BitWarning
================================================
FILE: FearAndGreed/Packages/RealityKitContent/Package.realitycomposerpro/ProjectData/main.json
================================================
{
"pathsToIds" : {
"\/RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/GridMaterial.usda" : "70F99620-18FE-438F-B2D5-5E0DA02AB759",
"\/RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/Scene.usda" : "0A9B4653-B11E-4D6A-850E-C6FCB621626C",
"RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/GridMaterial.usda" : "388995CA-80FC-432E-BA88-78270E4EFD9D",
"RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/Scene.usda" : "90C576A0-F90A-43B8-9998-14918A66F863"
}
}
================================================
FILE: FearAndGreed/Packages/RealityKitContent/Package.realitycomposerpro/WorkspaceData/SceneMetadataList.json
================================================
{
"0A9B4653-B11E-4D6A-850E-C6FCB621626C" : {
"cameraTransform" : [
1,
0,
0,
0,
0,
0.86602545,
-0.49999994,
0,
0,
0.49999994,
0.86602545,
0,
-0.0016454058,
0.3609597,
0.6486591,
1
],
"objectMetadataList" : [
[
"0A9B4653-B11E-4D6A-850E-C6FCB621626C",
"Root",
"Sphere"
],
{
"isExpanded" : true,
"isLocked" : false
},
[
"0A9B4653-B11E-4D6A-850E-C6FCB621626C",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
},
"70F99620-18FE-438F-B2D5-5E0DA02AB759" : {
"cameraTransform" : [
0.99999994,
0,
-0,
0,
-0,
0.8660254,
-0.49999994,
0,
0,
0.49999994,
0.8660254,
0,
0,
0.5981957,
1.0361054,
1
],
"objectMetadataList" : [
[
"70F99620-18FE-438F-B2D5-5E0DA02AB759",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
},
"90C576A0-F90A-43B8-9998-14918A66F863" : {
"cameraTransform" : [
0.99999994,
0,
-0,
0,
-0,
0.8660254,
-0.49999994,
0,
0,
0.49999994,
0.8660254,
0,
0,
0.36125332,
0.6257093,
1
],
"objectMetadataList" : [
[
"90C576A0-F90A-43B8-9998-14918A66F863",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
},
[
"90C576A0-F90A-43B8-9998-14918A66F863",
"Root",
"Sphere"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
},
"388995CA-80FC-432E-BA88-78270E4EFD9D" : {
"cameraTransform" : [
0.99999994,
0,
-0,
0,
-0,
0.8660254,
-0.49999994,
0,
0,
0.49999994,
0.8660254,
0,
0,
0.5981957,
1.0361054,
1
],
"objectMetadataList" : [
[
"388995CA-80FC-432E-BA88-78270E4EFD9D",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
}
}
================================================
FILE: FearAndGreed/Packages/RealityKitContent/Package.realitycomposerpro/WorkspaceData/Settings.rcprojectdata
================================================
{
"cameraPresets" : {
},
"secondaryToolbarData" : {
"isGridVisible" : true,
"sceneReverbPreset" : -1
},
"unitDefaults" : {
"°" : "°",
"kg" : "g",
"m" : "cm",
"m\/s" : "m\/s",
"m\/s²" : "m\/s²",
"s" : "s"
}
}
================================================
FILE: FearAndGreed/Packages/RealityKitContent/Package.swift
================================================
// swift-tools-version:5.9
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "RealityKitContent",
products: [
// Products define the executables and libraries a package produces, and make them visible to other packages.
.library(
name: "RealityKitContent",
targets: ["RealityKitContent"]),
],
dependencies: [
// Dependencies declare other packages that this package depends on.
// .package(url: /* package url */, from: "1.0.0"),
],
targets: [
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
// Targets can depend on other targets in this package, and on products in packages this package depends on.
.target(
name: "RealityKitContent",
dependencies: []),
]
)
================================================
FILE: FearAndGreed/Packages/RealityKitContent/README.md
================================================
# RealityKitContent
A description of this package.
================================================
FILE: FearAndGreed/Packages/RealityKitContent/Sources/RealityKitContent/RealityKitContent.rkassets/Materials/GridMaterial.usda
================================================
#usda 1.0
(
defaultPrim = "Root"
metersPerUnit = 1
upAxis = "Y"
)
def Xform "Root"
{
def Material "GridMaterial"
{
reorder nameChildren = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "DefaultSurfaceShader", "MaterialXPreviewSurface", "Texcoord", "Add", "Multiply", "Fractional", "LineCounts", "Multiply_1", "Separate2", "Separate2_1", "Ifgreater", "Ifgreater_1", "Max", "Background_Color"]
token outputs:mtlx:surface.connect =
token outputs:realitykit:vertex
token outputs:surface
float2 ui:nodegraph:realitykit:subgraphOutputs:pos = (2222, 300.5)
float2 ui:nodegraph:realitykit:subgraphOutputs:size = (182, 89)
int ui:nodegraph:realitykit:subgraphOutputs:stackingOrder = 749
def Shader "DefaultSurfaceShader"
{
uniform token info:id = "UsdPreviewSurface"
color3f inputs:diffuseColor = (1, 1, 1)
float inputs:roughness = 0.75
token outputs:surface
}
def Shader "MaterialXPreviewSurface"
{
uniform token info:id = "ND_UsdPreviewSurface_surfaceshader"
float inputs:clearcoat
float inputs:clearcoatRoughness
color3f inputs:diffuseColor.connect =
color3f inputs:emissiveColor
float inputs:ior
float inputs:metallic = 0.15
float3 inputs:normal
float inputs:occlusion
float inputs:opacity
float inputs:opacityThreshold
float inputs:roughness = 0.5
token outputs:out
float2 ui:nodegraph:node:pos = (1967, 300.5)
float2 ui:nodegraph:node:size = (208, 297)
int ui:nodegraph:node:stackingOrder = 870
string[] ui:nodegraph:realitykit:node:attributesShowingChildren = ["Advanced"]
}
def Shader "Texcoord"
{
uniform token info:id = "ND_texcoord_vector2"
float2 outputs:out
float2 ui:nodegraph:node:pos = (94.14453, 35.29297)
float2 ui:nodegraph:node:size = (182, 43)
int ui:nodegraph:node:stackingOrder = 1358
}
def Shader "Multiply"
{
uniform token info:id = "ND_multiply_vector2"
float2 inputs:in1.connect =
float2 inputs:in2 = (32, 15)
float2 inputs:in2.connect =
float2 outputs:out
float2 ui:nodegraph:node:pos = (275.64453, 47.29297)
float2 ui:nodegraph:node:size = (61, 36)
int ui:nodegraph:node:stackingOrder = 1348
string[] ui:nodegraph:realitykit:node:attributesShowingChildren = ["inputs:in2"]
}
def Shader "Fractional"
{
uniform token info:id = "ND_realitykit_fractional_vector2"
float2 inputs:in.connect =
float2 outputs:out
float2 ui:nodegraph:node:pos = (440.5, 49.5)
float2 ui:nodegraph:node:size = (155, 99)
int ui:nodegraph:node:stackingOrder = 1345
}
def Shader "BaseColor"
{
uniform token info:id = "ND_constant_color3"
color3f inputs:value = (0.89737034, 0.89737034, 0.89737034) (
colorSpace = "Input - Texture - sRGB - sRGB"
)
color3f inputs:value.connect = None
color3f outputs:out
float2 ui:nodegraph:node:pos = (1537.5977, 363.07812)
float2 ui:nodegraph:node:size = (150, 43)
int ui:nodegraph:node:stackingOrder = 1353
}
def Shader "LineColor"
{
uniform token info:id = "ND_constant_color3"
color3f inputs:value = (0.55945957, 0.55945957, 0.55945957) (
colorSpace = "Input - Texture - sRGB - sRGB"
)
color3f inputs:value.connect = None
color3f outputs:out
float2 ui:nodegraph:node:pos = (1536.9844, 287.86328)
float2 ui:nodegraph:node:size = (146, 43)
int ui:nodegraph:node:stackingOrder = 1355
}
def Shader "LineWidths"
{
uniform token info:id = "ND_combine2_vector2"
float inputs:in1 = 0.1
float inputs:in2 = 0.1
float2 outputs:out
float2 ui:nodegraph:node:pos = (443.64453, 233.79297)
float2 ui:nodegraph:node:size = (151, 43)
int ui:nodegraph:node:stackingOrder = 1361
}
def Shader "LineCounts"
{
uniform token info:id = "ND_combine2_vector2"
float inputs:in1 = 24
float inputs:in2 = 12
float2 outputs:out
float2 ui:nodegraph:node:pos = (94.14453, 138.29297)
float2 ui:nodegraph:node:size = (153, 43)
int ui:nodegraph:node:stackingOrder = 1359
}
def Shader "Remap"
{
uniform token info:id = "ND_remap_color3"
color3f inputs:in.connect =
color3f inputs:inhigh.connect = None
color3f inputs:inlow.connect = None
color3f inputs:outhigh.connect =
color3f inputs:outlow.connect =
color3f outputs:out
float2 ui:nodegraph:node:pos = (1755.5, 300.5)
float2 ui:nodegraph:node:size = (95, 171)
int ui:nodegraph:node:stackingOrder = 1282
string[] ui:nodegraph:realitykit:node:attributesShowingChildren = ["inputs:outlow"]
}
def Shader "Separate2"
{
uniform token info:id = "ND_separate2_vector2"
float2 inputs:in.connect =
float outputs:outx
float outputs:outy
float2 ui:nodegraph:node:pos = (1212.6445, 128.91797)
float2 ui:nodegraph:node:size = (116, 117)
int ui:nodegraph:node:stackingOrder = 1363
}
def Shader "Combine3"
{
uniform token info:id = "ND_combine3_color3"
float inputs:in1.connect =
float inputs:in2.connect =
float inputs:in3.connect =
color3f outputs:out
float2 ui:nodegraph:node:pos = (1578.1445, 128.91797)
float2 ui:nodegraph:node:size = (146, 54)
int ui:nodegraph:node:stackingOrder = 1348
}
def Shader "Range"
{
uniform token info:id = "ND_range_vector2"
bool inputs:doclamp = 1
float2 inputs:gamma = (2, 2)
float2 inputs:in.connect =
float2 inputs:inhigh.connect =
float2 inputs:inlow = (0.02, 0.02)
float2 inputs:outhigh
float2 inputs:outlow
float2 outputs:out
float2 ui:nodegraph:node:pos = (990.64453, 128.91797)
float2 ui:nodegraph:node:size = (98, 207)
int ui:nodegraph:node:stackingOrder = 1364
}
def Shader "Subtract"
{
uniform token info:id = "ND_subtract_vector2"
float2 inputs:in1.connect =
float2 inputs:in2.connect =
float2 outputs:out
float2 ui:nodegraph:node:pos = (612.64453, 87.04297)
float2 ui:nodegraph:node:size = (63, 36)
int ui:nodegraph:node:stackingOrder = 1348
}
def Shader "Absval"
{
uniform token info:id = "ND_absval_vector2"
float2 inputs:in.connect =
float2 outputs:out
float2 ui:nodegraph:node:pos = (765.64453, 87.04297)
float2 ui:nodegraph:node:size = (123, 43)
int ui:nodegraph:node:stackingOrder = 1348
}
def Shader "Min"
{
uniform token info:id = "ND_min_float"
float inputs:in1.connect =
float inputs:in2.connect =
float outputs:out
float2 ui:nodegraph:node:pos = (1388.1445, 128.91797)
float2 ui:nodegraph:node:size = (114, 36)
int ui:nodegraph:node:stackingOrder = 1363
}
}
}
================================================
FILE: FearAndGreed/Packages/RealityKitContent/Sources/RealityKitContent/RealityKitContent.rkassets/Scene.usda
================================================
#usda 1.0
(
defaultPrim = "Root"
metersPerUnit = 1
upAxis = "Y"
)
def Xform "Root"
{
reorder nameChildren = ["Sphere", "GridMaterial"]
rel material:binding = None (
bindMaterialAs = "weakerThanDescendants"
)
def Sphere "Sphere" (
active = true
prepend apiSchemas = ["MaterialBindingAPI"]
)
{
rel material:binding = (
bindMaterialAs = "weakerThanDescendants"
)
double radius = 0.1
quatf xformOp:orient = (1, 0, 0, 0)
float3 xformOp:scale = (1, 1, 1)
float3 xformOp:translate = (0, 0, 0)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
def RealityKitComponent "Collider"
{
uint group = 1
uniform token info:id = "RealityKit.Collider"
uint mask = 4294967295
token type = "Default"
def RealityKitStruct "Shape"
{
float3 extent = (0.2, 0.2, 0.2)
float radius = 0.1
token shapeType = "Sphere"
}
}
def RealityKitComponent "InputTarget"
{
uniform token info:id = "RealityKit.InputTarget"
}
}
def "GridMaterial" (
active = true
references = @Materials/GridMaterial.usda@
)
{
float3 xformOp:scale = (1, 1, 1)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
}
}
================================================
FILE: FearAndGreed/Packages/RealityKitContent/Sources/RealityKitContent/RealityKitContent.swift
================================================
import Foundation
/// Bundle for the RealityKitContent project
public let realityKitContentBundle = Bundle.module
================================================
FILE: FearAndGreed/README.md
================================================
# Fear and Greed
_Volumetric View of the Fear & Greed Index for Bitcoin and other large cryptocurrencies_
https://github.com/IvanCampos/visionOS-examples/assets/872137/edf5753a-c0d0-4d2f-8c5b-11f8f9fb1971
================================================
FILE: HandTracking/HandTracking/Assets.xcassets/AppIcon.solidimagestack/Back.solidimagestacklayer/Content.imageset/Contents.json
================================================
{
"images" : [
{
"idiom" : "vision",
"scale" : "2x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: HandTracking/HandTracking/Assets.xcassets/AppIcon.solidimagestack/Back.solidimagestacklayer/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: HandTracking/HandTracking/Assets.xcassets/AppIcon.solidimagestack/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
},
"layers" : [
{
"filename" : "Front.solidimagestacklayer"
},
{
"filename" : "Middle.solidimagestacklayer"
},
{
"filename" : "Back.solidimagestacklayer"
}
]
}
================================================
FILE: HandTracking/HandTracking/Assets.xcassets/AppIcon.solidimagestack/Front.solidimagestacklayer/Content.imageset/Contents.json
================================================
{
"images" : [
{
"idiom" : "vision",
"scale" : "2x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: HandTracking/HandTracking/Assets.xcassets/AppIcon.solidimagestack/Front.solidimagestacklayer/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: HandTracking/HandTracking/Assets.xcassets/AppIcon.solidimagestack/Middle.solidimagestacklayer/Content.imageset/Contents.json
================================================
{
"images" : [
{
"idiom" : "vision",
"scale" : "2x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: HandTracking/HandTracking/Assets.xcassets/AppIcon.solidimagestack/Middle.solidimagestacklayer/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: HandTracking/HandTracking/Assets.xcassets/Contents.json
================================================
{
"info" : {
"version" : 1,
"author" : "xcode"
}
}
================================================
FILE: HandTracking/HandTracking/ContentView.swift
================================================
//
// ContentView.swift
// HandTracking
//
// Created by IVAN CAMPOS on 2/23/24.
//
import SwiftUI
import RealityKit
import RealityKitContent
struct ContentView: View {
@State private var showImmersiveSpace = false
@State private var immersiveSpaceIsShown = false
@Environment(\.openImmersiveSpace) var openImmersiveSpace
@Environment(\.dismissImmersiveSpace) var dismissImmersiveSpace
var body: some View {
VStack {
Text("Hand Tracking")
Toggle("Show Immersive Space", isOn: $showImmersiveSpace)
.toggleStyle(.button)
.padding(.top, 50)
}
.padding()
.onChange(of: showImmersiveSpace) { _, newValue in
Task {
if newValue {
switch await openImmersiveSpace(id: "ImmersiveSpace") {
case .opened:
immersiveSpaceIsShown = true
case .error, .userCancelled:
fallthrough
@unknown default:
immersiveSpaceIsShown = false
showImmersiveSpace = false
}
} else if immersiveSpaceIsShown {
await dismissImmersiveSpace()
immersiveSpaceIsShown = false
}
}
}
}
}
================================================
FILE: HandTracking/HandTracking/Extensions.swift
================================================
//
// ModelEntity+Extensions.swift
// HandTracking
//
// Created by IVAN CAMPOS on 2/23/24.
//
import SwiftUI
import RealityKit
extension ModelEntity {
static func createHandEntity() -> ModelEntity {
let simpleMaterial = SimpleMaterial(color: UIColor(hex: "FFFFFF"), isMetallic: true)
return ModelEntity(mesh: .generateBox(size: 0.042), materials: [simpleMaterial])
}
static func createArmEntity() -> ModelEntity {
let simpleMaterial = SimpleMaterial(color: UIColor(hex: "D92121"), isMetallic: true)
return ModelEntity(mesh: .generateBox(width: 0.5, height: 0.125, depth: 0.15), materials: [simpleMaterial])
}
static func createEnvironmentEntity() -> Entity {
let bgColor: UIColor = .white
var material = UnlitMaterial()
material.color = UnlitMaterial.BaseColor(tint: bgColor)
let environment = Entity()
environment.components.set(ModelComponent(
mesh: .generateSphere(radius: 2000),
materials: [material]
))
environment.scale *= .init(x: -2, y: 2, z: 2)
return environment
}
}
extension UIColor {
convenience init(hex: String) {
let scanner = Scanner(string: hex)
var color: UInt64 = 0
scanner.scanHexInt64(&color)
let r = CGFloat((color & 0xFF0000) >> 16) / 255.0
let g = CGFloat((color & 0x00FF00) >> 8) / 255.0
let b = CGFloat(color & 0x0000FF) / 255.0
self.init(red: r, green: g, blue: b, alpha: 1.0)
}
}
================================================
FILE: HandTracking/HandTracking/HandTrackingApp.swift
================================================
//
// HandTrackingApp.swift
// Hand Tracking
//
// Created by IVAN CAMPOS on 2/23/24.
//
import SwiftUI
@main
struct HandTrackingApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
ImmersiveSpace(id: "ImmersiveSpace") {
ImmersiveView()
.preferredSurroundingsEffect(.systemDark)
}
.immersionStyle(selection: .constant(.mixed), in: .mixed)
}
}
================================================
FILE: HandTracking/HandTracking/HandTrackingModel.swift
================================================
//
// HandTrackingModel.swift
// HandTracking
//
// Created by IVAN CAMPOS on 2/23/24.
//
import RealityKit
import ARKit
import SwiftUI
struct HandsUpdates {
var left: HandAnchor?
var right: HandAnchor?
}
class HandTrackingModel: ObservableObject {
let session = ARKitSession()
var handTrackingProvider = HandTrackingProvider()
@Published var latestHandTracking: HandsUpdates = .init(left: nil, right: nil)
// State variables for sphere model entities
@Published var leftWristModelEntity = ModelEntity.createHandEntity()
@Published var leftThumbKnuckleModelEntity = ModelEntity.createHandEntity()
@Published var leftThumbIntermediateBaseModelEntity = ModelEntity.createHandEntity()
@Published var leftThumbIntermediateTipModelEntity = ModelEntity.createHandEntity()
@Published var leftThumbTipModelEntity = ModelEntity.createHandEntity()
@Published var leftIndexFingerMetacarpalModelEntity = ModelEntity.createHandEntity()
@Published var leftIndexFingerKnuckleModelEntity = ModelEntity.createHandEntity()
@Published var leftIndexFingerIntermediateBaseModelEntity = ModelEntity.createHandEntity()
@Published var leftIndexFingerIntermediateTipModelEntity = ModelEntity.createHandEntity()
@Published var leftIndexFingerTipModelEntity = ModelEntity.createHandEntity()
@Published var leftMiddleFingerMetacarpalModelEntity = ModelEntity.createHandEntity()
@Published var leftMiddleFingerKnuckleModelEntity = ModelEntity.createHandEntity()
@Published var leftMiddleFingerIntermediateBaseModelEntity = ModelEntity.createHandEntity()
@Published var leftMiddleFingerIntermediateTipModelEntity = ModelEntity.createHandEntity()
@Published var leftMiddleFingerTipModelEntity = ModelEntity.createHandEntity()
@Published var leftRingFingerMetacarpalModelEntity = ModelEntity.createHandEntity()
@Published var leftRingFingerKnuckleModelEntity = ModelEntity.createHandEntity()
@Published var leftRingFingerIntermediateBaseModelEntity = ModelEntity.createHandEntity()
@Published var leftRingFingerIntermediateTipModelEntity = ModelEntity.createHandEntity()
@Published var leftRingFingerTipModelEntity = ModelEntity.createHandEntity()
@Published var leftLittleFingerMetacarpalModelEntity = ModelEntity.createHandEntity()
@Published var leftLittleFingerKnuckleModelEntity = ModelEntity.createHandEntity()
@Published var leftLittleFingerIntermediateBaseModelEntity = ModelEntity.createHandEntity()
@Published var leftLittleFingerIntermediateTipModelEntity = ModelEntity.createHandEntity()
@Published var leftLittleFingerTipModelEntity = ModelEntity.createHandEntity()
@Published var leftForearmWristModelEntity = ModelEntity.createHandEntity()
// State variables for box model entities
@Published var leftForearmArmModelEntity = ModelEntity.createArmEntity()
// Repeat the pattern for right hand and forearm entities
@Published var rightWristModelEntity = ModelEntity.createHandEntity()
@Published var rightThumbKnuckleModelEntity = ModelEntity.createHandEntity()
@Published var rightThumbIntermediateBaseModelEntity = ModelEntity.createHandEntity()
@Published var rightThumbIntermediateTipModelEntity = ModelEntity.createHandEntity()
@Published var rightThumbTipModelEntity = ModelEntity.createHandEntity()
@Published var rightIndexFingerMetacarpalModelEntity = ModelEntity.createHandEntity()
@Published var rightIndexFingerKnuckleModelEntity = ModelEntity.createHandEntity()
@Published var rightIndexFingerIntermediateBaseModelEntity = ModelEntity.createHandEntity()
@Published var rightIndexFingerIntermediateTipModelEntity = ModelEntity.createHandEntity()
@Published var rightIndexFingerTipModelEntity = ModelEntity.createHandEntity()
@Published var rightMiddleFingerMetacarpalModelEntity = ModelEntity.createHandEntity()
@Published var rightMiddleFingerKnuckleModelEntity = ModelEntity.createHandEntity()
@Published var rightMiddleFingerIntermediateBaseModelEntity = ModelEntity.createHandEntity()
@Published var rightMiddleFingerIntermediateTipModelEntity = ModelEntity.createHandEntity()
@Published var rightMiddleFingerTipModelEntity = ModelEntity.createHandEntity()
@Published var rightRingFingerMetacarpalModelEntity = ModelEntity.createHandEntity()
@Published var rightRingFingerKnuckleModelEntity = ModelEntity.createHandEntity()
@Published var rightRingFingerIntermediateBaseModelEntity = ModelEntity.createHandEntity()
@Published var rightRingFingerIntermediateTipModelEntity = ModelEntity.createHandEntity()
@Published var rightRingFingerTipModelEntity = ModelEntity.createHandEntity()
@Published var rightLittleFingerMetacarpalModelEntity = ModelEntity.createHandEntity()
@Published var rightLittleFingerKnuckleModelEntity = ModelEntity.createHandEntity()
@Published var rightLittleFingerIntermediateBaseModelEntity = ModelEntity.createHandEntity()
@Published var rightLittleFingerIntermediateTipModelEntity = ModelEntity.createHandEntity()
@Published var rightLittleFingerTipModelEntity = ModelEntity.createHandEntity()
@Published var rightForearmWristModelEntity = ModelEntity.createHandEntity()
@Published var rightForearmArmModelEntity = ModelEntity.createArmEntity()
func handTracking() {
if HandTrackingProvider.isSupported {
Task {
do {
try await session.run([handTrackingProvider])
for await update in handTrackingProvider.anchorUpdates {
DispatchQueue.main.async { // Ensure updates are on the main thread
switch update.event {
case .updated:
let anchor = update.anchor
if !anchor.isTracked {
return // Use 'return' instead of 'continue' outside loops
}
if anchor.chirality == .left {
self.latestHandTracking.left = anchor
} else if anchor.chirality == .right {
self.latestHandTracking.right = anchor
}
default:
break
}
}
}
} catch {
print("Error starting hand tracking: \(error)")
}
}
}
}
func computeTransformHeartTracking() {
guard let leftHandAnchor = latestHandTracking.left,
let rightHandAnchor = latestHandTracking.right,
leftHandAnchor.isTracked, rightHandAnchor.isTracked else {
return
}
leftWristModelEntity.transform = getTransform(leftHandAnchor, .wrist, leftWristModelEntity.transform)
leftThumbKnuckleModelEntity.transform = getTransform(leftHandAnchor, .thumbKnuckle, leftThumbKnuckleModelEntity.transform)
leftThumbIntermediateBaseModelEntity.transform = getTransform(leftHandAnchor, .thumbIntermediateBase, leftThumbIntermediateBaseModelEntity.transform)
leftThumbIntermediateTipModelEntity.transform = getTransform(leftHandAnchor, .thumbIntermediateTip, leftThumbIntermediateTipModelEntity.transform)
leftThumbTipModelEntity.transform = getTransform(leftHandAnchor, .thumbTip, leftThumbTipModelEntity.transform)
leftIndexFingerMetacarpalModelEntity.transform = getTransform(leftHandAnchor, .indexFingerMetacarpal, leftIndexFingerMetacarpalModelEntity.transform)
leftIndexFingerKnuckleModelEntity.transform = getTransform(leftHandAnchor, .indexFingerKnuckle, leftMiddleFingerKnuckleModelEntity.transform)
leftIndexFingerIntermediateBaseModelEntity.transform = getTransform(leftHandAnchor, .indexFingerIntermediateBase, leftIndexFingerIntermediateBaseModelEntity.transform)
leftIndexFingerIntermediateTipModelEntity.transform = getTransform(leftHandAnchor, .indexFingerIntermediateTip, leftIndexFingerIntermediateTipModelEntity.transform)
leftIndexFingerTipModelEntity.transform = getTransform(leftHandAnchor, .indexFingerTip, leftIndexFingerTipModelEntity.transform)
leftMiddleFingerMetacarpalModelEntity.transform = getTransform(leftHandAnchor, .middleFingerMetacarpal, leftMiddleFingerMetacarpalModelEntity.transform)
leftMiddleFingerKnuckleModelEntity.transform = getTransform(leftHandAnchor, .middleFingerKnuckle,leftMiddleFingerKnuckleModelEntity.transform)
leftMiddleFingerIntermediateBaseModelEntity.transform = getTransform(leftHandAnchor, .middleFingerIntermediateBase,leftMiddleFingerIntermediateBaseModelEntity.transform)
leftMiddleFingerIntermediateTipModelEntity.transform = getTransform(leftHandAnchor, .middleFingerIntermediateTip,leftMiddleFingerIntermediateTipModelEntity.transform)
leftMiddleFingerTipModelEntity.transform = getTransform(leftHandAnchor, .middleFingerTip,leftMiddleFingerTipModelEntity.transform)
leftRingFingerMetacarpalModelEntity.transform = getTransform(leftHandAnchor, .ringFingerMetacarpal,leftRingFingerMetacarpalModelEntity.transform)
leftRingFingerKnuckleModelEntity.transform = getTransform(leftHandAnchor, .ringFingerKnuckle,leftRingFingerKnuckleModelEntity.transform)
leftRingFingerIntermediateBaseModelEntity.transform = getTransform(leftHandAnchor, .ringFingerIntermediateBase,leftRingFingerIntermediateBaseModelEntity.transform)
leftRingFingerIntermediateTipModelEntity.transform = getTransform(leftHandAnchor, .ringFingerIntermediateTip,leftRingFingerIntermediateTipModelEntity.transform)
leftRingFingerTipModelEntity.transform = getTransform(leftHandAnchor, .ringFingerTip,leftRingFingerTipModelEntity.transform)
leftLittleFingerMetacarpalModelEntity.transform = getTransform(leftHandAnchor, .littleFingerMetacarpal,leftLittleFingerMetacarpalModelEntity.transform)
leftLittleFingerKnuckleModelEntity.transform = getTransform(leftHandAnchor, .littleFingerKnuckle,leftLittleFingerKnuckleModelEntity.transform)
leftLittleFingerIntermediateBaseModelEntity.transform = getTransform(leftHandAnchor, .littleFingerIntermediateBase, leftLittleFingerIntermediateBaseModelEntity.transform)
leftLittleFingerIntermediateTipModelEntity.transform = getTransform(leftHandAnchor, .littleFingerIntermediateTip,leftLittleFingerIntermediateTipModelEntity.transform)
leftLittleFingerTipModelEntity.transform = getTransform(leftHandAnchor, .littleFingerTip,leftLittleFingerTipModelEntity.transform)
leftForearmWristModelEntity.transform = getTransform(leftHandAnchor, .forearmWrist,leftForearmWristModelEntity.transform)
leftForearmArmModelEntity.transform = getTransform(leftHandAnchor, .forearmArm,leftForearmArmModelEntity.transform)
rightWristModelEntity.transform = getTransform(rightHandAnchor, .wrist,rightWristModelEntity.transform)
rightThumbKnuckleModelEntity.transform = getTransform(rightHandAnchor, .thumbKnuckle,rightThumbKnuckleModelEntity.transform)
rightThumbIntermediateBaseModelEntity.transform = getTransform(rightHandAnchor, .thumbIntermediateBase,rightThumbIntermediateBaseModelEntity.transform)
rightThumbIntermediateTipModelEntity.transform = getTransform(rightHandAnchor, .thumbIntermediateTip,rightThumbIntermediateTipModelEntity.transform)
rightThumbTipModelEntity.transform = getTransform(rightHandAnchor, .thumbTip,rightThumbTipModelEntity.transform)
rightIndexFingerMetacarpalModelEntity.transform = getTransform(rightHandAnchor, .indexFingerMetacarpal,rightIndexFingerMetacarpalModelEntity.transform)
rightIndexFingerKnuckleModelEntity.transform = getTransform(rightHandAnchor, .indexFingerKnuckle,rightIndexFingerKnuckleModelEntity.transform)
rightIndexFingerIntermediateBaseModelEntity.transform = getTransform(rightHandAnchor, .indexFingerIntermediateBase,rightIndexFingerIntermediateBaseModelEntity.transform)
rightIndexFingerIntermediateTipModelEntity.transform = getTransform(rightHandAnchor, .indexFingerIntermediateTip,rightIndexFingerIntermediateTipModelEntity.transform)
rightIndexFingerTipModelEntity.transform = getTransform(rightHandAnchor, .indexFingerTip,rightIndexFingerTipModelEntity.transform)
rightMiddleFingerMetacarpalModelEntity.transform = getTransform(rightHandAnchor, .middleFingerMetacarpal,rightMiddleFingerMetacarpalModelEntity.transform)
rightMiddleFingerKnuckleModelEntity.transform = getTransform(rightHandAnchor, .middleFingerKnuckle,rightMiddleFingerKnuckleModelEntity.transform)
rightMiddleFingerIntermediateBaseModelEntity.transform = getTransform(rightHandAnchor, .middleFingerIntermediateBase,rightMiddleFingerIntermediateBaseModelEntity.transform)
rightMiddleFingerIntermediateTipModelEntity.transform = getTransform(rightHandAnchor, .middleFingerIntermediateTip, rightMiddleFingerIntermediateTipModelEntity.transform)
rightMiddleFingerTipModelEntity.transform = getTransform(rightHandAnchor, .middleFingerTip,rightMiddleFingerTipModelEntity.transform)
rightRingFingerMetacarpalModelEntity.transform = getTransform(rightHandAnchor, .ringFingerMetacarpal,rightRingFingerMetacarpalModelEntity.transform)
rightRingFingerKnuckleModelEntity.transform = getTransform(rightHandAnchor, .ringFingerKnuckle,rightRingFingerKnuckleModelEntity.transform)
rightRingFingerIntermediateBaseModelEntity.transform = getTransform(rightHandAnchor, .ringFingerIntermediateBase,rightRingFingerIntermediateBaseModelEntity.transform)
rightRingFingerIntermediateTipModelEntity.transform = getTransform(rightHandAnchor, .ringFingerIntermediateTip, rightRingFingerIntermediateTipModelEntity.transform)
rightRingFingerTipModelEntity.transform = getTransform(rightHandAnchor, .ringFingerTip,rightRingFingerTipModelEntity.transform)
rightLittleFingerMetacarpalModelEntity.transform = getTransform(rightHandAnchor, .littleFingerMetacarpal,rightLittleFingerMetacarpalModelEntity.transform)
rightLittleFingerKnuckleModelEntity.transform = getTransform(rightHandAnchor, .littleFingerKnuckle, rightLittleFingerKnuckleModelEntity.transform)
rightLittleFingerIntermediateBaseModelEntity.transform = getTransform(rightHandAnchor, .littleFingerIntermediateBase, rightLittleFingerIntermediateBaseModelEntity.transform)
rightLittleFingerIntermediateTipModelEntity.transform = getTransform(rightHandAnchor, .littleFingerIntermediateTip, rightLittleFingerIntermediateTipModelEntity.transform)
rightLittleFingerTipModelEntity.transform = getTransform(rightHandAnchor, .littleFingerTip, rightLittleFingerTipModelEntity.transform)
rightForearmWristModelEntity.transform = getTransform(rightHandAnchor, .forearmWrist, rightForearmWristModelEntity.transform)
rightForearmArmModelEntity.transform = getTransform(rightHandAnchor, .forearmArm, rightForearmArmModelEntity.transform)
}
func getTransform(_ anchor: HandAnchor, _ jointName: HandSkeleton.JointName, _ beforeTransform: Transform) -> Transform {
let joint = anchor.handSkeleton?.joint(jointName)
if ((joint?.isTracked) != nil) {
let t = matrix_multiply(anchor.originFromAnchorTransform, (anchor.handSkeleton?.joint(jointName).anchorFromJointTransform)!)
return Transform(matrix: t)
}
return beforeTransform
}
func addToContent(_ content: RealityKit.RealityViewContent) {
// Skeleton Joints to Track in View
let modelEntities = [
//Skeleton Joints to Track in View
leftWristModelEntity,
leftThumbKnuckleModelEntity,
leftThumbIntermediateBaseModelEntity,
leftThumbIntermediateTipModelEntity,
leftThumbTipModelEntity,
leftIndexFingerMetacarpalModelEntity,
leftIndexFingerKnuckleModelEntity,
leftIndexFingerIntermediateBaseModelEntity,
leftIndexFingerIntermediateTipModelEntity,
leftIndexFingerTipModelEntity,
leftMiddleFingerMetacarpalModelEntity,
leftMiddleFingerKnuckleModelEntity,
leftMiddleFingerIntermediateBaseModelEntity,
leftMiddleFingerIntermediateTipModelEntity,
leftMiddleFingerTipModelEntity,
leftRingFingerMetacarpalModelEntity,
leftRingFingerKnuckleModelEntity,
leftRingFingerIntermediateBaseModelEntity,
leftRingFingerIntermediateTipModelEntity,
leftRingFingerTipModelEntity,
leftLittleFingerMetacarpalModelEntity,
leftLittleFingerKnuckleModelEntity,
leftLittleFingerIntermediateBaseModelEntity,
leftLittleFingerIntermediateTipModelEntity,
leftLittleFingerTipModelEntity,
leftForearmWristModelEntity,
leftForearmArmModelEntity,
rightWristModelEntity,
rightThumbKnuckleModelEntity,
rightThumbIntermediateBaseModelEntity,
rightThumbIntermediateTipModelEntity,
rightThumbTipModelEntity,
rightIndexFingerMetacarpalModelEntity,
rightIndexFingerKnuckleModelEntity,
rightIndexFingerIntermediateBaseModelEntity,
rightIndexFingerIntermediateTipModelEntity,
rightIndexFingerTipModelEntity,
rightMiddleFingerMetacarpalModelEntity,
rightMiddleFingerKnuckleModelEntity,
rightMiddleFingerIntermediateBaseModelEntity,
rightMiddleFingerIntermediateTipModelEntity,
rightMiddleFingerTipModelEntity,
rightRingFingerMetacarpalModelEntity,
rightRingFingerKnuckleModelEntity,
rightRingFingerIntermediateBaseModelEntity,
rightRingFingerIntermediateTipModelEntity,
rightRingFingerTipModelEntity,
rightLittleFingerMetacarpalModelEntity,
rightLittleFingerKnuckleModelEntity,
rightLittleFingerIntermediateBaseModelEntity,
rightLittleFingerIntermediateTipModelEntity,
rightLittleFingerTipModelEntity,
rightForearmWristModelEntity,
rightForearmArmModelEntity
]
modelEntities.forEach { content.add($0) }
}
}
================================================
FILE: HandTracking/HandTracking/ImmersiveView.swift
================================================
//
// ImmersiveView.swift
// HandTracking
//
// Created by IVAN CAMPOS on 2/23/24.
//
import SwiftUI
import RealityKit
import RealityKitContent
import ARKit
struct ImmersiveView: View {
@StateObject var handTrackingModel = HandTrackingModel()
var body: some View {
VStack {
RealityView { content in
handTrackingModel.addToContent(content)
} update: { content in
handTrackingModel.computeTransformHeartTracking()
}
}
.upperLimbVisibility(.hidden)
.ignoresSafeArea()
.onAppear {
handTrackingModel.handTracking()
}
}
}
================================================
FILE: HandTracking/HandTracking/Info.plist
================================================
NSHandsTrackingUsageDescription
Track Hands
UIApplicationSceneManifest
UIApplicationPreferredDefaultSceneSessionRole
UIWindowSceneSessionRoleApplication
UIApplicationSupportsMultipleScenes
UISceneConfigurations
================================================
FILE: HandTracking/HandTracking/Preview Content/Preview Assets.xcassets/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: HandTracking/HandTracking.xcodeproj/project.pbxproj
================================================
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 56;
objects = {
/* Begin PBXBuildFile section */
3B2421E92B8872C000BDC25D /* RealityKitContent in Frameworks */ = {isa = PBXBuildFile; productRef = 3B2421E82B8872C000BDC25D /* RealityKitContent */; };
3B2421EB2B8872C000BDC25D /* HandTrackingApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B2421EA2B8872C000BDC25D /* HandTrackingApp.swift */; };
3B2421ED2B8872C000BDC25D /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B2421EC2B8872C000BDC25D /* ContentView.swift */; };
3B2421EF2B8872C000BDC25D /* ImmersiveView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B2421EE2B8872C000BDC25D /* ImmersiveView.swift */; };
3B2421F32B8872C100BDC25D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3B2421F22B8872C100BDC25D /* Assets.xcassets */; };
3B2421F62B8872C100BDC25D /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3B2421F52B8872C100BDC25D /* Preview Assets.xcassets */; };
3B2422152B88807B00BDC25D /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B2422142B88807B00BDC25D /* Extensions.swift */; };
3BAC410E2B88842C00E5FD68 /* HandTrackingModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BAC410D2B88842C00E5FD68 /* HandTrackingModel.swift */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
3B2421E32B8872C000BDC25D /* HandTracking.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = HandTracking.app; sourceTree = BUILT_PRODUCTS_DIR; };
3B2421E72B8872C000BDC25D /* RealityKitContent */ = {isa = PBXFileReference; lastKnownFileType = wrapper; path = RealityKitContent; sourceTree = ""; };
3B2421EA2B8872C000BDC25D /* HandTrackingApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HandTrackingApp.swift; sourceTree = ""; };
3B2421EC2B8872C000BDC25D /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; };
3B2421EE2B8872C000BDC25D /* ImmersiveView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImmersiveView.swift; sourceTree = ""; };
3B2421F22B8872C100BDC25D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
3B2421F52B8872C100BDC25D /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; };
3B2421F72B8872C100BDC25D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
3B2422142B88807B00BDC25D /* Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Extensions.swift; sourceTree = ""; };
3BAC410D2B88842C00E5FD68 /* HandTrackingModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HandTrackingModel.swift; sourceTree = ""; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
3B2421E02B8872C000BDC25D /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
3B2421E92B8872C000BDC25D /* RealityKitContent in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
3B2421DA2B8872C000BDC25D = {
isa = PBXGroup;
children = (
3B2421E52B8872C000BDC25D /* HandTracking */,
3B2421E62B8872C000BDC25D /* Packages */,
3B2421E42B8872C000BDC25D /* Products */,
);
sourceTree = "";
};
3B2421E42B8872C000BDC25D /* Products */ = {
isa = PBXGroup;
children = (
3B2421E32B8872C000BDC25D /* HandTracking.app */,
);
name = Products;
sourceTree = "";
};
3B2421E52B8872C000BDC25D /* HandTracking */ = {
isa = PBXGroup;
children = (
3B2421EA2B8872C000BDC25D /* HandTrackingApp.swift */,
3B2421EC2B8872C000BDC25D /* ContentView.swift */,
3B2421EE2B8872C000BDC25D /* ImmersiveView.swift */,
3BAC410D2B88842C00E5FD68 /* HandTrackingModel.swift */,
3B2422142B88807B00BDC25D /* Extensions.swift */,
3B2421F22B8872C100BDC25D /* Assets.xcassets */,
3B2421F72B8872C100BDC25D /* Info.plist */,
3B2421F42B8872C100BDC25D /* Preview Content */,
);
path = HandTracking;
sourceTree = "";
};
3B2421E62B8872C000BDC25D /* Packages */ = {
isa = PBXGroup;
children = (
3B2421E72B8872C000BDC25D /* RealityKitContent */,
);
path = Packages;
sourceTree = "";
};
3B2421F42B8872C100BDC25D /* Preview Content */ = {
isa = PBXGroup;
children = (
3B2421F52B8872C100BDC25D /* Preview Assets.xcassets */,
);
path = "Preview Content";
sourceTree = "";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
3B2421E22B8872C000BDC25D /* HandTracking */ = {
isa = PBXNativeTarget;
buildConfigurationList = 3B2421FA2B8872C100BDC25D /* Build configuration list for PBXNativeTarget "HandTracking" */;
buildPhases = (
3B2421DF2B8872C000BDC25D /* Sources */,
3B2421E02B8872C000BDC25D /* Frameworks */,
3B2421E12B8872C000BDC25D /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = HandTracking;
packageProductDependencies = (
3B2421E82B8872C000BDC25D /* RealityKitContent */,
);
productName = "Optimus Prime";
productReference = 3B2421E32B8872C000BDC25D /* HandTracking.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
3B2421DB2B8872C000BDC25D /* Project object */ = {
isa = PBXProject;
attributes = {
BuildIndependentTargetsInParallel = 1;
LastSwiftUpdateCheck = 1520;
LastUpgradeCheck = 1520;
TargetAttributes = {
3B2421E22B8872C000BDC25D = {
CreatedOnToolsVersion = 15.2;
};
};
};
buildConfigurationList = 3B2421DE2B8872C000BDC25D /* Build configuration list for PBXProject "HandTracking" */;
compatibilityVersion = "Xcode 14.0";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = 3B2421DA2B8872C000BDC25D;
productRefGroup = 3B2421E42B8872C000BDC25D /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
3B2421E22B8872C000BDC25D /* HandTracking */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
3B2421E12B8872C000BDC25D /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
3B2421F32B8872C100BDC25D /* Assets.xcassets in Resources */,
3B2421F62B8872C100BDC25D /* Preview Assets.xcassets in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
3B2421DF2B8872C000BDC25D /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
3B2421ED2B8872C000BDC25D /* ContentView.swift in Sources */,
3B2421EB2B8872C000BDC25D /* HandTrackingApp.swift in Sources */,
3BAC410E2B88842C00E5FD68 /* HandTrackingModel.swift in Sources */,
3B2422152B88807B00BDC25D /* Extensions.swift in Sources */,
3B2421EF2B8872C000BDC25D /* ImmersiveView.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
3B2421F82B8872C100BDC25D /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu17;
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;
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = xros;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
XROS_DEPLOYMENT_TARGET = 1.0;
};
name = Debug;
};
3B2421F92B8872C100BDC25D /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu17;
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;
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = xros;
SWIFT_COMPILATION_MODE = wholemodule;
VALIDATE_PRODUCT = YES;
XROS_DEPLOYMENT_TARGET = 1.0;
};
name = Release;
};
3B2421FB2B8872C100BDC25D /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_ASSET_PATHS = "\"HandTracking/Preview Content\"";
DEVELOPMENT_TEAM = 2DJDH872JZ;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "$(TARGET_NAME)/Info.plist";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.ivancampos.HandTracking;
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "xros xrsimulator";
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2,7";
};
name = Debug;
};
3B2421FC2B8872C100BDC25D /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_ASSET_PATHS = "\"HandTracking/Preview Content\"";
DEVELOPMENT_TEAM = 2DJDH872JZ;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "$(TARGET_NAME)/Info.plist";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.ivancampos.HandTracking;
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "xros xrsimulator";
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2,7";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
3B2421DE2B8872C000BDC25D /* Build configuration list for PBXProject "HandTracking" */ = {
isa = XCConfigurationList;
buildConfigurations = (
3B2421F82B8872C100BDC25D /* Debug */,
3B2421F92B8872C100BDC25D /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
3B2421FA2B8872C100BDC25D /* Build configuration list for PBXNativeTarget "HandTracking" */ = {
isa = XCConfigurationList;
buildConfigurations = (
3B2421FB2B8872C100BDC25D /* Debug */,
3B2421FC2B8872C100BDC25D /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
/* Begin XCSwiftPackageProductDependency section */
3B2421E82B8872C000BDC25D /* RealityKitContent */ = {
isa = XCSwiftPackageProductDependency;
productName = RealityKitContent;
};
/* End XCSwiftPackageProductDependency section */
};
rootObject = 3B2421DB2B8872C000BDC25D /* Project object */;
}
================================================
FILE: HandTracking/HandTracking.xcodeproj/project.xcworkspace/contents.xcworkspacedata
================================================
================================================
FILE: HandTracking/HandTracking.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
================================================
IDEDidComputeMac32BitWarning
================================================
FILE: HandTracking/Packages/RealityKitContent/Package.realitycomposerpro/ProjectData/main.json
================================================
{
"pathsToIds" : {
"\/RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/GridMaterial.usda" : "CB766F92-EE55-4A63-9401-E7B8C009764D",
"\/RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/Immersive.usda" : "65F6F990-A780-4474-B78B-572E0E4E273D",
"\/RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/Scene.usda" : "0A9B4653-B11E-4D6A-850E-C6FCB621626C",
"\/RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/Untitled Scene.usda" : "D560BB77-AAF3-4BDE-B7C4-989332A4688B",
"RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/GridMaterial.usda" : "66168B71-AB05-424E-8B6C-D33D6E61B08F",
"RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/Immersive.usda" : "AF09ED6F-1707-48FD-8720-65B998362C09",
"RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/Scene.usda" : "D66134B1-3681-4A8E-AFE5-29F257229F3B"
}
}
================================================
FILE: HandTracking/Packages/RealityKitContent/Package.realitycomposerpro/WorkspaceData/SceneMetadataList.json
================================================
{
"0A9B4653-B11E-4D6A-850E-C6FCB621626C" : {
"cameraTransform" : [
1,
0,
0,
0,
0,
0.86602545,
-0.49999994,
0,
0,
0.49999994,
0.86602545,
0,
0.0035969093,
0.35542378,
0.62919164,
1
],
"objectMetadataList" : [
[
"0A9B4653-B11E-4D6A-850E-C6FCB621626C",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
},
"65F6F990-A780-4474-B78B-572E0E4E273D" : {
"cameraTransform" : [
1,
0,
-0,
0,
-0,
0.86602545,
-0.49999988,
0,
0,
0.49999988,
0.86602545,
0,
1.1972517e-08,
2.6179132,
0.43191218,
1
],
"objectMetadataList" : [
[
"65F6F990-A780-4474-B78B-572E0E4E273D",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
},
"66168B71-AB05-424E-8B6C-D33D6E61B08F" : {
"cameraTransform" : [
1,
0,
-0,
0,
-0,
0.8660254,
-0.5,
0,
0,
0.5,
0.8660254,
0,
0,
0.23875366,
0.4135335,
1
],
"objectMetadataList" : [
[
"66168B71-AB05-424E-8B6C-D33D6E61B08F",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
},
"AF09ED6F-1707-48FD-8720-65B998362C09" : {
"cameraTransform" : [
1,
0,
-0,
0,
-0,
0.7071069,
-0.7071067,
0,
0,
0.7071067,
0.7071069,
0,
0,
2.8836339,
-0.107588194,
1
],
"objectMetadataList" : [
[
"AF09ED6F-1707-48FD-8720-65B998362C09",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
},
[
"AF09ED6F-1707-48FD-8720-65B998362C09",
"Root",
"Sphere_Left"
],
{
"isExpanded" : true,
"isLocked" : false
},
[
"AF09ED6F-1707-48FD-8720-65B998362C09",
"Root",
"Sphere_Right"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
},
"CB766F92-EE55-4A63-9401-E7B8C009764D" : {
"cameraTransform" : [
1,
0,
-0,
0,
-0,
0.8660253,
-0.5000001,
0,
0,
0.5000001,
0.8660253,
0,
0,
0.27093494,
0.4692731,
1
],
"objectMetadataList" : [
[
"CB766F92-EE55-4A63-9401-E7B8C009764D",
"Root",
"GridMaterial"
],
{
"isExpanded" : true,
"isLocked" : false
},
[
"CB766F92-EE55-4A63-9401-E7B8C009764D",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
},
"D560BB77-AAF3-4BDE-B7C4-989332A4688B" : {
"cameraTransform" : [
1,
0,
-0,
0,
-0,
0.8660253,
-0.5000001,
0,
0,
0.5000001,
0.8660253,
0,
0,
0.27093494,
0.4692731,
1
],
"objectMetadataList" : [
]
},
"D66134B1-3681-4A8E-AFE5-29F257229F3B" : {
"cameraTransform" : [
1,
0,
-0,
0,
-0,
0.7071069,
-0.7071067,
0,
0,
0.7071067,
0.7071069,
0,
0,
0.26894823,
0.26934713,
1
],
"objectMetadataList" : [
[
"D66134B1-3681-4A8E-AFE5-29F257229F3B",
"Root",
"GridMaterial",
"GridMaterial"
],
{
"isExpanded" : true,
"isLocked" : false
},
[
"D66134B1-3681-4A8E-AFE5-29F257229F3B",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
}
}
================================================
FILE: HandTracking/Packages/RealityKitContent/Package.realitycomposerpro/WorkspaceData/Settings.rcprojectdata
================================================
{
"cameraPresets" : {
},
"secondaryToolbarData" : {
"isGridVisible" : true,
"sceneReverbPreset" : -1
},
"unitDefaults" : {
"°" : "°",
"kg" : "g",
"m" : "cm",
"m\/s" : "m\/s",
"m\/s²" : "m\/s²",
"s" : "s"
}
}
================================================
FILE: HandTracking/Packages/RealityKitContent/Package.swift
================================================
// swift-tools-version:5.9
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "RealityKitContent",
products: [
// Products define the executables and libraries a package produces, and make them visible to other packages.
.library(
name: "RealityKitContent",
targets: ["RealityKitContent"]),
],
dependencies: [
// Dependencies declare other packages that this package depends on.
// .package(url: /* package url */, from: "1.0.0"),
],
targets: [
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
// Targets can depend on other targets in this package, and on products in packages this package depends on.
.target(
name: "RealityKitContent",
dependencies: []),
]
)
================================================
FILE: HandTracking/Packages/RealityKitContent/README.md
================================================
# RealityKitContent
A description of this package.
================================================
FILE: HandTracking/Packages/RealityKitContent/Sources/RealityKitContent/RealityKitContent.rkassets/Immersive.usda
================================================
#usda 1.0
(
defaultPrim = "Root"
metersPerUnit = 1
upAxis = "Y"
)
def Xform "Root"
{
reorder nameChildren = ["Sphere_Left", "Sphere_Right", "GridMaterial"]
def Sphere "Sphere_Right" (
active = true
prepend apiSchemas = ["MaterialBindingAPI"]
)
{
rel material:binding = (
bindMaterialAs = "weakerThanDescendants"
)
double radius = 0.1
quatf xformOp:orient = (1, 0, 0, 0)
float3 xformOp:scale = (1, 1, 1)
float3 xformOp:translate = (0.5, 1.5, -1.5)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
}
def Sphere "Sphere_Left" (
active = true
prepend apiSchemas = ["MaterialBindingAPI"]
)
{
rel material:binding = (
bindMaterialAs = "weakerThanDescendants"
)
double radius = 0.1
quatf xformOp:orient = (1, 0, 0, 0)
float3 xformOp:scale = (1, 1, 1)
float3 xformOp:translate = (-0.5, 1.5, -1.5)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
}
def "GridMaterial" (
active = true
prepend references = @Materials/GridMaterial.usda@
)
{
float3 xformOp:scale = (1, 1, 1)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
}
}
================================================
FILE: HandTracking/Packages/RealityKitContent/Sources/RealityKitContent/RealityKitContent.rkassets/Materials/GridMaterial.usda
================================================
#usda 1.0
(
defaultPrim = "Root"
metersPerUnit = 1
upAxis = "Y"
)
def Xform "Root"
{
def Material "GridMaterial"
{
reorder nameChildren = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "DefaultSurfaceShader", "MaterialXPreviewSurface", "Texcoord", "Add", "Multiply", "Fractional", "LineCounts", "Multiply_1", "Separate2", "Separate2_1", "Ifgreater", "Ifgreater_1", "Max", "Background_Color"]
token outputs:mtlx:surface.connect =
token outputs:realitykit:vertex
token outputs:surface
float2 ui:nodegraph:realitykit:subgraphOutputs:pos = (2222, 300.5)
float2 ui:nodegraph:realitykit:subgraphOutputs:size = (182, 89)
int ui:nodegraph:realitykit:subgraphOutputs:stackingOrder = 749
def Shader "DefaultSurfaceShader"
{
uniform token info:id = "UsdPreviewSurface"
color3f inputs:diffuseColor = (1, 1, 1)
float inputs:roughness = 0.75
token outputs:surface
}
def Shader "MaterialXPreviewSurface"
{
uniform token info:id = "ND_UsdPreviewSurface_surfaceshader"
float inputs:clearcoat
float inputs:clearcoatRoughness
color3f inputs:diffuseColor.connect =
color3f inputs:emissiveColor
float inputs:ior
float inputs:metallic = 0.15
float3 inputs:normal
float inputs:occlusion
float inputs:opacity
float inputs:opacityThreshold
float inputs:roughness = 0.5
token outputs:out
float2 ui:nodegraph:node:pos = (1967, 300.5)
float2 ui:nodegraph:node:size = (208, 297)
int ui:nodegraph:node:stackingOrder = 870
string[] ui:nodegraph:realitykit:node:attributesShowingChildren = ["Advanced"]
}
def Shader "Texcoord"
{
uniform token info:id = "ND_texcoord_vector2"
float2 outputs:out
float2 ui:nodegraph:node:pos = (94.14453, 35.29297)
float2 ui:nodegraph:node:size = (182, 43)
int ui:nodegraph:node:stackingOrder = 1358
}
def Shader "Multiply"
{
uniform token info:id = "ND_multiply_vector2"
float2 inputs:in1.connect =
float2 inputs:in2 = (32, 15)
float2 inputs:in2.connect =
float2 outputs:out
float2 ui:nodegraph:node:pos = (275.64453, 47.29297)
float2 ui:nodegraph:node:size = (61, 36)
int ui:nodegraph:node:stackingOrder = 1348
string[] ui:nodegraph:realitykit:node:attributesShowingChildren = ["inputs:in2"]
}
def Shader "Fractional"
{
uniform token info:id = "ND_realitykit_fractional_vector2"
float2 inputs:in.connect =
float2 outputs:out
float2 ui:nodegraph:node:pos = (440.5, 49.5)
float2 ui:nodegraph:node:size = (155, 99)
int ui:nodegraph:node:stackingOrder = 1345
}
def Shader "BaseColor"
{
uniform token info:id = "ND_constant_color3"
color3f inputs:value = (0.89737034, 0.89737034, 0.89737034) (
colorSpace = "Input - Texture - sRGB - sRGB"
)
color3f inputs:value.connect = None
color3f outputs:out
float2 ui:nodegraph:node:pos = (1537.5977, 363.07812)
float2 ui:nodegraph:node:size = (150, 43)
int ui:nodegraph:node:stackingOrder = 1353
}
def Shader "LineColor"
{
uniform token info:id = "ND_constant_color3"
color3f inputs:value = (0.55945957, 0.55945957, 0.55945957) (
colorSpace = "Input - Texture - sRGB - sRGB"
)
color3f inputs:value.connect = None
color3f outputs:out
float2 ui:nodegraph:node:pos = (1536.9844, 287.86328)
float2 ui:nodegraph:node:size = (146, 43)
int ui:nodegraph:node:stackingOrder = 1355
}
def Shader "LineWidths"
{
uniform token info:id = "ND_combine2_vector2"
float inputs:in1 = 0.1
float inputs:in2 = 0.1
float2 outputs:out
float2 ui:nodegraph:node:pos = (443.64453, 233.79297)
float2 ui:nodegraph:node:size = (151, 43)
int ui:nodegraph:node:stackingOrder = 1361
}
def Shader "LineCounts"
{
uniform token info:id = "ND_combine2_vector2"
float inputs:in1 = 24
float inputs:in2 = 12
float2 outputs:out
float2 ui:nodegraph:node:pos = (94.14453, 138.29297)
float2 ui:nodegraph:node:size = (153, 43)
int ui:nodegraph:node:stackingOrder = 1359
}
def Shader "Remap"
{
uniform token info:id = "ND_remap_color3"
color3f inputs:in.connect =
color3f inputs:inhigh.connect = None
color3f inputs:inlow.connect = None
color3f inputs:outhigh.connect =
color3f inputs:outlow.connect =
color3f outputs:out
float2 ui:nodegraph:node:pos = (1755.5, 300.5)
float2 ui:nodegraph:node:size = (95, 171)
int ui:nodegraph:node:stackingOrder = 1282
string[] ui:nodegraph:realitykit:node:attributesShowingChildren = ["inputs:outlow"]
}
def Shader "Separate2"
{
uniform token info:id = "ND_separate2_vector2"
float2 inputs:in.connect =
float outputs:outx
float outputs:outy
float2 ui:nodegraph:node:pos = (1212.6445, 128.91797)
float2 ui:nodegraph:node:size = (116, 117)
int ui:nodegraph:node:stackingOrder = 1363
}
def Shader "Combine3"
{
uniform token info:id = "ND_combine3_color3"
float inputs:in1.connect =
float inputs:in2.connect =
float inputs:in3.connect =
color3f outputs:out
float2 ui:nodegraph:node:pos = (1578.1445, 128.91797)
float2 ui:nodegraph:node:size = (146, 54)
int ui:nodegraph:node:stackingOrder = 1348
}
def Shader "Range"
{
uniform token info:id = "ND_range_vector2"
bool inputs:doclamp = 1
float2 inputs:gamma = (2, 2)
float2 inputs:in.connect =
float2 inputs:inhigh.connect =
float2 inputs:inlow = (0.02, 0.02)
float2 inputs:outhigh
float2 inputs:outlow
float2 outputs:out
float2 ui:nodegraph:node:pos = (990.64453, 128.91797)
float2 ui:nodegraph:node:size = (98, 207)
int ui:nodegraph:node:stackingOrder = 1364
}
def Shader "Subtract"
{
uniform token info:id = "ND_subtract_vector2"
float2 inputs:in1.connect =
float2 inputs:in2.connect =
float2 outputs:out
float2 ui:nodegraph:node:pos = (612.64453, 87.04297)
float2 ui:nodegraph:node:size = (63, 36)
int ui:nodegraph:node:stackingOrder = 1348
}
def Shader "Absval"
{
uniform token info:id = "ND_absval_vector2"
float2 inputs:in.connect =
float2 outputs:out
float2 ui:nodegraph:node:pos = (765.64453, 87.04297)
float2 ui:nodegraph:node:size = (123, 43)
int ui:nodegraph:node:stackingOrder = 1348
}
def Shader "Min"
{
uniform token info:id = "ND_min_float"
float inputs:in1.connect =
float inputs:in2.connect =
float outputs:out
float2 ui:nodegraph:node:pos = (1388.1445, 128.91797)
float2 ui:nodegraph:node:size = (114, 36)
int ui:nodegraph:node:stackingOrder = 1363
}
}
}
================================================
FILE: HandTracking/Packages/RealityKitContent/Sources/RealityKitContent/RealityKitContent.rkassets/Scene.usda
================================================
#usda 1.0
(
defaultPrim = "Root"
metersPerUnit = 1
upAxis = "Y"
)
def Xform "Root"
{
reorder nameChildren = ["GridMaterial", "Sphere"]
rel material:binding = None (
bindMaterialAs = "weakerThanDescendants"
)
def Sphere "Sphere" (
active = true
prepend apiSchemas = ["MaterialBindingAPI"]
)
{
rel material:binding = (
bindMaterialAs = "weakerThanDescendants"
)
double radius = 0.05
quatf xformOp:orient = (1, 0, 0, 0)
float3 xformOp:scale = (1, 1, 1)
float3 xformOp:translate = (0, 0, 0.0004)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
def RealityKitComponent "Collider"
{
uint group = 1
uniform token info:id = "RealityKit.Collider"
uint mask = 4294967295
token type = "Default"
def RealityKitStruct "Shape"
{
float3 extent = (0.2, 0.2, 0.2)
float radius = 0.05
token shapeType = "Sphere"
}
}
def RealityKitComponent "InputTarget"
{
uniform token info:id = "RealityKit.InputTarget"
}
}
def "GridMaterial" (
active = true
prepend references = @Materials/GridMaterial.usda@
)
{
float3 xformOp:scale = (1, 1, 1)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
}
}
================================================
FILE: HandTracking/Packages/RealityKitContent/Sources/RealityKitContent/RealityKitContent.swift
================================================
import Foundation
/// Bundle for the RealityKitContent project
public let realityKitContentBundle = Bundle.module
================================================
FILE: HandTracking/README.md
================================================
# Hand Tracking
Quickly add hand tracking to your visionOS app.
https://github.com/IvanCampos/visionOS-examples/assets/872137/f08b197e-9c59-491f-b696-f0c6a07cf092
================================================
FILE: LICENSE
================================================
MIT License
Copyright (c) 2024 Ivan Campos
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: LLLM/LLLM/APIResponseService.swift
================================================
//
// APIResponseService.swift
// LLLM
//
// Created by IVAN CAMPOS on 2/15/24.
//
import Foundation
struct APIService {
static func fetchResponse(userPrompt: String, completion: @escaping (String) -> Void) {
var isRunningOnSimulator: Bool {
#if targetEnvironment(simulator)
// Code runs on Simulator
return true
#else
// Code runs on Device
return false
#endif
}
var domain = "localhost"
if (isRunningOnSimulator == false) {
// ifconfig en0 | grep inet | grep -v inet6 | awk '{print $2}'
domain = "ENTER THE IP ADDRESS OF THE MACHINE RUNNING LM STUDIO HERE"
}
//print(domain)
let url = URL(string: "http://\(domain):1234/v1/chat/completions")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
let body: [String: Any] = [
"messages": [
["role": "system", "content": "You are a helpful assistant."],
["role": "user", "content": userPrompt]
],
"temperature": 0.7,
"max_tokens": -1,
"stream": false
]
request.httpBody = try? JSONSerialization.data(withJSONObject: body, options: [])
URLSession.shared.dataTask(with: request) { data, _, _ in
guard let data = data else { return }
do {
let decodedResponse = try JSONDecoder().decode(APIResponse.self, from: data)
if let message = decodedResponse.choices.first?.message.content {
DispatchQueue.main.async {
completion(message)
}
}
} catch {
print("Failed to decode response: \(error)")
}
}.resume()
}
}
struct APIResponse: Codable {
let choices: [Choice]
}
struct Choice: Codable {
let message: Message
}
struct Message: Codable {
let role: String
let content: String
}
================================================
FILE: LLLM/LLLM/APIResponseView.swift
================================================
//
// APIResponseView.swift
// LLLM
//
// Created by IVAN CAMPOS on 2/15/24.
//
import SwiftUI
struct APIResponseView: View {
@StateObject private var viewModel = APIResponseViewModel()
var body: some View {
VStack {
SearchBar(text: $viewModel.prompt, onSearchButtonClicked: {
viewModel.fetchAPIResponse(with: viewModel.prompt)
})
.padding()
Button("Send Prompt") {
viewModel.fetchAPIResponse(with: viewModel.prompt)
}
.padding()
if !viewModel.responseMessage.isEmpty {
Text("Response: \(viewModel.responseMessage)")
.padding()
}
}
}
}
================================================
FILE: LLLM/LLLM/APIResponseViewModel.swift
================================================
//
// APIResponseViewModel.swift
// LLLM
//
// Created by IVAN CAMPOS on 2/15/24.
//
import SwiftUI
import Combine
class APIResponseViewModel: ObservableObject {
@Published var prompt: String = ""
@Published var responseMessage: String = ""
func fetchAPIResponse(with userPrompt: String) {
APIService.fetchResponse(userPrompt: userPrompt) { response in
DispatchQueue.main.async {
self.responseMessage = response
}
}
}
}
================================================
FILE: LLLM/LLLM/Assets.xcassets/AppIcon.solidimagestack/Back.solidimagestacklayer/Content.imageset/Contents.json
================================================
{
"images" : [
{
"idiom" : "vision",
"scale" : "2x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: LLLM/LLLM/Assets.xcassets/AppIcon.solidimagestack/Back.solidimagestacklayer/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: LLLM/LLLM/Assets.xcassets/AppIcon.solidimagestack/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
},
"layers" : [
{
"filename" : "Front.solidimagestacklayer"
},
{
"filename" : "Middle.solidimagestacklayer"
},
{
"filename" : "Back.solidimagestacklayer"
}
]
}
================================================
FILE: LLLM/LLLM/Assets.xcassets/AppIcon.solidimagestack/Front.solidimagestacklayer/Content.imageset/Contents.json
================================================
{
"images" : [
{
"idiom" : "vision",
"scale" : "2x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: LLLM/LLLM/Assets.xcassets/AppIcon.solidimagestack/Front.solidimagestacklayer/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: LLLM/LLLM/Assets.xcassets/AppIcon.solidimagestack/Middle.solidimagestacklayer/Content.imageset/Contents.json
================================================
{
"images" : [
{
"idiom" : "vision",
"scale" : "2x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: LLLM/LLLM/Assets.xcassets/AppIcon.solidimagestack/Middle.solidimagestacklayer/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: LLLM/LLLM/Assets.xcassets/Contents.json
================================================
{
"info" : {
"version" : 1,
"author" : "xcode"
}
}
================================================
FILE: LLLM/LLLM/Info.plist
================================================
NSBonjourServices
_http._tcp
NSLocalNetworkUsageDescription
Allow access to LM Studio
UIApplicationSceneManifest
UIApplicationPreferredDefaultSceneSessionRole
UIWindowSceneSessionRoleApplication
UIApplicationSupportsMultipleScenes
UISceneConfigurations
================================================
FILE: LLLM/LLLM/LLLMApp.swift
================================================
//
// LLLMApp.swift
// LLLM
//
// Created by IVAN CAMPOS on 2/15/24.
//
import SwiftUI
@main
struct LLLMApp: App {
var body: some Scene {
WindowGroup {
APIResponseView()
}
}
}
================================================
FILE: LLLM/LLLM/Preview Content/Preview Assets.xcassets/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: LLLM/LLLM/SearchBar.swift
================================================
//
// SearchBar.swift
// LLLM
//
// Created by IVAN CAMPOS on 2/15/24.
//
import SwiftUI
struct SearchBar: UIViewRepresentable {
@Binding var text: String
var onSearchButtonClicked: () -> Void
class Coordinator: NSObject, UISearchBarDelegate {
var parent: SearchBar
init(_ parent: SearchBar) {
self.parent = parent
}
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
parent.text = searchText
}
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
parent.onSearchButtonClicked()
searchBar.resignFirstResponder()
}
func searchBarTextDidEndEditing(_ searchBar: UISearchBar) {
searchBar.resignFirstResponder()
}
}
func makeCoordinator() -> Coordinator {
Coordinator(self)
}
func makeUIView(context: Context) -> UISearchBar {
let searchBar = UISearchBar(frame: .zero)
searchBar.delegate = context.coordinator
searchBar.searchBarStyle = .minimal
searchBar.placeholder = "Enter your prompt here"
return searchBar
}
func updateUIView(_ uiView: UISearchBar, context: Context) {
uiView.text = text
}
}
================================================
FILE: LLLM/LLLM.xcodeproj/project.pbxproj
================================================
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 56;
objects = {
/* Begin PBXBuildFile section */
3BDFBA492B7DE79E00474AFB /* RealityKitContent in Frameworks */ = {isa = PBXBuildFile; productRef = 3BDFBA482B7DE79E00474AFB /* RealityKitContent */; };
3BDFBA4B2B7DE79E00474AFB /* LLLMApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BDFBA4A2B7DE79E00474AFB /* LLLMApp.swift */; };
3BDFBA512B7DE79F00474AFB /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3BDFBA502B7DE79F00474AFB /* Assets.xcassets */; };
3BDFBA542B7DE79F00474AFB /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3BDFBA532B7DE79F00474AFB /* Preview Assets.xcassets */; };
3BDFBA5C2B7DEADA00474AFB /* APIResponseViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BDFBA5B2B7DEADA00474AFB /* APIResponseViewModel.swift */; };
3BDFBA5E2B7DEAEF00474AFB /* APIResponseView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BDFBA5D2B7DEAEF00474AFB /* APIResponseView.swift */; };
3BDFBA602B7DEB0500474AFB /* APIResponseService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BDFBA5F2B7DEB0500474AFB /* APIResponseService.swift */; };
3BDFBA622B7DF77B00474AFB /* SearchBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3BDFBA612B7DF77B00474AFB /* SearchBar.swift */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
3BDFBA432B7DE79E00474AFB /* LLLM.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = LLLM.app; sourceTree = BUILT_PRODUCTS_DIR; };
3BDFBA472B7DE79E00474AFB /* RealityKitContent */ = {isa = PBXFileReference; lastKnownFileType = wrapper; path = RealityKitContent; sourceTree = ""; };
3BDFBA4A2B7DE79E00474AFB /* LLLMApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LLLMApp.swift; sourceTree = ""; };
3BDFBA502B7DE79F00474AFB /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
3BDFBA532B7DE79F00474AFB /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; };
3BDFBA552B7DE79F00474AFB /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
3BDFBA5B2B7DEADA00474AFB /* APIResponseViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = APIResponseViewModel.swift; sourceTree = ""; };
3BDFBA5D2B7DEAEF00474AFB /* APIResponseView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = APIResponseView.swift; sourceTree = ""; };
3BDFBA5F2B7DEB0500474AFB /* APIResponseService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = APIResponseService.swift; sourceTree = ""; };
3BDFBA612B7DF77B00474AFB /* SearchBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchBar.swift; sourceTree = ""; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
3BDFBA402B7DE79E00474AFB /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
3BDFBA492B7DE79E00474AFB /* RealityKitContent in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
3BDFBA3A2B7DE79E00474AFB = {
isa = PBXGroup;
children = (
3BDFBA452B7DE79E00474AFB /* LLLM */,
3BDFBA462B7DE79E00474AFB /* Packages */,
3BDFBA442B7DE79E00474AFB /* Products */,
);
sourceTree = "";
};
3BDFBA442B7DE79E00474AFB /* Products */ = {
isa = PBXGroup;
children = (
3BDFBA432B7DE79E00474AFB /* LLLM.app */,
);
name = Products;
sourceTree = "";
};
3BDFBA452B7DE79E00474AFB /* LLLM */ = {
isa = PBXGroup;
children = (
3BDFBA4A2B7DE79E00474AFB /* LLLMApp.swift */,
3BDFBA5F2B7DEB0500474AFB /* APIResponseService.swift */,
3BDFBA5D2B7DEAEF00474AFB /* APIResponseView.swift */,
3BDFBA5B2B7DEADA00474AFB /* APIResponseViewModel.swift */,
3BDFBA612B7DF77B00474AFB /* SearchBar.swift */,
3BDFBA502B7DE79F00474AFB /* Assets.xcassets */,
3BDFBA552B7DE79F00474AFB /* Info.plist */,
3BDFBA522B7DE79F00474AFB /* Preview Content */,
);
path = LLLM;
sourceTree = "";
};
3BDFBA462B7DE79E00474AFB /* Packages */ = {
isa = PBXGroup;
children = (
3BDFBA472B7DE79E00474AFB /* RealityKitContent */,
);
path = Packages;
sourceTree = "";
};
3BDFBA522B7DE79F00474AFB /* Preview Content */ = {
isa = PBXGroup;
children = (
3BDFBA532B7DE79F00474AFB /* Preview Assets.xcassets */,
);
path = "Preview Content";
sourceTree = "";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
3BDFBA422B7DE79E00474AFB /* LLLM */ = {
isa = PBXNativeTarget;
buildConfigurationList = 3BDFBA582B7DE79F00474AFB /* Build configuration list for PBXNativeTarget "LLLM" */;
buildPhases = (
3BDFBA3F2B7DE79E00474AFB /* Sources */,
3BDFBA402B7DE79E00474AFB /* Frameworks */,
3BDFBA412B7DE79E00474AFB /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = LLLM;
packageProductDependencies = (
3BDFBA482B7DE79E00474AFB /* RealityKitContent */,
);
productName = LLLM;
productReference = 3BDFBA432B7DE79E00474AFB /* LLLM.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
3BDFBA3B2B7DE79E00474AFB /* Project object */ = {
isa = PBXProject;
attributes = {
BuildIndependentTargetsInParallel = 1;
LastSwiftUpdateCheck = 1520;
LastUpgradeCheck = 1520;
TargetAttributes = {
3BDFBA422B7DE79E00474AFB = {
CreatedOnToolsVersion = 15.2;
};
};
};
buildConfigurationList = 3BDFBA3E2B7DE79E00474AFB /* Build configuration list for PBXProject "LLLM" */;
compatibilityVersion = "Xcode 14.0";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = 3BDFBA3A2B7DE79E00474AFB;
productRefGroup = 3BDFBA442B7DE79E00474AFB /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
3BDFBA422B7DE79E00474AFB /* LLLM */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
3BDFBA412B7DE79E00474AFB /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
3BDFBA542B7DE79F00474AFB /* Preview Assets.xcassets in Resources */,
3BDFBA512B7DE79F00474AFB /* Assets.xcassets in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
3BDFBA3F2B7DE79E00474AFB /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
3BDFBA4B2B7DE79E00474AFB /* LLLMApp.swift in Sources */,
3BDFBA5C2B7DEADA00474AFB /* APIResponseViewModel.swift in Sources */,
3BDFBA622B7DF77B00474AFB /* SearchBar.swift in Sources */,
3BDFBA5E2B7DEAEF00474AFB /* APIResponseView.swift in Sources */,
3BDFBA602B7DEB0500474AFB /* APIResponseService.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
3BDFBA562B7DE79F00474AFB /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu17;
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;
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = xros;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
XROS_DEPLOYMENT_TARGET = 1.0;
};
name = Debug;
};
3BDFBA572B7DE79F00474AFB /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu17;
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;
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = xros;
SWIFT_COMPILATION_MODE = wholemodule;
VALIDATE_PRODUCT = YES;
XROS_DEPLOYMENT_TARGET = 1.0;
};
name = Release;
};
3BDFBA592B7DE79F00474AFB /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_ASSET_PATHS = "\"LLLM/Preview Content\"";
DEVELOPMENT_TEAM = 2DJDH872JZ;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "$(TARGET_NAME)/Info.plist";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.ivancampos.LLLM;
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "xros xrsimulator";
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2,7";
};
name = Debug;
};
3BDFBA5A2B7DE79F00474AFB /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_ASSET_PATHS = "\"LLLM/Preview Content\"";
DEVELOPMENT_TEAM = 2DJDH872JZ;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "$(TARGET_NAME)/Info.plist";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.ivancampos.LLLM;
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "xros xrsimulator";
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2,7";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
3BDFBA3E2B7DE79E00474AFB /* Build configuration list for PBXProject "LLLM" */ = {
isa = XCConfigurationList;
buildConfigurations = (
3BDFBA562B7DE79F00474AFB /* Debug */,
3BDFBA572B7DE79F00474AFB /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
3BDFBA582B7DE79F00474AFB /* Build configuration list for PBXNativeTarget "LLLM" */ = {
isa = XCConfigurationList;
buildConfigurations = (
3BDFBA592B7DE79F00474AFB /* Debug */,
3BDFBA5A2B7DE79F00474AFB /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
/* Begin XCSwiftPackageProductDependency section */
3BDFBA482B7DE79E00474AFB /* RealityKitContent */ = {
isa = XCSwiftPackageProductDependency;
productName = RealityKitContent;
};
/* End XCSwiftPackageProductDependency section */
};
rootObject = 3BDFBA3B2B7DE79E00474AFB /* Project object */;
}
================================================
FILE: LLLM/LLLM.xcodeproj/project.xcworkspace/contents.xcworkspacedata
================================================
================================================
FILE: LLLM/LLLM.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
================================================
IDEDidComputeMac32BitWarning
================================================
FILE: LLLM/Packages/RealityKitContent/Package.realitycomposerpro/ProjectData/main.json
================================================
{
"pathsToIds" : {
"\/RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/GridMaterial.usda" : "95052448-183C-40B5-9E52-3717AF9B48FA",
"\/RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/Immersive.usda" : "65F6F990-A780-4474-B78B-572E0E4E273D",
"\/RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/Scene.usda" : "0A9B4653-B11E-4D6A-850E-C6FCB621626C",
"RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/GridMaterial.usda" : "A21C1E11-ABB0-4972-8159-55AD3A9AA5B3",
"RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/Immersive.usda" : "1D572CEB-057A-41C3-B575-04C37501A3C0",
"RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/Scene.usda" : "D66134B1-3681-4A8E-AFE5-29F257229F3B"
}
}
================================================
FILE: LLLM/Packages/RealityKitContent/Package.realitycomposerpro/WorkspaceData/SceneMetadataList.json
================================================
{
"0A9B4653-B11E-4D6A-850E-C6FCB621626C" : {
"cameraTransform" : [
1,
0,
0,
0,
0,
0.86602545,
-0.49999994,
0,
0,
0.49999994,
0.86602545,
0,
-7.719708e-08,
0.36129734,
0.62580043,
1
],
"objectMetadataList" : [
[
"0A9B4653-B11E-4D6A-850E-C6FCB621626C",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
},
"1D572CEB-057A-41C3-B575-04C37501A3C0" : {
"cameraTransform" : [
1,
0,
-0,
0,
-0,
0.7071069,
-0.7071067,
0,
0,
0.7071067,
0.7071069,
0,
0,
2.8834329,
-0.1072194,
1
],
"objectMetadataList" : [
[
"1D572CEB-057A-41C3-B575-04C37501A3C0",
"Root",
"Sphere_Left"
],
{
"isExpanded" : true,
"isLocked" : false
},
[
"1D572CEB-057A-41C3-B575-04C37501A3C0",
"Root",
"Sphere_Right"
],
{
"isExpanded" : true,
"isLocked" : false
},
[
"1D572CEB-057A-41C3-B575-04C37501A3C0",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
},
"65F6F990-A780-4474-B78B-572E0E4E273D" : {
"cameraTransform" : [
1,
0,
-0,
0,
-0,
0.86602545,
-0.49999988,
0,
0,
0.49999988,
0.86602545,
0,
1.1972517e-08,
2.6179132,
0.43191218,
1
],
"objectMetadataList" : [
[
"65F6F990-A780-4474-B78B-572E0E4E273D",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
},
"95052448-183C-40B5-9E52-3717AF9B48FA" : {
"cameraTransform" : [
0.99999994,
0,
-0,
0,
-0,
0.8660254,
-0.49999994,
0,
0,
0.49999994,
0.8660254,
0,
0,
0.5981957,
1.0361054,
1
],
"objectMetadataList" : [
[
"95052448-183C-40B5-9E52-3717AF9B48FA",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
},
"A21C1E11-ABB0-4972-8159-55AD3A9AA5B3" : {
"cameraTransform" : [
1,
0,
-0,
0,
-0,
0.8660254,
-0.5,
0,
0,
0.5,
0.8660254,
0,
0,
0.23875366,
0.4135335,
1
],
"objectMetadataList" : [
]
},
"D66134B1-3681-4A8E-AFE5-29F257229F3B" : {
"cameraTransform" : [
1,
0,
-0,
0,
-0,
0.7071069,
-0.7071067,
0,
0,
0.7071067,
0.7071069,
0,
0,
0.53307986,
0.53307986,
1
],
"objectMetadataList" : [
[
"D66134B1-3681-4A8E-AFE5-29F257229F3B",
"Root",
"Sphere"
],
{
"isExpanded" : true,
"isLocked" : false
},
[
"D66134B1-3681-4A8E-AFE5-29F257229F3B",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
}
}
================================================
FILE: LLLM/Packages/RealityKitContent/Package.realitycomposerpro/WorkspaceData/Settings.rcprojectdata
================================================
{
"cameraPresets" : {
},
"secondaryToolbarData" : {
"isGridVisible" : true,
"sceneReverbPreset" : -1
},
"unitDefaults" : {
"°" : "°",
"kg" : "g",
"m" : "cm",
"m\/s" : "m\/s",
"m\/s²" : "m\/s²",
"s" : "s"
}
}
================================================
FILE: LLLM/Packages/RealityKitContent/Package.swift
================================================
// swift-tools-version:5.9
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "RealityKitContent",
products: [
// Products define the executables and libraries a package produces, and make them visible to other packages.
.library(
name: "RealityKitContent",
targets: ["RealityKitContent"]),
],
dependencies: [
// Dependencies declare other packages that this package depends on.
// .package(url: /* package url */, from: "1.0.0"),
],
targets: [
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
// Targets can depend on other targets in this package, and on products in packages this package depends on.
.target(
name: "RealityKitContent",
dependencies: []),
]
)
================================================
FILE: LLLM/Packages/RealityKitContent/README.md
================================================
# RealityKitContent
A description of this package.
================================================
FILE: LLLM/Packages/RealityKitContent/Sources/RealityKitContent/RealityKitContent.rkassets/Immersive.usda
================================================
#usda 1.0
(
defaultPrim = "Root"
metersPerUnit = 1
upAxis = "Y"
)
reorder rootPrims = ["Root", "GridMaterial"]
def Xform "Root"
{
reorder nameChildren = ["Sphere_Left", "Sphere_Right", "GridMaterial"]
def Sphere "Sphere_Right" (
active = true
prepend apiSchemas = ["MaterialBindingAPI"]
)
{
rel material:binding = (
bindMaterialAs = "weakerThanDescendants"
)
double radius = 0.1
quatf xformOp:orient = (1, 0, 0, 0)
float3 xformOp:scale = (1, 1, 1)
float3 xformOp:translate = (0.5, 1.5, -1.5)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
}
def Sphere "Sphere_Left" (
active = true
prepend apiSchemas = ["MaterialBindingAPI"]
)
{
rel material:binding = (
bindMaterialAs = "weakerThanDescendants"
)
double radius = 0.1
quatf xformOp:orient = (1, 0, 0, 0)
float3 xformOp:scale = (1, 1, 1)
float3 xformOp:translate = (-0.5, 1.5, -1.5)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
}
def "GridMaterial" (
active = true
references = @Materials/GridMaterial.usda@
)
{
quatf xformOp:orient = (1, 0, 0, 0)
float3 xformOp:scale = (1, 1, 1)
float3 xformOp:translate = (0, 0, 0)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
}
}
================================================
FILE: LLLM/Packages/RealityKitContent/Sources/RealityKitContent/RealityKitContent.rkassets/Materials/GridMaterial.usda
================================================
#usda 1.0
(
defaultPrim = "Root"
metersPerUnit = 1
upAxis = "Y"
)
def Xform "Root"
{
def Material "GridMaterial"
{
reorder nameChildren = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "DefaultSurfaceShader", "MaterialXPreviewSurface", "Texcoord", "Add", "Multiply", "Fractional", "LineCounts", "Multiply_1", "Separate2", "Separate2_1", "Ifgreater", "Ifgreater_1", "Max", "Background_Color"]
token outputs:mtlx:surface.connect =
token outputs:realitykit:vertex
token outputs:surface
float2 ui:nodegraph:realitykit:subgraphOutputs:pos = (2222, 300.5)
float2 ui:nodegraph:realitykit:subgraphOutputs:size = (182, 89)
int ui:nodegraph:realitykit:subgraphOutputs:stackingOrder = 749
def Shader "DefaultSurfaceShader"
{
uniform token info:id = "UsdPreviewSurface"
color3f inputs:diffuseColor = (1, 1, 1)
float inputs:roughness = 0.75
token outputs:surface
}
def Shader "MaterialXPreviewSurface"
{
uniform token info:id = "ND_UsdPreviewSurface_surfaceshader"
float inputs:clearcoat
float inputs:clearcoatRoughness
color3f inputs:diffuseColor.connect =
color3f inputs:emissiveColor
float inputs:ior
float inputs:metallic = 0.15
float3 inputs:normal
float inputs:occlusion
float inputs:opacity
float inputs:opacityThreshold
float inputs:roughness = 0.5
token outputs:out
float2 ui:nodegraph:node:pos = (1967, 300.5)
float2 ui:nodegraph:node:size = (208, 297)
int ui:nodegraph:node:stackingOrder = 870
string[] ui:nodegraph:realitykit:node:attributesShowingChildren = ["Advanced"]
}
def Shader "Texcoord"
{
uniform token info:id = "ND_texcoord_vector2"
float2 outputs:out
float2 ui:nodegraph:node:pos = (94.14453, 35.29297)
float2 ui:nodegraph:node:size = (182, 43)
int ui:nodegraph:node:stackingOrder = 1358
}
def Shader "Multiply"
{
uniform token info:id = "ND_multiply_vector2"
float2 inputs:in1.connect =
float2 inputs:in2 = (32, 15)
float2 inputs:in2.connect =
float2 outputs:out
float2 ui:nodegraph:node:pos = (275.64453, 47.29297)
float2 ui:nodegraph:node:size = (61, 36)
int ui:nodegraph:node:stackingOrder = 1348
string[] ui:nodegraph:realitykit:node:attributesShowingChildren = ["inputs:in2"]
}
def Shader "Fractional"
{
uniform token info:id = "ND_realitykit_fractional_vector2"
float2 inputs:in.connect =
float2 outputs:out
float2 ui:nodegraph:node:pos = (440.5, 49.5)
float2 ui:nodegraph:node:size = (155, 99)
int ui:nodegraph:node:stackingOrder = 1345
}
def Shader "BaseColor"
{
uniform token info:id = "ND_constant_color3"
color3f inputs:value = (0.89737034, 0.89737034, 0.89737034) (
colorSpace = "Input - Texture - sRGB - sRGB"
)
color3f inputs:value.connect = None
color3f outputs:out
float2 ui:nodegraph:node:pos = (1537.5977, 363.07812)
float2 ui:nodegraph:node:size = (150, 43)
int ui:nodegraph:node:stackingOrder = 1353
}
def Shader "LineColor"
{
uniform token info:id = "ND_constant_color3"
color3f inputs:value = (0.55945957, 0.55945957, 0.55945957) (
colorSpace = "Input - Texture - sRGB - sRGB"
)
color3f inputs:value.connect = None
color3f outputs:out
float2 ui:nodegraph:node:pos = (1536.9844, 287.86328)
float2 ui:nodegraph:node:size = (146, 43)
int ui:nodegraph:node:stackingOrder = 1355
}
def Shader "LineWidths"
{
uniform token info:id = "ND_combine2_vector2"
float inputs:in1 = 0.1
float inputs:in2 = 0.1
float2 outputs:out
float2 ui:nodegraph:node:pos = (443.64453, 233.79297)
float2 ui:nodegraph:node:size = (151, 43)
int ui:nodegraph:node:stackingOrder = 1361
}
def Shader "LineCounts"
{
uniform token info:id = "ND_combine2_vector2"
float inputs:in1 = 24
float inputs:in2 = 12
float2 outputs:out
float2 ui:nodegraph:node:pos = (94.14453, 138.29297)
float2 ui:nodegraph:node:size = (153, 43)
int ui:nodegraph:node:stackingOrder = 1359
}
def Shader "Remap"
{
uniform token info:id = "ND_remap_color3"
color3f inputs:in.connect =
color3f inputs:inhigh.connect = None
color3f inputs:inlow.connect = None
color3f inputs:outhigh.connect =
color3f inputs:outlow.connect =
color3f outputs:out
float2 ui:nodegraph:node:pos = (1755.5, 300.5)
float2 ui:nodegraph:node:size = (95, 171)
int ui:nodegraph:node:stackingOrder = 1282
string[] ui:nodegraph:realitykit:node:attributesShowingChildren = ["inputs:outlow"]
}
def Shader "Separate2"
{
uniform token info:id = "ND_separate2_vector2"
float2 inputs:in.connect =
float outputs:outx
float outputs:outy
float2 ui:nodegraph:node:pos = (1212.6445, 128.91797)
float2 ui:nodegraph:node:size = (116, 117)
int ui:nodegraph:node:stackingOrder = 1363
}
def Shader "Combine3"
{
uniform token info:id = "ND_combine3_color3"
float inputs:in1.connect =
float inputs:in2.connect =
float inputs:in3.connect =
color3f outputs:out
float2 ui:nodegraph:node:pos = (1578.1445, 128.91797)
float2 ui:nodegraph:node:size = (146, 54)
int ui:nodegraph:node:stackingOrder = 1348
}
def Shader "Range"
{
uniform token info:id = "ND_range_vector2"
bool inputs:doclamp = 1
float2 inputs:gamma = (2, 2)
float2 inputs:in.connect =
float2 inputs:inhigh.connect =
float2 inputs:inlow = (0.02, 0.02)
float2 inputs:outhigh
float2 inputs:outlow
float2 outputs:out
float2 ui:nodegraph:node:pos = (990.64453, 128.91797)
float2 ui:nodegraph:node:size = (98, 207)
int ui:nodegraph:node:stackingOrder = 1364
}
def Shader "Subtract"
{
uniform token info:id = "ND_subtract_vector2"
float2 inputs:in1.connect =
float2 inputs:in2.connect =
float2 outputs:out
float2 ui:nodegraph:node:pos = (612.64453, 87.04297)
float2 ui:nodegraph:node:size = (63, 36)
int ui:nodegraph:node:stackingOrder = 1348
}
def Shader "Absval"
{
uniform token info:id = "ND_absval_vector2"
float2 inputs:in.connect =
float2 outputs:out
float2 ui:nodegraph:node:pos = (765.64453, 87.04297)
float2 ui:nodegraph:node:size = (123, 43)
int ui:nodegraph:node:stackingOrder = 1348
}
def Shader "Min"
{
uniform token info:id = "ND_min_float"
float inputs:in1.connect =
float inputs:in2.connect =
float outputs:out
float2 ui:nodegraph:node:pos = (1388.1445, 128.91797)
float2 ui:nodegraph:node:size = (114, 36)
int ui:nodegraph:node:stackingOrder = 1363
}
}
}
================================================
FILE: LLLM/Packages/RealityKitContent/Sources/RealityKitContent/RealityKitContent.rkassets/Scene.usda
================================================
#usda 1.0
(
defaultPrim = "Root"
metersPerUnit = 1
upAxis = "Y"
)
reorder rootPrims = ["Root", "GridMaterial"]
def Xform "Root"
{
reorder nameChildren = ["GridMaterial", "Sphere"]
rel material:binding = None (
bindMaterialAs = "weakerThanDescendants"
)
def Sphere "Sphere" (
active = true
prepend apiSchemas = ["MaterialBindingAPI"]
)
{
reorder nameChildren = ["Collider", "InputTarget", "GridMaterial"]
rel material:binding = (
bindMaterialAs = "weakerThanDescendants"
)
double radius = 0.1
quatf xformOp:orient = (1, 0, 0, 0)
float3 xformOp:scale = (1, 1, 1)
float3 xformOp:translate = (0, 0, 0)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
def RealityKitComponent "Collider"
{
uint group = 1
uniform token info:id = "RealityKit.Collider"
uint mask = 4294967295
token type = "Default"
def RealityKitStruct "Shape"
{
float3 extent = (0.2, 0.2, 0.2)
float radius = 0.1
token shapeType = "Sphere"
}
}
def RealityKitComponent "InputTarget"
{
uniform token info:id = "RealityKit.InputTarget"
}
}
def "GridMaterial" (
active = true
references = @Materials/GridMaterial.usda@
)
{
float3 xformOp:scale = (1, 1, 1)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
}
}
================================================
FILE: LLLM/Packages/RealityKitContent/Sources/RealityKitContent/RealityKitContent.swift
================================================
import Foundation
/// Bundle for the RealityKitContent project
public let realityKitContentBundle = Bundle.module
================================================
FILE: LLLM/README.md
================================================
# LLLM
**Local Large Language Model (LLLM):** Call your LM Studio models from your Apple Vision Pro

## Requirements
* Install [LM Studio](https://lmstudio.ai/) on your Apple Silicon (M-Series) Mac
* Click on Local Server in Left Menu
* Download your model of choice (e.g. TheBloke/*)
* Load your desired local Model
* Click "Start Server" button for Port 1234
* Xcode 15.2+
# Instructions
## Simulator
* Open in Project in Xcode
* Set your run destination to a Vision Pro Simulator
* Play
## Apple Vision Pro
* Open in Project in Xcode
* Set your run destination to a Vision Pro Simulator
* Open APIResponseService.swift
* Get your IP address
* In Terminal, run: ifconfig en0 | grep inet | grep -v inet6 | awk '{print $2}'
* Replace the text "ENTER THE IP ADDRESS OF THE MACHINE RUNNING LM STUDIO HERE" with your IP address
* Play
* When sending your prompt for the first time, Allow Network Access
================================================
FILE: Music Kit/Music Kit/AppModel.swift
================================================
//
// AppModel.swift
// Music Kit
//
// Created by IVAN CAMPOS on 3/7/25.
//
import SwiftUI
/// Maintains app-wide state
@MainActor
@Observable
class AppModel {
let immersiveSpaceID = "ImmersiveSpace"
enum ImmersiveSpaceState {
case closed
case inTransition
case open
}
var immersiveSpaceState = ImmersiveSpaceState.closed
}
================================================
FILE: Music Kit/Music Kit/Assets.xcassets/AccentColor.colorset/Contents.json
================================================
{
"colors" : [
{
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: Music Kit/Music Kit/Assets.xcassets/AppIcon.solidimagestack/Back.solidimagestacklayer/Content.imageset/Contents.json
================================================
{
"images" : [
{
"idiom" : "vision",
"scale" : "2x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: Music Kit/Music Kit/Assets.xcassets/AppIcon.solidimagestack/Back.solidimagestacklayer/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: Music Kit/Music Kit/Assets.xcassets/AppIcon.solidimagestack/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
},
"layers" : [
{
"filename" : "Front.solidimagestacklayer"
},
{
"filename" : "Middle.solidimagestacklayer"
},
{
"filename" : "Back.solidimagestacklayer"
}
]
}
================================================
FILE: Music Kit/Music Kit/Assets.xcassets/AppIcon.solidimagestack/Front.solidimagestacklayer/Content.imageset/Contents.json
================================================
{
"images" : [
{
"idiom" : "vision",
"scale" : "2x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: Music Kit/Music Kit/Assets.xcassets/AppIcon.solidimagestack/Front.solidimagestacklayer/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: Music Kit/Music Kit/Assets.xcassets/AppIcon.solidimagestack/Middle.solidimagestacklayer/Content.imageset/Contents.json
================================================
{
"images" : [
{
"idiom" : "vision",
"scale" : "2x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: Music Kit/Music Kit/Assets.xcassets/AppIcon.solidimagestack/Middle.solidimagestacklayer/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: Music Kit/Music Kit/Assets.xcassets/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: Music Kit/Music Kit/ContentView.swift
================================================
//
// ContentView.swift
// Music Kit
//
// Created by IVAN CAMPOS on 3/7/25.
//
import SwiftUI
/// This View now allows the user to enter an artist name,
/// then calls `musicManager.fetchSongsForArtist(artistName:)`.
struct ContentView: View {
@EnvironmentObject var musicManager: MusicManager
@State private var artistName: String = "XG"
var body: some View {
VStack(spacing: 20) {
Text("MusicKit Demo")
.font(.title)
.padding(.top, 40)
// TextField to capture any artist name
HStack {
TextField("Enter artist name", text: $artistName)
.textFieldStyle(.roundedBorder)
.frame(width: 200)
Button("Fetch Artist Songs") {
Task {
if musicManager.isAuthorized {
musicManager.customSongs.removeAll()
await musicManager.fetchSongsForArtist(artistName: artistName)
}
}
}
}
.padding(.horizontal, 20)
// Button to show or hide the immersive space
ToggleImmersiveSpaceButton()
.padding(.bottom, 40)
Text("Enter an artist above, fetch their songs, then open the immersive space.")
.multilineTextAlignment(.center)
.padding(.horizontal, 20)
}
}
}
================================================
FILE: Music Kit/Music Kit/Extensions.swift
================================================
//
// Extensions.swift
// Music Kit
//
// Created by IVAN CAMPOS on 6/10/24.
//
import SwiftUI
/// An extension that provides a way to chunk an array into smaller arrays
extension Array {
func chunked(into size: Int) -> [[Element]] {
return stride(from: 0, to: self.count, by: size).map {
Array(self[$0.. CGImage {
// Provide a URL with the desired width x height
guard let imageURL = artwork.url(width: width, height: width) else {
throw NSError(domain: "ArtworkConversionError", code: -1,
userInfo: [NSLocalizedDescriptionKey: "Invalid artwork URL"])
}
let (data, _) = try await URLSession.shared.data(from: imageURL)
guard let uiImage = UIImage(data: data) else {
throw NSError(domain: "ArtworkConversionError", code: -1,
userInfo: [NSLocalizedDescriptionKey: "Unable to convert data into a UIImage"])
}
if let directCG = uiImage.cgImage {
return directCG
} else {
let renderer = UIGraphicsImageRenderer(size: uiImage.size)
let rendered = renderer.image { _ in uiImage.draw(at: .zero) }
guard let renderedCG = rendered.cgImage else {
throw NSError(domain: "ArtworkConversionError", code: -1,
userInfo: [NSLocalizedDescriptionKey: "Unable to generate CGImage"])
}
return renderedCG
}
}
/// Create a ModelEntity using a Song's artwork (unlit plane).
@MainActor
func createArtworkEntity(
for song: Song,
width: Float = 0.2,
height: Float = 0.2
) async -> ModelEntity? {
guard let artwork = song.artwork else { return nil }
do {
let cgImage = try await cgImageFromArtwork(artwork: artwork, width: 300)
let texture = try await TextureResource(image: cgImage, options: .init(semantic: .color))
var material = SimpleMaterial()
let matTexture = MaterialParameters.Texture(texture)
material.color = .init(texture: matTexture)
let planeMesh = MeshResource.generatePlane(width: width, height: height)
let entity = ModelEntity(mesh: planeMesh, materials: [material])
return entity
} catch {
print("Error creating artwork entity: \(error)")
return nil
}
}
/// A sample SwiftUI view for playback controls. Attach or modify as needed.
struct PlaybackControlsView: View {
@EnvironmentObject var musicManager: MusicManager
var body: some View {
VStack(spacing: 8) {
Text("Playback Controls")
.font(.headline)
HStack {
Button("Stop") {
musicManager.stopPlayback()
}
Button("Pause") {
musicManager.pausePlayback()
}
}
.buttonStyle(.borderedProminent)
}
.padding()
.background(.regularMaterial)
.cornerRadius(12)
}
}
================================================
FILE: Music Kit/Music Kit/ImmersiveView.swift
================================================
//
// ImmersiveView.swift
// Music Kit
//
// Created by IVAN CAMPOS on 3/7/25.
//
import SwiftUI
import RealityKit
import MusicKit
/// Adjust this to define how many songs appear in one row / chunk
let CHUNK_SIZE = 9
struct ImmersiveView: View {
@EnvironmentObject var musicManager: MusicManager
var body: some View {
RealityView { content, attachments in
// Create a ModelEntity to serve as a parent anchor
let nameEntity = ModelEntity(
mesh: .generateText(
"",
extrusionDepth: 0.001,
font: .systemFont(ofSize: 12),
containerFrame: .zero,
alignment: .center,
lineBreakMode: .byCharWrapping
),
materials: [UnlitMaterial(color: .black)]
)
nameEntity.position = [0.1, 1.5, -1]
nameEntity.name = "name"
content.add(nameEntity)
// Add attachments to that entity
let attachmentData: [(name: String, position: SIMD3)] = [
(name: "Artwork", position: [0, 0, 0]),
(name: "Titles", position: [0, 0, 0.1])
]
for data in attachmentData {
if let attachment = attachments.entity(for: data.name) {
attachment.name = data.name
attachment.components.set(InputTargetComponent())
attachment.generateCollisionShapes(recursive: true)
attachment.position = data.position
nameEntity.addChild(attachment)
}
}
} attachments: {
// Attachment for listing songs (simple list)
Attachment(id: "Songs") {
List(musicManager.customSongs, id: \.id) { song in
HStack {
Text(song.title)
Spacer()
Button(action: {
musicManager.playSong(song)
}) {
Image(systemName: "play.circle")
.font(.system(size: 36))
}
}
}
}
// Attachment for Artwork
Attachment(id: "Artwork") {
let chunkedSongs = musicManager.customSongs.chunked(into: CHUNK_SIZE)
ScrollView {
VStack {
ForEach(chunkedSongs, id: \.self) { songChunk in
HStack {
ForEach(songChunk, id: \.id) { song in
if let artwork = song.artwork {
ArtworkImage(artwork, width: 350)
.hoverEffect(LiftHoverEffect())
}
}
}
}
}
.padding()
}
}
// Attachment for Titles / custom UI
Attachment(id: "Titles") {
TitlesView()
HStack {
// A separate "Stop Playback" UI
StopView {
musicManager.stopPlayback()
}
}
.frame(width: 350)
}
}
}
}
/// Format a time interval into mm:ss if needed
func formatTimeInterval(_ timeInterval: TimeInterval) -> String {
let seconds = Int(timeInterval) % 60
let minutes = (Int(timeInterval) / 60) % 60
return String(format: "%02d:%02d", minutes, seconds)
}
struct TitlesView: View {
@EnvironmentObject var musicManager: MusicManager
var body: some View {
let chunkedSongs = musicManager.customSongs.chunked(into: CHUNK_SIZE)
ScrollView {
VStack {
ForEach(chunkedSongs, id: \.self) { songChunk in
HStack {
ForEach(songChunk, id: \.id) { song in
VStack {
Button(action: {
musicManager.playSong(song)
}) {
VStack {
Text(song.title)
}
.padding(30)
.frame(width: 350)
}
.buttonStyle(StyledButton())
.frame(width: 350)
}
}
.frame(height: 400)
}
}
}
}
}
}
/// Custom button style for the titles
struct StyledButton: ButtonStyle {
func makeBody(configuration: Configuration) -> some View {
configuration.label
.background(.thinMaterial)
.hoverEffect(.highlight)
.foregroundColor(.white)
.clipShape(.capsule)
.hoverEffect { effect, isActive, _ in
effect.scaleEffect(isActive ? 1.0 : 0.8)
}
}
}
/// A custom "Stop" button that animates a text label into view on hover.
struct StopView: View {
var action: () -> Void
@Namespace var hoverNamespace
var hoverGroup: HoverEffectGroup {
HoverEffectGroup(hoverNamespace)
}
var body: some View {
Button(action: action) {
HStack(spacing: 2) {
StopButtonView {
action()
}
.hoverEffect(in: hoverGroup) { effect, isActive, _ in
effect.scaleEffect(isActive ? 1.05 : 1.0)
}
StopTextView()
.hoverEffect(in: hoverGroup) { effect, isActive, _ in
effect.opacity(isActive ? 1 : 0)
}
}
}
.frame(width: 350)
.buttonStyle(StopButtonStyle(hoverGroup: hoverGroup))
}
}
struct StopButtonView: View {
var action: () -> Void
var body: some View {
Button(action: {
action()
}) {
Image(systemName: "stop.circle")
.resizable()
.scaledToFit()
.frame(width: 42, height: 42)
.padding(6)
.foregroundColor(.white)
.background(Color.clear)
}
}
}
/// Animates the capsule shape when hovered
struct StopButtonStyle: ButtonStyle {
var hoverGroup: HoverEffectGroup?
func makeBody(configuration: Configuration) -> some View {
configuration.label
.background(.thinMaterial)
.hoverEffect(.highlight)
.hoverEffect { effect, isActive, proxy in
effect.animation(.default.delay(isActive ? 0.2 : 0.1)) {
$0.clipShape(.capsule.size(
width: isActive ? proxy.size.width : proxy.size.width - 121,
height: proxy.size.height,
anchor: .leading
))
}
}
}
}
struct StopTextView: View {
var body: some View {
Text("Stop Playing")
.font(.subheadline)
.foregroundStyle(.white)
.padding(.trailing, 24)
.padding(.leading, 12)
}
}
================================================
FILE: Music Kit/Music Kit/Info.plist
================================================
NSAppleMusicUsageDescription
Enable MusicKit Access
UIApplicationSceneManifest
UIApplicationPreferredDefaultSceneSessionRole
UIWindowSceneSessionRoleApplication
UIApplicationSupportsMultipleScenes
UISceneConfigurations
================================================
FILE: Music Kit/Music Kit/MusicManager.swift
================================================
//
// MusicManager.swift
// Music Kit
//
// Created by IVAN CAMPOS on 2/22/25.
//
import Foundation
import MusicKit
import SwiftUI
/// Potential custom error types for your MusicManager
enum MusicManagerError: Error {
case notAuthorized
}
/// Manages Apple Music authorization, data fetching, and playback.
@MainActor
class MusicManager: ObservableObject {
// MARK: - Published Properties
@Published var albums: [Album] = []
@Published var songs: [Song] = []
@Published var customSongs: [Song] = []
@Published var playlists: [Playlist] = []
@Published var selectedTracks: [Track] = []
@Published var isAuthorized: Bool = false
// (Optional) You can store the last error so the UI can display it if needed
@Published var lastError: Error?
// MARK: - Private Properties
private var player: ApplicationMusicPlayer = .shared
private let requestLimit = 12
// MARK: - Authorization
func requestAuthorization() {
Task {
let status = await MusicAuthorization.request()
isAuthorized = (status == .authorized)
if isAuthorized {
print("Authorization granted")
} else {
print("Authorization denied or restricted")
}
}
}
// MARK: - Generic Catalog Search
/// A reusable method for searching Apple Music for any MusicCatalogSearchable type
func searchCatalog(
ofType type: T.Type,
for searchTerm: String,
limit: Int? = nil
) async throws -> MusicCatalogSearchResponse {
guard isAuthorized else {
throw MusicManagerError.notAuthorized
}
var request = MusicCatalogSearchRequest(term: searchTerm, types: [T.self])
request.limit = limit ?? requestLimit
return try await request.response()
}
// MARK: - Specific Search Examples
func searchAlbums(for searchTerm: String) async {
do {
let response: MusicCatalogSearchResponse =
try await searchCatalog(ofType: Album.self, for: searchTerm)
albums = Array(response.albums)
} catch {
handleError(error, message: "Error searching albums")
}
}
func searchSongs(for searchTerm: String) async {
do {
let response: MusicCatalogSearchResponse =
try await searchCatalog(ofType: Song.self, for: searchTerm)
songs = Array(response.songs)
} catch {
handleError(error, message: "Error searching songs")
}
}
func searchPlaylists(for searchTerm: String) async {
do {
let response: MusicCatalogSearchResponse =
try await searchCatalog(ofType: Playlist.self, for: searchTerm)
playlists = Array(response.playlists)
} catch {
handleError(error, message: "Error searching playlists")
}
}
// MARK: - Fetching Detailed Resources
func fetchTracks(for album: Album) {
guard isAuthorized else {
print("Not authorized to access Apple Music")
return
}
Task {
do {
let detailedAlbum = try await album.with([.tracks])
selectedTracks = Array(detailedAlbum.tracks ?? [])
} catch {
handleError(error, message: "Error fetching album tracks")
}
}
}
func fetchPlaylistItems(for playlist: Playlist) {
guard isAuthorized else {
print("Not authorized to access Apple Music")
return
}
Task {
do {
let detailedPlaylist = try await playlist.with([.tracks])
selectedTracks = Array(detailedPlaylist.tracks ?? [])
} catch {
handleError(error, message: "Error fetching playlist tracks")
}
}
}
// MARK: - Specific Custom Songs
func getCustomSongs() async {
// Just an example array of fixed IDs
var request = MusicCatalogResourceRequest(matching: \.id, memberOf: ["1737281142", "1742262123", "1757581944", "1660487909", "1692289011", "1770737897", "1703356592", "1609402381", "1717738435", "1702984168",
"1624618717", "1703356821"])
request.limit = requestLimit
do {
let response = try await request.response()
customSongs = Array(response.items)
} catch {
handleError(error, message: "Error getting custom songs")
}
}
// MARK: - Playback
func playTrack(_ track: Track) {
guard isAuthorized else {
print("Not authorized to access Apple Music")
return
}
Task {
do {
player.queue = [track]
try await player.play()
} catch {
handleError(error, message: "Error playing track")
}
}
}
func playSong(_ song: Song) {
guard isAuthorized else {
print("Not authorized to access Apple Music")
return
}
Task {
do {
player.queue = [song]
try await player.play()
} catch {
handleError(error, message: "Error playing song")
}
}
}
func stopPlayback() {
Task {
player.stop()
}
}
func pausePlayback() {
Task {
player.pause()
}
}
func getPlaybackStatus() -> MusicPlayer.PlaybackStatus {
player.state.playbackStatus
}
func isPlaying() -> Bool {
getPlaybackStatus() == .playing
}
// MARK: - Fetching Single Items or Music Videos
func fetchSongMetadata(songID: MusicItemID) async throws -> Song? {
let request = MusicCatalogResourceRequest(matching: \.id, equalTo: songID)
let response = try await request.response()
return response.items.first
}
func fetchMusicVideos(for artistName: String) async throws -> MusicItemCollection {
let request = MusicCatalogSearchRequest(term: artistName, types: [MusicVideo.self])
let response = try await request.response()
return response.musicVideos
}
// MARK: - Fetch All Songs for an Artist
func fetchSongsForArtist(artistName: String) async {
do {
// 1. Search for the artist
var searchRequest = MusicCatalogSearchRequest(term: artistName, types: [Artist.self])
searchRequest.limit = 1
let searchResponse = try await searchRequest.response()
guard let artist = searchResponse.artists.first else {
print("Artist not found.")
return
}
// 2. Fetch detailed artist info
let artistRequest = MusicCatalogResourceRequest(matching: \.id, equalTo: artist.id)
let artistResponse = try await artistRequest.response()
guard let detailedArtist = artistResponse.items.first else {
print("Could not fetch detailed artist info.")
return
}
// 3. Fetch the artist's songs
var songsRequest = MusicCatalogSearchRequest(term: detailedArtist.name, types: [Song.self])
songsRequest.limit = 25
let songsResponse = try await songsRequest.response()
let fetchedSongs = songsResponse.songs
let filteredSongs = fetchedSongs.filter { $0.artistName.contains(detailedArtist.name) }
// Modify customSongs (already published)
customSongs.append(contentsOf: filteredSongs)
} catch {
handleError(error, message: "Error fetching songs for artist")
}
}
// MARK: - Error Handling
private func handleError(_ error: Error, message: String) {
print("\(message): \(error)")
lastError = error // Store if you'd like to display it in the UI
}
}
================================================
FILE: Music Kit/Music Kit/Music_KitApp.swift
================================================
//
// Music_KitApp.swift
// Music Kit
//
// Created by IVAN CAMPOS on 3/7/25.
//
import SwiftUI
@main
struct Music_KitApp: App {
@State private var appModel = AppModel()
@StateObject private var musicManager = MusicManager()
var body: some Scene {
WindowGroup {
ContentView()
.environment(appModel)
.environmentObject(musicManager)
.onAppear() {
musicManager.requestAuthorization()
}
}
ImmersiveSpace(id: appModel.immersiveSpaceID) {
ImmersiveView()
.environment(appModel)
.environmentObject(musicManager)
.onAppear {
appModel.immersiveSpaceState = .open
}
.onDisappear {
appModel.immersiveSpaceState = .closed
}
}
.immersionStyle(selection: .constant(.mixed), in: .mixed)
}
}
================================================
FILE: Music Kit/Music Kit/ToggleImmersiveSpaceButton.swift
================================================
//
// ToggleImmersiveSpaceButton.swift
// Music Kit
//
// Created by IVAN CAMPOS on 3/7/25.
//
import SwiftUI
struct ToggleImmersiveSpaceButton: View {
@Environment(AppModel.self) private var appModel
@Environment(\.dismissImmersiveSpace) private var dismissImmersiveSpace
@Environment(\.openImmersiveSpace) private var openImmersiveSpace
var body: some View {
Button {
Task { @MainActor in
switch appModel.immersiveSpaceState {
case .open:
appModel.immersiveSpaceState = .inTransition
await dismissImmersiveSpace()
// Don't set immersiveSpaceState to .closed because there
// are multiple paths to ImmersiveView.onDisappear().
// Only set .closed in ImmersiveView.onDisappear().
case .closed:
appModel.immersiveSpaceState = .inTransition
switch await openImmersiveSpace(id: appModel.immersiveSpaceID) {
case .opened:
// Don't set immersiveSpaceState to .open because there
// may be multiple paths to ImmersiveView.onAppear().
// Only set .open in ImmersiveView.onAppear().
break
case .userCancelled, .error:
// On error, we need to mark the immersive space
// as closed because it failed to open.
fallthrough
@unknown default:
// On unknown response, assume space did not open.
appModel.immersiveSpaceState = .closed
}
case .inTransition:
// This case should not ever happen because button is disabled for this case.
break
}
}
} label: {
Text(appModel.immersiveSpaceState == .open ? "Hide Immersive Space" : "Show Immersive Space")
}
.disabled(appModel.immersiveSpaceState == .inTransition)
.animation(.none, value: 0)
.fontWeight(.semibold)
}
}
================================================
FILE: Music Kit/Music Kit.xcodeproj/project.pbxproj
================================================
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 77;
objects = {
/* Begin PBXBuildFile section */
3B7AC3EA2D7BFD9C00CBC8FA /* RealityKitContent in Frameworks */ = {isa = PBXBuildFile; productRef = 3B7AC3E92D7BFD9C00CBC8FA /* RealityKitContent */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
3B7AC3E42D7BFD9C00CBC8FA /* Music Kit.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Music Kit.app"; sourceTree = BUILT_PRODUCTS_DIR; };
3B7AC3E82D7BFD9C00CBC8FA /* RealityKitContent */ = {isa = PBXFileReference; lastKnownFileType = wrapper; path = RealityKitContent; sourceTree = ""; };
/* End PBXFileReference section */
/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */
3B7AC3FC2D7BFD9D00CBC8FA /* Exceptions for "Music Kit" folder in "Music Kit" target */ = {
isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
membershipExceptions = (
Info.plist,
);
target = 3B7AC3E32D7BFD9C00CBC8FA /* Music Kit */;
};
/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */
/* Begin PBXFileSystemSynchronizedRootGroup section */
3B7AC3E62D7BFD9C00CBC8FA /* Music Kit */ = {
isa = PBXFileSystemSynchronizedRootGroup;
exceptions = (
3B7AC3FC2D7BFD9D00CBC8FA /* Exceptions for "Music Kit" folder in "Music Kit" target */,
);
path = "Music Kit";
sourceTree = "";
};
/* End PBXFileSystemSynchronizedRootGroup section */
/* Begin PBXFrameworksBuildPhase section */
3B7AC3E12D7BFD9C00CBC8FA /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
3B7AC3EA2D7BFD9C00CBC8FA /* RealityKitContent in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
3B7AC3DB2D7BFD9C00CBC8FA = {
isa = PBXGroup;
children = (
3B7AC3E62D7BFD9C00CBC8FA /* Music Kit */,
3B7AC3E72D7BFD9C00CBC8FA /* Packages */,
3B7AC3E52D7BFD9C00CBC8FA /* Products */,
);
sourceTree = "";
};
3B7AC3E52D7BFD9C00CBC8FA /* Products */ = {
isa = PBXGroup;
children = (
3B7AC3E42D7BFD9C00CBC8FA /* Music Kit.app */,
);
name = Products;
sourceTree = "";
};
3B7AC3E72D7BFD9C00CBC8FA /* Packages */ = {
isa = PBXGroup;
children = (
3B7AC3E82D7BFD9C00CBC8FA /* RealityKitContent */,
);
path = Packages;
sourceTree = "";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
3B7AC3E32D7BFD9C00CBC8FA /* Music Kit */ = {
isa = PBXNativeTarget;
buildConfigurationList = 3B7AC3FD2D7BFD9D00CBC8FA /* Build configuration list for PBXNativeTarget "Music Kit" */;
buildPhases = (
3B7AC3E02D7BFD9C00CBC8FA /* Sources */,
3B7AC3E12D7BFD9C00CBC8FA /* Frameworks */,
3B7AC3E22D7BFD9C00CBC8FA /* Resources */,
);
buildRules = (
);
dependencies = (
);
fileSystemSynchronizedGroups = (
3B7AC3E62D7BFD9C00CBC8FA /* Music Kit */,
);
name = "Music Kit";
packageProductDependencies = (
3B7AC3E92D7BFD9C00CBC8FA /* RealityKitContent */,
);
productName = "Music Kit";
productReference = 3B7AC3E42D7BFD9C00CBC8FA /* Music Kit.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
3B7AC3DC2D7BFD9C00CBC8FA /* Project object */ = {
isa = PBXProject;
attributes = {
BuildIndependentTargetsInParallel = 1;
LastSwiftUpdateCheck = 1630;
LastUpgradeCheck = 1630;
TargetAttributes = {
3B7AC3E32D7BFD9C00CBC8FA = {
CreatedOnToolsVersion = 16.3;
};
};
};
buildConfigurationList = 3B7AC3DF2D7BFD9C00CBC8FA /* Build configuration list for PBXProject "Music Kit" */;
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = 3B7AC3DB2D7BFD9C00CBC8FA;
minimizedProjectReferenceProxies = 1;
preferredProjectObjectVersion = 77;
productRefGroup = 3B7AC3E52D7BFD9C00CBC8FA /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
3B7AC3E32D7BFD9C00CBC8FA /* Music Kit */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
3B7AC3E22D7BFD9C00CBC8FA /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
3B7AC3E02D7BFD9C00CBC8FA /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
3B7AC3FE2D7BFD9D00CBC8FA /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = 2DJDH872JZ;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "$(TARGET_NAME)/Info.plist";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = "com.ivancampos.Music-Kit";
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "xros xrsimulator";
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = 7;
};
name = Debug;
};
3B7AC3FF2D7BFD9D00CBC8FA /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = 2DJDH872JZ;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "$(TARGET_NAME)/Info.plist";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = "com.ivancampos.Music-Kit";
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "xros xrsimulator";
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = 7;
};
name = Release;
};
3B7AC4002D7BFD9D00CBC8FA /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
DEVELOPMENT_TEAM = 2DJDH872JZ;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu17;
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;
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = xros;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
XROS_DEPLOYMENT_TARGET = 2.4;
};
name = Debug;
};
3B7AC4012D7BFD9D00CBC8FA /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = 2DJDH872JZ;
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu17;
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;
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = xros;
SWIFT_COMPILATION_MODE = wholemodule;
VALIDATE_PRODUCT = YES;
XROS_DEPLOYMENT_TARGET = 2.4;
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
3B7AC3DF2D7BFD9C00CBC8FA /* Build configuration list for PBXProject "Music Kit" */ = {
isa = XCConfigurationList;
buildConfigurations = (
3B7AC4002D7BFD9D00CBC8FA /* Debug */,
3B7AC4012D7BFD9D00CBC8FA /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
3B7AC3FD2D7BFD9D00CBC8FA /* Build configuration list for PBXNativeTarget "Music Kit" */ = {
isa = XCConfigurationList;
buildConfigurations = (
3B7AC3FE2D7BFD9D00CBC8FA /* Debug */,
3B7AC3FF2D7BFD9D00CBC8FA /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
/* Begin XCSwiftPackageProductDependency section */
3B7AC3E92D7BFD9C00CBC8FA /* RealityKitContent */ = {
isa = XCSwiftPackageProductDependency;
productName = RealityKitContent;
};
/* End XCSwiftPackageProductDependency section */
};
rootObject = 3B7AC3DC2D7BFD9C00CBC8FA /* Project object */;
}
================================================
FILE: Music Kit/Music Kit.xcodeproj/project.xcworkspace/contents.xcworkspacedata
================================================
================================================
FILE: Music Kit/Packages/RealityKitContent/Package.realitycomposerpro/ProjectData/main.json
================================================
{
"pathsToIds" : {
"RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/Immersive.usda" : "C6A7F375-BFE9-46E0-9EA6-1A6B150F43FD"
}
}
================================================
FILE: Music Kit/Packages/RealityKitContent/Package.realitycomposerpro/WorkspaceData/SceneMetadataList.json
================================================
{
"C6A7F375-BFE9-46E0-9EA6-1A6B150F43FD" : {
"objectMetadataList" : [
[
"C6A7F375-BFE9-46E0-9EA6-1A6B150F43FD",
"Root"
],
{
"disallowsFraming" : false,
"isExpanded" : true,
"isLocked" : false
},
[
"C6A7F375-BFE9-46E0-9EA6-1A6B150F43FD",
"Root",
"Video_Dock"
],
{
"disallowsFraming" : false,
"isExpanded" : false,
"isLocked" : false
},
[
"C6A7F375-BFE9-46E0-9EA6-1A6B150F43FD",
"Root",
"SkyDome"
],
{
"disallowsFraming" : true,
"isExpanded" : false,
"isLocked" : false
}
]
}
}
================================================
FILE: Music Kit/Packages/RealityKitContent/Package.realitycomposerpro/WorkspaceData/Settings.rcprojectdata
================================================
{
"cameraPresets" : {
},
"secondaryToolbarData" : {
"isGridVisible" : true
},
"unitDefaults" : {
"°" : "°",
"kg" : "g",
"kg⋅m²" : "kg⋅m²",
"m" : "cm",
"m\/s" : "m\/s",
"m\/s²" : "m\/s²",
"s" : "s"
}
}
================================================
FILE: Music Kit/Packages/RealityKitContent/Package.swift
================================================
// swift-tools-version:6.0
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "RealityKitContent",
platforms: [
.visionOS(.v2),
.macOS(.v15),
.iOS(.v18)
],
products: [
// Products define the executables and libraries a package produces, and make them visible to other packages.
.library(
name: "RealityKitContent",
targets: ["RealityKitContent"]),
],
dependencies: [
// Dependencies declare other packages that this package depends on.
// .package(url: /* package url */, from: "1.0.0"),
],
targets: [
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
// Targets can depend on other targets in this package, and on products in packages this package depends on.
.target(
name: "RealityKitContent",
dependencies: []),
]
)
================================================
FILE: Music Kit/Packages/RealityKitContent/README.md
================================================
# RealityKitContent
A description of this package.
================================================
FILE: Music Kit/Packages/RealityKitContent/Sources/RealityKitContent/RealityKitContent.rkassets/Ground/Ground.usda
================================================
#usda 1.0
(
defaultPrim = "Ground"
metersPerUnit = 1
upAxis = "Y"
)
def Xform "Ground"
{
float3 xformOp:translate = (0, 0.1, 0)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
def Mesh "Mesh" (
prepend apiSchemas = ["MaterialBindingAPI"]
)
{
float3[] extent = [(-2.5, 0, -2), (2.5, 0, 3)]
int[] faceVertexCounts = [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4]
int[] faceVertexIndices = [0, 1, 26, 25, 1, 2, 27, 26, 2, 3, 28, 27, 3, 4, 29, 28, 4, 5, 30, 29, 5, 6, 31, 30, 6, 7, 32, 31, 7, 8, 33, 32, 8, 9, 34, 33, 9, 10, 35, 34, 10, 11, 36, 35, 11, 12, 37, 36, 12, 13, 38, 37, 13, 14, 39, 38, 14, 15, 40, 39, 15, 16, 41, 40, 16, 17, 42, 41, 17, 18, 43, 42, 18, 19, 44, 43, 19, 20, 45, 44, 20, 21, 46, 45, 21, 22, 47, 46, 22, 23, 48, 47, 23, 24, 49, 48, 25, 26, 51, 50, 26, 27, 52, 51, 27, 28, 53, 52, 28, 29, 54, 53, 29, 30, 55, 54, 30, 31, 56, 55, 31, 32, 57, 56, 32, 33, 58, 57, 33, 34, 59, 58, 34, 35, 60, 59, 35, 36, 61, 60, 36, 37, 62, 61, 37, 38, 63, 62, 38, 39, 64, 63, 39, 40, 65, 64, 40, 41, 66, 65, 41, 42, 67, 66, 42, 43, 68, 67, 43, 44, 69, 68, 44, 45, 70, 69, 45, 46, 71, 70, 46, 47, 72, 71, 47, 48, 73, 72, 48, 49, 74, 73, 50, 51, 76, 75, 51, 52, 77, 76, 52, 53, 78, 77, 53, 54, 79, 78, 54, 55, 80, 79, 55, 56, 81, 80, 56, 57, 82, 81, 57, 58, 83, 82, 58, 59, 84, 83, 59, 60, 85, 84, 60, 61, 86, 85, 61, 62, 87, 86, 62, 63, 88, 87, 63, 64, 89, 88, 64, 65, 90, 89, 65, 66, 91, 90, 66, 67, 92, 91, 67, 68, 93, 92, 68, 69, 94, 93, 69, 70, 95, 94, 70, 71, 96, 95, 71, 72, 97, 96, 72, 73, 98, 97, 73, 74, 99, 98, 75, 76, 101, 100, 76, 77, 102, 101, 77, 78, 103, 102, 78, 79, 104, 103, 79, 80, 105, 104, 80, 81, 106, 105, 81, 82, 107, 106, 82, 83, 108, 107, 83, 84, 109, 108, 84, 85, 110, 109, 85, 86, 111, 110, 86, 87, 112, 111, 87, 88, 113, 112, 88, 89, 114, 113, 89, 90, 115, 114, 90, 91, 116, 115, 91, 92, 117, 116, 92, 93, 118, 117, 93, 94, 119, 118, 94, 95, 120, 119, 95, 96, 121, 120, 96, 97, 122, 121, 97, 98, 123, 122, 98, 99, 124, 123, 100, 101, 126, 125, 101, 102, 127, 126, 102, 103, 128, 127, 103, 104, 129, 128, 104, 105, 130, 129, 105, 106, 131, 130, 106, 107, 132, 131, 107, 108, 133, 132, 108, 109, 134, 133, 109, 110, 135, 134, 110, 111, 136, 135, 111, 112, 137, 136, 112, 113, 138, 137, 113, 114, 139, 138, 114, 115, 140, 139, 115, 116, 141, 140, 116, 117, 142, 141, 117, 118, 143, 142, 118, 119, 144, 143, 119, 120, 145, 144, 120, 121, 146, 145, 121, 122, 147, 146, 122, 123, 148, 147, 123, 124, 149, 148, 125, 126, 151, 150, 126, 127, 152, 151, 127, 128, 153, 152, 128, 129, 154, 153, 129, 130, 155, 154, 130, 131, 156, 155, 131, 132, 157, 156, 132, 133, 158, 157, 133, 134, 159, 158, 134, 135, 160, 159, 135, 136, 161, 160, 136, 137, 162, 161, 137, 138, 163, 162, 138, 139, 164, 163, 139, 140, 165, 164, 140, 141, 166, 165, 141, 142, 167, 166, 142, 143, 168, 167, 143, 144, 169, 168, 144, 145, 170, 169, 145, 146, 171, 170, 146, 147, 172, 171, 147, 148, 173, 172, 148, 149, 174, 173, 150, 151, 176, 175, 151, 152, 177, 176, 152, 153, 178, 177, 153, 154, 179, 178, 154, 155, 180, 179, 155, 156, 181, 180, 156, 157, 182, 181, 157, 158, 183, 182, 158, 159, 184, 183, 159, 160, 185, 184, 160, 161, 186, 185, 161, 162, 187, 186, 162, 163, 188, 187, 163, 164, 189, 188, 164, 165, 190, 189, 165, 166, 191, 190, 166, 167, 192, 191, 167, 168, 193, 192, 168, 169, 194, 193, 169, 170, 195, 194, 170, 171, 196, 195, 171, 172, 197, 196, 172, 173, 198, 197, 173, 174, 199, 198, 175, 176, 201, 200, 176, 177, 202, 201, 177, 178, 203, 202, 178, 179, 204, 203, 179, 180, 205, 204, 180, 181, 206, 205, 181, 182, 207, 206, 182, 183, 208, 207, 183, 184, 209, 208, 184, 185, 210, 209, 185, 186, 211, 210, 186, 187, 212, 211, 187, 188, 213, 212, 188, 189, 214, 213, 189, 190, 215, 214, 190, 191, 216, 215, 191, 192, 217, 216, 192, 193, 218, 217, 193, 194, 219, 218, 194, 195, 220, 219, 195, 196, 221, 220, 196, 197, 222, 221, 197, 198, 223, 222, 198, 199, 224, 223, 200, 201, 226, 225, 201, 202, 227, 226, 202, 203, 228, 227, 203, 204, 229, 228, 204, 205, 230, 229, 205, 206, 231, 230, 206, 207, 232, 231, 207, 208, 233, 232, 208, 209, 234, 233, 209, 210, 235, 234, 210, 211, 236, 235, 211, 212, 237, 236, 212, 213, 238, 237, 213, 214, 239, 238, 214, 215, 240, 239, 215, 216, 241, 240, 216, 217, 242, 241, 217, 218, 243, 242, 218, 219, 244, 243, 219, 220, 245, 244, 220, 221, 246, 245, 221, 222, 247, 246, 222, 223, 248, 247, 223, 224, 249, 248, 225, 226, 251, 250, 226, 227, 252, 251, 227, 228, 253, 252, 228, 229, 254, 253, 229, 230, 255, 254, 230, 231, 256, 255, 231, 232, 257, 256, 232, 233, 258, 257, 233, 234, 259, 258, 234, 235, 260, 259, 235, 236, 261, 260, 236, 237, 262, 261, 237, 238, 263, 262, 238, 239, 264, 263, 239, 240, 265, 264, 240, 241, 266, 265, 241, 242, 267, 266, 242, 243, 268, 267, 243, 244, 269, 268, 244, 245, 270, 269, 245, 246, 271, 270, 246, 247, 272, 271, 247, 248, 273, 272, 248, 249, 274, 273, 250, 251, 276, 275, 251, 252, 277, 276, 252, 253, 278, 277, 253, 254, 279, 278, 254, 255, 280, 279, 255, 256, 281, 280, 256, 257, 282, 281, 257, 258, 283, 282, 258, 259, 284, 283, 259, 260, 285, 284, 260, 261, 286, 285, 261, 262, 287, 286, 262, 263, 288, 287, 263, 264, 289, 288, 264, 265, 290, 289, 265, 266, 291, 290, 266, 267, 292, 291, 267, 268, 293, 292, 268, 269, 294, 293, 269, 270, 295, 294, 270, 271, 296, 295, 271, 272, 297, 296, 272, 273, 298, 297, 273, 274, 299, 298, 275, 276, 301, 300, 276, 277, 302, 301, 277, 278, 303, 302, 278, 279, 304, 303, 279, 280, 305, 304, 280, 281, 306, 305, 281, 282, 307, 306, 282, 283, 308, 307, 283, 284, 309, 308, 284, 285, 310, 309, 285, 286, 311, 310, 286, 287, 312, 311, 287, 288, 313, 312, 288, 289, 314, 313, 289, 290, 315, 314, 290, 291, 316, 315, 291, 292, 317, 316, 292, 293, 318, 317, 293, 294, 319, 318, 294, 295, 320, 319, 295, 296, 321, 320, 296, 297, 322, 321, 297, 298, 323, 322, 298, 299, 324, 323, 300, 301, 326, 325, 301, 302, 327, 326, 302, 303, 328, 327, 303, 304, 329, 328, 304, 305, 330, 329, 305, 306, 331, 330, 306, 307, 332, 331, 307, 308, 333, 332, 308, 309, 334, 333, 309, 310, 335, 334, 310, 311, 336, 335, 311, 312, 337, 336, 312, 313, 338, 337, 313, 314, 339, 338, 314, 315, 340, 339, 315, 316, 341, 340, 316, 317, 342, 341, 317, 318, 343, 342, 318, 319, 344, 343, 319, 320, 345, 344, 320, 321, 346, 345, 321, 322, 347, 346, 322, 323, 348, 347, 323, 324, 349, 348, 325, 326, 351, 350, 326, 327, 352, 351, 327, 328, 353, 352, 328, 329, 354, 353, 329, 330, 355, 354, 330, 331, 356, 355, 331, 332, 357, 356, 332, 333, 358, 357, 333, 334, 359, 358, 334, 335, 360, 359, 335, 336, 361, 360, 336, 337, 362, 361, 337, 338, 363, 362, 338, 339, 364, 363, 339, 340, 365, 364, 340, 341, 366, 365, 341, 342, 367, 366, 342, 343, 368, 367, 343, 344, 369, 368, 344, 345, 370, 369, 345, 346, 371, 370, 346, 347, 372, 371, 347, 348, 373, 372, 348, 349, 374, 373, 350, 351, 376, 375, 351, 352, 377, 376, 352, 353, 378, 377, 353, 354, 379, 378, 354, 355, 380, 379, 355, 356, 381, 380, 356, 357, 382, 381, 357, 358, 383, 382, 358, 359, 384, 383, 359, 360, 385, 384, 360, 361, 386, 385, 361, 362, 387, 386, 362, 363, 388, 387, 363, 364, 389, 388, 364, 365, 390, 389, 365, 366, 391, 390, 366, 367, 392, 391, 367, 368, 393, 392, 368, 369, 394, 393, 369, 370, 395, 394, 370, 371, 396, 395, 371, 372, 397, 396, 372, 373, 398, 397, 373, 374, 399, 398, 375, 376, 401, 400, 376, 377, 402, 401, 377, 378, 403, 402, 378, 379, 404, 403, 379, 380, 405, 404, 380, 381, 406, 405, 381, 382, 407, 406, 382, 383, 408, 407, 383, 384, 409, 408, 384, 385, 410, 409, 385, 386, 411, 410, 386, 387, 412, 411, 387, 388, 413, 412, 388, 389, 414, 413, 389, 390, 415, 414, 390, 391, 416, 415, 391, 392, 417, 416, 392, 393, 418, 417, 393, 394, 419, 418, 394, 395, 420, 419, 395, 396, 421, 420, 396, 397, 422, 421, 397, 398, 423, 422, 398, 399, 424, 423, 400, 401, 426, 425, 401, 402, 427, 426, 402, 403, 428, 427, 403, 404, 429, 428, 404, 405, 430, 429, 405, 406, 431, 430, 406, 407, 432, 431, 407, 408, 433, 432, 408, 409, 434, 433, 409, 410, 435, 434, 410, 411, 436, 435, 411, 412, 437, 436, 412, 413, 438, 437, 413, 414, 439, 438, 414, 415, 440, 439, 415, 416, 441, 440, 416, 417, 442, 441, 417, 418, 443, 442, 418, 419, 444, 443, 419, 420, 445, 444, 420, 421, 446, 445, 421, 422, 447, 446, 422, 423, 448, 447, 423, 424, 449, 448, 425, 426, 451, 450, 426, 427, 452, 451, 427, 428, 453, 452, 428, 429, 454, 453, 429, 430, 455, 454, 430, 431, 456, 455, 431, 432, 457, 456, 432, 433, 458, 457, 433, 434, 459, 458, 434, 435, 460, 459, 435, 436, 461, 460, 436, 437, 462, 461, 437, 438, 463, 462, 438, 439, 464, 463, 439, 440, 465, 464, 440, 441, 466, 465, 441, 442, 467, 466, 442, 443, 468, 467, 443, 444, 469, 468, 444, 445, 470, 469, 445, 446, 471, 470, 446, 447, 472, 471, 447, 448, 473, 472, 448, 449, 474, 473, 450, 451, 476, 475, 451, 452, 477, 476, 452, 453, 478, 477, 453, 454, 479, 478, 454, 455, 480, 479, 455, 456, 481, 480, 456, 457, 482, 481, 457, 458, 483, 482, 458, 459, 484, 483, 459, 460, 485, 484, 460, 461, 486, 485, 461, 462, 487, 486, 462, 463, 488, 487, 463, 464, 489, 488, 464, 465, 490, 489, 465, 466, 491, 490, 466, 467, 492, 491, 467, 468, 493, 492, 468, 469, 494, 493, 469, 470, 495, 494, 470, 471, 496, 495, 471, 472, 497, 496, 472, 473, 498, 497, 473, 474, 499, 498, 475, 476, 501, 500, 476, 477, 502, 501, 477, 478, 503, 502, 478, 479, 504, 503, 479, 480, 505, 504, 480, 481, 506, 505, 481, 482, 507, 506, 482, 483, 508, 507, 483, 484, 509, 508, 484, 485, 510, 509, 485, 486, 511, 510, 486, 487, 512, 511, 487, 488, 513, 512, 488, 489, 514, 513, 489, 490, 515, 514, 490, 491, 516, 515, 491, 492, 517, 516, 492, 493, 518, 517, 493, 494, 519, 518, 494, 495, 520, 519, 495, 496, 521, 520, 496, 497, 522, 521, 497, 498, 523, 522, 498, 499, 524, 523, 500, 501, 526, 525, 501, 502, 527, 526, 502, 503, 528, 527, 503, 504, 529, 528, 504, 505, 530, 529, 505, 506, 531, 530, 506, 507, 532, 531, 507, 508, 533, 532, 508, 509, 534, 533, 509, 510, 535, 534, 510, 511, 536, 535, 511, 512, 537, 536, 512, 513, 538, 537, 513, 514, 539, 538, 514, 515, 540, 539, 515, 516, 541, 540, 516, 517, 542, 541, 517, 518, 543, 542, 518, 519, 544, 543, 519, 520, 545, 544, 520, 521, 546, 545, 521, 522, 547, 546, 522, 523, 548, 547, 523, 524, 549, 548, 525, 526, 551, 550, 526, 527, 552, 551, 527, 528, 553, 552, 528, 529, 554, 553, 529, 530, 555, 554, 530, 531, 556, 555, 531, 532, 557, 556, 532, 533, 558, 557, 533, 534, 559, 558, 534, 535, 560, 559, 535, 536, 561, 560, 536, 537, 562, 561, 537, 538, 563, 562, 538, 539, 564, 563, 539, 540, 565, 564, 540, 541, 566, 565, 541, 542, 567, 566, 542, 543, 568, 567, 543, 544, 569, 568, 544, 545, 570, 569, 545, 546, 571, 570, 546, 547, 572, 571, 547, 548, 573, 572, 548, 549, 574, 573, 550, 551, 576, 575, 551, 552, 577, 576, 552, 553, 578, 577, 553, 554, 579, 578, 554, 555, 580, 579, 555, 556, 581, 580, 556, 557, 582, 581, 557, 558, 583, 582, 558, 559, 584, 583, 559, 560, 585, 584, 560, 561, 586, 585, 561, 562, 587, 586, 562, 563, 588, 587, 563, 564, 589, 588, 564, 565, 590, 589, 565, 566, 591, 590, 566, 567, 592, 591, 567, 568, 593, 592, 568, 569, 594, 593, 569, 570, 595, 594, 570, 571, 596, 595, 571, 572, 597, 596, 572, 573, 598, 597, 573, 574, 599, 598, 575, 576, 601, 600, 576, 577, 602, 601, 577, 578, 603, 602, 578, 579, 604, 603, 579, 580, 605, 604, 580, 581, 606, 605, 581, 582, 607, 606, 582, 583, 608, 607, 583, 584, 609, 608, 584, 585, 610, 609, 585, 586, 611, 610, 586, 587, 612, 611, 587, 588, 613, 612, 588, 589, 614, 613, 589, 590, 615, 614, 590, 591, 616, 615, 591, 592, 617, 616, 592, 593, 618, 617, 593, 594, 619, 618, 594, 595, 620, 619, 595, 596, 621, 620, 596, 597, 622, 621, 597, 598, 623, 622, 598, 599, 624, 623]
rel material:binding = (
bindMaterialAs = "weakerThanDescendants"
)
uniform token orientation = "leftHanded"
point3f[] points = [(-2.5, 0, -2), (-2.2916667, 0, -2), (-2.0833333, 0, -2), (-1.875, 0, -2), (-1.6666667, 0, -2), (-1.4583334, 0, -2), (-1.25, 0, -2), (-1.0416667, 0, -2), (-0.8333334, 0, -2), (-0.625, 0, -2), (-0.41666675, 0, -2), (-0.20833349, 0, -2), (0, 0, -2), (0.20833325, 0, -2), (0.4166665, 0, -2), (0.625, 0, -2), (0.83333325, 0, -2), (1.0416665, 0, -2), (1.25, 0, -2), (1.4583333, 0, -2), (1.6666665, 0, -2), (1.875, 0, -2), (2.083333, 0, -2), (2.2916665, 0, -2), (2.5, 0, -2), (-2.5, 0, -1.7916666), (-2.2916667, 0, -1.7916666), (-2.0833333, 0, -1.7916666), (-1.875, 0, -1.7916666), (-1.6666667, 0, -1.7916666), (-1.4583334, 0, -1.7916666), (-1.25, 0, -1.7916666), (-1.0416667, 0, -1.7916666), (-0.8333334, 0, -1.7916666), (-0.625, 0, -1.7916666), (-0.41666675, 0, -1.7916666), (-0.20833349, 0, -1.7916666), (0, 0, -1.7916666), (0.20833325, 0, -1.7916666), (0.4166665, 0, -1.7916666), (0.625, 0, -1.7916666), (0.83333325, 0, -1.7916666), (1.0416665, 0, -1.7916666), (1.25, 0, -1.7916666), (1.4583333, 0, -1.7916666), (1.6666665, 0, -1.7916666), (1.875, 0, -1.7916666), (2.083333, 0, -1.7916666), (2.2916665, 0, -1.7916666), (2.5, 0, -1.7916666), (-2.5, 0, -1.5833334), (-2.2916667, 0, -1.5833334), (-2.0833333, 0, -1.5833334), (-1.875, 0, -1.5833334), (-1.6666667, 0, -1.5833334), (-1.4583334, 0, -1.5833334), (-1.25, 0, -1.5833334), (-1.0416667, 0, -1.5833334), (-0.8333334, 0, -1.5833334), (-0.625, 0, -1.5833334), (-0.41666675, 0, -1.5833334), (-0.20833349, 0, -1.5833334), (0, 0, -1.5833334), (0.20833325, 0, -1.5833334), (0.4166665, 0, -1.5833334), (0.625, 0, -1.5833334), (0.83333325, 0, -1.5833334), (1.0416665, 0, -1.5833334), (1.25, 0, -1.5833334), (1.4583333, 0, -1.5833334), (1.6666665, 0, -1.5833334), (1.875, 0, -1.5833334), (2.083333, 0, -1.5833334), (2.2916665, 0, -1.5833334), (2.5, 0, -1.5833334), (-2.5, 0, -1.375), (-2.2916667, 0, -1.375), (-2.0833333, 0, -1.375), (-1.875, 0, -1.375), (-1.6666667, 0, -1.375), (-1.4583334, 0, -1.375), (-1.25, 0, -1.375), (-1.0416667, 0, -1.375), (-0.8333334, 0, -1.375), (-0.625, 0, -1.375), (-0.41666675, 0, -1.375), (-0.20833349, 0, -1.375), (0, 0, -1.375), (0.20833325, 0, -1.375), (0.4166665, 0, -1.375), (0.625, 0, -1.375), (0.83333325, 0, -1.375), (1.0416665, 0, -1.375), (1.25, 0, -1.375), (1.4583333, 0, -1.375), (1.6666665, 0, -1.375), (1.875, 0, -1.375), (2.083333, 0, -1.375), (2.2916665, 0, -1.375), (2.5, 0, -1.375), (-2.5, 0, -1.1666667), (-2.2916667, 0, -1.1666667), (-2.0833333, 0, -1.1666667), (-1.875, 0, -1.1666667), (-1.6666667, 0, -1.1666667), (-1.4583334, 0, -1.1666667), (-1.25, 0, -1.1666667), (-1.0416667, 0, -1.1666667), (-0.8333334, 0, -1.1666667), (-0.625, 0, -1.1666667), (-0.41666675, 0, -1.1666667), (-0.20833349, 0, -1.1666667), (0, 0, -1.1666667), (0.20833325, 0, -1.1666667), (0.4166665, 0, -1.1666667), (0.625, 0, -1.1666667), (0.83333325, 0, -1.1666667), (1.0416665, 0, -1.1666667), (1.25, 0, -1.1666667), (1.4583333, 0, -1.1666667), (1.6666665, 0, -1.1666667), (1.875, 0, -1.1666667), (2.083333, 0, -1.1666667), (2.2916665, 0, -1.1666667), (2.5, 0, -1.1666667), (-2.5, 0, -0.9583334), (-2.2916667, 0, -0.9583334), (-2.0833333, 0, -0.9583334), (-1.875, 0, -0.9583334), (-1.6666667, 0, -0.9583334), (-1.4583334, 0, -0.9583334), (-1.25, 0, -0.9583334), (-1.0416667, 0, -0.9583334), (-0.8333334, 0, -0.9583334), (-0.625, 0, -0.9583334), (-0.41666675, 0, -0.9583334), (-0.20833349, 0, -0.9583334), (0, 0, -0.9583334), (0.20833325, 0, -0.9583334), (0.4166665, 0, -0.9583334), (0.625, 0, -0.9583334), (0.83333325, 0, -0.9583334), (1.0416665, 0, -0.9583334), (1.25, 0, -0.9583334), (1.4583333, 0, -0.9583334), (1.6666665, 0, -0.9583334), (1.875, 0, -0.9583334), (2.083333, 0, -0.9583334), (2.2916665, 0, -0.9583334), (2.5, 0, -0.9583334), (-2.5, 0, -0.75), (-2.2916667, 0, -0.75), (-2.0833333, 0, -0.75), (-1.875, 0, -0.75), (-1.6666667, 0, -0.75), (-1.4583334, 0, -0.75), (-1.25, 0, -0.75), (-1.0416667, 0, -0.75), (-0.8333334, 0, -0.75), (-0.625, 0, -0.75), (-0.41666675, 0, -0.75), (-0.20833349, 0, -0.75), (0, 0, -0.75), (0.20833325, 0, -0.75), (0.4166665, 0, -0.75), (0.625, 0, -0.75), (0.83333325, 0, -0.75), (1.0416665, 0, -0.75), (1.25, 0, -0.75), (1.4583333, 0, -0.75), (1.6666665, 0, -0.75), (1.875, 0, -0.75), (2.083333, 0, -0.75), (2.2916665, 0, -0.75), (2.5, 0, -0.75), (-2.5, 0, -0.54166675), (-2.2916667, 0, -0.54166675), (-2.0833333, 0, -0.54166675), (-1.875, 0, -0.54166675), (-1.6666667, 0, -0.54166675), (-1.4583334, 0, -0.54166675), (-1.25, 0, -0.54166675), (-1.0416667, 0, -0.54166675), (-0.8333334, 0, -0.54166675), (-0.625, 0, -0.54166675), (-0.41666675, 0, -0.54166675), (-0.20833349, 0, -0.54166675), (0, 0, -0.54166675), (0.20833325, 0, -0.54166675), (0.4166665, 0, -0.54166675), (0.625, 0, -0.54166675), (0.83333325, 0, -0.54166675), (1.0416665, 0, -0.54166675), (1.25, 0, -0.54166675), (1.4583333, 0, -0.54166675), (1.6666665, 0, -0.54166675), (1.875, 0, -0.54166675), (2.083333, 0, -0.54166675), (2.2916665, 0, -0.54166675), (2.5, 0, -0.54166675), (-2.5, 0, -0.33333337), (-2.2916667, 0, -0.33333337), (-2.0833333, 0, -0.33333337), (-1.875, 0, -0.33333337), (-1.6666667, 0, -0.33333337), (-1.4583334, 0, -0.33333337), (-1.25, 0, -0.33333337), (-1.0416667, 0, -0.33333337), (-0.8333334, 0, -0.33333337), (-0.625, 0, -0.33333337), (-0.41666675, 0, -0.33333337), (-0.20833349, 0, -0.33333337), (0, 0, -0.33333337), (0.20833325, 0, -0.33333337), (0.4166665, 0, -0.33333337), (0.625, 0, -0.33333337), (0.83333325, 0, -0.33333337), (1.0416665, 0, -0.33333337), (1.25, 0, -0.33333337), (1.4583333, 0, -0.33333337), (1.6666665, 0, -0.33333337), (1.875, 0, -0.33333337), (2.083333, 0, -0.33333337), (2.2916665, 0, -0.33333337), (2.5, 0, -0.33333337), (-2.5, 0, -0.125), (-2.2916667, 0, -0.125), (-2.0833333, 0, -0.125), (-1.875, 0, -0.125), (-1.6666667, 0, -0.125), (-1.4583334, 0, -0.125), (-1.25, 0, -0.125), (-1.0416667, 0, -0.125), (-0.8333334, 0, -0.125), (-0.625, 0, -0.125), (-0.41666675, 0, -0.125), (-0.20833349, 0, -0.125), (0, 0, -0.125), (0.20833325, 0, -0.125), (0.4166665, 0, -0.125), (0.625, 0, -0.125), (0.83333325, 0, -0.125), (1.0416665, 0, -0.125), (1.25, 0, -0.125), (1.4583333, 0, -0.125), (1.6666665, 0, -0.125), (1.875, 0, -0.125), (2.083333, 0, -0.125), (2.2916665, 0, -0.125), (2.5, 0, -0.125), (-2.5, 0, 0.083333254), (-2.2916667, 0, 0.083333254), (-2.0833333, 0, 0.083333254), (-1.875, 0, 0.083333254), (-1.6666667, 0, 0.083333254), (-1.4583334, 0, 0.083333254), (-1.25, 0, 0.083333254), (-1.0416667, 0, 0.083333254), (-0.8333334, 0, 0.083333254), (-0.625, 0, 0.083333254), (-0.41666675, 0, 0.083333254), (-0.20833349, 0, 0.083333254), (0, 0, 0.083333254), (0.20833325, 0, 0.083333254), (0.4166665, 0, 0.083333254), (0.625, 0, 0.083333254), (0.83333325, 0, 0.083333254), (1.0416665, 0, 0.083333254), (1.25, 0, 0.083333254), (1.4583333, 0, 0.083333254), (1.6666665, 0, 0.083333254), (1.875, 0, 0.083333254), (2.083333, 0, 0.083333254), (2.2916665, 0, 0.083333254), (2.5, 0, 0.083333254), (-2.5, 0, 0.2916665), (-2.2916667, 0, 0.2916665), (-2.0833333, 0, 0.2916665), (-1.875, 0, 0.2916665), (-1.6666667, 0, 0.2916665), (-1.4583334, 0, 0.2916665), (-1.25, 0, 0.2916665), (-1.0416667, 0, 0.2916665), (-0.8333334, 0, 0.2916665), (-0.625, 0, 0.2916665), (-0.41666675, 0, 0.2916665), (-0.20833349, 0, 0.2916665), (0, 0, 0.2916665), (0.20833325, 0, 0.2916665), (0.4166665, 0, 0.2916665), (0.625, 0, 0.2916665), (0.83333325, 0, 0.2916665), (1.0416665, 0, 0.2916665), (1.25, 0, 0.2916665), (1.4583333, 0, 0.2916665), (1.6666665, 0, 0.2916665), (1.875, 0, 0.2916665), (2.083333, 0, 0.2916665), (2.2916665, 0, 0.2916665), (2.5, 0, 0.2916665), (-2.5, 0, 0.5), (-2.2916667, 0, 0.5), (-2.0833333, 0, 0.5), (-1.875, 0, 0.5), (-1.6666667, 0, 0.5), (-1.4583334, 0, 0.5), (-1.25, 0, 0.5), (-1.0416667, 0, 0.5), (-0.8333334, 0, 0.5), (-0.625, 0, 0.5), (-0.41666675, 0, 0.5), (-0.20833349, 0, 0.5), (0, 0, 0.5), (0.20833325, 0, 0.5), (0.4166665, 0, 0.5), (0.625, 0, 0.5), (0.83333325, 0, 0.5), (1.0416665, 0, 0.5), (1.25, 0, 0.5), (1.4583333, 0, 0.5), (1.6666665, 0, 0.5), (1.875, 0, 0.5), (2.083333, 0, 0.5), (2.2916665, 0, 0.5), (2.5, 0, 0.5), (-2.5, 0, 0.70833325), (-2.2916667, 0, 0.70833325), (-2.0833333, 0, 0.70833325), (-1.875, 0, 0.70833325), (-1.6666667, 0, 0.70833325), (-1.4583334, 0, 0.70833325), (-1.25, 0, 0.70833325), (-1.0416667, 0, 0.70833325), (-0.8333334, 0, 0.70833325), (-0.625, 0, 0.70833325), (-0.41666675, 0, 0.70833325), (-0.20833349, 0, 0.70833325), (0, 0, 0.70833325), (0.20833325, 0, 0.70833325), (0.4166665, 0, 0.70833325), (0.625, 0, 0.70833325), (0.83333325, 0, 0.70833325), (1.0416665, 0, 0.70833325), (1.25, 0, 0.70833325), (1.4583333, 0, 0.70833325), (1.6666665, 0, 0.70833325), (1.875, 0, 0.70833325), (2.083333, 0, 0.70833325), (2.2916665, 0, 0.70833325), (2.5, 0, 0.70833325), (-2.5, 0, 0.9166665), (-2.2916667, 0, 0.9166665), (-2.0833333, 0, 0.9166665), (-1.875, 0, 0.9166665), (-1.6666667, 0, 0.9166665), (-1.4583334, 0, 0.9166665), (-1.25, 0, 0.9166665), (-1.0416667, 0, 0.9166665), (-0.8333334, 0, 0.9166665), (-0.625, 0, 0.9166665), (-0.41666675, 0, 0.9166665), (-0.20833349, 0, 0.9166665), (0, 0, 0.9166665), (0.20833325, 0, 0.9166665), (0.4166665, 0, 0.9166665), (0.625, 0, 0.9166665), (0.83333325, 0, 0.9166665), (1.0416665, 0, 0.9166665), (1.25, 0, 0.9166665), (1.4583333, 0, 0.9166665), (1.6666665, 0, 0.9166665), (1.875, 0, 0.9166665), (2.083333, 0, 0.9166665), (2.2916665, 0, 0.9166665), (2.5, 0, 0.9166665), (-2.5, 0, 1.125), (-2.2916667, 0, 1.125), (-2.0833333, 0, 1.125), (-1.875, 0, 1.125), (-1.6666667, 0, 1.125), (-1.4583334, 0, 1.125), (-1.25, 0, 1.125), (-1.0416667, 0, 1.125), (-0.8333334, 0, 1.125), (-0.625, 0, 1.125), (-0.41666675, 0, 1.125), (-0.20833349, 0, 1.125), (0, 0, 1.125), (0.20833325, 0, 1.125), (0.4166665, 0, 1.125), (0.625, 0, 1.125), (0.83333325, 0, 1.125), (1.0416665, 0, 1.125), (1.25, 0, 1.125), (1.4583333, 0, 1.125), (1.6666665, 0, 1.125), (1.875, 0, 1.125), (2.083333, 0, 1.125), (2.2916665, 0, 1.125), (2.5, 0, 1.125), (-2.5, 0, 1.3333333), (-2.2916667, 0, 1.3333333), (-2.0833333, 0, 1.3333333), (-1.875, 0, 1.3333333), (-1.6666667, 0, 1.3333333), (-1.4583334, 0, 1.3333333), (-1.25, 0, 1.3333333), (-1.0416667, 0, 1.3333333), (-0.8333334, 0, 1.3333333), (-0.625, 0, 1.3333333), (-0.41666675, 0, 1.3333333), (-0.20833349, 0, 1.3333333), (0, 0, 1.3333333), (0.20833325, 0, 1.3333333), (0.4166665, 0, 1.3333333), (0.625, 0, 1.3333333), (0.83333325, 0, 1.3333333), (1.0416665, 0, 1.3333333), (1.25, 0, 1.3333333), (1.4583333, 0, 1.3333333), (1.6666665, 0, 1.3333333), (1.875, 0, 1.3333333), (2.083333, 0, 1.3333333), (2.2916665, 0, 1.3333333), (2.5, 0, 1.3333333), (-2.5, 0, 1.5416665), (-2.2916667, 0, 1.5416665), (-2.0833333, 0, 1.5416665), (-1.875, 0, 1.5416665), (-1.6666667, 0, 1.5416665), (-1.4583334, 0, 1.5416665), (-1.25, 0, 1.5416665), (-1.0416667, 0, 1.5416665), (-0.8333334, 0, 1.5416665), (-0.625, 0, 1.5416665), (-0.41666675, 0, 1.5416665), (-0.20833349, 0, 1.5416665), (0, 0, 1.5416665), (0.20833325, 0, 1.5416665), (0.4166665, 0, 1.5416665), (0.625, 0, 1.5416665), (0.83333325, 0, 1.5416665), (1.0416665, 0, 1.5416665), (1.25, 0, 1.5416665), (1.4583333, 0, 1.5416665), (1.6666665, 0, 1.5416665), (1.875, 0, 1.5416665), (2.083333, 0, 1.5416665), (2.2916665, 0, 1.5416665), (2.5, 0, 1.5416665), (-2.5, 0, 1.75), (-2.2916667, 0, 1.75), (-2.0833333, 0, 1.75), (-1.875, 0, 1.75), (-1.6666667, 0, 1.75), (-1.4583334, 0, 1.75), (-1.25, 0, 1.75), (-1.0416667, 0, 1.75), (-0.8333334, 0, 1.75), (-0.625, 0, 1.75), (-0.41666675, 0, 1.75), (-0.20833349, 0, 1.75), (0, 0, 1.75), (0.20833325, 0, 1.75), (0.4166665, 0, 1.75), (0.625, 0, 1.75), (0.83333325, 0, 1.75), (1.0416665, 0, 1.75), (1.25, 0, 1.75), (1.4583333, 0, 1.75), (1.6666665, 0, 1.75), (1.875, 0, 1.75), (2.083333, 0, 1.75), (2.2916665, 0, 1.75), (2.5, 0, 1.75), (-2.5, 0, 1.9583333), (-2.2916667, 0, 1.9583333), (-2.0833333, 0, 1.9583333), (-1.875, 0, 1.9583333), (-1.6666667, 0, 1.9583333), (-1.4583334, 0, 1.9583333), (-1.25, 0, 1.9583333), (-1.0416667, 0, 1.9583333), (-0.8333334, 0, 1.9583333), (-0.625, 0, 1.9583333), (-0.41666675, 0, 1.9583333), (-0.20833349, 0, 1.9583333), (0, 0, 1.9583333), (0.20833325, 0, 1.9583333), (0.4166665, 0, 1.9583333), (0.625, 0, 1.9583333), (0.83333325, 0, 1.9583333), (1.0416665, 0, 1.9583333), (1.25, 0, 1.9583333), (1.4583333, 0, 1.9583333), (1.6666665, 0, 1.9583333), (1.875, 0, 1.9583333), (2.083333, 0, 1.9583333), (2.2916665, 0, 1.9583333), (2.5, 0, 1.9583333), (-2.5, 0, 2.1666665), (-2.2916667, 0, 2.1666665), (-2.0833333, 0, 2.1666665), (-1.875, 0, 2.1666665), (-1.6666667, 0, 2.1666665), (-1.4583334, 0, 2.1666665), (-1.25, 0, 2.1666665), (-1.0416667, 0, 2.1666665), (-0.8333334, 0, 2.1666665), (-0.625, 0, 2.1666665), (-0.41666675, 0, 2.1666665), (-0.20833349, 0, 2.1666665), (0, 0, 2.1666665), (0.20833325, 0, 2.1666665), (0.4166665, 0, 2.1666665), (0.625, 0, 2.1666665), (0.83333325, 0, 2.1666665), (1.0416665, 0, 2.1666665), (1.25, 0, 2.1666665), (1.4583333, 0, 2.1666665), (1.6666665, 0, 2.1666665), (1.875, 0, 2.1666665), (2.083333, 0, 2.1666665), (2.2916665, 0, 2.1666665), (2.5, 0, 2.1666665), (-2.5, 0, 2.375), (-2.2916667, 0, 2.375), (-2.0833333, 0, 2.375), (-1.875, 0, 2.375), (-1.6666667, 0, 2.375), (-1.4583334, 0, 2.375), (-1.25, 0, 2.375), (-1.0416667, 0, 2.375), (-0.8333334, 0, 2.375), (-0.625, 0, 2.375), (-0.41666675, 0, 2.375), (-0.20833349, 0, 2.375), (0, 0, 2.375), (0.20833325, 0, 2.375), (0.4166665, 0, 2.375), (0.625, 0, 2.375), (0.83333325, 0, 2.375), (1.0416665, 0, 2.375), (1.25, 0, 2.375), (1.4583333, 0, 2.375), (1.6666665, 0, 2.375), (1.875, 0, 2.375), (2.083333, 0, 2.375), (2.2916665, 0, 2.375), (2.5, 0, 2.375), (-2.5, 0, 2.583333), (-2.2916667, 0, 2.583333), (-2.0833333, 0, 2.583333), (-1.875, 0, 2.583333), (-1.6666667, 0, 2.583333), (-1.4583334, 0, 2.583333), (-1.25, 0, 2.583333), (-1.0416667, 0, 2.583333), (-0.8333334, 0, 2.583333), (-0.625, 0, 2.583333), (-0.41666675, 0, 2.583333), (-0.20833349, 0, 2.583333), (0, 0, 2.583333), (0.20833325, 0, 2.583333), (0.4166665, 0, 2.583333), (0.625, 0, 2.583333), (0.83333325, 0, 2.583333), (1.0416665, 0, 2.583333), (1.25, 0, 2.583333), (1.4583333, 0, 2.583333), (1.6666665, 0, 2.583333), (1.875, 0, 2.583333), (2.083333, 0, 2.583333), (2.2916665, 0, 2.583333), (2.5, 0, 2.583333), (-2.5, 0, 2.7916665), (-2.2916667, 0, 2.7916665), (-2.0833333, 0, 2.7916665), (-1.875, 0, 2.7916665), (-1.6666667, 0, 2.7916665), (-1.4583334, 0, 2.7916665), (-1.25, 0, 2.7916665), (-1.0416667, 0, 2.7916665), (-0.8333334, 0, 2.7916665), (-0.625, 0, 2.7916665), (-0.41666675, 0, 2.7916665), (-0.20833349, 0, 2.7916665), (0, 0, 2.7916665), (0.20833325, 0, 2.7916665), (0.4166665, 0, 2.7916665), (0.625, 0, 2.7916665), (0.83333325, 0, 2.7916665), (1.0416665, 0, 2.7916665), (1.25, 0, 2.7916665), (1.4583333, 0, 2.7916665), (1.6666665, 0, 2.7916665), (1.875, 0, 2.7916665), (2.083333, 0, 2.7916665), (2.2916665, 0, 2.7916665), (2.5, 0, 2.7916665), (-2.5, 0, 3), (-2.2916667, 0, 3), (-2.0833333, 0, 3), (-1.875, 0, 3), (-1.6666667, 0, 3), (-1.4583334, 0, 3), (-1.25, 0, 3), (-1.0416667, 0, 3), (-0.8333334, 0, 3), (-0.625, 0, 3), (-0.41666675, 0, 3), (-0.20833349, 0, 3), (0, 0, 3), (0.20833325, 0, 3), (0.4166665, 0, 3), (0.625, 0, 3), (0.83333325, 0, 3), (1.0416665, 0, 3), (1.25, 0, 3), (1.4583333, 0, 3), (1.6666665, 0, 3), (1.875, 0, 3), (2.083333, 0, 3), (2.2916665, 0, 3), (2.5, 0, 3)] (
interpolation = "vertex"
)
texCoord2f[] primvars:attenuationUV = [(0.28333333, 1.2388333), (0.3013889, 1.2388333), (0.3013889, 1.2038507), (0.28333333, 1.2038507), (0.3013889, 1.2388333), (0.31944445, 1.2388333), (0.31944445, 1.2038507), (0.3013889, 1.2038507), (0.31944445, 1.2388333), (0.3375, 1.2388333), (0.3375, 1.2038507), (0.31944445, 1.2038507), (0.3375, 1.2388333), (0.35555553, 1.2388333), (0.35555553, 1.2038507), (0.3375, 1.2038507), (0.35555553, 1.2388333), (0.37361112, 1.2388333), (0.37361112, 1.2038507), (0.35555553, 1.2038507), (0.37361112, 1.2388333), (0.39166668, 1.2388333), (0.39166668, 1.2038507), (0.37361112, 1.2038507), (0.39166668, 1.2388333), (0.4097222, 1.2388333), (0.4097222, 1.2038507), (0.39166668, 1.2038507), (0.4097222, 1.2388333), (0.42777777, 1.2388333), (0.42777777, 1.2038507), (0.4097222, 1.2038507), (0.42777777, 1.2388333), (0.44583333, 1.2388333), (0.44583333, 1.2038507), (0.42777777, 1.2038507), (0.44583333, 1.2388333), (0.46388888, 1.2388333), (0.46388888, 1.2038507), (0.44583333, 1.2038507), (0.46388888, 1.2388333), (0.48194444, 1.2388333), (0.48194444, 1.2038507), (0.46388888, 1.2038507), (0.48194444, 1.2388333), (0.5, 1.2388333), (0.5, 1.2038507), (0.48194444, 1.2038507), (0.5, 1.2388333), (0.51805556, 1.2388333), (0.51805556, 1.2038507), (0.5, 1.2038507), (0.51805556, 1.2388333), (0.5361111, 1.2388333), (0.5361111, 1.2038507), (0.51805556, 1.2038507), (0.5361111, 1.2388333), (0.5541667, 1.2388333), (0.5541667, 1.2038507), (0.5361111, 1.2038507), (0.5541667, 1.2388333), (0.57222223, 1.2388333), (0.57222223, 1.2038507), (0.5541667, 1.2038507), (0.57222223, 1.2388333), (0.5902778, 1.2388333), (0.5902778, 1.2038507), (0.57222223, 1.2038507), (0.5902778, 1.2388333), (0.60833335, 1.2388333), (0.60833335, 1.2038507), (0.5902778, 1.2038507), (0.60833335, 1.2388333), (0.6263889, 1.2388333), (0.6263889, 1.2038507), (0.60833335, 1.2038507), (0.6263889, 1.2388333), (0.6444444, 1.2388333), (0.6444444, 1.2038507), (0.6263889, 1.2038507), (0.6444444, 1.2388333), (0.6625, 1.2388333), (0.6625, 1.2038507), (0.6444444, 1.2038507), (0.6625, 1.2388333), (0.6805555, 1.2388333), (0.6805555, 1.2038507), (0.6625, 1.2038507), (0.6805555, 1.2388333), (0.69861114, 1.2388333), (0.69861114, 1.2038507), (0.6805555, 1.2038507), (0.69861114, 1.2388333), (0.7166667, 1.2388333), (0.7166667, 1.2038507), (0.69861114, 1.2038507), (0.28333333, 1.2038507), (0.3013889, 1.2038507), (0.3013889, 1.1688681), (0.28333333, 1.1688681), (0.3013889, 1.2038507), (0.31944445, 1.2038507), (0.31944445, 1.1688681), (0.3013889, 1.1688681), (0.31944445, 1.2038507), (0.3375, 1.2038507), (0.3375, 1.1688681), (0.31944445, 1.1688681), (0.3375, 1.2038507), (0.35555553, 1.2038507), (0.35555553, 1.1688681), (0.3375, 1.1688681), (0.35555553, 1.2038507), (0.37361112, 1.2038507), (0.37361112, 1.1688681), (0.35555553, 1.1688681), (0.37361112, 1.2038507), (0.39166668, 1.2038507), (0.39166668, 1.1688681), (0.37361112, 1.1688681), (0.39166668, 1.2038507), (0.4097222, 1.2038507), (0.4097222, 1.1688681), (0.39166668, 1.1688681), (0.4097222, 1.2038507), (0.42777777, 1.2038507), (0.42777777, 1.1688681), (0.4097222, 1.1688681), (0.42777777, 1.2038507), (0.44583333, 1.2038507), (0.44583333, 1.1688681), (0.42777777, 1.1688681), (0.44583333, 1.2038507), (0.46388888, 1.2038507), (0.46388888, 1.1688681), (0.44583333, 1.1688681), (0.46388888, 1.2038507), (0.48194444, 1.2038507), (0.48194444, 1.1688681), (0.46388888, 1.1688681), (0.48194444, 1.2038507), (0.5, 1.2038507), (0.5, 1.1688681), (0.48194444, 1.1688681), (0.5, 1.2038507), (0.51805556, 1.2038507), (0.51805556, 1.1688681), (0.5, 1.1688681), (0.51805556, 1.2038507), (0.5361111, 1.2038507), (0.5361111, 1.1688681), (0.51805556, 1.1688681), (0.5361111, 1.2038507), (0.5541667, 1.2038507), (0.5541667, 1.1688681), (0.5361111, 1.1688681), (0.5541667, 1.2038507), (0.57222223, 1.2038507), (0.57222223, 1.1688681), (0.5541667, 1.1688681), (0.57222223, 1.2038507), (0.5902778, 1.2038507), (0.5902778, 1.1688681), (0.57222223, 1.1688681), (0.5902778, 1.2038507), (0.60833335, 1.2038507), (0.60833335, 1.1688681), (0.5902778, 1.1688681), (0.60833335, 1.2038507), (0.6263889, 1.2038507), (0.6263889, 1.1688681), (0.60833335, 1.1688681), (0.6263889, 1.2038507), (0.6444444, 1.2038507), (0.6444444, 1.1688681), (0.6263889, 1.1688681), (0.6444444, 1.2038507), (0.6625, 1.2038507), (0.6625, 1.1688681), (0.6444444, 1.1688681), (0.6625, 1.2038507), (0.6805555, 1.2038507), (0.6805555, 1.1688681), (0.6625, 1.1688681), (0.6805555, 1.2038507), (0.69861114, 1.2038507), (0.69861114, 1.1688681), (0.6805555, 1.1688681), (0.69861114, 1.2038507), (0.7166667, 1.2038507), (0.7166667, 1.1688681), (0.69861114, 1.1688681), (0.28333333, 1.1688681), (0.3013889, 1.1688681), (0.3013889, 1.1338854), (0.28333333, 1.1338854), (0.3013889, 1.1688681), (0.31944445, 1.1688681), (0.31944445, 1.1338854), (0.3013889, 1.1338854), (0.31944445, 1.1688681), (0.3375, 1.1688681), (0.3375, 1.1338854), (0.31944445, 1.1338854), (0.3375, 1.1688681), (0.35555553, 1.1688681), (0.35555553, 1.1338854), (0.3375, 1.1338854), (0.35555553, 1.1688681), (0.37361112, 1.1688681), (0.37361112, 1.1338854), (0.35555553, 1.1338854), (0.37361112, 1.1688681), (0.39166668, 1.1688681), (0.39166668, 1.1338854), (0.37361112, 1.1338854), (0.39166668, 1.1688681), (0.4097222, 1.1688681), (0.4097222, 1.1338854), (0.39166668, 1.1338854), (0.4097222, 1.1688681), (0.42777777, 1.1688681), (0.42777777, 1.1338854), (0.4097222, 1.1338854), (0.42777777, 1.1688681), (0.44583333, 1.1688681), (0.44583333, 1.1338854), (0.42777777, 1.1338854), (0.44583333, 1.1688681), (0.46388888, 1.1688681), (0.46388888, 1.1338854), (0.44583333, 1.1338854), (0.46388888, 1.1688681), (0.48194444, 1.1688681), (0.48194444, 1.1338854), (0.46388888, 1.1338854), (0.48194444, 1.1688681), (0.5, 1.1688681), (0.5, 1.1338854), (0.48194444, 1.1338854), (0.5, 1.1688681), (0.51805556, 1.1688681), (0.51805556, 1.1338854), (0.5, 1.1338854), (0.51805556, 1.1688681), (0.5361111, 1.1688681), (0.5361111, 1.1338854), (0.51805556, 1.1338854), (0.5361111, 1.1688681), (0.5541667, 1.1688681), (0.5541667, 1.1338854), (0.5361111, 1.1338854), (0.5541667, 1.1688681), (0.57222223, 1.1688681), (0.57222223, 1.1338854), (0.5541667, 1.1338854), (0.57222223, 1.1688681), (0.5902778, 1.1688681), (0.5902778, 1.1338854), (0.57222223, 1.1338854), (0.5902778, 1.1688681), (0.60833335, 1.1688681), (0.60833335, 1.1338854), (0.5902778, 1.1338854), (0.60833335, 1.1688681), (0.6263889, 1.1688681), (0.6263889, 1.1338854), (0.60833335, 1.1338854), (0.6263889, 1.1688681), (0.6444444, 1.1688681), (0.6444444, 1.1338854), (0.6263889, 1.1338854), (0.6444444, 1.1688681), (0.6625, 1.1688681), (0.6625, 1.1338854), (0.6444444, 1.1338854), (0.6625, 1.1688681), (0.6805555, 1.1688681), (0.6805555, 1.1338854), (0.6625, 1.1338854), (0.6805555, 1.1688681), (0.69861114, 1.1688681), (0.69861114, 1.1338854), (0.6805555, 1.1338854), (0.69861114, 1.1688681), (0.7166667, 1.1688681), (0.7166667, 1.1338854), (0.69861114, 1.1338854), (0.28333333, 1.1338854), (0.3013889, 1.1338854), (0.3013889, 1.0989028), (0.28333333, 1.0989028), (0.3013889, 1.1338854), (0.31944445, 1.1338854), (0.31944445, 1.0989028), (0.3013889, 1.0989028), (0.31944445, 1.1338854), (0.3375, 1.1338854), (0.3375, 1.0989028), (0.31944445, 1.0989028), (0.3375, 1.1338854), (0.35555553, 1.1338854), (0.35555553, 1.0989028), (0.3375, 1.0989028), (0.35555553, 1.1338854), (0.37361112, 1.1338854), (0.37361112, 1.0989028), (0.35555553, 1.0989028), (0.37361112, 1.1338854), (0.39166668, 1.1338854), (0.39166668, 1.0989028), (0.37361112, 1.0989028), (0.39166668, 1.1338854), (0.4097222, 1.1338854), (0.4097222, 1.0989028), (0.39166668, 1.0989028), (0.4097222, 1.1338854), (0.42777777, 1.1338854), (0.42777777, 1.0989028), (0.4097222, 1.0989028), (0.42777777, 1.1338854), (0.44583333, 1.1338854), (0.44583333, 1.0989028), (0.42777777, 1.0989028), (0.44583333, 1.1338854), (0.46388888, 1.1338854), (0.46388888, 1.0989028), (0.44583333, 1.0989028), (0.46388888, 1.1338854), (0.48194444, 1.1338854), (0.48194444, 1.0989028), (0.46388888, 1.0989028), (0.48194444, 1.1338854), (0.5, 1.1338854), (0.5, 1.0989028), (0.48194444, 1.0989028), (0.5, 1.1338854), (0.51805556, 1.1338854), (0.51805556, 1.0989028), (0.5, 1.0989028), (0.51805556, 1.1338854), (0.5361111, 1.1338854), (0.5361111, 1.0989028), (0.51805556, 1.0989028), (0.5361111, 1.1338854), (0.5541667, 1.1338854), (0.5541667, 1.0989028), (0.5361111, 1.0989028), (0.5541667, 1.1338854), (0.57222223, 1.1338854), (0.57222223, 1.0989028), (0.5541667, 1.0989028), (0.57222223, 1.1338854), (0.5902778, 1.1338854), (0.5902778, 1.0989028), (0.57222223, 1.0989028), (0.5902778, 1.1338854), (0.60833335, 1.1338854), (0.60833335, 1.0989028), (0.5902778, 1.0989028), (0.60833335, 1.1338854), (0.6263889, 1.1338854), (0.6263889, 1.0989028), (0.60833335, 1.0989028), (0.6263889, 1.1338854), (0.6444444, 1.1338854), (0.6444444, 1.0989028), (0.6263889, 1.0989028), (0.6444444, 1.1338854), (0.6625, 1.1338854), (0.6625, 1.0989028), (0.6444444, 1.0989028), (0.6625, 1.1338854), (0.6805555, 1.1338854), (0.6805555, 1.0989028), (0.6625, 1.0989028), (0.6805555, 1.1338854), (0.69861114, 1.1338854), (0.69861114, 1.0989028), (0.6805555, 1.0989028), (0.69861114, 1.1338854), (0.7166667, 1.1338854), (0.7166667, 1.0989028), (0.69861114, 1.0989028), (0.28333333, 1.0989028), (0.3013889, 1.0989028), (0.3013889, 1.0639201), (0.28333333, 1.0639201), (0.3013889, 1.0989028), (0.31944445, 1.0989028), (0.31944445, 1.0639201), (0.3013889, 1.0639201), (0.31944445, 1.0989028), (0.3375, 1.0989028), (0.3375, 1.0639201), (0.31944445, 1.0639201), (0.3375, 1.0989028), (0.35555553, 1.0989028), (0.35555553, 1.0639201), (0.3375, 1.0639201), (0.35555553, 1.0989028), (0.37361112, 1.0989028), (0.37361112, 1.0639201), (0.35555553, 1.0639201), (0.37361112, 1.0989028), (0.39166668, 1.0989028), (0.39166668, 1.0639201), (0.37361112, 1.0639201), (0.39166668, 1.0989028), (0.4097222, 1.0989028), (0.4097222, 1.0639201), (0.39166668, 1.0639201), (0.4097222, 1.0989028), (0.42777777, 1.0989028), (0.42777777, 1.0639201), (0.4097222, 1.0639201), (0.42777777, 1.0989028), (0.44583333, 1.0989028), (0.44583333, 1.0639201), (0.42777777, 1.0639201), (0.44583333, 1.0989028), (0.46388888, 1.0989028), (0.46388888, 1.0639201), (0.44583333, 1.0639201), (0.46388888, 1.0989028), (0.48194444, 1.0989028), (0.48194444, 1.0639201), (0.46388888, 1.0639201), (0.48194444, 1.0989028), (0.5, 1.0989028), (0.5, 1.0639201), (0.48194444, 1.0639201), (0.5, 1.0989028), (0.51805556, 1.0989028), (0.51805556, 1.0639201), (0.5, 1.0639201), (0.51805556, 1.0989028), (0.5361111, 1.0989028), (0.5361111, 1.0639201), (0.51805556, 1.0639201), (0.5361111, 1.0989028), (0.5541667, 1.0989028), (0.5541667, 1.0639201), (0.5361111, 1.0639201), (0.5541667, 1.0989028), (0.57222223, 1.0989028), (0.57222223, 1.0639201), (0.5541667, 1.0639201), (0.57222223, 1.0989028), (0.5902778, 1.0989028), (0.5902778, 1.0639201), (0.57222223, 1.0639201), (0.5902778, 1.0989028), (0.60833335, 1.0989028), (0.60833335, 1.0639201), (0.5902778, 1.0639201), (0.60833335, 1.0989028), (0.6263889, 1.0989028), (0.6263889, 1.0639201), (0.60833335, 1.0639201), (0.6263889, 1.0989028), (0.6444444, 1.0989028), (0.6444444, 1.0639201), (0.6263889, 1.0639201), (0.6444444, 1.0989028), (0.6625, 1.0989028), (0.6625, 1.0639201), (0.6444444, 1.0639201), (0.6625, 1.0989028), (0.6805555, 1.0989028), (0.6805555, 1.0639201), (0.6625, 1.0639201), (0.6805555, 1.0989028), (0.69861114, 1.0989028), (0.69861114, 1.0639201), (0.6805555, 1.0639201), (0.69861114, 1.0989028), (0.7166667, 1.0989028), (0.7166667, 1.0639201), (0.69861114, 1.0639201), (0.28333333, 1.0639201), (0.3013889, 1.0639201), (0.3013889, 1.0289375), (0.28333333, 1.0289375), (0.3013889, 1.0639201), (0.31944445, 1.0639201), (0.31944445, 1.0289375), (0.3013889, 1.0289375), (0.31944445, 1.0639201), (0.3375, 1.0639201), (0.3375, 1.0289375), (0.31944445, 1.0289375), (0.3375, 1.0639201), (0.35555553, 1.0639201), (0.35555553, 1.0289375), (0.3375, 1.0289375), (0.35555553, 1.0639201), (0.37361112, 1.0639201), (0.37361112, 1.0289375), (0.35555553, 1.0289375), (0.37361112, 1.0639201), (0.39166668, 1.0639201), (0.39166668, 1.0289375), (0.37361112, 1.0289375), (0.39166668, 1.0639201), (0.4097222, 1.0639201), (0.4097222, 1.0289375), (0.39166668, 1.0289375), (0.4097222, 1.0639201), (0.42777777, 1.0639201), (0.42777777, 1.0289375), (0.4097222, 1.0289375), (0.42777777, 1.0639201), (0.44583333, 1.0639201), (0.44583333, 1.0289375), (0.42777777, 1.0289375), (0.44583333, 1.0639201), (0.46388888, 1.0639201), (0.46388888, 1.0289375), (0.44583333, 1.0289375), (0.46388888, 1.0639201), (0.48194444, 1.0639201), (0.48194444, 1.0289375), (0.46388888, 1.0289375), (0.48194444, 1.0639201), (0.5, 1.0639201), (0.5, 1.0289375), (0.48194444, 1.0289375), (0.5, 1.0639201), (0.51805556, 1.0639201), (0.51805556, 1.0289375), (0.5, 1.0289375), (0.51805556, 1.0639201), (0.5361111, 1.0639201), (0.5361111, 1.0289375), (0.51805556, 1.0289375), (0.5361111, 1.0639201), (0.5541667, 1.0639201), (0.5541667, 1.0289375), (0.5361111, 1.0289375), (0.5541667, 1.0639201), (0.57222223, 1.0639201), (0.57222223, 1.0289375), (0.5541667, 1.0289375), (0.57222223, 1.0639201), (0.5902778, 1.0639201), (0.5902778, 1.0289375), (0.57222223, 1.0289375), (0.5902778, 1.0639201), (0.60833335, 1.0639201), (0.60833335, 1.0289375), (0.5902778, 1.0289375), (0.60833335, 1.0639201), (0.6263889, 1.0639201), (0.6263889, 1.0289375), (0.60833335, 1.0289375), (0.6263889, 1.0639201), (0.6444444, 1.0639201), (0.6444444, 1.0289375), (0.6263889, 1.0289375), (0.6444444, 1.0639201), (0.6625, 1.0639201), (0.6625, 1.0289375), (0.6444444, 1.0289375), (0.6625, 1.0639201), (0.6805555, 1.0639201), (0.6805555, 1.0289375), (0.6625, 1.0289375), (0.6805555, 1.0639201), (0.69861114, 1.0639201), (0.69861114, 1.0289375), (0.6805555, 1.0289375), (0.69861114, 1.0639201), (0.7166667, 1.0639201), (0.7166667, 1.0289375), (0.69861114, 1.0289375), (0.28333333, 1.0289375), (0.3013889, 1.0289375), (0.3013889, 0.9939549), (0.28333333, 0.9939549), (0.3013889, 1.0289375), (0.31944445, 1.0289375), (0.31944445, 0.9939549), (0.3013889, 0.9939549), (0.31944445, 1.0289375), (0.3375, 1.0289375), (0.3375, 0.9939549), (0.31944445, 0.9939549), (0.3375, 1.0289375), (0.35555553, 1.0289375), (0.35555553, 0.9939549), (0.3375, 0.9939549), (0.35555553, 1.0289375), (0.37361112, 1.0289375), (0.37361112, 0.9939549), (0.35555553, 0.9939549), (0.37361112, 1.0289375), (0.39166668, 1.0289375), (0.39166668, 0.9939549), (0.37361112, 0.9939549), (0.39166668, 1.0289375), (0.4097222, 1.0289375), (0.4097222, 0.9939549), (0.39166668, 0.9939549), (0.4097222, 1.0289375), (0.42777777, 1.0289375), (0.42777777, 0.9939549), (0.4097222, 0.9939549), (0.42777777, 1.0289375), (0.44583333, 1.0289375), (0.44583333, 0.9939549), (0.42777777, 0.9939549), (0.44583333, 1.0289375), (0.46388888, 1.0289375), (0.46388888, 0.9939549), (0.44583333, 0.9939549), (0.46388888, 1.0289375), (0.48194444, 1.0289375), (0.48194444, 0.9939549), (0.46388888, 0.9939549), (0.48194444, 1.0289375), (0.5, 1.0289375), (0.5, 0.9939549), (0.48194444, 0.9939549), (0.5, 1.0289375), (0.51805556, 1.0289375), (0.51805556, 0.9939549), (0.5, 0.9939549), (0.51805556, 1.0289375), (0.5361111, 1.0289375), (0.5361111, 0.9939549), (0.51805556, 0.9939549), (0.5361111, 1.0289375), (0.5541667, 1.0289375), (0.5541667, 0.9939549), (0.5361111, 0.9939549), (0.5541667, 1.0289375), (0.57222223, 1.0289375), (0.57222223, 0.9939549), (0.5541667, 0.9939549), (0.57222223, 1.0289375), (0.5902778, 1.0289375), (0.5902778, 0.9939549), (0.57222223, 0.9939549), (0.5902778, 1.0289375), (0.60833335, 1.0289375), (0.60833335, 0.9939549), (0.5902778, 0.9939549), (0.60833335, 1.0289375), (0.6263889, 1.0289375), (0.6263889, 0.9939549), (0.60833335, 0.9939549), (0.6263889, 1.0289375), (0.6444444, 1.0289375), (0.6444444, 0.9939549), (0.6263889, 0.9939549), (0.6444444, 1.0289375), (0.6625, 1.0289375), (0.6625, 0.9939549), (0.6444444, 0.9939549), (0.6625, 1.0289375), (0.6805555, 1.0289375), (0.6805555, 0.9939549), (0.6625, 0.9939549), (0.6805555, 1.0289375), (0.69861114, 1.0289375), (0.69861114, 0.9939549), (0.6805555, 0.9939549), (0.69861114, 1.0289375), (0.7166667, 1.0289375), (0.7166667, 0.9939549), (0.69861114, 0.9939549), (0.28333333, 0.9939549), (0.3013889, 0.9939549), (0.3013889, 0.9589722), (0.28333333, 0.9589722), (0.3013889, 0.9939549), (0.31944445, 0.9939549), (0.31944445, 0.9589722), (0.3013889, 0.9589722), (0.31944445, 0.9939549), (0.3375, 0.9939549), (0.3375, 0.9589722), (0.31944445, 0.9589722), (0.3375, 0.9939549), (0.35555553, 0.9939549), (0.35555553, 0.9589722), (0.3375, 0.9589722), (0.35555553, 0.9939549), (0.37361112, 0.9939549), (0.37361112, 0.9589722), (0.35555553, 0.9589722), (0.37361112, 0.9939549), (0.39166668, 0.9939549), (0.39166668, 0.9589722), (0.37361112, 0.9589722), (0.39166668, 0.9939549), (0.4097222, 0.9939549), (0.4097222, 0.9589722), (0.39166668, 0.9589722), (0.4097222, 0.9939549), (0.42777777, 0.9939549), (0.42777777, 0.9589722), (0.4097222, 0.9589722), (0.42777777, 0.9939549), (0.44583333, 0.9939549), (0.44583333, 0.9589722), (0.42777777, 0.9589722), (0.44583333, 0.9939549), (0.46388888, 0.9939549), (0.46388888, 0.9589722), (0.44583333, 0.9589722), (0.46388888, 0.9939549), (0.48194444, 0.9939549), (0.48194444, 0.9589722), (0.46388888, 0.9589722), (0.48194444, 0.9939549), (0.5, 0.9939549), (0.5, 0.9589722), (0.48194444, 0.9589722), (0.5, 0.9939549), (0.51805556, 0.9939549), (0.51805556, 0.9589722), (0.5, 0.9589722), (0.51805556, 0.9939549), (0.5361111, 0.9939549), (0.5361111, 0.9589722), (0.51805556, 0.9589722), (0.5361111, 0.9939549), (0.5541667, 0.9939549), (0.5541667, 0.9589722), (0.5361111, 0.9589722), (0.5541667, 0.9939549), (0.57222223, 0.9939549), (0.57222223, 0.9589722), (0.5541667, 0.9589722), (0.57222223, 0.9939549), (0.5902778, 0.9939549), (0.5902778, 0.9589722), (0.57222223, 0.9589722), (0.5902778, 0.9939549), (0.60833335, 0.9939549), (0.60833335, 0.9589722), (0.5902778, 0.9589722), (0.60833335, 0.9939549), (0.6263889, 0.9939549), (0.6263889, 0.9589722), (0.60833335, 0.9589722), (0.6263889, 0.9939549), (0.6444444, 0.9939549), (0.6444444, 0.9589722), (0.6263889, 0.9589722), (0.6444444, 0.9939549), (0.6625, 0.9939549), (0.6625, 0.9589722), (0.6444444, 0.9589722), (0.6625, 0.9939549), (0.6805555, 0.9939549), (0.6805555, 0.9589722), (0.6625, 0.9589722), (0.6805555, 0.9939549), (0.69861114, 0.9939549), (0.69861114, 0.9589722), (0.6805555, 0.9589722), (0.69861114, 0.9939549), (0.7166667, 0.9939549), (0.7166667, 0.9589722), (0.69861114, 0.9589722), (0.28333333, 0.9589722), (0.3013889, 0.9589722), (0.3013889, 0.9239896), (0.28333333, 0.9239896), (0.3013889, 0.9589722), (0.31944445, 0.9589722), (0.31944445, 0.9239896), (0.3013889, 0.9239896), (0.31944445, 0.9589722), (0.3375, 0.9589722), (0.3375, 0.9239896), (0.31944445, 0.9239896), (0.3375, 0.9589722), (0.35555553, 0.9589722), (0.35555553, 0.9239896), (0.3375, 0.9239896), (0.35555553, 0.9589722), (0.37361112, 0.9589722), (0.37361112, 0.9239896), (0.35555553, 0.9239896), (0.37361112, 0.9589722), (0.39166668, 0.9589722), (0.39166668, 0.9239896), (0.37361112, 0.9239896), (0.39166668, 0.9589722), (0.4097222, 0.9589722), (0.4097222, 0.9239896), (0.39166668, 0.9239896), (0.4097222, 0.9589722), (0.42777777, 0.9589722), (0.42777777, 0.9239896), (0.4097222, 0.9239896), (0.42777777, 0.9589722), (0.44583333, 0.9589722), (0.44583333, 0.9239896), (0.42777777, 0.9239896), (0.44583333, 0.9589722), (0.46388888, 0.9589722), (0.46388888, 0.9239896), (0.44583333, 0.9239896), (0.46388888, 0.9589722), (0.48194444, 0.9589722), (0.48194444, 0.9239896), (0.46388888, 0.9239896), (0.48194444, 0.9589722), (0.5, 0.9589722), (0.5, 0.9239896), (0.48194444, 0.9239896), (0.5, 0.9589722), (0.51805556, 0.9589722), (0.51805556, 0.9239896), (0.5, 0.9239896), (0.51805556, 0.9589722), (0.5361111, 0.9589722), (0.5361111, 0.9239896), (0.51805556, 0.9239896), (0.5361111, 0.9589722), (0.5541667, 0.9589722), (0.5541667, 0.9239896), (0.5361111, 0.9239896), (0.5541667, 0.9589722), (0.57222223, 0.9589722), (0.57222223, 0.9239896), (0.5541667, 0.9239896), (0.57222223, 0.9589722), (0.5902778, 0.9589722), (0.5902778, 0.9239896), (0.57222223, 0.9239896), (0.5902778, 0.9589722), (0.60833335, 0.9589722), (0.60833335, 0.9239896), (0.5902778, 0.9239896), (0.60833335, 0.9589722), (0.6263889, 0.9589722), (0.6263889, 0.9239896), (0.60833335, 0.9239896), (0.6263889, 0.9589722), (0.6444444, 0.9589722), (0.6444444, 0.9239896), (0.6263889, 0.9239896), (0.6444444, 0.9589722), (0.6625, 0.9589722), (0.6625, 0.9239896), (0.6444444, 0.9239896), (0.6625, 0.9589722), (0.6805555, 0.9589722), (0.6805555, 0.9239896), (0.6625, 0.9239896), (0.6805555, 0.9589722), (0.69861114, 0.9589722), (0.69861114, 0.9239896), (0.6805555, 0.9239896), (0.69861114, 0.9589722), (0.7166667, 0.9589722), (0.7166667, 0.9239896), (0.69861114, 0.9239896), (0.28333333, 0.9239896), (0.3013889, 0.9239896), (0.3013889, 0.889007), (0.28333333, 0.889007), (0.3013889, 0.9239896), (0.31944445, 0.9239896), (0.31944445, 0.889007), (0.3013889, 0.889007), (0.31944445, 0.9239896), (0.3375, 0.9239896), (0.3375, 0.889007), (0.31944445, 0.889007), (0.3375, 0.9239896), (0.35555553, 0.9239896), (0.35555553, 0.889007), (0.3375, 0.889007), (0.35555553, 0.9239896), (0.37361112, 0.9239896), (0.37361112, 0.889007), (0.35555553, 0.889007), (0.37361112, 0.9239896), (0.39166668, 0.9239896), (0.39166668, 0.889007), (0.37361112, 0.889007), (0.39166668, 0.9239896), (0.4097222, 0.9239896), (0.4097222, 0.889007), (0.39166668, 0.889007), (0.4097222, 0.9239896), (0.42777777, 0.9239896), (0.42777777, 0.889007), (0.4097222, 0.889007), (0.42777777, 0.9239896), (0.44583333, 0.9239896), (0.44583333, 0.889007), (0.42777777, 0.889007), (0.44583333, 0.9239896), (0.46388888, 0.9239896), (0.46388888, 0.889007), (0.44583333, 0.889007), (0.46388888, 0.9239896), (0.48194444, 0.9239896), (0.48194444, 0.889007), (0.46388888, 0.889007), (0.48194444, 0.9239896), (0.5, 0.9239896), (0.5, 0.889007), (0.48194444, 0.889007), (0.5, 0.9239896), (0.51805556, 0.9239896), (0.51805556, 0.889007), (0.5, 0.889007), (0.51805556, 0.9239896), (0.5361111, 0.9239896), (0.5361111, 0.889007), (0.51805556, 0.889007), (0.5361111, 0.9239896), (0.5541667, 0.9239896), (0.5541667, 0.889007), (0.5361111, 0.889007), (0.5541667, 0.9239896), (0.57222223, 0.9239896), (0.57222223, 0.889007), (0.5541667, 0.889007), (0.57222223, 0.9239896), (0.5902778, 0.9239896), (0.5902778, 0.889007), (0.57222223, 0.889007), (0.5902778, 0.9239896), (0.60833335, 0.9239896), (0.60833335, 0.889007), (0.5902778, 0.889007), (0.60833335, 0.9239896), (0.6263889, 0.9239896), (0.6263889, 0.889007), (0.60833335, 0.889007), (0.6263889, 0.9239896), (0.6444444, 0.9239896), (0.6444444, 0.889007), (0.6263889, 0.889007), (0.6444444, 0.9239896), (0.6625, 0.9239896), (0.6625, 0.889007), (0.6444444, 0.889007), (0.6625, 0.9239896), (0.6805555, 0.9239896), (0.6805555, 0.889007), (0.6625, 0.889007), (0.6805555, 0.9239896), (0.69861114, 0.9239896), (0.69861114, 0.889007), (0.6805555, 0.889007), (0.69861114, 0.9239896), (0.7166667, 0.9239896), (0.7166667, 0.889007), (0.69861114, 0.889007), (0.28333333, 0.889007), (0.3013889, 0.889007), (0.3013889, 0.85402435), (0.28333333, 0.85402435), (0.3013889, 0.889007), (0.31944445, 0.889007), (0.31944445, 0.85402435), (0.3013889, 0.85402435), (0.31944445, 0.889007), (0.3375, 0.889007), (0.3375, 0.85402435), (0.31944445, 0.85402435), (0.3375, 0.889007), (0.35555553, 0.889007), (0.35555553, 0.85402435), (0.3375, 0.85402435), (0.35555553, 0.889007), (0.37361112, 0.889007), (0.37361112, 0.85402435), (0.35555553, 0.85402435), (0.37361112, 0.889007), (0.39166668, 0.889007), (0.39166668, 0.85402435), (0.37361112, 0.85402435), (0.39166668, 0.889007), (0.4097222, 0.889007), (0.4097222, 0.85402435), (0.39166668, 0.85402435), (0.4097222, 0.889007), (0.42777777, 0.889007), (0.42777777, 0.85402435), (0.4097222, 0.85402435), (0.42777777, 0.889007), (0.44583333, 0.889007), (0.44583333, 0.85402435), (0.42777777, 0.85402435), (0.44583333, 0.889007), (0.46388888, 0.889007), (0.46388888, 0.85402435), (0.44583333, 0.85402435), (0.46388888, 0.889007), (0.48194444, 0.889007), (0.48194444, 0.85402435), (0.46388888, 0.85402435), (0.48194444, 0.889007), (0.5, 0.889007), (0.5, 0.85402435), (0.48194444, 0.85402435), (0.5, 0.889007), (0.51805556, 0.889007), (0.51805556, 0.85402435), (0.5, 0.85402435), (0.51805556, 0.889007), (0.5361111, 0.889007), (0.5361111, 0.85402435), (0.51805556, 0.85402435), (0.5361111, 0.889007), (0.5541667, 0.889007), (0.5541667, 0.85402435), (0.5361111, 0.85402435), (0.5541667, 0.889007), (0.57222223, 0.889007), (0.57222223, 0.85402435), (0.5541667, 0.85402435), (0.57222223, 0.889007), (0.5902778, 0.889007), (0.5902778, 0.85402435), (0.57222223, 0.85402435), (0.5902778, 0.889007), (0.60833335, 0.889007), (0.60833335, 0.85402435), (0.5902778, 0.85402435), (0.60833335, 0.889007), (0.6263889, 0.889007), (0.6263889, 0.85402435), (0.60833335, 0.85402435), (0.6263889, 0.889007), (0.6444444, 0.889007), (0.6444444, 0.85402435), (0.6263889, 0.85402435), (0.6444444, 0.889007), (0.6625, 0.889007), (0.6625, 0.85402435), (0.6444444, 0.85402435), (0.6625, 0.889007), (0.6805555, 0.889007), (0.6805555, 0.85402435), (0.6625, 0.85402435), (0.6805555, 0.889007), (0.69861114, 0.889007), (0.69861114, 0.85402435), (0.6805555, 0.85402435), (0.69861114, 0.889007), (0.7166667, 0.889007), (0.7166667, 0.85402435), (0.69861114, 0.85402435), (0.28333333, 0.85402435), (0.3013889, 0.85402435), (0.3013889, 0.81904167), (0.28333333, 0.81904167), (0.3013889, 0.85402435), (0.31944445, 0.85402435), (0.31944445, 0.81904167), (0.3013889, 0.81904167), (0.31944445, 0.85402435), (0.3375, 0.85402435), (0.3375, 0.81904167), (0.31944445, 0.81904167), (0.3375, 0.85402435), (0.35555553, 0.85402435), (0.35555553, 0.81904167), (0.3375, 0.81904167), (0.35555553, 0.85402435), (0.37361112, 0.85402435), (0.37361112, 0.81904167), (0.35555553, 0.81904167), (0.37361112, 0.85402435), (0.39166668, 0.85402435), (0.39166668, 0.81904167), (0.37361112, 0.81904167), (0.39166668, 0.85402435), (0.4097222, 0.85402435), (0.4097222, 0.81904167), (0.39166668, 0.81904167), (0.4097222, 0.85402435), (0.42777777, 0.85402435), (0.42777777, 0.81904167), (0.4097222, 0.81904167), (0.42777777, 0.85402435), (0.44583333, 0.85402435), (0.44583333, 0.81904167), (0.42777777, 0.81904167), (0.44583333, 0.85402435), (0.46388888, 0.85402435), (0.46388888, 0.81904167), (0.44583333, 0.81904167), (0.46388888, 0.85402435), (0.48194444, 0.85402435), (0.48194444, 0.81904167), (0.46388888, 0.81904167), (0.48194444, 0.85402435), (0.5, 0.85402435), (0.5, 0.81904167), (0.48194444, 0.81904167), (0.5, 0.85402435), (0.51805556, 0.85402435), (0.51805556, 0.81904167), (0.5, 0.81904167), (0.51805556, 0.85402435), (0.5361111, 0.85402435), (0.5361111, 0.81904167), (0.51805556, 0.81904167), (0.5361111, 0.85402435), (0.5541667, 0.85402435), (0.5541667, 0.81904167), (0.5361111, 0.81904167), (0.5541667, 0.85402435), (0.57222223, 0.85402435), (0.57222223, 0.81904167), (0.5541667, 0.81904167), (0.57222223, 0.85402435), (0.5902778, 0.85402435), (0.5902778, 0.81904167), (0.57222223, 0.81904167), (0.5902778, 0.85402435), (0.60833335, 0.85402435), (0.60833335, 0.81904167), (0.5902778, 0.81904167), (0.60833335, 0.85402435), (0.6263889, 0.85402435), (0.6263889, 0.81904167), (0.60833335, 0.81904167), (0.6263889, 0.85402435), (0.6444444, 0.85402435), (0.6444444, 0.81904167), (0.6263889, 0.81904167), (0.6444444, 0.85402435), (0.6625, 0.85402435), (0.6625, 0.81904167), (0.6444444, 0.81904167), (0.6625, 0.85402435), (0.6805555, 0.85402435), (0.6805555, 0.81904167), (0.6625, 0.81904167), (0.6805555, 0.85402435), (0.69861114, 0.85402435), (0.69861114, 0.81904167), (0.6805555, 0.81904167), (0.69861114, 0.85402435), (0.7166667, 0.85402435), (0.7166667, 0.81904167), (0.69861114, 0.81904167), (0.28333333, 0.81904167), (0.3013889, 0.81904167), (0.3013889, 0.78405905), (0.28333333, 0.78405905), (0.3013889, 0.81904167), (0.31944445, 0.81904167), (0.31944445, 0.78405905), (0.3013889, 0.78405905), (0.31944445, 0.81904167), (0.3375, 0.81904167), (0.3375, 0.78405905), (0.31944445, 0.78405905), (0.3375, 0.81904167), (0.35555553, 0.81904167), (0.35555553, 0.78405905), (0.3375, 0.78405905), (0.35555553, 0.81904167), (0.37361112, 0.81904167), (0.37361112, 0.78405905), (0.35555553, 0.78405905), (0.37361112, 0.81904167), (0.39166668, 0.81904167), (0.39166668, 0.78405905), (0.37361112, 0.78405905), (0.39166668, 0.81904167), (0.4097222, 0.81904167), (0.4097222, 0.78405905), (0.39166668, 0.78405905), (0.4097222, 0.81904167), (0.42777777, 0.81904167), (0.42777777, 0.78405905), (0.4097222, 0.78405905), (0.42777777, 0.81904167), (0.44583333, 0.81904167), (0.44583333, 0.78405905), (0.42777777, 0.78405905), (0.44583333, 0.81904167), (0.46388888, 0.81904167), (0.46388888, 0.78405905), (0.44583333, 0.78405905), (0.46388888, 0.81904167), (0.48194444, 0.81904167), (0.48194444, 0.78405905), (0.46388888, 0.78405905), (0.48194444, 0.81904167), (0.5, 0.81904167), (0.5, 0.78405905), (0.48194444, 0.78405905), (0.5, 0.81904167), (0.51805556, 0.81904167), (0.51805556, 0.78405905), (0.5, 0.78405905), (0.51805556, 0.81904167), (0.5361111, 0.81904167), (0.5361111, 0.78405905), (0.51805556, 0.78405905), (0.5361111, 0.81904167), (0.5541667, 0.81904167), (0.5541667, 0.78405905), (0.5361111, 0.78405905), (0.5541667, 0.81904167), (0.57222223, 0.81904167), (0.57222223, 0.78405905), (0.5541667, 0.78405905), (0.57222223, 0.81904167), (0.5902778, 0.81904167), (0.5902778, 0.78405905), (0.57222223, 0.78405905), (0.5902778, 0.81904167), (0.60833335, 0.81904167), (0.60833335, 0.78405905), (0.5902778, 0.78405905), (0.60833335, 0.81904167), (0.6263889, 0.81904167), (0.6263889, 0.78405905), (0.60833335, 0.78405905), (0.6263889, 0.81904167), (0.6444444, 0.81904167), (0.6444444, 0.78405905), (0.6263889, 0.78405905), (0.6444444, 0.81904167), (0.6625, 0.81904167), (0.6625, 0.78405905), (0.6444444, 0.78405905), (0.6625, 0.81904167), (0.6805555, 0.81904167), (0.6805555, 0.78405905), (0.6625, 0.78405905), (0.6805555, 0.81904167), (0.69861114, 0.81904167), (0.69861114, 0.78405905), (0.6805555, 0.78405905), (0.69861114, 0.81904167), (0.7166667, 0.81904167), (0.7166667, 0.78405905), (0.69861114, 0.78405905), (0.28333333, 0.78405905), (0.3013889, 0.78405905), (0.3013889, 0.7490764), (0.28333333, 0.7490764), (0.3013889, 0.78405905), (0.31944445, 0.78405905), (0.31944445, 0.7490764), (0.3013889, 0.7490764), (0.31944445, 0.78405905), (0.3375, 0.78405905), (0.3375, 0.7490764), (0.31944445, 0.7490764), (0.3375, 0.78405905), (0.35555553, 0.78405905), (0.35555553, 0.7490764), (0.3375, 0.7490764), (0.35555553, 0.78405905), (0.37361112, 0.78405905), (0.37361112, 0.7490764), (0.35555553, 0.7490764), (0.37361112, 0.78405905), (0.39166668, 0.78405905), (0.39166668, 0.7490764), (0.37361112, 0.7490764), (0.39166668, 0.78405905), (0.4097222, 0.78405905), (0.4097222, 0.7490764), (0.39166668, 0.7490764), (0.4097222, 0.78405905), (0.42777777, 0.78405905), (0.42777777, 0.7490764), (0.4097222, 0.7490764), (0.42777777, 0.78405905), (0.44583333, 0.78405905), (0.44583333, 0.7490764), (0.42777777, 0.7490764), (0.44583333, 0.78405905), (0.46388888, 0.78405905), (0.46388888, 0.7490764), (0.44583333, 0.7490764), (0.46388888, 0.78405905), (0.48194444, 0.78405905), (0.48194444, 0.7490764), (0.46388888, 0.7490764), (0.48194444, 0.78405905), (0.5, 0.78405905), (0.5, 0.7490764), (0.48194444, 0.7490764), (0.5, 0.78405905), (0.51805556, 0.78405905), (0.51805556, 0.7490764), (0.5, 0.7490764), (0.51805556, 0.78405905), (0.5361111, 0.78405905), (0.5361111, 0.7490764), (0.51805556, 0.7490764), (0.5361111, 0.78405905), (0.5541667, 0.78405905), (0.5541667, 0.7490764), (0.5361111, 0.7490764), (0.5541667, 0.78405905), (0.57222223, 0.78405905), (0.57222223, 0.7490764), (0.5541667, 0.7490764), (0.57222223, 0.78405905), (0.5902778, 0.78405905), (0.5902778, 0.7490764), (0.57222223, 0.7490764), (0.5902778, 0.78405905), (0.60833335, 0.78405905), (0.60833335, 0.7490764), (0.5902778, 0.7490764), (0.60833335, 0.78405905), (0.6263889, 0.78405905), (0.6263889, 0.7490764), (0.60833335, 0.7490764), (0.6263889, 0.78405905), (0.6444444, 0.78405905), (0.6444444, 0.7490764), (0.6263889, 0.7490764), (0.6444444, 0.78405905), (0.6625, 0.78405905), (0.6625, 0.7490764), (0.6444444, 0.7490764), (0.6625, 0.78405905), (0.6805555, 0.78405905), (0.6805555, 0.7490764), (0.6625, 0.7490764), (0.6805555, 0.78405905), (0.69861114, 0.78405905), (0.69861114, 0.7490764), (0.6805555, 0.7490764), (0.69861114, 0.78405905), (0.7166667, 0.78405905), (0.7166667, 0.7490764), (0.69861114, 0.7490764), (0.28333333, 0.7490764), (0.3013889, 0.7490764), (0.3013889, 0.71409374), (0.28333333, 0.71409374), (0.3013889, 0.7490764), (0.31944445, 0.7490764), (0.31944445, 0.71409374), (0.3013889, 0.71409374), (0.31944445, 0.7490764), (0.3375, 0.7490764), (0.3375, 0.71409374), (0.31944445, 0.71409374), (0.3375, 0.7490764), (0.35555553, 0.7490764), (0.35555553, 0.71409374), (0.3375, 0.71409374), (0.35555553, 0.7490764), (0.37361112, 0.7490764), (0.37361112, 0.71409374), (0.35555553, 0.71409374), (0.37361112, 0.7490764), (0.39166668, 0.7490764), (0.39166668, 0.71409374), (0.37361112, 0.71409374), (0.39166668, 0.7490764), (0.4097222, 0.7490764), (0.4097222, 0.71409374), (0.39166668, 0.71409374), (0.4097222, 0.7490764), (0.42777777, 0.7490764), (0.42777777, 0.71409374), (0.4097222, 0.71409374), (0.42777777, 0.7490764), (0.44583333, 0.7490764), (0.44583333, 0.71409374), (0.42777777, 0.71409374), (0.44583333, 0.7490764), (0.46388888, 0.7490764), (0.46388888, 0.71409374), (0.44583333, 0.71409374), (0.46388888, 0.7490764), (0.48194444, 0.7490764), (0.48194444, 0.71409374), (0.46388888, 0.71409374), (0.48194444, 0.7490764), (0.5, 0.7490764), (0.5, 0.71409374), (0.48194444, 0.71409374), (0.5, 0.7490764), (0.51805556, 0.7490764), (0.51805556, 0.71409374), (0.5, 0.71409374), (0.51805556, 0.7490764), (0.5361111, 0.7490764), (0.5361111, 0.71409374), (0.51805556, 0.71409374), (0.5361111, 0.7490764), (0.5541667, 0.7490764), (0.5541667, 0.71409374), (0.5361111, 0.71409374), (0.5541667, 0.7490764), (0.57222223, 0.7490764), (0.57222223, 0.71409374), (0.5541667, 0.71409374), (0.57222223, 0.7490764), (0.5902778, 0.7490764), (0.5902778, 0.71409374), (0.57222223, 0.71409374), (0.5902778, 0.7490764), (0.60833335, 0.7490764), (0.60833335, 0.71409374), (0.5902778, 0.71409374), (0.60833335, 0.7490764), (0.6263889, 0.7490764), (0.6263889, 0.71409374), (0.60833335, 0.71409374), (0.6263889, 0.7490764), (0.6444444, 0.7490764), (0.6444444, 0.71409374), (0.6263889, 0.71409374), (0.6444444, 0.7490764), (0.6625, 0.7490764), (0.6625, 0.71409374), (0.6444444, 0.71409374), (0.6625, 0.7490764), (0.6805555, 0.7490764), (0.6805555, 0.71409374), (0.6625, 0.71409374), (0.6805555, 0.7490764), (0.69861114, 0.7490764), (0.69861114, 0.71409374), (0.6805555, 0.71409374), (0.69861114, 0.7490764), (0.7166667, 0.7490764), (0.7166667, 0.71409374), (0.69861114, 0.71409374), (0.28333333, 0.71409374), (0.3013889, 0.71409374), (0.3013889, 0.6791111), (0.28333333, 0.6791111), (0.3013889, 0.71409374), (0.31944445, 0.71409374), (0.31944445, 0.6791111), (0.3013889, 0.6791111), (0.31944445, 0.71409374), (0.3375, 0.71409374), (0.3375, 0.6791111), (0.31944445, 0.6791111), (0.3375, 0.71409374), (0.35555553, 0.71409374), (0.35555553, 0.6791111), (0.3375, 0.6791111), (0.35555553, 0.71409374), (0.37361112, 0.71409374), (0.37361112, 0.6791111), (0.35555553, 0.6791111), (0.37361112, 0.71409374), (0.39166668, 0.71409374), (0.39166668, 0.6791111), (0.37361112, 0.6791111), (0.39166668, 0.71409374), (0.4097222, 0.71409374), (0.4097222, 0.6791111), (0.39166668, 0.6791111), (0.4097222, 0.71409374), (0.42777777, 0.71409374), (0.42777777, 0.6791111), (0.4097222, 0.6791111), (0.42777777, 0.71409374), (0.44583333, 0.71409374), (0.44583333, 0.6791111), (0.42777777, 0.6791111), (0.44583333, 0.71409374), (0.46388888, 0.71409374), (0.46388888, 0.6791111), (0.44583333, 0.6791111), (0.46388888, 0.71409374), (0.48194444, 0.71409374), (0.48194444, 0.6791111), (0.46388888, 0.6791111), (0.48194444, 0.71409374), (0.5, 0.71409374), (0.5, 0.6791111), (0.48194444, 0.6791111), (0.5, 0.71409374), (0.51805556, 0.71409374), (0.51805556, 0.6791111), (0.5, 0.6791111), (0.51805556, 0.71409374), (0.5361111, 0.71409374), (0.5361111, 0.6791111), (0.51805556, 0.6791111), (0.5361111, 0.71409374), (0.5541667, 0.71409374), (0.5541667, 0.6791111), (0.5361111, 0.6791111), (0.5541667, 0.71409374), (0.57222223, 0.71409374), (0.57222223, 0.6791111), (0.5541667, 0.6791111), (0.57222223, 0.71409374), (0.5902778, 0.71409374), (0.5902778, 0.6791111), (0.57222223, 0.6791111), (0.5902778, 0.71409374), (0.60833335, 0.71409374), (0.60833335, 0.6791111), (0.5902778, 0.6791111), (0.60833335, 0.71409374), (0.6263889, 0.71409374), (0.6263889, 0.6791111), (0.60833335, 0.6791111), (0.6263889, 0.71409374), (0.6444444, 0.71409374), (0.6444444, 0.6791111), (0.6263889, 0.6791111), (0.6444444, 0.71409374), (0.6625, 0.71409374), (0.6625, 0.6791111), (0.6444444, 0.6791111), (0.6625, 0.71409374), (0.6805555, 0.71409374), (0.6805555, 0.6791111), (0.6625, 0.6791111), (0.6805555, 0.71409374), (0.69861114, 0.71409374), (0.69861114, 0.6791111), (0.6805555, 0.6791111), (0.69861114, 0.71409374), (0.7166667, 0.71409374), (0.7166667, 0.6791111), (0.69861114, 0.6791111), (0.28333333, 0.6791111), (0.3013889, 0.6791111), (0.3013889, 0.64412856), (0.28333333, 0.64412856), (0.3013889, 0.6791111), (0.31944445, 0.6791111), (0.31944445, 0.64412856), (0.3013889, 0.64412856), (0.31944445, 0.6791111), (0.3375, 0.6791111), (0.3375, 0.64412856), (0.31944445, 0.64412856), (0.3375, 0.6791111), (0.35555553, 0.6791111), (0.35555553, 0.64412856), (0.3375, 0.64412856), (0.35555553, 0.6791111), (0.37361112, 0.6791111), (0.37361112, 0.64412856), (0.35555553, 0.64412856), (0.37361112, 0.6791111), (0.39166668, 0.6791111), (0.39166668, 0.64412856), (0.37361112, 0.64412856), (0.39166668, 0.6791111), (0.4097222, 0.6791111), (0.4097222, 0.64412856), (0.39166668, 0.64412856), (0.4097222, 0.6791111), (0.42777777, 0.6791111), (0.42777777, 0.64412856), (0.4097222, 0.64412856), (0.42777777, 0.6791111), (0.44583333, 0.6791111), (0.44583333, 0.64412856), (0.42777777, 0.64412856), (0.44583333, 0.6791111), (0.46388888, 0.6791111), (0.46388888, 0.64412856), (0.44583333, 0.64412856), (0.46388888, 0.6791111), (0.48194444, 0.6791111), (0.48194444, 0.64412856), (0.46388888, 0.64412856), (0.48194444, 0.6791111), (0.5, 0.6791111), (0.5, 0.64412856), (0.48194444, 0.64412856), (0.5, 0.6791111), (0.51805556, 0.6791111), (0.51805556, 0.64412856), (0.5, 0.64412856), (0.51805556, 0.6791111), (0.5361111, 0.6791111), (0.5361111, 0.64412856), (0.51805556, 0.64412856), (0.5361111, 0.6791111), (0.5541667, 0.6791111), (0.5541667, 0.64412856), (0.5361111, 0.64412856), (0.5541667, 0.6791111), (0.57222223, 0.6791111), (0.57222223, 0.64412856), (0.5541667, 0.64412856), (0.57222223, 0.6791111), (0.5902778, 0.6791111), (0.5902778, 0.64412856), (0.57222223, 0.64412856), (0.5902778, 0.6791111), (0.60833335, 0.6791111), (0.60833335, 0.64412856), (0.5902778, 0.64412856), (0.60833335, 0.6791111), (0.6263889, 0.6791111), (0.6263889, 0.64412856), (0.60833335, 0.64412856), (0.6263889, 0.6791111), (0.6444444, 0.6791111), (0.6444444, 0.64412856), (0.6263889, 0.64412856), (0.6444444, 0.6791111), (0.6625, 0.6791111), (0.6625, 0.64412856), (0.6444444, 0.64412856), (0.6625, 0.6791111), (0.6805555, 0.6791111), (0.6805555, 0.64412856), (0.6625, 0.64412856), (0.6805555, 0.6791111), (0.69861114, 0.6791111), (0.69861114, 0.64412856), (0.6805555, 0.64412856), (0.69861114, 0.6791111), (0.7166667, 0.6791111), (0.7166667, 0.64412856), (0.69861114, 0.64412856), (0.28333333, 0.64412856), (0.3013889, 0.64412856), (0.3013889, 0.6091458), (0.28333333, 0.6091458), (0.3013889, 0.64412856), (0.31944445, 0.64412856), (0.31944445, 0.6091458), (0.3013889, 0.6091458), (0.31944445, 0.64412856), (0.3375, 0.64412856), (0.3375, 0.6091458), (0.31944445, 0.6091458), (0.3375, 0.64412856), (0.35555553, 0.64412856), (0.35555553, 0.6091458), (0.3375, 0.6091458), (0.35555553, 0.64412856), (0.37361112, 0.64412856), (0.37361112, 0.6091458), (0.35555553, 0.6091458), (0.37361112, 0.64412856), (0.39166668, 0.64412856), (0.39166668, 0.6091458), (0.37361112, 0.6091458), (0.39166668, 0.64412856), (0.4097222, 0.64412856), (0.4097222, 0.6091458), (0.39166668, 0.6091458), (0.4097222, 0.64412856), (0.42777777, 0.64412856), (0.42777777, 0.6091458), (0.4097222, 0.6091458), (0.42777777, 0.64412856), (0.44583333, 0.64412856), (0.44583333, 0.6091458), (0.42777777, 0.6091458), (0.44583333, 0.64412856), (0.46388888, 0.64412856), (0.46388888, 0.6091458), (0.44583333, 0.6091458), (0.46388888, 0.64412856), (0.48194444, 0.64412856), (0.48194444, 0.6091458), (0.46388888, 0.6091458), (0.48194444, 0.64412856), (0.5, 0.64412856), (0.5, 0.6091458), (0.48194444, 0.6091458), (0.5, 0.64412856), (0.51805556, 0.64412856), (0.51805556, 0.6091458), (0.5, 0.6091458), (0.51805556, 0.64412856), (0.5361111, 0.64412856), (0.5361111, 0.6091458), (0.51805556, 0.6091458), (0.5361111, 0.64412856), (0.5541667, 0.64412856), (0.5541667, 0.6091458), (0.5361111, 0.6091458), (0.5541667, 0.64412856), (0.57222223, 0.64412856), (0.57222223, 0.6091458), (0.5541667, 0.6091458), (0.57222223, 0.64412856), (0.5902778, 0.64412856), (0.5902778, 0.6091458), (0.57222223, 0.6091458), (0.5902778, 0.64412856), (0.60833335, 0.64412856), (0.60833335, 0.6091458), (0.5902778, 0.6091458), (0.60833335, 0.64412856), (0.6263889, 0.64412856), (0.6263889, 0.6091458), (0.60833335, 0.6091458), (0.6263889, 0.64412856), (0.6444444, 0.64412856), (0.6444444, 0.6091458), (0.6263889, 0.6091458), (0.6444444, 0.64412856), (0.6625, 0.64412856), (0.6625, 0.6091458), (0.6444444, 0.6091458), (0.6625, 0.64412856), (0.6805555, 0.64412856), (0.6805555, 0.6091458), (0.6625, 0.6091458), (0.6805555, 0.64412856), (0.69861114, 0.64412856), (0.69861114, 0.6091458), (0.6805555, 0.6091458), (0.69861114, 0.64412856), (0.7166667, 0.64412856), (0.7166667, 0.6091458), (0.69861114, 0.6091458), (0.28333333, 0.6091458), (0.3013889, 0.6091458), (0.3013889, 0.5741632), (0.28333333, 0.5741632), (0.3013889, 0.6091458), (0.31944445, 0.6091458), (0.31944445, 0.5741632), (0.3013889, 0.5741632), (0.31944445, 0.6091458), (0.3375, 0.6091458), (0.3375, 0.5741632), (0.31944445, 0.5741632), (0.3375, 0.6091458), (0.35555553, 0.6091458), (0.35555553, 0.5741632), (0.3375, 0.5741632), (0.35555553, 0.6091458), (0.37361112, 0.6091458), (0.37361112, 0.5741632), (0.35555553, 0.5741632), (0.37361112, 0.6091458), (0.39166668, 0.6091458), (0.39166668, 0.5741632), (0.37361112, 0.5741632), (0.39166668, 0.6091458), (0.4097222, 0.6091458), (0.4097222, 0.5741632), (0.39166668, 0.5741632), (0.4097222, 0.6091458), (0.42777777, 0.6091458), (0.42777777, 0.5741632), (0.4097222, 0.5741632), (0.42777777, 0.6091458), (0.44583333, 0.6091458), (0.44583333, 0.5741632), (0.42777777, 0.5741632), (0.44583333, 0.6091458), (0.46388888, 0.6091458), (0.46388888, 0.5741632), (0.44583333, 0.5741632), (0.46388888, 0.6091458), (0.48194444, 0.6091458), (0.48194444, 0.5741632), (0.46388888, 0.5741632), (0.48194444, 0.6091458), (0.5, 0.6091458), (0.5, 0.5741632), (0.48194444, 0.5741632), (0.5, 0.6091458), (0.51805556, 0.6091458), (0.51805556, 0.5741632), (0.5, 0.5741632), (0.51805556, 0.6091458), (0.5361111, 0.6091458), (0.5361111, 0.5741632), (0.51805556, 0.5741632), (0.5361111, 0.6091458), (0.5541667, 0.6091458), (0.5541667, 0.5741632), (0.5361111, 0.5741632), (0.5541667, 0.6091458), (0.57222223, 0.6091458), (0.57222223, 0.5741632), (0.5541667, 0.5741632), (0.57222223, 0.6091458), (0.5902778, 0.6091458), (0.5902778, 0.5741632), (0.57222223, 0.5741632), (0.5902778, 0.6091458), (0.60833335, 0.6091458), (0.60833335, 0.5741632), (0.5902778, 0.5741632), (0.60833335, 0.6091458), (0.6263889, 0.6091458), (0.6263889, 0.5741632), (0.60833335, 0.5741632), (0.6263889, 0.6091458), (0.6444444, 0.6091458), (0.6444444, 0.5741632), (0.6263889, 0.5741632), (0.6444444, 0.6091458), (0.6625, 0.6091458), (0.6625, 0.5741632), (0.6444444, 0.5741632), (0.6625, 0.6091458), (0.6805555, 0.6091458), (0.6805555, 0.5741632), (0.6625, 0.5741632), (0.6805555, 0.6091458), (0.69861114, 0.6091458), (0.69861114, 0.5741632), (0.6805555, 0.5741632), (0.69861114, 0.6091458), (0.7166667, 0.6091458), (0.7166667, 0.5741632), (0.69861114, 0.5741632), (0.28333333, 0.5741632), (0.3013889, 0.5741632), (0.3013889, 0.5391806), (0.28333333, 0.5391806), (0.3013889, 0.5741632), (0.31944445, 0.5741632), (0.31944445, 0.5391806), (0.3013889, 0.5391806), (0.31944445, 0.5741632), (0.3375, 0.5741632), (0.3375, 0.5391806), (0.31944445, 0.5391806), (0.3375, 0.5741632), (0.35555553, 0.5741632), (0.35555553, 0.5391806), (0.3375, 0.5391806), (0.35555553, 0.5741632), (0.37361112, 0.5741632), (0.37361112, 0.5391806), (0.35555553, 0.5391806), (0.37361112, 0.5741632), (0.39166668, 0.5741632), (0.39166668, 0.5391806), (0.37361112, 0.5391806), (0.39166668, 0.5741632), (0.4097222, 0.5741632), (0.4097222, 0.5391806), (0.39166668, 0.5391806), (0.4097222, 0.5741632), (0.42777777, 0.5741632), (0.42777777, 0.5391806), (0.4097222, 0.5391806), (0.42777777, 0.5741632), (0.44583333, 0.5741632), (0.44583333, 0.5391806), (0.42777777, 0.5391806), (0.44583333, 0.5741632), (0.46388888, 0.5741632), (0.46388888, 0.5391806), (0.44583333, 0.5391806), (0.46388888, 0.5741632), (0.48194444, 0.5741632), (0.48194444, 0.5391806), (0.46388888, 0.5391806), (0.48194444, 0.5741632), (0.5, 0.5741632), (0.5, 0.5391806), (0.48194444, 0.5391806), (0.5, 0.5741632), (0.51805556, 0.5741632), (0.51805556, 0.5391806), (0.5, 0.5391806), (0.51805556, 0.5741632), (0.5361111, 0.5741632), (0.5361111, 0.5391806), (0.51805556, 0.5391806), (0.5361111, 0.5741632), (0.5541667, 0.5741632), (0.5541667, 0.5391806), (0.5361111, 0.5391806), (0.5541667, 0.5741632), (0.57222223, 0.5741632), (0.57222223, 0.5391806), (0.5541667, 0.5391806), (0.57222223, 0.5741632), (0.5902778, 0.5741632), (0.5902778, 0.5391806), (0.57222223, 0.5391806), (0.5902778, 0.5741632), (0.60833335, 0.5741632), (0.60833335, 0.5391806), (0.5902778, 0.5391806), (0.60833335, 0.5741632), (0.6263889, 0.5741632), (0.6263889, 0.5391806), (0.60833335, 0.5391806), (0.6263889, 0.5741632), (0.6444444, 0.5741632), (0.6444444, 0.5391806), (0.6263889, 0.5391806), (0.6444444, 0.5741632), (0.6625, 0.5741632), (0.6625, 0.5391806), (0.6444444, 0.5391806), (0.6625, 0.5741632), (0.6805555, 0.5741632), (0.6805555, 0.5391806), (0.6625, 0.5391806), (0.6805555, 0.5741632), (0.69861114, 0.5741632), (0.69861114, 0.5391806), (0.6805555, 0.5391806), (0.69861114, 0.5741632), (0.7166667, 0.5741632), (0.7166667, 0.5391806), (0.69861114, 0.5391806), (0.28333333, 0.5391806), (0.3013889, 0.5391806), (0.3013889, 0.50419796), (0.28333333, 0.50419796), (0.3013889, 0.5391806), (0.31944445, 0.5391806), (0.31944445, 0.50419796), (0.3013889, 0.50419796), (0.31944445, 0.5391806), (0.3375, 0.5391806), (0.3375, 0.50419796), (0.31944445, 0.50419796), (0.3375, 0.5391806), (0.35555553, 0.5391806), (0.35555553, 0.50419796), (0.3375, 0.50419796), (0.35555553, 0.5391806), (0.37361112, 0.5391806), (0.37361112, 0.50419796), (0.35555553, 0.50419796), (0.37361112, 0.5391806), (0.39166668, 0.5391806), (0.39166668, 0.50419796), (0.37361112, 0.50419796), (0.39166668, 0.5391806), (0.4097222, 0.5391806), (0.4097222, 0.50419796), (0.39166668, 0.50419796), (0.4097222, 0.5391806), (0.42777777, 0.5391806), (0.42777777, 0.50419796), (0.4097222, 0.50419796), (0.42777777, 0.5391806), (0.44583333, 0.5391806), (0.44583333, 0.50419796), (0.42777777, 0.50419796), (0.44583333, 0.5391806), (0.46388888, 0.5391806), (0.46388888, 0.50419796), (0.44583333, 0.50419796), (0.46388888, 0.5391806), (0.48194444, 0.5391806), (0.48194444, 0.50419796), (0.46388888, 0.50419796), (0.48194444, 0.5391806), (0.5, 0.5391806), (0.5, 0.50419796), (0.48194444, 0.50419796), (0.5, 0.5391806), (0.51805556, 0.5391806), (0.51805556, 0.50419796), (0.5, 0.50419796), (0.51805556, 0.5391806), (0.5361111, 0.5391806), (0.5361111, 0.50419796), (0.51805556, 0.50419796), (0.5361111, 0.5391806), (0.5541667, 0.5391806), (0.5541667, 0.50419796), (0.5361111, 0.50419796), (0.5541667, 0.5391806), (0.57222223, 0.5391806), (0.57222223, 0.50419796), (0.5541667, 0.50419796), (0.57222223, 0.5391806), (0.5902778, 0.5391806), (0.5902778, 0.50419796), (0.57222223, 0.50419796), (0.5902778, 0.5391806), (0.60833335, 0.5391806), (0.60833335, 0.50419796), (0.5902778, 0.50419796), (0.60833335, 0.5391806), (0.6263889, 0.5391806), (0.6263889, 0.50419796), (0.60833335, 0.50419796), (0.6263889, 0.5391806), (0.6444444, 0.5391806), (0.6444444, 0.50419796), (0.6263889, 0.50419796), (0.6444444, 0.5391806), (0.6625, 0.5391806), (0.6625, 0.50419796), (0.6444444, 0.50419796), (0.6625, 0.5391806), (0.6805555, 0.5391806), (0.6805555, 0.50419796), (0.6625, 0.50419796), (0.6805555, 0.5391806), (0.69861114, 0.5391806), (0.69861114, 0.50419796), (0.6805555, 0.50419796), (0.69861114, 0.5391806), (0.7166667, 0.5391806), (0.7166667, 0.50419796), (0.69861114, 0.50419796), (0.28333333, 0.50419796), (0.3013889, 0.50419796), (0.3013889, 0.46921533), (0.28333333, 0.46921533), (0.3013889, 0.50419796), (0.31944445, 0.50419796), (0.31944445, 0.46921533), (0.3013889, 0.46921533), (0.31944445, 0.50419796), (0.3375, 0.50419796), (0.3375, 0.46921533), (0.31944445, 0.46921533), (0.3375, 0.50419796), (0.35555553, 0.50419796), (0.35555553, 0.46921533), (0.3375, 0.46921533), (0.35555553, 0.50419796), (0.37361112, 0.50419796), (0.37361112, 0.46921533), (0.35555553, 0.46921533), (0.37361112, 0.50419796), (0.39166668, 0.50419796), (0.39166668, 0.46921533), (0.37361112, 0.46921533), (0.39166668, 0.50419796), (0.4097222, 0.50419796), (0.4097222, 0.46921533), (0.39166668, 0.46921533), (0.4097222, 0.50419796), (0.42777777, 0.50419796), (0.42777777, 0.46921533), (0.4097222, 0.46921533), (0.42777777, 0.50419796), (0.44583333, 0.50419796), (0.44583333, 0.46921533), (0.42777777, 0.46921533), (0.44583333, 0.50419796), (0.46388888, 0.50419796), (0.46388888, 0.46921533), (0.44583333, 0.46921533), (0.46388888, 0.50419796), (0.48194444, 0.50419796), (0.48194444, 0.46921533), (0.46388888, 0.46921533), (0.48194444, 0.50419796), (0.5, 0.50419796), (0.5, 0.46921533), (0.48194444, 0.46921533), (0.5, 0.50419796), (0.51805556, 0.50419796), (0.51805556, 0.46921533), (0.5, 0.46921533), (0.51805556, 0.50419796), (0.5361111, 0.50419796), (0.5361111, 0.46921533), (0.51805556, 0.46921533), (0.5361111, 0.50419796), (0.5541667, 0.50419796), (0.5541667, 0.46921533), (0.5361111, 0.46921533), (0.5541667, 0.50419796), (0.57222223, 0.50419796), (0.57222223, 0.46921533), (0.5541667, 0.46921533), (0.57222223, 0.50419796), (0.5902778, 0.50419796), (0.5902778, 0.46921533), (0.57222223, 0.46921533), (0.5902778, 0.50419796), (0.60833335, 0.50419796), (0.60833335, 0.46921533), (0.5902778, 0.46921533), (0.60833335, 0.50419796), (0.6263889, 0.50419796), (0.6263889, 0.46921533), (0.60833335, 0.46921533), (0.6263889, 0.50419796), (0.6444444, 0.50419796), (0.6444444, 0.46921533), (0.6263889, 0.46921533), (0.6444444, 0.50419796), (0.6625, 0.50419796), (0.6625, 0.46921533), (0.6444444, 0.46921533), (0.6625, 0.50419796), (0.6805555, 0.50419796), (0.6805555, 0.46921533), (0.6625, 0.46921533), (0.6805555, 0.50419796), (0.69861114, 0.50419796), (0.69861114, 0.46921533), (0.6805555, 0.46921533), (0.69861114, 0.50419796), (0.7166667, 0.50419796), (0.7166667, 0.46921533), (0.69861114, 0.46921533), (0.28333333, 0.46921533), (0.3013889, 0.46921533), (0.3013889, 0.4342327), (0.28333333, 0.4342327), (0.3013889, 0.46921533), (0.31944445, 0.46921533), (0.31944445, 0.4342327), (0.3013889, 0.4342327), (0.31944445, 0.46921533), (0.3375, 0.46921533), (0.3375, 0.4342327), (0.31944445, 0.4342327), (0.3375, 0.46921533), (0.35555553, 0.46921533), (0.35555553, 0.4342327), (0.3375, 0.4342327), (0.35555553, 0.46921533), (0.37361112, 0.46921533), (0.37361112, 0.4342327), (0.35555553, 0.4342327), (0.37361112, 0.46921533), (0.39166668, 0.46921533), (0.39166668, 0.4342327), (0.37361112, 0.4342327), (0.39166668, 0.46921533), (0.4097222, 0.46921533), (0.4097222, 0.4342327), (0.39166668, 0.4342327), (0.4097222, 0.46921533), (0.42777777, 0.46921533), (0.42777777, 0.4342327), (0.4097222, 0.4342327), (0.42777777, 0.46921533), (0.44583333, 0.46921533), (0.44583333, 0.4342327), (0.42777777, 0.4342327), (0.44583333, 0.46921533), (0.46388888, 0.46921533), (0.46388888, 0.4342327), (0.44583333, 0.4342327), (0.46388888, 0.46921533), (0.48194444, 0.46921533), (0.48194444, 0.4342327), (0.46388888, 0.4342327), (0.48194444, 0.46921533), (0.5, 0.46921533), (0.5, 0.4342327), (0.48194444, 0.4342327), (0.5, 0.46921533), (0.51805556, 0.46921533), (0.51805556, 0.4342327), (0.5, 0.4342327), (0.51805556, 0.46921533), (0.5361111, 0.46921533), (0.5361111, 0.4342327), (0.51805556, 0.4342327), (0.5361111, 0.46921533), (0.5541667, 0.46921533), (0.5541667, 0.4342327), (0.5361111, 0.4342327), (0.5541667, 0.46921533), (0.57222223, 0.46921533), (0.57222223, 0.4342327), (0.5541667, 0.4342327), (0.57222223, 0.46921533), (0.5902778, 0.46921533), (0.5902778, 0.4342327), (0.57222223, 0.4342327), (0.5902778, 0.46921533), (0.60833335, 0.46921533), (0.60833335, 0.4342327), (0.5902778, 0.4342327), (0.60833335, 0.46921533), (0.6263889, 0.46921533), (0.6263889, 0.4342327), (0.60833335, 0.4342327), (0.6263889, 0.46921533), (0.6444444, 0.46921533), (0.6444444, 0.4342327), (0.6263889, 0.4342327), (0.6444444, 0.46921533), (0.6625, 0.46921533), (0.6625, 0.4342327), (0.6444444, 0.4342327), (0.6625, 0.46921533), (0.6805555, 0.46921533), (0.6805555, 0.4342327), (0.6625, 0.4342327), (0.6805555, 0.46921533), (0.69861114, 0.46921533), (0.69861114, 0.4342327), (0.6805555, 0.4342327), (0.69861114, 0.46921533), (0.7166667, 0.46921533), (0.7166667, 0.4342327), (0.69861114, 0.4342327), (0.28333333, 0.4342327), (0.3013889, 0.4342327), (0.3013889, 0.39925003), (0.28333333, 0.39925003), (0.3013889, 0.4342327), (0.31944445, 0.4342327), (0.31944445, 0.39925003), (0.3013889, 0.39925003), (0.31944445, 0.4342327), (0.3375, 0.4342327), (0.3375, 0.39925003), (0.31944445, 0.39925003), (0.3375, 0.4342327), (0.35555553, 0.4342327), (0.35555553, 0.39925003), (0.3375, 0.39925003), (0.35555553, 0.4342327), (0.37361112, 0.4342327), (0.37361112, 0.39925003), (0.35555553, 0.39925003), (0.37361112, 0.4342327), (0.39166668, 0.4342327), (0.39166668, 0.39925003), (0.37361112, 0.39925003), (0.39166668, 0.4342327), (0.4097222, 0.4342327), (0.4097222, 0.39925003), (0.39166668, 0.39925003), (0.4097222, 0.4342327), (0.42777777, 0.4342327), (0.42777777, 0.39925003), (0.4097222, 0.39925003), (0.42777777, 0.4342327), (0.44583333, 0.4342327), (0.44583333, 0.39925003), (0.42777777, 0.39925003), (0.44583333, 0.4342327), (0.46388888, 0.4342327), (0.46388888, 0.39925003), (0.44583333, 0.39925003), (0.46388888, 0.4342327), (0.48194444, 0.4342327), (0.48194444, 0.39925003), (0.46388888, 0.39925003), (0.48194444, 0.4342327), (0.5, 0.4342327), (0.5, 0.39925003), (0.48194444, 0.39925003), (0.5, 0.4342327), (0.51805556, 0.4342327), (0.51805556, 0.39925003), (0.5, 0.39925003), (0.51805556, 0.4342327), (0.5361111, 0.4342327), (0.5361111, 0.39925003), (0.51805556, 0.39925003), (0.5361111, 0.4342327), (0.5541667, 0.4342327), (0.5541667, 0.39925003), (0.5361111, 0.39925003), (0.5541667, 0.4342327), (0.57222223, 0.4342327), (0.57222223, 0.39925003), (0.5541667, 0.39925003), (0.57222223, 0.4342327), (0.5902778, 0.4342327), (0.5902778, 0.39925003), (0.57222223, 0.39925003), (0.5902778, 0.4342327), (0.60833335, 0.4342327), (0.60833335, 0.39925003), (0.5902778, 0.39925003), (0.60833335, 0.4342327), (0.6263889, 0.4342327), (0.6263889, 0.39925003), (0.60833335, 0.39925003), (0.6263889, 0.4342327), (0.6444444, 0.4342327), (0.6444444, 0.39925003), (0.6263889, 0.39925003), (0.6444444, 0.4342327), (0.6625, 0.4342327), (0.6625, 0.39925003), (0.6444444, 0.39925003), (0.6625, 0.4342327), (0.6805555, 0.4342327), (0.6805555, 0.39925003), (0.6625, 0.39925003), (0.6805555, 0.4342327), (0.69861114, 0.4342327), (0.69861114, 0.39925003), (0.6805555, 0.39925003), (0.69861114, 0.4342327), (0.7166667, 0.4342327), (0.7166667, 0.39925003), (0.69861114, 0.39925003)] (
interpolation = "faceVarying"
)
texCoord2f[] primvars:emissionUV = [(0.23552485, 0.46207106), (0.23694484, 0.45838705), (0.21867196, 0.45276937), (0.21873009, 0.45747212), (0.23694484, 0.45838705), (0.24066626, 0.4545901), (0.22096747, 0.4478328), (0.21867196, 0.45276937), (0.24066626, 0.4545901), (0.24724846, 0.45082122), (0.22628973, 0.4428584), (0.22096747, 0.4478328), (0.24724846, 0.45082122), (0.25729614, 0.4472493), (0.23540068, 0.43809742), (0.22628973, 0.4428584), (0.25729614, 0.4472493), (0.27141488, 0.44405353), (0.2491072, 0.43382663), (0.23540068, 0.43809742), (0.27141488, 0.44405353), (0.29014078, 0.44139242), (0.268159, 0.43029872), (0.2491072, 0.43382663), (0.29014078, 0.44139242), (0.31384882, 0.43938208), (0.29311824, 0.42768055), (0.268159, 0.43029872), (0.31384882, 0.43938208), (0.34264544, 0.43806684), (0.3242043, 0.42602533), (0.29311824, 0.42768055), (0.34264544, 0.43806684), (0.3762902, 0.43742633), (0.36118877, 0.42527953), (0.3242043, 0.42602533), (0.3762902, 0.43742633), (0.4141495, 0.4373784), (0.40333664, 0.42529824), (0.36118877, 0.42527953), (0.4141495, 0.4373784), (0.45520452, 0.43780896), (0.44942057, 0.42589006), (0.40333664, 0.42529824), (0.45520452, 0.43780896), (0.49810207, 0.43860164), (0.49780917, 0.42687014), (0.44942057, 0.42589006), (0.49810207, 0.43860164), (0.54125977, 0.43965244), (0.5465601, 0.42809352), (0.49780917, 0.42687014), (0.54125977, 0.43965244), (0.5830314, 0.44090694), (0.59361684, 0.42948768), (0.5465601, 0.42809352), (0.5830314, 0.44090694), (0.62187403, 0.44235536), (0.6370585, 0.43106136), (0.59361684, 0.42948768), (0.62187403, 0.44235536), (0.6565548, 0.4440375), (0.6753414, 0.4328988), (0.6370585, 0.43106136), (0.6565548, 0.4440375), (0.6862751, 0.4460224), (0.7075035, 0.43514863), (0.6753414, 0.4328988), (0.6862751, 0.4460224), (0.71070737, 0.44838592), (0.73322237, 0.43795922), (0.7075035, 0.43514863), (0.71070737, 0.44838592), (0.72994083, 0.45115933), (0.7527487, 0.44141993), (0.73322237, 0.43795922), (0.72994083, 0.45115933), (0.7443882, 0.4543227), (0.7667091, 0.44548726), (0.7527487, 0.44141993), (0.7443882, 0.4543227), (0.7546272, 0.45778304), (0.7759398, 0.4500083), (0.7667091, 0.44548726), (0.7546272, 0.45778304), (0.7613093, 0.46141127), (0.7812944, 0.4547574), (0.7759398, 0.4500083), (0.7613093, 0.46141127), (0.7650775, 0.46506658), (0.78358305, 0.4595041), (0.7812944, 0.4547574), (0.7650775, 0.46506658), (0.7665021, 0.46862152), (0.7834932, 0.46405825), (0.78358305, 0.4595041), (0.21873009, 0.45747212), (0.21867196, 0.45276937), (0.20001219, 0.4460658), (0.20180358, 0.452133), (0.21867196, 0.45276937), (0.22096747, 0.4478328), (0.20055968, 0.43955413), (0.20001219, 0.4460658), (0.22096747, 0.4478328), (0.22628973, 0.4428584), (0.20424113, 0.43286538), (0.20055968, 0.43955413), (0.22628973, 0.4428584), (0.23540068, 0.43809742), (0.21201032, 0.42638093), (0.20424113, 0.43286538), (0.23540068, 0.43809742), (0.2491072, 0.43382663), (0.22493032, 0.42055333), (0.21201032, 0.42638093), (0.2491072, 0.43382663), (0.268159, 0.43029872), (0.24404308, 0.41578484), (0.22493032, 0.42055333), (0.268159, 0.43029872), (0.29311824, 0.42768055), (0.2701716, 0.4123363), (0.24404308, 0.41578484), (0.29311824, 0.42768055), (0.3242043, 0.42602533), (0.3036868, 0.41026297), (0.2701716, 0.4123363), (0.3242043, 0.42602533), (0.36118877, 0.42527953), (0.34434506, 0.40943518), (0.3036868, 0.41026297), (0.36118877, 0.42527953), (0.40333664, 0.42529824), (0.3912565, 0.40960237), (0.34434506, 0.40943518), (0.40333664, 0.42529824), (0.44942057, 0.42589006), (0.44294825, 0.41044924), (0.3912565, 0.40960237), (0.44942057, 0.42589006), (0.49780917, 0.42687014), (0.49746346, 0.41168153), (0.44294825, 0.41044924), (0.49780917, 0.42687014), (0.5465601, 0.42809352), (0.5524789, 0.41309983), (0.49746346, 0.41168153), (0.5465601, 0.42809352), (0.59361684, 0.42948768), (0.6054928, 0.4146161), (0.5524789, 0.41309983), (0.59361684, 0.42948768), (0.6370585, 0.43106136), (0.6541059, 0.4162642), (0.6054928, 0.4146161), (0.6370585, 0.43106136), (0.6753414, 0.4328988), (0.6963666, 0.41819856), (0.6541059, 0.4162642), (0.6753414, 0.4328988), (0.7075035, 0.43514863), (0.7310858, 0.42069867), (0.6963666, 0.41819856), (0.7075035, 0.43514863), (0.73322237, 0.43795922), (0.7579611, 0.42407274), (0.7310858, 0.42069867), (0.73322237, 0.43795922), (0.7527487, 0.44141993), (0.77744496, 0.42849708), (0.7579611, 0.42407274), (0.7527487, 0.44141993), (0.7667091, 0.44548726), (0.7905041, 0.43390864), (0.77744496, 0.42849708), (0.7667091, 0.44548726), (0.7759398, 0.4500083), (0.7982901, 0.44001234), (0.7905041, 0.43390864), (0.7759398, 0.4500083), (0.7812944, 0.4547574), (0.80193204, 0.44640493), (0.7982901, 0.44001234), (0.7812944, 0.4547574), (0.78358305, 0.4595041), (0.8024206, 0.45270464), (0.80193204, 0.44640493), (0.78358305, 0.4595041), (0.7834932, 0.46405825), (0.80057144, 0.45862743), (0.8024206, 0.45270464), (0.20180358, 0.452133), (0.20001219, 0.4460658), (0.18132615, 0.43809727), (0.18509188, 0.4459862), (0.20001219, 0.4460658), (0.20055968, 0.43955413), (0.17978995, 0.42939043), (0.18132615, 0.43809727), (0.20055968, 0.43955413), (0.20424113, 0.43286538), (0.1814003, 0.42022076), (0.17978995, 0.42939043), (0.20424113, 0.43286538), (0.21201032, 0.42638093), (0.18733099, 0.41118154), (0.1814003, 0.42022076), (0.21201032, 0.42638093), (0.22493032, 0.42055333), (0.19898044, 0.40301928), (0.18733099, 0.41118154), (0.22493032, 0.42055333), (0.24404308, 0.41578484), (0.21781096, 0.39644042), (0.19898044, 0.40301928), (0.24404308, 0.41578484), (0.2701716, 0.4123363), (0.24502634, 0.39185658), (0.21781096, 0.39644042), (0.2701716, 0.4123363), (0.3036868, 0.41026297), (0.28117603, 0.3892827), (0.24502634, 0.39185658), (0.3036868, 0.41026297), (0.34434506, 0.40943518), (0.32592344, 0.38843468), (0.28117603, 0.3892827), (0.34434506, 0.40943518), (0.3912565, 0.40960237), (0.37809768, 0.38887602), (0.32592344, 0.38843468), (0.3912565, 0.40960237), (0.44294825, 0.41044924), (0.43590504, 0.39010796), (0.37809768, 0.38887602), (0.44294825, 0.41044924), (0.49746346, 0.41168153), (0.49707046, 0.39167547), (0.43590504, 0.39010796), (0.49746346, 0.41168153), (0.5524789, 0.41309983), (0.55891395, 0.393301), (0.49707046, 0.39167547), (0.5524789, 0.41309983), (0.6054928, 0.4146161), (0.6185021, 0.39490938), (0.55891395, 0.393301), (0.6054928, 0.4146161), (0.6541059, 0.4162642), (0.6728884, 0.3965516), (0.6185021, 0.39490938), (0.6541059, 0.4162642), (0.6963666, 0.41819856), (0.7195733, 0.3984587), (0.6728884, 0.3965516), (0.6963666, 0.41819856), (0.7310858, 0.42069867), (0.7570054, 0.4011305), (0.7195733, 0.3984587), (0.7310858, 0.42069867), (0.7579611, 0.42407274), (0.78485215, 0.40519932), (0.7570054, 0.4011305), (0.7579611, 0.42407274), (0.77744496, 0.42849708), (0.8038819, 0.41104892), (0.78485215, 0.40519932), (0.77744496, 0.42849708), (0.7905041, 0.43390864), (0.81550974, 0.4185369), (0.8038819, 0.41104892), (0.7905041, 0.43390864), (0.7982901, 0.44001234), (0.82134086, 0.42707404), (0.81550974, 0.4185369), (0.7982901, 0.44001234), (0.80193204, 0.44640493), (0.8228417, 0.43592012), (0.82134086, 0.42707404), (0.80193204, 0.44640493), (0.8024206, 0.45270464), (0.82120764, 0.44444332), (0.8228417, 0.43592012), (0.8024206, 0.45270464), (0.80057144, 0.45862743), (0.8173633, 0.45224065), (0.82120764, 0.44444332), (0.18509188, 0.4459862), (0.18132615, 0.43809727), (0.1630847, 0.4287443), (0.1690303, 0.43903527), (0.18132615, 0.43809727), (0.17978995, 0.42939043), (0.15913548, 0.41698533), (0.1630847, 0.4287443), (0.17978995, 0.42939043), (0.1814003, 0.42022076), (0.15819511, 0.4041888), (0.15913548, 0.41698533), (0.1814003, 0.42022076), (0.18733099, 0.41118154), (0.16167726, 0.3912639), (0.15819511, 0.4041888), (0.18733099, 0.41118154), (0.19898044, 0.40301928), (0.17142044, 0.37951556), (0.16167726, 0.3912639), (0.19898044, 0.40301928), (0.21781096, 0.39644042), (0.18951422, 0.37023917), (0.17142044, 0.37951556), (0.21781096, 0.39644042), (0.24502634, 0.39185658), (0.21776454, 0.36412287), (0.18951422, 0.37023917), (0.24502634, 0.39185658), (0.28117603, 0.3892827), (0.25693503, 0.36100507), (0.21776454, 0.36412287), (0.28117603, 0.3892827), (0.32592344, 0.38843468), (0.30636236, 0.3602478), (0.25693503, 0.36100507), (0.32592344, 0.38843468), (0.37809768, 0.38887602), (0.36432394, 0.36113924), (0.30636236, 0.3602478), (0.37809768, 0.38887602), (0.43590504, 0.39010796), (0.4286045, 0.36292136), (0.36432394, 0.36113924), (0.43590504, 0.39010796), (0.49707046, 0.39167547), (0.4966711, 0.36488807), (0.4286045, 0.36292136), (0.49707046, 0.39167547), (0.55891395, 0.393301), (0.56561327, 0.36670664), (0.4966711, 0.36488807), (0.55891395, 0.393301), (0.6185021, 0.39490938), (0.63220036, 0.36838925), (0.56561327, 0.36670664), (0.6185021, 0.39490938), (0.6728884, 0.3965516), (0.6929811, 0.36995298), (0.63220036, 0.36838925), (0.6728884, 0.3965516), (0.7195733, 0.3984587), (0.7447013, 0.37160242), (0.6929811, 0.36995298), (0.7195733, 0.3984587), (0.7570054, 0.4011305), (0.7851302, 0.37420827), (0.7447013, 0.37160242), (0.7570054, 0.4011305), (0.78485215, 0.40519932), (0.81377745, 0.3791114), (0.7851302, 0.37420827), (0.78485215, 0.40519932), (0.8038819, 0.41104892), (0.8318105, 0.3871442), (0.81377745, 0.3791114), (0.8038819, 0.41104892), (0.81550974, 0.4185369), (0.84134316, 0.39796284), (0.8318105, 0.3871442), (0.81550974, 0.4185369), (0.82134086, 0.42707404), (0.8446172, 0.41033524), (0.84134316, 0.39796284), (0.82134086, 0.42707404), (0.8228417, 0.43592012), (0.8435174, 0.4228734), (0.8446172, 0.41033524), (0.8228417, 0.43592012), (0.82120764, 0.44444332), (0.8394566, 0.43456635), (0.8435174, 0.4228734), (0.82120764, 0.44444332), (0.8173633, 0.45224065), (0.83343333, 0.4448886), (0.8394566, 0.43456635), (0.1690303, 0.43903527), (0.1630847, 0.4287443), (0.14588307, 0.41806287), (0.1541402, 0.431432), (0.1630847, 0.4287443), (0.15913548, 0.41698533), (0.13923302, 0.40213066), (0.14588307, 0.41806287), (0.15913548, 0.41698533), (0.15819511, 0.4041888), (0.13523857, 0.38405263), (0.13923302, 0.40213066), (0.15819511, 0.4041888), (0.16167726, 0.3912639), (0.1355193, 0.36514816), (0.13523857, 0.38405263), (0.16167726, 0.3912639), (0.17142044, 0.37951556), (0.14247057, 0.34774113), (0.1355193, 0.36514816), (0.17142044, 0.37951556), (0.18951422, 0.37023917), (0.15916923, 0.33438575), (0.14247057, 0.34774113), (0.18951422, 0.37023917), (0.21776454, 0.36412287), (0.18849434, 0.3263273), (0.15916923, 0.33438575), (0.21776454, 0.36412287), (0.25693503, 0.36100507), (0.23148072, 0.32279366), (0.18849434, 0.3263273), (0.25693503, 0.36100507), (0.30636236, 0.3602478), (0.28652903, 0.32227603), (0.23148072, 0.32279366), (0.30636236, 0.3602478), (0.36432394, 0.36113924), (0.3507878, 0.32375896), (0.28652903, 0.32227603), (0.36432394, 0.36113924), (0.4286045, 0.36292136), (0.421608, 0.32625762), (0.3507878, 0.32375896), (0.4286045, 0.36292136), (0.4966711, 0.36488807), (0.4963848, 0.3286109), (0.421608, 0.32625762), (0.4966711, 0.36488807), (0.56561327, 0.36670664), (0.5721341, 0.33051488), (0.4963848, 0.3286109), (0.56561327, 0.36670664), (0.63220036, 0.36838925), (0.64570534, 0.332358), (0.5721341, 0.33051488), (0.63220036, 0.36838925), (0.6929811, 0.36995298), (0.7134743, 0.33392414), (0.64570534, 0.332358), (0.6929811, 0.36995298), (0.7447013, 0.37160242), (0.77119184, 0.33494624), (0.7134743, 0.33392414), (0.7447013, 0.37160242), (0.7851302, 0.37420827), (0.8152766, 0.3368695), (0.77119184, 0.33494624), (0.7851302, 0.37420827), (0.81377745, 0.3791114), (0.844611, 0.34266633), (0.8152766, 0.3368695), (0.81377745, 0.3791114), (0.8318105, 0.3871442), (0.8609275, 0.3541951), (0.844611, 0.34266633), (0.8318105, 0.3871442), (0.84134316, 0.39796284), (0.8674903, 0.37052435), (0.8609275, 0.3541951), (0.84134316, 0.39796284), (0.8446172, 0.41033524), (0.86748904, 0.3889832), (0.8674903, 0.37052435), (0.8446172, 0.41033524), (0.8435174, 0.4228734), (0.86331654, 0.4070239), (0.86748904, 0.3889832), (0.8435174, 0.4228734), (0.8394566, 0.43456635), (0.856571, 0.42312276), (0.86331654, 0.4070239), (0.8394566, 0.43456635), (0.83343333, 0.4448886), (0.84826213, 0.43672857), (0.856571, 0.42312276), (0.1541402, 0.431432), (0.14588307, 0.41806287), (0.13043866, 0.4064687), (0.14101212, 0.42356017), (0.14588307, 0.41806287), (0.13923302, 0.40213066), (0.1209163, 0.3851047), (0.13043866, 0.4064687), (0.13923302, 0.40213066), (0.13523857, 0.38405263), (0.11339752, 0.35955605), (0.1209163, 0.3851047), (0.13523857, 0.38405263), (0.1355193, 0.36514816), (0.10957857, 0.33150184), (0.11339752, 0.35955605), (0.1355193, 0.36514816), (0.14247057, 0.34774113), (0.11245854, 0.30500084), (0.10957857, 0.33150184), (0.14247057, 0.34774113), (0.15916923, 0.33438575), (0.12669048, 0.28541395), (0.11245854, 0.30500084), (0.15916923, 0.33438575), (0.18849434, 0.3263273), (0.1572919, 0.27531573), (0.12669048, 0.28541395), (0.18849434, 0.3263273), (0.23148072, 0.32279366), (0.20576034, 0.27203712), (0.1572919, 0.27531573), (0.23148072, 0.32279366), (0.28652903, 0.32227603), (0.26795676, 0.27185112), (0.20576034, 0.27203712), (0.28652903, 0.32227603), (0.3507878, 0.32375896), (0.3388051, 0.27380508), (0.26795676, 0.27185112), (0.3507878, 0.32375896), (0.421608, 0.32625762), (0.4157057, 0.27708113), (0.3388051, 0.27380508), (0.421608, 0.32625762), (0.4963848, 0.3286109), (0.49649346, 0.279545), (0.4157057, 0.27708113), (0.4963848, 0.3286109), (0.5721341, 0.33051488), (0.57790697, 0.2811725), (0.49649346, 0.279545), (0.5721341, 0.33051488), (0.64570534, 0.332358), (0.6575294, 0.2835869), (0.57790697, 0.2811725), (0.64570534, 0.332358), (0.7134743, 0.33392414), (0.732693, 0.2857323), (0.6575294, 0.2835869), (0.7134743, 0.33392414), (0.77119184, 0.33494624), (0.79802215, 0.28562707), (0.732693, 0.2857323), (0.77119184, 0.33494624), (0.8152766, 0.3368695), (0.84724987, 0.28546807), (0.79802215, 0.28562707), (0.8152766, 0.3368695), (0.844611, 0.34266633), (0.8773112, 0.29201373), (0.84724987, 0.28546807), (0.844611, 0.34266633), (0.8609275, 0.3541951), (0.8908353, 0.30938148), (0.8773112, 0.29201373), (0.8609275, 0.3541951), (0.8674903, 0.37052435), (0.8932244, 0.33488426), (0.8908353, 0.30938148), (0.8674903, 0.37052435), (0.86748904, 0.3889832), (0.88911223, 0.36279902), (0.8932244, 0.33488426), (0.86748904, 0.3889832), (0.86331654, 0.4070239), (0.8814419, 0.38869193), (0.88911223, 0.36279902), (0.86331654, 0.4070239), (0.856571, 0.42312276), (0.87186337, 0.41057763), (0.8814419, 0.38869193), (0.856571, 0.42312276), (0.84826213, 0.43672857), (0.8612793, 0.42819035), (0.87186337, 0.41057763), (0.14101212, 0.42356017), (0.13043866, 0.4064687), (0.11757387, 0.39495718), (0.13027748, 0.41611317), (0.13043866, 0.4064687), (0.1209163, 0.3851047), (0.105236225, 0.3671657), (0.11757387, 0.39495718), (0.1209163, 0.3851047), (0.11339752, 0.35955605), (0.09392514, 0.33185828), (0.105236225, 0.3671657), (0.11339752, 0.35955605), (0.10957857, 0.33150184), (0.08507946, 0.2904219), (0.09392514, 0.33185828), (0.10957857, 0.33150184), (0.11245854, 0.30500084), (0.08206037, 0.24927273), (0.08507946, 0.2904219), (0.11245854, 0.30500084), (0.12669048, 0.28541395), (0.091927186, 0.2199224), (0.08206037, 0.24927273), (0.12669048, 0.28541395), (0.1572919, 0.27531573), (0.12428518, 0.20874262), (0.091927186, 0.2199224), (0.1572919, 0.27531573), (0.20576034, 0.27203712), (0.18161073, 0.20779301), (0.12428518, 0.20874262), (0.20576034, 0.27203712), (0.26795676, 0.27185112), (0.25307655, 0.2078593), (0.18161073, 0.20779301), (0.26795676, 0.27185112), (0.3388051, 0.27380508), (0.3300337, 0.20956439), (0.25307655, 0.2078593), (0.3388051, 0.27380508), (0.4157057, 0.27708113), (0.41167188, 0.21338002), (0.3300337, 0.20956439), (0.4157057, 0.27708113), (0.49649346, 0.279545), (0.49754202, 0.21501973), (0.41167188, 0.21338002), (0.49649346, 0.279545), (0.57790697, 0.2811725), (0.58239007, 0.21547061), (0.49754202, 0.21501973), (0.57790697, 0.2811725), (0.6575294, 0.2835869), (0.6657478, 0.21947506), (0.58239007, 0.21547061), (0.6575294, 0.2835869), (0.732693, 0.2857323), (0.7479896, 0.22354329), (0.6657478, 0.21947506), (0.732693, 0.2857323), (0.79802215, 0.28562707), (0.8231717, 0.22192736), (0.7479896, 0.22354329), (0.79802215, 0.28562707), (0.84724987, 0.28546807), (0.88068247, 0.21723165), (0.8231717, 0.22192736), (0.84724987, 0.28546807), (0.8773112, 0.29201373), (0.91167, 0.22425015), (0.88068247, 0.21723165), (0.8773112, 0.29201373), (0.8908353, 0.30938148), (0.92069495, 0.25164124), (0.91167, 0.22425015), (0.8908353, 0.30938148), (0.8932244, 0.33488426), (0.91732913, 0.29179195), (0.92069495, 0.25164124), (0.8932244, 0.33488426), (0.88911223, 0.36279902), (0.9082936, 0.33327463), (0.91732913, 0.29179195), (0.88911223, 0.36279902), (0.8814419, 0.38869193), (0.89689165, 0.3693319), (0.9082936, 0.33327463), (0.8814419, 0.38869193), (0.87186337, 0.41057763), (0.8845508, 0.39806038), (0.89689165, 0.3693319), (0.87186337, 0.41057763), (0.8612793, 0.42819035), (0.87188333, 0.42006162), (0.8845508, 0.39806038), (0.13027748, 0.41611317), (0.11757387, 0.39495718), (0.108154476, 0.3852078), (0.12255007, 0.41007897), (0.11757387, 0.39495718), (0.105236225, 0.3671657), (0.09343662, 0.3510653), (0.108154476, 0.3852078), (0.105236225, 0.3671657), (0.09392514, 0.33185828), (0.0785835, 0.30501288), (0.09343662, 0.3510653), (0.09392514, 0.33185828), (0.08507946, 0.2904219), (0.06423556, 0.24646541), (0.0785835, 0.30501288), (0.08507946, 0.2904219), (0.08206037, 0.24927273), (0.053039692, 0.18303585), (0.06423556, 0.24646541), (0.08206037, 0.24927273), (0.091927186, 0.2199224), (0.05505852, 0.13799687), (0.053039692, 0.18303585), (0.091927186, 0.2199224), (0.12428518, 0.20874262), (0.090887204, 0.1275527), (0.05505852, 0.13799687), (0.12428518, 0.20874262), (0.18161073, 0.20779301), (0.16242693, 0.13236186), (0.090887204, 0.1275527), (0.18161073, 0.20779301), (0.25307655, 0.2078593), (0.2443132, 0.13293035), (0.16242693, 0.13236186), (0.25307655, 0.2078593), (0.3300337, 0.20956439), (0.32606506, 0.13342318), (0.2443132, 0.13293035), (0.3300337, 0.20956439), (0.41167188, 0.21338002), (0.4095642, 0.13687101), (0.32606506, 0.13342318), (0.41167188, 0.21338002), (0.49754202, 0.21501973), (0.5004531, 0.1359111), (0.4095642, 0.13687101), (0.49754202, 0.21501973), (0.58239007, 0.21547061), (0.5850501, 0.13421124), (0.5004531, 0.1359111), (0.58239007, 0.21547061), (0.6657478, 0.21947506), (0.66932684, 0.14025825), (0.5850501, 0.13421124), (0.6657478, 0.21947506), (0.7479896, 0.22354329), (0.7568895, 0.14747661), (0.66932684, 0.14025825), (0.7479896, 0.22354329), (0.8231717, 0.22192736), (0.8418157, 0.14518286), (0.7568895, 0.14747661), (0.8231717, 0.22192736), (0.88068247, 0.21723165), (0.91350704, 0.13438416), (0.8418157, 0.14518286), (0.88068247, 0.21723165), (0.91167, 0.22425015), (0.9461602, 0.1416595), (0.91350704, 0.13438416), (0.91167, 0.22425015), (0.92069495, 0.25164124), (0.9482625, 0.18604259), (0.9461602, 0.1416595), (0.92069495, 0.25164124), (0.91732913, 0.29179195), (0.9375834, 0.24725325), (0.9482625, 0.18604259), (0.91732913, 0.29179195), (0.9082936, 0.33327463), (0.92334735, 0.30510023), (0.9375834, 0.24725325), (0.9082936, 0.33327463), (0.89689165, 0.3693319), (0.90849394, 0.3520283), (0.92334735, 0.30510023), (0.89689165, 0.3693319), (0.8845508, 0.39806038), (0.8938148, 0.38744685), (0.90849394, 0.3520283), (0.8845508, 0.39806038), (0.87188333, 0.42006162), (0.8795018, 0.41345197), (0.8938148, 0.38744685), (0.12255007, 0.41007897), (0.108154476, 0.3852078), (0.102956, 0.37926853), (0.11833881, 0.4065185), (0.108154476, 0.3852078), (0.09343662, 0.3510653), (0.086780116, 0.34080124), (0.102956, 0.37926853), (0.09343662, 0.3510653), (0.0785835, 0.30501288), (0.06955979, 0.28670466), (0.086780116, 0.34080124), (0.0785835, 0.30501288), (0.06423556, 0.24646541), (0.050874438, 0.21320166), (0.06955979, 0.28670466), (0.06423556, 0.24646541), (0.053039692, 0.18303585), (0.030865397, 0.12609695), (0.050874438, 0.21320166), (0.053039692, 0.18303585), (0.05505852, 0.13799687), (0.019119745, 0.06215585), (0.030865397, 0.12609695), (0.05505852, 0.13799687), (0.090887204, 0.1275527), (0.06753936, 0.045739654), (0.019119745, 0.06215585), (0.090887204, 0.1275527), (0.16242693, 0.13236186), (0.15151563, 0.04630157), (0.06753936, 0.045739654), (0.16242693, 0.13236186), (0.2443132, 0.13293035), (0.239299, 0.048891272), (0.15151563, 0.04630157), (0.2443132, 0.13293035), (0.32606506, 0.13342318), (0.32579014, 0.04853702), (0.239299, 0.048891272), (0.32606506, 0.13342318), (0.4095642, 0.13687101), (0.4097668, 0.049638677), (0.32579014, 0.04853702), (0.4095642, 0.13687101), (0.5004531, 0.1359111), (0.50354636, 0.046688624), (0.4097668, 0.049638677), (0.5004531, 0.1359111), (0.5850501, 0.13421124), (0.5861563, 0.047448985), (0.50354636, 0.046688624), (0.5850501, 0.13421124), (0.66932684, 0.14025825), (0.6705173, 0.051568896), (0.5861563, 0.047448985), (0.66932684, 0.14025825), (0.7568895, 0.14747661), (0.75948405, 0.05898819), (0.6705173, 0.051568896), (0.7568895, 0.14747661), (0.8418157, 0.14518286), (0.8451956, 0.055759646), (0.75948405, 0.05898819), (0.8418157, 0.14518286), (0.91350704, 0.13438416), (0.9345597, 0.04901887), (0.8451956, 0.055759646), (0.91350704, 0.13438416), (0.9461602, 0.1416595), (0.98111993, 0.05673781), (0.9345597, 0.04901887), (0.9461602, 0.1416595), (0.9482625, 0.18604259), (0.9688281, 0.12932862), (0.98111993, 0.05673781), (0.9482625, 0.18604259), (0.9375834, 0.24725325), (0.95033777, 0.21492618), (0.9688281, 0.12932862), (0.9375834, 0.24725325), (0.92334735, 0.30510023), (0.9321657, 0.28628704), (0.95033777, 0.21492618), (0.92334735, 0.30510023), (0.90849394, 0.3520283), (0.915025, 0.34106976), (0.9321657, 0.28628704), (0.90849394, 0.3520283), (0.8938148, 0.38744685), (0.89892083, 0.3809864), (0.915025, 0.34106976), (0.8938148, 0.38744685), (0.8795018, 0.41345197), (0.88364553, 0.40954393), (0.89892083, 0.3809864), (0.11833881, 0.4065185), (0.102956, 0.37926853), (0.10247376, 0.3786963), (0.11795062, 0.40617996), (0.102956, 0.37926853), (0.086780116, 0.34080124), (0.086156376, 0.33979148), (0.10247376, 0.3786963), (0.086780116, 0.34080124), (0.06955979, 0.28670466), (0.06869708, 0.28484455), (0.086156376, 0.33979148), (0.06955979, 0.28670466), (0.050874438, 0.21320166), (0.049533654, 0.20963389), (0.06869708, 0.28484455), (0.050874438, 0.21320166), (0.030865397, 0.12609695), (0.028333688, 0.11958926), (0.049533654, 0.20963389), (0.030865397, 0.12609695), (0.019119745, 0.06215585), (0.012920969, 0.05184795), (0.028333688, 0.11958926), (0.019119745, 0.06215585), (0.06753936, 0.045739654), (0.0661119, 0.029464781), (0.012920969, 0.05184795), (0.06753936, 0.045739654), (0.15151563, 0.04630157), (0.1511854, 0.027453383), (0.0661119, 0.029464781), (0.15151563, 0.04630157), (0.239299, 0.048891272), (0.23835237, 0.030046446), (0.1511854, 0.027453383), (0.239299, 0.048891272), (0.32579014, 0.04853702), (0.32549816, 0.030999476), (0.23835237, 0.030046446), (0.32579014, 0.04853702), (0.4097668, 0.049638677), (0.4113055, 0.03088092), (0.32549816, 0.030999476), (0.4097668, 0.049638677), (0.50354636, 0.046688624), (0.5023601, 0.028618297), (0.4113055, 0.03088092), (0.50354636, 0.046688624), (0.5861563, 0.047448985), (0.58640754, 0.029645177), (0.5023601, 0.028618297), (0.5861563, 0.047448985), (0.6705173, 0.051568896), (0.67075056, 0.033442006), (0.58640754, 0.029645177), (0.6705173, 0.051568896), (0.75948405, 0.05898819), (0.7587094, 0.039329655), (0.67075056, 0.033442006), (0.75948405, 0.05898819), (0.8451956, 0.055759646), (0.84580845, 0.033975884), (0.7587094, 0.039329655), (0.8451956, 0.055759646), (0.9345597, 0.04901887), (0.934802, 0.03168096), (0.84580845, 0.033975884), (0.9345597, 0.04901887), (0.98111993, 0.05673781), (0.9883326, 0.043248218), (0.934802, 0.03168096), (0.98111993, 0.05673781), (0.9688281, 0.12932862), (0.9712408, 0.12230276), (0.9883326, 0.043248218), (0.9688281, 0.12932862), (0.95033777, 0.21492618), (0.95160383, 0.21151705), (0.9712408, 0.12230276), (0.95033777, 0.21492618), (0.9321657, 0.28628704), (0.9330035, 0.2843982), (0.95160383, 0.21151705), (0.9321657, 0.28628704), (0.915025, 0.34106976), (0.91563725, 0.33999616), (0.9330035, 0.2843982), (0.915025, 0.34106976), (0.89892083, 0.3809864), (0.89939636, 0.3803638), (0.91563725, 0.33999616), (0.89892083, 0.3809864), (0.88364553, 0.40954393), (0.8840266, 0.40917227), (0.89939636, 0.3803638), (0.11795062, 0.40617996), (0.10247376, 0.3786963), (0.106755905, 0.38365182), (0.121413134, 0.40913677), (0.10247376, 0.3786963), (0.086156376, 0.33979148), (0.09165687, 0.34841195), (0.106755905, 0.38365182), (0.086156376, 0.33979148), (0.06869708, 0.28484455), (0.076201186, 0.3003755), (0.09165687, 0.34841195), (0.06869708, 0.28484455), (0.049533654, 0.20963389), (0.06081047, 0.2383339), (0.076201186, 0.3003755), (0.049533654, 0.20963389), (0.028333688, 0.11958926), (0.04775307, 0.16973364), (0.06081047, 0.2383339), (0.028333688, 0.11958926), (0.012920969, 0.05184795), (0.04757852, 0.12087098), (0.04775307, 0.16973364), (0.012920969, 0.05184795), (0.0661119, 0.029464781), (0.08473821, 0.11042619), (0.04757852, 0.12087098), (0.0661119, 0.029464781), (0.1511854, 0.027453383), (0.15953533, 0.11619047), (0.08473821, 0.11042619), (0.1511854, 0.027453383), (0.23835237, 0.030046446), (0.2432612, 0.11702228), (0.15953533, 0.11619047), (0.23835237, 0.030046446), (0.32549816, 0.030999476), (0.32590607, 0.117201135), (0.2432612, 0.11702228), (0.32549816, 0.030999476), (0.4113055, 0.03088092), (0.40926933, 0.12038572), (0.32590607, 0.117201135), (0.4113055, 0.03088092), (0.5023601, 0.028618297), (0.50133765, 0.11873583), (0.40926933, 0.12038572), (0.5023601, 0.028618297), (0.58640754, 0.029645177), (0.58532447, 0.11685814), (0.50133765, 0.11873583), (0.58640754, 0.029645177), (0.67075056, 0.033442006), (0.6696268, 0.12289219), (0.58532447, 0.11685814), (0.67075056, 0.033442006), (0.7587094, 0.039329655), (0.75793374, 0.1307543), (0.6696268, 0.12289219), (0.7587094, 0.039329655), (0.84580845, 0.033975884), (0.84391797, 0.12860946), (0.75793374, 0.1307543), (0.84580845, 0.033975884), (0.934802, 0.03168096), (0.91938967, 0.11703061), (0.84391797, 0.12860946), (0.934802, 0.03168096), (0.9883326, 0.043248218), (0.952899, 0.12416357), (0.91938967, 0.11703061), (0.9883326, 0.043248218), (0.9712408, 0.12230276), (0.95315826, 0.1731327), (0.952899, 0.12416357), (0.9712408, 0.12230276), (0.95160383, 0.21151705), (0.94087183, 0.23924626), (0.95315826, 0.1731327), (0.95160383, 0.21151705), (0.9330035, 0.2843982), (0.92567664, 0.30029973), (0.94087183, 0.23924626), (0.9330035, 0.2843982), (0.91563725, 0.33999616), (0.91024053, 0.349188), (0.92567664, 0.30029973), (0.91563725, 0.33999616), (0.89939636, 0.3803638), (0.8951916, 0.38575464), (0.91024053, 0.349188), (0.89939636, 0.3803638), (0.8840266, 0.40917227), (0.8806212, 0.41241854), (0.8951916, 0.38575464), (0.121413134, 0.40913677), (0.106755905, 0.38365182), (0.11538715, 0.3928018), (0.12847295, 0.41475883), (0.106755905, 0.38365182), (0.09165687, 0.34841195), (0.1025238, 0.36368182), (0.11538715, 0.3928018), (0.09165687, 0.34841195), (0.076201186, 0.3003755), (0.09046021, 0.32622284), (0.1025238, 0.36368182), (0.076201186, 0.3003755), (0.06081047, 0.2383339), (0.080522485, 0.28158268), (0.09046021, 0.32622284), (0.06081047, 0.2383339), (0.04775307, 0.16973364), (0.0760537, 0.23661079), (0.080522485, 0.28158268), (0.04775307, 0.16973364), (0.04757852, 0.12087098), (0.08469894, 0.20467222), (0.0760537, 0.23661079), (0.04757852, 0.12087098), (0.08473821, 0.11042619), (0.11752498, 0.19352524), (0.08469894, 0.20467222), (0.08473821, 0.11042619), (0.15953533, 0.11619047), (0.17723916, 0.1934821), (0.11752498, 0.19352524), (0.15953533, 0.11619047), (0.2432612, 0.11702228), (0.25079298, 0.1935938), (0.17723916, 0.1934821), (0.2432612, 0.11702228), (0.32590607, 0.117201135), (0.3288142, 0.19512092), (0.25079298, 0.1935938), (0.32590607, 0.117201135), (0.40926933, 0.12038572), (0.41112146, 0.1989645), (0.3288142, 0.19512092), (0.40926933, 0.12038572), (0.50133765, 0.11873583), (0.4979391, 0.200239), (0.41112146, 0.1989645), (0.50133765, 0.11873583), (0.58532447, 0.11685814), (0.58308977, 0.2002948), (0.4979391, 0.200239), (0.58532447, 0.11685814), (0.6696268, 0.12289219), (0.66682106, 0.20476535), (0.58308977, 0.2002948), (0.6696268, 0.12289219), (0.75793374, 0.1307543), (0.750317, 0.2094006), (0.66682106, 0.20476535), (0.75793374, 0.1307543), (0.84391797, 0.12860946), (0.8276623, 0.20751053), (0.750317, 0.2094006), (0.84391797, 0.12860946), (0.91938967, 0.11703061), (0.8874354, 0.20159477), (0.8276623, 0.20751053), (0.91938967, 0.11703061), (0.952899, 0.12416357), (0.91864115, 0.20869826), (0.8874354, 0.20159477), (0.952899, 0.12416357), (0.95315826, 0.1731327), (0.92649746, 0.2388234), (0.91864115, 0.20869826), (0.95315826, 0.1731327), (0.94087183, 0.23924626), (0.9217842, 0.2826759), (0.92649746, 0.2388234), (0.94087183, 0.23924626), (0.92567664, 0.30029973), (0.91169846, 0.32731318), (0.9217842, 0.2826759), (0.92567664, 0.30029973), (0.91024053, 0.349188), (0.89956194, 0.36557934), (0.91169846, 0.32731318), (0.91024053, 0.349188), (0.8951916, 0.38575464), (0.88670313, 0.39571476), (0.89956194, 0.36557934), (0.8951916, 0.38575464), (0.8806212, 0.41241854), (0.8736679, 0.4185792), (0.88670313, 0.39571476), (0.12847295, 0.41475883), (0.11538715, 0.3928018), (0.12763183, 0.40411493), (0.13865395, 0.42200997), (0.11538715, 0.3928018), (0.1025238, 0.36368182), (0.11753191, 0.38152555), (0.12763183, 0.40411493), (0.1025238, 0.36368182), (0.09046021, 0.32622284), (0.109264985, 0.35419464), (0.11753191, 0.38152555), (0.09046021, 0.32622284), (0.080522485, 0.28158268), (0.104511015, 0.3238256), (0.109264985, 0.35419464), (0.080522485, 0.28158268), (0.0760537, 0.23661079), (0.10637648, 0.2949219), (0.104511015, 0.3238256), (0.0760537, 0.23661079), (0.08469894, 0.20467222), (0.119923666, 0.27372664), (0.10637648, 0.2949219), (0.08469894, 0.20467222), (0.11752498, 0.19352524), (0.15082496, 0.26328683), (0.119923666, 0.27372664), (0.11752498, 0.19352524), (0.17723916, 0.1934821), (0.20072183, 0.26024228), (0.15082496, 0.26328683), (0.17723916, 0.1934821), (0.25079298, 0.1935938), (0.26459143, 0.260117), (0.20072183, 0.26024228), (0.25079298, 0.1935938), (0.3288142, 0.19512092), (0.3367377, 0.26210064), (0.26459143, 0.260117), (0.3288142, 0.19512092), (0.41112146, 0.1989645), (0.41473117, 0.26551858), (0.3367377, 0.26210064), (0.41112146, 0.1989645), (0.4979391, 0.200239), (0.49660426, 0.26792246), (0.41473117, 0.26551858), (0.4979391, 0.200239), (0.58308977, 0.2002948), (0.5789204, 0.26940846), (0.49660426, 0.26792246), (0.58308977, 0.2002948), (0.66682106, 0.20476535), (0.65952456, 0.2720397), (0.5789204, 0.26940846), (0.66682106, 0.20476535), (0.750317, 0.2094006), (0.7361633, 0.27444172), (0.65952456, 0.2720397), (0.750317, 0.2094006), (0.8276623, 0.20751053), (0.8032832, 0.2740495), (0.7361633, 0.27444172), (0.8276623, 0.20751053), (0.8874354, 0.20159477), (0.8538434, 0.2732075), (0.8032832, 0.2740495), (0.8874354, 0.20159477), (0.91864115, 0.20869826), (0.8840696, 0.27986613), (0.8538434, 0.2732075), (0.91864115, 0.20869826), (0.92649746, 0.2388234), (0.896859, 0.29882815), (0.8840696, 0.27986613), (0.92649746, 0.2388234), (0.9217842, 0.2826759), (0.8982292, 0.32676902), (0.896859, 0.29882815), (0.9217842, 0.2826759), (0.91169846, 0.32731318), (0.8931895, 0.35706615), (0.8982292, 0.32676902), (0.91169846, 0.32731318), (0.89956194, 0.36557934), (0.88478386, 0.3848296), (0.8931895, 0.35706615), (0.89956194, 0.36557934), (0.88670313, 0.39571476), (0.8746347, 0.4080228), (0.88478386, 0.3848296), (0.88670313, 0.39571476), (0.8736679, 0.4185792), (0.86361384, 0.4265014), (0.8746347, 0.4080228), (0.13865395, 0.42200997), (0.12763183, 0.40411493), (0.14262852, 0.41579476), (0.15135385, 0.429862), (0.12763183, 0.40411493), (0.11753191, 0.38152555), (0.13541271, 0.39887822), (0.14262852, 0.41579476), (0.11753191, 0.38152555), (0.109264985, 0.35419464), (0.13074699, 0.37949437), (0.13541271, 0.39887822), (0.109264985, 0.35419464), (0.104511015, 0.3238256), (0.13028388, 0.35905045), (0.13074699, 0.37949437), (0.104511015, 0.3238256), (0.10637648, 0.2949219), (0.13653883, 0.34015602), (0.13028388, 0.35905045), (0.10637648, 0.2949219), (0.119923666, 0.27372664), (0.15284927, 0.32575852), (0.13653883, 0.34015602), (0.119923666, 0.27372664), (0.15082496, 0.26328683), (0.18240722, 0.31727895), (0.15284927, 0.32575852), (0.15082496, 0.26328683), (0.20072183, 0.26024228), (0.22631593, 0.31371367), (0.18240722, 0.31727895), (0.20072183, 0.26024228), (0.26459143, 0.260117), (0.2826493, 0.3132597), (0.22631593, 0.31371367), (0.26459143, 0.260117), (0.3367377, 0.26210064), (0.34821698, 0.3148617), (0.2826493, 0.3132597), (0.3367377, 0.26210064), (0.41473117, 0.26551858), (0.42031142, 0.31751692), (0.34821698, 0.3148617), (0.41473117, 0.26551858), (0.49660426, 0.26792246), (0.49636188, 0.31992915), (0.42031142, 0.31751692), (0.49660426, 0.26792246), (0.5789204, 0.26940846), (0.5733689, 0.32181963), (0.49636188, 0.31992915), (0.5789204, 0.26940846), (0.65952456, 0.2720397), (0.6482604, 0.3237263), (0.5733689, 0.32181963), (0.65952456, 0.2720397), (0.7361633, 0.27444172), (0.7174932, 0.3253392), (0.6482604, 0.3237263), (0.7361633, 0.27444172), (0.8032832, 0.2740495), (0.77657485, 0.32617798), (0.7174932, 0.3253392), (0.8032832, 0.2740495), (0.8538434, 0.2732075), (0.82153094, 0.32783195), (0.77657485, 0.32617798), (0.8538434, 0.2732075), (0.8840696, 0.27986613), (0.8510027, 0.33379796), (0.82153094, 0.32783195), (0.8840696, 0.27986613), (0.896859, 0.29882815), (0.86686033, 0.34626135), (0.8510027, 0.33379796), (0.896859, 0.29882815), (0.8982292, 0.32676902), (0.8726985, 0.3640748), (0.86686033, 0.34626135), (0.8982292, 0.32676902), (0.8931895, 0.35706615), (0.87194586, 0.38411933), (0.8726985, 0.3640748), (0.8931895, 0.35706615), (0.88478386, 0.3848296), (0.86710817, 0.40353054), (0.87194586, 0.38411933), (0.88478386, 0.3848296), (0.8746347, 0.4080228), (0.85979944, 0.42067593), (0.86710817, 0.40353054), (0.8746347, 0.4080228), (0.86361384, 0.4265014), (0.85102785, 0.43503103), (0.85979944, 0.42067593), (0.15135385, 0.429862), (0.14262852, 0.41579476), (0.15954062, 0.42670846), (0.16594054, 0.437559), (0.14262852, 0.41579476), (0.13541271, 0.39887822), (0.15507044, 0.41420963), (0.15954062, 0.42670846), (0.13541271, 0.39887822), (0.13074699, 0.37949437), (0.15356086, 0.40050885), (0.15507044, 0.41420963), (0.13074699, 0.37949437), (0.13028388, 0.35905045), (0.15646751, 0.38658547), (0.15356086, 0.40050885), (0.13028388, 0.35905045), (0.13653883, 0.34015602), (0.1657333, 0.37390622), (0.15646751, 0.38658547), (0.13653883, 0.34015602), (0.15284927, 0.32575852), (0.18360968, 0.3639438), (0.1657333, 0.37390622), (0.15284927, 0.32575852), (0.18240722, 0.31727895), (0.21206766, 0.3574679), (0.18360968, 0.3639438), (0.18240722, 0.31727895), (0.22631593, 0.31371367), (0.25191826, 0.35424754), (0.21206766, 0.3574679), (0.22631593, 0.31371367), (0.2826493, 0.3132597), (0.30238, 0.35352755), (0.25191826, 0.35424754), (0.2826493, 0.3132597), (0.34821698, 0.3148617), (0.36156264, 0.35452864), (0.30238, 0.35352755), (0.34821698, 0.3148617), (0.42031142, 0.31751692), (0.4271584, 0.3564427), (0.36156264, 0.35452864), (0.42031142, 0.31751692), (0.49636188, 0.31992915), (0.49659812, 0.3584924), (0.4271584, 0.3564427), (0.49636188, 0.31992915), (0.5733689, 0.32181963), (0.56694925, 0.36034226), (0.49659812, 0.3584924), (0.5733689, 0.32181963), (0.6482604, 0.3237263), (0.63495386, 0.3620423), (0.56694925, 0.36034226), (0.6482604, 0.3237263), (0.7174932, 0.3253392), (0.6970898, 0.36359146), (0.63495386, 0.3620423), (0.7174932, 0.3253392), (0.77657485, 0.32617798), (0.74991554, 0.36514977), (0.6970898, 0.36359146), (0.77657485, 0.32617798), (0.82153094, 0.32783195), (0.79100484, 0.36768547), (0.74991554, 0.36514977), (0.82153094, 0.32783195), (0.8510027, 0.33379796), (0.81979316, 0.37276712), (0.79100484, 0.36768547), (0.8510027, 0.33379796), (0.86686033, 0.34626135), (0.83755076, 0.38137156), (0.81979316, 0.37276712), (0.86686033, 0.34626135), (0.8726985, 0.3640748), (0.8465679, 0.39307857), (0.83755076, 0.38137156), (0.8726985, 0.3640748), (0.87194586, 0.38411933), (0.8492475, 0.40645432), (0.8465679, 0.39307857), (0.87194586, 0.38411933), (0.86710817, 0.40353054), (0.8475676, 0.4199276), (0.8492475, 0.40645432), (0.86710817, 0.40353054), (0.85979944, 0.42067593), (0.84298694, 0.432395), (0.8475676, 0.4199276), (0.85979944, 0.42067593), (0.85102785, 0.43503103), (0.8365135, 0.44331107), (0.84298694, 0.432395), (0.16594054, 0.437559), (0.15954062, 0.42670846), (0.177625, 0.43633902), (0.18181099, 0.44465685), (0.15954062, 0.42670846), (0.15507044, 0.41420963), (0.1756324, 0.4271004), (0.177625, 0.43633902), (0.15507044, 0.41420963), (0.15356086, 0.40050885), (0.17677149, 0.41731012), (0.1756324, 0.4271004), (0.15356086, 0.40050885), (0.15646751, 0.38658547), (0.18226537, 0.4076191), (0.17677149, 0.41731012), (0.15646751, 0.38658547), (0.1657333, 0.37390622), (0.19359103, 0.398862), (0.18226537, 0.4076191), (0.1657333, 0.37390622), (0.18360968, 0.3639438), (0.21231528, 0.39182663), (0.19359103, 0.398862), (0.18360968, 0.3639438), (0.21206766, 0.3574679), (0.23973924, 0.38696954), (0.21231528, 0.39182663), (0.21206766, 0.3574679), (0.25191826, 0.35424754), (0.27645397, 0.38428754), (0.23973924, 0.38696954), (0.25191826, 0.35424754), (0.30238, 0.35352755), (0.32208198, 0.3834489), (0.27645397, 0.38428754), (0.30238, 0.35352755), (0.36156264, 0.35452864), (0.3753717, 0.38396442), (0.32208198, 0.3834489), (0.36156264, 0.35452864), (0.4271584, 0.3564427), (0.43445268, 0.38529366), (0.3753717, 0.38396442), (0.4271584, 0.3564427), (0.49659812, 0.3584924), (0.49698922, 0.3869356), (0.43445268, 0.38529366), (0.49659812, 0.3584924), (0.56694925, 0.36034226), (0.56024444, 0.38860315), (0.49698922, 0.3869356), (0.56694925, 0.36034226), (0.63495386, 0.3620423), (0.6212077, 0.39022544), (0.56024444, 0.38860315), (0.63495386, 0.3620423), (0.6970898, 0.36359146), (0.67682165, 0.39185578), (0.6212077, 0.39022544), (0.6970898, 0.36359146), (0.74991554, 0.36514977), (0.72445774, 0.39373446), (0.67682165, 0.39185578), (0.74991554, 0.36514977), (0.79100484, 0.36768547), (0.7624598, 0.39642063), (0.72445774, 0.39373446), (0.79100484, 0.36768547), (0.81979316, 0.37276712), (0.79047906, 0.4006461), (0.7624598, 0.39642063), (0.81979316, 0.37276712), (0.83755076, 0.38137156), (0.8093549, 0.40685663), (0.79047906, 0.4006461), (0.83755076, 0.38137156), (0.8465679, 0.39307857), (0.8206258, 0.41488895), (0.8093549, 0.40685663), (0.8465679, 0.39307857), (0.8492475, 0.40645432), (0.82599497, 0.42405778), (0.8206258, 0.41488895), (0.8492475, 0.40645432), (0.8475676, 0.4199276), (0.8270126, 0.4335275), (0.82599497, 0.42405778), (0.8475676, 0.4199276), (0.84298694, 0.432395), (0.82491773, 0.44259995), (0.8270126, 0.4335275), (0.84298694, 0.432395), (0.8365135, 0.44331107), (0.8206481, 0.45084438), (0.82491773, 0.44259995), (0.18181099, 0.44465685), (0.177625, 0.43633902), (0.19626385, 0.44457778), (0.19843103, 0.4509696), (0.177625, 0.43633902), (0.1756324, 0.4271004), (0.19642216, 0.4376857), (0.19626385, 0.44457778), (0.1756324, 0.4271004), (0.17677149, 0.41731012), (0.19972536, 0.43057203), (0.19642216, 0.4376857), (0.17677149, 0.41731012), (0.18226537, 0.4076191), (0.20716944, 0.42365554), (0.19972536, 0.43057203), (0.18226537, 0.4076191), (0.19359103, 0.398862), (0.21987762, 0.4174339), (0.20716944, 0.42365554), (0.19359103, 0.398862), (0.21231528, 0.39182663), (0.2389644, 0.41235712), (0.21987762, 0.4174339), (0.21231528, 0.39182663), (0.23973924, 0.38696954), (0.26531717, 0.40870994), (0.2389644, 0.41235712), (0.23973924, 0.38696954), (0.27645397, 0.38428754), (0.29933825, 0.4065411), (0.26531717, 0.40870994), (0.27645397, 0.38428754), (0.32208198, 0.3834489), (0.34077704, 0.40570304), (0.29933825, 0.4065411), (0.32208198, 0.3834489), (0.3753717, 0.38396442), (0.38870105, 0.40591228), (0.34077704, 0.40570304), (0.3753717, 0.38396442), (0.43445268, 0.38529366), (0.44157892, 0.40682486), (0.38870105, 0.40591228), (0.43445268, 0.38529366), (0.49698922, 0.3869356), (0.49738708, 0.4081194), (0.44157892, 0.40682486), (0.49698922, 0.3869356), (0.56024444, 0.38860315), (0.5537301, 0.409577), (0.49738708, 0.4081194), (0.56024444, 0.38860315), (0.6212077, 0.39022544), (0.60801333, 0.41111454), (0.5537301, 0.409577), (0.6212077, 0.39022544), (0.67682165, 0.39185578), (0.6577311, 0.41276842), (0.60801333, 0.41111454), (0.67682165, 0.39185578), (0.72445774, 0.39373446), (0.7008404, 0.4147113), (0.6577311, 0.41276842), (0.72445774, 0.39373446), (0.7624598, 0.39642063), (0.73608935, 0.41725525), (0.7008404, 0.4147113), (0.7624598, 0.39642063), (0.79047906, 0.4006461), (0.7631676, 0.42075518), (0.73608935, 0.41725525), (0.79047906, 0.4006461), (0.8093549, 0.40685663), (0.7826014, 0.42542255), (0.7631676, 0.42075518), (0.8093549, 0.40685663), (0.8206258, 0.41488895), (0.7954171, 0.43117645), (0.7826014, 0.42542255), (0.8206258, 0.41488895), (0.82599497, 0.42405778), (0.80285615, 0.43768534), (0.7954171, 0.43117645), (0.82599497, 0.42405778), (0.8270126, 0.4335275), (0.80610555, 0.444493), (0.80285615, 0.43768534), (0.8270126, 0.4335275), (0.82491773, 0.44259995), (0.80619735, 0.4511758), (0.80610555, 0.444493), (0.82491773, 0.44259995), (0.8206481, 0.45084438), (0.80396354, 0.4574277), (0.80619735, 0.4511758), (0.19843103, 0.4509696), (0.19626385, 0.44457778), (0.21496122, 0.4515209), (0.21534613, 0.45646626), (0.19626385, 0.44457778), (0.19642216, 0.4376857), (0.21693264, 0.44630983), (0.21496122, 0.4515209), (0.19642216, 0.4376857), (0.19972536, 0.43057203), (0.22195894, 0.4410398), (0.21693264, 0.44630983), (0.19972536, 0.43057203), (0.20716944, 0.42365554), (0.23083745, 0.43598452), (0.22195894, 0.4410398), (0.20716944, 0.42365554), (0.21987762, 0.4174339), (0.24441878, 0.43144888), (0.23083745, 0.43598452), (0.21987762, 0.4174339), (0.2389644, 0.41235712), (0.26350754, 0.42770734), (0.24441878, 0.43144888), (0.2389644, 0.41235712), (0.26531717, 0.40870994), (0.28870708, 0.4249436), (0.26350754, 0.42770734), (0.26531717, 0.40870994), (0.29933825, 0.4065411), (0.32026622, 0.4232111), (0.28870708, 0.4249436), (0.29933825, 0.4065411), (0.34077704, 0.40570304), (0.35795644, 0.42244533), (0.32026622, 0.4232111), (0.34077704, 0.40570304), (0.38870105, 0.40591228), (0.40101907, 0.4224869), (0.35795644, 0.42244533), (0.38870105, 0.40591228), (0.44157892, 0.40682486), (0.44818014, 0.4231202), (0.40101907, 0.4224869), (0.44157892, 0.40682486), (0.49738708, 0.4081194), (0.49774447, 0.42414534), (0.44818014, 0.4231202), (0.49738708, 0.4081194), (0.5537301, 0.409577), (0.5476944, 0.42540556), (0.49774447, 0.42414534), (0.5537301, 0.409577), (0.60801333, 0.41111454), (0.5958913, 0.4268269), (0.5476944, 0.42540556), (0.60801333, 0.41111454), (0.6577311, 0.41276842), (0.6403205, 0.4284201), (0.5958913, 0.4268269), (0.6577311, 0.41276842), (0.7008404, 0.4147113), (0.6793683, 0.43028492), (0.6403205, 0.4284201), (0.7008404, 0.4147113), (0.73608935, 0.41725525), (0.71203136, 0.4325861), (0.6793683, 0.43028492), (0.73608935, 0.41725525), (0.7631676, 0.42075518), (0.7379936, 0.43550083), (0.71203136, 0.4325861), (0.7631676, 0.42075518), (0.7826014, 0.42542255), (0.7575395, 0.4391248), (0.7379936, 0.43550083), (0.7826014, 0.42542255), (0.7954171, 0.43117645), (0.77135915, 0.4434191), (0.7575395, 0.4391248), (0.7954171, 0.43117645), (0.80285615, 0.43768534), (0.78033465, 0.44820777), (0.77135915, 0.4434191), (0.80285615, 0.43768534), (0.80610555, 0.444493), (0.78538173, 0.45323634), (0.78033465, 0.44820777), (0.80610555, 0.444493), (0.80619735, 0.4511758), (0.7873346, 0.45825124), (0.78538173, 0.45323634), (0.80619735, 0.4511758), (0.80396354, 0.4574277), (0.7869127, 0.46304452), (0.7873346, 0.45825124), (0.21534613, 0.45646626), (0.21496122, 0.4515209), (0.2333345, 0.45734152), (0.23219068, 0.46120557), (0.21496122, 0.4515209), (0.21693264, 0.44630983), (0.2367968, 0.45334575), (0.2333345, 0.45734152), (0.21693264, 0.44630983), (0.22195894, 0.4410398), (0.24315426, 0.4493671), (0.2367968, 0.45334575), (0.22195894, 0.4410398), (0.23083745, 0.43598452), (0.25304297, 0.4455893), (0.24315426, 0.4493671), (0.23083745, 0.43598452), (0.24441878, 0.43144888), (0.26710546, 0.44220796), (0.25304297, 0.4455893), (0.24441878, 0.43144888), (0.26350754, 0.42770734), (0.2859144, 0.43939537), (0.26710546, 0.44220796), (0.26350754, 0.42770734), (0.28870708, 0.4249436), (0.30987847, 0.43727896), (0.2859144, 0.43939537), (0.28870708, 0.4249436), (0.32026622, 0.4232111), (0.33912343, 0.43590033), (0.30987847, 0.43727896), (0.32026622, 0.4232111), (0.35795644, 0.42244533), (0.3734106, 0.43523803), (0.33912343, 0.43590033), (0.35795644, 0.42244533), (0.40101907, 0.4224869), (0.41209027, 0.43519822), (0.3734106, 0.43523803), (0.40101907, 0.4224869), (0.44818014, 0.4231202), (0.4541058, 0.4356575), (0.41209027, 0.43519822), (0.44818014, 0.4231202), (0.49774447, 0.42414534), (0.49804813, 0.43648157), (0.4541058, 0.4356575), (0.49774447, 0.42414534), (0.5476944, 0.42540556), (0.54226846, 0.43756464), (0.49804813, 0.43648157), (0.5476944, 0.42540556), (0.5958913, 0.4268269), (0.58504146, 0.43884736), (0.54226846, 0.43756464), (0.5958913, 0.4268269), (0.6403205, 0.4284201), (0.6247616, 0.44032416), (0.58504146, 0.43884736), (0.6403205, 0.4284201), (0.6793683, 0.43028492), (0.66013545, 0.44204032), (0.6247616, 0.44032416), (0.6793683, 0.43028492), (0.71203136, 0.4325861), (0.6903342, 0.4440773), (0.66013545, 0.44204032), (0.71203136, 0.4325861), (0.7379936, 0.43550083), (0.71503127, 0.4465233), (0.6903342, 0.4440773), (0.7379936, 0.43550083), (0.7575395, 0.4391248), (0.73434794, 0.44941726), (0.71503127, 0.4465233), (0.7575395, 0.4391248), (0.77135915, 0.4434191), (0.74872684, 0.45273617), (0.73434794, 0.44941726), (0.77135915, 0.4434191), (0.78033465, 0.44820777), (0.75879234, 0.4563753), (0.74872684, 0.45273617), (0.78033465, 0.44820777), (0.78538173, 0.45323634), (0.76524127, 0.46019694), (0.75879234, 0.4563753), (0.78538173, 0.45323634), (0.7873346, 0.45825124), (0.7687349, 0.464041), (0.76524127, 0.46019694), (0.7873346, 0.45825124), (0.7869127, 0.46304452), (0.76987827, 0.4677719), (0.7687349, 0.464041), (0.23219068, 0.46120557), (0.2333345, 0.45734152), (0.25110206, 0.46222198), (0.24867927, 0.4652764), (0.2333345, 0.45734152), (0.2367968, 0.45334575), (0.2557531, 0.45911407), (0.25110206, 0.46222198), (0.2367968, 0.45334575), (0.24315426, 0.4493671), (0.2631063, 0.4560599), (0.2557531, 0.45911407), (0.24315426, 0.4493671), (0.25304297, 0.4455893), (0.27365857, 0.45318103), (0.2631063, 0.4560599), (0.25304297, 0.4455893), (0.26710546, 0.44220796), (0.28789103, 0.45061168), (0.27365857, 0.45318103), (0.26710546, 0.44220796), (0.2859144, 0.43939537), (0.30621073, 0.4484638), (0.28789103, 0.45061168), (0.2859144, 0.43939537), (0.30987847, 0.43727896), (0.32887924, 0.44682515), (0.30621073, 0.4484638), (0.30987847, 0.43727896), (0.33912343, 0.43590033), (0.3559303, 0.4457316), (0.32887924, 0.44682515), (0.33912343, 0.43590033), (0.3734106, 0.43523803), (0.3871185, 0.44517776), (0.3559303, 0.4457316), (0.3734106, 0.43523803), (0.41209027, 0.43519822), (0.4218768, 0.44511214), (0.3871185, 0.44517776), (0.41209027, 0.43519822), (0.4541058, 0.4356575), (0.4593212, 0.4454592), (0.4218768, 0.44511214), (0.4541058, 0.4356575), (0.49804813, 0.43648157), (0.4983007, 0.44613564), (0.4593212, 0.4454592), (0.49804813, 0.43648157), (0.54226846, 0.43756464), (0.5374829, 0.44706735), (0.4983007, 0.44613564), (0.54226846, 0.43756464), (0.58504146, 0.43884736), (0.5754866, 0.4482063), (0.5374829, 0.44706735), (0.58504146, 0.43884736), (0.6247616, 0.44032416), (0.6110323, 0.44953766), (0.5754866, 0.4482063), (0.6247616, 0.44032416), (0.66013545, 0.44204032), (0.6430856, 0.45107973), (0.6110323, 0.44953766), (0.66013545, 0.44204032), (0.6903342, 0.4440773), (0.6709436, 0.4528646), (0.6430856, 0.45107973), (0.6903342, 0.4440773), (0.71503127, 0.4465233), (0.6942793, 0.4549314), (0.6709436, 0.4528646), (0.71503127, 0.4465233), (0.73434794, 0.44941726), (0.71310526, 0.45729235), (0.6942793, 0.4549314), (0.73434794, 0.44941726), (0.74872684, 0.45273617), (0.727694, 0.45992914), (0.71310526, 0.45729235), (0.74872684, 0.45273617), (0.75879234, 0.4563753), (0.7384812, 0.46278197), (0.727694, 0.45992914), (0.75879234, 0.4563753), (0.76524127, 0.46019694), (0.7459779, 0.4657632), (0.7384812, 0.46278197), (0.76524127, 0.46019694), (0.7687349, 0.464041), (0.7507066, 0.46877685), (0.7459779, 0.4657632), (0.7687349, 0.464041), (0.76987827, 0.4677719), (0.75316757, 0.4717293), (0.7507066, 0.46877685), (0.24867927, 0.4652764), (0.25110206, 0.46222198), (0.26806954, 0.46633777), (0.26460254, 0.46877524), (0.25110206, 0.46222198), (0.2557531, 0.45911407), (0.2736399, 0.463887), (0.26806954, 0.46633777), (0.2557531, 0.45911407), (0.2631063, 0.4560599), (0.28169984, 0.46150216), (0.2736399, 0.463887), (0.2631063, 0.4560599), (0.27365857, 0.45318103), (0.2926336, 0.4592747), (0.28169984, 0.46150216), (0.27365857, 0.45318103), (0.28789103, 0.45061168), (0.3067982, 0.45728928), (0.2926336, 0.4592747), (0.28789103, 0.45061168), (0.30621073, 0.4484638), (0.32447582, 0.45562795), (0.3067982, 0.45728928), (0.30621073, 0.4484638), (0.32887924, 0.44682515), (0.3458179, 0.45434764), (0.32447582, 0.45562795), (0.32887924, 0.44682515), (0.3559303, 0.4457316), (0.37080023, 0.45347992), (0.3458179, 0.45434764), (0.3559303, 0.4457316), (0.3871185, 0.44517776), (0.39917248, 0.45302948), (0.37080023, 0.45347992), (0.3871185, 0.44517776), (0.4218768, 0.44511214), (0.4304404, 0.45296413), (0.39917248, 0.45302948), (0.4218768, 0.44511214), (0.4593212, 0.4454592), (0.46386594, 0.45324218), (0.4304404, 0.45296413), (0.4593212, 0.4454592), (0.4983007, 0.44613564), (0.49850798, 0.45380628), (0.46386594, 0.45324218), (0.4983007, 0.44613564), (0.5374829, 0.44706735), (0.5332998, 0.4546076), (0.49850798, 0.45380628), (0.5374829, 0.44706735), (0.5754866, 0.4482063), (0.5671426, 0.45561185), (0.5332998, 0.4546076), (0.5754866, 0.4482063), (0.6110323, 0.44953766), (0.5990145, 0.4567949), (0.5671426, 0.45561185), (0.6110323, 0.44953766), (0.6430856, 0.45107973), (0.6280689, 0.45815918), (0.5990145, 0.4567949), (0.6430856, 0.45107973), (0.6709436, 0.4528646), (0.65372294, 0.45971394), (0.6280689, 0.45815918), (0.6709436, 0.4528646), (0.6942793, 0.4549314), (0.6756575, 0.46147105), (0.65372294, 0.45971394), (0.6942793, 0.4549314), (0.71310526, 0.45729235), (0.693812, 0.46343157), (0.6756575, 0.46147105), (0.71310526, 0.45729235), (0.727694, 0.45992914), (0.7083406, 0.46557578), (0.693812, 0.46343157), (0.727694, 0.45992914), (0.7384812, 0.46278197), (0.7195383, 0.46786758), (0.7083406, 0.46557578), (0.7384812, 0.46278197), (0.7459779, 0.4657632), (0.7277764, 0.47024795), (0.7195383, 0.46786758), (0.7459779, 0.4657632), (0.7507066, 0.46877685), (0.7334674, 0.47265923), (0.7277764, 0.47024795), (0.7507066, 0.46877685), (0.75316757, 0.4717293), (0.73700315, 0.4750386), (0.7334674, 0.47265923), (0.26460254, 0.46877524), (0.26806954, 0.46633777), (0.28410763, 0.46982375), (0.2798131, 0.4717883), (0.26806954, 0.46633777), (0.2736399, 0.463887), (0.290366, 0.46787012), (0.28410763, 0.46982375), (0.2736399, 0.463887), (0.28169984, 0.46150216), (0.2988932, 0.46598616), (0.290366, 0.46787012), (0.28169984, 0.46150216), (0.2926336, 0.4592747), (0.3099856, 0.4642351), (0.2988932, 0.46598616), (0.2926336, 0.4592747), (0.3067982, 0.45728928), (0.3239014, 0.46268168), (0.3099856, 0.4642351), (0.3067982, 0.45728928), (0.32447582, 0.45562795), (0.34083018, 0.46138057), (0.3239014, 0.46268168), (0.32447582, 0.45562795), (0.3458179, 0.45434764), (0.3608493, 0.46037376), (0.34083018, 0.46138057), (0.3458179, 0.45434764), (0.37080023, 0.45347992), (0.3838949, 0.45968774), (0.3608493, 0.46037376), (0.37080023, 0.45347992), (0.39917248, 0.45302948), (0.40971982, 0.45932695), (0.3838949, 0.45968774), (0.39917248, 0.45302948), (0.4304404, 0.45296413), (0.4378934, 0.45927447), (0.40971982, 0.45932695), (0.4304404, 0.45296413), (0.46386594, 0.45324218), (0.46780336, 0.45950744), (0.4378934, 0.45927447), (0.46386594, 0.45324218), (0.49850798, 0.45380628), (0.4986823, 0.45998806), (0.46780336, 0.45950744), (0.49850798, 0.45380628), (0.5332998, 0.4546076), (0.5296698, 0.46068075), (0.4986823, 0.45998806), (0.5332998, 0.4546076), (0.5671426, 0.45561185), (0.55989355, 0.46155927), (0.5296698, 0.46068075), (0.5671426, 0.45561185), (0.5990145, 0.4567949), (0.5885321, 0.46260062), (0.55989355, 0.46155927), (0.5990145, 0.4567949), (0.6280689, 0.45815918), (0.61489826, 0.4637988), (0.5885321, 0.46260062), (0.6280689, 0.45815918), (0.65372294, 0.45971394), (0.63849473, 0.4651503), (0.61489826, 0.4637988), (0.65372294, 0.45971394), (0.6756575, 0.46147105), (0.6590264, 0.46665302), (0.63849473, 0.4651503), (0.6756575, 0.46147105), (0.693812, 0.46343157), (0.67639565, 0.46830064), (0.6590264, 0.46665302), (0.693812, 0.46343157), (0.7083406, 0.46557578), (0.6906637, 0.4700788), (0.67639565, 0.46830064), (0.7083406, 0.46557578), (0.7195383, 0.46786758), (0.7020267, 0.4719559), (0.6906637, 0.4700788), (0.7195383, 0.46786758), (0.7277764, 0.47024795), (0.7107553, 0.4738989), (0.7020267, 0.4719559), (0.7277764, 0.47024795), (0.7334674, 0.47265923), (0.71715814, 0.47586566), (0.7107553, 0.4738989), (0.7334674, 0.47265923), (0.73700315, 0.4750386), (0.7215501, 0.4778128), (0.71715814, 0.47586566), (0.2798131, 0.4717883), (0.28410763, 0.46982375), (0.2991512, 0.47279963), (0.29421654, 0.47439817), (0.28410763, 0.46982375), (0.290366, 0.46787012), (0.30589572, 0.4712257), (0.2991512, 0.47279963), (0.290366, 0.46787012), (0.2988932, 0.46598616), (0.31469458, 0.46971866), (0.30589572, 0.4712257), (0.2988932, 0.46598616), (0.3099856, 0.4642351), (0.3257705, 0.46832785), (0.31469458, 0.46971866), (0.3099856, 0.4642351), (0.3239014, 0.46268168), (0.33930865, 0.4670989), (0.3257705, 0.46832785), (0.3239014, 0.46268168), (0.34083018, 0.46138057), (0.35542744, 0.4660705), (0.33930865, 0.4670989), (0.34083018, 0.46138057), (0.3608493, 0.46037376), (0.3741546, 0.46527362), (0.35542744, 0.4660705), (0.3608493, 0.46037376), (0.3838949, 0.45968774), (0.39539832, 0.4647312), (0.3741546, 0.46527362), (0.3838949, 0.45968774), (0.40971982, 0.45932695), (0.41892684, 0.46444625), (0.39539832, 0.4647312), (0.40971982, 0.45932695), (0.4378934, 0.45927447), (0.4443676, 0.46441367), (0.41892684, 0.46444625), (0.4378934, 0.45927447), (0.46780336, 0.45950744), (0.47120816, 0.46461707), (0.4443676, 0.46441367), (0.46780336, 0.45950744), (0.4986823, 0.45998806), (0.49882448, 0.46503204), (0.47120816, 0.46461707), (0.4986823, 0.45998806), (0.5296698, 0.46068075), (0.52652305, 0.46563414), (0.49882448, 0.46503204), (0.5296698, 0.46068075), (0.55989355, 0.46155927), (0.5536028, 0.46639943), (0.52652305, 0.46563414), (0.55989355, 0.46155927), (0.5885321, 0.46260062), (0.579404, 0.4673137), (0.5536028, 0.46639943), (0.5885321, 0.46260062), (0.61489826, 0.4637988), (0.60336703, 0.4683619), (0.579404, 0.4673137), (0.61489826, 0.4637988), (0.63849473, 0.4651503), (0.6250652, 0.46953702), (0.60336703, 0.4683619), (0.63849473, 0.4651503), (0.6590264, 0.46665302), (0.64422625, 0.47082743), (0.6250652, 0.46953702), (0.6590264, 0.46665302), (0.67639565, 0.46830064), (0.6607383, 0.47222817), (0.64422625, 0.47082743), (0.67639565, 0.46830064), (0.6906637, 0.4700788), (0.67460704, 0.4737233), (0.6607383, 0.47222817), (0.6906637, 0.4700788), (0.7020267, 0.4719559), (0.685949, 0.47528887), (0.67460704, 0.4737233), (0.7020267, 0.4719559), (0.7107553, 0.4738989), (0.69495803, 0.4769005), (0.685949, 0.47528887), (0.7107553, 0.4738989), (0.71715814, 0.47586566), (0.7018616, 0.47853178), (0.69495803, 0.4769005), (0.71715814, 0.47586566), (0.7215501, 0.4778128), (0.7069108, 0.4801504), (0.7018616, 0.47853178), (0.29421654, 0.47439817), (0.2991512, 0.47279963), (0.31317115, 0.47535542), (0.3077637, 0.4766672), (0.2991512, 0.47279963), (0.30589572, 0.4712257), (0.32023767, 0.47407702), (0.31317115, 0.47535542), (0.30589572, 0.4712257), (0.31469458, 0.46971866), (0.32915285, 0.47286174), (0.32023767, 0.47407702), (0.31469458, 0.46971866), (0.3257705, 0.46832785), (0.34007892, 0.47174567), (0.32915285, 0.47286174), (0.3257705, 0.46832785), (0.33930865, 0.4670989), (0.35314798, 0.4707625), (0.34007892, 0.47174567), (0.33930865, 0.4670989), (0.35542744, 0.4660705), (0.36842862, 0.46994478), (0.35314798, 0.4707625), (0.35542744, 0.4660705), (0.3741546, 0.46527362), (0.38591224, 0.46931186), (0.36842862, 0.46994478), (0.3741546, 0.46527362), (0.39539832, 0.4647312), (0.40549475, 0.4688833), (0.38591224, 0.46931186), (0.39539832, 0.4647312), (0.41892684, 0.46444625), (0.4269626, 0.46866247), (0.40549475, 0.4688833), (0.41892684, 0.46444625), (0.4443676, 0.46441367), (0.4499935, 0.4686515), (0.4269626, 0.46866247), (0.4443676, 0.46441367), (0.47120816, 0.46461707), (0.47415674, 0.46883327), (0.4499935, 0.4686515), (0.47120816, 0.46461707), (0.49882448, 0.46503204), (0.49894428, 0.4691961), (0.47415674, 0.46883327), (0.49882448, 0.46503204), (0.52652305, 0.46563414), (0.5237951, 0.46972176), (0.49894428, 0.4691961), (0.52652305, 0.46563414), (0.5536028, 0.46639943), (0.54814565, 0.47039178), (0.5237951, 0.46972176), (0.5536028, 0.46639943), (0.579404, 0.4673137), (0.57145745, 0.47119048), (0.54814565, 0.47039178), (0.579404, 0.4673137), (0.60336703, 0.4683619), (0.5932684, 0.4721056), (0.57145745, 0.47119048), (0.60336703, 0.4683619), (0.6250652, 0.46953702), (0.6132253, 0.47312692), (0.5932684, 0.4721056), (0.6250652, 0.46953702), (0.64422625, 0.47082743), (0.63108075, 0.47424275), (0.6132253, 0.47312692), (0.64422625, 0.47082743), (0.6607383, 0.47222817), (0.64670503, 0.47544348), (0.63108075, 0.47424275), (0.6607383, 0.47222817), (0.67460704, 0.4737233), (0.66007525, 0.47671297), (0.64670503, 0.47544348), (0.67460704, 0.4737233), (0.685949, 0.47528887), (0.67125714, 0.47803703), (0.66007525, 0.47671297), (0.685949, 0.47528887), (0.69495803, 0.4769005), (0.6803808, 0.47939476), (0.67125714, 0.47803703), (0.69495803, 0.4769005), (0.7018616, 0.47853178), (0.6876107, 0.48076674), (0.6803808, 0.47939476), (0.7018616, 0.47853178), (0.7069108, 0.4801504), (0.693145, 0.48212957), (0.6876107, 0.48076674)] (
interpolation = "faceVarying"
)
texCoord2f[] primvars:st = [(-0.5416666, -0.5416666), (-0.4548611, -0.5416666), (-0.4548611, -0.45486104), (-0.5416666, -0.45486104), (-0.4548611, -0.5416666), (-0.36805552, -0.5416666), (-0.36805552, -0.45486104), (-0.4548611, -0.45486104), (-0.36805552, -0.5416666), (-0.28125, -0.5416666), (-0.28125, -0.45486104), (-0.36805552, -0.45486104), (-0.28125, -0.5416666), (-0.19444448, -0.5416666), (-0.19444448, -0.45486104), (-0.28125, -0.45486104), (-0.19444448, -0.5416666), (-0.107638896, -0.5416666), (-0.107638896, -0.45486104), (-0.19444448, -0.45486104), (-0.107638896, -0.5416666), (-0.020833313, -0.5416666), (-0.020833313, -0.45486104), (-0.107638896, -0.45486104), (-0.020833313, -0.5416666), (0.06597221, -0.5416666), (0.06597221, -0.45486104), (-0.020833313, -0.45486104), (0.06597221, -0.5416666), (0.15277776, -0.5416666), (0.15277776, -0.45486104), (0.06597221, -0.45486104), (0.15277776, -0.5416666), (0.23958334, -0.5416666), (0.23958334, -0.45486104), (0.15277776, -0.45486104), (0.23958334, -0.5416666), (0.32638887, -0.5416666), (0.32638887, -0.45486104), (0.23958334, -0.45486104), (0.32638887, -0.5416666), (0.4131944, -0.5416666), (0.4131944, -0.45486104), (0.32638887, -0.45486104), (0.4131944, -0.5416666), (0.5, -0.5416666), (0.5, -0.45486104), (0.4131944, -0.45486104), (0.5, -0.5416666), (0.5868055, -0.5416666), (0.5868055, -0.45486104), (0.5, -0.45486104), (0.5868055, -0.5416666), (0.67361104, -0.5416666), (0.67361104, -0.45486104), (0.5868055, -0.45486104), (0.67361104, -0.5416666), (0.7604166, -0.5416666), (0.7604166, -0.45486104), (0.67361104, -0.45486104), (0.7604166, -0.5416666), (0.8472222, -0.5416666), (0.8472222, -0.45486104), (0.7604166, -0.45486104), (0.8472222, -0.5416666), (0.9340277, -0.5416666), (0.9340277, -0.45486104), (0.8472222, -0.45486104), (0.9340277, -0.5416666), (1.0208333, -0.5416666), (1.0208333, -0.45486104), (0.9340277, -0.45486104), (1.0208333, -0.5416666), (1.1076388, -0.5416666), (1.1076388, -0.45486104), (1.0208333, -0.45486104), (1.1076388, -0.5416666), (1.1944444, -0.5416666), (1.1944444, -0.45486104), (1.1076388, -0.45486104), (1.1944444, -0.5416666), (1.28125, -0.5416666), (1.28125, -0.45486104), (1.1944444, -0.45486104), (1.28125, -0.5416666), (1.3680553, -0.5416666), (1.3680553, -0.45486104), (1.28125, -0.45486104), (1.3680553, -0.5416666), (1.454861, -0.5416666), (1.454861, -0.45486104), (1.3680553, -0.45486104), (1.454861, -0.5416666), (1.5416666, -0.5416666), (1.5416666, -0.45486104), (1.454861, -0.45486104), (-0.5416666, -0.45486104), (-0.4548611, -0.45486104), (-0.4548611, -0.36805552), (-0.5416666, -0.36805552), (-0.4548611, -0.45486104), (-0.36805552, -0.45486104), (-0.36805552, -0.36805552), (-0.4548611, -0.36805552), (-0.36805552, -0.45486104), (-0.28125, -0.45486104), (-0.28125, -0.36805552), (-0.36805552, -0.36805552), (-0.28125, -0.45486104), (-0.19444448, -0.45486104), (-0.19444448, -0.36805552), (-0.28125, -0.36805552), (-0.19444448, -0.45486104), (-0.107638896, -0.45486104), (-0.107638896, -0.36805552), (-0.19444448, -0.36805552), (-0.107638896, -0.45486104), (-0.020833313, -0.45486104), (-0.020833313, -0.36805552), (-0.107638896, -0.36805552), (-0.020833313, -0.45486104), (0.06597221, -0.45486104), (0.06597221, -0.36805552), (-0.020833313, -0.36805552), (0.06597221, -0.45486104), (0.15277776, -0.45486104), (0.15277776, -0.36805552), (0.06597221, -0.36805552), (0.15277776, -0.45486104), (0.23958334, -0.45486104), (0.23958334, -0.36805552), (0.15277776, -0.36805552), (0.23958334, -0.45486104), (0.32638887, -0.45486104), (0.32638887, -0.36805552), (0.23958334, -0.36805552), (0.32638887, -0.45486104), (0.4131944, -0.45486104), (0.4131944, -0.36805552), (0.32638887, -0.36805552), (0.4131944, -0.45486104), (0.5, -0.45486104), (0.5, -0.36805552), (0.4131944, -0.36805552), (0.5, -0.45486104), (0.5868055, -0.45486104), (0.5868055, -0.36805552), (0.5, -0.36805552), (0.5868055, -0.45486104), (0.67361104, -0.45486104), (0.67361104, -0.36805552), (0.5868055, -0.36805552), (0.67361104, -0.45486104), (0.7604166, -0.45486104), (0.7604166, -0.36805552), (0.67361104, -0.36805552), (0.7604166, -0.45486104), (0.8472222, -0.45486104), (0.8472222, -0.36805552), (0.7604166, -0.36805552), (0.8472222, -0.45486104), (0.9340277, -0.45486104), (0.9340277, -0.36805552), (0.8472222, -0.36805552), (0.9340277, -0.45486104), (1.0208333, -0.45486104), (1.0208333, -0.36805552), (0.9340277, -0.36805552), (1.0208333, -0.45486104), (1.1076388, -0.45486104), (1.1076388, -0.36805552), (1.0208333, -0.36805552), (1.1076388, -0.45486104), (1.1944444, -0.45486104), (1.1944444, -0.36805552), (1.1076388, -0.36805552), (1.1944444, -0.45486104), (1.28125, -0.45486104), (1.28125, -0.36805552), (1.1944444, -0.36805552), (1.28125, -0.45486104), (1.3680553, -0.45486104), (1.3680553, -0.36805552), (1.28125, -0.36805552), (1.3680553, -0.45486104), (1.454861, -0.45486104), (1.454861, -0.36805552), (1.3680553, -0.36805552), (1.454861, -0.45486104), (1.5416666, -0.45486104), (1.5416666, -0.36805552), (1.454861, -0.36805552), (-0.5416666, -0.36805552), (-0.4548611, -0.36805552), (-0.4548611, -0.28124994), (-0.5416666, -0.28124994), (-0.4548611, -0.36805552), (-0.36805552, -0.36805552), (-0.36805552, -0.28124994), (-0.4548611, -0.28124994), (-0.36805552, -0.36805552), (-0.28125, -0.36805552), (-0.28125, -0.28124994), (-0.36805552, -0.28124994), (-0.28125, -0.36805552), (-0.19444448, -0.36805552), (-0.19444448, -0.28124994), (-0.28125, -0.28124994), (-0.19444448, -0.36805552), (-0.107638896, -0.36805552), (-0.107638896, -0.28124994), (-0.19444448, -0.28124994), (-0.107638896, -0.36805552), (-0.020833313, -0.36805552), (-0.020833313, -0.28124994), (-0.107638896, -0.28124994), (-0.020833313, -0.36805552), (0.06597221, -0.36805552), (0.06597221, -0.28124994), (-0.020833313, -0.28124994), (0.06597221, -0.36805552), (0.15277776, -0.36805552), (0.15277776, -0.28124994), (0.06597221, -0.28124994), (0.15277776, -0.36805552), (0.23958334, -0.36805552), (0.23958334, -0.28124994), (0.15277776, -0.28124994), (0.23958334, -0.36805552), (0.32638887, -0.36805552), (0.32638887, -0.28124994), (0.23958334, -0.28124994), (0.32638887, -0.36805552), (0.4131944, -0.36805552), (0.4131944, -0.28124994), (0.32638887, -0.28124994), (0.4131944, -0.36805552), (0.5, -0.36805552), (0.5, -0.28124994), (0.4131944, -0.28124994), (0.5, -0.36805552), (0.5868055, -0.36805552), (0.5868055, -0.28124994), (0.5, -0.28124994), (0.5868055, -0.36805552), (0.67361104, -0.36805552), (0.67361104, -0.28124994), (0.5868055, -0.28124994), (0.67361104, -0.36805552), (0.7604166, -0.36805552), (0.7604166, -0.28124994), (0.67361104, -0.28124994), (0.7604166, -0.36805552), (0.8472222, -0.36805552), (0.8472222, -0.28124994), (0.7604166, -0.28124994), (0.8472222, -0.36805552), (0.9340277, -0.36805552), (0.9340277, -0.28124994), (0.8472222, -0.28124994), (0.9340277, -0.36805552), (1.0208333, -0.36805552), (1.0208333, -0.28124994), (0.9340277, -0.28124994), (1.0208333, -0.36805552), (1.1076388, -0.36805552), (1.1076388, -0.28124994), (1.0208333, -0.28124994), (1.1076388, -0.36805552), (1.1944444, -0.36805552), (1.1944444, -0.28124994), (1.1076388, -0.28124994), (1.1944444, -0.36805552), (1.28125, -0.36805552), (1.28125, -0.28124994), (1.1944444, -0.28124994), (1.28125, -0.36805552), (1.3680553, -0.36805552), (1.3680553, -0.28124994), (1.28125, -0.28124994), (1.3680553, -0.36805552), (1.454861, -0.36805552), (1.454861, -0.28124994), (1.3680553, -0.28124994), (1.454861, -0.36805552), (1.5416666, -0.36805552), (1.5416666, -0.28124994), (1.454861, -0.28124994), (-0.5416666, -0.28124994), (-0.4548611, -0.28124994), (-0.4548611, -0.19444448), (-0.5416666, -0.19444448), (-0.4548611, -0.28124994), (-0.36805552, -0.28124994), (-0.36805552, -0.19444448), (-0.4548611, -0.19444448), (-0.36805552, -0.28124994), (-0.28125, -0.28124994), (-0.28125, -0.19444448), (-0.36805552, -0.19444448), (-0.28125, -0.28124994), (-0.19444448, -0.28124994), (-0.19444448, -0.19444448), (-0.28125, -0.19444448), (-0.19444448, -0.28124994), (-0.107638896, -0.28124994), (-0.107638896, -0.19444448), (-0.19444448, -0.19444448), (-0.107638896, -0.28124994), (-0.020833313, -0.28124994), (-0.020833313, -0.19444448), (-0.107638896, -0.19444448), (-0.020833313, -0.28124994), (0.06597221, -0.28124994), (0.06597221, -0.19444448), (-0.020833313, -0.19444448), (0.06597221, -0.28124994), (0.15277776, -0.28124994), (0.15277776, -0.19444448), (0.06597221, -0.19444448), (0.15277776, -0.28124994), (0.23958334, -0.28124994), (0.23958334, -0.19444448), (0.15277776, -0.19444448), (0.23958334, -0.28124994), (0.32638887, -0.28124994), (0.32638887, -0.19444448), (0.23958334, -0.19444448), (0.32638887, -0.28124994), (0.4131944, -0.28124994), (0.4131944, -0.19444448), (0.32638887, -0.19444448), (0.4131944, -0.28124994), (0.5, -0.28124994), (0.5, -0.19444448), (0.4131944, -0.19444448), (0.5, -0.28124994), (0.5868055, -0.28124994), (0.5868055, -0.19444448), (0.5, -0.19444448), (0.5868055, -0.28124994), (0.67361104, -0.28124994), (0.67361104, -0.19444448), (0.5868055, -0.19444448), (0.67361104, -0.28124994), (0.7604166, -0.28124994), (0.7604166, -0.19444448), (0.67361104, -0.19444448), (0.7604166, -0.28124994), (0.8472222, -0.28124994), (0.8472222, -0.19444448), (0.7604166, -0.19444448), (0.8472222, -0.28124994), (0.9340277, -0.28124994), (0.9340277, -0.19444448), (0.8472222, -0.19444448), (0.9340277, -0.28124994), (1.0208333, -0.28124994), (1.0208333, -0.19444448), (0.9340277, -0.19444448), (1.0208333, -0.28124994), (1.1076388, -0.28124994), (1.1076388, -0.19444448), (1.0208333, -0.19444448), (1.1076388, -0.28124994), (1.1944444, -0.28124994), (1.1944444, -0.19444448), (1.1076388, -0.19444448), (1.1944444, -0.28124994), (1.28125, -0.28124994), (1.28125, -0.19444448), (1.1944444, -0.19444448), (1.28125, -0.28124994), (1.3680553, -0.28124994), (1.3680553, -0.19444448), (1.28125, -0.19444448), (1.3680553, -0.28124994), (1.454861, -0.28124994), (1.454861, -0.19444448), (1.3680553, -0.19444448), (1.454861, -0.28124994), (1.5416666, -0.28124994), (1.5416666, -0.19444448), (1.454861, -0.19444448), (-0.5416666, -0.19444448), (-0.4548611, -0.19444448), (-0.4548611, -0.107638896), (-0.5416666, -0.107638896), (-0.4548611, -0.19444448), (-0.36805552, -0.19444448), (-0.36805552, -0.107638896), (-0.4548611, -0.107638896), (-0.36805552, -0.19444448), (-0.28125, -0.19444448), (-0.28125, -0.107638896), (-0.36805552, -0.107638896), (-0.28125, -0.19444448), (-0.19444448, -0.19444448), (-0.19444448, -0.107638896), (-0.28125, -0.107638896), (-0.19444448, -0.19444448), (-0.107638896, -0.19444448), (-0.107638896, -0.107638896), (-0.19444448, -0.107638896), (-0.107638896, -0.19444448), (-0.020833313, -0.19444448), (-0.020833313, -0.107638896), (-0.107638896, -0.107638896), (-0.020833313, -0.19444448), (0.06597221, -0.19444448), (0.06597221, -0.107638896), (-0.020833313, -0.107638896), (0.06597221, -0.19444448), (0.15277776, -0.19444448), (0.15277776, -0.107638896), (0.06597221, -0.107638896), (0.15277776, -0.19444448), (0.23958334, -0.19444448), (0.23958334, -0.107638896), (0.15277776, -0.107638896), (0.23958334, -0.19444448), (0.32638887, -0.19444448), (0.32638887, -0.107638896), (0.23958334, -0.107638896), (0.32638887, -0.19444448), (0.4131944, -0.19444448), (0.4131944, -0.107638896), (0.32638887, -0.107638896), (0.4131944, -0.19444448), (0.5, -0.19444448), (0.5, -0.107638896), (0.4131944, -0.107638896), (0.5, -0.19444448), (0.5868055, -0.19444448), (0.5868055, -0.107638896), (0.5, -0.107638896), (0.5868055, -0.19444448), (0.67361104, -0.19444448), (0.67361104, -0.107638896), (0.5868055, -0.107638896), (0.67361104, -0.19444448), (0.7604166, -0.19444448), (0.7604166, -0.107638896), (0.67361104, -0.107638896), (0.7604166, -0.19444448), (0.8472222, -0.19444448), (0.8472222, -0.107638896), (0.7604166, -0.107638896), (0.8472222, -0.19444448), (0.9340277, -0.19444448), (0.9340277, -0.107638896), (0.8472222, -0.107638896), (0.9340277, -0.19444448), (1.0208333, -0.19444448), (1.0208333, -0.107638896), (0.9340277, -0.107638896), (1.0208333, -0.19444448), (1.1076388, -0.19444448), (1.1076388, -0.107638896), (1.0208333, -0.107638896), (1.1076388, -0.19444448), (1.1944444, -0.19444448), (1.1944444, -0.107638896), (1.1076388, -0.107638896), (1.1944444, -0.19444448), (1.28125, -0.19444448), (1.28125, -0.107638896), (1.1944444, -0.107638896), (1.28125, -0.19444448), (1.3680553, -0.19444448), (1.3680553, -0.107638896), (1.28125, -0.107638896), (1.3680553, -0.19444448), (1.454861, -0.19444448), (1.454861, -0.107638896), (1.3680553, -0.107638896), (1.454861, -0.19444448), (1.5416666, -0.19444448), (1.5416666, -0.107638896), (1.454861, -0.107638896), (-0.5416666, -0.107638896), (-0.4548611, -0.107638896), (-0.4548611, -0.020833313), (-0.5416666, -0.020833313), (-0.4548611, -0.107638896), (-0.36805552, -0.107638896), (-0.36805552, -0.020833313), (-0.4548611, -0.020833313), (-0.36805552, -0.107638896), (-0.28125, -0.107638896), (-0.28125, -0.020833313), (-0.36805552, -0.020833313), (-0.28125, -0.107638896), (-0.19444448, -0.107638896), (-0.19444448, -0.020833313), (-0.28125, -0.020833313), (-0.19444448, -0.107638896), (-0.107638896, -0.107638896), (-0.107638896, -0.020833313), (-0.19444448, -0.020833313), (-0.107638896, -0.107638896), (-0.020833313, -0.107638896), (-0.020833313, -0.020833313), (-0.107638896, -0.020833313), (-0.020833313, -0.107638896), (0.06597221, -0.107638896), (0.06597221, -0.020833313), (-0.020833313, -0.020833313), (0.06597221, -0.107638896), (0.15277776, -0.107638896), (0.15277776, -0.020833313), (0.06597221, -0.020833313), (0.15277776, -0.107638896), (0.23958334, -0.107638896), (0.23958334, -0.020833313), (0.15277776, -0.020833313), (0.23958334, -0.107638896), (0.32638887, -0.107638896), (0.32638887, -0.020833313), (0.23958334, -0.020833313), (0.32638887, -0.107638896), (0.4131944, -0.107638896), (0.4131944, -0.020833313), (0.32638887, -0.020833313), (0.4131944, -0.107638896), (0.5, -0.107638896), (0.5, -0.020833313), (0.4131944, -0.020833313), (0.5, -0.107638896), (0.5868055, -0.107638896), (0.5868055, -0.020833313), (0.5, -0.020833313), (0.5868055, -0.107638896), (0.67361104, -0.107638896), (0.67361104, -0.020833313), (0.5868055, -0.020833313), (0.67361104, -0.107638896), (0.7604166, -0.107638896), (0.7604166, -0.020833313), (0.67361104, -0.020833313), (0.7604166, -0.107638896), (0.8472222, -0.107638896), (0.8472222, -0.020833313), (0.7604166, -0.020833313), (0.8472222, -0.107638896), (0.9340277, -0.107638896), (0.9340277, -0.020833313), (0.8472222, -0.020833313), (0.9340277, -0.107638896), (1.0208333, -0.107638896), (1.0208333, -0.020833313), (0.9340277, -0.020833313), (1.0208333, -0.107638896), (1.1076388, -0.107638896), (1.1076388, -0.020833313), (1.0208333, -0.020833313), (1.1076388, -0.107638896), (1.1944444, -0.107638896), (1.1944444, -0.020833313), (1.1076388, -0.020833313), (1.1944444, -0.107638896), (1.28125, -0.107638896), (1.28125, -0.020833313), (1.1944444, -0.020833313), (1.28125, -0.107638896), (1.3680553, -0.107638896), (1.3680553, -0.020833313), (1.28125, -0.020833313), (1.3680553, -0.107638896), (1.454861, -0.107638896), (1.454861, -0.020833313), (1.3680553, -0.020833313), (1.454861, -0.107638896), (1.5416666, -0.107638896), (1.5416666, -0.020833313), (1.454861, -0.020833313), (-0.5416666, -0.020833313), (-0.4548611, -0.020833313), (-0.4548611, 0.06597221), (-0.5416666, 0.06597221), (-0.4548611, -0.020833313), (-0.36805552, -0.020833313), (-0.36805552, 0.06597221), (-0.4548611, 0.06597221), (-0.36805552, -0.020833313), (-0.28125, -0.020833313), (-0.28125, 0.06597221), (-0.36805552, 0.06597221), (-0.28125, -0.020833313), (-0.19444448, -0.020833313), (-0.19444448, 0.06597221), (-0.28125, 0.06597221), (-0.19444448, -0.020833313), (-0.107638896, -0.020833313), (-0.107638896, 0.06597221), (-0.19444448, 0.06597221), (-0.107638896, -0.020833313), (-0.020833313, -0.020833313), (-0.020833313, 0.06597221), (-0.107638896, 0.06597221), (-0.020833313, -0.020833313), (0.06597221, -0.020833313), (0.06597221, 0.06597221), (-0.020833313, 0.06597221), (0.06597221, -0.020833313), (0.15277776, -0.020833313), (0.15277776, 0.06597221), (0.06597221, 0.06597221), (0.15277776, -0.020833313), (0.23958334, -0.020833313), (0.23958334, 0.06597221), (0.15277776, 0.06597221), (0.23958334, -0.020833313), (0.32638887, -0.020833313), (0.32638887, 0.06597221), (0.23958334, 0.06597221), (0.32638887, -0.020833313), (0.4131944, -0.020833313), (0.4131944, 0.06597221), (0.32638887, 0.06597221), (0.4131944, -0.020833313), (0.5, -0.020833313), (0.5, 0.06597221), (0.4131944, 0.06597221), (0.5, -0.020833313), (0.5868055, -0.020833313), (0.5868055, 0.06597221), (0.5, 0.06597221), (0.5868055, -0.020833313), (0.67361104, -0.020833313), (0.67361104, 0.06597221), (0.5868055, 0.06597221), (0.67361104, -0.020833313), (0.7604166, -0.020833313), (0.7604166, 0.06597221), (0.67361104, 0.06597221), (0.7604166, -0.020833313), (0.8472222, -0.020833313), (0.8472222, 0.06597221), (0.7604166, 0.06597221), (0.8472222, -0.020833313), (0.9340277, -0.020833313), (0.9340277, 0.06597221), (0.8472222, 0.06597221), (0.9340277, -0.020833313), (1.0208333, -0.020833313), (1.0208333, 0.06597221), (0.9340277, 0.06597221), (1.0208333, -0.020833313), (1.1076388, -0.020833313), (1.1076388, 0.06597221), (1.0208333, 0.06597221), (1.1076388, -0.020833313), (1.1944444, -0.020833313), (1.1944444, 0.06597221), (1.1076388, 0.06597221), (1.1944444, -0.020833313), (1.28125, -0.020833313), (1.28125, 0.06597221), (1.1944444, 0.06597221), (1.28125, -0.020833313), (1.3680553, -0.020833313), (1.3680553, 0.06597221), (1.28125, 0.06597221), (1.3680553, -0.020833313), (1.454861, -0.020833313), (1.454861, 0.06597221), (1.3680553, 0.06597221), (1.454861, -0.020833313), (1.5416666, -0.020833313), (1.5416666, 0.06597221), (1.454861, 0.06597221), (-0.5416666, 0.06597221), (-0.4548611, 0.06597221), (-0.4548611, 0.15277779), (-0.5416666, 0.15277779), (-0.4548611, 0.06597221), (-0.36805552, 0.06597221), (-0.36805552, 0.15277779), (-0.4548611, 0.15277779), (-0.36805552, 0.06597221), (-0.28125, 0.06597221), (-0.28125, 0.15277779), (-0.36805552, 0.15277779), (-0.28125, 0.06597221), (-0.19444448, 0.06597221), (-0.19444448, 0.15277779), (-0.28125, 0.15277779), (-0.19444448, 0.06597221), (-0.107638896, 0.06597221), (-0.107638896, 0.15277779), (-0.19444448, 0.15277779), (-0.107638896, 0.06597221), (-0.020833313, 0.06597221), (-0.020833313, 0.15277779), (-0.107638896, 0.15277779), (-0.020833313, 0.06597221), (0.06597221, 0.06597221), (0.06597221, 0.15277779), (-0.020833313, 0.15277779), (0.06597221, 0.06597221), (0.15277776, 0.06597221), (0.15277776, 0.15277779), (0.06597221, 0.15277779), (0.15277776, 0.06597221), (0.23958334, 0.06597221), (0.23958334, 0.15277779), (0.15277776, 0.15277779), (0.23958334, 0.06597221), (0.32638887, 0.06597221), (0.32638887, 0.15277779), (0.23958334, 0.15277779), (0.32638887, 0.06597221), (0.4131944, 0.06597221), (0.4131944, 0.15277779), (0.32638887, 0.15277779), (0.4131944, 0.06597221), (0.5, 0.06597221), (0.5, 0.15277779), (0.4131944, 0.15277779), (0.5, 0.06597221), (0.5868055, 0.06597221), (0.5868055, 0.15277779), (0.5, 0.15277779), (0.5868055, 0.06597221), (0.67361104, 0.06597221), (0.67361104, 0.15277779), (0.5868055, 0.15277779), (0.67361104, 0.06597221), (0.7604166, 0.06597221), (0.7604166, 0.15277779), (0.67361104, 0.15277779), (0.7604166, 0.06597221), (0.8472222, 0.06597221), (0.8472222, 0.15277779), (0.7604166, 0.15277779), (0.8472222, 0.06597221), (0.9340277, 0.06597221), (0.9340277, 0.15277779), (0.8472222, 0.15277779), (0.9340277, 0.06597221), (1.0208333, 0.06597221), (1.0208333, 0.15277779), (0.9340277, 0.15277779), (1.0208333, 0.06597221), (1.1076388, 0.06597221), (1.1076388, 0.15277779), (1.0208333, 0.15277779), (1.1076388, 0.06597221), (1.1944444, 0.06597221), (1.1944444, 0.15277779), (1.1076388, 0.15277779), (1.1944444, 0.06597221), (1.28125, 0.06597221), (1.28125, 0.15277779), (1.1944444, 0.15277779), (1.28125, 0.06597221), (1.3680553, 0.06597221), (1.3680553, 0.15277779), (1.28125, 0.15277779), (1.3680553, 0.06597221), (1.454861, 0.06597221), (1.454861, 0.15277779), (1.3680553, 0.15277779), (1.454861, 0.06597221), (1.5416666, 0.06597221), (1.5416666, 0.15277779), (1.454861, 0.15277779), (-0.5416666, 0.15277779), (-0.4548611, 0.15277779), (-0.4548611, 0.23958334), (-0.5416666, 0.23958334), (-0.4548611, 0.15277779), (-0.36805552, 0.15277779), (-0.36805552, 0.23958334), (-0.4548611, 0.23958334), (-0.36805552, 0.15277779), (-0.28125, 0.15277779), (-0.28125, 0.23958334), (-0.36805552, 0.23958334), (-0.28125, 0.15277779), (-0.19444448, 0.15277779), (-0.19444448, 0.23958334), (-0.28125, 0.23958334), (-0.19444448, 0.15277779), (-0.107638896, 0.15277779), (-0.107638896, 0.23958334), (-0.19444448, 0.23958334), (-0.107638896, 0.15277779), (-0.020833313, 0.15277779), (-0.020833313, 0.23958334), (-0.107638896, 0.23958334), (-0.020833313, 0.15277779), (0.06597221, 0.15277779), (0.06597221, 0.23958334), (-0.020833313, 0.23958334), (0.06597221, 0.15277779), (0.15277776, 0.15277779), (0.15277776, 0.23958334), (0.06597221, 0.23958334), (0.15277776, 0.15277779), (0.23958334, 0.15277779), (0.23958334, 0.23958334), (0.15277776, 0.23958334), (0.23958334, 0.15277779), (0.32638887, 0.15277779), (0.32638887, 0.23958334), (0.23958334, 0.23958334), (0.32638887, 0.15277779), (0.4131944, 0.15277779), (0.4131944, 0.23958334), (0.32638887, 0.23958334), (0.4131944, 0.15277779), (0.5, 0.15277779), (0.5, 0.23958334), (0.4131944, 0.23958334), (0.5, 0.15277779), (0.5868055, 0.15277779), (0.5868055, 0.23958334), (0.5, 0.23958334), (0.5868055, 0.15277779), (0.67361104, 0.15277779), (0.67361104, 0.23958334), (0.5868055, 0.23958334), (0.67361104, 0.15277779), (0.7604166, 0.15277779), (0.7604166, 0.23958334), (0.67361104, 0.23958334), (0.7604166, 0.15277779), (0.8472222, 0.15277779), (0.8472222, 0.23958334), (0.7604166, 0.23958334), (0.8472222, 0.15277779), (0.9340277, 0.15277779), (0.9340277, 0.23958334), (0.8472222, 0.23958334), (0.9340277, 0.15277779), (1.0208333, 0.15277779), (1.0208333, 0.23958334), (0.9340277, 0.23958334), (1.0208333, 0.15277779), (1.1076388, 0.15277779), (1.1076388, 0.23958334), (1.0208333, 0.23958334), (1.1076388, 0.15277779), (1.1944444, 0.15277779), (1.1944444, 0.23958334), (1.1076388, 0.23958334), (1.1944444, 0.15277779), (1.28125, 0.15277779), (1.28125, 0.23958334), (1.1944444, 0.23958334), (1.28125, 0.15277779), (1.3680553, 0.15277779), (1.3680553, 0.23958334), (1.28125, 0.23958334), (1.3680553, 0.15277779), (1.454861, 0.15277779), (1.454861, 0.23958334), (1.3680553, 0.23958334), (1.454861, 0.15277779), (1.5416666, 0.15277779), (1.5416666, 0.23958334), (1.454861, 0.23958334), (-0.5416666, 0.23958334), (-0.4548611, 0.23958334), (-0.4548611, 0.32638887), (-0.5416666, 0.32638887), (-0.4548611, 0.23958334), (-0.36805552, 0.23958334), (-0.36805552, 0.32638887), (-0.4548611, 0.32638887), (-0.36805552, 0.23958334), (-0.28125, 0.23958334), (-0.28125, 0.32638887), (-0.36805552, 0.32638887), (-0.28125, 0.23958334), (-0.19444448, 0.23958334), (-0.19444448, 0.32638887), (-0.28125, 0.32638887), (-0.19444448, 0.23958334), (-0.107638896, 0.23958334), (-0.107638896, 0.32638887), (-0.19444448, 0.32638887), (-0.107638896, 0.23958334), (-0.020833313, 0.23958334), (-0.020833313, 0.32638887), (-0.107638896, 0.32638887), (-0.020833313, 0.23958334), (0.06597221, 0.23958334), (0.06597221, 0.32638887), (-0.020833313, 0.32638887), (0.06597221, 0.23958334), (0.15277776, 0.23958334), (0.15277776, 0.32638887), (0.06597221, 0.32638887), (0.15277776, 0.23958334), (0.23958334, 0.23958334), (0.23958334, 0.32638887), (0.15277776, 0.32638887), (0.23958334, 0.23958334), (0.32638887, 0.23958334), (0.32638887, 0.32638887), (0.23958334, 0.32638887), (0.32638887, 0.23958334), (0.4131944, 0.23958334), (0.4131944, 0.32638887), (0.32638887, 0.32638887), (0.4131944, 0.23958334), (0.5, 0.23958334), (0.5, 0.32638887), (0.4131944, 0.32638887), (0.5, 0.23958334), (0.5868055, 0.23958334), (0.5868055, 0.32638887), (0.5, 0.32638887), (0.5868055, 0.23958334), (0.67361104, 0.23958334), (0.67361104, 0.32638887), (0.5868055, 0.32638887), (0.67361104, 0.23958334), (0.7604166, 0.23958334), (0.7604166, 0.32638887), (0.67361104, 0.32638887), (0.7604166, 0.23958334), (0.8472222, 0.23958334), (0.8472222, 0.32638887), (0.7604166, 0.32638887), (0.8472222, 0.23958334), (0.9340277, 0.23958334), (0.9340277, 0.32638887), (0.8472222, 0.32638887), (0.9340277, 0.23958334), (1.0208333, 0.23958334), (1.0208333, 0.32638887), (0.9340277, 0.32638887), (1.0208333, 0.23958334), (1.1076388, 0.23958334), (1.1076388, 0.32638887), (1.0208333, 0.32638887), (1.1076388, 0.23958334), (1.1944444, 0.23958334), (1.1944444, 0.32638887), (1.1076388, 0.32638887), (1.1944444, 0.23958334), (1.28125, 0.23958334), (1.28125, 0.32638887), (1.1944444, 0.32638887), (1.28125, 0.23958334), (1.3680553, 0.23958334), (1.3680553, 0.32638887), (1.28125, 0.32638887), (1.3680553, 0.23958334), (1.454861, 0.23958334), (1.454861, 0.32638887), (1.3680553, 0.32638887), (1.454861, 0.23958334), (1.5416666, 0.23958334), (1.5416666, 0.32638887), (1.454861, 0.32638887), (-0.5416666, 0.32638887), (-0.4548611, 0.32638887), (-0.4548611, 0.4131944), (-0.5416666, 0.4131944), (-0.4548611, 0.32638887), (-0.36805552, 0.32638887), (-0.36805552, 0.4131944), (-0.4548611, 0.4131944), (-0.36805552, 0.32638887), (-0.28125, 0.32638887), (-0.28125, 0.4131944), (-0.36805552, 0.4131944), (-0.28125, 0.32638887), (-0.19444448, 0.32638887), (-0.19444448, 0.4131944), (-0.28125, 0.4131944), (-0.19444448, 0.32638887), (-0.107638896, 0.32638887), (-0.107638896, 0.4131944), (-0.19444448, 0.4131944), (-0.107638896, 0.32638887), (-0.020833313, 0.32638887), (-0.020833313, 0.4131944), (-0.107638896, 0.4131944), (-0.020833313, 0.32638887), (0.06597221, 0.32638887), (0.06597221, 0.4131944), (-0.020833313, 0.4131944), (0.06597221, 0.32638887), (0.15277776, 0.32638887), (0.15277776, 0.4131944), (0.06597221, 0.4131944), (0.15277776, 0.32638887), (0.23958334, 0.32638887), (0.23958334, 0.4131944), (0.15277776, 0.4131944), (0.23958334, 0.32638887), (0.32638887, 0.32638887), (0.32638887, 0.4131944), (0.23958334, 0.4131944), (0.32638887, 0.32638887), (0.4131944, 0.32638887), (0.4131944, 0.4131944), (0.32638887, 0.4131944), (0.4131944, 0.32638887), (0.5, 0.32638887), (0.5, 0.4131944), (0.4131944, 0.4131944), (0.5, 0.32638887), (0.5868055, 0.32638887), (0.5868055, 0.4131944), (0.5, 0.4131944), (0.5868055, 0.32638887), (0.67361104, 0.32638887), (0.67361104, 0.4131944), (0.5868055, 0.4131944), (0.67361104, 0.32638887), (0.7604166, 0.32638887), (0.7604166, 0.4131944), (0.67361104, 0.4131944), (0.7604166, 0.32638887), (0.8472222, 0.32638887), (0.8472222, 0.4131944), (0.7604166, 0.4131944), (0.8472222, 0.32638887), (0.9340277, 0.32638887), (0.9340277, 0.4131944), (0.8472222, 0.4131944), (0.9340277, 0.32638887), (1.0208333, 0.32638887), (1.0208333, 0.4131944), (0.9340277, 0.4131944), (1.0208333, 0.32638887), (1.1076388, 0.32638887), (1.1076388, 0.4131944), (1.0208333, 0.4131944), (1.1076388, 0.32638887), (1.1944444, 0.32638887), (1.1944444, 0.4131944), (1.1076388, 0.4131944), (1.1944444, 0.32638887), (1.28125, 0.32638887), (1.28125, 0.4131944), (1.1944444, 0.4131944), (1.28125, 0.32638887), (1.3680553, 0.32638887), (1.3680553, 0.4131944), (1.28125, 0.4131944), (1.3680553, 0.32638887), (1.454861, 0.32638887), (1.454861, 0.4131944), (1.3680553, 0.4131944), (1.454861, 0.32638887), (1.5416666, 0.32638887), (1.5416666, 0.4131944), (1.454861, 0.4131944), (-0.5416666, 0.4131944), (-0.4548611, 0.4131944), (-0.4548611, 0.5), (-0.5416666, 0.5), (-0.4548611, 0.4131944), (-0.36805552, 0.4131944), (-0.36805552, 0.5), (-0.4548611, 0.5), (-0.36805552, 0.4131944), (-0.28125, 0.4131944), (-0.28125, 0.5), (-0.36805552, 0.5), (-0.28125, 0.4131944), (-0.19444448, 0.4131944), (-0.19444448, 0.5), (-0.28125, 0.5), (-0.19444448, 0.4131944), (-0.107638896, 0.4131944), (-0.107638896, 0.5), (-0.19444448, 0.5), (-0.107638896, 0.4131944), (-0.020833313, 0.4131944), (-0.020833313, 0.5), (-0.107638896, 0.5), (-0.020833313, 0.4131944), (0.06597221, 0.4131944), (0.06597221, 0.5), (-0.020833313, 0.5), (0.06597221, 0.4131944), (0.15277776, 0.4131944), (0.15277776, 0.5), (0.06597221, 0.5), (0.15277776, 0.4131944), (0.23958334, 0.4131944), (0.23958334, 0.5), (0.15277776, 0.5), (0.23958334, 0.4131944), (0.32638887, 0.4131944), (0.32638887, 0.5), (0.23958334, 0.5), (0.32638887, 0.4131944), (0.4131944, 0.4131944), (0.4131944, 0.5), (0.32638887, 0.5), (0.4131944, 0.4131944), (0.5, 0.4131944), (0.5, 0.5), (0.4131944, 0.5), (0.5, 0.4131944), (0.5868055, 0.4131944), (0.5868055, 0.5), (0.5, 0.5), (0.5868055, 0.4131944), (0.67361104, 0.4131944), (0.67361104, 0.5), (0.5868055, 0.5), (0.67361104, 0.4131944), (0.7604166, 0.4131944), (0.7604166, 0.5), (0.67361104, 0.5), (0.7604166, 0.4131944), (0.8472222, 0.4131944), (0.8472222, 0.5), (0.7604166, 0.5), (0.8472222, 0.4131944), (0.9340277, 0.4131944), (0.9340277, 0.5), (0.8472222, 0.5), (0.9340277, 0.4131944), (1.0208333, 0.4131944), (1.0208333, 0.5), (0.9340277, 0.5), (1.0208333, 0.4131944), (1.1076388, 0.4131944), (1.1076388, 0.5), (1.0208333, 0.5), (1.1076388, 0.4131944), (1.1944444, 0.4131944), (1.1944444, 0.5), (1.1076388, 0.5), (1.1944444, 0.4131944), (1.28125, 0.4131944), (1.28125, 0.5), (1.1944444, 0.5), (1.28125, 0.4131944), (1.3680553, 0.4131944), (1.3680553, 0.5), (1.28125, 0.5), (1.3680553, 0.4131944), (1.454861, 0.4131944), (1.454861, 0.5), (1.3680553, 0.5), (1.454861, 0.4131944), (1.5416666, 0.4131944), (1.5416666, 0.5), (1.454861, 0.5), (-0.5416666, 0.5), (-0.4548611, 0.5), (-0.4548611, 0.5868055), (-0.5416666, 0.5868055), (-0.4548611, 0.5), (-0.36805552, 0.5), (-0.36805552, 0.5868055), (-0.4548611, 0.5868055), (-0.36805552, 0.5), (-0.28125, 0.5), (-0.28125, 0.5868055), (-0.36805552, 0.5868055), (-0.28125, 0.5), (-0.19444448, 0.5), (-0.19444448, 0.5868055), (-0.28125, 0.5868055), (-0.19444448, 0.5), (-0.107638896, 0.5), (-0.107638896, 0.5868055), (-0.19444448, 0.5868055), (-0.107638896, 0.5), (-0.020833313, 0.5), (-0.020833313, 0.5868055), (-0.107638896, 0.5868055), (-0.020833313, 0.5), (0.06597221, 0.5), (0.06597221, 0.5868055), (-0.020833313, 0.5868055), (0.06597221, 0.5), (0.15277776, 0.5), (0.15277776, 0.5868055), (0.06597221, 0.5868055), (0.15277776, 0.5), (0.23958334, 0.5), (0.23958334, 0.5868055), (0.15277776, 0.5868055), (0.23958334, 0.5), (0.32638887, 0.5), (0.32638887, 0.5868055), (0.23958334, 0.5868055), (0.32638887, 0.5), (0.4131944, 0.5), (0.4131944, 0.5868055), (0.32638887, 0.5868055), (0.4131944, 0.5), (0.5, 0.5), (0.5, 0.5868055), (0.4131944, 0.5868055), (0.5, 0.5), (0.5868055, 0.5), (0.5868055, 0.5868055), (0.5, 0.5868055), (0.5868055, 0.5), (0.67361104, 0.5), (0.67361104, 0.5868055), (0.5868055, 0.5868055), (0.67361104, 0.5), (0.7604166, 0.5), (0.7604166, 0.5868055), (0.67361104, 0.5868055), (0.7604166, 0.5), (0.8472222, 0.5), (0.8472222, 0.5868055), (0.7604166, 0.5868055), (0.8472222, 0.5), (0.9340277, 0.5), (0.9340277, 0.5868055), (0.8472222, 0.5868055), (0.9340277, 0.5), (1.0208333, 0.5), (1.0208333, 0.5868055), (0.9340277, 0.5868055), (1.0208333, 0.5), (1.1076388, 0.5), (1.1076388, 0.5868055), (1.0208333, 0.5868055), (1.1076388, 0.5), (1.1944444, 0.5), (1.1944444, 0.5868055), (1.1076388, 0.5868055), (1.1944444, 0.5), (1.28125, 0.5), (1.28125, 0.5868055), (1.1944444, 0.5868055), (1.28125, 0.5), (1.3680553, 0.5), (1.3680553, 0.5868055), (1.28125, 0.5868055), (1.3680553, 0.5), (1.454861, 0.5), (1.454861, 0.5868055), (1.3680553, 0.5868055), (1.454861, 0.5), (1.5416666, 0.5), (1.5416666, 0.5868055), (1.454861, 0.5868055), (-0.5416666, 0.5868055), (-0.4548611, 0.5868055), (-0.4548611, 0.67361104), (-0.5416666, 0.67361104), (-0.4548611, 0.5868055), (-0.36805552, 0.5868055), (-0.36805552, 0.67361104), (-0.4548611, 0.67361104), (-0.36805552, 0.5868055), (-0.28125, 0.5868055), (-0.28125, 0.67361104), (-0.36805552, 0.67361104), (-0.28125, 0.5868055), (-0.19444448, 0.5868055), (-0.19444448, 0.67361104), (-0.28125, 0.67361104), (-0.19444448, 0.5868055), (-0.107638896, 0.5868055), (-0.107638896, 0.67361104), (-0.19444448, 0.67361104), (-0.107638896, 0.5868055), (-0.020833313, 0.5868055), (-0.020833313, 0.67361104), (-0.107638896, 0.67361104), (-0.020833313, 0.5868055), (0.06597221, 0.5868055), (0.06597221, 0.67361104), (-0.020833313, 0.67361104), (0.06597221, 0.5868055), (0.15277776, 0.5868055), (0.15277776, 0.67361104), (0.06597221, 0.67361104), (0.15277776, 0.5868055), (0.23958334, 0.5868055), (0.23958334, 0.67361104), (0.15277776, 0.67361104), (0.23958334, 0.5868055), (0.32638887, 0.5868055), (0.32638887, 0.67361104), (0.23958334, 0.67361104), (0.32638887, 0.5868055), (0.4131944, 0.5868055), (0.4131944, 0.67361104), (0.32638887, 0.67361104), (0.4131944, 0.5868055), (0.5, 0.5868055), (0.5, 0.67361104), (0.4131944, 0.67361104), (0.5, 0.5868055), (0.5868055, 0.5868055), (0.5868055, 0.67361104), (0.5, 0.67361104), (0.5868055, 0.5868055), (0.67361104, 0.5868055), (0.67361104, 0.67361104), (0.5868055, 0.67361104), (0.67361104, 0.5868055), (0.7604166, 0.5868055), (0.7604166, 0.67361104), (0.67361104, 0.67361104), (0.7604166, 0.5868055), (0.8472222, 0.5868055), (0.8472222, 0.67361104), (0.7604166, 0.67361104), (0.8472222, 0.5868055), (0.9340277, 0.5868055), (0.9340277, 0.67361104), (0.8472222, 0.67361104), (0.9340277, 0.5868055), (1.0208333, 0.5868055), (1.0208333, 0.67361104), (0.9340277, 0.67361104), (1.0208333, 0.5868055), (1.1076388, 0.5868055), (1.1076388, 0.67361104), (1.0208333, 0.67361104), (1.1076388, 0.5868055), (1.1944444, 0.5868055), (1.1944444, 0.67361104), (1.1076388, 0.67361104), (1.1944444, 0.5868055), (1.28125, 0.5868055), (1.28125, 0.67361104), (1.1944444, 0.67361104), (1.28125, 0.5868055), (1.3680553, 0.5868055), (1.3680553, 0.67361104), (1.28125, 0.67361104), (1.3680553, 0.5868055), (1.454861, 0.5868055), (1.454861, 0.67361104), (1.3680553, 0.67361104), (1.454861, 0.5868055), (1.5416666, 0.5868055), (1.5416666, 0.67361104), (1.454861, 0.67361104), (-0.5416666, 0.67361104), (-0.4548611, 0.67361104), (-0.4548611, 0.7604167), (-0.5416666, 0.7604167), (-0.4548611, 0.67361104), (-0.36805552, 0.67361104), (-0.36805552, 0.7604167), (-0.4548611, 0.7604167), (-0.36805552, 0.67361104), (-0.28125, 0.67361104), (-0.28125, 0.7604167), (-0.36805552, 0.7604167), (-0.28125, 0.67361104), (-0.19444448, 0.67361104), (-0.19444448, 0.7604167), (-0.28125, 0.7604167), (-0.19444448, 0.67361104), (-0.107638896, 0.67361104), (-0.107638896, 0.7604167), (-0.19444448, 0.7604167), (-0.107638896, 0.67361104), (-0.020833313, 0.67361104), (-0.020833313, 0.7604167), (-0.107638896, 0.7604167), (-0.020833313, 0.67361104), (0.06597221, 0.67361104), (0.06597221, 0.7604167), (-0.020833313, 0.7604167), (0.06597221, 0.67361104), (0.15277776, 0.67361104), (0.15277776, 0.7604167), (0.06597221, 0.7604167), (0.15277776, 0.67361104), (0.23958334, 0.67361104), (0.23958334, 0.7604167), (0.15277776, 0.7604167), (0.23958334, 0.67361104), (0.32638887, 0.67361104), (0.32638887, 0.7604167), (0.23958334, 0.7604167), (0.32638887, 0.67361104), (0.4131944, 0.67361104), (0.4131944, 0.7604167), (0.32638887, 0.7604167), (0.4131944, 0.67361104), (0.5, 0.67361104), (0.5, 0.7604167), (0.4131944, 0.7604167), (0.5, 0.67361104), (0.5868055, 0.67361104), (0.5868055, 0.7604167), (0.5, 0.7604167), (0.5868055, 0.67361104), (0.67361104, 0.67361104), (0.67361104, 0.7604167), (0.5868055, 0.7604167), (0.67361104, 0.67361104), (0.7604166, 0.67361104), (0.7604166, 0.7604167), (0.67361104, 0.7604167), (0.7604166, 0.67361104), (0.8472222, 0.67361104), (0.8472222, 0.7604167), (0.7604166, 0.7604167), (0.8472222, 0.67361104), (0.9340277, 0.67361104), (0.9340277, 0.7604167), (0.8472222, 0.7604167), (0.9340277, 0.67361104), (1.0208333, 0.67361104), (1.0208333, 0.7604167), (0.9340277, 0.7604167), (1.0208333, 0.67361104), (1.1076388, 0.67361104), (1.1076388, 0.7604167), (1.0208333, 0.7604167), (1.1076388, 0.67361104), (1.1944444, 0.67361104), (1.1944444, 0.7604167), (1.1076388, 0.7604167), (1.1944444, 0.67361104), (1.28125, 0.67361104), (1.28125, 0.7604167), (1.1944444, 0.7604167), (1.28125, 0.67361104), (1.3680553, 0.67361104), (1.3680553, 0.7604167), (1.28125, 0.7604167), (1.3680553, 0.67361104), (1.454861, 0.67361104), (1.454861, 0.7604167), (1.3680553, 0.7604167), (1.454861, 0.67361104), (1.5416666, 0.67361104), (1.5416666, 0.7604167), (1.454861, 0.7604167), (-0.5416666, 0.7604167), (-0.4548611, 0.7604167), (-0.4548611, 0.8472222), (-0.5416666, 0.8472222), (-0.4548611, 0.7604167), (-0.36805552, 0.7604167), (-0.36805552, 0.8472222), (-0.4548611, 0.8472222), (-0.36805552, 0.7604167), (-0.28125, 0.7604167), (-0.28125, 0.8472222), (-0.36805552, 0.8472222), (-0.28125, 0.7604167), (-0.19444448, 0.7604167), (-0.19444448, 0.8472222), (-0.28125, 0.8472222), (-0.19444448, 0.7604167), (-0.107638896, 0.7604167), (-0.107638896, 0.8472222), (-0.19444448, 0.8472222), (-0.107638896, 0.7604167), (-0.020833313, 0.7604167), (-0.020833313, 0.8472222), (-0.107638896, 0.8472222), (-0.020833313, 0.7604167), (0.06597221, 0.7604167), (0.06597221, 0.8472222), (-0.020833313, 0.8472222), (0.06597221, 0.7604167), (0.15277776, 0.7604167), (0.15277776, 0.8472222), (0.06597221, 0.8472222), (0.15277776, 0.7604167), (0.23958334, 0.7604167), (0.23958334, 0.8472222), (0.15277776, 0.8472222), (0.23958334, 0.7604167), (0.32638887, 0.7604167), (0.32638887, 0.8472222), (0.23958334, 0.8472222), (0.32638887, 0.7604167), (0.4131944, 0.7604167), (0.4131944, 0.8472222), (0.32638887, 0.8472222), (0.4131944, 0.7604167), (0.5, 0.7604167), (0.5, 0.8472222), (0.4131944, 0.8472222), (0.5, 0.7604167), (0.5868055, 0.7604167), (0.5868055, 0.8472222), (0.5, 0.8472222), (0.5868055, 0.7604167), (0.67361104, 0.7604167), (0.67361104, 0.8472222), (0.5868055, 0.8472222), (0.67361104, 0.7604167), (0.7604166, 0.7604167), (0.7604166, 0.8472222), (0.67361104, 0.8472222), (0.7604166, 0.7604167), (0.8472222, 0.7604167), (0.8472222, 0.8472222), (0.7604166, 0.8472222), (0.8472222, 0.7604167), (0.9340277, 0.7604167), (0.9340277, 0.8472222), (0.8472222, 0.8472222), (0.9340277, 0.7604167), (1.0208333, 0.7604167), (1.0208333, 0.8472222), (0.9340277, 0.8472222), (1.0208333, 0.7604167), (1.1076388, 0.7604167), (1.1076388, 0.8472222), (1.0208333, 0.8472222), (1.1076388, 0.7604167), (1.1944444, 0.7604167), (1.1944444, 0.8472222), (1.1076388, 0.8472222), (1.1944444, 0.7604167), (1.28125, 0.7604167), (1.28125, 0.8472222), (1.1944444, 0.8472222), (1.28125, 0.7604167), (1.3680553, 0.7604167), (1.3680553, 0.8472222), (1.28125, 0.8472222), (1.3680553, 0.7604167), (1.454861, 0.7604167), (1.454861, 0.8472222), (1.3680553, 0.8472222), (1.454861, 0.7604167), (1.5416666, 0.7604167), (1.5416666, 0.8472222), (1.454861, 0.8472222), (-0.5416666, 0.8472222), (-0.4548611, 0.8472222), (-0.4548611, 0.93402773), (-0.5416666, 0.93402773), (-0.4548611, 0.8472222), (-0.36805552, 0.8472222), (-0.36805552, 0.93402773), (-0.4548611, 0.93402773), (-0.36805552, 0.8472222), (-0.28125, 0.8472222), (-0.28125, 0.93402773), (-0.36805552, 0.93402773), (-0.28125, 0.8472222), (-0.19444448, 0.8472222), (-0.19444448, 0.93402773), (-0.28125, 0.93402773), (-0.19444448, 0.8472222), (-0.107638896, 0.8472222), (-0.107638896, 0.93402773), (-0.19444448, 0.93402773), (-0.107638896, 0.8472222), (-0.020833313, 0.8472222), (-0.020833313, 0.93402773), (-0.107638896, 0.93402773), (-0.020833313, 0.8472222), (0.06597221, 0.8472222), (0.06597221, 0.93402773), (-0.020833313, 0.93402773), (0.06597221, 0.8472222), (0.15277776, 0.8472222), (0.15277776, 0.93402773), (0.06597221, 0.93402773), (0.15277776, 0.8472222), (0.23958334, 0.8472222), (0.23958334, 0.93402773), (0.15277776, 0.93402773), (0.23958334, 0.8472222), (0.32638887, 0.8472222), (0.32638887, 0.93402773), (0.23958334, 0.93402773), (0.32638887, 0.8472222), (0.4131944, 0.8472222), (0.4131944, 0.93402773), (0.32638887, 0.93402773), (0.4131944, 0.8472222), (0.5, 0.8472222), (0.5, 0.93402773), (0.4131944, 0.93402773), (0.5, 0.8472222), (0.5868055, 0.8472222), (0.5868055, 0.93402773), (0.5, 0.93402773), (0.5868055, 0.8472222), (0.67361104, 0.8472222), (0.67361104, 0.93402773), (0.5868055, 0.93402773), (0.67361104, 0.8472222), (0.7604166, 0.8472222), (0.7604166, 0.93402773), (0.67361104, 0.93402773), (0.7604166, 0.8472222), (0.8472222, 0.8472222), (0.8472222, 0.93402773), (0.7604166, 0.93402773), (0.8472222, 0.8472222), (0.9340277, 0.8472222), (0.9340277, 0.93402773), (0.8472222, 0.93402773), (0.9340277, 0.8472222), (1.0208333, 0.8472222), (1.0208333, 0.93402773), (0.9340277, 0.93402773), (1.0208333, 0.8472222), (1.1076388, 0.8472222), (1.1076388, 0.93402773), (1.0208333, 0.93402773), (1.1076388, 0.8472222), (1.1944444, 0.8472222), (1.1944444, 0.93402773), (1.1076388, 0.93402773), (1.1944444, 0.8472222), (1.28125, 0.8472222), (1.28125, 0.93402773), (1.1944444, 0.93402773), (1.28125, 0.8472222), (1.3680553, 0.8472222), (1.3680553, 0.93402773), (1.28125, 0.93402773), (1.3680553, 0.8472222), (1.454861, 0.8472222), (1.454861, 0.93402773), (1.3680553, 0.93402773), (1.454861, 0.8472222), (1.5416666, 0.8472222), (1.5416666, 0.93402773), (1.454861, 0.93402773), (-0.5416666, 0.93402773), (-0.4548611, 0.93402773), (-0.4548611, 1.0208333), (-0.5416666, 1.0208333), (-0.4548611, 0.93402773), (-0.36805552, 0.93402773), (-0.36805552, 1.0208333), (-0.4548611, 1.0208333), (-0.36805552, 0.93402773), (-0.28125, 0.93402773), (-0.28125, 1.0208333), (-0.36805552, 1.0208333), (-0.28125, 0.93402773), (-0.19444448, 0.93402773), (-0.19444448, 1.0208333), (-0.28125, 1.0208333), (-0.19444448, 0.93402773), (-0.107638896, 0.93402773), (-0.107638896, 1.0208333), (-0.19444448, 1.0208333), (-0.107638896, 0.93402773), (-0.020833313, 0.93402773), (-0.020833313, 1.0208333), (-0.107638896, 1.0208333), (-0.020833313, 0.93402773), (0.06597221, 0.93402773), (0.06597221, 1.0208333), (-0.020833313, 1.0208333), (0.06597221, 0.93402773), (0.15277776, 0.93402773), (0.15277776, 1.0208333), (0.06597221, 1.0208333), (0.15277776, 0.93402773), (0.23958334, 0.93402773), (0.23958334, 1.0208333), (0.15277776, 1.0208333), (0.23958334, 0.93402773), (0.32638887, 0.93402773), (0.32638887, 1.0208333), (0.23958334, 1.0208333), (0.32638887, 0.93402773), (0.4131944, 0.93402773), (0.4131944, 1.0208333), (0.32638887, 1.0208333), (0.4131944, 0.93402773), (0.5, 0.93402773), (0.5, 1.0208333), (0.4131944, 1.0208333), (0.5, 0.93402773), (0.5868055, 0.93402773), (0.5868055, 1.0208333), (0.5, 1.0208333), (0.5868055, 0.93402773), (0.67361104, 0.93402773), (0.67361104, 1.0208333), (0.5868055, 1.0208333), (0.67361104, 0.93402773), (0.7604166, 0.93402773), (0.7604166, 1.0208333), (0.67361104, 1.0208333), (0.7604166, 0.93402773), (0.8472222, 0.93402773), (0.8472222, 1.0208333), (0.7604166, 1.0208333), (0.8472222, 0.93402773), (0.9340277, 0.93402773), (0.9340277, 1.0208333), (0.8472222, 1.0208333), (0.9340277, 0.93402773), (1.0208333, 0.93402773), (1.0208333, 1.0208333), (0.9340277, 1.0208333), (1.0208333, 0.93402773), (1.1076388, 0.93402773), (1.1076388, 1.0208333), (1.0208333, 1.0208333), (1.1076388, 0.93402773), (1.1944444, 0.93402773), (1.1944444, 1.0208333), (1.1076388, 1.0208333), (1.1944444, 0.93402773), (1.28125, 0.93402773), (1.28125, 1.0208333), (1.1944444, 1.0208333), (1.28125, 0.93402773), (1.3680553, 0.93402773), (1.3680553, 1.0208333), (1.28125, 1.0208333), (1.3680553, 0.93402773), (1.454861, 0.93402773), (1.454861, 1.0208333), (1.3680553, 1.0208333), (1.454861, 0.93402773), (1.5416666, 0.93402773), (1.5416666, 1.0208333), (1.454861, 1.0208333), (-0.5416666, 1.0208333), (-0.4548611, 1.0208333), (-0.4548611, 1.1076388), (-0.5416666, 1.1076388), (-0.4548611, 1.0208333), (-0.36805552, 1.0208333), (-0.36805552, 1.1076388), (-0.4548611, 1.1076388), (-0.36805552, 1.0208333), (-0.28125, 1.0208333), (-0.28125, 1.1076388), (-0.36805552, 1.1076388), (-0.28125, 1.0208333), (-0.19444448, 1.0208333), (-0.19444448, 1.1076388), (-0.28125, 1.1076388), (-0.19444448, 1.0208333), (-0.107638896, 1.0208333), (-0.107638896, 1.1076388), (-0.19444448, 1.1076388), (-0.107638896, 1.0208333), (-0.020833313, 1.0208333), (-0.020833313, 1.1076388), (-0.107638896, 1.1076388), (-0.020833313, 1.0208333), (0.06597221, 1.0208333), (0.06597221, 1.1076388), (-0.020833313, 1.1076388), (0.06597221, 1.0208333), (0.15277776, 1.0208333), (0.15277776, 1.1076388), (0.06597221, 1.1076388), (0.15277776, 1.0208333), (0.23958334, 1.0208333), (0.23958334, 1.1076388), (0.15277776, 1.1076388), (0.23958334, 1.0208333), (0.32638887, 1.0208333), (0.32638887, 1.1076388), (0.23958334, 1.1076388), (0.32638887, 1.0208333), (0.4131944, 1.0208333), (0.4131944, 1.1076388), (0.32638887, 1.1076388), (0.4131944, 1.0208333), (0.5, 1.0208333), (0.5, 1.1076388), (0.4131944, 1.1076388), (0.5, 1.0208333), (0.5868055, 1.0208333), (0.5868055, 1.1076388), (0.5, 1.1076388), (0.5868055, 1.0208333), (0.67361104, 1.0208333), (0.67361104, 1.1076388), (0.5868055, 1.1076388), (0.67361104, 1.0208333), (0.7604166, 1.0208333), (0.7604166, 1.1076388), (0.67361104, 1.1076388), (0.7604166, 1.0208333), (0.8472222, 1.0208333), (0.8472222, 1.1076388), (0.7604166, 1.1076388), (0.8472222, 1.0208333), (0.9340277, 1.0208333), (0.9340277, 1.1076388), (0.8472222, 1.1076388), (0.9340277, 1.0208333), (1.0208333, 1.0208333), (1.0208333, 1.1076388), (0.9340277, 1.1076388), (1.0208333, 1.0208333), (1.1076388, 1.0208333), (1.1076388, 1.1076388), (1.0208333, 1.1076388), (1.1076388, 1.0208333), (1.1944444, 1.0208333), (1.1944444, 1.1076388), (1.1076388, 1.1076388), (1.1944444, 1.0208333), (1.28125, 1.0208333), (1.28125, 1.1076388), (1.1944444, 1.1076388), (1.28125, 1.0208333), (1.3680553, 1.0208333), (1.3680553, 1.1076388), (1.28125, 1.1076388), (1.3680553, 1.0208333), (1.454861, 1.0208333), (1.454861, 1.1076388), (1.3680553, 1.1076388), (1.454861, 1.0208333), (1.5416666, 1.0208333), (1.5416666, 1.1076388), (1.454861, 1.1076388), (-0.5416666, 1.1076388), (-0.4548611, 1.1076388), (-0.4548611, 1.1944444), (-0.5416666, 1.1944444), (-0.4548611, 1.1076388), (-0.36805552, 1.1076388), (-0.36805552, 1.1944444), (-0.4548611, 1.1944444), (-0.36805552, 1.1076388), (-0.28125, 1.1076388), (-0.28125, 1.1944444), (-0.36805552, 1.1944444), (-0.28125, 1.1076388), (-0.19444448, 1.1076388), (-0.19444448, 1.1944444), (-0.28125, 1.1944444), (-0.19444448, 1.1076388), (-0.107638896, 1.1076388), (-0.107638896, 1.1944444), (-0.19444448, 1.1944444), (-0.107638896, 1.1076388), (-0.020833313, 1.1076388), (-0.020833313, 1.1944444), (-0.107638896, 1.1944444), (-0.020833313, 1.1076388), (0.06597221, 1.1076388), (0.06597221, 1.1944444), (-0.020833313, 1.1944444), (0.06597221, 1.1076388), (0.15277776, 1.1076388), (0.15277776, 1.1944444), (0.06597221, 1.1944444), (0.15277776, 1.1076388), (0.23958334, 1.1076388), (0.23958334, 1.1944444), (0.15277776, 1.1944444), (0.23958334, 1.1076388), (0.32638887, 1.1076388), (0.32638887, 1.1944444), (0.23958334, 1.1944444), (0.32638887, 1.1076388), (0.4131944, 1.1076388), (0.4131944, 1.1944444), (0.32638887, 1.1944444), (0.4131944, 1.1076388), (0.5, 1.1076388), (0.5, 1.1944444), (0.4131944, 1.1944444), (0.5, 1.1076388), (0.5868055, 1.1076388), (0.5868055, 1.1944444), (0.5, 1.1944444), (0.5868055, 1.1076388), (0.67361104, 1.1076388), (0.67361104, 1.1944444), (0.5868055, 1.1944444), (0.67361104, 1.1076388), (0.7604166, 1.1076388), (0.7604166, 1.1944444), (0.67361104, 1.1944444), (0.7604166, 1.1076388), (0.8472222, 1.1076388), (0.8472222, 1.1944444), (0.7604166, 1.1944444), (0.8472222, 1.1076388), (0.9340277, 1.1076388), (0.9340277, 1.1944444), (0.8472222, 1.1944444), (0.9340277, 1.1076388), (1.0208333, 1.1076388), (1.0208333, 1.1944444), (0.9340277, 1.1944444), (1.0208333, 1.1076388), (1.1076388, 1.1076388), (1.1076388, 1.1944444), (1.0208333, 1.1944444), (1.1076388, 1.1076388), (1.1944444, 1.1076388), (1.1944444, 1.1944444), (1.1076388, 1.1944444), (1.1944444, 1.1076388), (1.28125, 1.1076388), (1.28125, 1.1944444), (1.1944444, 1.1944444), (1.28125, 1.1076388), (1.3680553, 1.1076388), (1.3680553, 1.1944444), (1.28125, 1.1944444), (1.3680553, 1.1076388), (1.454861, 1.1076388), (1.454861, 1.1944444), (1.3680553, 1.1944444), (1.454861, 1.1076388), (1.5416666, 1.1076388), (1.5416666, 1.1944444), (1.454861, 1.1944444), (-0.5416666, 1.1944444), (-0.4548611, 1.1944444), (-0.4548611, 1.28125), (-0.5416666, 1.28125), (-0.4548611, 1.1944444), (-0.36805552, 1.1944444), (-0.36805552, 1.28125), (-0.4548611, 1.28125), (-0.36805552, 1.1944444), (-0.28125, 1.1944444), (-0.28125, 1.28125), (-0.36805552, 1.28125), (-0.28125, 1.1944444), (-0.19444448, 1.1944444), (-0.19444448, 1.28125), (-0.28125, 1.28125), (-0.19444448, 1.1944444), (-0.107638896, 1.1944444), (-0.107638896, 1.28125), (-0.19444448, 1.28125), (-0.107638896, 1.1944444), (-0.020833313, 1.1944444), (-0.020833313, 1.28125), (-0.107638896, 1.28125), (-0.020833313, 1.1944444), (0.06597221, 1.1944444), (0.06597221, 1.28125), (-0.020833313, 1.28125), (0.06597221, 1.1944444), (0.15277776, 1.1944444), (0.15277776, 1.28125), (0.06597221, 1.28125), (0.15277776, 1.1944444), (0.23958334, 1.1944444), (0.23958334, 1.28125), (0.15277776, 1.28125), (0.23958334, 1.1944444), (0.32638887, 1.1944444), (0.32638887, 1.28125), (0.23958334, 1.28125), (0.32638887, 1.1944444), (0.4131944, 1.1944444), (0.4131944, 1.28125), (0.32638887, 1.28125), (0.4131944, 1.1944444), (0.5, 1.1944444), (0.5, 1.28125), (0.4131944, 1.28125), (0.5, 1.1944444), (0.5868055, 1.1944444), (0.5868055, 1.28125), (0.5, 1.28125), (0.5868055, 1.1944444), (0.67361104, 1.1944444), (0.67361104, 1.28125), (0.5868055, 1.28125), (0.67361104, 1.1944444), (0.7604166, 1.1944444), (0.7604166, 1.28125), (0.67361104, 1.28125), (0.7604166, 1.1944444), (0.8472222, 1.1944444), (0.8472222, 1.28125), (0.7604166, 1.28125), (0.8472222, 1.1944444), (0.9340277, 1.1944444), (0.9340277, 1.28125), (0.8472222, 1.28125), (0.9340277, 1.1944444), (1.0208333, 1.1944444), (1.0208333, 1.28125), (0.9340277, 1.28125), (1.0208333, 1.1944444), (1.1076388, 1.1944444), (1.1076388, 1.28125), (1.0208333, 1.28125), (1.1076388, 1.1944444), (1.1944444, 1.1944444), (1.1944444, 1.28125), (1.1076388, 1.28125), (1.1944444, 1.1944444), (1.28125, 1.1944444), (1.28125, 1.28125), (1.1944444, 1.28125), (1.28125, 1.1944444), (1.3680553, 1.1944444), (1.3680553, 1.28125), (1.28125, 1.28125), (1.3680553, 1.1944444), (1.454861, 1.1944444), (1.454861, 1.28125), (1.3680553, 1.28125), (1.454861, 1.1944444), (1.5416666, 1.1944444), (1.5416666, 1.28125), (1.454861, 1.28125), (-0.5416666, 1.28125), (-0.4548611, 1.28125), (-0.4548611, 1.3680553), (-0.5416666, 1.3680553), (-0.4548611, 1.28125), (-0.36805552, 1.28125), (-0.36805552, 1.3680553), (-0.4548611, 1.3680553), (-0.36805552, 1.28125), (-0.28125, 1.28125), (-0.28125, 1.3680553), (-0.36805552, 1.3680553), (-0.28125, 1.28125), (-0.19444448, 1.28125), (-0.19444448, 1.3680553), (-0.28125, 1.3680553), (-0.19444448, 1.28125), (-0.107638896, 1.28125), (-0.107638896, 1.3680553), (-0.19444448, 1.3680553), (-0.107638896, 1.28125), (-0.020833313, 1.28125), (-0.020833313, 1.3680553), (-0.107638896, 1.3680553), (-0.020833313, 1.28125), (0.06597221, 1.28125), (0.06597221, 1.3680553), (-0.020833313, 1.3680553), (0.06597221, 1.28125), (0.15277776, 1.28125), (0.15277776, 1.3680553), (0.06597221, 1.3680553), (0.15277776, 1.28125), (0.23958334, 1.28125), (0.23958334, 1.3680553), (0.15277776, 1.3680553), (0.23958334, 1.28125), (0.32638887, 1.28125), (0.32638887, 1.3680553), (0.23958334, 1.3680553), (0.32638887, 1.28125), (0.4131944, 1.28125), (0.4131944, 1.3680553), (0.32638887, 1.3680553), (0.4131944, 1.28125), (0.5, 1.28125), (0.5, 1.3680553), (0.4131944, 1.3680553), (0.5, 1.28125), (0.5868055, 1.28125), (0.5868055, 1.3680553), (0.5, 1.3680553), (0.5868055, 1.28125), (0.67361104, 1.28125), (0.67361104, 1.3680553), (0.5868055, 1.3680553), (0.67361104, 1.28125), (0.7604166, 1.28125), (0.7604166, 1.3680553), (0.67361104, 1.3680553), (0.7604166, 1.28125), (0.8472222, 1.28125), (0.8472222, 1.3680553), (0.7604166, 1.3680553), (0.8472222, 1.28125), (0.9340277, 1.28125), (0.9340277, 1.3680553), (0.8472222, 1.3680553), (0.9340277, 1.28125), (1.0208333, 1.28125), (1.0208333, 1.3680553), (0.9340277, 1.3680553), (1.0208333, 1.28125), (1.1076388, 1.28125), (1.1076388, 1.3680553), (1.0208333, 1.3680553), (1.1076388, 1.28125), (1.1944444, 1.28125), (1.1944444, 1.3680553), (1.1076388, 1.3680553), (1.1944444, 1.28125), (1.28125, 1.28125), (1.28125, 1.3680553), (1.1944444, 1.3680553), (1.28125, 1.28125), (1.3680553, 1.28125), (1.3680553, 1.3680553), (1.28125, 1.3680553), (1.3680553, 1.28125), (1.454861, 1.28125), (1.454861, 1.3680553), (1.3680553, 1.3680553), (1.454861, 1.28125), (1.5416666, 1.28125), (1.5416666, 1.3680553), (1.454861, 1.3680553), (-0.5416666, 1.3680553), (-0.4548611, 1.3680553), (-0.4548611, 1.4548609), (-0.5416666, 1.4548609), (-0.4548611, 1.3680553), (-0.36805552, 1.3680553), (-0.36805552, 1.4548609), (-0.4548611, 1.4548609), (-0.36805552, 1.3680553), (-0.28125, 1.3680553), (-0.28125, 1.4548609), (-0.36805552, 1.4548609), (-0.28125, 1.3680553), (-0.19444448, 1.3680553), (-0.19444448, 1.4548609), (-0.28125, 1.4548609), (-0.19444448, 1.3680553), (-0.107638896, 1.3680553), (-0.107638896, 1.4548609), (-0.19444448, 1.4548609), (-0.107638896, 1.3680553), (-0.020833313, 1.3680553), (-0.020833313, 1.4548609), (-0.107638896, 1.4548609), (-0.020833313, 1.3680553), (0.06597221, 1.3680553), (0.06597221, 1.4548609), (-0.020833313, 1.4548609), (0.06597221, 1.3680553), (0.15277776, 1.3680553), (0.15277776, 1.4548609), (0.06597221, 1.4548609), (0.15277776, 1.3680553), (0.23958334, 1.3680553), (0.23958334, 1.4548609), (0.15277776, 1.4548609), (0.23958334, 1.3680553), (0.32638887, 1.3680553), (0.32638887, 1.4548609), (0.23958334, 1.4548609), (0.32638887, 1.3680553), (0.4131944, 1.3680553), (0.4131944, 1.4548609), (0.32638887, 1.4548609), (0.4131944, 1.3680553), (0.5, 1.3680553), (0.5, 1.4548609), (0.4131944, 1.4548609), (0.5, 1.3680553), (0.5868055, 1.3680553), (0.5868055, 1.4548609), (0.5, 1.4548609), (0.5868055, 1.3680553), (0.67361104, 1.3680553), (0.67361104, 1.4548609), (0.5868055, 1.4548609), (0.67361104, 1.3680553), (0.7604166, 1.3680553), (0.7604166, 1.4548609), (0.67361104, 1.4548609), (0.7604166, 1.3680553), (0.8472222, 1.3680553), (0.8472222, 1.4548609), (0.7604166, 1.4548609), (0.8472222, 1.3680553), (0.9340277, 1.3680553), (0.9340277, 1.4548609), (0.8472222, 1.4548609), (0.9340277, 1.3680553), (1.0208333, 1.3680553), (1.0208333, 1.4548609), (0.9340277, 1.4548609), (1.0208333, 1.3680553), (1.1076388, 1.3680553), (1.1076388, 1.4548609), (1.0208333, 1.4548609), (1.1076388, 1.3680553), (1.1944444, 1.3680553), (1.1944444, 1.4548609), (1.1076388, 1.4548609), (1.1944444, 1.3680553), (1.28125, 1.3680553), (1.28125, 1.4548609), (1.1944444, 1.4548609), (1.28125, 1.3680553), (1.3680553, 1.3680553), (1.3680553, 1.4548609), (1.28125, 1.4548609), (1.3680553, 1.3680553), (1.454861, 1.3680553), (1.454861, 1.4548609), (1.3680553, 1.4548609), (1.454861, 1.3680553), (1.5416666, 1.3680553), (1.5416666, 1.4548609), (1.454861, 1.4548609), (-0.5416666, 1.4548609), (-0.4548611, 1.4548609), (-0.4548611, 1.5416666), (-0.5416666, 1.5416666), (-0.4548611, 1.4548609), (-0.36805552, 1.4548609), (-0.36805552, 1.5416666), (-0.4548611, 1.5416666), (-0.36805552, 1.4548609), (-0.28125, 1.4548609), (-0.28125, 1.5416666), (-0.36805552, 1.5416666), (-0.28125, 1.4548609), (-0.19444448, 1.4548609), (-0.19444448, 1.5416666), (-0.28125, 1.5416666), (-0.19444448, 1.4548609), (-0.107638896, 1.4548609), (-0.107638896, 1.5416666), (-0.19444448, 1.5416666), (-0.107638896, 1.4548609), (-0.020833313, 1.4548609), (-0.020833313, 1.5416666), (-0.107638896, 1.5416666), (-0.020833313, 1.4548609), (0.06597221, 1.4548609), (0.06597221, 1.5416666), (-0.020833313, 1.5416666), (0.06597221, 1.4548609), (0.15277776, 1.4548609), (0.15277776, 1.5416666), (0.06597221, 1.5416666), (0.15277776, 1.4548609), (0.23958334, 1.4548609), (0.23958334, 1.5416666), (0.15277776, 1.5416666), (0.23958334, 1.4548609), (0.32638887, 1.4548609), (0.32638887, 1.5416666), (0.23958334, 1.5416666), (0.32638887, 1.4548609), (0.4131944, 1.4548609), (0.4131944, 1.5416666), (0.32638887, 1.5416666), (0.4131944, 1.4548609), (0.5, 1.4548609), (0.5, 1.5416666), (0.4131944, 1.5416666), (0.5, 1.4548609), (0.5868055, 1.4548609), (0.5868055, 1.5416666), (0.5, 1.5416666), (0.5868055, 1.4548609), (0.67361104, 1.4548609), (0.67361104, 1.5416666), (0.5868055, 1.5416666), (0.67361104, 1.4548609), (0.7604166, 1.4548609), (0.7604166, 1.5416666), (0.67361104, 1.5416666), (0.7604166, 1.4548609), (0.8472222, 1.4548609), (0.8472222, 1.5416666), (0.7604166, 1.5416666), (0.8472222, 1.4548609), (0.9340277, 1.4548609), (0.9340277, 1.5416666), (0.8472222, 1.5416666), (0.9340277, 1.4548609), (1.0208333, 1.4548609), (1.0208333, 1.5416666), (0.9340277, 1.5416666), (1.0208333, 1.4548609), (1.1076388, 1.4548609), (1.1076388, 1.5416666), (1.0208333, 1.5416666), (1.1076388, 1.4548609), (1.1944444, 1.4548609), (1.1944444, 1.5416666), (1.1076388, 1.5416666), (1.1944444, 1.4548609), (1.28125, 1.4548609), (1.28125, 1.5416666), (1.1944444, 1.5416666), (1.28125, 1.4548609), (1.3680553, 1.4548609), (1.3680553, 1.5416666), (1.28125, 1.5416666), (1.3680553, 1.4548609), (1.454861, 1.4548609), (1.454861, 1.5416666), (1.3680553, 1.5416666), (1.454861, 1.4548609), (1.5416666, 1.4548609), (1.5416666, 1.5416666), (1.454861, 1.5416666)] (
interpolation = "faceVarying"
)
int[] primvars:st:indices = None
int[] primvars:uv2:indices = None
int[] primvars:uv3:indices = None
uniform token subdivisionScheme = "none"
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
}
def Material "Material" (
references = None
)
{
token outputs:mtlx:surface.connect =
token outputs:realitykit:vertex
float2 ui:nodegraph:realitykit:subgraphOutputs:pos = (1584.082, 297.875)
int ui:nodegraph:realitykit:subgraphOutputs:stackingOrder = 208
def Shader "PreviewSurface"
{
uniform token info:id = "ND_UsdPreviewSurface_surfaceshader"
float inputs:clearcoat
float inputs:clearcoatRoughness
color3f inputs:diffuseColor = (0, 0, 0) (
colorSpace = "srgb_texture"
)
color3f inputs:diffuseColor.connect = None
color3f inputs:emissiveColor.connect =
float inputs:ior
float inputs:metallic
float3 inputs:normal
float inputs:occlusion
float inputs:opacity
float inputs:roughness = 1
token outputs:out
float2 ui:nodegraph:node:pos = (1358.9023, 236.28516)
int ui:nodegraph:node:stackingOrder = 208
string[] ui:nodegraph:realitykit:node:attributesShowingChildren = ["Advanced"]
}
def Shader "Swizzle" (
references = None
)
{
uniform token info:id = "ND_swizzle_color4_color3"
string inputs:channels = "rgb"
color4f inputs:in = (0, 0.9914394, 1, 1) (
colorSpace = "srgb_texture"
)
color4f inputs:in.connect =
color3f outputs:out
float2 ui:nodegraph:node:pos = (600.34766, 201.72266)
int ui:nodegraph:node:stackingOrder = 214
}
def Shader "Read_EmissionUV"
{
uniform token info:id = "ND_UsdPrimvarReader_vector2"
float2 inputs:fallback
string inputs:varname = "emissionUV"
float2 outputs:out
float2 ui:nodegraph:node:pos = (25.28125, 95.32422)
int ui:nodegraph:node:stackingOrder = 155
}
def Shader "Read_AttenuationUV"
{
uniform token info:id = "ND_UsdPrimvarReader_vector2"
float2 inputs:fallback
string inputs:varname = "attenuationUV"
float2 outputs:out
float2 ui:nodegraph:node:pos = (21.964844, 237.73828)
int ui:nodegraph:node:stackingOrder = 155
}
def Shader "ViewDirection"
{
uniform token info:id = "ND_realitykit_viewdirection_vector3"
float3 outputs:out
float2 ui:nodegraph:node:pos = (3.890625, 370.65625)
int ui:nodegraph:node:stackingOrder = 124
}
def Shader "Reflection_Diffuse"
{
uniform token info:id = "ND_realitykit_light_spill_diffuse"
asset inputs:attenuationMap = @DefaultAttenuationMap.exr@
float2 inputs:attenuationUV.connect =
float2 inputs:emitterUV.connect =
color4f outputs:out
float2 ui:nodegraph:node:pos = (278.48438, 138.34766)
int ui:nodegraph:node:stackingOrder = 167
}
def Shader "Reflection_Specular"
{
uniform token info:id = "ND_realitykit_light_spill_specular"
float2 inputs:antialiasingStrength
float3 inputs:reflection_origin
float3 inputs:unreflected_direction.connect =
color4f outputs:out
float2 ui:nodegraph:node:pos = (304.35938, 380.5625)
int ui:nodegraph:node:stackingOrder = 168
}
def Shader "Separate4" (
references = None
)
{
uniform token info:id = "ND_separate4_color4"
color4f inputs:in.connect =
float outputs:outa
float outputs:outb
float outputs:outg
float outputs:outr
float2 ui:nodegraph:node:pos = (570.3125, 468.03516)
int ui:nodegraph:node:stackingOrder = 169
}
def Shader "Combine3" (
references = None
)
{
uniform token info:id = "ND_combine3_color3"
float inputs:in1.connect =
float inputs:in2.connect =
float inputs:in3.connect =
color3f outputs:out
float2 ui:nodegraph:node:pos = (748.46875, 459.0625)
int ui:nodegraph:node:stackingOrder = 174
}
def Shader "Mix_1" (
references = None
)
{
uniform token info:id = "ND_mix_color3"
color3f inputs:bg
color3f inputs:fg.connect =
float inputs:mix.connect =
color3f outputs:out
float2 ui:nodegraph:node:pos = (934.75, 462.09375)
int ui:nodegraph:node:stackingOrder = 212
}
def Shader "Add" (
references = None
)
{
uniform token info:id = "ND_add_color3"
color3f inputs:in1.connect =
color3f inputs:in2.connect =
color3f outputs:out
float2 ui:nodegraph:node:pos = (1128.5977, 255.71094)
int ui:nodegraph:node:stackingOrder = 210
}
}
}
================================================
FILE: Music Kit/Packages/RealityKitContent/Sources/RealityKitContent/RealityKitContent.rkassets/Immersive.usda
================================================
#usda 1.0
(
defaultPrim = "Root"
metersPerUnit = 1
upAxis = "Y"
)
def Xform "Root"
{
reorder nameChildren = ["Sphere_Left", "Sphere_Right", "GridMaterial"]
def "SkyDome" (
active = true
prepend references = @SkyDome.usdz@
)
{
float3 xformOp:scale = (0.01, 0.01, 0.01)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
}
def Xform "Video_Dock" (
references = None
)
{
double3 xformOp:translate = (0, 0.8, -3)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
def Xform "Player"
{
double3 xformOp:translate = (0, 0.6, 0)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
def RealityKitComponent "CustomDockingRegion"
{
token info:id = "RealityKit.CustomDockingRegion"
def RealityKitStruct "m_bounds"
{
float3 max = (1.2, 0.5, 0)
float3 min = (-1.2, -0.5, -0)
}
}
}
def "Ground" (
prepend references = @Ground/Ground.usda@
)
{
}
}
}
================================================
FILE: Music Kit/Packages/RealityKitContent/Sources/RealityKitContent/RealityKitContent.swift
================================================
import Foundation
/// Bundle for the RealityKitContent project
public let realityKitContentBundle = Bundle.module
================================================
FILE: Music Kit/README.md
================================================
# Music Kit
Play Apple Music directly inside your visionOS app using MusicKit.
## Enable MusicKit for your App ID
The following steps are REQUIRED to use MusicKit:
* In [Certificates, Identifiers & Profiles](https://developer.apple.com/account/resources), click Identifiers in the sidebar.
* On the top left, click the add button (+), select App IDs, then click Continue.
* [Register an App ID](https://developer.apple.com/help/account/manage-identifiers/register-an-app-id).
* Click the App Services tab.
* Select the MusicKit checkbox.
* Click Continue, review the registration information, and click Register.
***Source**: [developer.apple.com](https://developer.apple.com/help/account/configure-app-services/musickit/)*
## Video Preview
https://github.com/user-attachments/assets/b9d1fde4-fe8e-49c0-8f96-d52fdcda59e7
================================================
FILE: Pencil/Packages/RealityKitContent/Package.realitycomposerpro/ProjectData/main.json
================================================
{
"pathsToIds" : {
"\/RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/GridMaterial.usda" : "CB766F92-EE55-4A63-9401-E7B8C009764D",
"\/RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/Immersive.usda" : "65F6F990-A780-4474-B78B-572E0E4E273D",
"\/RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/Scene.usda" : "0A9B4653-B11E-4D6A-850E-C6FCB621626C",
"\/RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/Untitled Scene.usda" : "D560BB77-AAF3-4BDE-B7C4-989332A4688B",
"RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/GridMaterial.usda" : "66168B71-AB05-424E-8B6C-D33D6E61B08F",
"RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/Immersive.usda" : "AF09ED6F-1707-48FD-8720-65B998362C09",
"RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/Scene.usda" : "D66134B1-3681-4A8E-AFE5-29F257229F3B"
}
}
================================================
FILE: Pencil/Packages/RealityKitContent/Package.realitycomposerpro/WorkspaceData/SceneMetadataList.json
================================================
{
"0A9B4653-B11E-4D6A-850E-C6FCB621626C" : {
"cameraTransform" : [
1,
0,
0,
0,
0,
0.86602545,
-0.49999994,
0,
0,
0.49999994,
0.86602545,
0,
0.0035969093,
0.35542378,
0.62919164,
1
],
"objectMetadataList" : [
[
"0A9B4653-B11E-4D6A-850E-C6FCB621626C",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
},
"65F6F990-A780-4474-B78B-572E0E4E273D" : {
"cameraTransform" : [
1,
0,
-0,
0,
-0,
0.86602545,
-0.49999988,
0,
0,
0.49999988,
0.86602545,
0,
1.1972517e-08,
2.6179132,
0.43191218,
1
],
"objectMetadataList" : [
[
"65F6F990-A780-4474-B78B-572E0E4E273D",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
},
"66168B71-AB05-424E-8B6C-D33D6E61B08F" : {
"cameraTransform" : [
1,
0,
-0,
0,
-0,
0.8660254,
-0.5,
0,
0,
0.5,
0.8660254,
0,
0,
0.23875366,
0.4135335,
1
],
"objectMetadataList" : [
[
"66168B71-AB05-424E-8B6C-D33D6E61B08F",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
},
"AF09ED6F-1707-48FD-8720-65B998362C09" : {
"cameraTransform" : [
1,
0,
-0,
0,
-0,
0.7071069,
-0.7071067,
0,
0,
0.7071067,
0.7071069,
0,
0,
2.8836339,
-0.107588194,
1
],
"objectMetadataList" : [
[
"AF09ED6F-1707-48FD-8720-65B998362C09",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
},
[
"AF09ED6F-1707-48FD-8720-65B998362C09",
"Root",
"Sphere_Left"
],
{
"isExpanded" : true,
"isLocked" : false
},
[
"AF09ED6F-1707-48FD-8720-65B998362C09",
"Root",
"Sphere_Right"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
},
"CB766F92-EE55-4A63-9401-E7B8C009764D" : {
"cameraTransform" : [
1,
0,
-0,
0,
-0,
0.8660253,
-0.5000001,
0,
0,
0.5000001,
0.8660253,
0,
0,
0.27093494,
0.4692731,
1
],
"objectMetadataList" : [
[
"CB766F92-EE55-4A63-9401-E7B8C009764D",
"Root",
"GridMaterial"
],
{
"isExpanded" : true,
"isLocked" : false
},
[
"CB766F92-EE55-4A63-9401-E7B8C009764D",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
},
"D560BB77-AAF3-4BDE-B7C4-989332A4688B" : {
"cameraTransform" : [
1,
0,
-0,
0,
-0,
0.8660253,
-0.5000001,
0,
0,
0.5000001,
0.8660253,
0,
0,
0.27093494,
0.4692731,
1
],
"objectMetadataList" : [
]
},
"D66134B1-3681-4A8E-AFE5-29F257229F3B" : {
"cameraTransform" : [
1,
0,
-0,
0,
-0,
0.7071069,
-0.7071067,
0,
0,
0.7071067,
0.7071069,
0,
0,
0.26894823,
0.26934713,
1
],
"objectMetadataList" : [
[
"D66134B1-3681-4A8E-AFE5-29F257229F3B",
"Root",
"GridMaterial",
"GridMaterial"
],
{
"isExpanded" : true,
"isLocked" : false
},
[
"D66134B1-3681-4A8E-AFE5-29F257229F3B",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
}
}
================================================
FILE: Pencil/Packages/RealityKitContent/Package.realitycomposerpro/WorkspaceData/Settings.rcprojectdata
================================================
{
"cameraPresets" : {
},
"secondaryToolbarData" : {
"isGridVisible" : true,
"sceneReverbPreset" : -1
},
"unitDefaults" : {
"°" : "°",
"kg" : "g",
"m" : "cm",
"m\/s" : "m\/s",
"m\/s²" : "m\/s²",
"s" : "s"
}
}
================================================
FILE: Pencil/Packages/RealityKitContent/Package.swift
================================================
// swift-tools-version:5.9
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "RealityKitContent",
products: [
// Products define the executables and libraries a package produces, and make them visible to other packages.
.library(
name: "RealityKitContent",
targets: ["RealityKitContent"]),
],
dependencies: [
// Dependencies declare other packages that this package depends on.
// .package(url: /* package url */, from: "1.0.0"),
],
targets: [
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
// Targets can depend on other targets in this package, and on products in packages this package depends on.
.target(
name: "RealityKitContent",
dependencies: []),
]
)
================================================
FILE: Pencil/Packages/RealityKitContent/README.md
================================================
# RealityKitContent
A description of this package.
================================================
FILE: Pencil/Packages/RealityKitContent/Sources/RealityKitContent/RealityKitContent.rkassets/Immersive.usda
================================================
#usda 1.0
(
defaultPrim = "Root"
metersPerUnit = 1
upAxis = "Y"
)
def Xform "Root"
{
reorder nameChildren = ["Sphere_Left", "Sphere_Right", "GridMaterial"]
def Sphere "Sphere_Right" (
active = true
prepend apiSchemas = ["MaterialBindingAPI"]
)
{
rel material:binding = (
bindMaterialAs = "weakerThanDescendants"
)
double radius = 0.1
quatf xformOp:orient = (1, 0, 0, 0)
float3 xformOp:scale = (1, 1, 1)
float3 xformOp:translate = (0.5, 1.5, -1.5)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
}
def Sphere "Sphere_Left" (
active = true
prepend apiSchemas = ["MaterialBindingAPI"]
)
{
rel material:binding = (
bindMaterialAs = "weakerThanDescendants"
)
double radius = 0.1
quatf xformOp:orient = (1, 0, 0, 0)
float3 xformOp:scale = (1, 1, 1)
float3 xformOp:translate = (-0.5, 1.5, -1.5)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
}
def "GridMaterial" (
active = true
prepend references = @Materials/GridMaterial.usda@
)
{
float3 xformOp:scale = (1, 1, 1)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
}
}
================================================
FILE: Pencil/Packages/RealityKitContent/Sources/RealityKitContent/RealityKitContent.rkassets/Materials/GridMaterial.usda
================================================
#usda 1.0
(
defaultPrim = "Root"
metersPerUnit = 1
upAxis = "Y"
)
def Xform "Root"
{
def Material "GridMaterial"
{
reorder nameChildren = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "DefaultSurfaceShader", "MaterialXPreviewSurface", "Texcoord", "Add", "Multiply", "Fractional", "LineCounts", "Multiply_1", "Separate2", "Separate2_1", "Ifgreater", "Ifgreater_1", "Max", "Background_Color"]
token outputs:mtlx:surface.connect =
token outputs:realitykit:vertex
token outputs:surface
float2 ui:nodegraph:realitykit:subgraphOutputs:pos = (2222, 300.5)
float2 ui:nodegraph:realitykit:subgraphOutputs:size = (182, 89)
int ui:nodegraph:realitykit:subgraphOutputs:stackingOrder = 749
def Shader "DefaultSurfaceShader"
{
uniform token info:id = "UsdPreviewSurface"
color3f inputs:diffuseColor = (1, 1, 1)
float inputs:roughness = 0.75
token outputs:surface
}
def Shader "MaterialXPreviewSurface"
{
uniform token info:id = "ND_UsdPreviewSurface_surfaceshader"
float inputs:clearcoat
float inputs:clearcoatRoughness
color3f inputs:diffuseColor.connect =
color3f inputs:emissiveColor
float inputs:ior
float inputs:metallic = 0.15
float3 inputs:normal
float inputs:occlusion
float inputs:opacity
float inputs:opacityThreshold
float inputs:roughness = 0.5
token outputs:out
float2 ui:nodegraph:node:pos = (1967, 300.5)
float2 ui:nodegraph:node:size = (208, 297)
int ui:nodegraph:node:stackingOrder = 870
string[] ui:nodegraph:realitykit:node:attributesShowingChildren = ["Advanced"]
}
def Shader "Texcoord"
{
uniform token info:id = "ND_texcoord_vector2"
float2 outputs:out
float2 ui:nodegraph:node:pos = (94.14453, 35.29297)
float2 ui:nodegraph:node:size = (182, 43)
int ui:nodegraph:node:stackingOrder = 1358
}
def Shader "Multiply"
{
uniform token info:id = "ND_multiply_vector2"
float2 inputs:in1.connect =
float2 inputs:in2 = (32, 15)
float2 inputs:in2.connect =
float2 outputs:out
float2 ui:nodegraph:node:pos = (275.64453, 47.29297)
float2 ui:nodegraph:node:size = (61, 36)
int ui:nodegraph:node:stackingOrder = 1348
string[] ui:nodegraph:realitykit:node:attributesShowingChildren = ["inputs:in2"]
}
def Shader "Fractional"
{
uniform token info:id = "ND_realitykit_fractional_vector2"
float2 inputs:in.connect =
float2 outputs:out
float2 ui:nodegraph:node:pos = (440.5, 49.5)
float2 ui:nodegraph:node:size = (155, 99)
int ui:nodegraph:node:stackingOrder = 1345
}
def Shader "BaseColor"
{
uniform token info:id = "ND_constant_color3"
color3f inputs:value = (0.89737034, 0.89737034, 0.89737034) (
colorSpace = "Input - Texture - sRGB - sRGB"
)
color3f inputs:value.connect = None
color3f outputs:out
float2 ui:nodegraph:node:pos = (1537.5977, 363.07812)
float2 ui:nodegraph:node:size = (150, 43)
int ui:nodegraph:node:stackingOrder = 1353
}
def Shader "LineColor"
{
uniform token info:id = "ND_constant_color3"
color3f inputs:value = (0.55945957, 0.55945957, 0.55945957) (
colorSpace = "Input - Texture - sRGB - sRGB"
)
color3f inputs:value.connect = None
color3f outputs:out
float2 ui:nodegraph:node:pos = (1536.9844, 287.86328)
float2 ui:nodegraph:node:size = (146, 43)
int ui:nodegraph:node:stackingOrder = 1355
}
def Shader "LineWidths"
{
uniform token info:id = "ND_combine2_vector2"
float inputs:in1 = 0.1
float inputs:in2 = 0.1
float2 outputs:out
float2 ui:nodegraph:node:pos = (443.64453, 233.79297)
float2 ui:nodegraph:node:size = (151, 43)
int ui:nodegraph:node:stackingOrder = 1361
}
def Shader "LineCounts"
{
uniform token info:id = "ND_combine2_vector2"
float inputs:in1 = 24
float inputs:in2 = 12
float2 outputs:out
float2 ui:nodegraph:node:pos = (94.14453, 138.29297)
float2 ui:nodegraph:node:size = (153, 43)
int ui:nodegraph:node:stackingOrder = 1359
}
def Shader "Remap"
{
uniform token info:id = "ND_remap_color3"
color3f inputs:in.connect =
color3f inputs:inhigh.connect = None
color3f inputs:inlow.connect = None
color3f inputs:outhigh.connect =
color3f inputs:outlow.connect =
color3f outputs:out
float2 ui:nodegraph:node:pos = (1755.5, 300.5)
float2 ui:nodegraph:node:size = (95, 171)
int ui:nodegraph:node:stackingOrder = 1282
string[] ui:nodegraph:realitykit:node:attributesShowingChildren = ["inputs:outlow"]
}
def Shader "Separate2"
{
uniform token info:id = "ND_separate2_vector2"
float2 inputs:in.connect =
float outputs:outx
float outputs:outy
float2 ui:nodegraph:node:pos = (1212.6445, 128.91797)
float2 ui:nodegraph:node:size = (116, 117)
int ui:nodegraph:node:stackingOrder = 1363
}
def Shader "Combine3"
{
uniform token info:id = "ND_combine3_color3"
float inputs:in1.connect =
float inputs:in2.connect =
float inputs:in3.connect =
color3f outputs:out
float2 ui:nodegraph:node:pos = (1578.1445, 128.91797)
float2 ui:nodegraph:node:size = (146, 54)
int ui:nodegraph:node:stackingOrder = 1348
}
def Shader "Range"
{
uniform token info:id = "ND_range_vector2"
bool inputs:doclamp = 1
float2 inputs:gamma = (2, 2)
float2 inputs:in.connect =
float2 inputs:inhigh.connect =
float2 inputs:inlow = (0.02, 0.02)
float2 inputs:outhigh
float2 inputs:outlow
float2 outputs:out
float2 ui:nodegraph:node:pos = (990.64453, 128.91797)
float2 ui:nodegraph:node:size = (98, 207)
int ui:nodegraph:node:stackingOrder = 1364
}
def Shader "Subtract"
{
uniform token info:id = "ND_subtract_vector2"
float2 inputs:in1.connect =
float2 inputs:in2.connect =
float2 outputs:out
float2 ui:nodegraph:node:pos = (612.64453, 87.04297)
float2 ui:nodegraph:node:size = (63, 36)
int ui:nodegraph:node:stackingOrder = 1348
}
def Shader "Absval"
{
uniform token info:id = "ND_absval_vector2"
float2 inputs:in.connect =
float2 outputs:out
float2 ui:nodegraph:node:pos = (765.64453, 87.04297)
float2 ui:nodegraph:node:size = (123, 43)
int ui:nodegraph:node:stackingOrder = 1348
}
def Shader "Min"
{
uniform token info:id = "ND_min_float"
float inputs:in1.connect =
float inputs:in2.connect =
float outputs:out
float2 ui:nodegraph:node:pos = (1388.1445, 128.91797)
float2 ui:nodegraph:node:size = (114, 36)
int ui:nodegraph:node:stackingOrder = 1363
}
}
}
================================================
FILE: Pencil/Packages/RealityKitContent/Sources/RealityKitContent/RealityKitContent.rkassets/Scene.usda
================================================
#usda 1.0
(
defaultPrim = "Root"
metersPerUnit = 1
upAxis = "Y"
)
def Xform "Root"
{
reorder nameChildren = ["GridMaterial", "Sphere"]
rel material:binding = None (
bindMaterialAs = "weakerThanDescendants"
)
def Sphere "Sphere" (
active = true
prepend apiSchemas = ["MaterialBindingAPI"]
)
{
rel material:binding = (
bindMaterialAs = "weakerThanDescendants"
)
double radius = 0.05
quatf xformOp:orient = (1, 0, 0, 0)
float3 xformOp:scale = (1, 1, 1)
float3 xformOp:translate = (0, 0, 0.0004)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
def RealityKitComponent "Collider"
{
uint group = 1
uniform token info:id = "RealityKit.Collider"
uint mask = 4294967295
token type = "Default"
def RealityKitStruct "Shape"
{
float3 extent = (0.2, 0.2, 0.2)
float radius = 0.05
token shapeType = "Sphere"
}
}
def RealityKitComponent "InputTarget"
{
uniform token info:id = "RealityKit.InputTarget"
}
}
def "GridMaterial" (
active = true
prepend references = @Materials/GridMaterial.usda@
)
{
float3 xformOp:scale = (1, 1, 1)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
}
}
================================================
FILE: Pencil/Packages/RealityKitContent/Sources/RealityKitContent/RealityKitContent.swift
================================================
import Foundation
/// Bundle for the RealityKitContent project
public let realityKitContentBundle = Bundle.module
================================================
FILE: Pencil/Pencil/Assets.xcassets/AppIcon.solidimagestack/Back.solidimagestacklayer/Content.imageset/Contents.json
================================================
{
"images" : [
{
"idiom" : "vision",
"scale" : "2x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: Pencil/Pencil/Assets.xcassets/AppIcon.solidimagestack/Back.solidimagestacklayer/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: Pencil/Pencil/Assets.xcassets/AppIcon.solidimagestack/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
},
"layers" : [
{
"filename" : "Front.solidimagestacklayer"
},
{
"filename" : "Middle.solidimagestacklayer"
},
{
"filename" : "Back.solidimagestacklayer"
}
]
}
================================================
FILE: Pencil/Pencil/Assets.xcassets/AppIcon.solidimagestack/Front.solidimagestacklayer/Content.imageset/Contents.json
================================================
{
"images" : [
{
"idiom" : "vision",
"scale" : "2x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: Pencil/Pencil/Assets.xcassets/AppIcon.solidimagestack/Front.solidimagestacklayer/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: Pencil/Pencil/Assets.xcassets/AppIcon.solidimagestack/Middle.solidimagestacklayer/Content.imageset/Contents.json
================================================
{
"images" : [
{
"idiom" : "vision",
"scale" : "2x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: Pencil/Pencil/Assets.xcassets/AppIcon.solidimagestack/Middle.solidimagestacklayer/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: Pencil/Pencil/Assets.xcassets/Contents.json
================================================
{
"info" : {
"version" : 1,
"author" : "xcode"
}
}
================================================
FILE: Pencil/Pencil/ContentView.swift
================================================
//
// ContentView.swift
// Pencil
//
// Created by IVAN CAMPOS on 4/27/24.
//
import SwiftUI
import RealityKit
import PencilKit
struct CombinedView: View {
@Environment(\.openWindow) private var openWindow
var body: some View {
HStack {
// EMPTY
}.task {
// Open multiple PencilKit windows with specific IDs for different configurations
openWindow(id: "PencilKitBlack")
openWindow(id: "PencilKitWhite")
openWindow(id: "PencilKitClear")
}
}
}
struct ContentView: View {
@State var backgroundColor: UIColor
var body: some View {
VStack {
// A view hosting a drawing canvas, passing the selected background color
CanvasView(color: backgroundColor)
}
}
}
struct CanvasView: UIViewRepresentable {
@State var color: UIColor
@State private var canvasView: PKCanvasView = PKCanvasView()
@State private var toolPicker = PKToolPicker()
func makeUIView(context: Context) -> PKCanvasView {
canvasView.drawingPolicy = .anyInput // Allows input from any source (finger, pencil)
canvasView.becomeFirstResponder() // Makes this view the first responder to receive input events
canvasView.isRulerActive.toggle() // Toggles the ruler's visibility
if (color == .clear) {
canvasView.isOpaque = false // Makes the background transparent
canvasView.alpha = 1 // Sets the transparency level (opaque)
canvasView.backgroundColor = .clear // Applies a clear background
} else {
canvasView.isOpaque = true // Makes the background non-transparent
canvasView.backgroundColor = color // Applies the chosen color as background
}
toolPicker.setVisible(true, forFirstResponder: canvasView) // Displays the tool picker
toolPicker.addObserver(canvasView) // Registers the canvas as an observer to tool picker events
return canvasView
}
func updateUIView(_ uiView: PKCanvasView, context: Context) {
// EMPTY
}
}
================================================
FILE: Pencil/Pencil/Info.plist
================================================
UIApplicationSceneManifest
UIApplicationPreferredDefaultSceneSessionRole
UIWindowSceneSessionRoleApplication
UIApplicationSupportsMultipleScenes
UISceneConfigurations
================================================
FILE: Pencil/Pencil/PencilApp.swift
================================================
//
// PencilApp.swift
// Pencil
//
// Created by IVAN CAMPOS on 4/27/24.
//
import SwiftUI
@main
struct PencilApp: App {
@Environment(\.openURL) var openURL
var body: some Scene {
WindowGroup {
Text("Use Lasso Tool, then Drag & Drop")
Button("Open Settings for Pencil") {
let settingsUrl = URL(string: UIApplication.openSettingsURLString)!
openURL(settingsUrl)
}
CombinedView()
}
WindowGroup(id:"PencilKitBlack") {
ContentView(backgroundColor: .black)
}
WindowGroup(id:"PencilKitWhite") {
ContentView(backgroundColor: .white)
}
WindowGroup(id:"PencilKitClear") {
ContentView(backgroundColor: .clear)
}
}
}
================================================
FILE: Pencil/Pencil/Preview Content/Preview Assets.xcassets/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: Pencil/Pencil.xcodeproj/project.pbxproj
================================================
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 56;
objects = {
/* Begin PBXBuildFile section */
3B59CB552BDCF9D100924FEE /* RealityKitContent in Frameworks */ = {isa = PBXBuildFile; productRef = 3B59CB542BDCF9D100924FEE /* RealityKitContent */; };
3B59CB572BDCF9D100924FEE /* PencilApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B59CB562BDCF9D100924FEE /* PencilApp.swift */; };
3B59CB592BDCF9D100924FEE /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B59CB582BDCF9D100924FEE /* ContentView.swift */; };
3B59CB5D2BDCF9D200924FEE /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3B59CB5C2BDCF9D200924FEE /* Assets.xcassets */; };
3B59CB602BDCF9D200924FEE /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3B59CB5F2BDCF9D200924FEE /* Preview Assets.xcassets */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
3B59CB4F2BDCF9D100924FEE /* Pencil.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Pencil.app; sourceTree = BUILT_PRODUCTS_DIR; };
3B59CB532BDCF9D100924FEE /* RealityKitContent */ = {isa = PBXFileReference; lastKnownFileType = wrapper; path = RealityKitContent; sourceTree = ""; };
3B59CB562BDCF9D100924FEE /* PencilApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PencilApp.swift; sourceTree = ""; };
3B59CB582BDCF9D100924FEE /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; };
3B59CB5C2BDCF9D200924FEE /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
3B59CB5F2BDCF9D200924FEE /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; };
3B59CB612BDCF9D200924FEE /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
3B59CB4C2BDCF9D100924FEE /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
3B59CB552BDCF9D100924FEE /* RealityKitContent in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
3B59CB462BDCF9D100924FEE = {
isa = PBXGroup;
children = (
3B59CB512BDCF9D100924FEE /* Pencil */,
3B59CB522BDCF9D100924FEE /* Packages */,
3B59CB502BDCF9D100924FEE /* Products */,
);
sourceTree = "";
};
3B59CB502BDCF9D100924FEE /* Products */ = {
isa = PBXGroup;
children = (
3B59CB4F2BDCF9D100924FEE /* Pencil.app */,
);
name = Products;
sourceTree = "";
};
3B59CB512BDCF9D100924FEE /* Pencil */ = {
isa = PBXGroup;
children = (
3B59CB562BDCF9D100924FEE /* PencilApp.swift */,
3B59CB582BDCF9D100924FEE /* ContentView.swift */,
3B59CB5C2BDCF9D200924FEE /* Assets.xcassets */,
3B59CB612BDCF9D200924FEE /* Info.plist */,
3B59CB5E2BDCF9D200924FEE /* Preview Content */,
);
path = Pencil;
sourceTree = "";
};
3B59CB522BDCF9D100924FEE /* Packages */ = {
isa = PBXGroup;
children = (
3B59CB532BDCF9D100924FEE /* RealityKitContent */,
);
path = Packages;
sourceTree = "";
};
3B59CB5E2BDCF9D200924FEE /* Preview Content */ = {
isa = PBXGroup;
children = (
3B59CB5F2BDCF9D200924FEE /* Preview Assets.xcassets */,
);
path = "Preview Content";
sourceTree = "";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
3B59CB4E2BDCF9D100924FEE /* Pencil */ = {
isa = PBXNativeTarget;
buildConfigurationList = 3B59CB642BDCF9D200924FEE /* Build configuration list for PBXNativeTarget "Pencil" */;
buildPhases = (
3B59CB4B2BDCF9D100924FEE /* Sources */,
3B59CB4C2BDCF9D100924FEE /* Frameworks */,
3B59CB4D2BDCF9D100924FEE /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = Pencil;
packageProductDependencies = (
3B59CB542BDCF9D100924FEE /* RealityKitContent */,
);
productName = Pencil;
productReference = 3B59CB4F2BDCF9D100924FEE /* Pencil.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
3B59CB472BDCF9D100924FEE /* Project object */ = {
isa = PBXProject;
attributes = {
BuildIndependentTargetsInParallel = 1;
LastSwiftUpdateCheck = 1530;
LastUpgradeCheck = 1530;
TargetAttributes = {
3B59CB4E2BDCF9D100924FEE = {
CreatedOnToolsVersion = 15.3;
};
};
};
buildConfigurationList = 3B59CB4A2BDCF9D100924FEE /* Build configuration list for PBXProject "Pencil" */;
compatibilityVersion = "Xcode 14.0";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = 3B59CB462BDCF9D100924FEE;
productRefGroup = 3B59CB502BDCF9D100924FEE /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
3B59CB4E2BDCF9D100924FEE /* Pencil */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
3B59CB4D2BDCF9D100924FEE /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
3B59CB602BDCF9D200924FEE /* Preview Assets.xcassets in Resources */,
3B59CB5D2BDCF9D200924FEE /* Assets.xcassets in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
3B59CB4B2BDCF9D100924FEE /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
3B59CB592BDCF9D100924FEE /* ContentView.swift in Sources */,
3B59CB572BDCF9D100924FEE /* PencilApp.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
3B59CB622BDCF9D200924FEE /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu17;
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;
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = xros;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
XROS_DEPLOYMENT_TARGET = 1.1;
};
name = Debug;
};
3B59CB632BDCF9D200924FEE /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu17;
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;
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = xros;
SWIFT_COMPILATION_MODE = wholemodule;
VALIDATE_PRODUCT = YES;
XROS_DEPLOYMENT_TARGET = 1.1;
};
name = Release;
};
3B59CB652BDCF9D200924FEE /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_ASSET_PATHS = "\"Pencil/Preview Content\"";
DEVELOPMENT_TEAM = 2DJDH872JZ;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "$(TARGET_NAME)/Info.plist";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.ivancampos.Pencil;
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "xros xrsimulator";
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2,7";
};
name = Debug;
};
3B59CB662BDCF9D200924FEE /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_ASSET_PATHS = "\"Pencil/Preview Content\"";
DEVELOPMENT_TEAM = 2DJDH872JZ;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "$(TARGET_NAME)/Info.plist";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.ivancampos.Pencil;
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "xros xrsimulator";
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2,7";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
3B59CB4A2BDCF9D100924FEE /* Build configuration list for PBXProject "Pencil" */ = {
isa = XCConfigurationList;
buildConfigurations = (
3B59CB622BDCF9D200924FEE /* Debug */,
3B59CB632BDCF9D200924FEE /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
3B59CB642BDCF9D200924FEE /* Build configuration list for PBXNativeTarget "Pencil" */ = {
isa = XCConfigurationList;
buildConfigurations = (
3B59CB652BDCF9D200924FEE /* Debug */,
3B59CB662BDCF9D200924FEE /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
/* Begin XCSwiftPackageProductDependency section */
3B59CB542BDCF9D100924FEE /* RealityKitContent */ = {
isa = XCSwiftPackageProductDependency;
productName = RealityKitContent;
};
/* End XCSwiftPackageProductDependency section */
};
rootObject = 3B59CB472BDCF9D100924FEE /* Project object */;
}
================================================
FILE: Pencil/Pencil.xcodeproj/project.xcworkspace/contents.xcworkspacedata
================================================
================================================
FILE: Pencil/Pencil.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
================================================
IDEDidComputeMac32BitWarning
================================================
FILE: Pencil/README.md
================================================
**Pencil:** PencilKit for visionOS
https://github.com/IvanCampos/visionOS-examples/assets/872137/3cdcccb7-365c-4b9f-8623-2b6eaf14bbbf
================================================
FILE: Plane Detection/Packages/RealityKitContent/Package.realitycomposerpro/ProjectData/main.json
================================================
{
"pathsToIds" : {
"\/RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/GridMaterial.usda" : "CB766F92-EE55-4A63-9401-E7B8C009764D",
"\/RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/Immersive.usda" : "65F6F990-A780-4474-B78B-572E0E4E273D",
"\/RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/Scene.usda" : "0A9B4653-B11E-4D6A-850E-C6FCB621626C",
"\/RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/Untitled Scene.usda" : "D560BB77-AAF3-4BDE-B7C4-989332A4688B",
"RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/GridMaterial.usda" : "66168B71-AB05-424E-8B6C-D33D6E61B08F",
"RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/Immersive.usda" : "AF09ED6F-1707-48FD-8720-65B998362C09",
"RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/Scene.usda" : "D66134B1-3681-4A8E-AFE5-29F257229F3B"
}
}
================================================
FILE: Plane Detection/Packages/RealityKitContent/Package.realitycomposerpro/WorkspaceData/SceneMetadataList.json
================================================
{
"0A9B4653-B11E-4D6A-850E-C6FCB621626C" : {
"cameraTransform" : [
1,
0,
0,
0,
0,
0.86602545,
-0.49999994,
0,
0,
0.49999994,
0.86602545,
0,
0.0035969093,
0.35542378,
0.62919164,
1
],
"objectMetadataList" : [
[
"0A9B4653-B11E-4D6A-850E-C6FCB621626C",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
},
"65F6F990-A780-4474-B78B-572E0E4E273D" : {
"cameraTransform" : [
1,
0,
-0,
0,
-0,
0.86602545,
-0.49999988,
0,
0,
0.49999988,
0.86602545,
0,
1.1972517e-08,
2.6179132,
0.43191218,
1
],
"objectMetadataList" : [
[
"65F6F990-A780-4474-B78B-572E0E4E273D",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
},
"66168B71-AB05-424E-8B6C-D33D6E61B08F" : {
"cameraTransform" : [
1,
0,
-0,
0,
-0,
0.8660254,
-0.5,
0,
0,
0.5,
0.8660254,
0,
0,
0.23875366,
0.4135335,
1
],
"objectMetadataList" : [
[
"66168B71-AB05-424E-8B6C-D33D6E61B08F",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
},
"AF09ED6F-1707-48FD-8720-65B998362C09" : {
"cameraTransform" : [
1,
0,
-0,
0,
-0,
0.7071069,
-0.7071067,
0,
0,
0.7071067,
0.7071069,
0,
0,
2.8836339,
-0.107588194,
1
],
"objectMetadataList" : [
[
"AF09ED6F-1707-48FD-8720-65B998362C09",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
},
[
"AF09ED6F-1707-48FD-8720-65B998362C09",
"Root",
"Sphere_Left"
],
{
"isExpanded" : true,
"isLocked" : false
},
[
"AF09ED6F-1707-48FD-8720-65B998362C09",
"Root",
"Sphere_Right"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
},
"CB766F92-EE55-4A63-9401-E7B8C009764D" : {
"cameraTransform" : [
1,
0,
-0,
0,
-0,
0.8660253,
-0.5000001,
0,
0,
0.5000001,
0.8660253,
0,
0,
0.27093494,
0.4692731,
1
],
"objectMetadataList" : [
[
"CB766F92-EE55-4A63-9401-E7B8C009764D",
"Root",
"GridMaterial"
],
{
"isExpanded" : true,
"isLocked" : false
},
[
"CB766F92-EE55-4A63-9401-E7B8C009764D",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
},
"D560BB77-AAF3-4BDE-B7C4-989332A4688B" : {
"cameraTransform" : [
1,
0,
-0,
0,
-0,
0.8660253,
-0.5000001,
0,
0,
0.5000001,
0.8660253,
0,
0,
0.27093494,
0.4692731,
1
],
"objectMetadataList" : [
]
},
"D66134B1-3681-4A8E-AFE5-29F257229F3B" : {
"cameraTransform" : [
1,
0,
-0,
0,
-0,
0.7071069,
-0.7071067,
0,
0,
0.7071067,
0.7071069,
0,
0,
0.26894823,
0.26934713,
1
],
"objectMetadataList" : [
[
"D66134B1-3681-4A8E-AFE5-29F257229F3B",
"Root",
"GridMaterial",
"GridMaterial"
],
{
"isExpanded" : true,
"isLocked" : false
},
[
"D66134B1-3681-4A8E-AFE5-29F257229F3B",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
}
}
================================================
FILE: Plane Detection/Packages/RealityKitContent/Package.realitycomposerpro/WorkspaceData/Settings.rcprojectdata
================================================
{
"cameraPresets" : {
},
"secondaryToolbarData" : {
"isGridVisible" : true,
"sceneReverbPreset" : -1
},
"unitDefaults" : {
"°" : "°",
"kg" : "g",
"m" : "cm",
"m\/s" : "m\/s",
"m\/s²" : "m\/s²",
"s" : "s"
}
}
================================================
FILE: Plane Detection/Packages/RealityKitContent/Package.swift
================================================
// swift-tools-version:5.9
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "RealityKitContent",
products: [
// Products define the executables and libraries a package produces, and make them visible to other packages.
.library(
name: "RealityKitContent",
targets: ["RealityKitContent"]),
],
dependencies: [
// Dependencies declare other packages that this package depends on.
// .package(url: /* package url */, from: "1.0.0"),
],
targets: [
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
// Targets can depend on other targets in this package, and on products in packages this package depends on.
.target(
name: "RealityKitContent",
dependencies: []),
]
)
================================================
FILE: Plane Detection/Packages/RealityKitContent/README.md
================================================
# RealityKitContent
A description of this package.
================================================
FILE: Plane Detection/Packages/RealityKitContent/Sources/RealityKitContent/RealityKitContent.rkassets/Immersive.usda
================================================
#usda 1.0
(
defaultPrim = "Root"
metersPerUnit = 1
upAxis = "Y"
)
def Xform "Root"
{
reorder nameChildren = ["Sphere_Left", "Sphere_Right", "GridMaterial"]
def Sphere "Sphere_Right" (
active = true
prepend apiSchemas = ["MaterialBindingAPI"]
)
{
rel material:binding = (
bindMaterialAs = "weakerThanDescendants"
)
double radius = 0.1
quatf xformOp:orient = (1, 0, 0, 0)
float3 xformOp:scale = (1, 1, 1)
float3 xformOp:translate = (0.5, 1.5, -1.5)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
}
def Sphere "Sphere_Left" (
active = true
prepend apiSchemas = ["MaterialBindingAPI"]
)
{
rel material:binding = (
bindMaterialAs = "weakerThanDescendants"
)
double radius = 0.1
quatf xformOp:orient = (1, 0, 0, 0)
float3 xformOp:scale = (1, 1, 1)
float3 xformOp:translate = (-0.5, 1.5, -1.5)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
}
def "GridMaterial" (
active = true
prepend references = @Materials/GridMaterial.usda@
)
{
float3 xformOp:scale = (1, 1, 1)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
}
}
================================================
FILE: Plane Detection/Packages/RealityKitContent/Sources/RealityKitContent/RealityKitContent.rkassets/Materials/GridMaterial.usda
================================================
#usda 1.0
(
defaultPrim = "Root"
metersPerUnit = 1
upAxis = "Y"
)
def Xform "Root"
{
def Material "GridMaterial"
{
reorder nameChildren = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "DefaultSurfaceShader", "MaterialXPreviewSurface", "Texcoord", "Add", "Multiply", "Fractional", "LineCounts", "Multiply_1", "Separate2", "Separate2_1", "Ifgreater", "Ifgreater_1", "Max", "Background_Color"]
token outputs:mtlx:surface.connect =
token outputs:realitykit:vertex
token outputs:surface
float2 ui:nodegraph:realitykit:subgraphOutputs:pos = (2222, 300.5)
float2 ui:nodegraph:realitykit:subgraphOutputs:size = (182, 89)
int ui:nodegraph:realitykit:subgraphOutputs:stackingOrder = 749
def Shader "DefaultSurfaceShader"
{
uniform token info:id = "UsdPreviewSurface"
color3f inputs:diffuseColor = (1, 1, 1)
float inputs:roughness = 0.75
token outputs:surface
}
def Shader "MaterialXPreviewSurface"
{
uniform token info:id = "ND_UsdPreviewSurface_surfaceshader"
float inputs:clearcoat
float inputs:clearcoatRoughness
color3f inputs:diffuseColor.connect =
color3f inputs:emissiveColor
float inputs:ior
float inputs:metallic = 0.15
float3 inputs:normal
float inputs:occlusion
float inputs:opacity
float inputs:opacityThreshold
float inputs:roughness = 0.5
token outputs:out
float2 ui:nodegraph:node:pos = (1967, 300.5)
float2 ui:nodegraph:node:size = (208, 297)
int ui:nodegraph:node:stackingOrder = 870
string[] ui:nodegraph:realitykit:node:attributesShowingChildren = ["Advanced"]
}
def Shader "Texcoord"
{
uniform token info:id = "ND_texcoord_vector2"
float2 outputs:out
float2 ui:nodegraph:node:pos = (94.14453, 35.29297)
float2 ui:nodegraph:node:size = (182, 43)
int ui:nodegraph:node:stackingOrder = 1358
}
def Shader "Multiply"
{
uniform token info:id = "ND_multiply_vector2"
float2 inputs:in1.connect =
float2 inputs:in2 = (32, 15)
float2 inputs:in2.connect =
float2 outputs:out
float2 ui:nodegraph:node:pos = (275.64453, 47.29297)
float2 ui:nodegraph:node:size = (61, 36)
int ui:nodegraph:node:stackingOrder = 1348
string[] ui:nodegraph:realitykit:node:attributesShowingChildren = ["inputs:in2"]
}
def Shader "Fractional"
{
uniform token info:id = "ND_realitykit_fractional_vector2"
float2 inputs:in.connect =
float2 outputs:out
float2 ui:nodegraph:node:pos = (440.5, 49.5)
float2 ui:nodegraph:node:size = (155, 99)
int ui:nodegraph:node:stackingOrder = 1345
}
def Shader "BaseColor"
{
uniform token info:id = "ND_constant_color3"
color3f inputs:value = (0.89737034, 0.89737034, 0.89737034) (
colorSpace = "Input - Texture - sRGB - sRGB"
)
color3f inputs:value.connect = None
color3f outputs:out
float2 ui:nodegraph:node:pos = (1537.5977, 363.07812)
float2 ui:nodegraph:node:size = (150, 43)
int ui:nodegraph:node:stackingOrder = 1353
}
def Shader "LineColor"
{
uniform token info:id = "ND_constant_color3"
color3f inputs:value = (0.55945957, 0.55945957, 0.55945957) (
colorSpace = "Input - Texture - sRGB - sRGB"
)
color3f inputs:value.connect = None
color3f outputs:out
float2 ui:nodegraph:node:pos = (1536.9844, 287.86328)
float2 ui:nodegraph:node:size = (146, 43)
int ui:nodegraph:node:stackingOrder = 1355
}
def Shader "LineWidths"
{
uniform token info:id = "ND_combine2_vector2"
float inputs:in1 = 0.1
float inputs:in2 = 0.1
float2 outputs:out
float2 ui:nodegraph:node:pos = (443.64453, 233.79297)
float2 ui:nodegraph:node:size = (151, 43)
int ui:nodegraph:node:stackingOrder = 1361
}
def Shader "LineCounts"
{
uniform token info:id = "ND_combine2_vector2"
float inputs:in1 = 24
float inputs:in2 = 12
float2 outputs:out
float2 ui:nodegraph:node:pos = (94.14453, 138.29297)
float2 ui:nodegraph:node:size = (153, 43)
int ui:nodegraph:node:stackingOrder = 1359
}
def Shader "Remap"
{
uniform token info:id = "ND_remap_color3"
color3f inputs:in.connect =
color3f inputs:inhigh.connect = None
color3f inputs:inlow.connect = None
color3f inputs:outhigh.connect =
color3f inputs:outlow.connect =
color3f outputs:out
float2 ui:nodegraph:node:pos = (1755.5, 300.5)
float2 ui:nodegraph:node:size = (95, 171)
int ui:nodegraph:node:stackingOrder = 1282
string[] ui:nodegraph:realitykit:node:attributesShowingChildren = ["inputs:outlow"]
}
def Shader "Separate2"
{
uniform token info:id = "ND_separate2_vector2"
float2 inputs:in.connect =
float outputs:outx
float outputs:outy
float2 ui:nodegraph:node:pos = (1212.6445, 128.91797)
float2 ui:nodegraph:node:size = (116, 117)
int ui:nodegraph:node:stackingOrder = 1363
}
def Shader "Combine3"
{
uniform token info:id = "ND_combine3_color3"
float inputs:in1.connect =
float inputs:in2.connect =
float inputs:in3.connect =
color3f outputs:out
float2 ui:nodegraph:node:pos = (1578.1445, 128.91797)
float2 ui:nodegraph:node:size = (146, 54)
int ui:nodegraph:node:stackingOrder = 1348
}
def Shader "Range"
{
uniform token info:id = "ND_range_vector2"
bool inputs:doclamp = 1
float2 inputs:gamma = (2, 2)
float2 inputs:in.connect =
float2 inputs:inhigh.connect =
float2 inputs:inlow = (0.02, 0.02)
float2 inputs:outhigh
float2 inputs:outlow
float2 outputs:out
float2 ui:nodegraph:node:pos = (990.64453, 128.91797)
float2 ui:nodegraph:node:size = (98, 207)
int ui:nodegraph:node:stackingOrder = 1364
}
def Shader "Subtract"
{
uniform token info:id = "ND_subtract_vector2"
float2 inputs:in1.connect =
float2 inputs:in2.connect =
float2 outputs:out
float2 ui:nodegraph:node:pos = (612.64453, 87.04297)
float2 ui:nodegraph:node:size = (63, 36)
int ui:nodegraph:node:stackingOrder = 1348
}
def Shader "Absval"
{
uniform token info:id = "ND_absval_vector2"
float2 inputs:in.connect =
float2 outputs:out
float2 ui:nodegraph:node:pos = (765.64453, 87.04297)
float2 ui:nodegraph:node:size = (123, 43)
int ui:nodegraph:node:stackingOrder = 1348
}
def Shader "Min"
{
uniform token info:id = "ND_min_float"
float inputs:in1.connect =
float inputs:in2.connect =
float outputs:out
float2 ui:nodegraph:node:pos = (1388.1445, 128.91797)
float2 ui:nodegraph:node:size = (114, 36)
int ui:nodegraph:node:stackingOrder = 1363
}
}
}
================================================
FILE: Plane Detection/Packages/RealityKitContent/Sources/RealityKitContent/RealityKitContent.rkassets/Scene.usda
================================================
#usda 1.0
(
defaultPrim = "Root"
metersPerUnit = 1
upAxis = "Y"
)
def Xform "Root"
{
reorder nameChildren = ["GridMaterial", "Sphere"]
rel material:binding = None (
bindMaterialAs = "weakerThanDescendants"
)
def Sphere "Sphere" (
active = true
prepend apiSchemas = ["MaterialBindingAPI"]
)
{
rel material:binding = (
bindMaterialAs = "weakerThanDescendants"
)
double radius = 0.05
quatf xformOp:orient = (1, 0, 0, 0)
float3 xformOp:scale = (1, 1, 1)
float3 xformOp:translate = (0, 0, 0.0004)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
def RealityKitComponent "Collider"
{
uint group = 1
uniform token info:id = "RealityKit.Collider"
uint mask = 4294967295
token type = "Default"
def RealityKitStruct "Shape"
{
float3 extent = (0.2, 0.2, 0.2)
float radius = 0.05
token shapeType = "Sphere"
}
}
def RealityKitComponent "InputTarget"
{
uniform token info:id = "RealityKit.InputTarget"
}
}
def "GridMaterial" (
active = true
prepend references = @Materials/GridMaterial.usda@
)
{
float3 xformOp:scale = (1, 1, 1)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
}
}
================================================
FILE: Plane Detection/Packages/RealityKitContent/Sources/RealityKitContent/RealityKitContent.swift
================================================
import Foundation
/// Bundle for the RealityKitContent project
public let realityKitContentBundle = Bundle.module
================================================
FILE: Plane Detection/Plane Detection/Assets.xcassets/AppIcon.solidimagestack/Back.solidimagestacklayer/Content.imageset/Contents.json
================================================
{
"images" : [
{
"idiom" : "vision",
"scale" : "2x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: Plane Detection/Plane Detection/Assets.xcassets/AppIcon.solidimagestack/Back.solidimagestacklayer/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: Plane Detection/Plane Detection/Assets.xcassets/AppIcon.solidimagestack/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
},
"layers" : [
{
"filename" : "Front.solidimagestacklayer"
},
{
"filename" : "Middle.solidimagestacklayer"
},
{
"filename" : "Back.solidimagestacklayer"
}
]
}
================================================
FILE: Plane Detection/Plane Detection/Assets.xcassets/AppIcon.solidimagestack/Front.solidimagestacklayer/Content.imageset/Contents.json
================================================
{
"images" : [
{
"idiom" : "vision",
"scale" : "2x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: Plane Detection/Plane Detection/Assets.xcassets/AppIcon.solidimagestack/Front.solidimagestacklayer/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: Plane Detection/Plane Detection/Assets.xcassets/AppIcon.solidimagestack/Middle.solidimagestacklayer/Content.imageset/Contents.json
================================================
{
"images" : [
{
"idiom" : "vision",
"scale" : "2x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: Plane Detection/Plane Detection/Assets.xcassets/AppIcon.solidimagestack/Middle.solidimagestacklayer/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: Plane Detection/Plane Detection/Assets.xcassets/Contents.json
================================================
{
"info" : {
"version" : 1,
"author" : "xcode"
}
}
================================================
FILE: Plane Detection/Plane Detection/Colors.swift
================================================
import UIKit
import ARKit
enum ColorName: String {
case matrix = "#00ff2b"
case tiffany = "#00FFEC"
case darkG = "#474747"
case lightG = "#f4f4f8"
case coffee = "#be9b7b"
case tone = "#f1c27d"
case blueGray = "#6497b1"
case supreme = "#FF0400"
var color: UIColor {
return UIColor(hex: self.rawValue) ?? .black
}
}
extension UIColor {
convenience init?(hex: String) {
let r, g, b, a: CGFloat
if hex.hasPrefix("#") {
let start = hex.index(hex.startIndex, offsetBy: 1)
let hexColor = String(hex[start...])
if hexColor.count == 6 {
let scanner = Scanner(string: hexColor)
var hexNumber: UInt64 = 0
if scanner.scanHexInt64(&hexNumber) {
r = CGFloat((hexNumber & 0xff0000) >> 16) / 255
g = CGFloat((hexNumber & 0x00ff00) >> 8) / 255
b = CGFloat(hexNumber & 0x0000ff) / 255
a = 1.0
self.init(red: r, green: g, blue: b, alpha: a)
return
}
}
}
return nil
}
}
func colorForPlaneClassification(classification: PlaneAnchor.Classification) -> UIColor {
switch(classification) {
case .ceiling:
return UIColor(hex: ColorName.tiffany.rawValue)!
case .door:
return UIColor(hex: ColorName.coffee.rawValue)!
case .floor:
return UIColor(hex: ColorName.tone.rawValue)!
case .notAvailable:
return .clear
case .seat:
return UIColor(hex: ColorName.matrix.rawValue)!
case .table:
return UIColor(hex: ColorName.lightG.rawValue)!
case .undetermined:
return .black
case .unknown:
return UIColor(hex: ColorName.darkG.rawValue)!
case .wall:
return UIColor(hex: ColorName.supreme.rawValue)!
case .window:
return UIColor(hex: ColorName.blueGray.rawValue)!
@unknown default:
return UIColor(hex: ColorName.darkG.rawValue)!
}
}
================================================
FILE: Plane Detection/Plane Detection/ContentView.swift
================================================
import SwiftUI
import RealityKit
struct ContentView: View {
@State private var showImmersiveSpace = false
@State private var immersiveSpaceIsShown = false
@Environment(\.openImmersiveSpace) var openImmersiveSpace
@Environment(\.dismissImmersiveSpace) var dismissImmersiveSpace
var body: some View {
VStack {
Toggle("Show Plane Detection", isOn: $showImmersiveSpace)
.font(.title)
.frame(width: 400)
.padding(20)
.glassBackgroundEffect()
}
.padding()
.onChange(of: showImmersiveSpace) { _, newValue in
Task {
if newValue {
switch await openImmersiveSpace(id: "ImmersiveSpace") {
case .opened:
immersiveSpaceIsShown = true
case .error, .userCancelled:
fallthrough
@unknown default:
immersiveSpaceIsShown = false
showImmersiveSpace = false
}
} else if immersiveSpaceIsShown {
await dismissImmersiveSpace()
immersiveSpaceIsShown = false
}
}
}
}
}
================================================
FILE: Plane Detection/Plane Detection/ImmersiveView.swift
================================================
import SwiftUI
import RealityKit
import ARKit
struct ImmersiveView: View {
// @State property wrapper to manage the state of plane detection within the SwiftUI view
@State var planeDetection = PlaneDetectionModel()
var body: some View {
// RealityView is a custom view that integrates with RealityKit for AR experiences
RealityView { content in
// Adds the rootEntity of the planeDetection model to the RealityView's content
// This is where the detected planes or other AR content would be added
content.add(planeDetection.rootEntity)
}
.task {
// Asynchronously starts the AR session with plane detection
// This method is expected to configure and run the AR session
await planeDetection.startSession()
}
.onDisappear {
// Stops the AR session when the view disappears
// This is important for freeing up resources and stopping the AR experience when not needed
planeDetection.stopSession()
}
}
}
================================================
FILE: Plane Detection/Plane Detection/Info.plist
================================================
NSWorldSensingUsageDescription
Allow Plane Detection
UIApplicationSceneManifest
UIApplicationPreferredDefaultSceneSessionRole
UIWindowSceneSessionRoleApplication
UIApplicationSupportsMultipleScenes
UISceneConfigurations
================================================
FILE: Plane Detection/Plane Detection/PlaneDetectionModel.swift
================================================
import ARKit
import Foundation
import RealityKit
class PlaneDetectionModel: NSObject {
// An ARKit session for managing augmented reality experiences.
let session = ARKitSession()
// A root entity acting as a container for all dynamically generated plane entities in the scene.
var rootEntity = AnchorEntity(world: .zero)
// Starts the AR session with plane detection enabled for both horizontal and vertical surfaces.
// The use of @MainActor ensures that these functions are executed on the main thread, which is crucial for UI updates and interactions with RealityKit and ARKit.
@MainActor func startSession() async {
// Initialize the plane detection provider with specified plane alignments.
let planeDataProvider = PlaneDetectionProvider(alignments: [.horizontal, .vertical])
// An array to hold data providers, here intended for plane detection.
var providers: [DataProvider] = []
// Check if plane detection is supported and, if so, add the planeDataProvider to the providers array.
if PlaneDetectionProvider.isSupported {
providers.append(planeDataProvider)
}
do {
// Attempt to start the session with the specified providers.
try await session.run(providers)
// Listen for updates from the planeDataProvider and update plane entities accordingly.
for await planeDetectionUpdate in planeDataProvider.anchorUpdates {
try await updatePlaneEntity(planeDetectionUpdate.anchor)
}
} catch {
// If an error occurs, print it to the console.
print("error is \(error)")
}
}
// Stops the AR session.
@MainActor func stopSession() {
session.stop()
}
// Updates or creates a new plane entity in the scene based on the provided plane anchor.
@MainActor fileprivate func updatePlaneEntity(_ anchor: PlaneAnchor) async throws {
// Generate visual representation for the plane's extent.
let modelEntity = try await createPlaneModelEntity(anchor)
// Generate visual representation for the plane's classification text.
let textEntity = await createTextModelEntity(anchor)
// Check if an entity for this anchor already exists in the scene.
if let anchorEntity = rootEntity.findEntity(named: "\(anchor.id)") {
// If it does, remove all its children (for update) and add the new model and text entities.
anchorEntity.children.removeAll()
anchorEntity.addChild(modelEntity)
anchorEntity.addChild(textEntity)
} else {
// If it doesn't, create a new anchor entity, set its orientation, and add it to the root entity.
let anchorEntity = AnchorEntity(world: anchor.originFromAnchorTransform)
// Rotates the anchorEntity by -90 degrees around the x-axis.
anchorEntity.orientation = .init(angle: -.pi / 2, axis: .init(1, 0, 0))
anchorEntity.addChild(modelEntity)
anchorEntity.addChild(textEntity)
anchorEntity.name = "\(anchor.id)"
rootEntity.addChild(anchorEntity)
}
}
// Removes a plane entity from the scene based on the provided plane anchor.
fileprivate func removePlaneEntity(_ anchor: PlaneAnchor) throws {
// Attempt to find the entity associated with the provided anchor.
if let anchorEntity = rootEntity.findEntity(named: "\(anchor.id)") {
// If found, remove it from its parent, effectively deleting it from the scene.
anchorEntity.removeFromParent()
}
}
// Generates a visual representation of a plane's extent.
@MainActor fileprivate func createPlaneModelEntity(_ anchor: PlaneAnchor) async throws -> ModelEntity {
// Use the plane's extent (size) to define the size of the generated plane mesh.
let extent = anchor.geometry.extent
// Create a material for the plane, setting its base color based on the plane's classification.
var planeMaterial = PhysicallyBasedMaterial()
planeMaterial.baseColor = .init(tint: colorForPlaneClassification(classification: anchor.classification))
// Create the model entity using the plane mesh and the material.
let planeModelEntity = ModelEntity(mesh: .generatePlane(width: extent.width, height: extent.height), materials: [planeMaterial])
return planeModelEntity
}
// Generates a visual representation of a plane's classification as text.
@MainActor fileprivate func createTextModelEntity(_ anchor: PlaneAnchor) async -> ModelEntity {
// Create a white material for the text.
let planeTextMaterial = UnlitMaterial(color: .white)
// Generate a model entity for the text, using the plane's classification description.
let planeTextModelEntity = ModelEntity(mesh: .generateText(anchor.classification.description.uppercased(), extrusionDepth: 0.001, font: .boldSystemFont(ofSize: 0.1), containerFrame: .zero, alignment: .center, lineBreakMode: .byWordWrapping), materials: [planeTextMaterial])
return planeTextModelEntity
}
}
================================================
FILE: Plane Detection/Plane Detection/Plane_DetectionApp.swift
================================================
//
// Plane_DetectionApp.swift
// Plane Detection
//
// Created by IVAN CAMPOS on 4/7/24.
//
import SwiftUI
@main
struct Plane_DetectionApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
ImmersiveSpace(id: "ImmersiveSpace") {
ImmersiveView()
}
}
}
================================================
FILE: Plane Detection/Plane Detection/Preview Content/Preview Assets.xcassets/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: Plane Detection/Plane Detection.xcodeproj/project.pbxproj
================================================
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 56;
objects = {
/* Begin PBXBuildFile section */
3B5365FD2BC2658100AC7AC3 /* RealityKitContent in Frameworks */ = {isa = PBXBuildFile; productRef = 3B5365FC2BC2658100AC7AC3 /* RealityKitContent */; };
3B5365FF2BC2658100AC7AC3 /* Plane_DetectionApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B5365FE2BC2658100AC7AC3 /* Plane_DetectionApp.swift */; };
3B5366012BC2658100AC7AC3 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B5366002BC2658100AC7AC3 /* ContentView.swift */; };
3B5366032BC2658100AC7AC3 /* ImmersiveView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B5366022BC2658100AC7AC3 /* ImmersiveView.swift */; };
3B5366052BC2658200AC7AC3 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3B5366042BC2658200AC7AC3 /* Assets.xcassets */; };
3B5366082BC2658200AC7AC3 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3B5366072BC2658200AC7AC3 /* Preview Assets.xcassets */; };
3B5366142BC2701B00AC7AC3 /* Colors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B5366132BC2701B00AC7AC3 /* Colors.swift */; };
3B5366162BC2772E00AC7AC3 /* PlaneDetectionModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B5366152BC2772E00AC7AC3 /* PlaneDetectionModel.swift */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
3B5365F72BC2658100AC7AC3 /* Plane Detection.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Plane Detection.app"; sourceTree = BUILT_PRODUCTS_DIR; };
3B5365FB2BC2658100AC7AC3 /* RealityKitContent */ = {isa = PBXFileReference; lastKnownFileType = wrapper; path = RealityKitContent; sourceTree = ""; };
3B5365FE2BC2658100AC7AC3 /* Plane_DetectionApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Plane_DetectionApp.swift; sourceTree = ""; };
3B5366002BC2658100AC7AC3 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; };
3B5366022BC2658100AC7AC3 /* ImmersiveView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImmersiveView.swift; sourceTree = ""; };
3B5366042BC2658200AC7AC3 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
3B5366072BC2658200AC7AC3 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; };
3B5366092BC2658200AC7AC3 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
3B5366132BC2701B00AC7AC3 /* Colors.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Colors.swift; sourceTree = ""; };
3B5366152BC2772E00AC7AC3 /* PlaneDetectionModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PlaneDetectionModel.swift; sourceTree = ""; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
3B5365F42BC2658100AC7AC3 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
3B5365FD2BC2658100AC7AC3 /* RealityKitContent in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
3B5365EE2BC2658100AC7AC3 = {
isa = PBXGroup;
children = (
3B5365F92BC2658100AC7AC3 /* Plane Detection */,
3B5365FA2BC2658100AC7AC3 /* Packages */,
3B5365F82BC2658100AC7AC3 /* Products */,
);
sourceTree = "";
};
3B5365F82BC2658100AC7AC3 /* Products */ = {
isa = PBXGroup;
children = (
3B5365F72BC2658100AC7AC3 /* Plane Detection.app */,
);
name = Products;
sourceTree = "";
};
3B5365F92BC2658100AC7AC3 /* Plane Detection */ = {
isa = PBXGroup;
children = (
3B5365FE2BC2658100AC7AC3 /* Plane_DetectionApp.swift */,
3B5366002BC2658100AC7AC3 /* ContentView.swift */,
3B5366022BC2658100AC7AC3 /* ImmersiveView.swift */,
3B5366152BC2772E00AC7AC3 /* PlaneDetectionModel.swift */,
3B5366132BC2701B00AC7AC3 /* Colors.swift */,
3B5366042BC2658200AC7AC3 /* Assets.xcassets */,
3B5366092BC2658200AC7AC3 /* Info.plist */,
3B5366062BC2658200AC7AC3 /* Preview Content */,
);
path = "Plane Detection";
sourceTree = "";
};
3B5365FA2BC2658100AC7AC3 /* Packages */ = {
isa = PBXGroup;
children = (
3B5365FB2BC2658100AC7AC3 /* RealityKitContent */,
);
path = Packages;
sourceTree = "";
};
3B5366062BC2658200AC7AC3 /* Preview Content */ = {
isa = PBXGroup;
children = (
3B5366072BC2658200AC7AC3 /* Preview Assets.xcassets */,
);
path = "Preview Content";
sourceTree = "";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
3B5365F62BC2658100AC7AC3 /* Plane Detection */ = {
isa = PBXNativeTarget;
buildConfigurationList = 3B53660C2BC2658200AC7AC3 /* Build configuration list for PBXNativeTarget "Plane Detection" */;
buildPhases = (
3B5365F32BC2658100AC7AC3 /* Sources */,
3B5365F42BC2658100AC7AC3 /* Frameworks */,
3B5365F52BC2658100AC7AC3 /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = "Plane Detection";
packageProductDependencies = (
3B5365FC2BC2658100AC7AC3 /* RealityKitContent */,
);
productName = "Plane Detection";
productReference = 3B5365F72BC2658100AC7AC3 /* Plane Detection.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
3B5365EF2BC2658100AC7AC3 /* Project object */ = {
isa = PBXProject;
attributes = {
BuildIndependentTargetsInParallel = 1;
LastSwiftUpdateCheck = 1530;
LastUpgradeCheck = 1530;
TargetAttributes = {
3B5365F62BC2658100AC7AC3 = {
CreatedOnToolsVersion = 15.3;
};
};
};
buildConfigurationList = 3B5365F22BC2658100AC7AC3 /* Build configuration list for PBXProject "Plane Detection" */;
compatibilityVersion = "Xcode 14.0";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = 3B5365EE2BC2658100AC7AC3;
productRefGroup = 3B5365F82BC2658100AC7AC3 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
3B5365F62BC2658100AC7AC3 /* Plane Detection */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
3B5365F52BC2658100AC7AC3 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
3B5366082BC2658200AC7AC3 /* Preview Assets.xcassets in Resources */,
3B5366052BC2658200AC7AC3 /* Assets.xcassets in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
3B5365F32BC2658100AC7AC3 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
3B5366012BC2658100AC7AC3 /* ContentView.swift in Sources */,
3B5366142BC2701B00AC7AC3 /* Colors.swift in Sources */,
3B5366162BC2772E00AC7AC3 /* PlaneDetectionModel.swift in Sources */,
3B5365FF2BC2658100AC7AC3 /* Plane_DetectionApp.swift in Sources */,
3B5366032BC2658100AC7AC3 /* ImmersiveView.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
3B53660A2BC2658200AC7AC3 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu17;
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;
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = xros;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
XROS_DEPLOYMENT_TARGET = 1.1;
};
name = Debug;
};
3B53660B2BC2658200AC7AC3 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu17;
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;
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = xros;
SWIFT_COMPILATION_MODE = wholemodule;
VALIDATE_PRODUCT = YES;
XROS_DEPLOYMENT_TARGET = 1.1;
};
name = Release;
};
3B53660D2BC2658200AC7AC3 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_ASSET_PATHS = "\"Plane Detection/Preview Content\"";
DEVELOPMENT_TEAM = 2DJDH872JZ;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "$(TARGET_NAME)/Info.plist";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = "com.ivancampos.Plane-Detection";
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "xros xrsimulator";
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2,7";
};
name = Debug;
};
3B53660E2BC2658200AC7AC3 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_ASSET_PATHS = "\"Plane Detection/Preview Content\"";
DEVELOPMENT_TEAM = 2DJDH872JZ;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "$(TARGET_NAME)/Info.plist";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = "com.ivancampos.Plane-Detection";
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "xros xrsimulator";
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2,7";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
3B5365F22BC2658100AC7AC3 /* Build configuration list for PBXProject "Plane Detection" */ = {
isa = XCConfigurationList;
buildConfigurations = (
3B53660A2BC2658200AC7AC3 /* Debug */,
3B53660B2BC2658200AC7AC3 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
3B53660C2BC2658200AC7AC3 /* Build configuration list for PBXNativeTarget "Plane Detection" */ = {
isa = XCConfigurationList;
buildConfigurations = (
3B53660D2BC2658200AC7AC3 /* Debug */,
3B53660E2BC2658200AC7AC3 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
/* Begin XCSwiftPackageProductDependency section */
3B5365FC2BC2658100AC7AC3 /* RealityKitContent */ = {
isa = XCSwiftPackageProductDependency;
productName = RealityKitContent;
};
/* End XCSwiftPackageProductDependency section */
};
rootObject = 3B5365EF2BC2658100AC7AC3 /* Project object */;
}
================================================
FILE: Plane Detection/Plane Detection.xcodeproj/project.xcworkspace/contents.xcworkspacedata
================================================
================================================
FILE: Plane Detection/Plane Detection.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
================================================
IDEDidComputeMac32BitWarning
================================================
FILE: Plane Detection/README.md
================================================
**Plane Detection:** Identifying flat surfaces in the real world
https://github.com/IvanCampos/visionOS-examples/assets/872137/f3b94e19-921e-4fe9-baf2-8b02c8c0468f
*References*
* https://github.com/XRealityZone/what-vision-os-can-do
* https://developer.apple.com/documentation/visionos/placing-content-on-detected-planes
* https://github.com/tokufxug/VisionOS-PlaneDetectionSample
* https://github.com/shu223/visionOS-Sampler/tree/main/02_ARKitPlacingContent/ARKitPlacingContent
================================================
FILE: README.md
================================================
# visionOS-examples
Accelerators for Spatial Computing
* Pair programmed through conversations with my custom GPT:
* [visionOS Dev](https://chat.openai.com/g/g-GbfBtRzZo-visionos-dev) (_*ChatGPT Plus required*_)
## Examples 
| Name | Element | Topic | visionOS | Preview |
|----------|----------|----------|----------|----------|
| [LLLM](https://github.com/IvanCampos/visionOS-examples/tree/main/LLLM) |
| **Local Large Language Model (LLLM):** Call your LM Studio models from your Apple Vision Pro | 1.1 beta 2 (2105188c) | [](https://github.com/IvanCampos/visionOS-examples/tree/main/LLLM)
| [Fear and Greed](https://github.com/IvanCampos/visionOS-examples/tree/main/FearAndGreed) |
| Volumetric View of the Fear & Greed Index for Bitcoin and other large cryptocurrencies | 1.1 beta 2 (2105188c) |
|
| [ChatAVP](https://github.com/IvanCampos/visionOS-examples/tree/main/ChatAVP) |
| **Chat Apple Vision Pro (ChatAVP):** Chat with the OpenAI API for visionOS | 1.1 beta 2 (2105188c) |
|
| [WebSockets](https://github.com/IvanCampos/visionOS-examples/tree/main/WebSockets) |
| **WebSockets:** Get Real-Time Cryptocurrency Prices for Bitcoin and Ethereum | 1.1 beta 3 (2105197a) |
|
| [AnchorToHead](https://github.com/IvanCampos/visionOS-examples/tree/main/AnchorToHead) |
| **Anchor To Head:** Allow an entity to automatically follow your head, hands-free | 1.1 beta 3 (2105197a) |
|
| [HandTracking](https://github.com/IvanCampos/visionOS-examples/tree/main/HandTracking) |
| **Hand Tracking:** Quickly add hand tracking to your visionOS app | 1.1 beta 4 (21O5203a) |
|
| [Battery Life](https://github.com/IvanCampos/visionOS-examples/tree/main/Battery%20Life) |
| **Battery Life:** Display the Apple Vision Pro's battery level and status | 1.1 (210211) |  |
| [Countdown](https://github.com/IvanCampos/visionOS-examples/tree/main/Countdown) |
| **Countdown:** Countdown in Immersive Space | 1.2 (2105555e) |
|
| [Plane Detection](https://github.com/IvanCampos/visionOS-examples/tree/main/Plane%20Detection) |
| **Plane Detection:** Identifying flat surfaces in the real world | 1.2 (2105555e) |
|
| [Timer Vision](https://github.com/IvanCampos/visionOS-examples/tree/main/Timer%20Vision) |
| **Timer Vision:** Timer Window for Apple Vision Pro | 1.2 (2105555e) |
|
| [Pencil](https://github.com/IvanCampos/visionOS-examples/tree/main/Pencil) |
| **Pencil:** PencilKit for visionOS | 1.2 (2105580a) |
|
| [bsky 3D](https://github.com/IvanCampos/visionOS-examples/tree/main/bsky%203D) |
| **Bluesky 3D:** 3D Visualizer for Bluesky's Jetstream Firehose | 2.2 (22N5794a) |
|
| [DualSense](https://github.com/IvanCampos/visionOS-examples/tree/main/DualSense) |
| **DualSense:** PS5 DualSense Controller integration for Apple Vision Pro | 2.3 (22N896) |
|
| [Music Kit](https://github.com/IvanCampos/visionOS-examples/tree/main/Music%20Kit) |
| **Music Kit:** Play Apple Music directly inside your visionOS app using MusicKit. | 2.4(22O5199n) |  |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
## Learning Resources
| Link | Description |
|----------|----------|
| [Apple Developer Documentation](https://developer.apple.com/visionos/learn/) | [@Apple's](https://github.com/apple) official documentation for all things visionOS |
| [Sample Apps from Apple](https://developer.apple.com/documentation/visionos#Dive-into-featured-sample-apps) | Explore the core concepts for all visionOS apps with Hello World. Understand how to detect custom gestures using ARKit with Happy Beam. Discover streaming 2D and stereoscopic media with Destination Video. And learn how to build 3D scenes with RealityKit and Reality Composer Pro with Diorama and Swift Splash. |
| [30 days of visionOS challenge](https://github.com/satoshi0212/visionOS_30Days) | Inspirational visionOS repo with over 30 examples from [@shmdevelop](https://github.com/satoshi0212)|
| [visionOS Dev Bot](https://chat.openai.com/g/g-GbfBtRzZo-visionos-dev) | My GPT-4 bot configured with instructions and knowledge specific to visionOS |
| [Spatial List](https://twitter.com/i/lists/1749207474983354875) | List of Spatialists to follow on 𝕏 |
| [GitHub Repos](https://github.com/topics/visionos?o=desc&s=updated) | Recently Updated visionOS Projects |
| [r/visionosdev](https://www.reddit.com/r/visionosdev/) | Where developers for the Apple Vision Pro and VisionOS meet. Talk SwiftUI, ARKit and more. |
| [1planet.co.jp](https://1planet.co.jp/tech-blog/category/applevisionpro) | Blog specializing in AR technology and creativity. |
| [note.com](https://note.com/search?context=note&q=visionOS&sort=new) | Search results for the latest visionOS blog posts from the Japanese creative community. |
| [Custom Reddit Feed](https://www.reddit.com/user/sopmac21379/m/spatial/) | Multiple visionOS & Vision Pro related subreddits |
| [zenn.dev](https://zenn.dev/search?q=visionOS&order=latest) | Another search result for the latest visionOS blog posts from the Japanese creative community. |
| [Building Vacuum Demo for visionOS from scratch](https://www.loom.com/share/c3331721a6ff47b9a66b30e7b59c6afc) | From [@gonchar](https://github.com/gonchar), the best way to learn how to work with: ARKit (head tracking, surroundings with classification), Reality Composer Pro, RealityKit, Work with custom geometry and meshes. Watch at 1.5x speed. |
| [GitHub List](https://github.com/stars/IvanCampos/lists/visionos-projects) | List of visionOS projects that I've starred on GitHub |
| [Let's visionOS 2024 Conference](https://www.youtube.com/watch?v=cvjAzMFMnvc&list=PLrYMwiyqgR7eFKM0YbOYqkmFIMQ-Opq_J&pp=iAQB) | Playlist of recorded sessions from Let's visionOS 2024 |
| [visionOS Pathway](https://developer.apple.com/visionos/pathway/)| Resources you'll need to start building great apps and games |
| [SGM Examples](https://github.com/ynagatomo/SGMExamples) | From [@ynagatomo](https://github.com/ynagatomo), a collection of Shader Graph Materials |
| [visionOS Developer Group](https://www.linkedin.com/groups/12922559/) | visionOS Developer Group on LinkedIn |
| [Step Into Vision](https://stepinto.vision) | Explore, learn, and build Step Into the world of visionOS development with SwiftUI, RealityKit, and ARKit. |
| | |
| | |
| | |
## AI for XR
[AI Tools for XR: 2025-02](https://ivancampos.github.io/Reports/ai-for-xr-2025-02.html)
## Assets
[Sketchfab 3D Models](https://sketchfab.com/search?features=downloadable&licenses=322a749bcfa841b29dff1e8a1bb74b0b&licenses=b9ddc40b93e34cdca1fc152f39b9f375&licenses=72360ff1740d419791934298b8b6d270&licenses=bbfe3f7dbcdd4122b966b85b9786a989&licenses=2628dbe5140a4e9592126c8df566c0b7&licenses=34b725081a6a4184957efaec2cb84ed3&licenses=7c23a1ba438d4306920229c12afcb5f9&licenses=72eb2b1960364637901eacce19283624&sort_by=-likeCount&type=models)
[SF Symbols Icons](https://developer.apple.com/sf-symbols/)
[Tripo](https://www.tripo3d.ai/app?tab=create)
[Luma AI Genie](https://lumalabs.ai/genie?view=create)
[PolyHaven](https://polyhaven.com)
[Blockade Labs](https://skybox.blockadelabs.com)
[CGTrader](https://www.cgtrader.com)
## Reality Composer Pro (RCP)
### Shader Graph Materials (SGM)
[ShaderGraph Framework Docs](https://developer.apple.com/documentation/shadergraph)
[Recreating the Monterey Screensaver Surface Shader in Reality Composer Pro's Shader Graph Nodes](https://www.youtube.com/watch?v=KVyomXuaR7g)
[Ice Moon, Ep 3: Bringing the planet to life in our immersive experience for Apple Vision Pro
](https://www.youtube.com/watch?v=5jrkzhILYwE)
[The Book of Shaders](https://thebookofshaders.com/)
[mrdeerwhale's Guide to Reality Composer Pro's Shader Graph Nodes](https://rcpguide.com/)
[Make a beautiful Bubble Shader for Apple Vision Pro | Reality Composer Pro Shader Graph Tutorial](https://www.youtube.com/watch?v=zk1u4nguamY)
[ShaderGraph Nodes in RealityKit](https://github.com/ynagatomo/evolution-Metal-ARKit-RealityKit-sheet/tree/main?tab=readme-ov-file#shadergraph-nodes-in-realitykit)
## App Store for Apple Vision Pro
[Apps & Games](https://apps.apple.com/us/vision)
[Arcade](https://apps.apple.com/us/vision/arcade)
[Request to have your app featured on the App Store (six to eight weeks in advance of your launch)](https://developer.apple.com/app-store/discoverability/)
================================================
FILE: Timer Vision/Packages/RealityKitContent/Package.realitycomposerpro/ProjectData/main.json
================================================
{
"pathsToIds" : {
"\/RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/GridMaterial.usda" : "440DE5B4-E4E4-459B-AABF-9ACE96319272",
"\/RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/procedural_sphere_grid.usda" : "34C460AE-CA1B-4348-BD05-621ACBDFFE97",
"\/RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/Scene.usda" : "0A9B4653-B11E-4D6A-850E-C6FCB621626C",
"\/RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/Untitled Scene.usda" : "03E02005-EFA6-48D6-8A76-05B2822A74E9",
"RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/GridMaterial.usda" : "FBD8436F-6B8B-4B82-99B5-995D538B4704",
"RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/procedural_sphere_grid.usda" : "1CBF3893-ABFD-408C-8B91-045BFD257808",
"RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/Scene.usda" : "26DBAE76-5DD8-47B6-A085-1B4ADA111097"
}
}
================================================
FILE: Timer Vision/Packages/RealityKitContent/Package.realitycomposerpro/WorkspaceData/SceneMetadataList.json
================================================
{
"0A9B4653-B11E-4D6A-850E-C6FCB621626C" : {
"cameraTransform" : [
0.9807314,
-1.9820146e-10,
-0.195361,
0,
-0.10051192,
0.85749435,
-0.5045798,
0,
0.16752096,
0.51449335,
0.84097165,
0,
0.09084191,
0.05849296,
0.13903293,
1
],
"objectMetadataList" : [
[
"0A9B4653-B11E-4D6A-850E-C6FCB621626C",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
},
[
"0A9B4653-B11E-4D6A-850E-C6FCB621626C",
"Root",
"GridMaterial"
],
{
"isExpanded" : true,
"isLocked" : false
},
[
"0A9B4653-B11E-4D6A-850E-C6FCB621626C",
"Root",
"Sphere"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
},
"1CBF3893-ABFD-408C-8B91-045BFD257808" : {
"cameraTransform" : [
0.99999994,
0,
-0,
0,
-0,
0.8660255,
-0.49999988,
0,
0,
0.49999988,
0.8660255,
0,
0,
0.27093542,
0.46927398,
1
],
"objectMetadataList" : [
]
},
"03E02005-EFA6-48D6-8A76-05B2822A74E9" : {
"cameraTransform" : [
0.99999994,
0,
-0,
0,
-0,
0.8660254,
-0.49999994,
0,
0,
0.49999994,
0.8660254,
0,
0,
0.5981957,
1.0361054,
1
],
"objectMetadataList" : [
]
},
"26DBAE76-5DD8-47B6-A085-1B4ADA111097" : {
"cameraTransform" : [
1,
0,
-0,
0,
-0,
0.7071069,
-0.7071067,
0,
0,
0.7071067,
0.7071069,
0,
0,
0.2681068,
0.26850593,
1
],
"objectMetadataList" : [
[
"26DBAE76-5DD8-47B6-A085-1B4ADA111097",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
},
"34C460AE-CA1B-4348-BD05-621ACBDFFE97" : {
"cameraTransform" : [
0.99999994,
0,
-0,
0,
-0,
0.8660255,
-0.49999988,
0,
0,
0.49999988,
0.8660255,
0,
0,
0.27093542,
0.46927398,
1
],
"objectMetadataList" : [
]
},
"440DE5B4-E4E4-459B-AABF-9ACE96319272" : {
"cameraTransform" : [
0.99999994,
0,
-0,
0,
-0,
0.8660254,
-0.49999994,
0,
0,
0.49999994,
0.8660254,
0,
0,
0.5981957,
1.0361054,
1
],
"objectMetadataList" : [
[
"440DE5B4-E4E4-459B-AABF-9ACE96319272",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
},
"FBD8436F-6B8B-4B82-99B5-995D538B4704" : {
"cameraTransform" : [
0.99999994,
0,
-0,
0,
-0,
0.8660254,
-0.49999994,
0,
0,
0.49999994,
0.8660254,
0,
0,
0.5981957,
1.0361054,
1
],
"objectMetadataList" : [
[
"FBD8436F-6B8B-4B82-99B5-995D538B4704",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
}
}
================================================
FILE: Timer Vision/Packages/RealityKitContent/Package.realitycomposerpro/WorkspaceData/Settings.rcprojectdata
================================================
{
"cameraPresets" : {
},
"secondaryToolbarData" : {
"isGridVisible" : true,
"sceneReverbPreset" : -1
},
"unitDefaults" : {
"°" : "°",
"kg" : "g",
"m" : "cm",
"m\/s" : "m\/s",
"m\/s²" : "m\/s²",
"s" : "s"
}
}
================================================
FILE: Timer Vision/Packages/RealityKitContent/Package.swift
================================================
// swift-tools-version:5.9
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "RealityKitContent",
products: [
// Products define the executables and libraries a package produces, and make them visible to other packages.
.library(
name: "RealityKitContent",
targets: ["RealityKitContent"]),
],
dependencies: [
// Dependencies declare other packages that this package depends on.
// .package(url: /* package url */, from: "1.0.0"),
],
targets: [
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
// Targets can depend on other targets in this package, and on products in packages this package depends on.
.target(
name: "RealityKitContent",
dependencies: []),
]
)
================================================
FILE: Timer Vision/Packages/RealityKitContent/README.md
================================================
# RealityKitContent
A description of this package.
================================================
FILE: Timer Vision/Packages/RealityKitContent/Sources/RealityKitContent/RealityKitContent.rkassets/Materials/GridMaterial.usda
================================================
#usda 1.0
(
defaultPrim = "Root"
metersPerUnit = 1
upAxis = "Y"
)
def Xform "Root"
{
def Material "GridMaterial"
{
reorder nameChildren = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "DefaultSurfaceShader", "MaterialXPreviewSurface", "Texcoord", "Add", "Multiply", "Fractional", "LineCounts", "Multiply_1", "Separate2", "Separate2_1", "Ifgreater", "Ifgreater_1", "Max", "Background_Color"]
token outputs:mtlx:surface.connect =
token outputs:realitykit:vertex
token outputs:surface
float2 ui:nodegraph:realitykit:subgraphOutputs:pos = (2222, 300.5)
float2 ui:nodegraph:realitykit:subgraphOutputs:size = (182, 89)
int ui:nodegraph:realitykit:subgraphOutputs:stackingOrder = 749
def Shader "DefaultSurfaceShader"
{
uniform token info:id = "UsdPreviewSurface"
color3f inputs:diffuseColor = (1, 1, 1)
float inputs:roughness = 0.75
token outputs:surface
}
def Shader "MaterialXPreviewSurface"
{
uniform token info:id = "ND_UsdPreviewSurface_surfaceshader"
float inputs:clearcoat
float inputs:clearcoatRoughness
color3f inputs:diffuseColor.connect =
color3f inputs:emissiveColor
float inputs:ior
float inputs:metallic = 0.15
float3 inputs:normal
float inputs:occlusion
float inputs:opacity
float inputs:opacityThreshold
float inputs:roughness = 0.5
token outputs:out
float2 ui:nodegraph:node:pos = (1967, 300.5)
float2 ui:nodegraph:node:size = (208, 297)
int ui:nodegraph:node:stackingOrder = 870
string[] ui:nodegraph:realitykit:node:attributesShowingChildren = ["Advanced"]
}
def Shader "Texcoord"
{
uniform token info:id = "ND_texcoord_vector2"
float2 outputs:out
float2 ui:nodegraph:node:pos = (94.14453, 35.29297)
float2 ui:nodegraph:node:size = (182, 43)
int ui:nodegraph:node:stackingOrder = 1358
}
def Shader "Multiply"
{
uniform token info:id = "ND_multiply_vector2"
float2 inputs:in1.connect =
float2 inputs:in2 = (32, 15)
float2 inputs:in2.connect =
float2 outputs:out
float2 ui:nodegraph:node:pos = (275.64453, 47.29297)
float2 ui:nodegraph:node:size = (61, 36)
int ui:nodegraph:node:stackingOrder = 1348
string[] ui:nodegraph:realitykit:node:attributesShowingChildren = ["inputs:in2"]
}
def Shader "Fractional"
{
uniform token info:id = "ND_realitykit_fractional_vector2"
float2 inputs:in.connect =
float2 outputs:out
float2 ui:nodegraph:node:pos = (440.5, 49.5)
float2 ui:nodegraph:node:size = (155, 99)
int ui:nodegraph:node:stackingOrder = 1345
}
def Shader "BaseColor"
{
uniform token info:id = "ND_constant_color3"
color3f inputs:value = (0.89737034, 0.89737034, 0.89737034) (
colorSpace = "Input - Texture - sRGB - sRGB"
)
color3f inputs:value.connect = None
color3f outputs:out
float2 ui:nodegraph:node:pos = (1537.5977, 363.07812)
float2 ui:nodegraph:node:size = (150, 43)
int ui:nodegraph:node:stackingOrder = 1353
}
def Shader "LineColor"
{
uniform token info:id = "ND_constant_color3"
color3f inputs:value = (0.55945957, 0.55945957, 0.55945957) (
colorSpace = "Input - Texture - sRGB - sRGB"
)
color3f inputs:value.connect = None
color3f outputs:out
float2 ui:nodegraph:node:pos = (1536.9844, 287.86328)
float2 ui:nodegraph:node:size = (146, 43)
int ui:nodegraph:node:stackingOrder = 1355
}
def Shader "LineWidths"
{
uniform token info:id = "ND_combine2_vector2"
float inputs:in1 = 0.1
float inputs:in2 = 0.1
float2 outputs:out
float2 ui:nodegraph:node:pos = (443.64453, 233.79297)
float2 ui:nodegraph:node:size = (151, 43)
int ui:nodegraph:node:stackingOrder = 1361
}
def Shader "LineCounts"
{
uniform token info:id = "ND_combine2_vector2"
float inputs:in1 = 24
float inputs:in2 = 12
float2 outputs:out
float2 ui:nodegraph:node:pos = (94.14453, 138.29297)
float2 ui:nodegraph:node:size = (153, 43)
int ui:nodegraph:node:stackingOrder = 1359
}
def Shader "Remap"
{
uniform token info:id = "ND_remap_color3"
color3f inputs:in.connect =
color3f inputs:inhigh.connect = None
color3f inputs:inlow.connect = None
color3f inputs:outhigh.connect =
color3f inputs:outlow.connect =
color3f outputs:out
float2 ui:nodegraph:node:pos = (1755.5, 300.5)
float2 ui:nodegraph:node:size = (95, 171)
int ui:nodegraph:node:stackingOrder = 1282
string[] ui:nodegraph:realitykit:node:attributesShowingChildren = ["inputs:outlow"]
}
def Shader "Separate2"
{
uniform token info:id = "ND_separate2_vector2"
float2 inputs:in.connect =
float outputs:outx
float outputs:outy
float2 ui:nodegraph:node:pos = (1212.6445, 128.91797)
float2 ui:nodegraph:node:size = (116, 117)
int ui:nodegraph:node:stackingOrder = 1363
}
def Shader "Combine3"
{
uniform token info:id = "ND_combine3_color3"
float inputs:in1.connect =
float inputs:in2.connect =
float inputs:in3.connect =
color3f outputs:out
float2 ui:nodegraph:node:pos = (1578.1445, 128.91797)
float2 ui:nodegraph:node:size = (146, 54)
int ui:nodegraph:node:stackingOrder = 1348
}
def Shader "Range"
{
uniform token info:id = "ND_range_vector2"
bool inputs:doclamp = 1
float2 inputs:gamma = (2, 2)
float2 inputs:in.connect =
float2 inputs:inhigh.connect =
float2 inputs:inlow = (0.02, 0.02)
float2 inputs:outhigh
float2 inputs:outlow
float2 outputs:out
float2 ui:nodegraph:node:pos = (990.64453, 128.91797)
float2 ui:nodegraph:node:size = (98, 207)
int ui:nodegraph:node:stackingOrder = 1364
}
def Shader "Subtract"
{
uniform token info:id = "ND_subtract_vector2"
float2 inputs:in1.connect =
float2 inputs:in2.connect =
float2 outputs:out
float2 ui:nodegraph:node:pos = (612.64453, 87.04297)
float2 ui:nodegraph:node:size = (63, 36)
int ui:nodegraph:node:stackingOrder = 1348
}
def Shader "Absval"
{
uniform token info:id = "ND_absval_vector2"
float2 inputs:in.connect =
float2 outputs:out
float2 ui:nodegraph:node:pos = (765.64453, 87.04297)
float2 ui:nodegraph:node:size = (123, 43)
int ui:nodegraph:node:stackingOrder = 1348
}
def Shader "Min"
{
uniform token info:id = "ND_min_float"
float inputs:in1.connect =
float inputs:in2.connect =
float outputs:out
float2 ui:nodegraph:node:pos = (1388.1445, 128.91797)
float2 ui:nodegraph:node:size = (114, 36)
int ui:nodegraph:node:stackingOrder = 1363
}
}
}
================================================
FILE: Timer Vision/Packages/RealityKitContent/Sources/RealityKitContent/RealityKitContent.rkassets/Scene.usda
================================================
#usda 1.0
(
defaultPrim = "Root"
metersPerUnit = 1
upAxis = "Y"
)
def Xform "Root"
{
reorder nameChildren = ["GridMaterial", "Sphere"]
rel material:binding = None (
bindMaterialAs = "weakerThanDescendants"
)
def Sphere "Sphere" (
active = true
prepend apiSchemas = ["MaterialBindingAPI"]
)
{
rel material:binding = (
bindMaterialAs = "weakerThanDescendants"
)
double radius = 0.05
quatf xformOp:orient = (1, 0, 0, 0)
float3 xformOp:scale = (1, 1, 1)
float3 xformOp:translate = (0, 0, 0.0004)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
def RealityKitComponent "Collider"
{
uint group = 1
uniform token info:id = "RealityKit.Collider"
uint mask = 4294967295
token type = "Default"
def RealityKitStruct "Shape"
{
float3 extent = (0.2, 0.2, 0.2)
float radius = 0.05
token shapeType = "Sphere"
}
}
def RealityKitComponent "InputTarget"
{
uniform token info:id = "RealityKit.InputTarget"
}
}
def "GridMaterial" (
active = true
prepend references = @Materials/GridMaterial.usda@
)
{
float3 xformOp:scale = (1, 1, 1)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
}
}
================================================
FILE: Timer Vision/Packages/RealityKitContent/Sources/RealityKitContent/RealityKitContent.swift
================================================
import Foundation
/// Bundle for the RealityKitContent project
public let realityKitContentBundle = Bundle.module
================================================
FILE: Timer Vision/README.md
================================================
**Timer Vision:** Timer Window for Apple Vision Pro
https://github.com/IvanCampos/visionOS-examples/assets/872137/2fe849fe-721a-4c37-b72e-416cc5ce277f
================================================
FILE: Timer Vision/Timer Vision/Assets.xcassets/AppIcon.solidimagestack/Back.solidimagestacklayer/Content.imageset/Contents.json
================================================
{
"images" : [
{
"idiom" : "vision",
"scale" : "2x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: Timer Vision/Timer Vision/Assets.xcassets/AppIcon.solidimagestack/Back.solidimagestacklayer/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: Timer Vision/Timer Vision/Assets.xcassets/AppIcon.solidimagestack/Back.solidimagestacklayer/bg-green.imageset/Contents.json
================================================
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "bg-green.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: Timer Vision/Timer Vision/Assets.xcassets/AppIcon.solidimagestack/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
},
"layers" : [
{
"filename" : "Front.solidimagestacklayer"
},
{
"filename" : "Middle.solidimagestacklayer"
},
{
"filename" : "Back.solidimagestacklayer"
}
]
}
================================================
FILE: Timer Vision/Timer Vision/Assets.xcassets/AppIcon.solidimagestack/Front.solidimagestacklayer/Content.imageset/Contents.json
================================================
{
"images" : [
{
"filename" : "timer-front-white.png",
"idiom" : "vision",
"scale" : "2x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: Timer Vision/Timer Vision/Assets.xcassets/AppIcon.solidimagestack/Front.solidimagestacklayer/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: Timer Vision/Timer Vision/Assets.xcassets/AppIcon.solidimagestack/Middle.solidimagestacklayer/Content.imageset/Contents.json
================================================
{
"images" : [
{
"filename" : "timer-front-white.png",
"idiom" : "vision",
"scale" : "2x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: Timer Vision/Timer Vision/Assets.xcassets/AppIcon.solidimagestack/Middle.solidimagestacklayer/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: Timer Vision/Timer Vision/Assets.xcassets/Contents.json
================================================
{
"info" : {
"version" : 1,
"author" : "xcode"
}
}
================================================
FILE: Timer Vision/Timer Vision/ContentView.swift
================================================
//
// ContentView.swift
// Timer Vision
//
// Created by IVAN CAMPOS
//
import SwiftUI
import AVFoundation
struct ContentView: View {
@StateObject private var timerViewModel = TimerViewModel()
@State private var inputSeconds: String = ""
let CUSTOM_FONT = "Audiowide-Regular"
var body: some View {
ZStack {
Color.white.opacity(0.0).edgesIgnoringSafeArea(.all)
VStack(spacing: 20) {
if timerViewModel.timerState == .stopped {
TextField("Sec", text: $inputSeconds)
.padding()
.foregroundColor(Color.blue)
.background(Color.white)
.cornerRadius(5)
.overlay(RoundedRectangle(cornerRadius: 5).stroke(Color.gray, lineWidth: 1))
.keyboardType(.numberPad)
.font(.custom(CUSTOM_FONT, size: 36))
.multilineTextAlignment(.center)
.frame(width: 200)
.padding()
Button("Start Timer") {
if let seconds = Int(inputSeconds) {
timerViewModel.startTimer(duration: seconds)
}
}
.padding()
.foregroundColor(.white)
.background(Color.blue)
.clipShape(Capsule())
} else {
ZStack {
Circle()
.stroke(lineWidth: 20)
.opacity(1.0)
.foregroundColor(Color.gray)
Circle()
.trim(from: 0, to: CGFloat(timerViewModel.progress))
.stroke(style: StrokeStyle(lineWidth: 20, lineCap: .round, lineJoin: .round))
.foregroundColor(timerViewModel.hasFinished ? .gray : .green)
.rotationEffect(Angle(degrees: -90))
.animation(.linear, value: timerViewModel.progress)
// Place the time-formatted text in the center of the circle
Text(timerViewModel.timeFormatted)
.font(.custom(CUSTOM_FONT, size: 42))
.fontWeight(.bold)
.foregroundColor(timerViewModel.hasFinished ? .gray : .white)
}
.frame(width: 200, height: 200)
}
if timerViewModel.hasFinished {
Button("Stop Sound") {
timerViewModel.stopSound()
}
.padding()
.foregroundColor(.white)
.background(Color.red)
.clipShape(Capsule())
}
}
}
.font(.custom(CUSTOM_FONT, size: 0.3))
}
}
================================================
FILE: Timer Vision/Timer Vision/Info.plist
================================================
UIApplicationSceneManifest
UIApplicationPreferredDefaultSceneSessionRole
UIWindowSceneSessionRoleApplication
UIApplicationSupportsMultipleScenes
UISceneConfigurations
UIAppFonts
Audiowide-Regular.ttf
================================================
FILE: Timer Vision/Timer Vision/Preview Content/Preview Assets.xcassets/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: Timer Vision/Timer Vision/TimerViewModel.swift
================================================
//
// TimerViewModel.swift
// Timer Vision
//
// Created by IVAN CAMPOS
//
import AVFoundation
import SwiftUI
import RealityKit
class TimerViewModel: ObservableObject {
enum TimerState {
case finished
case running
case stopped
}
@Published var timeRemaining: Int = 0
@Published var hasFinished: Bool = false
@Published var timerState: TimerState = .stopped
var progress: Double {
guard timeRemaining != 0 else { return 0 }
return Double(timeRemaining) / Double(initialTime)
}
var timeFormatted: String {
let minutes = timeRemaining / 60
let seconds = timeRemaining % 60
return String(format: "%02d:%02d", minutes, seconds)
}
private var timer: Timer?
private var player: AVAudioPlayer?
private var initialTime: Int = 0
func startTimer(duration: Int) {
initialTime = duration
timeRemaining = duration
timerState = .running
hasFinished = false
timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { [weak self] _ in
guard let self = self else { return }
if self.timeRemaining > 0 {
self.timeRemaining -= 1
} else {
self.hasFinished = true
self.timerState = .finished
self.playSound()
self.timer?.invalidate()
}
}
}
func stopSound() {
player?.stop()
timerState = .stopped
}
private func playSound() {
guard let url = Bundle.main.url(forResource: "VirtualityHustle", withExtension: "mp3") else { return }
do {
player = try AVAudioPlayer(contentsOf: url)
player?.play()
} catch {
print("Couldn't load sound file")
}
}
}
================================================
FILE: Timer Vision/Timer Vision/Timer_VisionApp.swift
================================================
//
// Timer_VisionApp.swift
// Timer Vision
//
// Created by IVAN CAMPOS
//
import SwiftUI
@main
struct Timer_VisionApp: App {
var body: some Scene {
WindowGroup {
ContentView()
.persistentSystemOverlays(.hidden)
}
.windowStyle(.plain)
}
}
================================================
FILE: Timer Vision/Timer Vision.xcodeproj/project.pbxproj
================================================
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 56;
objects = {
/* Begin PBXBuildFile section */
3B025D6D2BC90A8B00E96EFE /* VirtualityHustle.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 3B025D6C2BC90A8B00E96EFE /* VirtualityHustle.mp3 */; };
3B025D712BC9109F00E96EFE /* Audiowide-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 3B025D702BC9109F00E96EFE /* Audiowide-Regular.ttf */; };
3B8EF71D2B747C9E00EB3308 /* RealityKitContent in Frameworks */ = {isa = PBXBuildFile; productRef = 3B8EF71C2B747C9E00EB3308 /* RealityKitContent */; };
3B8EF71F2B747C9E00EB3308 /* Timer_VisionApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B8EF71E2B747C9E00EB3308 /* Timer_VisionApp.swift */; };
3B8EF7212B747C9E00EB3308 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B8EF7202B747C9E00EB3308 /* ContentView.swift */; };
3B8EF7232B747C9F00EB3308 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3B8EF7222B747C9F00EB3308 /* Assets.xcassets */; };
3B8EF7262B747C9F00EB3308 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3B8EF7252B747C9F00EB3308 /* Preview Assets.xcassets */; };
3B8EF72E2B747CDE00EB3308 /* TimerViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B8EF72D2B747CDE00EB3308 /* TimerViewModel.swift */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
3B025D6C2BC90A8B00E96EFE /* VirtualityHustle.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = VirtualityHustle.mp3; sourceTree = ""; };
3B025D702BC9109F00E96EFE /* Audiowide-Regular.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Audiowide-Regular.ttf"; sourceTree = ""; };
3B8EF7172B747C9E00EB3308 /* Timer Vision.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Timer Vision.app"; sourceTree = BUILT_PRODUCTS_DIR; };
3B8EF71B2B747C9E00EB3308 /* RealityKitContent */ = {isa = PBXFileReference; lastKnownFileType = wrapper; path = RealityKitContent; sourceTree = ""; };
3B8EF71E2B747C9E00EB3308 /* Timer_VisionApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Timer_VisionApp.swift; sourceTree = ""; };
3B8EF7202B747C9E00EB3308 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; };
3B8EF7222B747C9F00EB3308 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
3B8EF7252B747C9F00EB3308 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; };
3B8EF7272B747C9F00EB3308 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
3B8EF72D2B747CDE00EB3308 /* TimerViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimerViewModel.swift; sourceTree = ""; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
3B8EF7142B747C9E00EB3308 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
3B8EF71D2B747C9E00EB3308 /* RealityKitContent in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
3B8EF70E2B747C9E00EB3308 = {
isa = PBXGroup;
children = (
3B025D702BC9109F00E96EFE /* Audiowide-Regular.ttf */,
3B025D6C2BC90A8B00E96EFE /* VirtualityHustle.mp3 */,
3B8EF7192B747C9E00EB3308 /* Timer Vision */,
3B8EF71A2B747C9E00EB3308 /* Packages */,
3B8EF7182B747C9E00EB3308 /* Products */,
);
sourceTree = "";
};
3B8EF7182B747C9E00EB3308 /* Products */ = {
isa = PBXGroup;
children = (
3B8EF7172B747C9E00EB3308 /* Timer Vision.app */,
);
name = Products;
sourceTree = "";
};
3B8EF7192B747C9E00EB3308 /* Timer Vision */ = {
isa = PBXGroup;
children = (
3B8EF71E2B747C9E00EB3308 /* Timer_VisionApp.swift */,
3B8EF7202B747C9E00EB3308 /* ContentView.swift */,
3B8EF72D2B747CDE00EB3308 /* TimerViewModel.swift */,
3B8EF7222B747C9F00EB3308 /* Assets.xcassets */,
3B8EF7272B747C9F00EB3308 /* Info.plist */,
3B8EF7242B747C9F00EB3308 /* Preview Content */,
);
path = "Timer Vision";
sourceTree = "";
};
3B8EF71A2B747C9E00EB3308 /* Packages */ = {
isa = PBXGroup;
children = (
3B8EF71B2B747C9E00EB3308 /* RealityKitContent */,
);
path = Packages;
sourceTree = "";
};
3B8EF7242B747C9F00EB3308 /* Preview Content */ = {
isa = PBXGroup;
children = (
3B8EF7252B747C9F00EB3308 /* Preview Assets.xcassets */,
);
path = "Preview Content";
sourceTree = "";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
3B8EF7162B747C9E00EB3308 /* Timer Vision */ = {
isa = PBXNativeTarget;
buildConfigurationList = 3B8EF72A2B747C9F00EB3308 /* Build configuration list for PBXNativeTarget "Timer Vision" */;
buildPhases = (
3B8EF7132B747C9E00EB3308 /* Sources */,
3B8EF7142B747C9E00EB3308 /* Frameworks */,
3B8EF7152B747C9E00EB3308 /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = "Timer Vision";
packageProductDependencies = (
3B8EF71C2B747C9E00EB3308 /* RealityKitContent */,
);
productName = "Timer Vision";
productReference = 3B8EF7172B747C9E00EB3308 /* Timer Vision.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
3B8EF70F2B747C9E00EB3308 /* Project object */ = {
isa = PBXProject;
attributes = {
BuildIndependentTargetsInParallel = 1;
LastSwiftUpdateCheck = 1520;
LastUpgradeCheck = 1520;
TargetAttributes = {
3B8EF7162B747C9E00EB3308 = {
CreatedOnToolsVersion = 15.2;
};
};
};
buildConfigurationList = 3B8EF7122B747C9E00EB3308 /* Build configuration list for PBXProject "Timer Vision" */;
compatibilityVersion = "Xcode 14.0";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = 3B8EF70E2B747C9E00EB3308;
productRefGroup = 3B8EF7182B747C9E00EB3308 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
3B8EF7162B747C9E00EB3308 /* Timer Vision */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
3B8EF7152B747C9E00EB3308 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
3B8EF7262B747C9F00EB3308 /* Preview Assets.xcassets in Resources */,
3B025D6D2BC90A8B00E96EFE /* VirtualityHustle.mp3 in Resources */,
3B025D712BC9109F00E96EFE /* Audiowide-Regular.ttf in Resources */,
3B8EF7232B747C9F00EB3308 /* Assets.xcassets in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
3B8EF7132B747C9E00EB3308 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
3B8EF7212B747C9E00EB3308 /* ContentView.swift in Sources */,
3B8EF72E2B747CDE00EB3308 /* TimerViewModel.swift in Sources */,
3B8EF71F2B747C9E00EB3308 /* Timer_VisionApp.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
3B8EF7282B747C9F00EB3308 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu17;
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;
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = xros;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
XROS_DEPLOYMENT_TARGET = 1.0;
};
name = Debug;
};
3B8EF7292B747C9F00EB3308 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu17;
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;
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = xros;
SWIFT_COMPILATION_MODE = wholemodule;
VALIDATE_PRODUCT = YES;
XROS_DEPLOYMENT_TARGET = 1.0;
};
name = Release;
};
3B8EF72B2B747C9F00EB3308 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_ASSET_PATHS = "\"Timer Vision/Preview Content\"";
DEVELOPMENT_TEAM = 2DJDH872JZ;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "$(TARGET_NAME)/Info.plist";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = "com.ivancampos.Timer-Vision";
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "xros xrsimulator";
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2,7";
};
name = Debug;
};
3B8EF72C2B747C9F00EB3308 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_ASSET_PATHS = "\"Timer Vision/Preview Content\"";
DEVELOPMENT_TEAM = 2DJDH872JZ;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "$(TARGET_NAME)/Info.plist";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = "com.ivancampos.Timer-Vision";
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "xros xrsimulator";
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2,7";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
3B8EF7122B747C9E00EB3308 /* Build configuration list for PBXProject "Timer Vision" */ = {
isa = XCConfigurationList;
buildConfigurations = (
3B8EF7282B747C9F00EB3308 /* Debug */,
3B8EF7292B747C9F00EB3308 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
3B8EF72A2B747C9F00EB3308 /* Build configuration list for PBXNativeTarget "Timer Vision" */ = {
isa = XCConfigurationList;
buildConfigurations = (
3B8EF72B2B747C9F00EB3308 /* Debug */,
3B8EF72C2B747C9F00EB3308 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
/* Begin XCSwiftPackageProductDependency section */
3B8EF71C2B747C9E00EB3308 /* RealityKitContent */ = {
isa = XCSwiftPackageProductDependency;
productName = RealityKitContent;
};
/* End XCSwiftPackageProductDependency section */
};
rootObject = 3B8EF70F2B747C9E00EB3308 /* Project object */;
}
================================================
FILE: Timer Vision/Timer Vision.xcodeproj/project.xcworkspace/contents.xcworkspacedata
================================================
================================================
FILE: Timer Vision/Timer Vision.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
================================================
IDEDidComputeMac32BitWarning
================================================
FILE: WebSockets/Packages/RealityKitContent/Package.realitycomposerpro/ProjectData/main.json
================================================
{
"pathsToIds" : {
"\/RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/GridMaterial.usda" : "440DE5B4-E4E4-459B-AABF-9ACE96319272",
"\/RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/procedural_sphere_grid.usda" : "34C460AE-CA1B-4348-BD05-621ACBDFFE97",
"\/RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/Scene.usda" : "0A9B4653-B11E-4D6A-850E-C6FCB621626C",
"\/RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/Untitled Scene.usda" : "03E02005-EFA6-48D6-8A76-05B2822A74E9",
"RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/GridMaterial.usda" : "FBD8436F-6B8B-4B82-99B5-995D538B4704",
"RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/procedural_sphere_grid.usda" : "1CBF3893-ABFD-408C-8B91-045BFD257808",
"RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/Scene.usda" : "26DBAE76-5DD8-47B6-A085-1B4ADA111097"
}
}
================================================
FILE: WebSockets/Packages/RealityKitContent/Package.realitycomposerpro/WorkspaceData/SceneMetadataList.json
================================================
{
"0A9B4653-B11E-4D6A-850E-C6FCB621626C" : {
"cameraTransform" : [
0.9807314,
-1.9820146e-10,
-0.195361,
0,
-0.10051192,
0.85749435,
-0.5045798,
0,
0.16752096,
0.51449335,
0.84097165,
0,
0.09084191,
0.05849296,
0.13903293,
1
],
"objectMetadataList" : [
[
"0A9B4653-B11E-4D6A-850E-C6FCB621626C",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
},
[
"0A9B4653-B11E-4D6A-850E-C6FCB621626C",
"Root",
"GridMaterial"
],
{
"isExpanded" : true,
"isLocked" : false
},
[
"0A9B4653-B11E-4D6A-850E-C6FCB621626C",
"Root",
"Sphere"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
},
"1CBF3893-ABFD-408C-8B91-045BFD257808" : {
"cameraTransform" : [
0.99999994,
0,
-0,
0,
-0,
0.8660255,
-0.49999988,
0,
0,
0.49999988,
0.8660255,
0,
0,
0.27093542,
0.46927398,
1
],
"objectMetadataList" : [
]
},
"03E02005-EFA6-48D6-8A76-05B2822A74E9" : {
"cameraTransform" : [
0.99999994,
0,
-0,
0,
-0,
0.8660254,
-0.49999994,
0,
0,
0.49999994,
0.8660254,
0,
0,
0.5981957,
1.0361054,
1
],
"objectMetadataList" : [
]
},
"26DBAE76-5DD8-47B6-A085-1B4ADA111097" : {
"cameraTransform" : [
1,
0,
-0,
0,
-0,
0.7071069,
-0.7071067,
0,
0,
0.7071067,
0.7071069,
0,
0,
0.2681068,
0.26850593,
1
],
"objectMetadataList" : [
[
"26DBAE76-5DD8-47B6-A085-1B4ADA111097",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
},
"34C460AE-CA1B-4348-BD05-621ACBDFFE97" : {
"cameraTransform" : [
0.99999994,
0,
-0,
0,
-0,
0.8660255,
-0.49999988,
0,
0,
0.49999988,
0.8660255,
0,
0,
0.27093542,
0.46927398,
1
],
"objectMetadataList" : [
]
},
"440DE5B4-E4E4-459B-AABF-9ACE96319272" : {
"cameraTransform" : [
0.99999994,
0,
-0,
0,
-0,
0.8660254,
-0.49999994,
0,
0,
0.49999994,
0.8660254,
0,
0,
0.5981957,
1.0361054,
1
],
"objectMetadataList" : [
[
"440DE5B4-E4E4-459B-AABF-9ACE96319272",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
},
"FBD8436F-6B8B-4B82-99B5-995D538B4704" : {
"cameraTransform" : [
0.99999994,
0,
-0,
0,
-0,
0.8660254,
-0.49999994,
0,
0,
0.49999994,
0.8660254,
0,
0,
0.5981957,
1.0361054,
1
],
"objectMetadataList" : [
[
"FBD8436F-6B8B-4B82-99B5-995D538B4704",
"Root"
],
{
"isExpanded" : true,
"isLocked" : false
}
]
}
}
================================================
FILE: WebSockets/Packages/RealityKitContent/Package.realitycomposerpro/WorkspaceData/Settings.rcprojectdata
================================================
{
"cameraPresets" : {
},
"secondaryToolbarData" : {
"isGridVisible" : true,
"sceneReverbPreset" : -1
},
"unitDefaults" : {
"°" : "°",
"kg" : "g",
"m" : "cm",
"m\/s" : "m\/s",
"m\/s²" : "m\/s²",
"s" : "s"
}
}
================================================
FILE: WebSockets/Packages/RealityKitContent/Package.swift
================================================
// swift-tools-version:5.9
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "RealityKitContent",
products: [
// Products define the executables and libraries a package produces, and make them visible to other packages.
.library(
name: "RealityKitContent",
targets: ["RealityKitContent"]),
],
dependencies: [
// Dependencies declare other packages that this package depends on.
// .package(url: /* package url */, from: "1.0.0"),
],
targets: [
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
// Targets can depend on other targets in this package, and on products in packages this package depends on.
.target(
name: "RealityKitContent",
dependencies: []),
]
)
================================================
FILE: WebSockets/Packages/RealityKitContent/README.md
================================================
# RealityKitContent
A description of this package.
================================================
FILE: WebSockets/Packages/RealityKitContent/Sources/RealityKitContent/RealityKitContent.rkassets/Materials/GridMaterial.usda
================================================
#usda 1.0
(
defaultPrim = "Root"
metersPerUnit = 1
upAxis = "Y"
)
def Xform "Root"
{
def Material "GridMaterial"
{
reorder nameChildren = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "DefaultSurfaceShader", "MaterialXPreviewSurface", "Texcoord", "Add", "Multiply", "Fractional", "LineCounts", "Multiply_1", "Separate2", "Separate2_1", "Ifgreater", "Ifgreater_1", "Max", "Background_Color"]
token outputs:mtlx:surface.connect =
token outputs:realitykit:vertex
token outputs:surface
float2 ui:nodegraph:realitykit:subgraphOutputs:pos = (2222, 300.5)
float2 ui:nodegraph:realitykit:subgraphOutputs:size = (182, 89)
int ui:nodegraph:realitykit:subgraphOutputs:stackingOrder = 749
def Shader "DefaultSurfaceShader"
{
uniform token info:id = "UsdPreviewSurface"
color3f inputs:diffuseColor = (1, 1, 1)
float inputs:roughness = 0.75
token outputs:surface
}
def Shader "MaterialXPreviewSurface"
{
uniform token info:id = "ND_UsdPreviewSurface_surfaceshader"
float inputs:clearcoat
float inputs:clearcoatRoughness
color3f inputs:diffuseColor.connect =
color3f inputs:emissiveColor
float inputs:ior
float inputs:metallic = 0.15
float3 inputs:normal
float inputs:occlusion
float inputs:opacity
float inputs:opacityThreshold
float inputs:roughness = 0.5
token outputs:out
float2 ui:nodegraph:node:pos = (1967, 300.5)
float2 ui:nodegraph:node:size = (208, 297)
int ui:nodegraph:node:stackingOrder = 870
string[] ui:nodegraph:realitykit:node:attributesShowingChildren = ["Advanced"]
}
def Shader "Texcoord"
{
uniform token info:id = "ND_texcoord_vector2"
float2 outputs:out
float2 ui:nodegraph:node:pos = (94.14453, 35.29297)
float2 ui:nodegraph:node:size = (182, 43)
int ui:nodegraph:node:stackingOrder = 1358
}
def Shader "Multiply"
{
uniform token info:id = "ND_multiply_vector2"
float2 inputs:in1.connect =
float2 inputs:in2 = (32, 15)
float2 inputs:in2.connect =
float2 outputs:out
float2 ui:nodegraph:node:pos = (275.64453, 47.29297)
float2 ui:nodegraph:node:size = (61, 36)
int ui:nodegraph:node:stackingOrder = 1348
string[] ui:nodegraph:realitykit:node:attributesShowingChildren = ["inputs:in2"]
}
def Shader "Fractional"
{
uniform token info:id = "ND_realitykit_fractional_vector2"
float2 inputs:in.connect =
float2 outputs:out
float2 ui:nodegraph:node:pos = (440.5, 49.5)
float2 ui:nodegraph:node:size = (155, 99)
int ui:nodegraph:node:stackingOrder = 1345
}
def Shader "BaseColor"
{
uniform token info:id = "ND_constant_color3"
color3f inputs:value = (0.89737034, 0.89737034, 0.89737034) (
colorSpace = "Input - Texture - sRGB - sRGB"
)
color3f inputs:value.connect = None
color3f outputs:out
float2 ui:nodegraph:node:pos = (1537.5977, 363.07812)
float2 ui:nodegraph:node:size = (150, 43)
int ui:nodegraph:node:stackingOrder = 1353
}
def Shader "LineColor"
{
uniform token info:id = "ND_constant_color3"
color3f inputs:value = (0.55945957, 0.55945957, 0.55945957) (
colorSpace = "Input - Texture - sRGB - sRGB"
)
color3f inputs:value.connect = None
color3f outputs:out
float2 ui:nodegraph:node:pos = (1536.9844, 287.86328)
float2 ui:nodegraph:node:size = (146, 43)
int ui:nodegraph:node:stackingOrder = 1355
}
def Shader "LineWidths"
{
uniform token info:id = "ND_combine2_vector2"
float inputs:in1 = 0.1
float inputs:in2 = 0.1
float2 outputs:out
float2 ui:nodegraph:node:pos = (443.64453, 233.79297)
float2 ui:nodegraph:node:size = (151, 43)
int ui:nodegraph:node:stackingOrder = 1361
}
def Shader "LineCounts"
{
uniform token info:id = "ND_combine2_vector2"
float inputs:in1 = 24
float inputs:in2 = 12
float2 outputs:out
float2 ui:nodegraph:node:pos = (94.14453, 138.29297)
float2 ui:nodegraph:node:size = (153, 43)
int ui:nodegraph:node:stackingOrder = 1359
}
def Shader "Remap"
{
uniform token info:id = "ND_remap_color3"
color3f inputs:in.connect =
color3f inputs:inhigh.connect = None
color3f inputs:inlow.connect = None
color3f inputs:outhigh.connect =
color3f inputs:outlow.connect =
color3f outputs:out
float2 ui:nodegraph:node:pos = (1755.5, 300.5)
float2 ui:nodegraph:node:size = (95, 171)
int ui:nodegraph:node:stackingOrder = 1282
string[] ui:nodegraph:realitykit:node:attributesShowingChildren = ["inputs:outlow"]
}
def Shader "Separate2"
{
uniform token info:id = "ND_separate2_vector2"
float2 inputs:in.connect =
float outputs:outx
float outputs:outy
float2 ui:nodegraph:node:pos = (1212.6445, 128.91797)
float2 ui:nodegraph:node:size = (116, 117)
int ui:nodegraph:node:stackingOrder = 1363
}
def Shader "Combine3"
{
uniform token info:id = "ND_combine3_color3"
float inputs:in1.connect =
float inputs:in2.connect =
float inputs:in3.connect =
color3f outputs:out
float2 ui:nodegraph:node:pos = (1578.1445, 128.91797)
float2 ui:nodegraph:node:size = (146, 54)
int ui:nodegraph:node:stackingOrder = 1348
}
def Shader "Range"
{
uniform token info:id = "ND_range_vector2"
bool inputs:doclamp = 1
float2 inputs:gamma = (2, 2)
float2 inputs:in.connect =
float2 inputs:inhigh.connect =
float2 inputs:inlow = (0.02, 0.02)
float2 inputs:outhigh
float2 inputs:outlow
float2 outputs:out
float2 ui:nodegraph:node:pos = (990.64453, 128.91797)
float2 ui:nodegraph:node:size = (98, 207)
int ui:nodegraph:node:stackingOrder = 1364
}
def Shader "Subtract"
{
uniform token info:id = "ND_subtract_vector2"
float2 inputs:in1.connect =
float2 inputs:in2.connect =
float2 outputs:out
float2 ui:nodegraph:node:pos = (612.64453, 87.04297)
float2 ui:nodegraph:node:size = (63, 36)
int ui:nodegraph:node:stackingOrder = 1348
}
def Shader "Absval"
{
uniform token info:id = "ND_absval_vector2"
float2 inputs:in.connect =
float2 outputs:out
float2 ui:nodegraph:node:pos = (765.64453, 87.04297)
float2 ui:nodegraph:node:size = (123, 43)
int ui:nodegraph:node:stackingOrder = 1348
}
def Shader "Min"
{
uniform token info:id = "ND_min_float"
float inputs:in1.connect =
float inputs:in2.connect =
float outputs:out
float2 ui:nodegraph:node:pos = (1388.1445, 128.91797)
float2 ui:nodegraph:node:size = (114, 36)
int ui:nodegraph:node:stackingOrder = 1363
}
}
}
================================================
FILE: WebSockets/Packages/RealityKitContent/Sources/RealityKitContent/RealityKitContent.rkassets/Scene.usda
================================================
#usda 1.0
(
defaultPrim = "Root"
metersPerUnit = 1
upAxis = "Y"
)
def Xform "Root"
{
reorder nameChildren = ["GridMaterial", "Sphere"]
rel material:binding = None (
bindMaterialAs = "weakerThanDescendants"
)
def Sphere "Sphere" (
active = true
prepend apiSchemas = ["MaterialBindingAPI"]
)
{
rel material:binding = (
bindMaterialAs = "weakerThanDescendants"
)
double radius = 0.05
quatf xformOp:orient = (1, 0, 0, 0)
float3 xformOp:scale = (1, 1, 1)
float3 xformOp:translate = (0, 0, 0.0004)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
def RealityKitComponent "Collider"
{
uint group = 1
uniform token info:id = "RealityKit.Collider"
uint mask = 4294967295
token type = "Default"
def RealityKitStruct "Shape"
{
float3 extent = (0.2, 0.2, 0.2)
float radius = 0.05
token shapeType = "Sphere"
}
}
def RealityKitComponent "InputTarget"
{
uniform token info:id = "RealityKit.InputTarget"
}
}
def "GridMaterial" (
active = true
prepend references = @Materials/GridMaterial.usda@
)
{
float3 xformOp:scale = (1, 1, 1)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
}
}
================================================
FILE: WebSockets/Packages/RealityKitContent/Sources/RealityKitContent/RealityKitContent.swift
================================================
import Foundation
/// Bundle for the RealityKitContent project
public let realityKitContentBundle = Bundle.module
================================================
FILE: WebSockets/README.md
================================================
# WebSockets
_Get Real-Time Cryptocurrency Prices for Bitcoin and Ethereum_
https://github.com/IvanCampos/visionOS-examples/assets/872137/65d69b88-489d-4f82-be38-c8e9a9db00a9
================================================
FILE: WebSockets/WebSockets/Assets.xcassets/AppIcon.solidimagestack/Back.solidimagestacklayer/Content.imageset/Contents.json
================================================
{
"images" : [
{
"filename" : "btc-back.png",
"idiom" : "vision",
"scale" : "2x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: WebSockets/WebSockets/Assets.xcassets/AppIcon.solidimagestack/Back.solidimagestacklayer/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: WebSockets/WebSockets/Assets.xcassets/AppIcon.solidimagestack/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
},
"layers" : [
{
"filename" : "Front.solidimagestacklayer"
},
{
"filename" : "Middle.solidimagestacklayer"
},
{
"filename" : "Back.solidimagestacklayer"
}
]
}
================================================
FILE: WebSockets/WebSockets/Assets.xcassets/AppIcon.solidimagestack/Front.solidimagestacklayer/Content.imageset/Contents.json
================================================
{
"images" : [
{
"filename" : "btc-front.png",
"idiom" : "vision",
"scale" : "2x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: WebSockets/WebSockets/Assets.xcassets/AppIcon.solidimagestack/Front.solidimagestacklayer/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: WebSockets/WebSockets/Assets.xcassets/AppIcon.solidimagestack/Middle.solidimagestacklayer/Content.imageset/Contents.json
================================================
{
"images" : [
{
"idiom" : "vision",
"scale" : "2x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: WebSockets/WebSockets/Assets.xcassets/AppIcon.solidimagestack/Middle.solidimagestacklayer/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: WebSockets/WebSockets/Assets.xcassets/Contents.json
================================================
{
"info" : {
"version" : 1,
"author" : "xcode"
}
}
================================================
FILE: WebSockets/WebSockets/ContentView.swift
================================================
//
// ContentView.swift
// WebSockets
//
// Created by IVAN CAMPOS on 1/28/24.
//
import SwiftUI
// Main ContentView
struct ContentView: View {
@ObservedObject var webSocketService = WebSocketService()
var body: some View {
VStack {
// BTC-USD
VStack {
Text("Bitcoin")
.font(.largeTitle)
Text("")
Text(formatAsCurrency(webSocketService.btcPrice))
.scaleEffect(1.5)
}
.padding()
// ETH-USD
VStack {
Text("Ethereum")
.font(.largeTitle)
Text("")
Text(formatAsCurrency(webSocketService.ethPrice))
.scaleEffect(1.5)
}
.padding()
}
.onAppear {
webSocketService.connect()
}
.onDisappear {
webSocketService.disconnect()
}
}
private func formatAsCurrency(_ priceString: String) -> String {
guard let priceValue = Double(priceString) else { return priceString }
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.currencySymbol = "$"
formatter.groupingSeparator = ","
formatter.maximumFractionDigits = 2
formatter.minimumFractionDigits = 2
return formatter.string(from: NSNumber(value: priceValue)) ?? priceString
}
}
================================================
FILE: WebSockets/WebSockets/Info.plist
================================================
UIApplicationSceneManifest
UIApplicationPreferredDefaultSceneSessionRole
UIWindowSceneSessionRoleApplication
UIApplicationSupportsMultipleScenes
UISceneConfigurations
================================================
FILE: WebSockets/WebSockets/Preview Content/Preview Assets.xcassets/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: WebSockets/WebSockets/WebSocketService.swift
================================================
//
// WebSocketService.swift
// WebSockets
//
// Created by IVAN CAMPOS on 1/28/24.
//
import Foundation
import SwiftUI
class WebSocketService: ObservableObject {
private var webSocketTask: URLSessionWebSocketTask?
private let url = URL(string: "wss://ws-feed.exchange.coinbase.com")!
@Published var btcPrice: String = "Loading..."
@Published var ethPrice: String = "Loading..."
init() {
}
deinit {
disconnect()
}
func connect() {
let session = URLSession(configuration: .default)
webSocketTask = session.webSocketTask(with: url)
webSocketTask?.resume()
sendSubscriptionMessage()
receiveMessage()
// Setup a ping/pong mechanism to keep the connection alive or detect disconnections.
setupHeartbeat()
}
private func setupHeartbeat() {
// Send a ping at regular intervals
Timer.scheduledTimer(withTimeInterval: 30, repeats: true) { [weak self] _ in
self?.webSocketTask?.sendPing { error in
if let error = error {
print("Ping failed: \(error.localizedDescription)")
self?.reconnect()
}
}
}
}
private func reconnect() {
disconnect()
connect()
}
func disconnect() {
webSocketTask?.cancel(with: .goingAway, reason: nil)
webSocketTask = nil
}
private func sendSubscriptionMessage() {
let subscriptionMessage: [String: Any] = [
"type": "subscribe",
"product_ids": ["BTC-USD", "ETH-USD"],
"channels": [["name": "ticker", "product_ids": ["BTC-USD", "ETH-USD"]]]
]
guard let jsonData = try? JSONSerialization.data(withJSONObject: subscriptionMessage, options: []) else {
print("Error: Unable to serialize subscription message to JSON")
return
}
webSocketTask?.send(.data(jsonData)) { error in
if let error = error {
print("Error in sending message: \(error)")
}
}
}
private func receiveMessage() {
webSocketTask?.receive { [weak self] result in
switch result {
case .failure(let error):
print("Error in receiving message: \(error)")
case .success(let message):
switch message {
case .string(let text):
self?.handleMessage(text)
case .data(let data):
print("Received data: \(data)")
if let text = String(data: data, encoding: .utf8) {
self?.handleMessage(text)
}
default:
break
}
self?.receiveMessage() // Keep listening
}
}
}
private func handleMessage(_ text: String) {
if let data = text.data(using: .utf8) {
do {
if let jsonObject = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any],
let type = jsonObject["type"] as? String, type == "ticker",
let productId = jsonObject["product_id"] as? String,
let price = jsonObject["price"] as? String {
DispatchQueue.main.async {
if productId == "BTC-USD" {
self.btcPrice = price
} else if productId == "ETH-USD" {
self.ethPrice = price
}
}
}
} catch {
DispatchQueue.main.async {
print("Error parsing JSON: \(error)")
}
}
}
}
}
================================================
FILE: WebSockets/WebSockets/WebSocketsApp.swift
================================================
//
// WebSocketsApp.swift
// WebSockets
//
// Created by IVAN CAMPOS on 1/28/24.
//
import SwiftUI
@main
struct WebSocketsApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
.defaultSize(width: 420, height: 420)
}
}
================================================
FILE: WebSockets/WebSockets.xcodeproj/project.pbxproj
================================================
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 56;
objects = {
/* Begin PBXBuildFile section */
3B3A06522B664C91008FF558 /* RealityKitContent in Frameworks */ = {isa = PBXBuildFile; productRef = 3B3A06512B664C91008FF558 /* RealityKitContent */; };
3B3A06542B664C91008FF558 /* WebSocketsApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B3A06532B664C91008FF558 /* WebSocketsApp.swift */; };
3B3A06562B664C91008FF558 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B3A06552B664C91008FF558 /* ContentView.swift */; };
3B3A06582B664C92008FF558 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3B3A06572B664C92008FF558 /* Assets.xcassets */; };
3B3A065B2B664C92008FF558 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3B3A065A2B664C92008FF558 /* Preview Assets.xcassets */; };
3B3A06632B664CB6008FF558 /* WebSocketService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3B3A06622B664CB6008FF558 /* WebSocketService.swift */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
3B3A064C2B664C91008FF558 /* WebSockets.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = WebSockets.app; sourceTree = BUILT_PRODUCTS_DIR; };
3B3A06502B664C91008FF558 /* RealityKitContent */ = {isa = PBXFileReference; lastKnownFileType = wrapper; path = RealityKitContent; sourceTree = ""; };
3B3A06532B664C91008FF558 /* WebSocketsApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebSocketsApp.swift; sourceTree = ""; };
3B3A06552B664C91008FF558 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; };
3B3A06572B664C92008FF558 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
3B3A065A2B664C92008FF558 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; };
3B3A065C2B664C92008FF558 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
3B3A06622B664CB6008FF558 /* WebSocketService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebSocketService.swift; sourceTree = ""; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
3B3A06492B664C91008FF558 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
3B3A06522B664C91008FF558 /* RealityKitContent in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
3B3A06432B664C91008FF558 = {
isa = PBXGroup;
children = (
3B3A064E2B664C91008FF558 /* WebSockets */,
3B3A064F2B664C91008FF558 /* Packages */,
3B3A064D2B664C91008FF558 /* Products */,
);
sourceTree = "";
};
3B3A064D2B664C91008FF558 /* Products */ = {
isa = PBXGroup;
children = (
3B3A064C2B664C91008FF558 /* WebSockets.app */,
);
name = Products;
sourceTree = "";
};
3B3A064E2B664C91008FF558 /* WebSockets */ = {
isa = PBXGroup;
children = (
3B3A06532B664C91008FF558 /* WebSocketsApp.swift */,
3B3A06552B664C91008FF558 /* ContentView.swift */,
3B3A06622B664CB6008FF558 /* WebSocketService.swift */,
3B3A06572B664C92008FF558 /* Assets.xcassets */,
3B3A065C2B664C92008FF558 /* Info.plist */,
3B3A06592B664C92008FF558 /* Preview Content */,
);
path = WebSockets;
sourceTree = "";
};
3B3A064F2B664C91008FF558 /* Packages */ = {
isa = PBXGroup;
children = (
3B3A06502B664C91008FF558 /* RealityKitContent */,
);
path = Packages;
sourceTree = "";
};
3B3A06592B664C92008FF558 /* Preview Content */ = {
isa = PBXGroup;
children = (
3B3A065A2B664C92008FF558 /* Preview Assets.xcassets */,
);
path = "Preview Content";
sourceTree = "";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
3B3A064B2B664C91008FF558 /* WebSockets */ = {
isa = PBXNativeTarget;
buildConfigurationList = 3B3A065F2B664C92008FF558 /* Build configuration list for PBXNativeTarget "WebSockets" */;
buildPhases = (
3B3A06482B664C91008FF558 /* Sources */,
3B3A06492B664C91008FF558 /* Frameworks */,
3B3A064A2B664C91008FF558 /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = WebSockets;
packageProductDependencies = (
3B3A06512B664C91008FF558 /* RealityKitContent */,
);
productName = WebSockets;
productReference = 3B3A064C2B664C91008FF558 /* WebSockets.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
3B3A06442B664C91008FF558 /* Project object */ = {
isa = PBXProject;
attributes = {
BuildIndependentTargetsInParallel = 1;
LastSwiftUpdateCheck = 1520;
LastUpgradeCheck = 1520;
TargetAttributes = {
3B3A064B2B664C91008FF558 = {
CreatedOnToolsVersion = 15.2;
};
};
};
buildConfigurationList = 3B3A06472B664C91008FF558 /* Build configuration list for PBXProject "WebSockets" */;
compatibilityVersion = "Xcode 14.0";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = 3B3A06432B664C91008FF558;
productRefGroup = 3B3A064D2B664C91008FF558 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
3B3A064B2B664C91008FF558 /* WebSockets */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
3B3A064A2B664C91008FF558 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
3B3A065B2B664C92008FF558 /* Preview Assets.xcassets in Resources */,
3B3A06582B664C92008FF558 /* Assets.xcassets in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
3B3A06482B664C91008FF558 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
3B3A06562B664C91008FF558 /* ContentView.swift in Sources */,
3B3A06632B664CB6008FF558 /* WebSocketService.swift in Sources */,
3B3A06542B664C91008FF558 /* WebSocketsApp.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
3B3A065D2B664C92008FF558 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu17;
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;
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = xros;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
XROS_DEPLOYMENT_TARGET = 1.0;
};
name = Debug;
};
3B3A065E2B664C92008FF558 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu17;
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;
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = xros;
SWIFT_COMPILATION_MODE = wholemodule;
VALIDATE_PRODUCT = YES;
XROS_DEPLOYMENT_TARGET = 1.0;
};
name = Release;
};
3B3A06602B664C92008FF558 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_ASSET_PATHS = "\"WebSockets/Preview Content\"";
DEVELOPMENT_TEAM = 2DJDH872JZ;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "$(TARGET_NAME)/Info.plist";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.ivancampos.WebSockets;
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "xros xrsimulator";
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2,7";
};
name = Debug;
};
3B3A06612B664C92008FF558 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_ASSET_PATHS = "\"WebSockets/Preview Content\"";
DEVELOPMENT_TEAM = 2DJDH872JZ;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "$(TARGET_NAME)/Info.plist";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = com.ivancampos.WebSockets;
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "xros xrsimulator";
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2,7";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
3B3A06472B664C91008FF558 /* Build configuration list for PBXProject "WebSockets" */ = {
isa = XCConfigurationList;
buildConfigurations = (
3B3A065D2B664C92008FF558 /* Debug */,
3B3A065E2B664C92008FF558 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
3B3A065F2B664C92008FF558 /* Build configuration list for PBXNativeTarget "WebSockets" */ = {
isa = XCConfigurationList;
buildConfigurations = (
3B3A06602B664C92008FF558 /* Debug */,
3B3A06612B664C92008FF558 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
/* Begin XCSwiftPackageProductDependency section */
3B3A06512B664C91008FF558 /* RealityKitContent */ = {
isa = XCSwiftPackageProductDependency;
productName = RealityKitContent;
};
/* End XCSwiftPackageProductDependency section */
};
rootObject = 3B3A06442B664C91008FF558 /* Project object */;
}
================================================
FILE: WebSockets/WebSockets.xcodeproj/project.xcworkspace/contents.xcworkspacedata
================================================
================================================
FILE: WebSockets/WebSockets.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
================================================
IDEDidComputeMac32BitWarning
================================================
FILE: bsky 3D/Packages/RealityKitContent/Package.realitycomposerpro/ProjectData/main.json
================================================
{
"pathsToIds" : {
"RealityKitContent\/Sources\/RealityKitContent\/RealityKitContent.rkassets\/Immersive.usda" : "C6A7F375-BFE9-46E0-9EA6-1A6B150F43FD"
}
}
================================================
FILE: bsky 3D/Packages/RealityKitContent/Package.realitycomposerpro/WorkspaceData/SceneMetadataList.json
================================================
{
"C6A7F375-BFE9-46E0-9EA6-1A6B150F43FD" : {
"objectMetadataList" : [
[
"C6A7F375-BFE9-46E0-9EA6-1A6B150F43FD",
"Root"
],
{
"disallowsFraming" : false,
"isExpanded" : true,
"isLocked" : false
},
[
"C6A7F375-BFE9-46E0-9EA6-1A6B150F43FD",
"Root",
"Video_Dock"
],
{
"disallowsFraming" : false,
"isExpanded" : false,
"isLocked" : false
},
[
"C6A7F375-BFE9-46E0-9EA6-1A6B150F43FD",
"Root",
"SkyDome"
],
{
"disallowsFraming" : true,
"isExpanded" : false,
"isLocked" : false
}
]
}
}
================================================
FILE: bsky 3D/Packages/RealityKitContent/Package.realitycomposerpro/WorkspaceData/Settings.rcprojectdata
================================================
{
"cameraPresets" : {
},
"secondaryToolbarData" : {
"isGridVisible" : true
},
"unitDefaults" : {
"°" : "°",
"kg" : "g",
"kg⋅m²" : "kg⋅m²",
"m" : "cm",
"m\/s" : "m\/s",
"m\/s²" : "m\/s²",
"s" : "s"
}
}
================================================
FILE: bsky 3D/Packages/RealityKitContent/Package.swift
================================================
// swift-tools-version:6.0
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "RealityKitContent",
platforms: [
.visionOS(.v2),
.macOS(.v15),
.iOS(.v18)
],
products: [
// Products define the executables and libraries a package produces, and make them visible to other packages.
.library(
name: "RealityKitContent",
targets: ["RealityKitContent"]),
],
dependencies: [
// Dependencies declare other packages that this package depends on.
// .package(url: /* package url */, from: "1.0.0"),
],
targets: [
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
// Targets can depend on other targets in this package, and on products in packages this package depends on.
.target(
name: "RealityKitContent",
dependencies: []),
]
)
================================================
FILE: bsky 3D/Packages/RealityKitContent/README.md
================================================
# RealityKitContent
A description of this package.
================================================
FILE: bsky 3D/Packages/RealityKitContent/Sources/RealityKitContent/RealityKitContent.rkassets/Ground/Ground.usda
================================================
#usda 1.0
(
defaultPrim = "Ground"
metersPerUnit = 1
upAxis = "Y"
)
def Xform "Ground"
{
float3 xformOp:translate = (0, 0.1, 0)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
def Mesh "Mesh" (
prepend apiSchemas = ["MaterialBindingAPI"]
)
{
float3[] extent = [(-2.5, 0, -2), (2.5, 0, 3)]
int[] faceVertexCounts = [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4]
int[] faceVertexIndices = [0, 1, 26, 25, 1, 2, 27, 26, 2, 3, 28, 27, 3, 4, 29, 28, 4, 5, 30, 29, 5, 6, 31, 30, 6, 7, 32, 31, 7, 8, 33, 32, 8, 9, 34, 33, 9, 10, 35, 34, 10, 11, 36, 35, 11, 12, 37, 36, 12, 13, 38, 37, 13, 14, 39, 38, 14, 15, 40, 39, 15, 16, 41, 40, 16, 17, 42, 41, 17, 18, 43, 42, 18, 19, 44, 43, 19, 20, 45, 44, 20, 21, 46, 45, 21, 22, 47, 46, 22, 23, 48, 47, 23, 24, 49, 48, 25, 26, 51, 50, 26, 27, 52, 51, 27, 28, 53, 52, 28, 29, 54, 53, 29, 30, 55, 54, 30, 31, 56, 55, 31, 32, 57, 56, 32, 33, 58, 57, 33, 34, 59, 58, 34, 35, 60, 59, 35, 36, 61, 60, 36, 37, 62, 61, 37, 38, 63, 62, 38, 39, 64, 63, 39, 40, 65, 64, 40, 41, 66, 65, 41, 42, 67, 66, 42, 43, 68, 67, 43, 44, 69, 68, 44, 45, 70, 69, 45, 46, 71, 70, 46, 47, 72, 71, 47, 48, 73, 72, 48, 49, 74, 73, 50, 51, 76, 75, 51, 52, 77, 76, 52, 53, 78, 77, 53, 54, 79, 78, 54, 55, 80, 79, 55, 56, 81, 80, 56, 57, 82, 81, 57, 58, 83, 82, 58, 59, 84, 83, 59, 60, 85, 84, 60, 61, 86, 85, 61, 62, 87, 86, 62, 63, 88, 87, 63, 64, 89, 88, 64, 65, 90, 89, 65, 66, 91, 90, 66, 67, 92, 91, 67, 68, 93, 92, 68, 69, 94, 93, 69, 70, 95, 94, 70, 71, 96, 95, 71, 72, 97, 96, 72, 73, 98, 97, 73, 74, 99, 98, 75, 76, 101, 100, 76, 77, 102, 101, 77, 78, 103, 102, 78, 79, 104, 103, 79, 80, 105, 104, 80, 81, 106, 105, 81, 82, 107, 106, 82, 83, 108, 107, 83, 84, 109, 108, 84, 85, 110, 109, 85, 86, 111, 110, 86, 87, 112, 111, 87, 88, 113, 112, 88, 89, 114, 113, 89, 90, 115, 114, 90, 91, 116, 115, 91, 92, 117, 116, 92, 93, 118, 117, 93, 94, 119, 118, 94, 95, 120, 119, 95, 96, 121, 120, 96, 97, 122, 121, 97, 98, 123, 122, 98, 99, 124, 123, 100, 101, 126, 125, 101, 102, 127, 126, 102, 103, 128, 127, 103, 104, 129, 128, 104, 105, 130, 129, 105, 106, 131, 130, 106, 107, 132, 131, 107, 108, 133, 132, 108, 109, 134, 133, 109, 110, 135, 134, 110, 111, 136, 135, 111, 112, 137, 136, 112, 113, 138, 137, 113, 114, 139, 138, 114, 115, 140, 139, 115, 116, 141, 140, 116, 117, 142, 141, 117, 118, 143, 142, 118, 119, 144, 143, 119, 120, 145, 144, 120, 121, 146, 145, 121, 122, 147, 146, 122, 123, 148, 147, 123, 124, 149, 148, 125, 126, 151, 150, 126, 127, 152, 151, 127, 128, 153, 152, 128, 129, 154, 153, 129, 130, 155, 154, 130, 131, 156, 155, 131, 132, 157, 156, 132, 133, 158, 157, 133, 134, 159, 158, 134, 135, 160, 159, 135, 136, 161, 160, 136, 137, 162, 161, 137, 138, 163, 162, 138, 139, 164, 163, 139, 140, 165, 164, 140, 141, 166, 165, 141, 142, 167, 166, 142, 143, 168, 167, 143, 144, 169, 168, 144, 145, 170, 169, 145, 146, 171, 170, 146, 147, 172, 171, 147, 148, 173, 172, 148, 149, 174, 173, 150, 151, 176, 175, 151, 152, 177, 176, 152, 153, 178, 177, 153, 154, 179, 178, 154, 155, 180, 179, 155, 156, 181, 180, 156, 157, 182, 181, 157, 158, 183, 182, 158, 159, 184, 183, 159, 160, 185, 184, 160, 161, 186, 185, 161, 162, 187, 186, 162, 163, 188, 187, 163, 164, 189, 188, 164, 165, 190, 189, 165, 166, 191, 190, 166, 167, 192, 191, 167, 168, 193, 192, 168, 169, 194, 193, 169, 170, 195, 194, 170, 171, 196, 195, 171, 172, 197, 196, 172, 173, 198, 197, 173, 174, 199, 198, 175, 176, 201, 200, 176, 177, 202, 201, 177, 178, 203, 202, 178, 179, 204, 203, 179, 180, 205, 204, 180, 181, 206, 205, 181, 182, 207, 206, 182, 183, 208, 207, 183, 184, 209, 208, 184, 185, 210, 209, 185, 186, 211, 210, 186, 187, 212, 211, 187, 188, 213, 212, 188, 189, 214, 213, 189, 190, 215, 214, 190, 191, 216, 215, 191, 192, 217, 216, 192, 193, 218, 217, 193, 194, 219, 218, 194, 195, 220, 219, 195, 196, 221, 220, 196, 197, 222, 221, 197, 198, 223, 222, 198, 199, 224, 223, 200, 201, 226, 225, 201, 202, 227, 226, 202, 203, 228, 227, 203, 204, 229, 228, 204, 205, 230, 229, 205, 206, 231, 230, 206, 207, 232, 231, 207, 208, 233, 232, 208, 209, 234, 233, 209, 210, 235, 234, 210, 211, 236, 235, 211, 212, 237, 236, 212, 213, 238, 237, 213, 214, 239, 238, 214, 215, 240, 239, 215, 216, 241, 240, 216, 217, 242, 241, 217, 218, 243, 242, 218, 219, 244, 243, 219, 220, 245, 244, 220, 221, 246, 245, 221, 222, 247, 246, 222, 223, 248, 247, 223, 224, 249, 248, 225, 226, 251, 250, 226, 227, 252, 251, 227, 228, 253, 252, 228, 229, 254, 253, 229, 230, 255, 254, 230, 231, 256, 255, 231, 232, 257, 256, 232, 233, 258, 257, 233, 234, 259, 258, 234, 235, 260, 259, 235, 236, 261, 260, 236, 237, 262, 261, 237, 238, 263, 262, 238, 239, 264, 263, 239, 240, 265, 264, 240, 241, 266, 265, 241, 242, 267, 266, 242, 243, 268, 267, 243, 244, 269, 268, 244, 245, 270, 269, 245, 246, 271, 270, 246, 247, 272, 271, 247, 248, 273, 272, 248, 249, 274, 273, 250, 251, 276, 275, 251, 252, 277, 276, 252, 253, 278, 277, 253, 254, 279, 278, 254, 255, 280, 279, 255, 256, 281, 280, 256, 257, 282, 281, 257, 258, 283, 282, 258, 259, 284, 283, 259, 260, 285, 284, 260, 261, 286, 285, 261, 262, 287, 286, 262, 263, 288, 287, 263, 264, 289, 288, 264, 265, 290, 289, 265, 266, 291, 290, 266, 267, 292, 291, 267, 268, 293, 292, 268, 269, 294, 293, 269, 270, 295, 294, 270, 271, 296, 295, 271, 272, 297, 296, 272, 273, 298, 297, 273, 274, 299, 298, 275, 276, 301, 300, 276, 277, 302, 301, 277, 278, 303, 302, 278, 279, 304, 303, 279, 280, 305, 304, 280, 281, 306, 305, 281, 282, 307, 306, 282, 283, 308, 307, 283, 284, 309, 308, 284, 285, 310, 309, 285, 286, 311, 310, 286, 287, 312, 311, 287, 288, 313, 312, 288, 289, 314, 313, 289, 290, 315, 314, 290, 291, 316, 315, 291, 292, 317, 316, 292, 293, 318, 317, 293, 294, 319, 318, 294, 295, 320, 319, 295, 296, 321, 320, 296, 297, 322, 321, 297, 298, 323, 322, 298, 299, 324, 323, 300, 301, 326, 325, 301, 302, 327, 326, 302, 303, 328, 327, 303, 304, 329, 328, 304, 305, 330, 329, 305, 306, 331, 330, 306, 307, 332, 331, 307, 308, 333, 332, 308, 309, 334, 333, 309, 310, 335, 334, 310, 311, 336, 335, 311, 312, 337, 336, 312, 313, 338, 337, 313, 314, 339, 338, 314, 315, 340, 339, 315, 316, 341, 340, 316, 317, 342, 341, 317, 318, 343, 342, 318, 319, 344, 343, 319, 320, 345, 344, 320, 321, 346, 345, 321, 322, 347, 346, 322, 323, 348, 347, 323, 324, 349, 348, 325, 326, 351, 350, 326, 327, 352, 351, 327, 328, 353, 352, 328, 329, 354, 353, 329, 330, 355, 354, 330, 331, 356, 355, 331, 332, 357, 356, 332, 333, 358, 357, 333, 334, 359, 358, 334, 335, 360, 359, 335, 336, 361, 360, 336, 337, 362, 361, 337, 338, 363, 362, 338, 339, 364, 363, 339, 340, 365, 364, 340, 341, 366, 365, 341, 342, 367, 366, 342, 343, 368, 367, 343, 344, 369, 368, 344, 345, 370, 369, 345, 346, 371, 370, 346, 347, 372, 371, 347, 348, 373, 372, 348, 349, 374, 373, 350, 351, 376, 375, 351, 352, 377, 376, 352, 353, 378, 377, 353, 354, 379, 378, 354, 355, 380, 379, 355, 356, 381, 380, 356, 357, 382, 381, 357, 358, 383, 382, 358, 359, 384, 383, 359, 360, 385, 384, 360, 361, 386, 385, 361, 362, 387, 386, 362, 363, 388, 387, 363, 364, 389, 388, 364, 365, 390, 389, 365, 366, 391, 390, 366, 367, 392, 391, 367, 368, 393, 392, 368, 369, 394, 393, 369, 370, 395, 394, 370, 371, 396, 395, 371, 372, 397, 396, 372, 373, 398, 397, 373, 374, 399, 398, 375, 376, 401, 400, 376, 377, 402, 401, 377, 378, 403, 402, 378, 379, 404, 403, 379, 380, 405, 404, 380, 381, 406, 405, 381, 382, 407, 406, 382, 383, 408, 407, 383, 384, 409, 408, 384, 385, 410, 409, 385, 386, 411, 410, 386, 387, 412, 411, 387, 388, 413, 412, 388, 389, 414, 413, 389, 390, 415, 414, 390, 391, 416, 415, 391, 392, 417, 416, 392, 393, 418, 417, 393, 394, 419, 418, 394, 395, 420, 419, 395, 396, 421, 420, 396, 397, 422, 421, 397, 398, 423, 422, 398, 399, 424, 423, 400, 401, 426, 425, 401, 402, 427, 426, 402, 403, 428, 427, 403, 404, 429, 428, 404, 405, 430, 429, 405, 406, 431, 430, 406, 407, 432, 431, 407, 408, 433, 432, 408, 409, 434, 433, 409, 410, 435, 434, 410, 411, 436, 435, 411, 412, 437, 436, 412, 413, 438, 437, 413, 414, 439, 438, 414, 415, 440, 439, 415, 416, 441, 440, 416, 417, 442, 441, 417, 418, 443, 442, 418, 419, 444, 443, 419, 420, 445, 444, 420, 421, 446, 445, 421, 422, 447, 446, 422, 423, 448, 447, 423, 424, 449, 448, 425, 426, 451, 450, 426, 427, 452, 451, 427, 428, 453, 452, 428, 429, 454, 453, 429, 430, 455, 454, 430, 431, 456, 455, 431, 432, 457, 456, 432, 433, 458, 457, 433, 434, 459, 458, 434, 435, 460, 459, 435, 436, 461, 460, 436, 437, 462, 461, 437, 438, 463, 462, 438, 439, 464, 463, 439, 440, 465, 464, 440, 441, 466, 465, 441, 442, 467, 466, 442, 443, 468, 467, 443, 444, 469, 468, 444, 445, 470, 469, 445, 446, 471, 470, 446, 447, 472, 471, 447, 448, 473, 472, 448, 449, 474, 473, 450, 451, 476, 475, 451, 452, 477, 476, 452, 453, 478, 477, 453, 454, 479, 478, 454, 455, 480, 479, 455, 456, 481, 480, 456, 457, 482, 481, 457, 458, 483, 482, 458, 459, 484, 483, 459, 460, 485, 484, 460, 461, 486, 485, 461, 462, 487, 486, 462, 463, 488, 487, 463, 464, 489, 488, 464, 465, 490, 489, 465, 466, 491, 490, 466, 467, 492, 491, 467, 468, 493, 492, 468, 469, 494, 493, 469, 470, 495, 494, 470, 471, 496, 495, 471, 472, 497, 496, 472, 473, 498, 497, 473, 474, 499, 498, 475, 476, 501, 500, 476, 477, 502, 501, 477, 478, 503, 502, 478, 479, 504, 503, 479, 480, 505, 504, 480, 481, 506, 505, 481, 482, 507, 506, 482, 483, 508, 507, 483, 484, 509, 508, 484, 485, 510, 509, 485, 486, 511, 510, 486, 487, 512, 511, 487, 488, 513, 512, 488, 489, 514, 513, 489, 490, 515, 514, 490, 491, 516, 515, 491, 492, 517, 516, 492, 493, 518, 517, 493, 494, 519, 518, 494, 495, 520, 519, 495, 496, 521, 520, 496, 497, 522, 521, 497, 498, 523, 522, 498, 499, 524, 523, 500, 501, 526, 525, 501, 502, 527, 526, 502, 503, 528, 527, 503, 504, 529, 528, 504, 505, 530, 529, 505, 506, 531, 530, 506, 507, 532, 531, 507, 508, 533, 532, 508, 509, 534, 533, 509, 510, 535, 534, 510, 511, 536, 535, 511, 512, 537, 536, 512, 513, 538, 537, 513, 514, 539, 538, 514, 515, 540, 539, 515, 516, 541, 540, 516, 517, 542, 541, 517, 518, 543, 542, 518, 519, 544, 543, 519, 520, 545, 544, 520, 521, 546, 545, 521, 522, 547, 546, 522, 523, 548, 547, 523, 524, 549, 548, 525, 526, 551, 550, 526, 527, 552, 551, 527, 528, 553, 552, 528, 529, 554, 553, 529, 530, 555, 554, 530, 531, 556, 555, 531, 532, 557, 556, 532, 533, 558, 557, 533, 534, 559, 558, 534, 535, 560, 559, 535, 536, 561, 560, 536, 537, 562, 561, 537, 538, 563, 562, 538, 539, 564, 563, 539, 540, 565, 564, 540, 541, 566, 565, 541, 542, 567, 566, 542, 543, 568, 567, 543, 544, 569, 568, 544, 545, 570, 569, 545, 546, 571, 570, 546, 547, 572, 571, 547, 548, 573, 572, 548, 549, 574, 573, 550, 551, 576, 575, 551, 552, 577, 576, 552, 553, 578, 577, 553, 554, 579, 578, 554, 555, 580, 579, 555, 556, 581, 580, 556, 557, 582, 581, 557, 558, 583, 582, 558, 559, 584, 583, 559, 560, 585, 584, 560, 561, 586, 585, 561, 562, 587, 586, 562, 563, 588, 587, 563, 564, 589, 588, 564, 565, 590, 589, 565, 566, 591, 590, 566, 567, 592, 591, 567, 568, 593, 592, 568, 569, 594, 593, 569, 570, 595, 594, 570, 571, 596, 595, 571, 572, 597, 596, 572, 573, 598, 597, 573, 574, 599, 598, 575, 576, 601, 600, 576, 577, 602, 601, 577, 578, 603, 602, 578, 579, 604, 603, 579, 580, 605, 604, 580, 581, 606, 605, 581, 582, 607, 606, 582, 583, 608, 607, 583, 584, 609, 608, 584, 585, 610, 609, 585, 586, 611, 610, 586, 587, 612, 611, 587, 588, 613, 612, 588, 589, 614, 613, 589, 590, 615, 614, 590, 591, 616, 615, 591, 592, 617, 616, 592, 593, 618, 617, 593, 594, 619, 618, 594, 595, 620, 619, 595, 596, 621, 620, 596, 597, 622, 621, 597, 598, 623, 622, 598, 599, 624, 623]
rel material:binding = (
bindMaterialAs = "weakerThanDescendants"
)
uniform token orientation = "leftHanded"
point3f[] points = [(-2.5, 0, -2), (-2.2916667, 0, -2), (-2.0833333, 0, -2), (-1.875, 0, -2), (-1.6666667, 0, -2), (-1.4583334, 0, -2), (-1.25, 0, -2), (-1.0416667, 0, -2), (-0.8333334, 0, -2), (-0.625, 0, -2), (-0.41666675, 0, -2), (-0.20833349, 0, -2), (0, 0, -2), (0.20833325, 0, -2), (0.4166665, 0, -2), (0.625, 0, -2), (0.83333325, 0, -2), (1.0416665, 0, -2), (1.25, 0, -2), (1.4583333, 0, -2), (1.6666665, 0, -2), (1.875, 0, -2), (2.083333, 0, -2), (2.2916665, 0, -2), (2.5, 0, -2), (-2.5, 0, -1.7916666), (-2.2916667, 0, -1.7916666), (-2.0833333, 0, -1.7916666), (-1.875, 0, -1.7916666), (-1.6666667, 0, -1.7916666), (-1.4583334, 0, -1.7916666), (-1.25, 0, -1.7916666), (-1.0416667, 0, -1.7916666), (-0.8333334, 0, -1.7916666), (-0.625, 0, -1.7916666), (-0.41666675, 0, -1.7916666), (-0.20833349, 0, -1.7916666), (0, 0, -1.7916666), (0.20833325, 0, -1.7916666), (0.4166665, 0, -1.7916666), (0.625, 0, -1.7916666), (0.83333325, 0, -1.7916666), (1.0416665, 0, -1.7916666), (1.25, 0, -1.7916666), (1.4583333, 0, -1.7916666), (1.6666665, 0, -1.7916666), (1.875, 0, -1.7916666), (2.083333, 0, -1.7916666), (2.2916665, 0, -1.7916666), (2.5, 0, -1.7916666), (-2.5, 0, -1.5833334), (-2.2916667, 0, -1.5833334), (-2.0833333, 0, -1.5833334), (-1.875, 0, -1.5833334), (-1.6666667, 0, -1.5833334), (-1.4583334, 0, -1.5833334), (-1.25, 0, -1.5833334), (-1.0416667, 0, -1.5833334), (-0.8333334, 0, -1.5833334), (-0.625, 0, -1.5833334), (-0.41666675, 0, -1.5833334), (-0.20833349, 0, -1.5833334), (0, 0, -1.5833334), (0.20833325, 0, -1.5833334), (0.4166665, 0, -1.5833334), (0.625, 0, -1.5833334), (0.83333325, 0, -1.5833334), (1.0416665, 0, -1.5833334), (1.25, 0, -1.5833334), (1.4583333, 0, -1.5833334), (1.6666665, 0, -1.5833334), (1.875, 0, -1.5833334), (2.083333, 0, -1.5833334), (2.2916665, 0, -1.5833334), (2.5, 0, -1.5833334), (-2.5, 0, -1.375), (-2.2916667, 0, -1.375), (-2.0833333, 0, -1.375), (-1.875, 0, -1.375), (-1.6666667, 0, -1.375), (-1.4583334, 0, -1.375), (-1.25, 0, -1.375), (-1.0416667, 0, -1.375), (-0.8333334, 0, -1.375), (-0.625, 0, -1.375), (-0.41666675, 0, -1.375), (-0.20833349, 0, -1.375), (0, 0, -1.375), (0.20833325, 0, -1.375), (0.4166665, 0, -1.375), (0.625, 0, -1.375), (0.83333325, 0, -1.375), (1.0416665, 0, -1.375), (1.25, 0, -1.375), (1.4583333, 0, -1.375), (1.6666665, 0, -1.375), (1.875, 0, -1.375), (2.083333, 0, -1.375), (2.2916665, 0, -1.375), (2.5, 0, -1.375), (-2.5, 0, -1.1666667), (-2.2916667, 0, -1.1666667), (-2.0833333, 0, -1.1666667), (-1.875, 0, -1.1666667), (-1.6666667, 0, -1.1666667), (-1.4583334, 0, -1.1666667), (-1.25, 0, -1.1666667), (-1.0416667, 0, -1.1666667), (-0.8333334, 0, -1.1666667), (-0.625, 0, -1.1666667), (-0.41666675, 0, -1.1666667), (-0.20833349, 0, -1.1666667), (0, 0, -1.1666667), (0.20833325, 0, -1.1666667), (0.4166665, 0, -1.1666667), (0.625, 0, -1.1666667), (0.83333325, 0, -1.1666667), (1.0416665, 0, -1.1666667), (1.25, 0, -1.1666667), (1.4583333, 0, -1.1666667), (1.6666665, 0, -1.1666667), (1.875, 0, -1.1666667), (2.083333, 0, -1.1666667), (2.2916665, 0, -1.1666667), (2.5, 0, -1.1666667), (-2.5, 0, -0.9583334), (-2.2916667, 0, -0.9583334), (-2.0833333, 0, -0.9583334), (-1.875, 0, -0.9583334), (-1.6666667, 0, -0.9583334), (-1.4583334, 0, -0.9583334), (-1.25, 0, -0.9583334), (-1.0416667, 0, -0.9583334), (-0.8333334, 0, -0.9583334), (-0.625, 0, -0.9583334), (-0.41666675, 0, -0.9583334), (-0.20833349, 0, -0.9583334), (0, 0, -0.9583334), (0.20833325, 0, -0.9583334), (0.4166665, 0, -0.9583334), (0.625, 0, -0.9583334), (0.83333325, 0, -0.9583334), (1.0416665, 0, -0.9583334), (1.25, 0, -0.9583334), (1.4583333, 0, -0.9583334), (1.6666665, 0, -0.9583334), (1.875, 0, -0.9583334), (2.083333, 0, -0.9583334), (2.2916665, 0, -0.9583334), (2.5, 0, -0.9583334), (-2.5, 0, -0.75), (-2.2916667, 0, -0.75), (-2.0833333, 0, -0.75), (-1.875, 0, -0.75), (-1.6666667, 0, -0.75), (-1.4583334, 0, -0.75), (-1.25, 0, -0.75), (-1.0416667, 0, -0.75), (-0.8333334, 0, -0.75), (-0.625, 0, -0.75), (-0.41666675, 0, -0.75), (-0.20833349, 0, -0.75), (0, 0, -0.75), (0.20833325, 0, -0.75), (0.4166665, 0, -0.75), (0.625, 0, -0.75), (0.83333325, 0, -0.75), (1.0416665, 0, -0.75), (1.25, 0, -0.75), (1.4583333, 0, -0.75), (1.6666665, 0, -0.75), (1.875, 0, -0.75), (2.083333, 0, -0.75), (2.2916665, 0, -0.75), (2.5, 0, -0.75), (-2.5, 0, -0.54166675), (-2.2916667, 0, -0.54166675), (-2.0833333, 0, -0.54166675), (-1.875, 0, -0.54166675), (-1.6666667, 0, -0.54166675), (-1.4583334, 0, -0.54166675), (-1.25, 0, -0.54166675), (-1.0416667, 0, -0.54166675), (-0.8333334, 0, -0.54166675), (-0.625, 0, -0.54166675), (-0.41666675, 0, -0.54166675), (-0.20833349, 0, -0.54166675), (0, 0, -0.54166675), (0.20833325, 0, -0.54166675), (0.4166665, 0, -0.54166675), (0.625, 0, -0.54166675), (0.83333325, 0, -0.54166675), (1.0416665, 0, -0.54166675), (1.25, 0, -0.54166675), (1.4583333, 0, -0.54166675), (1.6666665, 0, -0.54166675), (1.875, 0, -0.54166675), (2.083333, 0, -0.54166675), (2.2916665, 0, -0.54166675), (2.5, 0, -0.54166675), (-2.5, 0, -0.33333337), (-2.2916667, 0, -0.33333337), (-2.0833333, 0, -0.33333337), (-1.875, 0, -0.33333337), (-1.6666667, 0, -0.33333337), (-1.4583334, 0, -0.33333337), (-1.25, 0, -0.33333337), (-1.0416667, 0, -0.33333337), (-0.8333334, 0, -0.33333337), (-0.625, 0, -0.33333337), (-0.41666675, 0, -0.33333337), (-0.20833349, 0, -0.33333337), (0, 0, -0.33333337), (0.20833325, 0, -0.33333337), (0.4166665, 0, -0.33333337), (0.625, 0, -0.33333337), (0.83333325, 0, -0.33333337), (1.0416665, 0, -0.33333337), (1.25, 0, -0.33333337), (1.4583333, 0, -0.33333337), (1.6666665, 0, -0.33333337), (1.875, 0, -0.33333337), (2.083333, 0, -0.33333337), (2.2916665, 0, -0.33333337), (2.5, 0, -0.33333337), (-2.5, 0, -0.125), (-2.2916667, 0, -0.125), (-2.0833333, 0, -0.125), (-1.875, 0, -0.125), (-1.6666667, 0, -0.125), (-1.4583334, 0, -0.125), (-1.25, 0, -0.125), (-1.0416667, 0, -0.125), (-0.8333334, 0, -0.125), (-0.625, 0, -0.125), (-0.41666675, 0, -0.125), (-0.20833349, 0, -0.125), (0, 0, -0.125), (0.20833325, 0, -0.125), (0.4166665, 0, -0.125), (0.625, 0, -0.125), (0.83333325, 0, -0.125), (1.0416665, 0, -0.125), (1.25, 0, -0.125), (1.4583333, 0, -0.125), (1.6666665, 0, -0.125), (1.875, 0, -0.125), (2.083333, 0, -0.125), (2.2916665, 0, -0.125), (2.5, 0, -0.125), (-2.5, 0, 0.083333254), (-2.2916667, 0, 0.083333254), (-2.0833333, 0, 0.083333254), (-1.875, 0, 0.083333254), (-1.6666667, 0, 0.083333254), (-1.4583334, 0, 0.083333254), (-1.25, 0, 0.083333254), (-1.0416667, 0, 0.083333254), (-0.8333334, 0, 0.083333254), (-0.625, 0, 0.083333254), (-0.41666675, 0, 0.083333254), (-0.20833349, 0, 0.083333254), (0, 0, 0.083333254), (0.20833325, 0, 0.083333254), (0.4166665, 0, 0.083333254), (0.625, 0, 0.083333254), (0.83333325, 0, 0.083333254), (1.0416665, 0, 0.083333254), (1.25, 0, 0.083333254), (1.4583333, 0, 0.083333254), (1.6666665, 0, 0.083333254), (1.875, 0, 0.083333254), (2.083333, 0, 0.083333254), (2.2916665, 0, 0.083333254), (2.5, 0, 0.083333254), (-2.5, 0, 0.2916665), (-2.2916667, 0, 0.2916665), (-2.0833333, 0, 0.2916665), (-1.875, 0, 0.2916665), (-1.6666667, 0, 0.2916665), (-1.4583334, 0, 0.2916665), (-1.25, 0, 0.2916665), (-1.0416667, 0, 0.2916665), (-0.8333334, 0, 0.2916665), (-0.625, 0, 0.2916665), (-0.41666675, 0, 0.2916665), (-0.20833349, 0, 0.2916665), (0, 0, 0.2916665), (0.20833325, 0, 0.2916665), (0.4166665, 0, 0.2916665), (0.625, 0, 0.2916665), (0.83333325, 0, 0.2916665), (1.0416665, 0, 0.2916665), (1.25, 0, 0.2916665), (1.4583333, 0, 0.2916665), (1.6666665, 0, 0.2916665), (1.875, 0, 0.2916665), (2.083333, 0, 0.2916665), (2.2916665, 0, 0.2916665), (2.5, 0, 0.2916665), (-2.5, 0, 0.5), (-2.2916667, 0, 0.5), (-2.0833333, 0, 0.5), (-1.875, 0, 0.5), (-1.6666667, 0, 0.5), (-1.4583334, 0, 0.5), (-1.25, 0, 0.5), (-1.0416667, 0, 0.5), (-0.8333334, 0, 0.5), (-0.625, 0, 0.5), (-0.41666675, 0, 0.5), (-0.20833349, 0, 0.5), (0, 0, 0.5), (0.20833325, 0, 0.5), (0.4166665, 0, 0.5), (0.625, 0, 0.5), (0.83333325, 0, 0.5), (1.0416665, 0, 0.5), (1.25, 0, 0.5), (1.4583333, 0, 0.5), (1.6666665, 0, 0.5), (1.875, 0, 0.5), (2.083333, 0, 0.5), (2.2916665, 0, 0.5), (2.5, 0, 0.5), (-2.5, 0, 0.70833325), (-2.2916667, 0, 0.70833325), (-2.0833333, 0, 0.70833325), (-1.875, 0, 0.70833325), (-1.6666667, 0, 0.70833325), (-1.4583334, 0, 0.70833325), (-1.25, 0, 0.70833325), (-1.0416667, 0, 0.70833325), (-0.8333334, 0, 0.70833325), (-0.625, 0, 0.70833325), (-0.41666675, 0, 0.70833325), (-0.20833349, 0, 0.70833325), (0, 0, 0.70833325), (0.20833325, 0, 0.70833325), (0.4166665, 0, 0.70833325), (0.625, 0, 0.70833325), (0.83333325, 0, 0.70833325), (1.0416665, 0, 0.70833325), (1.25, 0, 0.70833325), (1.4583333, 0, 0.70833325), (1.6666665, 0, 0.70833325), (1.875, 0, 0.70833325), (2.083333, 0, 0.70833325), (2.2916665, 0, 0.70833325), (2.5, 0, 0.70833325), (-2.5, 0, 0.9166665), (-2.2916667, 0, 0.9166665), (-2.0833333, 0, 0.9166665), (-1.875, 0, 0.9166665), (-1.6666667, 0, 0.9166665), (-1.4583334, 0, 0.9166665), (-1.25, 0, 0.9166665), (-1.0416667, 0, 0.9166665), (-0.8333334, 0, 0.9166665), (-0.625, 0, 0.9166665), (-0.41666675, 0, 0.9166665), (-0.20833349, 0, 0.9166665), (0, 0, 0.9166665), (0.20833325, 0, 0.9166665), (0.4166665, 0, 0.9166665), (0.625, 0, 0.9166665), (0.83333325, 0, 0.9166665), (1.0416665, 0, 0.9166665), (1.25, 0, 0.9166665), (1.4583333, 0, 0.9166665), (1.6666665, 0, 0.9166665), (1.875, 0, 0.9166665), (2.083333, 0, 0.9166665), (2.2916665, 0, 0.9166665), (2.5, 0, 0.9166665), (-2.5, 0, 1.125), (-2.2916667, 0, 1.125), (-2.0833333, 0, 1.125), (-1.875, 0, 1.125), (-1.6666667, 0, 1.125), (-1.4583334, 0, 1.125), (-1.25, 0, 1.125), (-1.0416667, 0, 1.125), (-0.8333334, 0, 1.125), (-0.625, 0, 1.125), (-0.41666675, 0, 1.125), (-0.20833349, 0, 1.125), (0, 0, 1.125), (0.20833325, 0, 1.125), (0.4166665, 0, 1.125), (0.625, 0, 1.125), (0.83333325, 0, 1.125), (1.0416665, 0, 1.125), (1.25, 0, 1.125), (1.4583333, 0, 1.125), (1.6666665, 0, 1.125), (1.875, 0, 1.125), (2.083333, 0, 1.125), (2.2916665, 0, 1.125), (2.5, 0, 1.125), (-2.5, 0, 1.3333333), (-2.2916667, 0, 1.3333333), (-2.0833333, 0, 1.3333333), (-1.875, 0, 1.3333333), (-1.6666667, 0, 1.3333333), (-1.4583334, 0, 1.3333333), (-1.25, 0, 1.3333333), (-1.0416667, 0, 1.3333333), (-0.8333334, 0, 1.3333333), (-0.625, 0, 1.3333333), (-0.41666675, 0, 1.3333333), (-0.20833349, 0, 1.3333333), (0, 0, 1.3333333), (0.20833325, 0, 1.3333333), (0.4166665, 0, 1.3333333), (0.625, 0, 1.3333333), (0.83333325, 0, 1.3333333), (1.0416665, 0, 1.3333333), (1.25, 0, 1.3333333), (1.4583333, 0, 1.3333333), (1.6666665, 0, 1.3333333), (1.875, 0, 1.3333333), (2.083333, 0, 1.3333333), (2.2916665, 0, 1.3333333), (2.5, 0, 1.3333333), (-2.5, 0, 1.5416665), (-2.2916667, 0, 1.5416665), (-2.0833333, 0, 1.5416665), (-1.875, 0, 1.5416665), (-1.6666667, 0, 1.5416665), (-1.4583334, 0, 1.5416665), (-1.25, 0, 1.5416665), (-1.0416667, 0, 1.5416665), (-0.8333334, 0, 1.5416665), (-0.625, 0, 1.5416665), (-0.41666675, 0, 1.5416665), (-0.20833349, 0, 1.5416665), (0, 0, 1.5416665), (0.20833325, 0, 1.5416665), (0.4166665, 0, 1.5416665), (0.625, 0, 1.5416665), (0.83333325, 0, 1.5416665), (1.0416665, 0, 1.5416665), (1.25, 0, 1.5416665), (1.4583333, 0, 1.5416665), (1.6666665, 0, 1.5416665), (1.875, 0, 1.5416665), (2.083333, 0, 1.5416665), (2.2916665, 0, 1.5416665), (2.5, 0, 1.5416665), (-2.5, 0, 1.75), (-2.2916667, 0, 1.75), (-2.0833333, 0, 1.75), (-1.875, 0, 1.75), (-1.6666667, 0, 1.75), (-1.4583334, 0, 1.75), (-1.25, 0, 1.75), (-1.0416667, 0, 1.75), (-0.8333334, 0, 1.75), (-0.625, 0, 1.75), (-0.41666675, 0, 1.75), (-0.20833349, 0, 1.75), (0, 0, 1.75), (0.20833325, 0, 1.75), (0.4166665, 0, 1.75), (0.625, 0, 1.75), (0.83333325, 0, 1.75), (1.0416665, 0, 1.75), (1.25, 0, 1.75), (1.4583333, 0, 1.75), (1.6666665, 0, 1.75), (1.875, 0, 1.75), (2.083333, 0, 1.75), (2.2916665, 0, 1.75), (2.5, 0, 1.75), (-2.5, 0, 1.9583333), (-2.2916667, 0, 1.9583333), (-2.0833333, 0, 1.9583333), (-1.875, 0, 1.9583333), (-1.6666667, 0, 1.9583333), (-1.4583334, 0, 1.9583333), (-1.25, 0, 1.9583333), (-1.0416667, 0, 1.9583333), (-0.8333334, 0, 1.9583333), (-0.625, 0, 1.9583333), (-0.41666675, 0, 1.9583333), (-0.20833349, 0, 1.9583333), (0, 0, 1.9583333), (0.20833325, 0, 1.9583333), (0.4166665, 0, 1.9583333), (0.625, 0, 1.9583333), (0.83333325, 0, 1.9583333), (1.0416665, 0, 1.9583333), (1.25, 0, 1.9583333), (1.4583333, 0, 1.9583333), (1.6666665, 0, 1.9583333), (1.875, 0, 1.9583333), (2.083333, 0, 1.9583333), (2.2916665, 0, 1.9583333), (2.5, 0, 1.9583333), (-2.5, 0, 2.1666665), (-2.2916667, 0, 2.1666665), (-2.0833333, 0, 2.1666665), (-1.875, 0, 2.1666665), (-1.6666667, 0, 2.1666665), (-1.4583334, 0, 2.1666665), (-1.25, 0, 2.1666665), (-1.0416667, 0, 2.1666665), (-0.8333334, 0, 2.1666665), (-0.625, 0, 2.1666665), (-0.41666675, 0, 2.1666665), (-0.20833349, 0, 2.1666665), (0, 0, 2.1666665), (0.20833325, 0, 2.1666665), (0.4166665, 0, 2.1666665), (0.625, 0, 2.1666665), (0.83333325, 0, 2.1666665), (1.0416665, 0, 2.1666665), (1.25, 0, 2.1666665), (1.4583333, 0, 2.1666665), (1.6666665, 0, 2.1666665), (1.875, 0, 2.1666665), (2.083333, 0, 2.1666665), (2.2916665, 0, 2.1666665), (2.5, 0, 2.1666665), (-2.5, 0, 2.375), (-2.2916667, 0, 2.375), (-2.0833333, 0, 2.375), (-1.875, 0, 2.375), (-1.6666667, 0, 2.375), (-1.4583334, 0, 2.375), (-1.25, 0, 2.375), (-1.0416667, 0, 2.375), (-0.8333334, 0, 2.375), (-0.625, 0, 2.375), (-0.41666675, 0, 2.375), (-0.20833349, 0, 2.375), (0, 0, 2.375), (0.20833325, 0, 2.375), (0.4166665, 0, 2.375), (0.625, 0, 2.375), (0.83333325, 0, 2.375), (1.0416665, 0, 2.375), (1.25, 0, 2.375), (1.4583333, 0, 2.375), (1.6666665, 0, 2.375), (1.875, 0, 2.375), (2.083333, 0, 2.375), (2.2916665, 0, 2.375), (2.5, 0, 2.375), (-2.5, 0, 2.583333), (-2.2916667, 0, 2.583333), (-2.0833333, 0, 2.583333), (-1.875, 0, 2.583333), (-1.6666667, 0, 2.583333), (-1.4583334, 0, 2.583333), (-1.25, 0, 2.583333), (-1.0416667, 0, 2.583333), (-0.8333334, 0, 2.583333), (-0.625, 0, 2.583333), (-0.41666675, 0, 2.583333), (-0.20833349, 0, 2.583333), (0, 0, 2.583333), (0.20833325, 0, 2.583333), (0.4166665, 0, 2.583333), (0.625, 0, 2.583333), (0.83333325, 0, 2.583333), (1.0416665, 0, 2.583333), (1.25, 0, 2.583333), (1.4583333, 0, 2.583333), (1.6666665, 0, 2.583333), (1.875, 0, 2.583333), (2.083333, 0, 2.583333), (2.2916665, 0, 2.583333), (2.5, 0, 2.583333), (-2.5, 0, 2.7916665), (-2.2916667, 0, 2.7916665), (-2.0833333, 0, 2.7916665), (-1.875, 0, 2.7916665), (-1.6666667, 0, 2.7916665), (-1.4583334, 0, 2.7916665), (-1.25, 0, 2.7916665), (-1.0416667, 0, 2.7916665), (-0.8333334, 0, 2.7916665), (-0.625, 0, 2.7916665), (-0.41666675, 0, 2.7916665), (-0.20833349, 0, 2.7916665), (0, 0, 2.7916665), (0.20833325, 0, 2.7916665), (0.4166665, 0, 2.7916665), (0.625, 0, 2.7916665), (0.83333325, 0, 2.7916665), (1.0416665, 0, 2.7916665), (1.25, 0, 2.7916665), (1.4583333, 0, 2.7916665), (1.6666665, 0, 2.7916665), (1.875, 0, 2.7916665), (2.083333, 0, 2.7916665), (2.2916665, 0, 2.7916665), (2.5, 0, 2.7916665), (-2.5, 0, 3), (-2.2916667, 0, 3), (-2.0833333, 0, 3), (-1.875, 0, 3), (-1.6666667, 0, 3), (-1.4583334, 0, 3), (-1.25, 0, 3), (-1.0416667, 0, 3), (-0.8333334, 0, 3), (-0.625, 0, 3), (-0.41666675, 0, 3), (-0.20833349, 0, 3), (0, 0, 3), (0.20833325, 0, 3), (0.4166665, 0, 3), (0.625, 0, 3), (0.83333325, 0, 3), (1.0416665, 0, 3), (1.25, 0, 3), (1.4583333, 0, 3), (1.6666665, 0, 3), (1.875, 0, 3), (2.083333, 0, 3), (2.2916665, 0, 3), (2.5, 0, 3)] (
interpolation = "vertex"
)
texCoord2f[] primvars:attenuationUV = [(0.28333333, 1.2388333), (0.3013889, 1.2388333), (0.3013889, 1.2038507), (0.28333333, 1.2038507), (0.3013889, 1.2388333), (0.31944445, 1.2388333), (0.31944445, 1.2038507), (0.3013889, 1.2038507), (0.31944445, 1.2388333), (0.3375, 1.2388333), (0.3375, 1.2038507), (0.31944445, 1.2038507), (0.3375, 1.2388333), (0.35555553, 1.2388333), (0.35555553, 1.2038507), (0.3375, 1.2038507), (0.35555553, 1.2388333), (0.37361112, 1.2388333), (0.37361112, 1.2038507), (0.35555553, 1.2038507), (0.37361112, 1.2388333), (0.39166668, 1.2388333), (0.39166668, 1.2038507), (0.37361112, 1.2038507), (0.39166668, 1.2388333), (0.4097222, 1.2388333), (0.4097222, 1.2038507), (0.39166668, 1.2038507), (0.4097222, 1.2388333), (0.42777777, 1.2388333), (0.42777777, 1.2038507), (0.4097222, 1.2038507), (0.42777777, 1.2388333), (0.44583333, 1.2388333), (0.44583333, 1.2038507), (0.42777777, 1.2038507), (0.44583333, 1.2388333), (0.46388888, 1.2388333), (0.46388888, 1.2038507), (0.44583333, 1.2038507), (0.46388888, 1.2388333), (0.48194444, 1.2388333), (0.48194444, 1.2038507), (0.46388888, 1.2038507), (0.48194444, 1.2388333), (0.5, 1.2388333), (0.5, 1.2038507), (0.48194444, 1.2038507), (0.5, 1.2388333), (0.51805556, 1.2388333), (0.51805556, 1.2038507), (0.5, 1.2038507), (0.51805556, 1.2388333), (0.5361111, 1.2388333), (0.5361111, 1.2038507), (0.51805556, 1.2038507), (0.5361111, 1.2388333), (0.5541667, 1.2388333), (0.5541667, 1.2038507), (0.5361111, 1.2038507), (0.5541667, 1.2388333), (0.57222223, 1.2388333), (0.57222223, 1.2038507), (0.5541667, 1.2038507), (0.57222223, 1.2388333), (0.5902778, 1.2388333), (0.5902778, 1.2038507), (0.57222223, 1.2038507), (0.5902778, 1.2388333), (0.60833335, 1.2388333), (0.60833335, 1.2038507), (0.5902778, 1.2038507), (0.60833335, 1.2388333), (0.6263889, 1.2388333), (0.6263889, 1.2038507), (0.60833335, 1.2038507), (0.6263889, 1.2388333), (0.6444444, 1.2388333), (0.6444444, 1.2038507), (0.6263889, 1.2038507), (0.6444444, 1.2388333), (0.6625, 1.2388333), (0.6625, 1.2038507), (0.6444444, 1.2038507), (0.6625, 1.2388333), (0.6805555, 1.2388333), (0.6805555, 1.2038507), (0.6625, 1.2038507), (0.6805555, 1.2388333), (0.69861114, 1.2388333), (0.69861114, 1.2038507), (0.6805555, 1.2038507), (0.69861114, 1.2388333), (0.7166667, 1.2388333), (0.7166667, 1.2038507), (0.69861114, 1.2038507), (0.28333333, 1.2038507), (0.3013889, 1.2038507), (0.3013889, 1.1688681), (0.28333333, 1.1688681), (0.3013889, 1.2038507), (0.31944445, 1.2038507), (0.31944445, 1.1688681), (0.3013889, 1.1688681), (0.31944445, 1.2038507), (0.3375, 1.2038507), (0.3375, 1.1688681), (0.31944445, 1.1688681), (0.3375, 1.2038507), (0.35555553, 1.2038507), (0.35555553, 1.1688681), (0.3375, 1.1688681), (0.35555553, 1.2038507), (0.37361112, 1.2038507), (0.37361112, 1.1688681), (0.35555553, 1.1688681), (0.37361112, 1.2038507), (0.39166668, 1.2038507), (0.39166668, 1.1688681), (0.37361112, 1.1688681), (0.39166668, 1.2038507), (0.4097222, 1.2038507), (0.4097222, 1.1688681), (0.39166668, 1.1688681), (0.4097222, 1.2038507), (0.42777777, 1.2038507), (0.42777777, 1.1688681), (0.4097222, 1.1688681), (0.42777777, 1.2038507), (0.44583333, 1.2038507), (0.44583333, 1.1688681), (0.42777777, 1.1688681), (0.44583333, 1.2038507), (0.46388888, 1.2038507), (0.46388888, 1.1688681), (0.44583333, 1.1688681), (0.46388888, 1.2038507), (0.48194444, 1.2038507), (0.48194444, 1.1688681), (0.46388888, 1.1688681), (0.48194444, 1.2038507), (0.5, 1.2038507), (0.5, 1.1688681), (0.48194444, 1.1688681), (0.5, 1.2038507), (0.51805556, 1.2038507), (0.51805556, 1.1688681), (0.5, 1.1688681), (0.51805556, 1.2038507), (0.5361111, 1.2038507), (0.5361111, 1.1688681), (0.51805556, 1.1688681), (0.5361111, 1.2038507), (0.5541667, 1.2038507), (0.5541667, 1.1688681), (0.5361111, 1.1688681), (0.5541667, 1.2038507), (0.57222223, 1.2038507), (0.57222223, 1.1688681), (0.5541667, 1.1688681), (0.57222223, 1.2038507), (0.5902778, 1.2038507), (0.5902778, 1.1688681), (0.57222223, 1.1688681), (0.5902778, 1.2038507), (0.60833335, 1.2038507), (0.60833335, 1.1688681), (0.5902778, 1.1688681), (0.60833335, 1.2038507), (0.6263889, 1.2038507), (0.6263889, 1.1688681), (0.60833335, 1.1688681), (0.6263889, 1.2038507), (0.6444444, 1.2038507), (0.6444444, 1.1688681), (0.6263889, 1.1688681), (0.6444444, 1.2038507), (0.6625, 1.2038507), (0.6625, 1.1688681), (0.6444444, 1.1688681), (0.6625, 1.2038507), (0.6805555, 1.2038507), (0.6805555, 1.1688681), (0.6625, 1.1688681), (0.6805555, 1.2038507), (0.69861114, 1.2038507), (0.69861114, 1.1688681), (0.6805555, 1.1688681), (0.69861114, 1.2038507), (0.7166667, 1.2038507), (0.7166667, 1.1688681), (0.69861114, 1.1688681), (0.28333333, 1.1688681), (0.3013889, 1.1688681), (0.3013889, 1.1338854), (0.28333333, 1.1338854), (0.3013889, 1.1688681), (0.31944445, 1.1688681), (0.31944445, 1.1338854), (0.3013889, 1.1338854), (0.31944445, 1.1688681), (0.3375, 1.1688681), (0.3375, 1.1338854), (0.31944445, 1.1338854), (0.3375, 1.1688681), (0.35555553, 1.1688681), (0.35555553, 1.1338854), (0.3375, 1.1338854), (0.35555553, 1.1688681), (0.37361112, 1.1688681), (0.37361112, 1.1338854), (0.35555553, 1.1338854), (0.37361112, 1.1688681), (0.39166668, 1.1688681), (0.39166668, 1.1338854), (0.37361112, 1.1338854), (0.39166668, 1.1688681), (0.4097222, 1.1688681), (0.4097222, 1.1338854), (0.39166668, 1.1338854), (0.4097222, 1.1688681), (0.42777777, 1.1688681), (0.42777777, 1.1338854), (0.4097222, 1.1338854), (0.42777777, 1.1688681), (0.44583333, 1.1688681), (0.44583333, 1.1338854), (0.42777777, 1.1338854), (0.44583333, 1.1688681), (0.46388888, 1.1688681), (0.46388888, 1.1338854), (0.44583333, 1.1338854), (0.46388888, 1.1688681), (0.48194444, 1.1688681), (0.48194444, 1.1338854), (0.46388888, 1.1338854), (0.48194444, 1.1688681), (0.5, 1.1688681), (0.5, 1.1338854), (0.48194444, 1.1338854), (0.5, 1.1688681), (0.51805556, 1.1688681), (0.51805556, 1.1338854), (0.5, 1.1338854), (0.51805556, 1.1688681), (0.5361111, 1.1688681), (0.5361111, 1.1338854), (0.51805556, 1.1338854), (0.5361111, 1.1688681), (0.5541667, 1.1688681), (0.5541667, 1.1338854), (0.5361111, 1.1338854), (0.5541667, 1.1688681), (0.57222223, 1.1688681), (0.57222223, 1.1338854), (0.5541667, 1.1338854), (0.57222223, 1.1688681), (0.5902778, 1.1688681), (0.5902778, 1.1338854), (0.57222223, 1.1338854), (0.5902778, 1.1688681), (0.60833335, 1.1688681), (0.60833335, 1.1338854), (0.5902778, 1.1338854), (0.60833335, 1.1688681), (0.6263889, 1.1688681), (0.6263889, 1.1338854), (0.60833335, 1.1338854), (0.6263889, 1.1688681), (0.6444444, 1.1688681), (0.6444444, 1.1338854), (0.6263889, 1.1338854), (0.6444444, 1.1688681), (0.6625, 1.1688681), (0.6625, 1.1338854), (0.6444444, 1.1338854), (0.6625, 1.1688681), (0.6805555, 1.1688681), (0.6805555, 1.1338854), (0.6625, 1.1338854), (0.6805555, 1.1688681), (0.69861114, 1.1688681), (0.69861114, 1.1338854), (0.6805555, 1.1338854), (0.69861114, 1.1688681), (0.7166667, 1.1688681), (0.7166667, 1.1338854), (0.69861114, 1.1338854), (0.28333333, 1.1338854), (0.3013889, 1.1338854), (0.3013889, 1.0989028), (0.28333333, 1.0989028), (0.3013889, 1.1338854), (0.31944445, 1.1338854), (0.31944445, 1.0989028), (0.3013889, 1.0989028), (0.31944445, 1.1338854), (0.3375, 1.1338854), (0.3375, 1.0989028), (0.31944445, 1.0989028), (0.3375, 1.1338854), (0.35555553, 1.1338854), (0.35555553, 1.0989028), (0.3375, 1.0989028), (0.35555553, 1.1338854), (0.37361112, 1.1338854), (0.37361112, 1.0989028), (0.35555553, 1.0989028), (0.37361112, 1.1338854), (0.39166668, 1.1338854), (0.39166668, 1.0989028), (0.37361112, 1.0989028), (0.39166668, 1.1338854), (0.4097222, 1.1338854), (0.4097222, 1.0989028), (0.39166668, 1.0989028), (0.4097222, 1.1338854), (0.42777777, 1.1338854), (0.42777777, 1.0989028), (0.4097222, 1.0989028), (0.42777777, 1.1338854), (0.44583333, 1.1338854), (0.44583333, 1.0989028), (0.42777777, 1.0989028), (0.44583333, 1.1338854), (0.46388888, 1.1338854), (0.46388888, 1.0989028), (0.44583333, 1.0989028), (0.46388888, 1.1338854), (0.48194444, 1.1338854), (0.48194444, 1.0989028), (0.46388888, 1.0989028), (0.48194444, 1.1338854), (0.5, 1.1338854), (0.5, 1.0989028), (0.48194444, 1.0989028), (0.5, 1.1338854), (0.51805556, 1.1338854), (0.51805556, 1.0989028), (0.5, 1.0989028), (0.51805556, 1.1338854), (0.5361111, 1.1338854), (0.5361111, 1.0989028), (0.51805556, 1.0989028), (0.5361111, 1.1338854), (0.5541667, 1.1338854), (0.5541667, 1.0989028), (0.5361111, 1.0989028), (0.5541667, 1.1338854), (0.57222223, 1.1338854), (0.57222223, 1.0989028), (0.5541667, 1.0989028), (0.57222223, 1.1338854), (0.5902778, 1.1338854), (0.5902778, 1.0989028), (0.57222223, 1.0989028), (0.5902778, 1.1338854), (0.60833335, 1.1338854), (0.60833335, 1.0989028), (0.5902778, 1.0989028), (0.60833335, 1.1338854), (0.6263889, 1.1338854), (0.6263889, 1.0989028), (0.60833335, 1.0989028), (0.6263889, 1.1338854), (0.6444444, 1.1338854), (0.6444444, 1.0989028), (0.6263889, 1.0989028), (0.6444444, 1.1338854), (0.6625, 1.1338854), (0.6625, 1.0989028), (0.6444444, 1.0989028), (0.6625, 1.1338854), (0.6805555, 1.1338854), (0.6805555, 1.0989028), (0.6625, 1.0989028), (0.6805555, 1.1338854), (0.69861114, 1.1338854), (0.69861114, 1.0989028), (0.6805555, 1.0989028), (0.69861114, 1.1338854), (0.7166667, 1.1338854), (0.7166667, 1.0989028), (0.69861114, 1.0989028), (0.28333333, 1.0989028), (0.3013889, 1.0989028), (0.3013889, 1.0639201), (0.28333333, 1.0639201), (0.3013889, 1.0989028), (0.31944445, 1.0989028), (0.31944445, 1.0639201), (0.3013889, 1.0639201), (0.31944445, 1.0989028), (0.3375, 1.0989028), (0.3375, 1.0639201), (0.31944445, 1.0639201), (0.3375, 1.0989028), (0.35555553, 1.0989028), (0.35555553, 1.0639201), (0.3375, 1.0639201), (0.35555553, 1.0989028), (0.37361112, 1.0989028), (0.37361112, 1.0639201), (0.35555553, 1.0639201), (0.37361112, 1.0989028), (0.39166668, 1.0989028), (0.39166668, 1.0639201), (0.37361112, 1.0639201), (0.39166668, 1.0989028), (0.4097222, 1.0989028), (0.4097222, 1.0639201), (0.39166668, 1.0639201), (0.4097222, 1.0989028), (0.42777777, 1.0989028), (0.42777777, 1.0639201), (0.4097222, 1.0639201), (0.42777777, 1.0989028), (0.44583333, 1.0989028), (0.44583333, 1.0639201), (0.42777777, 1.0639201), (0.44583333, 1.0989028), (0.46388888, 1.0989028), (0.46388888, 1.0639201), (0.44583333, 1.0639201), (0.46388888, 1.0989028), (0.48194444, 1.0989028), (0.48194444, 1.0639201), (0.46388888, 1.0639201), (0.48194444, 1.0989028), (0.5, 1.0989028), (0.5, 1.0639201), (0.48194444, 1.0639201), (0.5, 1.0989028), (0.51805556, 1.0989028), (0.51805556, 1.0639201), (0.5, 1.0639201), (0.51805556, 1.0989028), (0.5361111, 1.0989028), (0.5361111, 1.0639201), (0.51805556, 1.0639201), (0.5361111, 1.0989028), (0.5541667, 1.0989028), (0.5541667, 1.0639201), (0.5361111, 1.0639201), (0.5541667, 1.0989028), (0.57222223, 1.0989028), (0.57222223, 1.0639201), (0.5541667, 1.0639201), (0.57222223, 1.0989028), (0.5902778, 1.0989028), (0.5902778, 1.0639201), (0.57222223, 1.0639201), (0.5902778, 1.0989028), (0.60833335, 1.0989028), (0.60833335, 1.0639201), (0.5902778, 1.0639201), (0.60833335, 1.0989028), (0.6263889, 1.0989028), (0.6263889, 1.0639201), (0.60833335, 1.0639201), (0.6263889, 1.0989028), (0.6444444, 1.0989028), (0.6444444, 1.0639201), (0.6263889, 1.0639201), (0.6444444, 1.0989028), (0.6625, 1.0989028), (0.6625, 1.0639201), (0.6444444, 1.0639201), (0.6625, 1.0989028), (0.6805555, 1.0989028), (0.6805555, 1.0639201), (0.6625, 1.0639201), (0.6805555, 1.0989028), (0.69861114, 1.0989028), (0.69861114, 1.0639201), (0.6805555, 1.0639201), (0.69861114, 1.0989028), (0.7166667, 1.0989028), (0.7166667, 1.0639201), (0.69861114, 1.0639201), (0.28333333, 1.0639201), (0.3013889, 1.0639201), (0.3013889, 1.0289375), (0.28333333, 1.0289375), (0.3013889, 1.0639201), (0.31944445, 1.0639201), (0.31944445, 1.0289375), (0.3013889, 1.0289375), (0.31944445, 1.0639201), (0.3375, 1.0639201), (0.3375, 1.0289375), (0.31944445, 1.0289375), (0.3375, 1.0639201), (0.35555553, 1.0639201), (0.35555553, 1.0289375), (0.3375, 1.0289375), (0.35555553, 1.0639201), (0.37361112, 1.0639201), (0.37361112, 1.0289375), (0.35555553, 1.0289375), (0.37361112, 1.0639201), (0.39166668, 1.0639201), (0.39166668, 1.0289375), (0.37361112, 1.0289375), (0.39166668, 1.0639201), (0.4097222, 1.0639201), (0.4097222, 1.0289375), (0.39166668, 1.0289375), (0.4097222, 1.0639201), (0.42777777, 1.0639201), (0.42777777, 1.0289375), (0.4097222, 1.0289375), (0.42777777, 1.0639201), (0.44583333, 1.0639201), (0.44583333, 1.0289375), (0.42777777, 1.0289375), (0.44583333, 1.0639201), (0.46388888, 1.0639201), (0.46388888, 1.0289375), (0.44583333, 1.0289375), (0.46388888, 1.0639201), (0.48194444, 1.0639201), (0.48194444, 1.0289375), (0.46388888, 1.0289375), (0.48194444, 1.0639201), (0.5, 1.0639201), (0.5, 1.0289375), (0.48194444, 1.0289375), (0.5, 1.0639201), (0.51805556, 1.0639201), (0.51805556, 1.0289375), (0.5, 1.0289375), (0.51805556, 1.0639201), (0.5361111, 1.0639201), (0.5361111, 1.0289375), (0.51805556, 1.0289375), (0.5361111, 1.0639201), (0.5541667, 1.0639201), (0.5541667, 1.0289375), (0.5361111, 1.0289375), (0.5541667, 1.0639201), (0.57222223, 1.0639201), (0.57222223, 1.0289375), (0.5541667, 1.0289375), (0.57222223, 1.0639201), (0.5902778, 1.0639201), (0.5902778, 1.0289375), (0.57222223, 1.0289375), (0.5902778, 1.0639201), (0.60833335, 1.0639201), (0.60833335, 1.0289375), (0.5902778, 1.0289375), (0.60833335, 1.0639201), (0.6263889, 1.0639201), (0.6263889, 1.0289375), (0.60833335, 1.0289375), (0.6263889, 1.0639201), (0.6444444, 1.0639201), (0.6444444, 1.0289375), (0.6263889, 1.0289375), (0.6444444, 1.0639201), (0.6625, 1.0639201), (0.6625, 1.0289375), (0.6444444, 1.0289375), (0.6625, 1.0639201), (0.6805555, 1.0639201), (0.6805555, 1.0289375), (0.6625, 1.0289375), (0.6805555, 1.0639201), (0.69861114, 1.0639201), (0.69861114, 1.0289375), (0.6805555, 1.0289375), (0.69861114, 1.0639201), (0.7166667, 1.0639201), (0.7166667, 1.0289375), (0.69861114, 1.0289375), (0.28333333, 1.0289375), (0.3013889, 1.0289375), (0.3013889, 0.9939549), (0.28333333, 0.9939549), (0.3013889, 1.0289375), (0.31944445, 1.0289375), (0.31944445, 0.9939549), (0.3013889, 0.9939549), (0.31944445, 1.0289375), (0.3375, 1.0289375), (0.3375, 0.9939549), (0.31944445, 0.9939549), (0.3375, 1.0289375), (0.35555553, 1.0289375), (0.35555553, 0.9939549), (0.3375, 0.9939549), (0.35555553, 1.0289375), (0.37361112, 1.0289375), (0.37361112, 0.9939549), (0.35555553, 0.9939549), (0.37361112, 1.0289375), (0.39166668, 1.0289375), (0.39166668, 0.9939549), (0.37361112, 0.9939549), (0.39166668, 1.0289375), (0.4097222, 1.0289375), (0.4097222, 0.9939549), (0.39166668, 0.9939549), (0.4097222, 1.0289375), (0.42777777, 1.0289375), (0.42777777, 0.9939549), (0.4097222, 0.9939549), (0.42777777, 1.0289375), (0.44583333, 1.0289375), (0.44583333, 0.9939549), (0.42777777, 0.9939549), (0.44583333, 1.0289375), (0.46388888, 1.0289375), (0.46388888, 0.9939549), (0.44583333, 0.9939549), (0.46388888, 1.0289375), (0.48194444, 1.0289375), (0.48194444, 0.9939549), (0.46388888, 0.9939549), (0.48194444, 1.0289375), (0.5, 1.0289375), (0.5, 0.9939549), (0.48194444, 0.9939549), (0.5, 1.0289375), (0.51805556, 1.0289375), (0.51805556, 0.9939549), (0.5, 0.9939549), (0.51805556, 1.0289375), (0.5361111, 1.0289375), (0.5361111, 0.9939549), (0.51805556, 0.9939549), (0.5361111, 1.0289375), (0.5541667, 1.0289375), (0.5541667, 0.9939549), (0.5361111, 0.9939549), (0.5541667, 1.0289375), (0.57222223, 1.0289375), (0.57222223, 0.9939549), (0.5541667, 0.9939549), (0.57222223, 1.0289375), (0.5902778, 1.0289375), (0.5902778, 0.9939549), (0.57222223, 0.9939549), (0.5902778, 1.0289375), (0.60833335, 1.0289375), (0.60833335, 0.9939549), (0.5902778, 0.9939549), (0.60833335, 1.0289375), (0.6263889, 1.0289375), (0.6263889, 0.9939549), (0.60833335, 0.9939549), (0.6263889, 1.0289375), (0.6444444, 1.0289375), (0.6444444, 0.9939549), (0.6263889, 0.9939549), (0.6444444, 1.0289375), (0.6625, 1.0289375), (0.6625, 0.9939549), (0.6444444, 0.9939549), (0.6625, 1.0289375), (0.6805555, 1.0289375), (0.6805555, 0.9939549), (0.6625, 0.9939549), (0.6805555, 1.0289375), (0.69861114, 1.0289375), (0.69861114, 0.9939549), (0.6805555, 0.9939549), (0.69861114, 1.0289375), (0.7166667, 1.0289375), (0.7166667, 0.9939549), (0.69861114, 0.9939549), (0.28333333, 0.9939549), (0.3013889, 0.9939549), (0.3013889, 0.9589722), (0.28333333, 0.9589722), (0.3013889, 0.9939549), (0.31944445, 0.9939549), (0.31944445, 0.9589722), (0.3013889, 0.9589722), (0.31944445, 0.9939549), (0.3375, 0.9939549), (0.3375, 0.9589722), (0.31944445, 0.9589722), (0.3375, 0.9939549), (0.35555553, 0.9939549), (0.35555553, 0.9589722), (0.3375, 0.9589722), (0.35555553, 0.9939549), (0.37361112, 0.9939549), (0.37361112, 0.9589722), (0.35555553, 0.9589722), (0.37361112, 0.9939549), (0.39166668, 0.9939549), (0.39166668, 0.9589722), (0.37361112, 0.9589722), (0.39166668, 0.9939549), (0.4097222, 0.9939549), (0.4097222, 0.9589722), (0.39166668, 0.9589722), (0.4097222, 0.9939549), (0.42777777, 0.9939549), (0.42777777, 0.9589722), (0.4097222, 0.9589722), (0.42777777, 0.9939549), (0.44583333, 0.9939549), (0.44583333, 0.9589722), (0.42777777, 0.9589722), (0.44583333, 0.9939549), (0.46388888, 0.9939549), (0.46388888, 0.9589722), (0.44583333, 0.9589722), (0.46388888, 0.9939549), (0.48194444, 0.9939549), (0.48194444, 0.9589722), (0.46388888, 0.9589722), (0.48194444, 0.9939549), (0.5, 0.9939549), (0.5, 0.9589722), (0.48194444, 0.9589722), (0.5, 0.9939549), (0.51805556, 0.9939549), (0.51805556, 0.9589722), (0.5, 0.9589722), (0.51805556, 0.9939549), (0.5361111, 0.9939549), (0.5361111, 0.9589722), (0.51805556, 0.9589722), (0.5361111, 0.9939549), (0.5541667, 0.9939549), (0.5541667, 0.9589722), (0.5361111, 0.9589722), (0.5541667, 0.9939549), (0.57222223, 0.9939549), (0.57222223, 0.9589722), (0.5541667, 0.9589722), (0.57222223, 0.9939549), (0.5902778, 0.9939549), (0.5902778, 0.9589722), (0.57222223, 0.9589722), (0.5902778, 0.9939549), (0.60833335, 0.9939549), (0.60833335, 0.9589722), (0.5902778, 0.9589722), (0.60833335, 0.9939549), (0.6263889, 0.9939549), (0.6263889, 0.9589722), (0.60833335, 0.9589722), (0.6263889, 0.9939549), (0.6444444, 0.9939549), (0.6444444, 0.9589722), (0.6263889, 0.9589722), (0.6444444, 0.9939549), (0.6625, 0.9939549), (0.6625, 0.9589722), (0.6444444, 0.9589722), (0.6625, 0.9939549), (0.6805555, 0.9939549), (0.6805555, 0.9589722), (0.6625, 0.9589722), (0.6805555, 0.9939549), (0.69861114, 0.9939549), (0.69861114, 0.9589722), (0.6805555, 0.9589722), (0.69861114, 0.9939549), (0.7166667, 0.9939549), (0.7166667, 0.9589722), (0.69861114, 0.9589722), (0.28333333, 0.9589722), (0.3013889, 0.9589722), (0.3013889, 0.9239896), (0.28333333, 0.9239896), (0.3013889, 0.9589722), (0.31944445, 0.9589722), (0.31944445, 0.9239896), (0.3013889, 0.9239896), (0.31944445, 0.9589722), (0.3375, 0.9589722), (0.3375, 0.9239896), (0.31944445, 0.9239896), (0.3375, 0.9589722), (0.35555553, 0.9589722), (0.35555553, 0.9239896), (0.3375, 0.9239896), (0.35555553, 0.9589722), (0.37361112, 0.9589722), (0.37361112, 0.9239896), (0.35555553, 0.9239896), (0.37361112, 0.9589722), (0.39166668, 0.9589722), (0.39166668, 0.9239896), (0.37361112, 0.9239896), (0.39166668, 0.9589722), (0.4097222, 0.9589722), (0.4097222, 0.9239896), (0.39166668, 0.9239896), (0.4097222, 0.9589722), (0.42777777, 0.9589722), (0.42777777, 0.9239896), (0.4097222, 0.9239896), (0.42777777, 0.9589722), (0.44583333, 0.9589722), (0.44583333, 0.9239896), (0.42777777, 0.9239896), (0.44583333, 0.9589722), (0.46388888, 0.9589722), (0.46388888, 0.9239896), (0.44583333, 0.9239896), (0.46388888, 0.9589722), (0.48194444, 0.9589722), (0.48194444, 0.9239896), (0.46388888, 0.9239896), (0.48194444, 0.9589722), (0.5, 0.9589722), (0.5, 0.9239896), (0.48194444, 0.9239896), (0.5, 0.9589722), (0.51805556, 0.9589722), (0.51805556, 0.9239896), (0.5, 0.9239896), (0.51805556, 0.9589722), (0.5361111, 0.9589722), (0.5361111, 0.9239896), (0.51805556, 0.9239896), (0.5361111, 0.9589722), (0.5541667, 0.9589722), (0.5541667, 0.9239896), (0.5361111, 0.9239896), (0.5541667, 0.9589722), (0.57222223, 0.9589722), (0.57222223, 0.9239896), (0.5541667, 0.9239896), (0.57222223, 0.9589722), (0.5902778, 0.9589722), (0.5902778, 0.9239896), (0.57222223, 0.9239896), (0.5902778, 0.9589722), (0.60833335, 0.9589722), (0.60833335, 0.9239896), (0.5902778, 0.9239896), (0.60833335, 0.9589722), (0.6263889, 0.9589722), (0.6263889, 0.9239896), (0.60833335, 0.9239896), (0.6263889, 0.9589722), (0.6444444, 0.9589722), (0.6444444, 0.9239896), (0.6263889, 0.9239896), (0.6444444, 0.9589722), (0.6625, 0.9589722), (0.6625, 0.9239896), (0.6444444, 0.9239896), (0.6625, 0.9589722), (0.6805555, 0.9589722), (0.6805555, 0.9239896), (0.6625, 0.9239896), (0.6805555, 0.9589722), (0.69861114, 0.9589722), (0.69861114, 0.9239896), (0.6805555, 0.9239896), (0.69861114, 0.9589722), (0.7166667, 0.9589722), (0.7166667, 0.9239896), (0.69861114, 0.9239896), (0.28333333, 0.9239896), (0.3013889, 0.9239896), (0.3013889, 0.889007), (0.28333333, 0.889007), (0.3013889, 0.9239896), (0.31944445, 0.9239896), (0.31944445, 0.889007), (0.3013889, 0.889007), (0.31944445, 0.9239896), (0.3375, 0.9239896), (0.3375, 0.889007), (0.31944445, 0.889007), (0.3375, 0.9239896), (0.35555553, 0.9239896), (0.35555553, 0.889007), (0.3375, 0.889007), (0.35555553, 0.9239896), (0.37361112, 0.9239896), (0.37361112, 0.889007), (0.35555553, 0.889007), (0.37361112, 0.9239896), (0.39166668, 0.9239896), (0.39166668, 0.889007), (0.37361112, 0.889007), (0.39166668, 0.9239896), (0.4097222, 0.9239896), (0.4097222, 0.889007), (0.39166668, 0.889007), (0.4097222, 0.9239896), (0.42777777, 0.9239896), (0.42777777, 0.889007), (0.4097222, 0.889007), (0.42777777, 0.9239896), (0.44583333, 0.9239896), (0.44583333, 0.889007), (0.42777777, 0.889007), (0.44583333, 0.9239896), (0.46388888, 0.9239896), (0.46388888, 0.889007), (0.44583333, 0.889007), (0.46388888, 0.9239896), (0.48194444, 0.9239896), (0.48194444, 0.889007), (0.46388888, 0.889007), (0.48194444, 0.9239896), (0.5, 0.9239896), (0.5, 0.889007), (0.48194444, 0.889007), (0.5, 0.9239896), (0.51805556, 0.9239896), (0.51805556, 0.889007), (0.5, 0.889007), (0.51805556, 0.9239896), (0.5361111, 0.9239896), (0.5361111, 0.889007), (0.51805556, 0.889007), (0.5361111, 0.9239896), (0.5541667, 0.9239896), (0.5541667, 0.889007), (0.5361111, 0.889007), (0.5541667, 0.9239896), (0.57222223, 0.9239896), (0.57222223, 0.889007), (0.5541667, 0.889007), (0.57222223, 0.9239896), (0.5902778, 0.9239896), (0.5902778, 0.889007), (0.57222223, 0.889007), (0.5902778, 0.9239896), (0.60833335, 0.9239896), (0.60833335, 0.889007), (0.5902778, 0.889007), (0.60833335, 0.9239896), (0.6263889, 0.9239896), (0.6263889, 0.889007), (0.60833335, 0.889007), (0.6263889, 0.9239896), (0.6444444, 0.9239896), (0.6444444, 0.889007), (0.6263889, 0.889007), (0.6444444, 0.9239896), (0.6625, 0.9239896), (0.6625, 0.889007), (0.6444444, 0.889007), (0.6625, 0.9239896), (0.6805555, 0.9239896), (0.6805555, 0.889007), (0.6625, 0.889007), (0.6805555, 0.9239896), (0.69861114, 0.9239896), (0.69861114, 0.889007), (0.6805555, 0.889007), (0.69861114, 0.9239896), (0.7166667, 0.9239896), (0.7166667, 0.889007), (0.69861114, 0.889007), (0.28333333, 0.889007), (0.3013889, 0.889007), (0.3013889, 0.85402435), (0.28333333, 0.85402435), (0.3013889, 0.889007), (0.31944445, 0.889007), (0.31944445, 0.85402435), (0.3013889, 0.85402435), (0.31944445, 0.889007), (0.3375, 0.889007), (0.3375, 0.85402435), (0.31944445, 0.85402435), (0.3375, 0.889007), (0.35555553, 0.889007), (0.35555553, 0.85402435), (0.3375, 0.85402435), (0.35555553, 0.889007), (0.37361112, 0.889007), (0.37361112, 0.85402435), (0.35555553, 0.85402435), (0.37361112, 0.889007), (0.39166668, 0.889007), (0.39166668, 0.85402435), (0.37361112, 0.85402435), (0.39166668, 0.889007), (0.4097222, 0.889007), (0.4097222, 0.85402435), (0.39166668, 0.85402435), (0.4097222, 0.889007), (0.42777777, 0.889007), (0.42777777, 0.85402435), (0.4097222, 0.85402435), (0.42777777, 0.889007), (0.44583333, 0.889007), (0.44583333, 0.85402435), (0.42777777, 0.85402435), (0.44583333, 0.889007), (0.46388888, 0.889007), (0.46388888, 0.85402435), (0.44583333, 0.85402435), (0.46388888, 0.889007), (0.48194444, 0.889007), (0.48194444, 0.85402435), (0.46388888, 0.85402435), (0.48194444, 0.889007), (0.5, 0.889007), (0.5, 0.85402435), (0.48194444, 0.85402435), (0.5, 0.889007), (0.51805556, 0.889007), (0.51805556, 0.85402435), (0.5, 0.85402435), (0.51805556, 0.889007), (0.5361111, 0.889007), (0.5361111, 0.85402435), (0.51805556, 0.85402435), (0.5361111, 0.889007), (0.5541667, 0.889007), (0.5541667, 0.85402435), (0.5361111, 0.85402435), (0.5541667, 0.889007), (0.57222223, 0.889007), (0.57222223, 0.85402435), (0.5541667, 0.85402435), (0.57222223, 0.889007), (0.5902778, 0.889007), (0.5902778, 0.85402435), (0.57222223, 0.85402435), (0.5902778, 0.889007), (0.60833335, 0.889007), (0.60833335, 0.85402435), (0.5902778, 0.85402435), (0.60833335, 0.889007), (0.6263889, 0.889007), (0.6263889, 0.85402435), (0.60833335, 0.85402435), (0.6263889, 0.889007), (0.6444444, 0.889007), (0.6444444, 0.85402435), (0.6263889, 0.85402435), (0.6444444, 0.889007), (0.6625, 0.889007), (0.6625, 0.85402435), (0.6444444, 0.85402435), (0.6625, 0.889007), (0.6805555, 0.889007), (0.6805555, 0.85402435), (0.6625, 0.85402435), (0.6805555, 0.889007), (0.69861114, 0.889007), (0.69861114, 0.85402435), (0.6805555, 0.85402435), (0.69861114, 0.889007), (0.7166667, 0.889007), (0.7166667, 0.85402435), (0.69861114, 0.85402435), (0.28333333, 0.85402435), (0.3013889, 0.85402435), (0.3013889, 0.81904167), (0.28333333, 0.81904167), (0.3013889, 0.85402435), (0.31944445, 0.85402435), (0.31944445, 0.81904167), (0.3013889, 0.81904167), (0.31944445, 0.85402435), (0.3375, 0.85402435), (0.3375, 0.81904167), (0.31944445, 0.81904167), (0.3375, 0.85402435), (0.35555553, 0.85402435), (0.35555553, 0.81904167), (0.3375, 0.81904167), (0.35555553, 0.85402435), (0.37361112, 0.85402435), (0.37361112, 0.81904167), (0.35555553, 0.81904167), (0.37361112, 0.85402435), (0.39166668, 0.85402435), (0.39166668, 0.81904167), (0.37361112, 0.81904167), (0.39166668, 0.85402435), (0.4097222, 0.85402435), (0.4097222, 0.81904167), (0.39166668, 0.81904167), (0.4097222, 0.85402435), (0.42777777, 0.85402435), (0.42777777, 0.81904167), (0.4097222, 0.81904167), (0.42777777, 0.85402435), (0.44583333, 0.85402435), (0.44583333, 0.81904167), (0.42777777, 0.81904167), (0.44583333, 0.85402435), (0.46388888, 0.85402435), (0.46388888, 0.81904167), (0.44583333, 0.81904167), (0.46388888, 0.85402435), (0.48194444, 0.85402435), (0.48194444, 0.81904167), (0.46388888, 0.81904167), (0.48194444, 0.85402435), (0.5, 0.85402435), (0.5, 0.81904167), (0.48194444, 0.81904167), (0.5, 0.85402435), (0.51805556, 0.85402435), (0.51805556, 0.81904167), (0.5, 0.81904167), (0.51805556, 0.85402435), (0.5361111, 0.85402435), (0.5361111, 0.81904167), (0.51805556, 0.81904167), (0.5361111, 0.85402435), (0.5541667, 0.85402435), (0.5541667, 0.81904167), (0.5361111, 0.81904167), (0.5541667, 0.85402435), (0.57222223, 0.85402435), (0.57222223, 0.81904167), (0.5541667, 0.81904167), (0.57222223, 0.85402435), (0.5902778, 0.85402435), (0.5902778, 0.81904167), (0.57222223, 0.81904167), (0.5902778, 0.85402435), (0.60833335, 0.85402435), (0.60833335, 0.81904167), (0.5902778, 0.81904167), (0.60833335, 0.85402435), (0.6263889, 0.85402435), (0.6263889, 0.81904167), (0.60833335, 0.81904167), (0.6263889, 0.85402435), (0.6444444, 0.85402435), (0.6444444, 0.81904167), (0.6263889, 0.81904167), (0.6444444, 0.85402435), (0.6625, 0.85402435), (0.6625, 0.81904167), (0.6444444, 0.81904167), (0.6625, 0.85402435), (0.6805555, 0.85402435), (0.6805555, 0.81904167), (0.6625, 0.81904167), (0.6805555, 0.85402435), (0.69861114, 0.85402435), (0.69861114, 0.81904167), (0.6805555, 0.81904167), (0.69861114, 0.85402435), (0.7166667, 0.85402435), (0.7166667, 0.81904167), (0.69861114, 0.81904167), (0.28333333, 0.81904167), (0.3013889, 0.81904167), (0.3013889, 0.78405905), (0.28333333, 0.78405905), (0.3013889, 0.81904167), (0.31944445, 0.81904167), (0.31944445, 0.78405905), (0.3013889, 0.78405905), (0.31944445, 0.81904167), (0.3375, 0.81904167), (0.3375, 0.78405905), (0.31944445, 0.78405905), (0.3375, 0.81904167), (0.35555553, 0.81904167), (0.35555553, 0.78405905), (0.3375, 0.78405905), (0.35555553, 0.81904167), (0.37361112, 0.81904167), (0.37361112, 0.78405905), (0.35555553, 0.78405905), (0.37361112, 0.81904167), (0.39166668, 0.81904167), (0.39166668, 0.78405905), (0.37361112, 0.78405905), (0.39166668, 0.81904167), (0.4097222, 0.81904167), (0.4097222, 0.78405905), (0.39166668, 0.78405905), (0.4097222, 0.81904167), (0.42777777, 0.81904167), (0.42777777, 0.78405905), (0.4097222, 0.78405905), (0.42777777, 0.81904167), (0.44583333, 0.81904167), (0.44583333, 0.78405905), (0.42777777, 0.78405905), (0.44583333, 0.81904167), (0.46388888, 0.81904167), (0.46388888, 0.78405905), (0.44583333, 0.78405905), (0.46388888, 0.81904167), (0.48194444, 0.81904167), (0.48194444, 0.78405905), (0.46388888, 0.78405905), (0.48194444, 0.81904167), (0.5, 0.81904167), (0.5, 0.78405905), (0.48194444, 0.78405905), (0.5, 0.81904167), (0.51805556, 0.81904167), (0.51805556, 0.78405905), (0.5, 0.78405905), (0.51805556, 0.81904167), (0.5361111, 0.81904167), (0.5361111, 0.78405905), (0.51805556, 0.78405905), (0.5361111, 0.81904167), (0.5541667, 0.81904167), (0.5541667, 0.78405905), (0.5361111, 0.78405905), (0.5541667, 0.81904167), (0.57222223, 0.81904167), (0.57222223, 0.78405905), (0.5541667, 0.78405905), (0.57222223, 0.81904167), (0.5902778, 0.81904167), (0.5902778, 0.78405905), (0.57222223, 0.78405905), (0.5902778, 0.81904167), (0.60833335, 0.81904167), (0.60833335, 0.78405905), (0.5902778, 0.78405905), (0.60833335, 0.81904167), (0.6263889, 0.81904167), (0.6263889, 0.78405905), (0.60833335, 0.78405905), (0.6263889, 0.81904167), (0.6444444, 0.81904167), (0.6444444, 0.78405905), (0.6263889, 0.78405905), (0.6444444, 0.81904167), (0.6625, 0.81904167), (0.6625, 0.78405905), (0.6444444, 0.78405905), (0.6625, 0.81904167), (0.6805555, 0.81904167), (0.6805555, 0.78405905), (0.6625, 0.78405905), (0.6805555, 0.81904167), (0.69861114, 0.81904167), (0.69861114, 0.78405905), (0.6805555, 0.78405905), (0.69861114, 0.81904167), (0.7166667, 0.81904167), (0.7166667, 0.78405905), (0.69861114, 0.78405905), (0.28333333, 0.78405905), (0.3013889, 0.78405905), (0.3013889, 0.7490764), (0.28333333, 0.7490764), (0.3013889, 0.78405905), (0.31944445, 0.78405905), (0.31944445, 0.7490764), (0.3013889, 0.7490764), (0.31944445, 0.78405905), (0.3375, 0.78405905), (0.3375, 0.7490764), (0.31944445, 0.7490764), (0.3375, 0.78405905), (0.35555553, 0.78405905), (0.35555553, 0.7490764), (0.3375, 0.7490764), (0.35555553, 0.78405905), (0.37361112, 0.78405905), (0.37361112, 0.7490764), (0.35555553, 0.7490764), (0.37361112, 0.78405905), (0.39166668, 0.78405905), (0.39166668, 0.7490764), (0.37361112, 0.7490764), (0.39166668, 0.78405905), (0.4097222, 0.78405905), (0.4097222, 0.7490764), (0.39166668, 0.7490764), (0.4097222, 0.78405905), (0.42777777, 0.78405905), (0.42777777, 0.7490764), (0.4097222, 0.7490764), (0.42777777, 0.78405905), (0.44583333, 0.78405905), (0.44583333, 0.7490764), (0.42777777, 0.7490764), (0.44583333, 0.78405905), (0.46388888, 0.78405905), (0.46388888, 0.7490764), (0.44583333, 0.7490764), (0.46388888, 0.78405905), (0.48194444, 0.78405905), (0.48194444, 0.7490764), (0.46388888, 0.7490764), (0.48194444, 0.78405905), (0.5, 0.78405905), (0.5, 0.7490764), (0.48194444, 0.7490764), (0.5, 0.78405905), (0.51805556, 0.78405905), (0.51805556, 0.7490764), (0.5, 0.7490764), (0.51805556, 0.78405905), (0.5361111, 0.78405905), (0.5361111, 0.7490764), (0.51805556, 0.7490764), (0.5361111, 0.78405905), (0.5541667, 0.78405905), (0.5541667, 0.7490764), (0.5361111, 0.7490764), (0.5541667, 0.78405905), (0.57222223, 0.78405905), (0.57222223, 0.7490764), (0.5541667, 0.7490764), (0.57222223, 0.78405905), (0.5902778, 0.78405905), (0.5902778, 0.7490764), (0.57222223, 0.7490764), (0.5902778, 0.78405905), (0.60833335, 0.78405905), (0.60833335, 0.7490764), (0.5902778, 0.7490764), (0.60833335, 0.78405905), (0.6263889, 0.78405905), (0.6263889, 0.7490764), (0.60833335, 0.7490764), (0.6263889, 0.78405905), (0.6444444, 0.78405905), (0.6444444, 0.7490764), (0.6263889, 0.7490764), (0.6444444, 0.78405905), (0.6625, 0.78405905), (0.6625, 0.7490764), (0.6444444, 0.7490764), (0.6625, 0.78405905), (0.6805555, 0.78405905), (0.6805555, 0.7490764), (0.6625, 0.7490764), (0.6805555, 0.78405905), (0.69861114, 0.78405905), (0.69861114, 0.7490764), (0.6805555, 0.7490764), (0.69861114, 0.78405905), (0.7166667, 0.78405905), (0.7166667, 0.7490764), (0.69861114, 0.7490764), (0.28333333, 0.7490764), (0.3013889, 0.7490764), (0.3013889, 0.71409374), (0.28333333, 0.71409374), (0.3013889, 0.7490764), (0.31944445, 0.7490764), (0.31944445, 0.71409374), (0.3013889, 0.71409374), (0.31944445, 0.7490764), (0.3375, 0.7490764), (0.3375, 0.71409374), (0.31944445, 0.71409374), (0.3375, 0.7490764), (0.35555553, 0.7490764), (0.35555553, 0.71409374), (0.3375, 0.71409374), (0.35555553, 0.7490764), (0.37361112, 0.7490764), (0.37361112, 0.71409374), (0.35555553, 0.71409374), (0.37361112, 0.7490764), (0.39166668, 0.7490764), (0.39166668, 0.71409374), (0.37361112, 0.71409374), (0.39166668, 0.7490764), (0.4097222, 0.7490764), (0.4097222, 0.71409374), (0.39166668, 0.71409374), (0.4097222, 0.7490764), (0.42777777, 0.7490764), (0.42777777, 0.71409374), (0.4097222, 0.71409374), (0.42777777, 0.7490764), (0.44583333, 0.7490764), (0.44583333, 0.71409374), (0.42777777, 0.71409374), (0.44583333, 0.7490764), (0.46388888, 0.7490764), (0.46388888, 0.71409374), (0.44583333, 0.71409374), (0.46388888, 0.7490764), (0.48194444, 0.7490764), (0.48194444, 0.71409374), (0.46388888, 0.71409374), (0.48194444, 0.7490764), (0.5, 0.7490764), (0.5, 0.71409374), (0.48194444, 0.71409374), (0.5, 0.7490764), (0.51805556, 0.7490764), (0.51805556, 0.71409374), (0.5, 0.71409374), (0.51805556, 0.7490764), (0.5361111, 0.7490764), (0.5361111, 0.71409374), (0.51805556, 0.71409374), (0.5361111, 0.7490764), (0.5541667, 0.7490764), (0.5541667, 0.71409374), (0.5361111, 0.71409374), (0.5541667, 0.7490764), (0.57222223, 0.7490764), (0.57222223, 0.71409374), (0.5541667, 0.71409374), (0.57222223, 0.7490764), (0.5902778, 0.7490764), (0.5902778, 0.71409374), (0.57222223, 0.71409374), (0.5902778, 0.7490764), (0.60833335, 0.7490764), (0.60833335, 0.71409374), (0.5902778, 0.71409374), (0.60833335, 0.7490764), (0.6263889, 0.7490764), (0.6263889, 0.71409374), (0.60833335, 0.71409374), (0.6263889, 0.7490764), (0.6444444, 0.7490764), (0.6444444, 0.71409374), (0.6263889, 0.71409374), (0.6444444, 0.7490764), (0.6625, 0.7490764), (0.6625, 0.71409374), (0.6444444, 0.71409374), (0.6625, 0.7490764), (0.6805555, 0.7490764), (0.6805555, 0.71409374), (0.6625, 0.71409374), (0.6805555, 0.7490764), (0.69861114, 0.7490764), (0.69861114, 0.71409374), (0.6805555, 0.71409374), (0.69861114, 0.7490764), (0.7166667, 0.7490764), (0.7166667, 0.71409374), (0.69861114, 0.71409374), (0.28333333, 0.71409374), (0.3013889, 0.71409374), (0.3013889, 0.6791111), (0.28333333, 0.6791111), (0.3013889, 0.71409374), (0.31944445, 0.71409374), (0.31944445, 0.6791111), (0.3013889, 0.6791111), (0.31944445, 0.71409374), (0.3375, 0.71409374), (0.3375, 0.6791111), (0.31944445, 0.6791111), (0.3375, 0.71409374), (0.35555553, 0.71409374), (0.35555553, 0.6791111), (0.3375, 0.6791111), (0.35555553, 0.71409374), (0.37361112, 0.71409374), (0.37361112, 0.6791111), (0.35555553, 0.6791111), (0.37361112, 0.71409374), (0.39166668, 0.71409374), (0.39166668, 0.6791111), (0.37361112, 0.6791111), (0.39166668, 0.71409374), (0.4097222, 0.71409374), (0.4097222, 0.6791111), (0.39166668, 0.6791111), (0.4097222, 0.71409374), (0.42777777, 0.71409374), (0.42777777, 0.6791111), (0.4097222, 0.6791111), (0.42777777, 0.71409374), (0.44583333, 0.71409374), (0.44583333, 0.6791111), (0.42777777, 0.6791111), (0.44583333, 0.71409374), (0.46388888, 0.71409374), (0.46388888, 0.6791111), (0.44583333, 0.6791111), (0.46388888, 0.71409374), (0.48194444, 0.71409374), (0.48194444, 0.6791111), (0.46388888, 0.6791111), (0.48194444, 0.71409374), (0.5, 0.71409374), (0.5, 0.6791111), (0.48194444, 0.6791111), (0.5, 0.71409374), (0.51805556, 0.71409374), (0.51805556, 0.6791111), (0.5, 0.6791111), (0.51805556, 0.71409374), (0.5361111, 0.71409374), (0.5361111, 0.6791111), (0.51805556, 0.6791111), (0.5361111, 0.71409374), (0.5541667, 0.71409374), (0.5541667, 0.6791111), (0.5361111, 0.6791111), (0.5541667, 0.71409374), (0.57222223, 0.71409374), (0.57222223, 0.6791111), (0.5541667, 0.6791111), (0.57222223, 0.71409374), (0.5902778, 0.71409374), (0.5902778, 0.6791111), (0.57222223, 0.6791111), (0.5902778, 0.71409374), (0.60833335, 0.71409374), (0.60833335, 0.6791111), (0.5902778, 0.6791111), (0.60833335, 0.71409374), (0.6263889, 0.71409374), (0.6263889, 0.6791111), (0.60833335, 0.6791111), (0.6263889, 0.71409374), (0.6444444, 0.71409374), (0.6444444, 0.6791111), (0.6263889, 0.6791111), (0.6444444, 0.71409374), (0.6625, 0.71409374), (0.6625, 0.6791111), (0.6444444, 0.6791111), (0.6625, 0.71409374), (0.6805555, 0.71409374), (0.6805555, 0.6791111), (0.6625, 0.6791111), (0.6805555, 0.71409374), (0.69861114, 0.71409374), (0.69861114, 0.6791111), (0.6805555, 0.6791111), (0.69861114, 0.71409374), (0.7166667, 0.71409374), (0.7166667, 0.6791111), (0.69861114, 0.6791111), (0.28333333, 0.6791111), (0.3013889, 0.6791111), (0.3013889, 0.64412856), (0.28333333, 0.64412856), (0.3013889, 0.6791111), (0.31944445, 0.6791111), (0.31944445, 0.64412856), (0.3013889, 0.64412856), (0.31944445, 0.6791111), (0.3375, 0.6791111), (0.3375, 0.64412856), (0.31944445, 0.64412856), (0.3375, 0.6791111), (0.35555553, 0.6791111), (0.35555553, 0.64412856), (0.3375, 0.64412856), (0.35555553, 0.6791111), (0.37361112, 0.6791111), (0.37361112, 0.64412856), (0.35555553, 0.64412856), (0.37361112, 0.6791111), (0.39166668, 0.6791111), (0.39166668, 0.64412856), (0.37361112, 0.64412856), (0.39166668, 0.6791111), (0.4097222, 0.6791111), (0.4097222, 0.64412856), (0.39166668, 0.64412856), (0.4097222, 0.6791111), (0.42777777, 0.6791111), (0.42777777, 0.64412856), (0.4097222, 0.64412856), (0.42777777, 0.6791111), (0.44583333, 0.6791111), (0.44583333, 0.64412856), (0.42777777, 0.64412856), (0.44583333, 0.6791111), (0.46388888, 0.6791111), (0.46388888, 0.64412856), (0.44583333, 0.64412856), (0.46388888, 0.6791111), (0.48194444, 0.6791111), (0.48194444, 0.64412856), (0.46388888, 0.64412856), (0.48194444, 0.6791111), (0.5, 0.6791111), (0.5, 0.64412856), (0.48194444, 0.64412856), (0.5, 0.6791111), (0.51805556, 0.6791111), (0.51805556, 0.64412856), (0.5, 0.64412856), (0.51805556, 0.6791111), (0.5361111, 0.6791111), (0.5361111, 0.64412856), (0.51805556, 0.64412856), (0.5361111, 0.6791111), (0.5541667, 0.6791111), (0.5541667, 0.64412856), (0.5361111, 0.64412856), (0.5541667, 0.6791111), (0.57222223, 0.6791111), (0.57222223, 0.64412856), (0.5541667, 0.64412856), (0.57222223, 0.6791111), (0.5902778, 0.6791111), (0.5902778, 0.64412856), (0.57222223, 0.64412856), (0.5902778, 0.6791111), (0.60833335, 0.6791111), (0.60833335, 0.64412856), (0.5902778, 0.64412856), (0.60833335, 0.6791111), (0.6263889, 0.6791111), (0.6263889, 0.64412856), (0.60833335, 0.64412856), (0.6263889, 0.6791111), (0.6444444, 0.6791111), (0.6444444, 0.64412856), (0.6263889, 0.64412856), (0.6444444, 0.6791111), (0.6625, 0.6791111), (0.6625, 0.64412856), (0.6444444, 0.64412856), (0.6625, 0.6791111), (0.6805555, 0.6791111), (0.6805555, 0.64412856), (0.6625, 0.64412856), (0.6805555, 0.6791111), (0.69861114, 0.6791111), (0.69861114, 0.64412856), (0.6805555, 0.64412856), (0.69861114, 0.6791111), (0.7166667, 0.6791111), (0.7166667, 0.64412856), (0.69861114, 0.64412856), (0.28333333, 0.64412856), (0.3013889, 0.64412856), (0.3013889, 0.6091458), (0.28333333, 0.6091458), (0.3013889, 0.64412856), (0.31944445, 0.64412856), (0.31944445, 0.6091458), (0.3013889, 0.6091458), (0.31944445, 0.64412856), (0.3375, 0.64412856), (0.3375, 0.6091458), (0.31944445, 0.6091458), (0.3375, 0.64412856), (0.35555553, 0.64412856), (0.35555553, 0.6091458), (0.3375, 0.6091458), (0.35555553, 0.64412856), (0.37361112, 0.64412856), (0.37361112, 0.6091458), (0.35555553, 0.6091458), (0.37361112, 0.64412856), (0.39166668, 0.64412856), (0.39166668, 0.6091458), (0.37361112, 0.6091458), (0.39166668, 0.64412856), (0.4097222, 0.64412856), (0.4097222, 0.6091458), (0.39166668, 0.6091458), (0.4097222, 0.64412856), (0.42777777, 0.64412856), (0.42777777, 0.6091458), (0.4097222, 0.6091458), (0.42777777, 0.64412856), (0.44583333, 0.64412856), (0.44583333, 0.6091458), (0.42777777, 0.6091458), (0.44583333, 0.64412856), (0.46388888, 0.64412856), (0.46388888, 0.6091458), (0.44583333, 0.6091458), (0.46388888, 0.64412856), (0.48194444, 0.64412856), (0.48194444, 0.6091458), (0.46388888, 0.6091458), (0.48194444, 0.64412856), (0.5, 0.64412856), (0.5, 0.6091458), (0.48194444, 0.6091458), (0.5, 0.64412856), (0.51805556, 0.64412856), (0.51805556, 0.6091458), (0.5, 0.6091458), (0.51805556, 0.64412856), (0.5361111, 0.64412856), (0.5361111, 0.6091458), (0.51805556, 0.6091458), (0.5361111, 0.64412856), (0.5541667, 0.64412856), (0.5541667, 0.6091458), (0.5361111, 0.6091458), (0.5541667, 0.64412856), (0.57222223, 0.64412856), (0.57222223, 0.6091458), (0.5541667, 0.6091458), (0.57222223, 0.64412856), (0.5902778, 0.64412856), (0.5902778, 0.6091458), (0.57222223, 0.6091458), (0.5902778, 0.64412856), (0.60833335, 0.64412856), (0.60833335, 0.6091458), (0.5902778, 0.6091458), (0.60833335, 0.64412856), (0.6263889, 0.64412856), (0.6263889, 0.6091458), (0.60833335, 0.6091458), (0.6263889, 0.64412856), (0.6444444, 0.64412856), (0.6444444, 0.6091458), (0.6263889, 0.6091458), (0.6444444, 0.64412856), (0.6625, 0.64412856), (0.6625, 0.6091458), (0.6444444, 0.6091458), (0.6625, 0.64412856), (0.6805555, 0.64412856), (0.6805555, 0.6091458), (0.6625, 0.6091458), (0.6805555, 0.64412856), (0.69861114, 0.64412856), (0.69861114, 0.6091458), (0.6805555, 0.6091458), (0.69861114, 0.64412856), (0.7166667, 0.64412856), (0.7166667, 0.6091458), (0.69861114, 0.6091458), (0.28333333, 0.6091458), (0.3013889, 0.6091458), (0.3013889, 0.5741632), (0.28333333, 0.5741632), (0.3013889, 0.6091458), (0.31944445, 0.6091458), (0.31944445, 0.5741632), (0.3013889, 0.5741632), (0.31944445, 0.6091458), (0.3375, 0.6091458), (0.3375, 0.5741632), (0.31944445, 0.5741632), (0.3375, 0.6091458), (0.35555553, 0.6091458), (0.35555553, 0.5741632), (0.3375, 0.5741632), (0.35555553, 0.6091458), (0.37361112, 0.6091458), (0.37361112, 0.5741632), (0.35555553, 0.5741632), (0.37361112, 0.6091458), (0.39166668, 0.6091458), (0.39166668, 0.5741632), (0.37361112, 0.5741632), (0.39166668, 0.6091458), (0.4097222, 0.6091458), (0.4097222, 0.5741632), (0.39166668, 0.5741632), (0.4097222, 0.6091458), (0.42777777, 0.6091458), (0.42777777, 0.5741632), (0.4097222, 0.5741632), (0.42777777, 0.6091458), (0.44583333, 0.6091458), (0.44583333, 0.5741632), (0.42777777, 0.5741632), (0.44583333, 0.6091458), (0.46388888, 0.6091458), (0.46388888, 0.5741632), (0.44583333, 0.5741632), (0.46388888, 0.6091458), (0.48194444, 0.6091458), (0.48194444, 0.5741632), (0.46388888, 0.5741632), (0.48194444, 0.6091458), (0.5, 0.6091458), (0.5, 0.5741632), (0.48194444, 0.5741632), (0.5, 0.6091458), (0.51805556, 0.6091458), (0.51805556, 0.5741632), (0.5, 0.5741632), (0.51805556, 0.6091458), (0.5361111, 0.6091458), (0.5361111, 0.5741632), (0.51805556, 0.5741632), (0.5361111, 0.6091458), (0.5541667, 0.6091458), (0.5541667, 0.5741632), (0.5361111, 0.5741632), (0.5541667, 0.6091458), (0.57222223, 0.6091458), (0.57222223, 0.5741632), (0.5541667, 0.5741632), (0.57222223, 0.6091458), (0.5902778, 0.6091458), (0.5902778, 0.5741632), (0.57222223, 0.5741632), (0.5902778, 0.6091458), (0.60833335, 0.6091458), (0.60833335, 0.5741632), (0.5902778, 0.5741632), (0.60833335, 0.6091458), (0.6263889, 0.6091458), (0.6263889, 0.5741632), (0.60833335, 0.5741632), (0.6263889, 0.6091458), (0.6444444, 0.6091458), (0.6444444, 0.5741632), (0.6263889, 0.5741632), (0.6444444, 0.6091458), (0.6625, 0.6091458), (0.6625, 0.5741632), (0.6444444, 0.5741632), (0.6625, 0.6091458), (0.6805555, 0.6091458), (0.6805555, 0.5741632), (0.6625, 0.5741632), (0.6805555, 0.6091458), (0.69861114, 0.6091458), (0.69861114, 0.5741632), (0.6805555, 0.5741632), (0.69861114, 0.6091458), (0.7166667, 0.6091458), (0.7166667, 0.5741632), (0.69861114, 0.5741632), (0.28333333, 0.5741632), (0.3013889, 0.5741632), (0.3013889, 0.5391806), (0.28333333, 0.5391806), (0.3013889, 0.5741632), (0.31944445, 0.5741632), (0.31944445, 0.5391806), (0.3013889, 0.5391806), (0.31944445, 0.5741632), (0.3375, 0.5741632), (0.3375, 0.5391806), (0.31944445, 0.5391806), (0.3375, 0.5741632), (0.35555553, 0.5741632), (0.35555553, 0.5391806), (0.3375, 0.5391806), (0.35555553, 0.5741632), (0.37361112, 0.5741632), (0.37361112, 0.5391806), (0.35555553, 0.5391806), (0.37361112, 0.5741632), (0.39166668, 0.5741632), (0.39166668, 0.5391806), (0.37361112, 0.5391806), (0.39166668, 0.5741632), (0.4097222, 0.5741632), (0.4097222, 0.5391806), (0.39166668, 0.5391806), (0.4097222, 0.5741632), (0.42777777, 0.5741632), (0.42777777, 0.5391806), (0.4097222, 0.5391806), (0.42777777, 0.5741632), (0.44583333, 0.5741632), (0.44583333, 0.5391806), (0.42777777, 0.5391806), (0.44583333, 0.5741632), (0.46388888, 0.5741632), (0.46388888, 0.5391806), (0.44583333, 0.5391806), (0.46388888, 0.5741632), (0.48194444, 0.5741632), (0.48194444, 0.5391806), (0.46388888, 0.5391806), (0.48194444, 0.5741632), (0.5, 0.5741632), (0.5, 0.5391806), (0.48194444, 0.5391806), (0.5, 0.5741632), (0.51805556, 0.5741632), (0.51805556, 0.5391806), (0.5, 0.5391806), (0.51805556, 0.5741632), (0.5361111, 0.5741632), (0.5361111, 0.5391806), (0.51805556, 0.5391806), (0.5361111, 0.5741632), (0.5541667, 0.5741632), (0.5541667, 0.5391806), (0.5361111, 0.5391806), (0.5541667, 0.5741632), (0.57222223, 0.5741632), (0.57222223, 0.5391806), (0.5541667, 0.5391806), (0.57222223, 0.5741632), (0.5902778, 0.5741632), (0.5902778, 0.5391806), (0.57222223, 0.5391806), (0.5902778, 0.5741632), (0.60833335, 0.5741632), (0.60833335, 0.5391806), (0.5902778, 0.5391806), (0.60833335, 0.5741632), (0.6263889, 0.5741632), (0.6263889, 0.5391806), (0.60833335, 0.5391806), (0.6263889, 0.5741632), (0.6444444, 0.5741632), (0.6444444, 0.5391806), (0.6263889, 0.5391806), (0.6444444, 0.5741632), (0.6625, 0.5741632), (0.6625, 0.5391806), (0.6444444, 0.5391806), (0.6625, 0.5741632), (0.6805555, 0.5741632), (0.6805555, 0.5391806), (0.6625, 0.5391806), (0.6805555, 0.5741632), (0.69861114, 0.5741632), (0.69861114, 0.5391806), (0.6805555, 0.5391806), (0.69861114, 0.5741632), (0.7166667, 0.5741632), (0.7166667, 0.5391806), (0.69861114, 0.5391806), (0.28333333, 0.5391806), (0.3013889, 0.5391806), (0.3013889, 0.50419796), (0.28333333, 0.50419796), (0.3013889, 0.5391806), (0.31944445, 0.5391806), (0.31944445, 0.50419796), (0.3013889, 0.50419796), (0.31944445, 0.5391806), (0.3375, 0.5391806), (0.3375, 0.50419796), (0.31944445, 0.50419796), (0.3375, 0.5391806), (0.35555553, 0.5391806), (0.35555553, 0.50419796), (0.3375, 0.50419796), (0.35555553, 0.5391806), (0.37361112, 0.5391806), (0.37361112, 0.50419796), (0.35555553, 0.50419796), (0.37361112, 0.5391806), (0.39166668, 0.5391806), (0.39166668, 0.50419796), (0.37361112, 0.50419796), (0.39166668, 0.5391806), (0.4097222, 0.5391806), (0.4097222, 0.50419796), (0.39166668, 0.50419796), (0.4097222, 0.5391806), (0.42777777, 0.5391806), (0.42777777, 0.50419796), (0.4097222, 0.50419796), (0.42777777, 0.5391806), (0.44583333, 0.5391806), (0.44583333, 0.50419796), (0.42777777, 0.50419796), (0.44583333, 0.5391806), (0.46388888, 0.5391806), (0.46388888, 0.50419796), (0.44583333, 0.50419796), (0.46388888, 0.5391806), (0.48194444, 0.5391806), (0.48194444, 0.50419796), (0.46388888, 0.50419796), (0.48194444, 0.5391806), (0.5, 0.5391806), (0.5, 0.50419796), (0.48194444, 0.50419796), (0.5, 0.5391806), (0.51805556, 0.5391806), (0.51805556, 0.50419796), (0.5, 0.50419796), (0.51805556, 0.5391806), (0.5361111, 0.5391806), (0.5361111, 0.50419796), (0.51805556, 0.50419796), (0.5361111, 0.5391806), (0.5541667, 0.5391806), (0.5541667, 0.50419796), (0.5361111, 0.50419796), (0.5541667, 0.5391806), (0.57222223, 0.5391806), (0.57222223, 0.50419796), (0.5541667, 0.50419796), (0.57222223, 0.5391806), (0.5902778, 0.5391806), (0.5902778, 0.50419796), (0.57222223, 0.50419796), (0.5902778, 0.5391806), (0.60833335, 0.5391806), (0.60833335, 0.50419796), (0.5902778, 0.50419796), (0.60833335, 0.5391806), (0.6263889, 0.5391806), (0.6263889, 0.50419796), (0.60833335, 0.50419796), (0.6263889, 0.5391806), (0.6444444, 0.5391806), (0.6444444, 0.50419796), (0.6263889, 0.50419796), (0.6444444, 0.5391806), (0.6625, 0.5391806), (0.6625, 0.50419796), (0.6444444, 0.50419796), (0.6625, 0.5391806), (0.6805555, 0.5391806), (0.6805555, 0.50419796), (0.6625, 0.50419796), (0.6805555, 0.5391806), (0.69861114, 0.5391806), (0.69861114, 0.50419796), (0.6805555, 0.50419796), (0.69861114, 0.5391806), (0.7166667, 0.5391806), (0.7166667, 0.50419796), (0.69861114, 0.50419796), (0.28333333, 0.50419796), (0.3013889, 0.50419796), (0.3013889, 0.46921533), (0.28333333, 0.46921533), (0.3013889, 0.50419796), (0.31944445, 0.50419796), (0.31944445, 0.46921533), (0.3013889, 0.46921533), (0.31944445, 0.50419796), (0.3375, 0.50419796), (0.3375, 0.46921533), (0.31944445, 0.46921533), (0.3375, 0.50419796), (0.35555553, 0.50419796), (0.35555553, 0.46921533), (0.3375, 0.46921533), (0.35555553, 0.50419796), (0.37361112, 0.50419796), (0.37361112, 0.46921533), (0.35555553, 0.46921533), (0.37361112, 0.50419796), (0.39166668, 0.50419796), (0.39166668, 0.46921533), (0.37361112, 0.46921533), (0.39166668, 0.50419796), (0.4097222, 0.50419796), (0.4097222, 0.46921533), (0.39166668, 0.46921533), (0.4097222, 0.50419796), (0.42777777, 0.50419796), (0.42777777, 0.46921533), (0.4097222, 0.46921533), (0.42777777, 0.50419796), (0.44583333, 0.50419796), (0.44583333, 0.46921533), (0.42777777, 0.46921533), (0.44583333, 0.50419796), (0.46388888, 0.50419796), (0.46388888, 0.46921533), (0.44583333, 0.46921533), (0.46388888, 0.50419796), (0.48194444, 0.50419796), (0.48194444, 0.46921533), (0.46388888, 0.46921533), (0.48194444, 0.50419796), (0.5, 0.50419796), (0.5, 0.46921533), (0.48194444, 0.46921533), (0.5, 0.50419796), (0.51805556, 0.50419796), (0.51805556, 0.46921533), (0.5, 0.46921533), (0.51805556, 0.50419796), (0.5361111, 0.50419796), (0.5361111, 0.46921533), (0.51805556, 0.46921533), (0.5361111, 0.50419796), (0.5541667, 0.50419796), (0.5541667, 0.46921533), (0.5361111, 0.46921533), (0.5541667, 0.50419796), (0.57222223, 0.50419796), (0.57222223, 0.46921533), (0.5541667, 0.46921533), (0.57222223, 0.50419796), (0.5902778, 0.50419796), (0.5902778, 0.46921533), (0.57222223, 0.46921533), (0.5902778, 0.50419796), (0.60833335, 0.50419796), (0.60833335, 0.46921533), (0.5902778, 0.46921533), (0.60833335, 0.50419796), (0.6263889, 0.50419796), (0.6263889, 0.46921533), (0.60833335, 0.46921533), (0.6263889, 0.50419796), (0.6444444, 0.50419796), (0.6444444, 0.46921533), (0.6263889, 0.46921533), (0.6444444, 0.50419796), (0.6625, 0.50419796), (0.6625, 0.46921533), (0.6444444, 0.46921533), (0.6625, 0.50419796), (0.6805555, 0.50419796), (0.6805555, 0.46921533), (0.6625, 0.46921533), (0.6805555, 0.50419796), (0.69861114, 0.50419796), (0.69861114, 0.46921533), (0.6805555, 0.46921533), (0.69861114, 0.50419796), (0.7166667, 0.50419796), (0.7166667, 0.46921533), (0.69861114, 0.46921533), (0.28333333, 0.46921533), (0.3013889, 0.46921533), (0.3013889, 0.4342327), (0.28333333, 0.4342327), (0.3013889, 0.46921533), (0.31944445, 0.46921533), (0.31944445, 0.4342327), (0.3013889, 0.4342327), (0.31944445, 0.46921533), (0.3375, 0.46921533), (0.3375, 0.4342327), (0.31944445, 0.4342327), (0.3375, 0.46921533), (0.35555553, 0.46921533), (0.35555553, 0.4342327), (0.3375, 0.4342327), (0.35555553, 0.46921533), (0.37361112, 0.46921533), (0.37361112, 0.4342327), (0.35555553, 0.4342327), (0.37361112, 0.46921533), (0.39166668, 0.46921533), (0.39166668, 0.4342327), (0.37361112, 0.4342327), (0.39166668, 0.46921533), (0.4097222, 0.46921533), (0.4097222, 0.4342327), (0.39166668, 0.4342327), (0.4097222, 0.46921533), (0.42777777, 0.46921533), (0.42777777, 0.4342327), (0.4097222, 0.4342327), (0.42777777, 0.46921533), (0.44583333, 0.46921533), (0.44583333, 0.4342327), (0.42777777, 0.4342327), (0.44583333, 0.46921533), (0.46388888, 0.46921533), (0.46388888, 0.4342327), (0.44583333, 0.4342327), (0.46388888, 0.46921533), (0.48194444, 0.46921533), (0.48194444, 0.4342327), (0.46388888, 0.4342327), (0.48194444, 0.46921533), (0.5, 0.46921533), (0.5, 0.4342327), (0.48194444, 0.4342327), (0.5, 0.46921533), (0.51805556, 0.46921533), (0.51805556, 0.4342327), (0.5, 0.4342327), (0.51805556, 0.46921533), (0.5361111, 0.46921533), (0.5361111, 0.4342327), (0.51805556, 0.4342327), (0.5361111, 0.46921533), (0.5541667, 0.46921533), (0.5541667, 0.4342327), (0.5361111, 0.4342327), (0.5541667, 0.46921533), (0.57222223, 0.46921533), (0.57222223, 0.4342327), (0.5541667, 0.4342327), (0.57222223, 0.46921533), (0.5902778, 0.46921533), (0.5902778, 0.4342327), (0.57222223, 0.4342327), (0.5902778, 0.46921533), (0.60833335, 0.46921533), (0.60833335, 0.4342327), (0.5902778, 0.4342327), (0.60833335, 0.46921533), (0.6263889, 0.46921533), (0.6263889, 0.4342327), (0.60833335, 0.4342327), (0.6263889, 0.46921533), (0.6444444, 0.46921533), (0.6444444, 0.4342327), (0.6263889, 0.4342327), (0.6444444, 0.46921533), (0.6625, 0.46921533), (0.6625, 0.4342327), (0.6444444, 0.4342327), (0.6625, 0.46921533), (0.6805555, 0.46921533), (0.6805555, 0.4342327), (0.6625, 0.4342327), (0.6805555, 0.46921533), (0.69861114, 0.46921533), (0.69861114, 0.4342327), (0.6805555, 0.4342327), (0.69861114, 0.46921533), (0.7166667, 0.46921533), (0.7166667, 0.4342327), (0.69861114, 0.4342327), (0.28333333, 0.4342327), (0.3013889, 0.4342327), (0.3013889, 0.39925003), (0.28333333, 0.39925003), (0.3013889, 0.4342327), (0.31944445, 0.4342327), (0.31944445, 0.39925003), (0.3013889, 0.39925003), (0.31944445, 0.4342327), (0.3375, 0.4342327), (0.3375, 0.39925003), (0.31944445, 0.39925003), (0.3375, 0.4342327), (0.35555553, 0.4342327), (0.35555553, 0.39925003), (0.3375, 0.39925003), (0.35555553, 0.4342327), (0.37361112, 0.4342327), (0.37361112, 0.39925003), (0.35555553, 0.39925003), (0.37361112, 0.4342327), (0.39166668, 0.4342327), (0.39166668, 0.39925003), (0.37361112, 0.39925003), (0.39166668, 0.4342327), (0.4097222, 0.4342327), (0.4097222, 0.39925003), (0.39166668, 0.39925003), (0.4097222, 0.4342327), (0.42777777, 0.4342327), (0.42777777, 0.39925003), (0.4097222, 0.39925003), (0.42777777, 0.4342327), (0.44583333, 0.4342327), (0.44583333, 0.39925003), (0.42777777, 0.39925003), (0.44583333, 0.4342327), (0.46388888, 0.4342327), (0.46388888, 0.39925003), (0.44583333, 0.39925003), (0.46388888, 0.4342327), (0.48194444, 0.4342327), (0.48194444, 0.39925003), (0.46388888, 0.39925003), (0.48194444, 0.4342327), (0.5, 0.4342327), (0.5, 0.39925003), (0.48194444, 0.39925003), (0.5, 0.4342327), (0.51805556, 0.4342327), (0.51805556, 0.39925003), (0.5, 0.39925003), (0.51805556, 0.4342327), (0.5361111, 0.4342327), (0.5361111, 0.39925003), (0.51805556, 0.39925003), (0.5361111, 0.4342327), (0.5541667, 0.4342327), (0.5541667, 0.39925003), (0.5361111, 0.39925003), (0.5541667, 0.4342327), (0.57222223, 0.4342327), (0.57222223, 0.39925003), (0.5541667, 0.39925003), (0.57222223, 0.4342327), (0.5902778, 0.4342327), (0.5902778, 0.39925003), (0.57222223, 0.39925003), (0.5902778, 0.4342327), (0.60833335, 0.4342327), (0.60833335, 0.39925003), (0.5902778, 0.39925003), (0.60833335, 0.4342327), (0.6263889, 0.4342327), (0.6263889, 0.39925003), (0.60833335, 0.39925003), (0.6263889, 0.4342327), (0.6444444, 0.4342327), (0.6444444, 0.39925003), (0.6263889, 0.39925003), (0.6444444, 0.4342327), (0.6625, 0.4342327), (0.6625, 0.39925003), (0.6444444, 0.39925003), (0.6625, 0.4342327), (0.6805555, 0.4342327), (0.6805555, 0.39925003), (0.6625, 0.39925003), (0.6805555, 0.4342327), (0.69861114, 0.4342327), (0.69861114, 0.39925003), (0.6805555, 0.39925003), (0.69861114, 0.4342327), (0.7166667, 0.4342327), (0.7166667, 0.39925003), (0.69861114, 0.39925003)] (
interpolation = "faceVarying"
)
texCoord2f[] primvars:emissionUV = [(0.23552485, 0.46207106), (0.23694484, 0.45838705), (0.21867196, 0.45276937), (0.21873009, 0.45747212), (0.23694484, 0.45838705), (0.24066626, 0.4545901), (0.22096747, 0.4478328), (0.21867196, 0.45276937), (0.24066626, 0.4545901), (0.24724846, 0.45082122), (0.22628973, 0.4428584), (0.22096747, 0.4478328), (0.24724846, 0.45082122), (0.25729614, 0.4472493), (0.23540068, 0.43809742), (0.22628973, 0.4428584), (0.25729614, 0.4472493), (0.27141488, 0.44405353), (0.2491072, 0.43382663), (0.23540068, 0.43809742), (0.27141488, 0.44405353), (0.29014078, 0.44139242), (0.268159, 0.43029872), (0.2491072, 0.43382663), (0.29014078, 0.44139242), (0.31384882, 0.43938208), (0.29311824, 0.42768055), (0.268159, 0.43029872), (0.31384882, 0.43938208), (0.34264544, 0.43806684), (0.3242043, 0.42602533), (0.29311824, 0.42768055), (0.34264544, 0.43806684), (0.3762902, 0.43742633), (0.36118877, 0.42527953), (0.3242043, 0.42602533), (0.3762902, 0.43742633), (0.4141495, 0.4373784), (0.40333664, 0.42529824), (0.36118877, 0.42527953), (0.4141495, 0.4373784), (0.45520452, 0.43780896), (0.44942057, 0.42589006), (0.40333664, 0.42529824), (0.45520452, 0.43780896), (0.49810207, 0.43860164), (0.49780917, 0.42687014), (0.44942057, 0.42589006), (0.49810207, 0.43860164), (0.54125977, 0.43965244), (0.5465601, 0.42809352), (0.49780917, 0.42687014), (0.54125977, 0.43965244), (0.5830314, 0.44090694), (0.59361684, 0.42948768), (0.5465601, 0.42809352), (0.5830314, 0.44090694), (0.62187403, 0.44235536), (0.6370585, 0.43106136), (0.59361684, 0.42948768), (0.62187403, 0.44235536), (0.6565548, 0.4440375), (0.6753414, 0.4328988), (0.6370585, 0.43106136), (0.6565548, 0.4440375), (0.6862751, 0.4460224), (0.7075035, 0.43514863), (0.6753414, 0.4328988), (0.6862751, 0.4460224), (0.71070737, 0.44838592), (0.73322237, 0.43795922), (0.7075035, 0.43514863), (0.71070737, 0.44838592), (0.72994083, 0.45115933), (0.7527487, 0.44141993), (0.73322237, 0.43795922), (0.72994083, 0.45115933), (0.7443882, 0.4543227), (0.7667091, 0.44548726), (0.7527487, 0.44141993), (0.7443882, 0.4543227), (0.7546272, 0.45778304), (0.7759398, 0.4500083), (0.7667091, 0.44548726), (0.7546272, 0.45778304), (0.7613093, 0.46141127), (0.7812944, 0.4547574), (0.7759398, 0.4500083), (0.7613093, 0.46141127), (0.7650775, 0.46506658), (0.78358305, 0.4595041), (0.7812944, 0.4547574), (0.7650775, 0.46506658), (0.7665021, 0.46862152), (0.7834932, 0.46405825), (0.78358305, 0.4595041), (0.21873009, 0.45747212), (0.21867196, 0.45276937), (0.20001219, 0.4460658), (0.20180358, 0.452133), (0.21867196, 0.45276937), (0.22096747, 0.4478328), (0.20055968, 0.43955413), (0.20001219, 0.4460658), (0.22096747, 0.4478328), (0.22628973, 0.4428584), (0.20424113, 0.43286538), (0.20055968, 0.43955413), (0.22628973, 0.4428584), (0.23540068, 0.43809742), (0.21201032, 0.42638093), (0.20424113, 0.43286538), (0.23540068, 0.43809742), (0.2491072, 0.43382663), (0.22493032, 0.42055333), (0.21201032, 0.42638093), (0.2491072, 0.43382663), (0.268159, 0.43029872), (0.24404308, 0.41578484), (0.22493032, 0.42055333), (0.268159, 0.43029872), (0.29311824, 0.42768055), (0.2701716, 0.4123363), (0.24404308, 0.41578484), (0.29311824, 0.42768055), (0.3242043, 0.42602533), (0.3036868, 0.41026297), (0.2701716, 0.4123363), (0.3242043, 0.42602533), (0.36118877, 0.42527953), (0.34434506, 0.40943518), (0.3036868, 0.41026297), (0.36118877, 0.42527953), (0.40333664, 0.42529824), (0.3912565, 0.40960237), (0.34434506, 0.40943518), (0.40333664, 0.42529824), (0.44942057, 0.42589006), (0.44294825, 0.41044924), (0.3912565, 0.40960237), (0.44942057, 0.42589006), (0.49780917, 0.42687014), (0.49746346, 0.41168153), (0.44294825, 0.41044924), (0.49780917, 0.42687014), (0.5465601, 0.42809352), (0.5524789, 0.41309983), (0.49746346, 0.41168153), (0.5465601, 0.42809352), (0.59361684, 0.42948768), (0.6054928, 0.4146161), (0.5524789, 0.41309983), (0.59361684, 0.42948768), (0.6370585, 0.43106136), (0.6541059, 0.4162642), (0.6054928, 0.4146161), (0.6370585, 0.43106136), (0.6753414, 0.4328988), (0.6963666, 0.41819856), (0.6541059, 0.4162642), (0.6753414, 0.4328988), (0.7075035, 0.43514863), (0.7310858, 0.42069867), (0.6963666, 0.41819856), (0.7075035, 0.43514863), (0.73322237, 0.43795922), (0.7579611, 0.42407274), (0.7310858, 0.42069867), (0.73322237, 0.43795922), (0.7527487, 0.44141993), (0.77744496, 0.42849708), (0.7579611, 0.42407274), (0.7527487, 0.44141993), (0.7667091, 0.44548726), (0.7905041, 0.43390864), (0.77744496, 0.42849708), (0.7667091, 0.44548726), (0.7759398, 0.4500083), (0.7982901, 0.44001234), (0.7905041, 0.43390864), (0.7759398, 0.4500083), (0.7812944, 0.4547574), (0.80193204, 0.44640493), (0.7982901, 0.44001234), (0.7812944, 0.4547574), (0.78358305, 0.4595041), (0.8024206, 0.45270464), (0.80193204, 0.44640493), (0.78358305, 0.4595041), (0.7834932, 0.46405825), (0.80057144, 0.45862743), (0.8024206, 0.45270464), (0.20180358, 0.452133), (0.20001219, 0.4460658), (0.18132615, 0.43809727), (0.18509188, 0.4459862), (0.20001219, 0.4460658), (0.20055968, 0.43955413), (0.17978995, 0.42939043), (0.18132615, 0.43809727), (0.20055968, 0.43955413), (0.20424113, 0.43286538), (0.1814003, 0.42022076), (0.17978995, 0.42939043), (0.20424113, 0.43286538), (0.21201032, 0.42638093), (0.18733099, 0.41118154), (0.1814003, 0.42022076), (0.21201032, 0.42638093), (0.22493032, 0.42055333), (0.19898044, 0.40301928), (0.18733099, 0.41118154), (0.22493032, 0.42055333), (0.24404308, 0.41578484), (0.21781096, 0.39644042), (0.19898044, 0.40301928), (0.24404308, 0.41578484), (0.2701716, 0.4123363), (0.24502634, 0.39185658), (0.21781096, 0.39644042), (0.2701716, 0.4123363), (0.3036868, 0.41026297), (0.28117603, 0.3892827), (0.24502634, 0.39185658), (0.3036868, 0.41026297), (0.34434506, 0.40943518), (0.32592344, 0.38843468), (0.28117603, 0.3892827), (0.34434506, 0.40943518), (0.3912565, 0.40960237), (0.37809768, 0.38887602), (0.32592344, 0.38843468), (0.3912565, 0.40960237), (0.44294825, 0.41044924), (0.43590504, 0.39010796), (0.37809768, 0.38887602), (0.44294825, 0.41044924), (0.49746346, 0.41168153), (0.49707046, 0.39167547), (0.43590504, 0.39010796), (0.49746346, 0.41168153), (0.5524789, 0.41309983), (0.55891395, 0.393301), (0.49707046, 0.39167547), (0.5524789, 0.41309983), (0.6054928, 0.4146161), (0.6185021, 0.39490938), (0.55891395, 0.393301), (0.6054928, 0.4146161), (0.6541059, 0.4162642), (0.6728884, 0.3965516), (0.6185021, 0.39490938), (0.6541059, 0.4162642), (0.6963666, 0.41819856), (0.7195733, 0.3984587), (0.6728884, 0.3965516), (0.6963666, 0.41819856), (0.7310858, 0.42069867), (0.7570054, 0.4011305), (0.7195733, 0.3984587), (0.7310858, 0.42069867), (0.7579611, 0.42407274), (0.78485215, 0.40519932), (0.7570054, 0.4011305), (0.7579611, 0.42407274), (0.77744496, 0.42849708), (0.8038819, 0.41104892), (0.78485215, 0.40519932), (0.77744496, 0.42849708), (0.7905041, 0.43390864), (0.81550974, 0.4185369), (0.8038819, 0.41104892), (0.7905041, 0.43390864), (0.7982901, 0.44001234), (0.82134086, 0.42707404), (0.81550974, 0.4185369), (0.7982901, 0.44001234), (0.80193204, 0.44640493), (0.8228417, 0.43592012), (0.82134086, 0.42707404), (0.80193204, 0.44640493), (0.8024206, 0.45270464), (0.82120764, 0.44444332), (0.8228417, 0.43592012), (0.8024206, 0.45270464), (0.80057144, 0.45862743), (0.8173633, 0.45224065), (0.82120764, 0.44444332), (0.18509188, 0.4459862), (0.18132615, 0.43809727), (0.1630847, 0.4287443), (0.1690303, 0.43903527), (0.18132615, 0.43809727), (0.17978995, 0.42939043), (0.15913548, 0.41698533), (0.1630847, 0.4287443), (0.17978995, 0.42939043), (0.1814003, 0.42022076), (0.15819511, 0.4041888), (0.15913548, 0.41698533), (0.1814003, 0.42022076), (0.18733099, 0.41118154), (0.16167726, 0.3912639), (0.15819511, 0.4041888), (0.18733099, 0.41118154), (0.19898044, 0.40301928), (0.17142044, 0.37951556), (0.16167726, 0.3912639), (0.19898044, 0.40301928), (0.21781096, 0.39644042), (0.18951422, 0.37023917), (0.17142044, 0.37951556), (0.21781096, 0.39644042), (0.24502634, 0.39185658), (0.21776454, 0.36412287), (0.18951422, 0.37023917), (0.24502634, 0.39185658), (0.28117603, 0.3892827), (0.25693503, 0.36100507), (0.21776454, 0.36412287), (0.28117603, 0.3892827), (0.32592344, 0.38843468), (0.30636236, 0.3602478), (0.25693503, 0.36100507), (0.32592344, 0.38843468), (0.37809768, 0.38887602), (0.36432394, 0.36113924), (0.30636236, 0.3602478), (0.37809768, 0.38887602), (0.43590504, 0.39010796), (0.4286045, 0.36292136), (0.36432394, 0.36113924), (0.43590504, 0.39010796), (0.49707046, 0.39167547), (0.4966711, 0.36488807), (0.4286045, 0.36292136), (0.49707046, 0.39167547), (0.55891395, 0.393301), (0.56561327, 0.36670664), (0.4966711, 0.36488807), (0.55891395, 0.393301), (0.6185021, 0.39490938), (0.63220036, 0.36838925), (0.56561327, 0.36670664), (0.6185021, 0.39490938), (0.6728884, 0.3965516), (0.6929811, 0.36995298), (0.63220036, 0.36838925), (0.6728884, 0.3965516), (0.7195733, 0.3984587), (0.7447013, 0.37160242), (0.6929811, 0.36995298), (0.7195733, 0.3984587), (0.7570054, 0.4011305), (0.7851302, 0.37420827), (0.7447013, 0.37160242), (0.7570054, 0.4011305), (0.78485215, 0.40519932), (0.81377745, 0.3791114), (0.7851302, 0.37420827), (0.78485215, 0.40519932), (0.8038819, 0.41104892), (0.8318105, 0.3871442), (0.81377745, 0.3791114), (0.8038819, 0.41104892), (0.81550974, 0.4185369), (0.84134316, 0.39796284), (0.8318105, 0.3871442), (0.81550974, 0.4185369), (0.82134086, 0.42707404), (0.8446172, 0.41033524), (0.84134316, 0.39796284), (0.82134086, 0.42707404), (0.8228417, 0.43592012), (0.8435174, 0.4228734), (0.8446172, 0.41033524), (0.8228417, 0.43592012), (0.82120764, 0.44444332), (0.8394566, 0.43456635), (0.8435174, 0.4228734), (0.82120764, 0.44444332), (0.8173633, 0.45224065), (0.83343333, 0.4448886), (0.8394566, 0.43456635), (0.1690303, 0.43903527), (0.1630847, 0.4287443), (0.14588307, 0.41806287), (0.1541402, 0.431432), (0.1630847, 0.4287443), (0.15913548, 0.41698533), (0.13923302, 0.40213066), (0.14588307, 0.41806287), (0.15913548, 0.41698533), (0.15819511, 0.4041888), (0.13523857, 0.38405263), (0.13923302, 0.40213066), (0.15819511, 0.4041888), (0.16167726, 0.3912639), (0.1355193, 0.36514816), (0.13523857, 0.38405263), (0.16167726, 0.3912639), (0.17142044, 0.37951556), (0.14247057, 0.34774113), (0.1355193, 0.36514816), (0.17142044, 0.37951556), (0.18951422, 0.37023917), (0.15916923, 0.33438575), (0.14247057, 0.34774113), (0.18951422, 0.37023917), (0.21776454, 0.36412287), (0.18849434, 0.3263273), (0.15916923, 0.33438575), (0.21776454, 0.36412287), (0.25693503, 0.36100507), (0.23148072, 0.32279366), (0.18849434, 0.3263273), (0.25693503, 0.36100507), (0.30636236, 0.3602478), (0.28652903, 0.32227603), (0.23148072, 0.32279366), (0.30636236, 0.3602478), (0.36432394, 0.36113924), (0.3507878, 0.32375896), (0.28652903, 0.32227603), (0.36432394, 0.36113924), (0.4286045, 0.36292136), (0.421608, 0.32625762), (0.3507878, 0.32375896), (0.4286045, 0.36292136), (0.4966711, 0.36488807), (0.4963848, 0.3286109), (0.421608, 0.32625762), (0.4966711, 0.36488807), (0.56561327, 0.36670664), (0.5721341, 0.33051488), (0.4963848, 0.3286109), (0.56561327, 0.36670664), (0.63220036, 0.36838925), (0.64570534, 0.332358), (0.5721341, 0.33051488), (0.63220036, 0.36838925), (0.6929811, 0.36995298), (0.7134743, 0.33392414), (0.64570534, 0.332358), (0.6929811, 0.36995298), (0.7447013, 0.37160242), (0.77119184, 0.33494624), (0.7134743, 0.33392414), (0.7447013, 0.37160242), (0.7851302, 0.37420827), (0.8152766, 0.3368695), (0.77119184, 0.33494624), (0.7851302, 0.37420827), (0.81377745, 0.3791114), (0.844611, 0.34266633), (0.8152766, 0.3368695), (0.81377745, 0.3791114), (0.8318105, 0.3871442), (0.8609275, 0.3541951), (0.844611, 0.34266633), (0.8318105, 0.3871442), (0.84134316, 0.39796284), (0.8674903, 0.37052435), (0.8609275, 0.3541951), (0.84134316, 0.39796284), (0.8446172, 0.41033524), (0.86748904, 0.3889832), (0.8674903, 0.37052435), (0.8446172, 0.41033524), (0.8435174, 0.4228734), (0.86331654, 0.4070239), (0.86748904, 0.3889832), (0.8435174, 0.4228734), (0.8394566, 0.43456635), (0.856571, 0.42312276), (0.86331654, 0.4070239), (0.8394566, 0.43456635), (0.83343333, 0.4448886), (0.84826213, 0.43672857), (0.856571, 0.42312276), (0.1541402, 0.431432), (0.14588307, 0.41806287), (0.13043866, 0.4064687), (0.14101212, 0.42356017), (0.14588307, 0.41806287), (0.13923302, 0.40213066), (0.1209163, 0.3851047), (0.13043866, 0.4064687), (0.13923302, 0.40213066), (0.13523857, 0.38405263), (0.11339752, 0.35955605), (0.1209163, 0.3851047), (0.13523857, 0.38405263), (0.1355193, 0.36514816), (0.10957857, 0.33150184), (0.11339752, 0.35955605), (0.1355193, 0.36514816), (0.14247057, 0.34774113), (0.11245854, 0.30500084), (0.10957857, 0.33150184), (0.14247057, 0.34774113), (0.15916923, 0.33438575), (0.12669048, 0.28541395), (0.11245854, 0.30500084), (0.15916923, 0.33438575), (0.18849434, 0.3263273), (0.1572919, 0.27531573), (0.12669048, 0.28541395), (0.18849434, 0.3263273), (0.23148072, 0.32279366), (0.20576034, 0.27203712), (0.1572919, 0.27531573), (0.23148072, 0.32279366), (0.28652903, 0.32227603), (0.26795676, 0.27185112), (0.20576034, 0.27203712), (0.28652903, 0.32227603), (0.3507878, 0.32375896), (0.3388051, 0.27380508), (0.26795676, 0.27185112), (0.3507878, 0.32375896), (0.421608, 0.32625762), (0.4157057, 0.27708113), (0.3388051, 0.27380508), (0.421608, 0.32625762), (0.4963848, 0.3286109), (0.49649346, 0.279545), (0.4157057, 0.27708113), (0.4963848, 0.3286109), (0.5721341, 0.33051488), (0.57790697, 0.2811725), (0.49649346, 0.279545), (0.5721341, 0.33051488), (0.64570534, 0.332358), (0.6575294, 0.2835869), (0.57790697, 0.2811725), (0.64570534, 0.332358), (0.7134743, 0.33392414), (0.732693, 0.2857323), (0.6575294, 0.2835869), (0.7134743, 0.33392414), (0.77119184, 0.33494624), (0.79802215, 0.28562707), (0.732693, 0.2857323), (0.77119184, 0.33494624), (0.8152766, 0.3368695), (0.84724987, 0.28546807), (0.79802215, 0.28562707), (0.8152766, 0.3368695), (0.844611, 0.34266633), (0.8773112, 0.29201373), (0.84724987, 0.28546807), (0.844611, 0.34266633), (0.8609275, 0.3541951), (0.8908353, 0.30938148), (0.8773112, 0.29201373), (0.8609275, 0.3541951), (0.8674903, 0.37052435), (0.8932244, 0.33488426), (0.8908353, 0.30938148), (0.8674903, 0.37052435), (0.86748904, 0.3889832), (0.88911223, 0.36279902), (0.8932244, 0.33488426), (0.86748904, 0.3889832), (0.86331654, 0.4070239), (0.8814419, 0.38869193), (0.88911223, 0.36279902), (0.86331654, 0.4070239), (0.856571, 0.42312276), (0.87186337, 0.41057763), (0.8814419, 0.38869193), (0.856571, 0.42312276), (0.84826213, 0.43672857), (0.8612793, 0.42819035), (0.87186337, 0.41057763), (0.14101212, 0.42356017), (0.13043866, 0.4064687), (0.11757387, 0.39495718), (0.13027748, 0.41611317), (0.13043866, 0.4064687), (0.1209163, 0.3851047), (0.105236225, 0.3671657), (0.11757387, 0.39495718), (0.1209163, 0.3851047), (0.11339752, 0.35955605), (0.09392514, 0.33185828), (0.105236225, 0.3671657), (0.11339752, 0.35955605), (0.10957857, 0.33150184), (0.08507946, 0.2904219), (0.09392514, 0.33185828), (0.10957857, 0.33150184), (0.11245854, 0.30500084), (0.08206037, 0.24927273), (0.08507946, 0.2904219), (0.11245854, 0.30500084), (0.12669048, 0.28541395), (0.091927186, 0.2199224), (0.08206037, 0.24927273), (0.12669048, 0.28541395), (0.1572919, 0.27531573), (0.12428518, 0.20874262), (0.091927186, 0.2199224), (0.1572919, 0.27531573), (0.20576034, 0.27203712), (0.18161073, 0.20779301), (0.12428518, 0.20874262), (0.20576034, 0.27203712), (0.26795676, 0.27185112), (0.25307655, 0.2078593), (0.18161073, 0.20779301), (0.26795676, 0.27185112), (0.3388051, 0.27380508), (0.3300337, 0.20956439), (0.25307655, 0.2078593), (0.3388051, 0.27380508), (0.4157057, 0.27708113), (0.41167188, 0.21338002), (0.3300337, 0.20956439), (0.4157057, 0.27708113), (0.49649346, 0.279545), (0.49754202, 0.21501973), (0.41167188, 0.21338002), (0.49649346, 0.279545), (0.57790697, 0.2811725), (0.58239007, 0.21547061), (0.49754202, 0.21501973), (0.57790697, 0.2811725), (0.6575294, 0.2835869), (0.6657478, 0.21947506), (0.58239007, 0.21547061), (0.6575294, 0.2835869), (0.732693, 0.2857323), (0.7479896, 0.22354329), (0.6657478, 0.21947506), (0.732693, 0.2857323), (0.79802215, 0.28562707), (0.8231717, 0.22192736), (0.7479896, 0.22354329), (0.79802215, 0.28562707), (0.84724987, 0.28546807), (0.88068247, 0.21723165), (0.8231717, 0.22192736), (0.84724987, 0.28546807), (0.8773112, 0.29201373), (0.91167, 0.22425015), (0.88068247, 0.21723165), (0.8773112, 0.29201373), (0.8908353, 0.30938148), (0.92069495, 0.25164124), (0.91167, 0.22425015), (0.8908353, 0.30938148), (0.8932244, 0.33488426), (0.91732913, 0.29179195), (0.92069495, 0.25164124), (0.8932244, 0.33488426), (0.88911223, 0.36279902), (0.9082936, 0.33327463), (0.91732913, 0.29179195), (0.88911223, 0.36279902), (0.8814419, 0.38869193), (0.89689165, 0.3693319), (0.9082936, 0.33327463), (0.8814419, 0.38869193), (0.87186337, 0.41057763), (0.8845508, 0.39806038), (0.89689165, 0.3693319), (0.87186337, 0.41057763), (0.8612793, 0.42819035), (0.87188333, 0.42006162), (0.8845508, 0.39806038), (0.13027748, 0.41611317), (0.11757387, 0.39495718), (0.108154476, 0.3852078), (0.12255007, 0.41007897), (0.11757387, 0.39495718), (0.105236225, 0.3671657), (0.09343662, 0.3510653), (0.108154476, 0.3852078), (0.105236225, 0.3671657), (0.09392514, 0.33185828), (0.0785835, 0.30501288), (0.09343662, 0.3510653), (0.09392514, 0.33185828), (0.08507946, 0.2904219), (0.06423556, 0.24646541), (0.0785835, 0.30501288), (0.08507946, 0.2904219), (0.08206037, 0.24927273), (0.053039692, 0.18303585), (0.06423556, 0.24646541), (0.08206037, 0.24927273), (0.091927186, 0.2199224), (0.05505852, 0.13799687), (0.053039692, 0.18303585), (0.091927186, 0.2199224), (0.12428518, 0.20874262), (0.090887204, 0.1275527), (0.05505852, 0.13799687), (0.12428518, 0.20874262), (0.18161073, 0.20779301), (0.16242693, 0.13236186), (0.090887204, 0.1275527), (0.18161073, 0.20779301), (0.25307655, 0.2078593), (0.2443132, 0.13293035), (0.16242693, 0.13236186), (0.25307655, 0.2078593), (0.3300337, 0.20956439), (0.32606506, 0.13342318), (0.2443132, 0.13293035), (0.3300337, 0.20956439), (0.41167188, 0.21338002), (0.4095642, 0.13687101), (0.32606506, 0.13342318), (0.41167188, 0.21338002), (0.49754202, 0.21501973), (0.5004531, 0.1359111), (0.4095642, 0.13687101), (0.49754202, 0.21501973), (0.58239007, 0.21547061), (0.5850501, 0.13421124), (0.5004531, 0.1359111), (0.58239007, 0.21547061), (0.6657478, 0.21947506), (0.66932684, 0.14025825), (0.5850501, 0.13421124), (0.6657478, 0.21947506), (0.7479896, 0.22354329), (0.7568895, 0.14747661), (0.66932684, 0.14025825), (0.7479896, 0.22354329), (0.8231717, 0.22192736), (0.8418157, 0.14518286), (0.7568895, 0.14747661), (0.8231717, 0.22192736), (0.88068247, 0.21723165), (0.91350704, 0.13438416), (0.8418157, 0.14518286), (0.88068247, 0.21723165), (0.91167, 0.22425015), (0.9461602, 0.1416595), (0.91350704, 0.13438416), (0.91167, 0.22425015), (0.92069495, 0.25164124), (0.9482625, 0.18604259), (0.9461602, 0.1416595), (0.92069495, 0.25164124), (0.91732913, 0.29179195), (0.9375834, 0.24725325), (0.9482625, 0.18604259), (0.91732913, 0.29179195), (0.9082936, 0.33327463), (0.92334735, 0.30510023), (0.9375834, 0.24725325), (0.9082936, 0.33327463), (0.89689165, 0.3693319), (0.90849394, 0.3520283), (0.92334735, 0.30510023), (0.89689165, 0.3693319), (0.8845508, 0.39806038), (0.8938148, 0.38744685), (0.90849394, 0.3520283), (0.8845508, 0.39806038), (0.87188333, 0.42006162), (0.8795018, 0.41345197), (0.8938148, 0.38744685), (0.12255007, 0.41007897), (0.108154476, 0.3852078), (0.102956, 0.37926853), (0.11833881, 0.4065185), (0.108154476, 0.3852078), (0.09343662, 0.3510653), (0.086780116, 0.34080124), (0.102956, 0.37926853), (0.09343662, 0.3510653), (0.0785835, 0.30501288), (0.06955979, 0.28670466), (0.086780116, 0.34080124), (0.0785835, 0.30501288), (0.06423556, 0.24646541), (0.050874438, 0.21320166), (0.06955979, 0.28670466), (0.06423556, 0.24646541), (0.053039692, 0.18303585), (0.030865397, 0.12609695), (0.050874438, 0.21320166), (0.053039692, 0.18303585), (0.05505852, 0.13799687), (0.019119745, 0.06215585), (0.030865397, 0.12609695), (0.05505852, 0.13799687), (0.090887204, 0.1275527), (0.06753936, 0.045739654), (0.019119745, 0.06215585), (0.090887204, 0.1275527), (0.16242693, 0.13236186), (0.15151563, 0.04630157), (0.06753936, 0.045739654), (0.16242693, 0.13236186), (0.2443132, 0.13293035), (0.239299, 0.048891272), (0.15151563, 0.04630157), (0.2443132, 0.13293035), (0.32606506, 0.13342318), (0.32579014, 0.04853702), (0.239299, 0.048891272), (0.32606506, 0.13342318), (0.4095642, 0.13687101), (0.4097668, 0.049638677), (0.32579014, 0.04853702), (0.4095642, 0.13687101), (0.5004531, 0.1359111), (0.50354636, 0.046688624), (0.4097668, 0.049638677), (0.5004531, 0.1359111), (0.5850501, 0.13421124), (0.5861563, 0.047448985), (0.50354636, 0.046688624), (0.5850501, 0.13421124), (0.66932684, 0.14025825), (0.6705173, 0.051568896), (0.5861563, 0.047448985), (0.66932684, 0.14025825), (0.7568895, 0.14747661), (0.75948405, 0.05898819), (0.6705173, 0.051568896), (0.7568895, 0.14747661), (0.8418157, 0.14518286), (0.8451956, 0.055759646), (0.75948405, 0.05898819), (0.8418157, 0.14518286), (0.91350704, 0.13438416), (0.9345597, 0.04901887), (0.8451956, 0.055759646), (0.91350704, 0.13438416), (0.9461602, 0.1416595), (0.98111993, 0.05673781), (0.9345597, 0.04901887), (0.9461602, 0.1416595), (0.9482625, 0.18604259), (0.9688281, 0.12932862), (0.98111993, 0.05673781), (0.9482625, 0.18604259), (0.9375834, 0.24725325), (0.95033777, 0.21492618), (0.9688281, 0.12932862), (0.9375834, 0.24725325), (0.92334735, 0.30510023), (0.9321657, 0.28628704), (0.95033777, 0.21492618), (0.92334735, 0.30510023), (0.90849394, 0.3520283), (0.915025, 0.34106976), (0.9321657, 0.28628704), (0.90849394, 0.3520283), (0.8938148, 0.38744685), (0.89892083, 0.3809864), (0.915025, 0.34106976), (0.8938148, 0.38744685), (0.8795018, 0.41345197), (0.88364553, 0.40954393), (0.89892083, 0.3809864), (0.11833881, 0.4065185), (0.102956, 0.37926853), (0.10247376, 0.3786963), (0.11795062, 0.40617996), (0.102956, 0.37926853), (0.086780116, 0.34080124), (0.086156376, 0.33979148), (0.10247376, 0.3786963), (0.086780116, 0.34080124), (0.06955979, 0.28670466), (0.06869708, 0.28484455), (0.086156376, 0.33979148), (0.06955979, 0.28670466), (0.050874438, 0.21320166), (0.049533654, 0.20963389), (0.06869708, 0.28484455), (0.050874438, 0.21320166), (0.030865397, 0.12609695), (0.028333688, 0.11958926), (0.049533654, 0.20963389), (0.030865397, 0.12609695), (0.019119745, 0.06215585), (0.012920969, 0.05184795), (0.028333688, 0.11958926), (0.019119745, 0.06215585), (0.06753936, 0.045739654), (0.0661119, 0.029464781), (0.012920969, 0.05184795), (0.06753936, 0.045739654), (0.15151563, 0.04630157), (0.1511854, 0.027453383), (0.0661119, 0.029464781), (0.15151563, 0.04630157), (0.239299, 0.048891272), (0.23835237, 0.030046446), (0.1511854, 0.027453383), (0.239299, 0.048891272), (0.32579014, 0.04853702), (0.32549816, 0.030999476), (0.23835237, 0.030046446), (0.32579014, 0.04853702), (0.4097668, 0.049638677), (0.4113055, 0.03088092), (0.32549816, 0.030999476), (0.4097668, 0.049638677), (0.50354636, 0.046688624), (0.5023601, 0.028618297), (0.4113055, 0.03088092), (0.50354636, 0.046688624), (0.5861563, 0.047448985), (0.58640754, 0.029645177), (0.5023601, 0.028618297), (0.5861563, 0.047448985), (0.6705173, 0.051568896), (0.67075056, 0.033442006), (0.58640754, 0.029645177), (0.6705173, 0.051568896), (0.75948405, 0.05898819), (0.7587094, 0.039329655), (0.67075056, 0.033442006), (0.75948405, 0.05898819), (0.8451956, 0.055759646), (0.84580845, 0.033975884), (0.7587094, 0.039329655), (0.8451956, 0.055759646), (0.9345597, 0.04901887), (0.934802, 0.03168096), (0.84580845, 0.033975884), (0.9345597, 0.04901887), (0.98111993, 0.05673781), (0.9883326, 0.043248218), (0.934802, 0.03168096), (0.98111993, 0.05673781), (0.9688281, 0.12932862), (0.9712408, 0.12230276), (0.9883326, 0.043248218), (0.9688281, 0.12932862), (0.95033777, 0.21492618), (0.95160383, 0.21151705), (0.9712408, 0.12230276), (0.95033777, 0.21492618), (0.9321657, 0.28628704), (0.9330035, 0.2843982), (0.95160383, 0.21151705), (0.9321657, 0.28628704), (0.915025, 0.34106976), (0.91563725, 0.33999616), (0.9330035, 0.2843982), (0.915025, 0.34106976), (0.89892083, 0.3809864), (0.89939636, 0.3803638), (0.91563725, 0.33999616), (0.89892083, 0.3809864), (0.88364553, 0.40954393), (0.8840266, 0.40917227), (0.89939636, 0.3803638), (0.11795062, 0.40617996), (0.10247376, 0.3786963), (0.106755905, 0.38365182), (0.121413134, 0.40913677), (0.10247376, 0.3786963), (0.086156376, 0.33979148), (0.09165687, 0.34841195), (0.106755905, 0.38365182), (0.086156376, 0.33979148), (0.06869708, 0.28484455), (0.076201186, 0.3003755), (0.09165687, 0.34841195), (0.06869708, 0.28484455), (0.049533654, 0.20963389), (0.06081047, 0.2383339), (0.076201186, 0.3003755), (0.049533654, 0.20963389), (0.028333688, 0.11958926), (0.04775307, 0.16973364), (0.06081047, 0.2383339), (0.028333688, 0.11958926), (0.012920969, 0.05184795), (0.04757852, 0.12087098), (0.04775307, 0.16973364), (0.012920969, 0.05184795), (0.0661119, 0.029464781), (0.08473821, 0.11042619), (0.04757852, 0.12087098), (0.0661119, 0.029464781), (0.1511854, 0.027453383), (0.15953533, 0.11619047), (0.08473821, 0.11042619), (0.1511854, 0.027453383), (0.23835237, 0.030046446), (0.2432612, 0.11702228), (0.15953533, 0.11619047), (0.23835237, 0.030046446), (0.32549816, 0.030999476), (0.32590607, 0.117201135), (0.2432612, 0.11702228), (0.32549816, 0.030999476), (0.4113055, 0.03088092), (0.40926933, 0.12038572), (0.32590607, 0.117201135), (0.4113055, 0.03088092), (0.5023601, 0.028618297), (0.50133765, 0.11873583), (0.40926933, 0.12038572), (0.5023601, 0.028618297), (0.58640754, 0.029645177), (0.58532447, 0.11685814), (0.50133765, 0.11873583), (0.58640754, 0.029645177), (0.67075056, 0.033442006), (0.6696268, 0.12289219), (0.58532447, 0.11685814), (0.67075056, 0.033442006), (0.7587094, 0.039329655), (0.75793374, 0.1307543), (0.6696268, 0.12289219), (0.7587094, 0.039329655), (0.84580845, 0.033975884), (0.84391797, 0.12860946), (0.75793374, 0.1307543), (0.84580845, 0.033975884), (0.934802, 0.03168096), (0.91938967, 0.11703061), (0.84391797, 0.12860946), (0.934802, 0.03168096), (0.9883326, 0.043248218), (0.952899, 0.12416357), (0.91938967, 0.11703061), (0.9883326, 0.043248218), (0.9712408, 0.12230276), (0.95315826, 0.1731327), (0.952899, 0.12416357), (0.9712408, 0.12230276), (0.95160383, 0.21151705), (0.94087183, 0.23924626), (0.95315826, 0.1731327), (0.95160383, 0.21151705), (0.9330035, 0.2843982), (0.92567664, 0.30029973), (0.94087183, 0.23924626), (0.9330035, 0.2843982), (0.91563725, 0.33999616), (0.91024053, 0.349188), (0.92567664, 0.30029973), (0.91563725, 0.33999616), (0.89939636, 0.3803638), (0.8951916, 0.38575464), (0.91024053, 0.349188), (0.89939636, 0.3803638), (0.8840266, 0.40917227), (0.8806212, 0.41241854), (0.8951916, 0.38575464), (0.121413134, 0.40913677), (0.106755905, 0.38365182), (0.11538715, 0.3928018), (0.12847295, 0.41475883), (0.106755905, 0.38365182), (0.09165687, 0.34841195), (0.1025238, 0.36368182), (0.11538715, 0.3928018), (0.09165687, 0.34841195), (0.076201186, 0.3003755), (0.09046021, 0.32622284), (0.1025238, 0.36368182), (0.076201186, 0.3003755), (0.06081047, 0.2383339), (0.080522485, 0.28158268), (0.09046021, 0.32622284), (0.06081047, 0.2383339), (0.04775307, 0.16973364), (0.0760537, 0.23661079), (0.080522485, 0.28158268), (0.04775307, 0.16973364), (0.04757852, 0.12087098), (0.08469894, 0.20467222), (0.0760537, 0.23661079), (0.04757852, 0.12087098), (0.08473821, 0.11042619), (0.11752498, 0.19352524), (0.08469894, 0.20467222), (0.08473821, 0.11042619), (0.15953533, 0.11619047), (0.17723916, 0.1934821), (0.11752498, 0.19352524), (0.15953533, 0.11619047), (0.2432612, 0.11702228), (0.25079298, 0.1935938), (0.17723916, 0.1934821), (0.2432612, 0.11702228), (0.32590607, 0.117201135), (0.3288142, 0.19512092), (0.25079298, 0.1935938), (0.32590607, 0.117201135), (0.40926933, 0.12038572), (0.41112146, 0.1989645), (0.3288142, 0.19512092), (0.40926933, 0.12038572), (0.50133765, 0.11873583), (0.4979391, 0.200239), (0.41112146, 0.1989645), (0.50133765, 0.11873583), (0.58532447, 0.11685814), (0.58308977, 0.2002948), (0.4979391, 0.200239), (0.58532447, 0.11685814), (0.6696268, 0.12289219), (0.66682106, 0.20476535), (0.58308977, 0.2002948), (0.6696268, 0.12289219), (0.75793374, 0.1307543), (0.750317, 0.2094006), (0.66682106, 0.20476535), (0.75793374, 0.1307543), (0.84391797, 0.12860946), (0.8276623, 0.20751053), (0.750317, 0.2094006), (0.84391797, 0.12860946), (0.91938967, 0.11703061), (0.8874354, 0.20159477), (0.8276623, 0.20751053), (0.91938967, 0.11703061), (0.952899, 0.12416357), (0.91864115, 0.20869826), (0.8874354, 0.20159477), (0.952899, 0.12416357), (0.95315826, 0.1731327), (0.92649746, 0.2388234), (0.91864115, 0.20869826), (0.95315826, 0.1731327), (0.94087183, 0.23924626), (0.9217842, 0.2826759), (0.92649746, 0.2388234), (0.94087183, 0.23924626), (0.92567664, 0.30029973), (0.91169846, 0.32731318), (0.9217842, 0.2826759), (0.92567664, 0.30029973), (0.91024053, 0.349188), (0.89956194, 0.36557934), (0.91169846, 0.32731318), (0.91024053, 0.349188), (0.8951916, 0.38575464), (0.88670313, 0.39571476), (0.89956194, 0.36557934), (0.8951916, 0.38575464), (0.8806212, 0.41241854), (0.8736679, 0.4185792), (0.88670313, 0.39571476), (0.12847295, 0.41475883), (0.11538715, 0.3928018), (0.12763183, 0.40411493), (0.13865395, 0.42200997), (0.11538715, 0.3928018), (0.1025238, 0.36368182), (0.11753191, 0.38152555), (0.12763183, 0.40411493), (0.1025238, 0.36368182), (0.09046021, 0.32622284), (0.109264985, 0.35419464), (0.11753191, 0.38152555), (0.09046021, 0.32622284), (0.080522485, 0.28158268), (0.104511015, 0.3238256), (0.109264985, 0.35419464), (0.080522485, 0.28158268), (0.0760537, 0.23661079), (0.10637648, 0.2949219), (0.104511015, 0.3238256), (0.0760537, 0.23661079), (0.08469894, 0.20467222), (0.119923666, 0.27372664), (0.10637648, 0.2949219), (0.08469894, 0.20467222), (0.11752498, 0.19352524), (0.15082496, 0.26328683), (0.119923666, 0.27372664), (0.11752498, 0.19352524), (0.17723916, 0.1934821), (0.20072183, 0.26024228), (0.15082496, 0.26328683), (0.17723916, 0.1934821), (0.25079298, 0.1935938), (0.26459143, 0.260117), (0.20072183, 0.26024228), (0.25079298, 0.1935938), (0.3288142, 0.19512092), (0.3367377, 0.26210064), (0.26459143, 0.260117), (0.3288142, 0.19512092), (0.41112146, 0.1989645), (0.41473117, 0.26551858), (0.3367377, 0.26210064), (0.41112146, 0.1989645), (0.4979391, 0.200239), (0.49660426, 0.26792246), (0.41473117, 0.26551858), (0.4979391, 0.200239), (0.58308977, 0.2002948), (0.5789204, 0.26940846), (0.49660426, 0.26792246), (0.58308977, 0.2002948), (0.66682106, 0.20476535), (0.65952456, 0.2720397), (0.5789204, 0.26940846), (0.66682106, 0.20476535), (0.750317, 0.2094006), (0.7361633, 0.27444172), (0.65952456, 0.2720397), (0.750317, 0.2094006), (0.8276623, 0.20751053), (0.8032832, 0.2740495), (0.7361633, 0.27444172), (0.8276623, 0.20751053), (0.8874354, 0.20159477), (0.8538434, 0.2732075), (0.8032832, 0.2740495), (0.8874354, 0.20159477), (0.91864115, 0.20869826), (0.8840696, 0.27986613), (0.8538434, 0.2732075), (0.91864115, 0.20869826), (0.92649746, 0.2388234), (0.896859, 0.29882815), (0.8840696, 0.27986613), (0.92649746, 0.2388234), (0.9217842, 0.2826759), (0.8982292, 0.32676902), (0.896859, 0.29882815), (0.9217842, 0.2826759), (0.91169846, 0.32731318), (0.8931895, 0.35706615), (0.8982292, 0.32676902), (0.91169846, 0.32731318), (0.89956194, 0.36557934), (0.88478386, 0.3848296), (0.8931895, 0.35706615), (0.89956194, 0.36557934), (0.88670313, 0.39571476), (0.8746347, 0.4080228), (0.88478386, 0.3848296), (0.88670313, 0.39571476), (0.8736679, 0.4185792), (0.86361384, 0.4265014), (0.8746347, 0.4080228), (0.13865395, 0.42200997), (0.12763183, 0.40411493), (0.14262852, 0.41579476), (0.15135385, 0.429862), (0.12763183, 0.40411493), (0.11753191, 0.38152555), (0.13541271, 0.39887822), (0.14262852, 0.41579476), (0.11753191, 0.38152555), (0.109264985, 0.35419464), (0.13074699, 0.37949437), (0.13541271, 0.39887822), (0.109264985, 0.35419464), (0.104511015, 0.3238256), (0.13028388, 0.35905045), (0.13074699, 0.37949437), (0.104511015, 0.3238256), (0.10637648, 0.2949219), (0.13653883, 0.34015602), (0.13028388, 0.35905045), (0.10637648, 0.2949219), (0.119923666, 0.27372664), (0.15284927, 0.32575852), (0.13653883, 0.34015602), (0.119923666, 0.27372664), (0.15082496, 0.26328683), (0.18240722, 0.31727895), (0.15284927, 0.32575852), (0.15082496, 0.26328683), (0.20072183, 0.26024228), (0.22631593, 0.31371367), (0.18240722, 0.31727895), (0.20072183, 0.26024228), (0.26459143, 0.260117), (0.2826493, 0.3132597), (0.22631593, 0.31371367), (0.26459143, 0.260117), (0.3367377, 0.26210064), (0.34821698, 0.3148617), (0.2826493, 0.3132597), (0.3367377, 0.26210064), (0.41473117, 0.26551858), (0.42031142, 0.31751692), (0.34821698, 0.3148617), (0.41473117, 0.26551858), (0.49660426, 0.26792246), (0.49636188, 0.31992915), (0.42031142, 0.31751692), (0.49660426, 0.26792246), (0.5789204, 0.26940846), (0.5733689, 0.32181963), (0.49636188, 0.31992915), (0.5789204, 0.26940846), (0.65952456, 0.2720397), (0.6482604, 0.3237263), (0.5733689, 0.32181963), (0.65952456, 0.2720397), (0.7361633, 0.27444172), (0.7174932, 0.3253392), (0.6482604, 0.3237263), (0.7361633, 0.27444172), (0.8032832, 0.2740495), (0.77657485, 0.32617798), (0.7174932, 0.3253392), (0.8032832, 0.2740495), (0.8538434, 0.2732075), (0.82153094, 0.32783195), (0.77657485, 0.32617798), (0.8538434, 0.2732075), (0.8840696, 0.27986613), (0.8510027, 0.33379796), (0.82153094, 0.32783195), (0.8840696, 0.27986613), (0.896859, 0.29882815), (0.86686033, 0.34626135), (0.8510027, 0.33379796), (0.896859, 0.29882815), (0.8982292, 0.32676902), (0.8726985, 0.3640748), (0.86686033, 0.34626135), (0.8982292, 0.32676902), (0.8931895, 0.35706615), (0.87194586, 0.38411933), (0.8726985, 0.3640748), (0.8931895, 0.35706615), (0.88478386, 0.3848296), (0.86710817, 0.40353054), (0.87194586, 0.38411933), (0.88478386, 0.3848296), (0.8746347, 0.4080228), (0.85979944, 0.42067593), (0.86710817, 0.40353054), (0.8746347, 0.4080228), (0.86361384, 0.4265014), (0.85102785, 0.43503103), (0.85979944, 0.42067593), (0.15135385, 0.429862), (0.14262852, 0.41579476), (0.15954062, 0.42670846), (0.16594054, 0.437559), (0.14262852, 0.41579476), (0.13541271, 0.39887822), (0.15507044, 0.41420963), (0.15954062, 0.42670846), (0.13541271, 0.39887822), (0.13074699, 0.37949437), (0.15356086, 0.40050885), (0.15507044, 0.41420963), (0.13074699, 0.37949437), (0.13028388, 0.35905045), (0.15646751, 0.38658547), (0.15356086, 0.40050885), (0.13028388, 0.35905045), (0.13653883, 0.34015602), (0.1657333, 0.37390622), (0.15646751, 0.38658547), (0.13653883, 0.34015602), (0.15284927, 0.32575852), (0.18360968, 0.3639438), (0.1657333, 0.37390622), (0.15284927, 0.32575852), (0.18240722, 0.31727895), (0.21206766, 0.3574679), (0.18360968, 0.3639438), (0.18240722, 0.31727895), (0.22631593, 0.31371367), (0.25191826, 0.35424754), (0.21206766, 0.3574679), (0.22631593, 0.31371367), (0.2826493, 0.3132597), (0.30238, 0.35352755), (0.25191826, 0.35424754), (0.2826493, 0.3132597), (0.34821698, 0.3148617), (0.36156264, 0.35452864), (0.30238, 0.35352755), (0.34821698, 0.3148617), (0.42031142, 0.31751692), (0.4271584, 0.3564427), (0.36156264, 0.35452864), (0.42031142, 0.31751692), (0.49636188, 0.31992915), (0.49659812, 0.3584924), (0.4271584, 0.3564427), (0.49636188, 0.31992915), (0.5733689, 0.32181963), (0.56694925, 0.36034226), (0.49659812, 0.3584924), (0.5733689, 0.32181963), (0.6482604, 0.3237263), (0.63495386, 0.3620423), (0.56694925, 0.36034226), (0.6482604, 0.3237263), (0.7174932, 0.3253392), (0.6970898, 0.36359146), (0.63495386, 0.3620423), (0.7174932, 0.3253392), (0.77657485, 0.32617798), (0.74991554, 0.36514977), (0.6970898, 0.36359146), (0.77657485, 0.32617798), (0.82153094, 0.32783195), (0.79100484, 0.36768547), (0.74991554, 0.36514977), (0.82153094, 0.32783195), (0.8510027, 0.33379796), (0.81979316, 0.37276712), (0.79100484, 0.36768547), (0.8510027, 0.33379796), (0.86686033, 0.34626135), (0.83755076, 0.38137156), (0.81979316, 0.37276712), (0.86686033, 0.34626135), (0.8726985, 0.3640748), (0.8465679, 0.39307857), (0.83755076, 0.38137156), (0.8726985, 0.3640748), (0.87194586, 0.38411933), (0.8492475, 0.40645432), (0.8465679, 0.39307857), (0.87194586, 0.38411933), (0.86710817, 0.40353054), (0.8475676, 0.4199276), (0.8492475, 0.40645432), (0.86710817, 0.40353054), (0.85979944, 0.42067593), (0.84298694, 0.432395), (0.8475676, 0.4199276), (0.85979944, 0.42067593), (0.85102785, 0.43503103), (0.8365135, 0.44331107), (0.84298694, 0.432395), (0.16594054, 0.437559), (0.15954062, 0.42670846), (0.177625, 0.43633902), (0.18181099, 0.44465685), (0.15954062, 0.42670846), (0.15507044, 0.41420963), (0.1756324, 0.4271004), (0.177625, 0.43633902), (0.15507044, 0.41420963), (0.15356086, 0.40050885), (0.17677149, 0.41731012), (0.1756324, 0.4271004), (0.15356086, 0.40050885), (0.15646751, 0.38658547), (0.18226537, 0.4076191), (0.17677149, 0.41731012), (0.15646751, 0.38658547), (0.1657333, 0.37390622), (0.19359103, 0.398862), (0.18226537, 0.4076191), (0.1657333, 0.37390622), (0.18360968, 0.3639438), (0.21231528, 0.39182663), (0.19359103, 0.398862), (0.18360968, 0.3639438), (0.21206766, 0.3574679), (0.23973924, 0.38696954), (0.21231528, 0.39182663), (0.21206766, 0.3574679), (0.25191826, 0.35424754), (0.27645397, 0.38428754), (0.23973924, 0.38696954), (0.25191826, 0.35424754), (0.30238, 0.35352755), (0.32208198, 0.3834489), (0.27645397, 0.38428754), (0.30238, 0.35352755), (0.36156264, 0.35452864), (0.3753717, 0.38396442), (0.32208198, 0.3834489), (0.36156264, 0.35452864), (0.4271584, 0.3564427), (0.43445268, 0.38529366), (0.3753717, 0.38396442), (0.4271584, 0.3564427), (0.49659812, 0.3584924), (0.49698922, 0.3869356), (0.43445268, 0.38529366), (0.49659812, 0.3584924), (0.56694925, 0.36034226), (0.56024444, 0.38860315), (0.49698922, 0.3869356), (0.56694925, 0.36034226), (0.63495386, 0.3620423), (0.6212077, 0.39022544), (0.56024444, 0.38860315), (0.63495386, 0.3620423), (0.6970898, 0.36359146), (0.67682165, 0.39185578), (0.6212077, 0.39022544), (0.6970898, 0.36359146), (0.74991554, 0.36514977), (0.72445774, 0.39373446), (0.67682165, 0.39185578), (0.74991554, 0.36514977), (0.79100484, 0.36768547), (0.7624598, 0.39642063), (0.72445774, 0.39373446), (0.79100484, 0.36768547), (0.81979316, 0.37276712), (0.79047906, 0.4006461), (0.7624598, 0.39642063), (0.81979316, 0.37276712), (0.83755076, 0.38137156), (0.8093549, 0.40685663), (0.79047906, 0.4006461), (0.83755076, 0.38137156), (0.8465679, 0.39307857), (0.8206258, 0.41488895), (0.8093549, 0.40685663), (0.8465679, 0.39307857), (0.8492475, 0.40645432), (0.82599497, 0.42405778), (0.8206258, 0.41488895), (0.8492475, 0.40645432), (0.8475676, 0.4199276), (0.8270126, 0.4335275), (0.82599497, 0.42405778), (0.8475676, 0.4199276), (0.84298694, 0.432395), (0.82491773, 0.44259995), (0.8270126, 0.4335275), (0.84298694, 0.432395), (0.8365135, 0.44331107), (0.8206481, 0.45084438), (0.82491773, 0.44259995), (0.18181099, 0.44465685), (0.177625, 0.43633902), (0.19626385, 0.44457778), (0.19843103, 0.4509696), (0.177625, 0.43633902), (0.1756324, 0.4271004), (0.19642216, 0.4376857), (0.19626385, 0.44457778), (0.1756324, 0.4271004), (0.17677149, 0.41731012), (0.19972536, 0.43057203), (0.19642216, 0.4376857), (0.17677149, 0.41731012), (0.18226537, 0.4076191), (0.20716944, 0.42365554), (0.19972536, 0.43057203), (0.18226537, 0.4076191), (0.19359103, 0.398862), (0.21987762, 0.4174339), (0.20716944, 0.42365554), (0.19359103, 0.398862), (0.21231528, 0.39182663), (0.2389644, 0.41235712), (0.21987762, 0.4174339), (0.21231528, 0.39182663), (0.23973924, 0.38696954), (0.26531717, 0.40870994), (0.2389644, 0.41235712), (0.23973924, 0.38696954), (0.27645397, 0.38428754), (0.29933825, 0.4065411), (0.26531717, 0.40870994), (0.27645397, 0.38428754), (0.32208198, 0.3834489), (0.34077704, 0.40570304), (0.29933825, 0.4065411), (0.32208198, 0.3834489), (0.3753717, 0.38396442), (0.38870105, 0.40591228), (0.34077704, 0.40570304), (0.3753717, 0.38396442), (0.43445268, 0.38529366), (0.44157892, 0.40682486), (0.38870105, 0.40591228), (0.43445268, 0.38529366), (0.49698922, 0.3869356), (0.49738708, 0.4081194), (0.44157892, 0.40682486), (0.49698922, 0.3869356), (0.56024444, 0.38860315), (0.5537301, 0.409577), (0.49738708, 0.4081194), (0.56024444, 0.38860315), (0.6212077, 0.39022544), (0.60801333, 0.41111454), (0.5537301, 0.409577), (0.6212077, 0.39022544), (0.67682165, 0.39185578), (0.6577311, 0.41276842), (0.60801333, 0.41111454), (0.67682165, 0.39185578), (0.72445774, 0.39373446), (0.7008404, 0.4147113), (0.6577311, 0.41276842), (0.72445774, 0.39373446), (0.7624598, 0.39642063), (0.73608935, 0.41725525), (0.7008404, 0.4147113), (0.7624598, 0.39642063), (0.79047906, 0.4006461), (0.7631676, 0.42075518), (0.73608935, 0.41725525), (0.79047906, 0.4006461), (0.8093549, 0.40685663), (0.7826014, 0.42542255), (0.7631676, 0.42075518), (0.8093549, 0.40685663), (0.8206258, 0.41488895), (0.7954171, 0.43117645), (0.7826014, 0.42542255), (0.8206258, 0.41488895), (0.82599497, 0.42405778), (0.80285615, 0.43768534), (0.7954171, 0.43117645), (0.82599497, 0.42405778), (0.8270126, 0.4335275), (0.80610555, 0.444493), (0.80285615, 0.43768534), (0.8270126, 0.4335275), (0.82491773, 0.44259995), (0.80619735, 0.4511758), (0.80610555, 0.444493), (0.82491773, 0.44259995), (0.8206481, 0.45084438), (0.80396354, 0.4574277), (0.80619735, 0.4511758), (0.19843103, 0.4509696), (0.19626385, 0.44457778), (0.21496122, 0.4515209), (0.21534613, 0.45646626), (0.19626385, 0.44457778), (0.19642216, 0.4376857), (0.21693264, 0.44630983), (0.21496122, 0.4515209), (0.19642216, 0.4376857), (0.19972536, 0.43057203), (0.22195894, 0.4410398), (0.21693264, 0.44630983), (0.19972536, 0.43057203), (0.20716944, 0.42365554), (0.23083745, 0.43598452), (0.22195894, 0.4410398), (0.20716944, 0.42365554), (0.21987762, 0.4174339), (0.24441878, 0.43144888), (0.23083745, 0.43598452), (0.21987762, 0.4174339), (0.2389644, 0.41235712), (0.26350754, 0.42770734), (0.24441878, 0.43144888), (0.2389644, 0.41235712), (0.26531717, 0.40870994), (0.28870708, 0.4249436), (0.26350754, 0.42770734), (0.26531717, 0.40870994), (0.29933825, 0.4065411), (0.32026622, 0.4232111), (0.28870708, 0.4249436), (0.29933825, 0.4065411), (0.34077704, 0.40570304), (0.35795644, 0.42244533), (0.32026622, 0.4232111), (0.34077704, 0.40570304), (0.38870105, 0.40591228), (0.40101907, 0.4224869), (0.35795644, 0.42244533), (0.38870105, 0.40591228), (0.44157892, 0.40682486), (0.44818014, 0.4231202), (0.40101907, 0.4224869), (0.44157892, 0.40682486), (0.49738708, 0.4081194), (0.49774447, 0.42414534), (0.44818014, 0.4231202), (0.49738708, 0.4081194), (0.5537301, 0.409577), (0.5476944, 0.42540556), (0.49774447, 0.42414534), (0.5537301, 0.409577), (0.60801333, 0.41111454), (0.5958913, 0.4268269), (0.5476944, 0.42540556), (0.60801333, 0.41111454), (0.6577311, 0.41276842), (0.6403205, 0.4284201), (0.5958913, 0.4268269), (0.6577311, 0.41276842), (0.7008404, 0.4147113), (0.6793683, 0.43028492), (0.6403205, 0.4284201), (0.7008404, 0.4147113), (0.73608935, 0.41725525), (0.71203136, 0.4325861), (0.6793683, 0.43028492), (0.73608935, 0.41725525), (0.7631676, 0.42075518), (0.7379936, 0.43550083), (0.71203136, 0.4325861), (0.7631676, 0.42075518), (0.7826014, 0.42542255), (0.7575395, 0.4391248), (0.7379936, 0.43550083), (0.7826014, 0.42542255), (0.7954171, 0.43117645), (0.77135915, 0.4434191), (0.7575395, 0.4391248), (0.7954171, 0.43117645), (0.80285615, 0.43768534), (0.78033465, 0.44820777), (0.77135915, 0.4434191), (0.80285615, 0.43768534), (0.80610555, 0.444493), (0.78538173, 0.45323634), (0.78033465, 0.44820777), (0.80610555, 0.444493), (0.80619735, 0.4511758), (0.7873346, 0.45825124), (0.78538173, 0.45323634), (0.80619735, 0.4511758), (0.80396354, 0.4574277), (0.7869127, 0.46304452), (0.7873346, 0.45825124), (0.21534613, 0.45646626), (0.21496122, 0.4515209), (0.2333345, 0.45734152), (0.23219068, 0.46120557), (0.21496122, 0.4515209), (0.21693264, 0.44630983), (0.2367968, 0.45334575), (0.2333345, 0.45734152), (0.21693264, 0.44630983), (0.22195894, 0.4410398), (0.24315426, 0.4493671), (0.2367968, 0.45334575), (0.22195894, 0.4410398), (0.23083745, 0.43598452), (0.25304297, 0.4455893), (0.24315426, 0.4493671), (0.23083745, 0.43598452), (0.24441878, 0.43144888), (0.26710546, 0.44220796), (0.25304297, 0.4455893), (0.24441878, 0.43144888), (0.26350754, 0.42770734), (0.2859144, 0.43939537), (0.26710546, 0.44220796), (0.26350754, 0.42770734), (0.28870708, 0.4249436), (0.30987847, 0.43727896), (0.2859144, 0.43939537), (0.28870708, 0.4249436), (0.32026622, 0.4232111), (0.33912343, 0.43590033), (0.30987847, 0.43727896), (0.32026622, 0.4232111), (0.35795644, 0.42244533), (0.3734106, 0.43523803), (0.33912343, 0.43590033), (0.35795644, 0.42244533), (0.40101907, 0.4224869), (0.41209027, 0.43519822), (0.3734106, 0.43523803), (0.40101907, 0.4224869), (0.44818014, 0.4231202), (0.4541058, 0.4356575), (0.41209027, 0.43519822), (0.44818014, 0.4231202), (0.49774447, 0.42414534), (0.49804813, 0.43648157), (0.4541058, 0.4356575), (0.49774447, 0.42414534), (0.5476944, 0.42540556), (0.54226846, 0.43756464), (0.49804813, 0.43648157), (0.5476944, 0.42540556), (0.5958913, 0.4268269), (0.58504146, 0.43884736), (0.54226846, 0.43756464), (0.5958913, 0.4268269), (0.6403205, 0.4284201), (0.6247616, 0.44032416), (0.58504146, 0.43884736), (0.6403205, 0.4284201), (0.6793683, 0.43028492), (0.66013545, 0.44204032), (0.6247616, 0.44032416), (0.6793683, 0.43028492), (0.71203136, 0.4325861), (0.6903342, 0.4440773), (0.66013545, 0.44204032), (0.71203136, 0.4325861), (0.7379936, 0.43550083), (0.71503127, 0.4465233), (0.6903342, 0.4440773), (0.7379936, 0.43550083), (0.7575395, 0.4391248), (0.73434794, 0.44941726), (0.71503127, 0.4465233), (0.7575395, 0.4391248), (0.77135915, 0.4434191), (0.74872684, 0.45273617), (0.73434794, 0.44941726), (0.77135915, 0.4434191), (0.78033465, 0.44820777), (0.75879234, 0.4563753), (0.74872684, 0.45273617), (0.78033465, 0.44820777), (0.78538173, 0.45323634), (0.76524127, 0.46019694), (0.75879234, 0.4563753), (0.78538173, 0.45323634), (0.7873346, 0.45825124), (0.7687349, 0.464041), (0.76524127, 0.46019694), (0.7873346, 0.45825124), (0.7869127, 0.46304452), (0.76987827, 0.4677719), (0.7687349, 0.464041), (0.23219068, 0.46120557), (0.2333345, 0.45734152), (0.25110206, 0.46222198), (0.24867927, 0.4652764), (0.2333345, 0.45734152), (0.2367968, 0.45334575), (0.2557531, 0.45911407), (0.25110206, 0.46222198), (0.2367968, 0.45334575), (0.24315426, 0.4493671), (0.2631063, 0.4560599), (0.2557531, 0.45911407), (0.24315426, 0.4493671), (0.25304297, 0.4455893), (0.27365857, 0.45318103), (0.2631063, 0.4560599), (0.25304297, 0.4455893), (0.26710546, 0.44220796), (0.28789103, 0.45061168), (0.27365857, 0.45318103), (0.26710546, 0.44220796), (0.2859144, 0.43939537), (0.30621073, 0.4484638), (0.28789103, 0.45061168), (0.2859144, 0.43939537), (0.30987847, 0.43727896), (0.32887924, 0.44682515), (0.30621073, 0.4484638), (0.30987847, 0.43727896), (0.33912343, 0.43590033), (0.3559303, 0.4457316), (0.32887924, 0.44682515), (0.33912343, 0.43590033), (0.3734106, 0.43523803), (0.3871185, 0.44517776), (0.3559303, 0.4457316), (0.3734106, 0.43523803), (0.41209027, 0.43519822), (0.4218768, 0.44511214), (0.3871185, 0.44517776), (0.41209027, 0.43519822), (0.4541058, 0.4356575), (0.4593212, 0.4454592), (0.4218768, 0.44511214), (0.4541058, 0.4356575), (0.49804813, 0.43648157), (0.4983007, 0.44613564), (0.4593212, 0.4454592), (0.49804813, 0.43648157), (0.54226846, 0.43756464), (0.5374829, 0.44706735), (0.4983007, 0.44613564), (0.54226846, 0.43756464), (0.58504146, 0.43884736), (0.5754866, 0.4482063), (0.5374829, 0.44706735), (0.58504146, 0.43884736), (0.6247616, 0.44032416), (0.6110323, 0.44953766), (0.5754866, 0.4482063), (0.6247616, 0.44032416), (0.66013545, 0.44204032), (0.6430856, 0.45107973), (0.6110323, 0.44953766), (0.66013545, 0.44204032), (0.6903342, 0.4440773), (0.6709436, 0.4528646), (0.6430856, 0.45107973), (0.6903342, 0.4440773), (0.71503127, 0.4465233), (0.6942793, 0.4549314), (0.6709436, 0.4528646), (0.71503127, 0.4465233), (0.73434794, 0.44941726), (0.71310526, 0.45729235), (0.6942793, 0.4549314), (0.73434794, 0.44941726), (0.74872684, 0.45273617), (0.727694, 0.45992914), (0.71310526, 0.45729235), (0.74872684, 0.45273617), (0.75879234, 0.4563753), (0.7384812, 0.46278197), (0.727694, 0.45992914), (0.75879234, 0.4563753), (0.76524127, 0.46019694), (0.7459779, 0.4657632), (0.7384812, 0.46278197), (0.76524127, 0.46019694), (0.7687349, 0.464041), (0.7507066, 0.46877685), (0.7459779, 0.4657632), (0.7687349, 0.464041), (0.76987827, 0.4677719), (0.75316757, 0.4717293), (0.7507066, 0.46877685), (0.24867927, 0.4652764), (0.25110206, 0.46222198), (0.26806954, 0.46633777), (0.26460254, 0.46877524), (0.25110206, 0.46222198), (0.2557531, 0.45911407), (0.2736399, 0.463887), (0.26806954, 0.46633777), (0.2557531, 0.45911407), (0.2631063, 0.4560599), (0.28169984, 0.46150216), (0.2736399, 0.463887), (0.2631063, 0.4560599), (0.27365857, 0.45318103), (0.2926336, 0.4592747), (0.28169984, 0.46150216), (0.27365857, 0.45318103), (0.28789103, 0.45061168), (0.3067982, 0.45728928), (0.2926336, 0.4592747), (0.28789103, 0.45061168), (0.30621073, 0.4484638), (0.32447582, 0.45562795), (0.3067982, 0.45728928), (0.30621073, 0.4484638), (0.32887924, 0.44682515), (0.3458179, 0.45434764), (0.32447582, 0.45562795), (0.32887924, 0.44682515), (0.3559303, 0.4457316), (0.37080023, 0.45347992), (0.3458179, 0.45434764), (0.3559303, 0.4457316), (0.3871185, 0.44517776), (0.39917248, 0.45302948), (0.37080023, 0.45347992), (0.3871185, 0.44517776), (0.4218768, 0.44511214), (0.4304404, 0.45296413), (0.39917248, 0.45302948), (0.4218768, 0.44511214), (0.4593212, 0.4454592), (0.46386594, 0.45324218), (0.4304404, 0.45296413), (0.4593212, 0.4454592), (0.4983007, 0.44613564), (0.49850798, 0.45380628), (0.46386594, 0.45324218), (0.4983007, 0.44613564), (0.5374829, 0.44706735), (0.5332998, 0.4546076), (0.49850798, 0.45380628), (0.5374829, 0.44706735), (0.5754866, 0.4482063), (0.5671426, 0.45561185), (0.5332998, 0.4546076), (0.5754866, 0.4482063), (0.6110323, 0.44953766), (0.5990145, 0.4567949), (0.5671426, 0.45561185), (0.6110323, 0.44953766), (0.6430856, 0.45107973), (0.6280689, 0.45815918), (0.5990145, 0.4567949), (0.6430856, 0.45107973), (0.6709436, 0.4528646), (0.65372294, 0.45971394), (0.6280689, 0.45815918), (0.6709436, 0.4528646), (0.6942793, 0.4549314), (0.6756575, 0.46147105), (0.65372294, 0.45971394), (0.6942793, 0.4549314), (0.71310526, 0.45729235), (0.693812, 0.46343157), (0.6756575, 0.46147105), (0.71310526, 0.45729235), (0.727694, 0.45992914), (0.7083406, 0.46557578), (0.693812, 0.46343157), (0.727694, 0.45992914), (0.7384812, 0.46278197), (0.7195383, 0.46786758), (0.7083406, 0.46557578), (0.7384812, 0.46278197), (0.7459779, 0.4657632), (0.7277764, 0.47024795), (0.7195383, 0.46786758), (0.7459779, 0.4657632), (0.7507066, 0.46877685), (0.7334674, 0.47265923), (0.7277764, 0.47024795), (0.7507066, 0.46877685), (0.75316757, 0.4717293), (0.73700315, 0.4750386), (0.7334674, 0.47265923), (0.26460254, 0.46877524), (0.26806954, 0.46633777), (0.28410763, 0.46982375), (0.2798131, 0.4717883), (0.26806954, 0.46633777), (0.2736399, 0.463887), (0.290366, 0.46787012), (0.28410763, 0.46982375), (0.2736399, 0.463887), (0.28169984, 0.46150216), (0.2988932, 0.46598616), (0.290366, 0.46787012), (0.28169984, 0.46150216), (0.2926336, 0.4592747), (0.3099856, 0.4642351), (0.2988932, 0.46598616), (0.2926336, 0.4592747), (0.3067982, 0.45728928), (0.3239014, 0.46268168), (0.3099856, 0.4642351), (0.3067982, 0.45728928), (0.32447582, 0.45562795), (0.34083018, 0.46138057), (0.3239014, 0.46268168), (0.32447582, 0.45562795), (0.3458179, 0.45434764), (0.3608493, 0.46037376), (0.34083018, 0.46138057), (0.3458179, 0.45434764), (0.37080023, 0.45347992), (0.3838949, 0.45968774), (0.3608493, 0.46037376), (0.37080023, 0.45347992), (0.39917248, 0.45302948), (0.40971982, 0.45932695), (0.3838949, 0.45968774), (0.39917248, 0.45302948), (0.4304404, 0.45296413), (0.4378934, 0.45927447), (0.40971982, 0.45932695), (0.4304404, 0.45296413), (0.46386594, 0.45324218), (0.46780336, 0.45950744), (0.4378934, 0.45927447), (0.46386594, 0.45324218), (0.49850798, 0.45380628), (0.4986823, 0.45998806), (0.46780336, 0.45950744), (0.49850798, 0.45380628), (0.5332998, 0.4546076), (0.5296698, 0.46068075), (0.4986823, 0.45998806), (0.5332998, 0.4546076), (0.5671426, 0.45561185), (0.55989355, 0.46155927), (0.5296698, 0.46068075), (0.5671426, 0.45561185), (0.5990145, 0.4567949), (0.5885321, 0.46260062), (0.55989355, 0.46155927), (0.5990145, 0.4567949), (0.6280689, 0.45815918), (0.61489826, 0.4637988), (0.5885321, 0.46260062), (0.6280689, 0.45815918), (0.65372294, 0.45971394), (0.63849473, 0.4651503), (0.61489826, 0.4637988), (0.65372294, 0.45971394), (0.6756575, 0.46147105), (0.6590264, 0.46665302), (0.63849473, 0.4651503), (0.6756575, 0.46147105), (0.693812, 0.46343157), (0.67639565, 0.46830064), (0.6590264, 0.46665302), (0.693812, 0.46343157), (0.7083406, 0.46557578), (0.6906637, 0.4700788), (0.67639565, 0.46830064), (0.7083406, 0.46557578), (0.7195383, 0.46786758), (0.7020267, 0.4719559), (0.6906637, 0.4700788), (0.7195383, 0.46786758), (0.7277764, 0.47024795), (0.7107553, 0.4738989), (0.7020267, 0.4719559), (0.7277764, 0.47024795), (0.7334674, 0.47265923), (0.71715814, 0.47586566), (0.7107553, 0.4738989), (0.7334674, 0.47265923), (0.73700315, 0.4750386), (0.7215501, 0.4778128), (0.71715814, 0.47586566), (0.2798131, 0.4717883), (0.28410763, 0.46982375), (0.2991512, 0.47279963), (0.29421654, 0.47439817), (0.28410763, 0.46982375), (0.290366, 0.46787012), (0.30589572, 0.4712257), (0.2991512, 0.47279963), (0.290366, 0.46787012), (0.2988932, 0.46598616), (0.31469458, 0.46971866), (0.30589572, 0.4712257), (0.2988932, 0.46598616), (0.3099856, 0.4642351), (0.3257705, 0.46832785), (0.31469458, 0.46971866), (0.3099856, 0.4642351), (0.3239014, 0.46268168), (0.33930865, 0.4670989), (0.3257705, 0.46832785), (0.3239014, 0.46268168), (0.34083018, 0.46138057), (0.35542744, 0.4660705), (0.33930865, 0.4670989), (0.34083018, 0.46138057), (0.3608493, 0.46037376), (0.3741546, 0.46527362), (0.35542744, 0.4660705), (0.3608493, 0.46037376), (0.3838949, 0.45968774), (0.39539832, 0.4647312), (0.3741546, 0.46527362), (0.3838949, 0.45968774), (0.40971982, 0.45932695), (0.41892684, 0.46444625), (0.39539832, 0.4647312), (0.40971982, 0.45932695), (0.4378934, 0.45927447), (0.4443676, 0.46441367), (0.41892684, 0.46444625), (0.4378934, 0.45927447), (0.46780336, 0.45950744), (0.47120816, 0.46461707), (0.4443676, 0.46441367), (0.46780336, 0.45950744), (0.4986823, 0.45998806), (0.49882448, 0.46503204), (0.47120816, 0.46461707), (0.4986823, 0.45998806), (0.5296698, 0.46068075), (0.52652305, 0.46563414), (0.49882448, 0.46503204), (0.5296698, 0.46068075), (0.55989355, 0.46155927), (0.5536028, 0.46639943), (0.52652305, 0.46563414), (0.55989355, 0.46155927), (0.5885321, 0.46260062), (0.579404, 0.4673137), (0.5536028, 0.46639943), (0.5885321, 0.46260062), (0.61489826, 0.4637988), (0.60336703, 0.4683619), (0.579404, 0.4673137), (0.61489826, 0.4637988), (0.63849473, 0.4651503), (0.6250652, 0.46953702), (0.60336703, 0.4683619), (0.63849473, 0.4651503), (0.6590264, 0.46665302), (0.64422625, 0.47082743), (0.6250652, 0.46953702), (0.6590264, 0.46665302), (0.67639565, 0.46830064), (0.6607383, 0.47222817), (0.64422625, 0.47082743), (0.67639565, 0.46830064), (0.6906637, 0.4700788), (0.67460704, 0.4737233), (0.6607383, 0.47222817), (0.6906637, 0.4700788), (0.7020267, 0.4719559), (0.685949, 0.47528887), (0.67460704, 0.4737233), (0.7020267, 0.4719559), (0.7107553, 0.4738989), (0.69495803, 0.4769005), (0.685949, 0.47528887), (0.7107553, 0.4738989), (0.71715814, 0.47586566), (0.7018616, 0.47853178), (0.69495803, 0.4769005), (0.71715814, 0.47586566), (0.7215501, 0.4778128), (0.7069108, 0.4801504), (0.7018616, 0.47853178), (0.29421654, 0.47439817), (0.2991512, 0.47279963), (0.31317115, 0.47535542), (0.3077637, 0.4766672), (0.2991512, 0.47279963), (0.30589572, 0.4712257), (0.32023767, 0.47407702), (0.31317115, 0.47535542), (0.30589572, 0.4712257), (0.31469458, 0.46971866), (0.32915285, 0.47286174), (0.32023767, 0.47407702), (0.31469458, 0.46971866), (0.3257705, 0.46832785), (0.34007892, 0.47174567), (0.32915285, 0.47286174), (0.3257705, 0.46832785), (0.33930865, 0.4670989), (0.35314798, 0.4707625), (0.34007892, 0.47174567), (0.33930865, 0.4670989), (0.35542744, 0.4660705), (0.36842862, 0.46994478), (0.35314798, 0.4707625), (0.35542744, 0.4660705), (0.3741546, 0.46527362), (0.38591224, 0.46931186), (0.36842862, 0.46994478), (0.3741546, 0.46527362), (0.39539832, 0.4647312), (0.40549475, 0.4688833), (0.38591224, 0.46931186), (0.39539832, 0.4647312), (0.41892684, 0.46444625), (0.4269626, 0.46866247), (0.40549475, 0.4688833), (0.41892684, 0.46444625), (0.4443676, 0.46441367), (0.4499935, 0.4686515), (0.4269626, 0.46866247), (0.4443676, 0.46441367), (0.47120816, 0.46461707), (0.47415674, 0.46883327), (0.4499935, 0.4686515), (0.47120816, 0.46461707), (0.49882448, 0.46503204), (0.49894428, 0.4691961), (0.47415674, 0.46883327), (0.49882448, 0.46503204), (0.52652305, 0.46563414), (0.5237951, 0.46972176), (0.49894428, 0.4691961), (0.52652305, 0.46563414), (0.5536028, 0.46639943), (0.54814565, 0.47039178), (0.5237951, 0.46972176), (0.5536028, 0.46639943), (0.579404, 0.4673137), (0.57145745, 0.47119048), (0.54814565, 0.47039178), (0.579404, 0.4673137), (0.60336703, 0.4683619), (0.5932684, 0.4721056), (0.57145745, 0.47119048), (0.60336703, 0.4683619), (0.6250652, 0.46953702), (0.6132253, 0.47312692), (0.5932684, 0.4721056), (0.6250652, 0.46953702), (0.64422625, 0.47082743), (0.63108075, 0.47424275), (0.6132253, 0.47312692), (0.64422625, 0.47082743), (0.6607383, 0.47222817), (0.64670503, 0.47544348), (0.63108075, 0.47424275), (0.6607383, 0.47222817), (0.67460704, 0.4737233), (0.66007525, 0.47671297), (0.64670503, 0.47544348), (0.67460704, 0.4737233), (0.685949, 0.47528887), (0.67125714, 0.47803703), (0.66007525, 0.47671297), (0.685949, 0.47528887), (0.69495803, 0.4769005), (0.6803808, 0.47939476), (0.67125714, 0.47803703), (0.69495803, 0.4769005), (0.7018616, 0.47853178), (0.6876107, 0.48076674), (0.6803808, 0.47939476), (0.7018616, 0.47853178), (0.7069108, 0.4801504), (0.693145, 0.48212957), (0.6876107, 0.48076674)] (
interpolation = "faceVarying"
)
texCoord2f[] primvars:st = [(-0.5416666, -0.5416666), (-0.4548611, -0.5416666), (-0.4548611, -0.45486104), (-0.5416666, -0.45486104), (-0.4548611, -0.5416666), (-0.36805552, -0.5416666), (-0.36805552, -0.45486104), (-0.4548611, -0.45486104), (-0.36805552, -0.5416666), (-0.28125, -0.5416666), (-0.28125, -0.45486104), (-0.36805552, -0.45486104), (-0.28125, -0.5416666), (-0.19444448, -0.5416666), (-0.19444448, -0.45486104), (-0.28125, -0.45486104), (-0.19444448, -0.5416666), (-0.107638896, -0.5416666), (-0.107638896, -0.45486104), (-0.19444448, -0.45486104), (-0.107638896, -0.5416666), (-0.020833313, -0.5416666), (-0.020833313, -0.45486104), (-0.107638896, -0.45486104), (-0.020833313, -0.5416666), (0.06597221, -0.5416666), (0.06597221, -0.45486104), (-0.020833313, -0.45486104), (0.06597221, -0.5416666), (0.15277776, -0.5416666), (0.15277776, -0.45486104), (0.06597221, -0.45486104), (0.15277776, -0.5416666), (0.23958334, -0.5416666), (0.23958334, -0.45486104), (0.15277776, -0.45486104), (0.23958334, -0.5416666), (0.32638887, -0.5416666), (0.32638887, -0.45486104), (0.23958334, -0.45486104), (0.32638887, -0.5416666), (0.4131944, -0.5416666), (0.4131944, -0.45486104), (0.32638887, -0.45486104), (0.4131944, -0.5416666), (0.5, -0.5416666), (0.5, -0.45486104), (0.4131944, -0.45486104), (0.5, -0.5416666), (0.5868055, -0.5416666), (0.5868055, -0.45486104), (0.5, -0.45486104), (0.5868055, -0.5416666), (0.67361104, -0.5416666), (0.67361104, -0.45486104), (0.5868055, -0.45486104), (0.67361104, -0.5416666), (0.7604166, -0.5416666), (0.7604166, -0.45486104), (0.67361104, -0.45486104), (0.7604166, -0.5416666), (0.8472222, -0.5416666), (0.8472222, -0.45486104), (0.7604166, -0.45486104), (0.8472222, -0.5416666), (0.9340277, -0.5416666), (0.9340277, -0.45486104), (0.8472222, -0.45486104), (0.9340277, -0.5416666), (1.0208333, -0.5416666), (1.0208333, -0.45486104), (0.9340277, -0.45486104), (1.0208333, -0.5416666), (1.1076388, -0.5416666), (1.1076388, -0.45486104), (1.0208333, -0.45486104), (1.1076388, -0.5416666), (1.1944444, -0.5416666), (1.1944444, -0.45486104), (1.1076388, -0.45486104), (1.1944444, -0.5416666), (1.28125, -0.5416666), (1.28125, -0.45486104), (1.1944444, -0.45486104), (1.28125, -0.5416666), (1.3680553, -0.5416666), (1.3680553, -0.45486104), (1.28125, -0.45486104), (1.3680553, -0.5416666), (1.454861, -0.5416666), (1.454861, -0.45486104), (1.3680553, -0.45486104), (1.454861, -0.5416666), (1.5416666, -0.5416666), (1.5416666, -0.45486104), (1.454861, -0.45486104), (-0.5416666, -0.45486104), (-0.4548611, -0.45486104), (-0.4548611, -0.36805552), (-0.5416666, -0.36805552), (-0.4548611, -0.45486104), (-0.36805552, -0.45486104), (-0.36805552, -0.36805552), (-0.4548611, -0.36805552), (-0.36805552, -0.45486104), (-0.28125, -0.45486104), (-0.28125, -0.36805552), (-0.36805552, -0.36805552), (-0.28125, -0.45486104), (-0.19444448, -0.45486104), (-0.19444448, -0.36805552), (-0.28125, -0.36805552), (-0.19444448, -0.45486104), (-0.107638896, -0.45486104), (-0.107638896, -0.36805552), (-0.19444448, -0.36805552), (-0.107638896, -0.45486104), (-0.020833313, -0.45486104), (-0.020833313, -0.36805552), (-0.107638896, -0.36805552), (-0.020833313, -0.45486104), (0.06597221, -0.45486104), (0.06597221, -0.36805552), (-0.020833313, -0.36805552), (0.06597221, -0.45486104), (0.15277776, -0.45486104), (0.15277776, -0.36805552), (0.06597221, -0.36805552), (0.15277776, -0.45486104), (0.23958334, -0.45486104), (0.23958334, -0.36805552), (0.15277776, -0.36805552), (0.23958334, -0.45486104), (0.32638887, -0.45486104), (0.32638887, -0.36805552), (0.23958334, -0.36805552), (0.32638887, -0.45486104), (0.4131944, -0.45486104), (0.4131944, -0.36805552), (0.32638887, -0.36805552), (0.4131944, -0.45486104), (0.5, -0.45486104), (0.5, -0.36805552), (0.4131944, -0.36805552), (0.5, -0.45486104), (0.5868055, -0.45486104), (0.5868055, -0.36805552), (0.5, -0.36805552), (0.5868055, -0.45486104), (0.67361104, -0.45486104), (0.67361104, -0.36805552), (0.5868055, -0.36805552), (0.67361104, -0.45486104), (0.7604166, -0.45486104), (0.7604166, -0.36805552), (0.67361104, -0.36805552), (0.7604166, -0.45486104), (0.8472222, -0.45486104), (0.8472222, -0.36805552), (0.7604166, -0.36805552), (0.8472222, -0.45486104), (0.9340277, -0.45486104), (0.9340277, -0.36805552), (0.8472222, -0.36805552), (0.9340277, -0.45486104), (1.0208333, -0.45486104), (1.0208333, -0.36805552), (0.9340277, -0.36805552), (1.0208333, -0.45486104), (1.1076388, -0.45486104), (1.1076388, -0.36805552), (1.0208333, -0.36805552), (1.1076388, -0.45486104), (1.1944444, -0.45486104), (1.1944444, -0.36805552), (1.1076388, -0.36805552), (1.1944444, -0.45486104), (1.28125, -0.45486104), (1.28125, -0.36805552), (1.1944444, -0.36805552), (1.28125, -0.45486104), (1.3680553, -0.45486104), (1.3680553, -0.36805552), (1.28125, -0.36805552), (1.3680553, -0.45486104), (1.454861, -0.45486104), (1.454861, -0.36805552), (1.3680553, -0.36805552), (1.454861, -0.45486104), (1.5416666, -0.45486104), (1.5416666, -0.36805552), (1.454861, -0.36805552), (-0.5416666, -0.36805552), (-0.4548611, -0.36805552), (-0.4548611, -0.28124994), (-0.5416666, -0.28124994), (-0.4548611, -0.36805552), (-0.36805552, -0.36805552), (-0.36805552, -0.28124994), (-0.4548611, -0.28124994), (-0.36805552, -0.36805552), (-0.28125, -0.36805552), (-0.28125, -0.28124994), (-0.36805552, -0.28124994), (-0.28125, -0.36805552), (-0.19444448, -0.36805552), (-0.19444448, -0.28124994), (-0.28125, -0.28124994), (-0.19444448, -0.36805552), (-0.107638896, -0.36805552), (-0.107638896, -0.28124994), (-0.19444448, -0.28124994), (-0.107638896, -0.36805552), (-0.020833313, -0.36805552), (-0.020833313, -0.28124994), (-0.107638896, -0.28124994), (-0.020833313, -0.36805552), (0.06597221, -0.36805552), (0.06597221, -0.28124994), (-0.020833313, -0.28124994), (0.06597221, -0.36805552), (0.15277776, -0.36805552), (0.15277776, -0.28124994), (0.06597221, -0.28124994), (0.15277776, -0.36805552), (0.23958334, -0.36805552), (0.23958334, -0.28124994), (0.15277776, -0.28124994), (0.23958334, -0.36805552), (0.32638887, -0.36805552), (0.32638887, -0.28124994), (0.23958334, -0.28124994), (0.32638887, -0.36805552), (0.4131944, -0.36805552), (0.4131944, -0.28124994), (0.32638887, -0.28124994), (0.4131944, -0.36805552), (0.5, -0.36805552), (0.5, -0.28124994), (0.4131944, -0.28124994), (0.5, -0.36805552), (0.5868055, -0.36805552), (0.5868055, -0.28124994), (0.5, -0.28124994), (0.5868055, -0.36805552), (0.67361104, -0.36805552), (0.67361104, -0.28124994), (0.5868055, -0.28124994), (0.67361104, -0.36805552), (0.7604166, -0.36805552), (0.7604166, -0.28124994), (0.67361104, -0.28124994), (0.7604166, -0.36805552), (0.8472222, -0.36805552), (0.8472222, -0.28124994), (0.7604166, -0.28124994), (0.8472222, -0.36805552), (0.9340277, -0.36805552), (0.9340277, -0.28124994), (0.8472222, -0.28124994), (0.9340277, -0.36805552), (1.0208333, -0.36805552), (1.0208333, -0.28124994), (0.9340277, -0.28124994), (1.0208333, -0.36805552), (1.1076388, -0.36805552), (1.1076388, -0.28124994), (1.0208333, -0.28124994), (1.1076388, -0.36805552), (1.1944444, -0.36805552), (1.1944444, -0.28124994), (1.1076388, -0.28124994), (1.1944444, -0.36805552), (1.28125, -0.36805552), (1.28125, -0.28124994), (1.1944444, -0.28124994), (1.28125, -0.36805552), (1.3680553, -0.36805552), (1.3680553, -0.28124994), (1.28125, -0.28124994), (1.3680553, -0.36805552), (1.454861, -0.36805552), (1.454861, -0.28124994), (1.3680553, -0.28124994), (1.454861, -0.36805552), (1.5416666, -0.36805552), (1.5416666, -0.28124994), (1.454861, -0.28124994), (-0.5416666, -0.28124994), (-0.4548611, -0.28124994), (-0.4548611, -0.19444448), (-0.5416666, -0.19444448), (-0.4548611, -0.28124994), (-0.36805552, -0.28124994), (-0.36805552, -0.19444448), (-0.4548611, -0.19444448), (-0.36805552, -0.28124994), (-0.28125, -0.28124994), (-0.28125, -0.19444448), (-0.36805552, -0.19444448), (-0.28125, -0.28124994), (-0.19444448, -0.28124994), (-0.19444448, -0.19444448), (-0.28125, -0.19444448), (-0.19444448, -0.28124994), (-0.107638896, -0.28124994), (-0.107638896, -0.19444448), (-0.19444448, -0.19444448), (-0.107638896, -0.28124994), (-0.020833313, -0.28124994), (-0.020833313, -0.19444448), (-0.107638896, -0.19444448), (-0.020833313, -0.28124994), (0.06597221, -0.28124994), (0.06597221, -0.19444448), (-0.020833313, -0.19444448), (0.06597221, -0.28124994), (0.15277776, -0.28124994), (0.15277776, -0.19444448), (0.06597221, -0.19444448), (0.15277776, -0.28124994), (0.23958334, -0.28124994), (0.23958334, -0.19444448), (0.15277776, -0.19444448), (0.23958334, -0.28124994), (0.32638887, -0.28124994), (0.32638887, -0.19444448), (0.23958334, -0.19444448), (0.32638887, -0.28124994), (0.4131944, -0.28124994), (0.4131944, -0.19444448), (0.32638887, -0.19444448), (0.4131944, -0.28124994), (0.5, -0.28124994), (0.5, -0.19444448), (0.4131944, -0.19444448), (0.5, -0.28124994), (0.5868055, -0.28124994), (0.5868055, -0.19444448), (0.5, -0.19444448), (0.5868055, -0.28124994), (0.67361104, -0.28124994), (0.67361104, -0.19444448), (0.5868055, -0.19444448), (0.67361104, -0.28124994), (0.7604166, -0.28124994), (0.7604166, -0.19444448), (0.67361104, -0.19444448), (0.7604166, -0.28124994), (0.8472222, -0.28124994), (0.8472222, -0.19444448), (0.7604166, -0.19444448), (0.8472222, -0.28124994), (0.9340277, -0.28124994), (0.9340277, -0.19444448), (0.8472222, -0.19444448), (0.9340277, -0.28124994), (1.0208333, -0.28124994), (1.0208333, -0.19444448), (0.9340277, -0.19444448), (1.0208333, -0.28124994), (1.1076388, -0.28124994), (1.1076388, -0.19444448), (1.0208333, -0.19444448), (1.1076388, -0.28124994), (1.1944444, -0.28124994), (1.1944444, -0.19444448), (1.1076388, -0.19444448), (1.1944444, -0.28124994), (1.28125, -0.28124994), (1.28125, -0.19444448), (1.1944444, -0.19444448), (1.28125, -0.28124994), (1.3680553, -0.28124994), (1.3680553, -0.19444448), (1.28125, -0.19444448), (1.3680553, -0.28124994), (1.454861, -0.28124994), (1.454861, -0.19444448), (1.3680553, -0.19444448), (1.454861, -0.28124994), (1.5416666, -0.28124994), (1.5416666, -0.19444448), (1.454861, -0.19444448), (-0.5416666, -0.19444448), (-0.4548611, -0.19444448), (-0.4548611, -0.107638896), (-0.5416666, -0.107638896), (-0.4548611, -0.19444448), (-0.36805552, -0.19444448), (-0.36805552, -0.107638896), (-0.4548611, -0.107638896), (-0.36805552, -0.19444448), (-0.28125, -0.19444448), (-0.28125, -0.107638896), (-0.36805552, -0.107638896), (-0.28125, -0.19444448), (-0.19444448, -0.19444448), (-0.19444448, -0.107638896), (-0.28125, -0.107638896), (-0.19444448, -0.19444448), (-0.107638896, -0.19444448), (-0.107638896, -0.107638896), (-0.19444448, -0.107638896), (-0.107638896, -0.19444448), (-0.020833313, -0.19444448), (-0.020833313, -0.107638896), (-0.107638896, -0.107638896), (-0.020833313, -0.19444448), (0.06597221, -0.19444448), (0.06597221, -0.107638896), (-0.020833313, -0.107638896), (0.06597221, -0.19444448), (0.15277776, -0.19444448), (0.15277776, -0.107638896), (0.06597221, -0.107638896), (0.15277776, -0.19444448), (0.23958334, -0.19444448), (0.23958334, -0.107638896), (0.15277776, -0.107638896), (0.23958334, -0.19444448), (0.32638887, -0.19444448), (0.32638887, -0.107638896), (0.23958334, -0.107638896), (0.32638887, -0.19444448), (0.4131944, -0.19444448), (0.4131944, -0.107638896), (0.32638887, -0.107638896), (0.4131944, -0.19444448), (0.5, -0.19444448), (0.5, -0.107638896), (0.4131944, -0.107638896), (0.5, -0.19444448), (0.5868055, -0.19444448), (0.5868055, -0.107638896), (0.5, -0.107638896), (0.5868055, -0.19444448), (0.67361104, -0.19444448), (0.67361104, -0.107638896), (0.5868055, -0.107638896), (0.67361104, -0.19444448), (0.7604166, -0.19444448), (0.7604166, -0.107638896), (0.67361104, -0.107638896), (0.7604166, -0.19444448), (0.8472222, -0.19444448), (0.8472222, -0.107638896), (0.7604166, -0.107638896), (0.8472222, -0.19444448), (0.9340277, -0.19444448), (0.9340277, -0.107638896), (0.8472222, -0.107638896), (0.9340277, -0.19444448), (1.0208333, -0.19444448), (1.0208333, -0.107638896), (0.9340277, -0.107638896), (1.0208333, -0.19444448), (1.1076388, -0.19444448), (1.1076388, -0.107638896), (1.0208333, -0.107638896), (1.1076388, -0.19444448), (1.1944444, -0.19444448), (1.1944444, -0.107638896), (1.1076388, -0.107638896), (1.1944444, -0.19444448), (1.28125, -0.19444448), (1.28125, -0.107638896), (1.1944444, -0.107638896), (1.28125, -0.19444448), (1.3680553, -0.19444448), (1.3680553, -0.107638896), (1.28125, -0.107638896), (1.3680553, -0.19444448), (1.454861, -0.19444448), (1.454861, -0.107638896), (1.3680553, -0.107638896), (1.454861, -0.19444448), (1.5416666, -0.19444448), (1.5416666, -0.107638896), (1.454861, -0.107638896), (-0.5416666, -0.107638896), (-0.4548611, -0.107638896), (-0.4548611, -0.020833313), (-0.5416666, -0.020833313), (-0.4548611, -0.107638896), (-0.36805552, -0.107638896), (-0.36805552, -0.020833313), (-0.4548611, -0.020833313), (-0.36805552, -0.107638896), (-0.28125, -0.107638896), (-0.28125, -0.020833313), (-0.36805552, -0.020833313), (-0.28125, -0.107638896), (-0.19444448, -0.107638896), (-0.19444448, -0.020833313), (-0.28125, -0.020833313), (-0.19444448, -0.107638896), (-0.107638896, -0.107638896), (-0.107638896, -0.020833313), (-0.19444448, -0.020833313), (-0.107638896, -0.107638896), (-0.020833313, -0.107638896), (-0.020833313, -0.020833313), (-0.107638896, -0.020833313), (-0.020833313, -0.107638896), (0.06597221, -0.107638896), (0.06597221, -0.020833313), (-0.020833313, -0.020833313), (0.06597221, -0.107638896), (0.15277776, -0.107638896), (0.15277776, -0.020833313), (0.06597221, -0.020833313), (0.15277776, -0.107638896), (0.23958334, -0.107638896), (0.23958334, -0.020833313), (0.15277776, -0.020833313), (0.23958334, -0.107638896), (0.32638887, -0.107638896), (0.32638887, -0.020833313), (0.23958334, -0.020833313), (0.32638887, -0.107638896), (0.4131944, -0.107638896), (0.4131944, -0.020833313), (0.32638887, -0.020833313), (0.4131944, -0.107638896), (0.5, -0.107638896), (0.5, -0.020833313), (0.4131944, -0.020833313), (0.5, -0.107638896), (0.5868055, -0.107638896), (0.5868055, -0.020833313), (0.5, -0.020833313), (0.5868055, -0.107638896), (0.67361104, -0.107638896), (0.67361104, -0.020833313), (0.5868055, -0.020833313), (0.67361104, -0.107638896), (0.7604166, -0.107638896), (0.7604166, -0.020833313), (0.67361104, -0.020833313), (0.7604166, -0.107638896), (0.8472222, -0.107638896), (0.8472222, -0.020833313), (0.7604166, -0.020833313), (0.8472222, -0.107638896), (0.9340277, -0.107638896), (0.9340277, -0.020833313), (0.8472222, -0.020833313), (0.9340277, -0.107638896), (1.0208333, -0.107638896), (1.0208333, -0.020833313), (0.9340277, -0.020833313), (1.0208333, -0.107638896), (1.1076388, -0.107638896), (1.1076388, -0.020833313), (1.0208333, -0.020833313), (1.1076388, -0.107638896), (1.1944444, -0.107638896), (1.1944444, -0.020833313), (1.1076388, -0.020833313), (1.1944444, -0.107638896), (1.28125, -0.107638896), (1.28125, -0.020833313), (1.1944444, -0.020833313), (1.28125, -0.107638896), (1.3680553, -0.107638896), (1.3680553, -0.020833313), (1.28125, -0.020833313), (1.3680553, -0.107638896), (1.454861, -0.107638896), (1.454861, -0.020833313), (1.3680553, -0.020833313), (1.454861, -0.107638896), (1.5416666, -0.107638896), (1.5416666, -0.020833313), (1.454861, -0.020833313), (-0.5416666, -0.020833313), (-0.4548611, -0.020833313), (-0.4548611, 0.06597221), (-0.5416666, 0.06597221), (-0.4548611, -0.020833313), (-0.36805552, -0.020833313), (-0.36805552, 0.06597221), (-0.4548611, 0.06597221), (-0.36805552, -0.020833313), (-0.28125, -0.020833313), (-0.28125, 0.06597221), (-0.36805552, 0.06597221), (-0.28125, -0.020833313), (-0.19444448, -0.020833313), (-0.19444448, 0.06597221), (-0.28125, 0.06597221), (-0.19444448, -0.020833313), (-0.107638896, -0.020833313), (-0.107638896, 0.06597221), (-0.19444448, 0.06597221), (-0.107638896, -0.020833313), (-0.020833313, -0.020833313), (-0.020833313, 0.06597221), (-0.107638896, 0.06597221), (-0.020833313, -0.020833313), (0.06597221, -0.020833313), (0.06597221, 0.06597221), (-0.020833313, 0.06597221), (0.06597221, -0.020833313), (0.15277776, -0.020833313), (0.15277776, 0.06597221), (0.06597221, 0.06597221), (0.15277776, -0.020833313), (0.23958334, -0.020833313), (0.23958334, 0.06597221), (0.15277776, 0.06597221), (0.23958334, -0.020833313), (0.32638887, -0.020833313), (0.32638887, 0.06597221), (0.23958334, 0.06597221), (0.32638887, -0.020833313), (0.4131944, -0.020833313), (0.4131944, 0.06597221), (0.32638887, 0.06597221), (0.4131944, -0.020833313), (0.5, -0.020833313), (0.5, 0.06597221), (0.4131944, 0.06597221), (0.5, -0.020833313), (0.5868055, -0.020833313), (0.5868055, 0.06597221), (0.5, 0.06597221), (0.5868055, -0.020833313), (0.67361104, -0.020833313), (0.67361104, 0.06597221), (0.5868055, 0.06597221), (0.67361104, -0.020833313), (0.7604166, -0.020833313), (0.7604166, 0.06597221), (0.67361104, 0.06597221), (0.7604166, -0.020833313), (0.8472222, -0.020833313), (0.8472222, 0.06597221), (0.7604166, 0.06597221), (0.8472222, -0.020833313), (0.9340277, -0.020833313), (0.9340277, 0.06597221), (0.8472222, 0.06597221), (0.9340277, -0.020833313), (1.0208333, -0.020833313), (1.0208333, 0.06597221), (0.9340277, 0.06597221), (1.0208333, -0.020833313), (1.1076388, -0.020833313), (1.1076388, 0.06597221), (1.0208333, 0.06597221), (1.1076388, -0.020833313), (1.1944444, -0.020833313), (1.1944444, 0.06597221), (1.1076388, 0.06597221), (1.1944444, -0.020833313), (1.28125, -0.020833313), (1.28125, 0.06597221), (1.1944444, 0.06597221), (1.28125, -0.020833313), (1.3680553, -0.020833313), (1.3680553, 0.06597221), (1.28125, 0.06597221), (1.3680553, -0.020833313), (1.454861, -0.020833313), (1.454861, 0.06597221), (1.3680553, 0.06597221), (1.454861, -0.020833313), (1.5416666, -0.020833313), (1.5416666, 0.06597221), (1.454861, 0.06597221), (-0.5416666, 0.06597221), (-0.4548611, 0.06597221), (-0.4548611, 0.15277779), (-0.5416666, 0.15277779), (-0.4548611, 0.06597221), (-0.36805552, 0.06597221), (-0.36805552, 0.15277779), (-0.4548611, 0.15277779), (-0.36805552, 0.06597221), (-0.28125, 0.06597221), (-0.28125, 0.15277779), (-0.36805552, 0.15277779), (-0.28125, 0.06597221), (-0.19444448, 0.06597221), (-0.19444448, 0.15277779), (-0.28125, 0.15277779), (-0.19444448, 0.06597221), (-0.107638896, 0.06597221), (-0.107638896, 0.15277779), (-0.19444448, 0.15277779), (-0.107638896, 0.06597221), (-0.020833313, 0.06597221), (-0.020833313, 0.15277779), (-0.107638896, 0.15277779), (-0.020833313, 0.06597221), (0.06597221, 0.06597221), (0.06597221, 0.15277779), (-0.020833313, 0.15277779), (0.06597221, 0.06597221), (0.15277776, 0.06597221), (0.15277776, 0.15277779), (0.06597221, 0.15277779), (0.15277776, 0.06597221), (0.23958334, 0.06597221), (0.23958334, 0.15277779), (0.15277776, 0.15277779), (0.23958334, 0.06597221), (0.32638887, 0.06597221), (0.32638887, 0.15277779), (0.23958334, 0.15277779), (0.32638887, 0.06597221), (0.4131944, 0.06597221), (0.4131944, 0.15277779), (0.32638887, 0.15277779), (0.4131944, 0.06597221), (0.5, 0.06597221), (0.5, 0.15277779), (0.4131944, 0.15277779), (0.5, 0.06597221), (0.5868055, 0.06597221), (0.5868055, 0.15277779), (0.5, 0.15277779), (0.5868055, 0.06597221), (0.67361104, 0.06597221), (0.67361104, 0.15277779), (0.5868055, 0.15277779), (0.67361104, 0.06597221), (0.7604166, 0.06597221), (0.7604166, 0.15277779), (0.67361104, 0.15277779), (0.7604166, 0.06597221), (0.8472222, 0.06597221), (0.8472222, 0.15277779), (0.7604166, 0.15277779), (0.8472222, 0.06597221), (0.9340277, 0.06597221), (0.9340277, 0.15277779), (0.8472222, 0.15277779), (0.9340277, 0.06597221), (1.0208333, 0.06597221), (1.0208333, 0.15277779), (0.9340277, 0.15277779), (1.0208333, 0.06597221), (1.1076388, 0.06597221), (1.1076388, 0.15277779), (1.0208333, 0.15277779), (1.1076388, 0.06597221), (1.1944444, 0.06597221), (1.1944444, 0.15277779), (1.1076388, 0.15277779), (1.1944444, 0.06597221), (1.28125, 0.06597221), (1.28125, 0.15277779), (1.1944444, 0.15277779), (1.28125, 0.06597221), (1.3680553, 0.06597221), (1.3680553, 0.15277779), (1.28125, 0.15277779), (1.3680553, 0.06597221), (1.454861, 0.06597221), (1.454861, 0.15277779), (1.3680553, 0.15277779), (1.454861, 0.06597221), (1.5416666, 0.06597221), (1.5416666, 0.15277779), (1.454861, 0.15277779), (-0.5416666, 0.15277779), (-0.4548611, 0.15277779), (-0.4548611, 0.23958334), (-0.5416666, 0.23958334), (-0.4548611, 0.15277779), (-0.36805552, 0.15277779), (-0.36805552, 0.23958334), (-0.4548611, 0.23958334), (-0.36805552, 0.15277779), (-0.28125, 0.15277779), (-0.28125, 0.23958334), (-0.36805552, 0.23958334), (-0.28125, 0.15277779), (-0.19444448, 0.15277779), (-0.19444448, 0.23958334), (-0.28125, 0.23958334), (-0.19444448, 0.15277779), (-0.107638896, 0.15277779), (-0.107638896, 0.23958334), (-0.19444448, 0.23958334), (-0.107638896, 0.15277779), (-0.020833313, 0.15277779), (-0.020833313, 0.23958334), (-0.107638896, 0.23958334), (-0.020833313, 0.15277779), (0.06597221, 0.15277779), (0.06597221, 0.23958334), (-0.020833313, 0.23958334), (0.06597221, 0.15277779), (0.15277776, 0.15277779), (0.15277776, 0.23958334), (0.06597221, 0.23958334), (0.15277776, 0.15277779), (0.23958334, 0.15277779), (0.23958334, 0.23958334), (0.15277776, 0.23958334), (0.23958334, 0.15277779), (0.32638887, 0.15277779), (0.32638887, 0.23958334), (0.23958334, 0.23958334), (0.32638887, 0.15277779), (0.4131944, 0.15277779), (0.4131944, 0.23958334), (0.32638887, 0.23958334), (0.4131944, 0.15277779), (0.5, 0.15277779), (0.5, 0.23958334), (0.4131944, 0.23958334), (0.5, 0.15277779), (0.5868055, 0.15277779), (0.5868055, 0.23958334), (0.5, 0.23958334), (0.5868055, 0.15277779), (0.67361104, 0.15277779), (0.67361104, 0.23958334), (0.5868055, 0.23958334), (0.67361104, 0.15277779), (0.7604166, 0.15277779), (0.7604166, 0.23958334), (0.67361104, 0.23958334), (0.7604166, 0.15277779), (0.8472222, 0.15277779), (0.8472222, 0.23958334), (0.7604166, 0.23958334), (0.8472222, 0.15277779), (0.9340277, 0.15277779), (0.9340277, 0.23958334), (0.8472222, 0.23958334), (0.9340277, 0.15277779), (1.0208333, 0.15277779), (1.0208333, 0.23958334), (0.9340277, 0.23958334), (1.0208333, 0.15277779), (1.1076388, 0.15277779), (1.1076388, 0.23958334), (1.0208333, 0.23958334), (1.1076388, 0.15277779), (1.1944444, 0.15277779), (1.1944444, 0.23958334), (1.1076388, 0.23958334), (1.1944444, 0.15277779), (1.28125, 0.15277779), (1.28125, 0.23958334), (1.1944444, 0.23958334), (1.28125, 0.15277779), (1.3680553, 0.15277779), (1.3680553, 0.23958334), (1.28125, 0.23958334), (1.3680553, 0.15277779), (1.454861, 0.15277779), (1.454861, 0.23958334), (1.3680553, 0.23958334), (1.454861, 0.15277779), (1.5416666, 0.15277779), (1.5416666, 0.23958334), (1.454861, 0.23958334), (-0.5416666, 0.23958334), (-0.4548611, 0.23958334), (-0.4548611, 0.32638887), (-0.5416666, 0.32638887), (-0.4548611, 0.23958334), (-0.36805552, 0.23958334), (-0.36805552, 0.32638887), (-0.4548611, 0.32638887), (-0.36805552, 0.23958334), (-0.28125, 0.23958334), (-0.28125, 0.32638887), (-0.36805552, 0.32638887), (-0.28125, 0.23958334), (-0.19444448, 0.23958334), (-0.19444448, 0.32638887), (-0.28125, 0.32638887), (-0.19444448, 0.23958334), (-0.107638896, 0.23958334), (-0.107638896, 0.32638887), (-0.19444448, 0.32638887), (-0.107638896, 0.23958334), (-0.020833313, 0.23958334), (-0.020833313, 0.32638887), (-0.107638896, 0.32638887), (-0.020833313, 0.23958334), (0.06597221, 0.23958334), (0.06597221, 0.32638887), (-0.020833313, 0.32638887), (0.06597221, 0.23958334), (0.15277776, 0.23958334), (0.15277776, 0.32638887), (0.06597221, 0.32638887), (0.15277776, 0.23958334), (0.23958334, 0.23958334), (0.23958334, 0.32638887), (0.15277776, 0.32638887), (0.23958334, 0.23958334), (0.32638887, 0.23958334), (0.32638887, 0.32638887), (0.23958334, 0.32638887), (0.32638887, 0.23958334), (0.4131944, 0.23958334), (0.4131944, 0.32638887), (0.32638887, 0.32638887), (0.4131944, 0.23958334), (0.5, 0.23958334), (0.5, 0.32638887), (0.4131944, 0.32638887), (0.5, 0.23958334), (0.5868055, 0.23958334), (0.5868055, 0.32638887), (0.5, 0.32638887), (0.5868055, 0.23958334), (0.67361104, 0.23958334), (0.67361104, 0.32638887), (0.5868055, 0.32638887), (0.67361104, 0.23958334), (0.7604166, 0.23958334), (0.7604166, 0.32638887), (0.67361104, 0.32638887), (0.7604166, 0.23958334), (0.8472222, 0.23958334), (0.8472222, 0.32638887), (0.7604166, 0.32638887), (0.8472222, 0.23958334), (0.9340277, 0.23958334), (0.9340277, 0.32638887), (0.8472222, 0.32638887), (0.9340277, 0.23958334), (1.0208333, 0.23958334), (1.0208333, 0.32638887), (0.9340277, 0.32638887), (1.0208333, 0.23958334), (1.1076388, 0.23958334), (1.1076388, 0.32638887), (1.0208333, 0.32638887), (1.1076388, 0.23958334), (1.1944444, 0.23958334), (1.1944444, 0.32638887), (1.1076388, 0.32638887), (1.1944444, 0.23958334), (1.28125, 0.23958334), (1.28125, 0.32638887), (1.1944444, 0.32638887), (1.28125, 0.23958334), (1.3680553, 0.23958334), (1.3680553, 0.32638887), (1.28125, 0.32638887), (1.3680553, 0.23958334), (1.454861, 0.23958334), (1.454861, 0.32638887), (1.3680553, 0.32638887), (1.454861, 0.23958334), (1.5416666, 0.23958334), (1.5416666, 0.32638887), (1.454861, 0.32638887), (-0.5416666, 0.32638887), (-0.4548611, 0.32638887), (-0.4548611, 0.4131944), (-0.5416666, 0.4131944), (-0.4548611, 0.32638887), (-0.36805552, 0.32638887), (-0.36805552, 0.4131944), (-0.4548611, 0.4131944), (-0.36805552, 0.32638887), (-0.28125, 0.32638887), (-0.28125, 0.4131944), (-0.36805552, 0.4131944), (-0.28125, 0.32638887), (-0.19444448, 0.32638887), (-0.19444448, 0.4131944), (-0.28125, 0.4131944), (-0.19444448, 0.32638887), (-0.107638896, 0.32638887), (-0.107638896, 0.4131944), (-0.19444448, 0.4131944), (-0.107638896, 0.32638887), (-0.020833313, 0.32638887), (-0.020833313, 0.4131944), (-0.107638896, 0.4131944), (-0.020833313, 0.32638887), (0.06597221, 0.32638887), (0.06597221, 0.4131944), (-0.020833313, 0.4131944), (0.06597221, 0.32638887), (0.15277776, 0.32638887), (0.15277776, 0.4131944), (0.06597221, 0.4131944), (0.15277776, 0.32638887), (0.23958334, 0.32638887), (0.23958334, 0.4131944), (0.15277776, 0.4131944), (0.23958334, 0.32638887), (0.32638887, 0.32638887), (0.32638887, 0.4131944), (0.23958334, 0.4131944), (0.32638887, 0.32638887), (0.4131944, 0.32638887), (0.4131944, 0.4131944), (0.32638887, 0.4131944), (0.4131944, 0.32638887), (0.5, 0.32638887), (0.5, 0.4131944), (0.4131944, 0.4131944), (0.5, 0.32638887), (0.5868055, 0.32638887), (0.5868055, 0.4131944), (0.5, 0.4131944), (0.5868055, 0.32638887), (0.67361104, 0.32638887), (0.67361104, 0.4131944), (0.5868055, 0.4131944), (0.67361104, 0.32638887), (0.7604166, 0.32638887), (0.7604166, 0.4131944), (0.67361104, 0.4131944), (0.7604166, 0.32638887), (0.8472222, 0.32638887), (0.8472222, 0.4131944), (0.7604166, 0.4131944), (0.8472222, 0.32638887), (0.9340277, 0.32638887), (0.9340277, 0.4131944), (0.8472222, 0.4131944), (0.9340277, 0.32638887), (1.0208333, 0.32638887), (1.0208333, 0.4131944), (0.9340277, 0.4131944), (1.0208333, 0.32638887), (1.1076388, 0.32638887), (1.1076388, 0.4131944), (1.0208333, 0.4131944), (1.1076388, 0.32638887), (1.1944444, 0.32638887), (1.1944444, 0.4131944), (1.1076388, 0.4131944), (1.1944444, 0.32638887), (1.28125, 0.32638887), (1.28125, 0.4131944), (1.1944444, 0.4131944), (1.28125, 0.32638887), (1.3680553, 0.32638887), (1.3680553, 0.4131944), (1.28125, 0.4131944), (1.3680553, 0.32638887), (1.454861, 0.32638887), (1.454861, 0.4131944), (1.3680553, 0.4131944), (1.454861, 0.32638887), (1.5416666, 0.32638887), (1.5416666, 0.4131944), (1.454861, 0.4131944), (-0.5416666, 0.4131944), (-0.4548611, 0.4131944), (-0.4548611, 0.5), (-0.5416666, 0.5), (-0.4548611, 0.4131944), (-0.36805552, 0.4131944), (-0.36805552, 0.5), (-0.4548611, 0.5), (-0.36805552, 0.4131944), (-0.28125, 0.4131944), (-0.28125, 0.5), (-0.36805552, 0.5), (-0.28125, 0.4131944), (-0.19444448, 0.4131944), (-0.19444448, 0.5), (-0.28125, 0.5), (-0.19444448, 0.4131944), (-0.107638896, 0.4131944), (-0.107638896, 0.5), (-0.19444448, 0.5), (-0.107638896, 0.4131944), (-0.020833313, 0.4131944), (-0.020833313, 0.5), (-0.107638896, 0.5), (-0.020833313, 0.4131944), (0.06597221, 0.4131944), (0.06597221, 0.5), (-0.020833313, 0.5), (0.06597221, 0.4131944), (0.15277776, 0.4131944), (0.15277776, 0.5), (0.06597221, 0.5), (0.15277776, 0.4131944), (0.23958334, 0.4131944), (0.23958334, 0.5), (0.15277776, 0.5), (0.23958334, 0.4131944), (0.32638887, 0.4131944), (0.32638887, 0.5), (0.23958334, 0.5), (0.32638887, 0.4131944), (0.4131944, 0.4131944), (0.4131944, 0.5), (0.32638887, 0.5), (0.4131944, 0.4131944), (0.5, 0.4131944), (0.5, 0.5), (0.4131944, 0.5), (0.5, 0.4131944), (0.5868055, 0.4131944), (0.5868055, 0.5), (0.5, 0.5), (0.5868055, 0.4131944), (0.67361104, 0.4131944), (0.67361104, 0.5), (0.5868055, 0.5), (0.67361104, 0.4131944), (0.7604166, 0.4131944), (0.7604166, 0.5), (0.67361104, 0.5), (0.7604166, 0.4131944), (0.8472222, 0.4131944), (0.8472222, 0.5), (0.7604166, 0.5), (0.8472222, 0.4131944), (0.9340277, 0.4131944), (0.9340277, 0.5), (0.8472222, 0.5), (0.9340277, 0.4131944), (1.0208333, 0.4131944), (1.0208333, 0.5), (0.9340277, 0.5), (1.0208333, 0.4131944), (1.1076388, 0.4131944), (1.1076388, 0.5), (1.0208333, 0.5), (1.1076388, 0.4131944), (1.1944444, 0.4131944), (1.1944444, 0.5), (1.1076388, 0.5), (1.1944444, 0.4131944), (1.28125, 0.4131944), (1.28125, 0.5), (1.1944444, 0.5), (1.28125, 0.4131944), (1.3680553, 0.4131944), (1.3680553, 0.5), (1.28125, 0.5), (1.3680553, 0.4131944), (1.454861, 0.4131944), (1.454861, 0.5), (1.3680553, 0.5), (1.454861, 0.4131944), (1.5416666, 0.4131944), (1.5416666, 0.5), (1.454861, 0.5), (-0.5416666, 0.5), (-0.4548611, 0.5), (-0.4548611, 0.5868055), (-0.5416666, 0.5868055), (-0.4548611, 0.5), (-0.36805552, 0.5), (-0.36805552, 0.5868055), (-0.4548611, 0.5868055), (-0.36805552, 0.5), (-0.28125, 0.5), (-0.28125, 0.5868055), (-0.36805552, 0.5868055), (-0.28125, 0.5), (-0.19444448, 0.5), (-0.19444448, 0.5868055), (-0.28125, 0.5868055), (-0.19444448, 0.5), (-0.107638896, 0.5), (-0.107638896, 0.5868055), (-0.19444448, 0.5868055), (-0.107638896, 0.5), (-0.020833313, 0.5), (-0.020833313, 0.5868055), (-0.107638896, 0.5868055), (-0.020833313, 0.5), (0.06597221, 0.5), (0.06597221, 0.5868055), (-0.020833313, 0.5868055), (0.06597221, 0.5), (0.15277776, 0.5), (0.15277776, 0.5868055), (0.06597221, 0.5868055), (0.15277776, 0.5), (0.23958334, 0.5), (0.23958334, 0.5868055), (0.15277776, 0.5868055), (0.23958334, 0.5), (0.32638887, 0.5), (0.32638887, 0.5868055), (0.23958334, 0.5868055), (0.32638887, 0.5), (0.4131944, 0.5), (0.4131944, 0.5868055), (0.32638887, 0.5868055), (0.4131944, 0.5), (0.5, 0.5), (0.5, 0.5868055), (0.4131944, 0.5868055), (0.5, 0.5), (0.5868055, 0.5), (0.5868055, 0.5868055), (0.5, 0.5868055), (0.5868055, 0.5), (0.67361104, 0.5), (0.67361104, 0.5868055), (0.5868055, 0.5868055), (0.67361104, 0.5), (0.7604166, 0.5), (0.7604166, 0.5868055), (0.67361104, 0.5868055), (0.7604166, 0.5), (0.8472222, 0.5), (0.8472222, 0.5868055), (0.7604166, 0.5868055), (0.8472222, 0.5), (0.9340277, 0.5), (0.9340277, 0.5868055), (0.8472222, 0.5868055), (0.9340277, 0.5), (1.0208333, 0.5), (1.0208333, 0.5868055), (0.9340277, 0.5868055), (1.0208333, 0.5), (1.1076388, 0.5), (1.1076388, 0.5868055), (1.0208333, 0.5868055), (1.1076388, 0.5), (1.1944444, 0.5), (1.1944444, 0.5868055), (1.1076388, 0.5868055), (1.1944444, 0.5), (1.28125, 0.5), (1.28125, 0.5868055), (1.1944444, 0.5868055), (1.28125, 0.5), (1.3680553, 0.5), (1.3680553, 0.5868055), (1.28125, 0.5868055), (1.3680553, 0.5), (1.454861, 0.5), (1.454861, 0.5868055), (1.3680553, 0.5868055), (1.454861, 0.5), (1.5416666, 0.5), (1.5416666, 0.5868055), (1.454861, 0.5868055), (-0.5416666, 0.5868055), (-0.4548611, 0.5868055), (-0.4548611, 0.67361104), (-0.5416666, 0.67361104), (-0.4548611, 0.5868055), (-0.36805552, 0.5868055), (-0.36805552, 0.67361104), (-0.4548611, 0.67361104), (-0.36805552, 0.5868055), (-0.28125, 0.5868055), (-0.28125, 0.67361104), (-0.36805552, 0.67361104), (-0.28125, 0.5868055), (-0.19444448, 0.5868055), (-0.19444448, 0.67361104), (-0.28125, 0.67361104), (-0.19444448, 0.5868055), (-0.107638896, 0.5868055), (-0.107638896, 0.67361104), (-0.19444448, 0.67361104), (-0.107638896, 0.5868055), (-0.020833313, 0.5868055), (-0.020833313, 0.67361104), (-0.107638896, 0.67361104), (-0.020833313, 0.5868055), (0.06597221, 0.5868055), (0.06597221, 0.67361104), (-0.020833313, 0.67361104), (0.06597221, 0.5868055), (0.15277776, 0.5868055), (0.15277776, 0.67361104), (0.06597221, 0.67361104), (0.15277776, 0.5868055), (0.23958334, 0.5868055), (0.23958334, 0.67361104), (0.15277776, 0.67361104), (0.23958334, 0.5868055), (0.32638887, 0.5868055), (0.32638887, 0.67361104), (0.23958334, 0.67361104), (0.32638887, 0.5868055), (0.4131944, 0.5868055), (0.4131944, 0.67361104), (0.32638887, 0.67361104), (0.4131944, 0.5868055), (0.5, 0.5868055), (0.5, 0.67361104), (0.4131944, 0.67361104), (0.5, 0.5868055), (0.5868055, 0.5868055), (0.5868055, 0.67361104), (0.5, 0.67361104), (0.5868055, 0.5868055), (0.67361104, 0.5868055), (0.67361104, 0.67361104), (0.5868055, 0.67361104), (0.67361104, 0.5868055), (0.7604166, 0.5868055), (0.7604166, 0.67361104), (0.67361104, 0.67361104), (0.7604166, 0.5868055), (0.8472222, 0.5868055), (0.8472222, 0.67361104), (0.7604166, 0.67361104), (0.8472222, 0.5868055), (0.9340277, 0.5868055), (0.9340277, 0.67361104), (0.8472222, 0.67361104), (0.9340277, 0.5868055), (1.0208333, 0.5868055), (1.0208333, 0.67361104), (0.9340277, 0.67361104), (1.0208333, 0.5868055), (1.1076388, 0.5868055), (1.1076388, 0.67361104), (1.0208333, 0.67361104), (1.1076388, 0.5868055), (1.1944444, 0.5868055), (1.1944444, 0.67361104), (1.1076388, 0.67361104), (1.1944444, 0.5868055), (1.28125, 0.5868055), (1.28125, 0.67361104), (1.1944444, 0.67361104), (1.28125, 0.5868055), (1.3680553, 0.5868055), (1.3680553, 0.67361104), (1.28125, 0.67361104), (1.3680553, 0.5868055), (1.454861, 0.5868055), (1.454861, 0.67361104), (1.3680553, 0.67361104), (1.454861, 0.5868055), (1.5416666, 0.5868055), (1.5416666, 0.67361104), (1.454861, 0.67361104), (-0.5416666, 0.67361104), (-0.4548611, 0.67361104), (-0.4548611, 0.7604167), (-0.5416666, 0.7604167), (-0.4548611, 0.67361104), (-0.36805552, 0.67361104), (-0.36805552, 0.7604167), (-0.4548611, 0.7604167), (-0.36805552, 0.67361104), (-0.28125, 0.67361104), (-0.28125, 0.7604167), (-0.36805552, 0.7604167), (-0.28125, 0.67361104), (-0.19444448, 0.67361104), (-0.19444448, 0.7604167), (-0.28125, 0.7604167), (-0.19444448, 0.67361104), (-0.107638896, 0.67361104), (-0.107638896, 0.7604167), (-0.19444448, 0.7604167), (-0.107638896, 0.67361104), (-0.020833313, 0.67361104), (-0.020833313, 0.7604167), (-0.107638896, 0.7604167), (-0.020833313, 0.67361104), (0.06597221, 0.67361104), (0.06597221, 0.7604167), (-0.020833313, 0.7604167), (0.06597221, 0.67361104), (0.15277776, 0.67361104), (0.15277776, 0.7604167), (0.06597221, 0.7604167), (0.15277776, 0.67361104), (0.23958334, 0.67361104), (0.23958334, 0.7604167), (0.15277776, 0.7604167), (0.23958334, 0.67361104), (0.32638887, 0.67361104), (0.32638887, 0.7604167), (0.23958334, 0.7604167), (0.32638887, 0.67361104), (0.4131944, 0.67361104), (0.4131944, 0.7604167), (0.32638887, 0.7604167), (0.4131944, 0.67361104), (0.5, 0.67361104), (0.5, 0.7604167), (0.4131944, 0.7604167), (0.5, 0.67361104), (0.5868055, 0.67361104), (0.5868055, 0.7604167), (0.5, 0.7604167), (0.5868055, 0.67361104), (0.67361104, 0.67361104), (0.67361104, 0.7604167), (0.5868055, 0.7604167), (0.67361104, 0.67361104), (0.7604166, 0.67361104), (0.7604166, 0.7604167), (0.67361104, 0.7604167), (0.7604166, 0.67361104), (0.8472222, 0.67361104), (0.8472222, 0.7604167), (0.7604166, 0.7604167), (0.8472222, 0.67361104), (0.9340277, 0.67361104), (0.9340277, 0.7604167), (0.8472222, 0.7604167), (0.9340277, 0.67361104), (1.0208333, 0.67361104), (1.0208333, 0.7604167), (0.9340277, 0.7604167), (1.0208333, 0.67361104), (1.1076388, 0.67361104), (1.1076388, 0.7604167), (1.0208333, 0.7604167), (1.1076388, 0.67361104), (1.1944444, 0.67361104), (1.1944444, 0.7604167), (1.1076388, 0.7604167), (1.1944444, 0.67361104), (1.28125, 0.67361104), (1.28125, 0.7604167), (1.1944444, 0.7604167), (1.28125, 0.67361104), (1.3680553, 0.67361104), (1.3680553, 0.7604167), (1.28125, 0.7604167), (1.3680553, 0.67361104), (1.454861, 0.67361104), (1.454861, 0.7604167), (1.3680553, 0.7604167), (1.454861, 0.67361104), (1.5416666, 0.67361104), (1.5416666, 0.7604167), (1.454861, 0.7604167), (-0.5416666, 0.7604167), (-0.4548611, 0.7604167), (-0.4548611, 0.8472222), (-0.5416666, 0.8472222), (-0.4548611, 0.7604167), (-0.36805552, 0.7604167), (-0.36805552, 0.8472222), (-0.4548611, 0.8472222), (-0.36805552, 0.7604167), (-0.28125, 0.7604167), (-0.28125, 0.8472222), (-0.36805552, 0.8472222), (-0.28125, 0.7604167), (-0.19444448, 0.7604167), (-0.19444448, 0.8472222), (-0.28125, 0.8472222), (-0.19444448, 0.7604167), (-0.107638896, 0.7604167), (-0.107638896, 0.8472222), (-0.19444448, 0.8472222), (-0.107638896, 0.7604167), (-0.020833313, 0.7604167), (-0.020833313, 0.8472222), (-0.107638896, 0.8472222), (-0.020833313, 0.7604167), (0.06597221, 0.7604167), (0.06597221, 0.8472222), (-0.020833313, 0.8472222), (0.06597221, 0.7604167), (0.15277776, 0.7604167), (0.15277776, 0.8472222), (0.06597221, 0.8472222), (0.15277776, 0.7604167), (0.23958334, 0.7604167), (0.23958334, 0.8472222), (0.15277776, 0.8472222), (0.23958334, 0.7604167), (0.32638887, 0.7604167), (0.32638887, 0.8472222), (0.23958334, 0.8472222), (0.32638887, 0.7604167), (0.4131944, 0.7604167), (0.4131944, 0.8472222), (0.32638887, 0.8472222), (0.4131944, 0.7604167), (0.5, 0.7604167), (0.5, 0.8472222), (0.4131944, 0.8472222), (0.5, 0.7604167), (0.5868055, 0.7604167), (0.5868055, 0.8472222), (0.5, 0.8472222), (0.5868055, 0.7604167), (0.67361104, 0.7604167), (0.67361104, 0.8472222), (0.5868055, 0.8472222), (0.67361104, 0.7604167), (0.7604166, 0.7604167), (0.7604166, 0.8472222), (0.67361104, 0.8472222), (0.7604166, 0.7604167), (0.8472222, 0.7604167), (0.8472222, 0.8472222), (0.7604166, 0.8472222), (0.8472222, 0.7604167), (0.9340277, 0.7604167), (0.9340277, 0.8472222), (0.8472222, 0.8472222), (0.9340277, 0.7604167), (1.0208333, 0.7604167), (1.0208333, 0.8472222), (0.9340277, 0.8472222), (1.0208333, 0.7604167), (1.1076388, 0.7604167), (1.1076388, 0.8472222), (1.0208333, 0.8472222), (1.1076388, 0.7604167), (1.1944444, 0.7604167), (1.1944444, 0.8472222), (1.1076388, 0.8472222), (1.1944444, 0.7604167), (1.28125, 0.7604167), (1.28125, 0.8472222), (1.1944444, 0.8472222), (1.28125, 0.7604167), (1.3680553, 0.7604167), (1.3680553, 0.8472222), (1.28125, 0.8472222), (1.3680553, 0.7604167), (1.454861, 0.7604167), (1.454861, 0.8472222), (1.3680553, 0.8472222), (1.454861, 0.7604167), (1.5416666, 0.7604167), (1.5416666, 0.8472222), (1.454861, 0.8472222), (-0.5416666, 0.8472222), (-0.4548611, 0.8472222), (-0.4548611, 0.93402773), (-0.5416666, 0.93402773), (-0.4548611, 0.8472222), (-0.36805552, 0.8472222), (-0.36805552, 0.93402773), (-0.4548611, 0.93402773), (-0.36805552, 0.8472222), (-0.28125, 0.8472222), (-0.28125, 0.93402773), (-0.36805552, 0.93402773), (-0.28125, 0.8472222), (-0.19444448, 0.8472222), (-0.19444448, 0.93402773), (-0.28125, 0.93402773), (-0.19444448, 0.8472222), (-0.107638896, 0.8472222), (-0.107638896, 0.93402773), (-0.19444448, 0.93402773), (-0.107638896, 0.8472222), (-0.020833313, 0.8472222), (-0.020833313, 0.93402773), (-0.107638896, 0.93402773), (-0.020833313, 0.8472222), (0.06597221, 0.8472222), (0.06597221, 0.93402773), (-0.020833313, 0.93402773), (0.06597221, 0.8472222), (0.15277776, 0.8472222), (0.15277776, 0.93402773), (0.06597221, 0.93402773), (0.15277776, 0.8472222), (0.23958334, 0.8472222), (0.23958334, 0.93402773), (0.15277776, 0.93402773), (0.23958334, 0.8472222), (0.32638887, 0.8472222), (0.32638887, 0.93402773), (0.23958334, 0.93402773), (0.32638887, 0.8472222), (0.4131944, 0.8472222), (0.4131944, 0.93402773), (0.32638887, 0.93402773), (0.4131944, 0.8472222), (0.5, 0.8472222), (0.5, 0.93402773), (0.4131944, 0.93402773), (0.5, 0.8472222), (0.5868055, 0.8472222), (0.5868055, 0.93402773), (0.5, 0.93402773), (0.5868055, 0.8472222), (0.67361104, 0.8472222), (0.67361104, 0.93402773), (0.5868055, 0.93402773), (0.67361104, 0.8472222), (0.7604166, 0.8472222), (0.7604166, 0.93402773), (0.67361104, 0.93402773), (0.7604166, 0.8472222), (0.8472222, 0.8472222), (0.8472222, 0.93402773), (0.7604166, 0.93402773), (0.8472222, 0.8472222), (0.9340277, 0.8472222), (0.9340277, 0.93402773), (0.8472222, 0.93402773), (0.9340277, 0.8472222), (1.0208333, 0.8472222), (1.0208333, 0.93402773), (0.9340277, 0.93402773), (1.0208333, 0.8472222), (1.1076388, 0.8472222), (1.1076388, 0.93402773), (1.0208333, 0.93402773), (1.1076388, 0.8472222), (1.1944444, 0.8472222), (1.1944444, 0.93402773), (1.1076388, 0.93402773), (1.1944444, 0.8472222), (1.28125, 0.8472222), (1.28125, 0.93402773), (1.1944444, 0.93402773), (1.28125, 0.8472222), (1.3680553, 0.8472222), (1.3680553, 0.93402773), (1.28125, 0.93402773), (1.3680553, 0.8472222), (1.454861, 0.8472222), (1.454861, 0.93402773), (1.3680553, 0.93402773), (1.454861, 0.8472222), (1.5416666, 0.8472222), (1.5416666, 0.93402773), (1.454861, 0.93402773), (-0.5416666, 0.93402773), (-0.4548611, 0.93402773), (-0.4548611, 1.0208333), (-0.5416666, 1.0208333), (-0.4548611, 0.93402773), (-0.36805552, 0.93402773), (-0.36805552, 1.0208333), (-0.4548611, 1.0208333), (-0.36805552, 0.93402773), (-0.28125, 0.93402773), (-0.28125, 1.0208333), (-0.36805552, 1.0208333), (-0.28125, 0.93402773), (-0.19444448, 0.93402773), (-0.19444448, 1.0208333), (-0.28125, 1.0208333), (-0.19444448, 0.93402773), (-0.107638896, 0.93402773), (-0.107638896, 1.0208333), (-0.19444448, 1.0208333), (-0.107638896, 0.93402773), (-0.020833313, 0.93402773), (-0.020833313, 1.0208333), (-0.107638896, 1.0208333), (-0.020833313, 0.93402773), (0.06597221, 0.93402773), (0.06597221, 1.0208333), (-0.020833313, 1.0208333), (0.06597221, 0.93402773), (0.15277776, 0.93402773), (0.15277776, 1.0208333), (0.06597221, 1.0208333), (0.15277776, 0.93402773), (0.23958334, 0.93402773), (0.23958334, 1.0208333), (0.15277776, 1.0208333), (0.23958334, 0.93402773), (0.32638887, 0.93402773), (0.32638887, 1.0208333), (0.23958334, 1.0208333), (0.32638887, 0.93402773), (0.4131944, 0.93402773), (0.4131944, 1.0208333), (0.32638887, 1.0208333), (0.4131944, 0.93402773), (0.5, 0.93402773), (0.5, 1.0208333), (0.4131944, 1.0208333), (0.5, 0.93402773), (0.5868055, 0.93402773), (0.5868055, 1.0208333), (0.5, 1.0208333), (0.5868055, 0.93402773), (0.67361104, 0.93402773), (0.67361104, 1.0208333), (0.5868055, 1.0208333), (0.67361104, 0.93402773), (0.7604166, 0.93402773), (0.7604166, 1.0208333), (0.67361104, 1.0208333), (0.7604166, 0.93402773), (0.8472222, 0.93402773), (0.8472222, 1.0208333), (0.7604166, 1.0208333), (0.8472222, 0.93402773), (0.9340277, 0.93402773), (0.9340277, 1.0208333), (0.8472222, 1.0208333), (0.9340277, 0.93402773), (1.0208333, 0.93402773), (1.0208333, 1.0208333), (0.9340277, 1.0208333), (1.0208333, 0.93402773), (1.1076388, 0.93402773), (1.1076388, 1.0208333), (1.0208333, 1.0208333), (1.1076388, 0.93402773), (1.1944444, 0.93402773), (1.1944444, 1.0208333), (1.1076388, 1.0208333), (1.1944444, 0.93402773), (1.28125, 0.93402773), (1.28125, 1.0208333), (1.1944444, 1.0208333), (1.28125, 0.93402773), (1.3680553, 0.93402773), (1.3680553, 1.0208333), (1.28125, 1.0208333), (1.3680553, 0.93402773), (1.454861, 0.93402773), (1.454861, 1.0208333), (1.3680553, 1.0208333), (1.454861, 0.93402773), (1.5416666, 0.93402773), (1.5416666, 1.0208333), (1.454861, 1.0208333), (-0.5416666, 1.0208333), (-0.4548611, 1.0208333), (-0.4548611, 1.1076388), (-0.5416666, 1.1076388), (-0.4548611, 1.0208333), (-0.36805552, 1.0208333), (-0.36805552, 1.1076388), (-0.4548611, 1.1076388), (-0.36805552, 1.0208333), (-0.28125, 1.0208333), (-0.28125, 1.1076388), (-0.36805552, 1.1076388), (-0.28125, 1.0208333), (-0.19444448, 1.0208333), (-0.19444448, 1.1076388), (-0.28125, 1.1076388), (-0.19444448, 1.0208333), (-0.107638896, 1.0208333), (-0.107638896, 1.1076388), (-0.19444448, 1.1076388), (-0.107638896, 1.0208333), (-0.020833313, 1.0208333), (-0.020833313, 1.1076388), (-0.107638896, 1.1076388), (-0.020833313, 1.0208333), (0.06597221, 1.0208333), (0.06597221, 1.1076388), (-0.020833313, 1.1076388), (0.06597221, 1.0208333), (0.15277776, 1.0208333), (0.15277776, 1.1076388), (0.06597221, 1.1076388), (0.15277776, 1.0208333), (0.23958334, 1.0208333), (0.23958334, 1.1076388), (0.15277776, 1.1076388), (0.23958334, 1.0208333), (0.32638887, 1.0208333), (0.32638887, 1.1076388), (0.23958334, 1.1076388), (0.32638887, 1.0208333), (0.4131944, 1.0208333), (0.4131944, 1.1076388), (0.32638887, 1.1076388), (0.4131944, 1.0208333), (0.5, 1.0208333), (0.5, 1.1076388), (0.4131944, 1.1076388), (0.5, 1.0208333), (0.5868055, 1.0208333), (0.5868055, 1.1076388), (0.5, 1.1076388), (0.5868055, 1.0208333), (0.67361104, 1.0208333), (0.67361104, 1.1076388), (0.5868055, 1.1076388), (0.67361104, 1.0208333), (0.7604166, 1.0208333), (0.7604166, 1.1076388), (0.67361104, 1.1076388), (0.7604166, 1.0208333), (0.8472222, 1.0208333), (0.8472222, 1.1076388), (0.7604166, 1.1076388), (0.8472222, 1.0208333), (0.9340277, 1.0208333), (0.9340277, 1.1076388), (0.8472222, 1.1076388), (0.9340277, 1.0208333), (1.0208333, 1.0208333), (1.0208333, 1.1076388), (0.9340277, 1.1076388), (1.0208333, 1.0208333), (1.1076388, 1.0208333), (1.1076388, 1.1076388), (1.0208333, 1.1076388), (1.1076388, 1.0208333), (1.1944444, 1.0208333), (1.1944444, 1.1076388), (1.1076388, 1.1076388), (1.1944444, 1.0208333), (1.28125, 1.0208333), (1.28125, 1.1076388), (1.1944444, 1.1076388), (1.28125, 1.0208333), (1.3680553, 1.0208333), (1.3680553, 1.1076388), (1.28125, 1.1076388), (1.3680553, 1.0208333), (1.454861, 1.0208333), (1.454861, 1.1076388), (1.3680553, 1.1076388), (1.454861, 1.0208333), (1.5416666, 1.0208333), (1.5416666, 1.1076388), (1.454861, 1.1076388), (-0.5416666, 1.1076388), (-0.4548611, 1.1076388), (-0.4548611, 1.1944444), (-0.5416666, 1.1944444), (-0.4548611, 1.1076388), (-0.36805552, 1.1076388), (-0.36805552, 1.1944444), (-0.4548611, 1.1944444), (-0.36805552, 1.1076388), (-0.28125, 1.1076388), (-0.28125, 1.1944444), (-0.36805552, 1.1944444), (-0.28125, 1.1076388), (-0.19444448, 1.1076388), (-0.19444448, 1.1944444), (-0.28125, 1.1944444), (-0.19444448, 1.1076388), (-0.107638896, 1.1076388), (-0.107638896, 1.1944444), (-0.19444448, 1.1944444), (-0.107638896, 1.1076388), (-0.020833313, 1.1076388), (-0.020833313, 1.1944444), (-0.107638896, 1.1944444), (-0.020833313, 1.1076388), (0.06597221, 1.1076388), (0.06597221, 1.1944444), (-0.020833313, 1.1944444), (0.06597221, 1.1076388), (0.15277776, 1.1076388), (0.15277776, 1.1944444), (0.06597221, 1.1944444), (0.15277776, 1.1076388), (0.23958334, 1.1076388), (0.23958334, 1.1944444), (0.15277776, 1.1944444), (0.23958334, 1.1076388), (0.32638887, 1.1076388), (0.32638887, 1.1944444), (0.23958334, 1.1944444), (0.32638887, 1.1076388), (0.4131944, 1.1076388), (0.4131944, 1.1944444), (0.32638887, 1.1944444), (0.4131944, 1.1076388), (0.5, 1.1076388), (0.5, 1.1944444), (0.4131944, 1.1944444), (0.5, 1.1076388), (0.5868055, 1.1076388), (0.5868055, 1.1944444), (0.5, 1.1944444), (0.5868055, 1.1076388), (0.67361104, 1.1076388), (0.67361104, 1.1944444), (0.5868055, 1.1944444), (0.67361104, 1.1076388), (0.7604166, 1.1076388), (0.7604166, 1.1944444), (0.67361104, 1.1944444), (0.7604166, 1.1076388), (0.8472222, 1.1076388), (0.8472222, 1.1944444), (0.7604166, 1.1944444), (0.8472222, 1.1076388), (0.9340277, 1.1076388), (0.9340277, 1.1944444), (0.8472222, 1.1944444), (0.9340277, 1.1076388), (1.0208333, 1.1076388), (1.0208333, 1.1944444), (0.9340277, 1.1944444), (1.0208333, 1.1076388), (1.1076388, 1.1076388), (1.1076388, 1.1944444), (1.0208333, 1.1944444), (1.1076388, 1.1076388), (1.1944444, 1.1076388), (1.1944444, 1.1944444), (1.1076388, 1.1944444), (1.1944444, 1.1076388), (1.28125, 1.1076388), (1.28125, 1.1944444), (1.1944444, 1.1944444), (1.28125, 1.1076388), (1.3680553, 1.1076388), (1.3680553, 1.1944444), (1.28125, 1.1944444), (1.3680553, 1.1076388), (1.454861, 1.1076388), (1.454861, 1.1944444), (1.3680553, 1.1944444), (1.454861, 1.1076388), (1.5416666, 1.1076388), (1.5416666, 1.1944444), (1.454861, 1.1944444), (-0.5416666, 1.1944444), (-0.4548611, 1.1944444), (-0.4548611, 1.28125), (-0.5416666, 1.28125), (-0.4548611, 1.1944444), (-0.36805552, 1.1944444), (-0.36805552, 1.28125), (-0.4548611, 1.28125), (-0.36805552, 1.1944444), (-0.28125, 1.1944444), (-0.28125, 1.28125), (-0.36805552, 1.28125), (-0.28125, 1.1944444), (-0.19444448, 1.1944444), (-0.19444448, 1.28125), (-0.28125, 1.28125), (-0.19444448, 1.1944444), (-0.107638896, 1.1944444), (-0.107638896, 1.28125), (-0.19444448, 1.28125), (-0.107638896, 1.1944444), (-0.020833313, 1.1944444), (-0.020833313, 1.28125), (-0.107638896, 1.28125), (-0.020833313, 1.1944444), (0.06597221, 1.1944444), (0.06597221, 1.28125), (-0.020833313, 1.28125), (0.06597221, 1.1944444), (0.15277776, 1.1944444), (0.15277776, 1.28125), (0.06597221, 1.28125), (0.15277776, 1.1944444), (0.23958334, 1.1944444), (0.23958334, 1.28125), (0.15277776, 1.28125), (0.23958334, 1.1944444), (0.32638887, 1.1944444), (0.32638887, 1.28125), (0.23958334, 1.28125), (0.32638887, 1.1944444), (0.4131944, 1.1944444), (0.4131944, 1.28125), (0.32638887, 1.28125), (0.4131944, 1.1944444), (0.5, 1.1944444), (0.5, 1.28125), (0.4131944, 1.28125), (0.5, 1.1944444), (0.5868055, 1.1944444), (0.5868055, 1.28125), (0.5, 1.28125), (0.5868055, 1.1944444), (0.67361104, 1.1944444), (0.67361104, 1.28125), (0.5868055, 1.28125), (0.67361104, 1.1944444), (0.7604166, 1.1944444), (0.7604166, 1.28125), (0.67361104, 1.28125), (0.7604166, 1.1944444), (0.8472222, 1.1944444), (0.8472222, 1.28125), (0.7604166, 1.28125), (0.8472222, 1.1944444), (0.9340277, 1.1944444), (0.9340277, 1.28125), (0.8472222, 1.28125), (0.9340277, 1.1944444), (1.0208333, 1.1944444), (1.0208333, 1.28125), (0.9340277, 1.28125), (1.0208333, 1.1944444), (1.1076388, 1.1944444), (1.1076388, 1.28125), (1.0208333, 1.28125), (1.1076388, 1.1944444), (1.1944444, 1.1944444), (1.1944444, 1.28125), (1.1076388, 1.28125), (1.1944444, 1.1944444), (1.28125, 1.1944444), (1.28125, 1.28125), (1.1944444, 1.28125), (1.28125, 1.1944444), (1.3680553, 1.1944444), (1.3680553, 1.28125), (1.28125, 1.28125), (1.3680553, 1.1944444), (1.454861, 1.1944444), (1.454861, 1.28125), (1.3680553, 1.28125), (1.454861, 1.1944444), (1.5416666, 1.1944444), (1.5416666, 1.28125), (1.454861, 1.28125), (-0.5416666, 1.28125), (-0.4548611, 1.28125), (-0.4548611, 1.3680553), (-0.5416666, 1.3680553), (-0.4548611, 1.28125), (-0.36805552, 1.28125), (-0.36805552, 1.3680553), (-0.4548611, 1.3680553), (-0.36805552, 1.28125), (-0.28125, 1.28125), (-0.28125, 1.3680553), (-0.36805552, 1.3680553), (-0.28125, 1.28125), (-0.19444448, 1.28125), (-0.19444448, 1.3680553), (-0.28125, 1.3680553), (-0.19444448, 1.28125), (-0.107638896, 1.28125), (-0.107638896, 1.3680553), (-0.19444448, 1.3680553), (-0.107638896, 1.28125), (-0.020833313, 1.28125), (-0.020833313, 1.3680553), (-0.107638896, 1.3680553), (-0.020833313, 1.28125), (0.06597221, 1.28125), (0.06597221, 1.3680553), (-0.020833313, 1.3680553), (0.06597221, 1.28125), (0.15277776, 1.28125), (0.15277776, 1.3680553), (0.06597221, 1.3680553), (0.15277776, 1.28125), (0.23958334, 1.28125), (0.23958334, 1.3680553), (0.15277776, 1.3680553), (0.23958334, 1.28125), (0.32638887, 1.28125), (0.32638887, 1.3680553), (0.23958334, 1.3680553), (0.32638887, 1.28125), (0.4131944, 1.28125), (0.4131944, 1.3680553), (0.32638887, 1.3680553), (0.4131944, 1.28125), (0.5, 1.28125), (0.5, 1.3680553), (0.4131944, 1.3680553), (0.5, 1.28125), (0.5868055, 1.28125), (0.5868055, 1.3680553), (0.5, 1.3680553), (0.5868055, 1.28125), (0.67361104, 1.28125), (0.67361104, 1.3680553), (0.5868055, 1.3680553), (0.67361104, 1.28125), (0.7604166, 1.28125), (0.7604166, 1.3680553), (0.67361104, 1.3680553), (0.7604166, 1.28125), (0.8472222, 1.28125), (0.8472222, 1.3680553), (0.7604166, 1.3680553), (0.8472222, 1.28125), (0.9340277, 1.28125), (0.9340277, 1.3680553), (0.8472222, 1.3680553), (0.9340277, 1.28125), (1.0208333, 1.28125), (1.0208333, 1.3680553), (0.9340277, 1.3680553), (1.0208333, 1.28125), (1.1076388, 1.28125), (1.1076388, 1.3680553), (1.0208333, 1.3680553), (1.1076388, 1.28125), (1.1944444, 1.28125), (1.1944444, 1.3680553), (1.1076388, 1.3680553), (1.1944444, 1.28125), (1.28125, 1.28125), (1.28125, 1.3680553), (1.1944444, 1.3680553), (1.28125, 1.28125), (1.3680553, 1.28125), (1.3680553, 1.3680553), (1.28125, 1.3680553), (1.3680553, 1.28125), (1.454861, 1.28125), (1.454861, 1.3680553), (1.3680553, 1.3680553), (1.454861, 1.28125), (1.5416666, 1.28125), (1.5416666, 1.3680553), (1.454861, 1.3680553), (-0.5416666, 1.3680553), (-0.4548611, 1.3680553), (-0.4548611, 1.4548609), (-0.5416666, 1.4548609), (-0.4548611, 1.3680553), (-0.36805552, 1.3680553), (-0.36805552, 1.4548609), (-0.4548611, 1.4548609), (-0.36805552, 1.3680553), (-0.28125, 1.3680553), (-0.28125, 1.4548609), (-0.36805552, 1.4548609), (-0.28125, 1.3680553), (-0.19444448, 1.3680553), (-0.19444448, 1.4548609), (-0.28125, 1.4548609), (-0.19444448, 1.3680553), (-0.107638896, 1.3680553), (-0.107638896, 1.4548609), (-0.19444448, 1.4548609), (-0.107638896, 1.3680553), (-0.020833313, 1.3680553), (-0.020833313, 1.4548609), (-0.107638896, 1.4548609), (-0.020833313, 1.3680553), (0.06597221, 1.3680553), (0.06597221, 1.4548609), (-0.020833313, 1.4548609), (0.06597221, 1.3680553), (0.15277776, 1.3680553), (0.15277776, 1.4548609), (0.06597221, 1.4548609), (0.15277776, 1.3680553), (0.23958334, 1.3680553), (0.23958334, 1.4548609), (0.15277776, 1.4548609), (0.23958334, 1.3680553), (0.32638887, 1.3680553), (0.32638887, 1.4548609), (0.23958334, 1.4548609), (0.32638887, 1.3680553), (0.4131944, 1.3680553), (0.4131944, 1.4548609), (0.32638887, 1.4548609), (0.4131944, 1.3680553), (0.5, 1.3680553), (0.5, 1.4548609), (0.4131944, 1.4548609), (0.5, 1.3680553), (0.5868055, 1.3680553), (0.5868055, 1.4548609), (0.5, 1.4548609), (0.5868055, 1.3680553), (0.67361104, 1.3680553), (0.67361104, 1.4548609), (0.5868055, 1.4548609), (0.67361104, 1.3680553), (0.7604166, 1.3680553), (0.7604166, 1.4548609), (0.67361104, 1.4548609), (0.7604166, 1.3680553), (0.8472222, 1.3680553), (0.8472222, 1.4548609), (0.7604166, 1.4548609), (0.8472222, 1.3680553), (0.9340277, 1.3680553), (0.9340277, 1.4548609), (0.8472222, 1.4548609), (0.9340277, 1.3680553), (1.0208333, 1.3680553), (1.0208333, 1.4548609), (0.9340277, 1.4548609), (1.0208333, 1.3680553), (1.1076388, 1.3680553), (1.1076388, 1.4548609), (1.0208333, 1.4548609), (1.1076388, 1.3680553), (1.1944444, 1.3680553), (1.1944444, 1.4548609), (1.1076388, 1.4548609), (1.1944444, 1.3680553), (1.28125, 1.3680553), (1.28125, 1.4548609), (1.1944444, 1.4548609), (1.28125, 1.3680553), (1.3680553, 1.3680553), (1.3680553, 1.4548609), (1.28125, 1.4548609), (1.3680553, 1.3680553), (1.454861, 1.3680553), (1.454861, 1.4548609), (1.3680553, 1.4548609), (1.454861, 1.3680553), (1.5416666, 1.3680553), (1.5416666, 1.4548609), (1.454861, 1.4548609), (-0.5416666, 1.4548609), (-0.4548611, 1.4548609), (-0.4548611, 1.5416666), (-0.5416666, 1.5416666), (-0.4548611, 1.4548609), (-0.36805552, 1.4548609), (-0.36805552, 1.5416666), (-0.4548611, 1.5416666), (-0.36805552, 1.4548609), (-0.28125, 1.4548609), (-0.28125, 1.5416666), (-0.36805552, 1.5416666), (-0.28125, 1.4548609), (-0.19444448, 1.4548609), (-0.19444448, 1.5416666), (-0.28125, 1.5416666), (-0.19444448, 1.4548609), (-0.107638896, 1.4548609), (-0.107638896, 1.5416666), (-0.19444448, 1.5416666), (-0.107638896, 1.4548609), (-0.020833313, 1.4548609), (-0.020833313, 1.5416666), (-0.107638896, 1.5416666), (-0.020833313, 1.4548609), (0.06597221, 1.4548609), (0.06597221, 1.5416666), (-0.020833313, 1.5416666), (0.06597221, 1.4548609), (0.15277776, 1.4548609), (0.15277776, 1.5416666), (0.06597221, 1.5416666), (0.15277776, 1.4548609), (0.23958334, 1.4548609), (0.23958334, 1.5416666), (0.15277776, 1.5416666), (0.23958334, 1.4548609), (0.32638887, 1.4548609), (0.32638887, 1.5416666), (0.23958334, 1.5416666), (0.32638887, 1.4548609), (0.4131944, 1.4548609), (0.4131944, 1.5416666), (0.32638887, 1.5416666), (0.4131944, 1.4548609), (0.5, 1.4548609), (0.5, 1.5416666), (0.4131944, 1.5416666), (0.5, 1.4548609), (0.5868055, 1.4548609), (0.5868055, 1.5416666), (0.5, 1.5416666), (0.5868055, 1.4548609), (0.67361104, 1.4548609), (0.67361104, 1.5416666), (0.5868055, 1.5416666), (0.67361104, 1.4548609), (0.7604166, 1.4548609), (0.7604166, 1.5416666), (0.67361104, 1.5416666), (0.7604166, 1.4548609), (0.8472222, 1.4548609), (0.8472222, 1.5416666), (0.7604166, 1.5416666), (0.8472222, 1.4548609), (0.9340277, 1.4548609), (0.9340277, 1.5416666), (0.8472222, 1.5416666), (0.9340277, 1.4548609), (1.0208333, 1.4548609), (1.0208333, 1.5416666), (0.9340277, 1.5416666), (1.0208333, 1.4548609), (1.1076388, 1.4548609), (1.1076388, 1.5416666), (1.0208333, 1.5416666), (1.1076388, 1.4548609), (1.1944444, 1.4548609), (1.1944444, 1.5416666), (1.1076388, 1.5416666), (1.1944444, 1.4548609), (1.28125, 1.4548609), (1.28125, 1.5416666), (1.1944444, 1.5416666), (1.28125, 1.4548609), (1.3680553, 1.4548609), (1.3680553, 1.5416666), (1.28125, 1.5416666), (1.3680553, 1.4548609), (1.454861, 1.4548609), (1.454861, 1.5416666), (1.3680553, 1.5416666), (1.454861, 1.4548609), (1.5416666, 1.4548609), (1.5416666, 1.5416666), (1.454861, 1.5416666)] (
interpolation = "faceVarying"
)
int[] primvars:st:indices = None
int[] primvars:uv2:indices = None
int[] primvars:uv3:indices = None
uniform token subdivisionScheme = "none"
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
}
def Material "Material" (
references = None
)
{
token outputs:mtlx:surface.connect =
token outputs:realitykit:vertex
float2 ui:nodegraph:realitykit:subgraphOutputs:pos = (1584.082, 297.875)
int ui:nodegraph:realitykit:subgraphOutputs:stackingOrder = 208
def Shader "PreviewSurface"
{
uniform token info:id = "ND_UsdPreviewSurface_surfaceshader"
float inputs:clearcoat
float inputs:clearcoatRoughness
color3f inputs:diffuseColor = (0, 0, 0) (
colorSpace = "srgb_texture"
)
color3f inputs:diffuseColor.connect = None
color3f inputs:emissiveColor.connect =
float inputs:ior
float inputs:metallic
float3 inputs:normal
float inputs:occlusion
float inputs:opacity
float inputs:roughness = 1
token outputs:out
float2 ui:nodegraph:node:pos = (1358.9023, 236.28516)
int ui:nodegraph:node:stackingOrder = 208
string[] ui:nodegraph:realitykit:node:attributesShowingChildren = ["Advanced"]
}
def Shader "Swizzle" (
references = None
)
{
uniform token info:id = "ND_swizzle_color4_color3"
string inputs:channels = "rgb"
color4f inputs:in = (0, 0.9914394, 1, 1) (
colorSpace = "srgb_texture"
)
color4f inputs:in.connect =
color3f outputs:out
float2 ui:nodegraph:node:pos = (600.34766, 201.72266)
int ui:nodegraph:node:stackingOrder = 214
}
def Shader "Read_EmissionUV"
{
uniform token info:id = "ND_UsdPrimvarReader_vector2"
float2 inputs:fallback
string inputs:varname = "emissionUV"
float2 outputs:out
float2 ui:nodegraph:node:pos = (25.28125, 95.32422)
int ui:nodegraph:node:stackingOrder = 155
}
def Shader "Read_AttenuationUV"
{
uniform token info:id = "ND_UsdPrimvarReader_vector2"
float2 inputs:fallback
string inputs:varname = "attenuationUV"
float2 outputs:out
float2 ui:nodegraph:node:pos = (21.964844, 237.73828)
int ui:nodegraph:node:stackingOrder = 155
}
def Shader "ViewDirection"
{
uniform token info:id = "ND_realitykit_viewdirection_vector3"
float3 outputs:out
float2 ui:nodegraph:node:pos = (3.890625, 370.65625)
int ui:nodegraph:node:stackingOrder = 124
}
def Shader "Reflection_Diffuse"
{
uniform token info:id = "ND_realitykit_light_spill_diffuse"
asset inputs:attenuationMap = @DefaultAttenuationMap.exr@
float2 inputs:attenuationUV.connect =
float2 inputs:emitterUV.connect =
color4f outputs:out
float2 ui:nodegraph:node:pos = (278.48438, 138.34766)
int ui:nodegraph:node:stackingOrder = 167
}
def Shader "Reflection_Specular"
{
uniform token info:id = "ND_realitykit_light_spill_specular"
float2 inputs:antialiasingStrength
float3 inputs:reflection_origin
float3 inputs:unreflected_direction.connect =
color4f outputs:out
float2 ui:nodegraph:node:pos = (304.35938, 380.5625)
int ui:nodegraph:node:stackingOrder = 168
}
def Shader "Separate4" (
references = None
)
{
uniform token info:id = "ND_separate4_color4"
color4f inputs:in.connect =
float outputs:outa
float outputs:outb
float outputs:outg
float outputs:outr
float2 ui:nodegraph:node:pos = (570.3125, 468.03516)
int ui:nodegraph:node:stackingOrder = 169
}
def Shader "Combine3" (
references = None
)
{
uniform token info:id = "ND_combine3_color3"
float inputs:in1.connect =
float inputs:in2.connect =
float inputs:in3.connect =
color3f outputs:out
float2 ui:nodegraph:node:pos = (748.46875, 459.0625)
int ui:nodegraph:node:stackingOrder = 174
}
def Shader "Mix_1" (
references = None
)
{
uniform token info:id = "ND_mix_color3"
color3f inputs:bg
color3f inputs:fg.connect =
float inputs:mix.connect =
color3f outputs:out
float2 ui:nodegraph:node:pos = (934.75, 462.09375)
int ui:nodegraph:node:stackingOrder = 212
}
def Shader "Add" (
references = None
)
{
uniform token info:id = "ND_add_color3"
color3f inputs:in1.connect =
color3f inputs:in2.connect =
color3f outputs:out
float2 ui:nodegraph:node:pos = (1128.5977, 255.71094)
int ui:nodegraph:node:stackingOrder = 210
}
}
}
================================================
FILE: bsky 3D/Packages/RealityKitContent/Sources/RealityKitContent/RealityKitContent.rkassets/Immersive.usda
================================================
#usda 1.0
(
defaultPrim = "Root"
metersPerUnit = 1
upAxis = "Y"
)
def Xform "Root"
{
reorder nameChildren = ["Sphere_Left", "Sphere_Right", "GridMaterial"]
def "SkyDome" (
active = true
prepend references = @SkyDome.usdz@
)
{
float3 xformOp:scale = (0.01, 0.01, 0.01)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
}
def Xform "Video_Dock" (
references = None
)
{
double3 xformOp:translate = (0, 0.8, -3)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
def Xform "Player"
{
double3 xformOp:translate = (0, 0.6, 0)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:orient", "xformOp:scale"]
def RealityKitComponent "CustomDockingRegion"
{
token info:id = "RealityKit.CustomDockingRegion"
def RealityKitStruct "m_bounds"
{
float3 max = (1.2, 0.5, 0)
float3 min = (-1.2, -0.5, -0)
}
}
}
def "Ground" (
prepend references = @Ground/Ground.usda@
)
{
}
}
}
================================================
FILE: bsky 3D/Packages/RealityKitContent/Sources/RealityKitContent/RealityKitContent.swift
================================================
import Foundation
/// Bundle for the RealityKitContent project
public let realityKitContentBundle = Bundle.module
================================================
FILE: bsky 3D/README.md
================================================
# Bluesky 3D
3D Visualizer for Bluesky's Jetstream Firehose
https://github.com/user-attachments/assets/2b5ef07d-bd55-42dd-815c-52516f6d6831
================================================
FILE: bsky 3D/bsky 3D/AppModel.swift
================================================
//
// AppModel.swift
// bsky 3D
//
// Created by IVAN CAMPOS on 11/25/24.
//
import SwiftUI
/// Maintains app-wide state
@MainActor
@Observable
class AppModel {
let immersiveSpaceID = "ImmersiveSpace"
enum ImmersiveSpaceState {
case closed
case inTransition
case open
}
var immersiveSpaceState = ImmersiveSpaceState.closed
}
================================================
FILE: bsky 3D/bsky 3D/Assets.xcassets/AccentColor.colorset/Contents.json
================================================
{
"colors" : [
{
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: bsky 3D/bsky 3D/Assets.xcassets/AppIcon.solidimagestack/Back.solidimagestacklayer/Content.imageset/Contents.json
================================================
{
"images" : [
{
"idiom" : "vision",
"scale" : "2x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: bsky 3D/bsky 3D/Assets.xcassets/AppIcon.solidimagestack/Back.solidimagestacklayer/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: bsky 3D/bsky 3D/Assets.xcassets/AppIcon.solidimagestack/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
},
"layers" : [
{
"filename" : "Front.solidimagestacklayer"
},
{
"filename" : "Middle.solidimagestacklayer"
},
{
"filename" : "Back.solidimagestacklayer"
}
]
}
================================================
FILE: bsky 3D/bsky 3D/Assets.xcassets/AppIcon.solidimagestack/Front.solidimagestacklayer/Content.imageset/Contents.json
================================================
{
"images" : [
{
"idiom" : "vision",
"scale" : "2x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: bsky 3D/bsky 3D/Assets.xcassets/AppIcon.solidimagestack/Front.solidimagestacklayer/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: bsky 3D/bsky 3D/Assets.xcassets/AppIcon.solidimagestack/Middle.solidimagestacklayer/Content.imageset/Contents.json
================================================
{
"images" : [
{
"idiom" : "vision",
"scale" : "2x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: bsky 3D/bsky 3D/Assets.xcassets/AppIcon.solidimagestack/Middle.solidimagestacklayer/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: bsky 3D/bsky 3D/Assets.xcassets/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: bsky 3D/bsky 3D/ContentView.swift
================================================
//
// ContentView.swift
// bsky 3D
//
// Created by IVAN CAMPOS on 11/25/24.
//
import SwiftUI
import RealityKit
struct ContentView: View {
var body: some View {
VStack {
Text("Bluesky 3D")
.font(.custom("Orbitron-ExtraBold", size: 72))
.foregroundColor(Color(hex: "#007BFF") ?? .blue)
Text("bsky.app/profile/ivancampos.com")
.font(.custom("Orbitron-Regular", size: 48))
.foregroundColor(Color(hex: "#1e90ff") ?? .cyan)
ToggleImmersiveSpaceButton()
}
}
}
extension Color {
init?(hex: String) {
var hexSanitized = hex.trimmingCharacters(in: .whitespacesAndNewlines)
hexSanitized = hexSanitized.hasPrefix("#") ? String(hexSanitized.dropFirst()) : hexSanitized
let length = hexSanitized.count
guard length == 6 || length == 8 else { return nil }
var rgb: UInt64 = 0
Scanner(string: hexSanitized).scanHexInt64(&rgb)
let red, green, blue, alpha: Double
if length == 6 {
red = Double((rgb >> 16) & 0xFF) / 255.0
green = Double((rgb >> 8) & 0xFF) / 255.0
blue = Double(rgb & 0xFF) / 255.0
alpha = 1.0
} else {
red = Double((rgb >> 24) & 0xFF) / 255.0
green = Double((rgb >> 16) & 0xFF) / 255.0
blue = Double((rgb >> 8) & 0xFF) / 255.0
alpha = Double(rgb & 0xFF) / 255.0
}
self.init(.sRGB, red: red, green: green, blue: blue, opacity: alpha)
}
}
================================================
FILE: bsky 3D/bsky 3D/ImmersiveView.swift
================================================
//
// ImmersiveView.swift
// bsky 3D
//
// Created by IVAN CAMPOS on 11/25/24.
//
import SwiftUI
import RealityKit
import RealityKitContent
struct ImmersiveView: View {
@Environment(AppModel.self) var appModel
@ObservedObject var webSocketService = WebSocketService()
@State private var realityKitContent: RealityViewContent?
var body: some View {
RealityView { content in
realityKitContent = content
}
.onAppear {
webSocketService.connect()
}
.onDisappear {
webSocketService.disconnect()
}
.onChange(of: webSocketService.postText) { oldValue, newValue in
guard let realityKitContent = realityKitContent else { return }
// Create and configure a new text entity based on the new value
let textEntity = createTextEntity(text: newValue)
// Add the new entity to the RealityKit content
realityKitContent.add(textEntity)
// Schedule the textEntity to fade away after 3 seconds
DispatchQueue.main.asyncAfter(deadline: .now() + 3.0) {
// Scale the textEntity to zero over 1 second
textEntity.move(to: Transform(scale: .zero), relativeTo: textEntity, duration: 1.0)
// Schedule removal of the textEntity after the animation duration
DispatchQueue.main.asyncAfter(deadline: .now() + 4.0) { // 3 seconds + 1 second for animation
realityKitContent.remove(textEntity)
}
}
}
.preferredSurroundingsEffect(.colorMultiply(.gray))
}
func createTextEntity(text: String) -> ModelEntity {
print("Creating text entity: \(text)")
// Determine the color based on the text content
let textColor: UIColor
var fontName: String = "Orbitron-Regular"
if containsJapanese(text: text) {
textColor = .red
fontName = "Orbitron-ExtraBold"
} else if text.lowercased().hasPrefix("http") {
textColor = .cyan
} else if text.hasPrefix("@") || text.hasPrefix("#") {
textColor = .green
} else if text.lowercased().contains("bitcoin") || text.lowercased().contains("btc") {
textColor = .orange
} else if text.lowercased().contains("bluesky") {
textColor = UIColor(red: 0.0, green: 123.0/255.0, blue: 255.0/255.0, alpha: 1.0)
} else {
textColor = .white
}
// Create the text mesh
let textMesh = MeshResource.generateText(
text,
extrusionDepth: 0.0, // Depth of the 3D text
font: UIFont(name: fontName, size: 0.05) ?? .systemFont(ofSize: 0.05), // System font or a custom one
containerFrame: CGRect(x: 0, y: 0, width: 1.5, height: 0.75),
alignment: .center, // Center alignment
lineBreakMode: .byWordWrapping
)
// Create a material for the text
let material = UnlitMaterial(color: textColor)
// Combine the mesh and material into a model entity
let textEntity = ModelEntity(mesh: textMesh, materials: [material])
// Randomize the position (in meters) of the text entity within a certain range
let randomX = Float.random(in: -2...0)
let randomY = Float.random(in: 0.5...2.0)
let randomZ = Float.random(in: -4.0 ... -1.0)
// Position the text entity
textEntity.position = [randomX, randomY, randomZ] // Set the randomized position
return textEntity
}
// Function to check if the text contains Japanese characters
func containsJapanese(text: String) -> Bool {
for scalar in text.unicodeScalars {
if (scalar.value >= 0x3040 && scalar.value <= 0x309F) || // Hiragana
(scalar.value >= 0x30A0 && scalar.value <= 0x30FF) || // Katakana
(scalar.value >= 0x4E00 && scalar.value <= 0x9FAF) { // Kanji
return true
}
}
return false
}
}
================================================
FILE: bsky 3D/bsky 3D/Info.plist
================================================
UIAppFonts
Orbitron.ttf
Orbitron-ExtraBold.ttf
UIApplicationSceneManifest
UIApplicationPreferredDefaultSceneSessionRole
UIWindowSceneSessionRoleApplication
UIApplicationSupportsMultipleScenes
UISceneConfigurations
================================================
FILE: bsky 3D/bsky 3D/Preview Content/Preview Assets.xcassets/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: bsky 3D/bsky 3D/Root.swift
================================================
//
// Root.swift
// Jetstream
//
// Created by IVAN CAMPOS on 11/24/24.
//
import Foundation
// Top-level JSON structure
struct Root: Codable {
let did: String
let timeUs: Int
let kind: String
let commit: Commit?
enum CodingKeys: String, CodingKey {
case did
case timeUs = "time_us"
case kind
case commit
}
}
// Commit structure
struct Commit: Codable {
let rev: String?
let operation: String?
let collection: String?
let rkey: String?
let record: Record?
let cid: String?
}
// Record structure
struct Record: Codable {
let type: String?
let createdAt: String?
let embed: Embed?
let langs: [String]?
let text: String?
enum CodingKeys: String, CodingKey {
case type = "$type"
case createdAt
case embed
case langs
case text
}
}
// Embed structure
struct Embed: Codable {
let type: String?
let media: Media?
let record: EmbedRecord?
enum CodingKeys: String, CodingKey {
case type = "$type"
case media
case record
}
}
// Media structure
struct Media: Codable {
let type: String?
let external: External?
enum CodingKeys: String, CodingKey {
case type = "$type"
case external
}
}
// External structure
struct External: Codable {
let description: String?
let thumb: Thumb?
let title: String?
let uri: String?
}
// Thumb structure
struct Thumb: Codable {
let type: String?
let ref: Ref?
let mimeType: String?
let size: Int?
enum CodingKeys: String, CodingKey {
case type = "$type"
case ref
case mimeType
case size
}
}
// Ref structure
struct Ref: Codable {
let link: String?
enum CodingKeys: String, CodingKey {
case link = "$link"
}
}
// EmbedRecord structure
struct EmbedRecord: Codable {
let type: String?
let record: RecordDetails?
enum CodingKeys: String, CodingKey {
case type = "$type"
case record
}
}
// RecordDetails structure
struct RecordDetails: Codable {
let cid: String?
let uri: String?
}
================================================
FILE: bsky 3D/bsky 3D/ToggleImmersiveSpaceButton.swift
================================================
//
// ToggleImmersiveSpaceButton.swift
// bsky 3D
//
// Created by IVAN CAMPOS on 11/25/24.
//
import SwiftUI
struct ToggleImmersiveSpaceButton: View {
@Environment(AppModel.self) private var appModel
@Environment(\.dismissImmersiveSpace) private var dismissImmersiveSpace
@Environment(\.openImmersiveSpace) private var openImmersiveSpace
var body: some View {
Button {
Task { @MainActor in
switch appModel.immersiveSpaceState {
case .open:
appModel.immersiveSpaceState = .inTransition
await dismissImmersiveSpace()
// Don't set immersiveSpaceState to .closed because there
// are multiple paths to ImmersiveView.onDisappear().
// Only set .closed in ImmersiveView.onDisappear().
case .closed:
appModel.immersiveSpaceState = .inTransition
switch await openImmersiveSpace(id: appModel.immersiveSpaceID) {
case .opened:
// Don't set immersiveSpaceState to .open because there
// may be multiple paths to ImmersiveView.onAppear().
// Only set .open in ImmersiveView.onAppear().
break
case .userCancelled, .error:
// On error, we need to mark the immersive space
// as closed because it failed to open.
fallthrough
@unknown default:
// On unknown response, assume space did not open.
appModel.immersiveSpaceState = .closed
}
case .inTransition:
// This case should not ever happen because button is disabled for this case.
break
}
}
} label: {
Text(appModel.immersiveSpaceState == .open ? "Hide Immersive Space" : "Show Immersive Space")
}
.disabled(appModel.immersiveSpaceState == .inTransition)
.animation(.none, value: 0)
.fontWeight(.semibold)
}
}
================================================
FILE: bsky 3D/bsky 3D/WebSocketService.swift
================================================
//
// WebSocketService.swift
// WebSockets
//
// Created by IVAN CAMPOS on 11/24/24.
//
import Foundation
import SwiftUI
class WebSocketService: ObservableObject {
private var webSocketTask: URLSessionWebSocketTask?
//ALL -> "wss://jetstream2.us-west.bsky.network/subscribe"
//POSTS -> "wss://jetstream2.us-east.bsky.network/subscribe?wantedCollections=app.bsky.feed.post"
/*
"wss://jetstream2.us-west.bsky.network/subscribe?
wantedCollections=app.bsky.feed.post&
wantedCollections=app.bsky.feed.like&
wantedCollections=app.bsky.graph.follow&
wantedDids=did:plc:q6gjnaw2blty4crticxkmujt&
cursor=1725519626134432"
*/
private let url = URL(string: "wss://jetstream2.us-east.bsky.network/subscribe?wantedCollections=app.bsky.feed.post")!
@Published var postText: String = "Loading..."
init() {
}
deinit {
disconnect()
}
func connect() {
let session = URLSession(configuration: .default)
webSocketTask = session.webSocketTask(with: url)
webSocketTask?.resume()
receiveMessage()
// Setup a ping/pong mechanism to keep the connection alive or detect disconnections.
setupHeartbeat()
}
private func setupHeartbeat() {
// Send a ping at regular intervals
Timer.scheduledTimer(withTimeInterval: 30, repeats: true) { [weak self] _ in
self?.webSocketTask?.sendPing { error in
if let error = error {
print("Ping failed: \(error.localizedDescription)")
self?.reconnect()
}
}
}
}
private func reconnect() {
disconnect()
connect()
}
func disconnect() {
webSocketTask?.cancel(with: .goingAway, reason: nil)
webSocketTask = nil
}
private func receiveMessage() {
webSocketTask?.receive { [weak self] result in
switch result {
case .failure(let error):
print("Error in receiving message: \(error)")
case .success(let message):
switch message {
case .string(let text):
self?.handleMessage(text)
case .data(let data):
//print("Received data: \(data)")
if let text = String(data: data, encoding: .utf8) {
self?.handleMessage(text)
}
default:
break
}
self?.receiveMessage() // Keep listening
}
}
}
private func handleMessage(_ text: String) {
guard let jsonData = text.data(using: .utf8) else {
print("Invalid JSON string.")
return
}
do {
let root = try JSONDecoder().decode(Root.self, from: jsonData)
guard let commit = root.commit else {
print("Commit data is missing.")
return
}
if let currentCollection = commit.collection, let currentRecord = commit.record?.text {
// print("Collection: \(currentCollection), Record: \(currentRecord)")
DispatchQueue.main.async {
if currentRecord.range(
of: "$AAPL|bitcoin|Vision Pro|visionOS|BTC|XG|Miami Dolphins|xgalx|Dodgers|Boston|xcode|swiftUI|realityKit|spatial comp|reality|XR|simulation|immers|virtual reality|augmented reality|mixed reality|extended reality|artificial intelligence|openAI|futur|ethereum|kendrick|3D|bluesky|midjourney|ai art|aiart|tesla|GPT|nike|ps5|$ETH|innovation|NFL|NBA|starter pack|𝕏||₿|matrix|inception|cyber|playstation|skynet|robot",
options: [.regularExpression, .caseInsensitive]) != nil {
self.postText = currentRecord
}
}
} else {
print("Missing required fields: collection or record text.")
}
} catch let DecodingError.keyNotFound(key, context) {
print("Key '\(key.stringValue)' not found:", context.debugDescription)
} catch let DecodingError.valueNotFound(type, context) {
print("Value of type '\(type)' not found:", context.debugDescription)
} catch let DecodingError.typeMismatch(type, context) {
print("Type mismatch for type '\(type)':", context.debugDescription)
} catch let DecodingError.dataCorrupted(context) {
print("Data corrupted:", context.debugDescription)
} catch {
print("Unknown error: \(error.localizedDescription)")
}
}
}
================================================
FILE: bsky 3D/bsky 3D/bsky_3DApp.swift
================================================
//
// bsky_3DApp.swift
// bsky 3D
//
// Created by IVAN CAMPOS on 11/25/24.
//
import SwiftUI
@main
struct bsky_3DApp: App {
@State private var appModel = AppModel()
var body: some Scene {
WindowGroup {
ContentView()
.environment(appModel)
}
.windowStyle(.plain)
.persistentSystemOverlays(.hidden)
ImmersiveSpace(id: appModel.immersiveSpaceID) {
ImmersiveView()
.environment(appModel)
.onAppear {
appModel.immersiveSpaceState = .open
}
.onDisappear {
appModel.immersiveSpaceState = .closed
}
}
.immersionStyle(selection: .constant(.mixed), in: .mixed)
}
}
================================================
FILE: bsky 3D/bsky 3D.xcodeproj/project.pbxproj
================================================
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 77;
objects = {
/* Begin PBXBuildFile section */
3B62EA0C2CF4E8CB00F28ED4 /* RealityKitContent in Frameworks */ = {isa = PBXBuildFile; productRef = 3B62EA0B2CF4E8CB00F28ED4 /* RealityKitContent */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
3B62EA062CF4E8CB00F28ED4 /* bsky 3D.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "bsky 3D.app"; sourceTree = BUILT_PRODUCTS_DIR; };
3B62EA0A2CF4E8CB00F28ED4 /* RealityKitContent */ = {isa = PBXFileReference; lastKnownFileType = wrapper; path = RealityKitContent; sourceTree = ""; };
/* End PBXFileReference section */
/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */
3B62EA212CF4E8CC00F28ED4 /* Exceptions for "bsky 3D" folder in "bsky 3D" target */ = {
isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
membershipExceptions = (
Info.plist,
);
target = 3B62EA052CF4E8CB00F28ED4 /* bsky 3D */;
};
/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */
/* Begin PBXFileSystemSynchronizedRootGroup section */
3B62EA082CF4E8CB00F28ED4 /* bsky 3D */ = {
isa = PBXFileSystemSynchronizedRootGroup;
exceptions = (
3B62EA212CF4E8CC00F28ED4 /* Exceptions for "bsky 3D" folder in "bsky 3D" target */,
);
path = "bsky 3D";
sourceTree = "";
};
/* End PBXFileSystemSynchronizedRootGroup section */
/* Begin PBXFrameworksBuildPhase section */
3B62EA032CF4E8CB00F28ED4 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
3B62EA0C2CF4E8CB00F28ED4 /* RealityKitContent in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
3B62E9FD2CF4E8CB00F28ED4 = {
isa = PBXGroup;
children = (
3B62EA082CF4E8CB00F28ED4 /* bsky 3D */,
3B62EA092CF4E8CB00F28ED4 /* Packages */,
3B62EA072CF4E8CB00F28ED4 /* Products */,
);
sourceTree = "";
};
3B62EA072CF4E8CB00F28ED4 /* Products */ = {
isa = PBXGroup;
children = (
3B62EA062CF4E8CB00F28ED4 /* bsky 3D.app */,
);
name = Products;
sourceTree = "";
};
3B62EA092CF4E8CB00F28ED4 /* Packages */ = {
isa = PBXGroup;
children = (
3B62EA0A2CF4E8CB00F28ED4 /* RealityKitContent */,
);
path = Packages;
sourceTree = "";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
3B62EA052CF4E8CB00F28ED4 /* bsky 3D */ = {
isa = PBXNativeTarget;
buildConfigurationList = 3B62EA222CF4E8CC00F28ED4 /* Build configuration list for PBXNativeTarget "bsky 3D" */;
buildPhases = (
3B62EA022CF4E8CB00F28ED4 /* Sources */,
3B62EA032CF4E8CB00F28ED4 /* Frameworks */,
3B62EA042CF4E8CB00F28ED4 /* Resources */,
);
buildRules = (
);
dependencies = (
);
fileSystemSynchronizedGroups = (
3B62EA082CF4E8CB00F28ED4 /* bsky 3D */,
);
name = "bsky 3D";
packageProductDependencies = (
3B62EA0B2CF4E8CB00F28ED4 /* RealityKitContent */,
);
productName = "bsky 3D";
productReference = 3B62EA062CF4E8CB00F28ED4 /* bsky 3D.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
3B62E9FE2CF4E8CB00F28ED4 /* Project object */ = {
isa = PBXProject;
attributes = {
BuildIndependentTargetsInParallel = 1;
LastSwiftUpdateCheck = 1620;
LastUpgradeCheck = 1620;
TargetAttributes = {
3B62EA052CF4E8CB00F28ED4 = {
CreatedOnToolsVersion = 16.2;
};
};
};
buildConfigurationList = 3B62EA012CF4E8CB00F28ED4 /* Build configuration list for PBXProject "bsky 3D" */;
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = 3B62E9FD2CF4E8CB00F28ED4;
minimizedProjectReferenceProxies = 1;
preferredProjectObjectVersion = 77;
productRefGroup = 3B62EA072CF4E8CB00F28ED4 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
3B62EA052CF4E8CB00F28ED4 /* bsky 3D */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
3B62EA042CF4E8CB00F28ED4 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
3B62EA022CF4E8CB00F28ED4 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
3B62EA232CF4E8CC00F28ED4 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_ASSET_PATHS = "\"bsky 3D/Preview Content\"";
DEVELOPMENT_TEAM = 2DJDH872JZ;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "$(TARGET_NAME)/Info.plist";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = "com.ivancampos.bsky-3D";
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "xros xrsimulator";
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = 7;
};
name = Debug;
};
3B62EA242CF4E8CC00F28ED4 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_ASSET_PATHS = "\"bsky 3D/Preview Content\"";
DEVELOPMENT_TEAM = 2DJDH872JZ;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "$(TARGET_NAME)/Info.plist";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0;
PRODUCT_BUNDLE_IDENTIFIER = "com.ivancampos.bsky-3D";
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "xros xrsimulator";
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = 7;
};
name = Release;
};
3B62EA252CF4E8CC00F28ED4 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu17;
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;
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = xros;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
XROS_DEPLOYMENT_TARGET = 2.1;
};
name = Debug;
};
3B62EA262CF4E8CC00F28ED4 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_USER_SCRIPT_SANDBOXING = YES;
GCC_C_LANGUAGE_STANDARD = gnu17;
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;
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = xros;
SWIFT_COMPILATION_MODE = wholemodule;
VALIDATE_PRODUCT = YES;
XROS_DEPLOYMENT_TARGET = 2.1;
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
3B62EA012CF4E8CB00F28ED4 /* Build configuration list for PBXProject "bsky 3D" */ = {
isa = XCConfigurationList;
buildConfigurations = (
3B62EA252CF4E8CC00F28ED4 /* Debug */,
3B62EA262CF4E8CC00F28ED4 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
3B62EA222CF4E8CC00F28ED4 /* Build configuration list for PBXNativeTarget "bsky 3D" */ = {
isa = XCConfigurationList;
buildConfigurations = (
3B62EA232CF4E8CC00F28ED4 /* Debug */,
3B62EA242CF4E8CC00F28ED4 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
/* Begin XCSwiftPackageProductDependency section */
3B62EA0B2CF4E8CB00F28ED4 /* RealityKitContent */ = {
isa = XCSwiftPackageProductDependency;
productName = RealityKitContent;
};
/* End XCSwiftPackageProductDependency section */
};
rootObject = 3B62E9FE2CF4E8CB00F28ED4 /* Project object */;
}
================================================
FILE: bsky 3D/bsky 3D.xcodeproj/project.xcworkspace/contents.xcworkspacedata
================================================