using System; using System.CodeDom.Compiler; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Security; using System.Security.Cryptography; using System.Security.Permissions; using System.Text; using System.Threading; using AOT; using Unity.Collections; using Unity.Collections.LowLevel.Unsafe; using UnityEngine.Analytics; using UnityEngine.Events; using UnityEngine.InputSystem; using UnityEngine.InputSystem.Controls; using UnityEngine.InputSystem.Layouts; using UnityEngine.InputSystem.LowLevel; using UnityEngine.InputSystem.Utilities; using UnityEngine.InputSystem.XR; using UnityEngine.Rendering; using UnityEngine.Rendering.Universal; using UnityEngine.Scripting; using UnityEngine.Serialization; using UnityEngine.XR.Management; using UnityEngine.XR.OpenXR.Features; using UnityEngine.XR.OpenXR.Features.Interactions; using UnityEngine.XR.OpenXR.Input; using UnityEngine.XR.OpenXR.NativeTypes; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: InternalsVisibleTo("Unity.XR.OpenXR.Features.MockRuntime")] [assembly: InternalsVisibleTo("Unity.XR.OpenXR.Features.ConformanceAutomation")] [assembly: InternalsVisibleTo("Unity.XR.OpenXR.Editor")] [assembly: InternalsVisibleTo("Unity.XR.OpenXR.Features.MetaQuestSupport.Editor")] [assembly: InternalsVisibleTo("UnityEditor.XR.OpenXR.Tests")] [assembly: InternalsVisibleTo("Unity.XR.OpenXR.Testing")] [assembly: InternalsVisibleTo("Unity.XR.OpenXR.TestTooling.Tests")] [assembly: Preserve] [assembly: InternalsVisibleTo("Unity.XR.OpenXR.TestHelpers")] [assembly: InternalsVisibleTo("Unity.XR.OpenXR.Tests")] [assembly: InternalsVisibleTo("Unity.XR.OpenXR.Editor.Tests")] [assembly: InternalsVisibleTo("Unity.XR.OpenXR.TestTooling")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.0.0.0")] [module: UnverifiableCode] [CompilerGenerated] [EditorBrowsable(EditorBrowsableState.Never)] [GeneratedCode("Unity.MonoScriptGenerator.MonoScriptInfoGenerator", null)] internal class UnitySourceGeneratedAssemblyMonoScriptTypes_v1 { private struct MonoScriptData { public byte[] FilePathsData; public byte[] TypesData; public int TotalTypes; public int TotalFiles; public bool IsEditorOnly; } [MethodImpl(MethodImplOptions.AggressiveInlining)] private static MonoScriptData Get() { return new MonoScriptData { FilePathsData = new byte[15474] { 0, 0, 0, 2, 0, 0, 0, 75, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 67, 111, 110, 115, 116, 97, 110, 116, 115, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 108, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 70, 101, 97, 116, 117, 114, 101, 115, 92, 65, 117, 116, 111, 109, 97, 116, 105, 99, 68, 121, 110, 97, 109, 105, 99, 82, 101, 115, 111, 108, 117, 116, 105, 111, 110, 70, 101, 97, 116, 117, 114, 101, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 114, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 70, 101, 97, 116, 117, 114, 101, 115, 92, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 92, 88, 114, 80, 101, 114, 102, 111, 114, 109, 97, 110, 99, 101, 83, 101, 116, 116, 105, 110, 103, 115, 70, 101, 97, 116, 117, 114, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 112, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 70, 101, 97, 116, 117, 114, 101, 115, 92, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 92, 88, 114, 80, 101, 114, 102, 111, 114, 109, 97, 110, 99, 101, 83, 101, 116, 116, 105, 110, 103, 115, 84, 121, 112, 101, 115, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 99, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 70, 101, 97, 116, 117, 114, 101, 115, 92, 70, 111, 118, 101, 97, 116, 101, 100, 82, 101, 110, 100, 101, 114, 105, 110, 103, 70, 101, 97, 116, 117, 114, 101, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 103, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 70, 101, 97, 116, 117, 114, 101, 115, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 115, 92, 68, 80, 97, 100, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 99, 115, 0, 0, 0, 3, 0, 0, 0, 106, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 70, 101, 97, 116, 117, 114, 101, 115, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 115, 92, 69, 121, 101, 71, 97, 122, 101, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 114, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 70, 101, 97, 116, 117, 114, 101, 115, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 115, 92, 72, 97, 110, 100, 67, 111, 109, 109, 111, 110, 80, 111, 115, 101, 115, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 110, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 70, 101, 97, 116, 117, 114, 101, 115, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 115, 92, 72, 97, 110, 100, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 80, 114, 111, 102, 105, 108, 101, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 115, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 70, 101, 97, 116, 117, 114, 101, 115, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 115, 92, 72, 80, 82, 101, 118, 101, 114, 98, 71, 50, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 80, 114, 111, 102, 105, 108, 101, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 112, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 70, 101, 97, 116, 117, 114, 101, 115, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 115, 92, 72, 84, 67, 86, 105, 118, 101, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 80, 114, 111, 102, 105, 108, 101, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 114, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 70, 101, 97, 116, 117, 114, 101, 115, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 115, 92, 75, 72, 82, 83, 105, 109, 112, 108, 101, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 80, 114, 111, 102, 105, 108, 101, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 123, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 70, 101, 97, 116, 117, 114, 101, 115, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 115, 92, 77, 101, 116, 97, 81, 117, 101, 115, 116, 84, 111, 117, 99, 104, 80, 108, 117, 115, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 80, 114, 111, 102, 105, 108, 101, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 122, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 70, 101, 97, 116, 117, 114, 101, 115, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 115, 92, 77, 101, 116, 97, 81, 117, 101, 115, 116, 84, 111, 117, 99, 104, 80, 114, 111, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 80, 114, 111, 102, 105, 108, 101, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 112, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 70, 101, 97, 116, 117, 114, 101, 115, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 115, 92, 77, 105, 99, 114, 111, 115, 111, 102, 116, 72, 97, 110, 100, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 120, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 70, 101, 97, 116, 117, 114, 101, 115, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 115, 92, 77, 105, 99, 114, 111, 115, 111, 102, 116, 77, 111, 116, 105, 111, 110, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 80, 114, 111, 102, 105, 108, 101, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 116, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 70, 101, 97, 116, 117, 114, 101, 115, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 115, 92, 79, 99, 117, 108, 117, 115, 84, 111, 117, 99, 104, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 80, 114, 111, 102, 105, 108, 101, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 107, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 70, 101, 97, 116, 117, 114, 101, 115, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 115, 92, 80, 97, 108, 109, 80, 111, 115, 101, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 115, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 70, 101, 97, 116, 117, 114, 101, 115, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 115, 92, 86, 97, 108, 118, 101, 73, 110, 100, 101, 120, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 80, 114, 111, 102, 105, 108, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 88, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 70, 101, 97, 116, 117, 114, 101, 115, 92, 79, 112, 101, 110, 88, 82, 70, 101, 97, 116, 117, 114, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 96, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 70, 101, 97, 116, 117, 114, 101, 115, 92, 79, 112, 101, 110, 88, 82, 70, 101, 97, 116, 117, 114, 101, 73, 110, 116, 101, 114, 110, 97, 108, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 96, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 70, 101, 97, 116, 117, 114, 101, 115, 92, 79, 112, 101, 110, 88, 82, 70, 101, 97, 116, 117, 114, 101, 83, 101, 116, 116, 105, 110, 103, 115, 46, 99, 115, 0, 0, 0, 6, 0, 0, 0, 99, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 70, 101, 97, 116, 117, 114, 101, 115, 92, 79, 112, 101, 110, 88, 82, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 70, 101, 97, 116, 117, 114, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 91, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 70, 101, 97, 116, 117, 114, 101, 115, 92, 83, 112, 97, 99, 101, 87, 97, 114, 112, 70, 101, 97, 116, 117, 114, 101, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 85, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 105, 110, 112, 117, 116, 92, 72, 97, 112, 116, 105, 99, 67, 111, 110, 116, 114, 111, 108, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 84, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 105, 110, 112, 117, 116, 92, 79, 112, 101, 110, 88, 82, 68, 101, 118, 105, 99, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 81, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 105, 110, 112, 117, 116, 92, 79, 112, 101, 110, 88, 82, 72, 109, 100, 46, 99, 115, 0, 0, 0, 4, 0, 0, 0, 83, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 105, 110, 112, 117, 116, 92, 79, 112, 101, 110, 88, 82, 73, 110, 112, 117, 116, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 83, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 105, 110, 112, 117, 116, 92, 80, 111, 115, 101, 67, 111, 110, 116, 114, 111, 108, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 98, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 67, 111, 114, 101, 92, 80, 111, 108, 108, 69, 118, 101, 110, 116, 82, 111, 117, 116, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 100, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 67, 111, 114, 101, 92, 88, 114, 66, 97, 115, 101, 73, 110, 83, 116, 114, 117, 99, 116, 117, 114, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 104, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 67, 111, 114, 101, 92, 88, 114, 69, 118, 101, 110, 116, 68, 97, 116, 97, 66, 97, 115, 101, 72, 101, 97, 100, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 94, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 67, 111, 114, 101, 92, 88, 114, 69, 120, 116, 101, 110, 116, 50, 68, 102, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 89, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 67, 111, 114, 101, 92, 88, 114, 70, 111, 118, 102, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 90, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 67, 111, 114, 101, 92, 88, 114, 80, 111, 115, 101, 102, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 96, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 67, 111, 114, 101, 92, 88, 114, 81, 117, 97, 116, 101, 114, 110, 105, 111, 110, 102, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 91, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 67, 111, 114, 101, 92, 88, 114, 82, 101, 115, 117, 108, 116, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 104, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 67, 111, 114, 101, 92, 88, 114, 83, 119, 97, 112, 99, 104, 97, 105, 110, 67, 114, 101, 97, 116, 101, 73, 110, 102, 111, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 93, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 67, 111, 114, 101, 92, 88, 114, 86, 101, 99, 116, 111, 114, 50, 102, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 93, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 67, 111, 114, 101, 92, 88, 114, 86, 101, 99, 116, 111, 114, 51, 102, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 96, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 79, 112, 101, 110, 88, 82, 82, 101, 115, 117, 108, 116, 83, 116, 97, 116, 117, 115, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 107, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 102, 117, 116, 117, 114, 101, 92, 79, 112, 101, 110, 88, 82, 78, 97, 116, 105, 118, 101, 65, 112, 105, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 121, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 102, 117, 116, 117, 114, 101, 92, 83, 116, 114, 117, 99, 116, 115, 92, 88, 114, 70, 117, 116, 117, 114, 101, 67, 97, 110, 99, 101, 108, 73, 110, 102, 111, 69, 88, 84, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 131, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 102, 117, 116, 117, 114, 101, 92, 83, 116, 114, 117, 99, 116, 115, 92, 88, 114, 70, 117, 116, 117, 114, 101, 67, 111, 109, 112, 108, 101, 116, 105, 111, 110, 66, 97, 115, 101, 72, 101, 97, 100, 101, 114, 69, 88, 84, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 121, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 102, 117, 116, 117, 114, 101, 92, 83, 116, 114, 117, 99, 116, 115, 92, 88, 114, 70, 117, 116, 117, 114, 101, 67, 111, 109, 112, 108, 101, 116, 105, 111, 110, 69, 88, 84, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 119, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 102, 117, 116, 117, 114, 101, 92, 83, 116, 114, 117, 99, 116, 115, 92, 88, 114, 70, 117, 116, 117, 114, 101, 80, 111, 108, 108, 73, 110, 102, 111, 69, 88, 84, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 121, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 102, 117, 116, 117, 114, 101, 92, 83, 116, 114, 117, 99, 116, 115, 92, 88, 114, 70, 117, 116, 117, 114, 101, 80, 111, 108, 108, 82, 101, 115, 117, 108, 116, 69, 88, 84, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 115, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 115, 112, 97, 116, 105, 97, 108, 95, 97, 110, 99, 104, 111, 114, 92, 79, 112, 101, 110, 88, 82, 78, 97, 116, 105, 118, 101, 65, 112, 105, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 136, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 115, 112, 97, 116, 105, 97, 108, 95, 97, 110, 99, 104, 111, 114, 92, 83, 116, 114, 117, 99, 116, 115, 92, 88, 114, 83, 112, 97, 116, 105, 97, 108, 65, 110, 99, 104, 111, 114, 67, 114, 101, 97, 116, 101, 73, 110, 102, 111, 69, 88, 84, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 149, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 115, 112, 97, 116, 105, 97, 108, 95, 97, 110, 99, 104, 111, 114, 92, 83, 116, 114, 117, 99, 116, 115, 92, 88, 114, 83, 112, 97, 116, 105, 97, 108, 67, 97, 112, 97, 98, 105, 108, 105, 116, 121, 67, 111, 110, 102, 105, 103, 117, 114, 97, 116, 105, 111, 110, 65, 110, 99, 104, 111, 114, 69, 88, 84, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 139, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 115, 112, 97, 116, 105, 97, 108, 95, 97, 110, 99, 104, 111, 114, 92, 83, 116, 114, 117, 99, 116, 115, 92, 88, 114, 83, 112, 97, 116, 105, 97, 108, 67, 111, 109, 112, 111, 110, 101, 110, 116, 65, 110, 99, 104, 111, 114, 76, 105, 115, 116, 69, 88, 84, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 131, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 115, 112, 97, 116, 105, 97, 108, 95, 101, 110, 116, 105, 116, 121, 92, 73, 83, 112, 97, 116, 105, 97, 108, 67, 97, 112, 97, 98, 105, 108, 105, 116, 121, 67, 111, 110, 102, 105, 103, 117, 114, 97, 116, 105, 111, 110, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 115, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 115, 112, 97, 116, 105, 97, 108, 95, 101, 110, 116, 105, 116, 121, 92, 79, 112, 101, 110, 88, 82, 78, 97, 116, 105, 118, 101, 65, 112, 105, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 144, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 115, 112, 97, 116, 105, 97, 108, 95, 101, 110, 116, 105, 116, 121, 92, 83, 116, 114, 117, 99, 116, 115, 92, 67, 111, 109, 112, 111, 110, 101, 110, 116, 115, 92, 88, 114, 83, 112, 97, 116, 105, 97, 108, 66, 111, 117, 110, 100, 101, 100, 50, 68, 68, 97, 116, 97, 69, 88, 84, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 153, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 115, 112, 97, 116, 105, 97, 108, 95, 101, 110, 116, 105, 116, 121, 92, 83, 116, 114, 117, 99, 116, 115, 92, 67, 111, 109, 112, 111, 110, 101, 110, 116, 115, 92, 88, 114, 83, 112, 97, 116, 105, 97, 108, 67, 111, 109, 112, 111, 110, 101, 110, 116, 66, 111, 117, 110, 100, 101, 100, 50, 68, 76, 105, 115, 116, 69, 88, 84, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 153, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 115, 112, 97, 116, 105, 97, 108, 95, 101, 110, 116, 105, 116, 121, 92, 83, 116, 114, 117, 99, 116, 115, 92, 67, 111, 109, 112, 111, 110, 101, 110, 116, 115, 92, 88, 114, 83, 112, 97, 116, 105, 97, 108, 67, 111, 109, 112, 111, 110, 101, 110, 116, 66, 111, 117, 110, 100, 101, 100, 51, 68, 76, 105, 115, 116, 69, 88, 84, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 150, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 115, 112, 97, 116, 105, 97, 108, 95, 101, 110, 116, 105, 116, 121, 92, 83, 116, 114, 117, 99, 116, 115, 92, 67, 111, 109, 112, 111, 110, 101, 110, 116, 115, 92, 88, 114, 83, 112, 97, 116, 105, 97, 108, 67, 111, 109, 112, 111, 110, 101, 110, 116, 77, 101, 115, 104, 51, 68, 76, 105, 115, 116, 69, 88, 84, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 150, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 115, 112, 97, 116, 105, 97, 108, 95, 101, 110, 116, 105, 116, 121, 92, 83, 116, 114, 117, 99, 116, 115, 92, 67, 111, 109, 112, 111, 110, 101, 110, 116, 115, 92, 88, 114, 83, 112, 97, 116, 105, 97, 108, 67, 111, 109, 112, 111, 110, 101, 110, 116, 80, 97, 114, 101, 110, 116, 76, 105, 115, 116, 69, 88, 84, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 139, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 115, 112, 97, 116, 105, 97, 108, 95, 101, 110, 116, 105, 116, 121, 92, 83, 116, 114, 117, 99, 116, 115, 92, 67, 111, 109, 112, 111, 110, 101, 110, 116, 115, 92, 88, 114, 83, 112, 97, 116, 105, 97, 108, 77, 101, 115, 104, 68, 97, 116, 97, 69, 88, 84, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 143, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 115, 112, 97, 116, 105, 97, 108, 95, 101, 110, 116, 105, 116, 121, 92, 83, 116, 114, 117, 99, 116, 115, 92, 88, 114, 67, 114, 101, 97, 116, 101, 83, 112, 97, 116, 105, 97, 108, 67, 111, 110, 116, 101, 120, 116, 67, 111, 109, 112, 108, 101, 116, 105, 111, 110, 69, 88, 84, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 153, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 115, 112, 97, 116, 105, 97, 108, 95, 101, 110, 116, 105, 116, 121, 92, 83, 116, 114, 117, 99, 116, 115, 92, 88, 114, 67, 114, 101, 97, 116, 101, 83, 112, 97, 116, 105, 97, 108, 68, 105, 115, 99, 111, 118, 101, 114, 121, 83, 110, 97, 112, 115, 104, 111, 116, 67, 111, 109, 112, 108, 101, 116, 105, 111, 110, 69, 88, 84, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 157, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 115, 112, 97, 116, 105, 97, 108, 95, 101, 110, 116, 105, 116, 121, 92, 83, 116, 114, 117, 99, 116, 115, 92, 88, 114, 67, 114, 101, 97, 116, 101, 83, 112, 97, 116, 105, 97, 108, 68, 105, 115, 99, 111, 118, 101, 114, 121, 83, 110, 97, 112, 115, 104, 111, 116, 67, 111, 109, 112, 108, 101, 116, 105, 111, 110, 73, 110, 102, 111, 69, 88, 84, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 149, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 115, 112, 97, 116, 105, 97, 108, 95, 101, 110, 116, 105, 116, 121, 92, 83, 116, 114, 117, 99, 116, 115, 92, 88, 114, 69, 118, 101, 110, 116, 68, 97, 116, 97, 83, 112, 97, 116, 105, 97, 108, 68, 105, 115, 99, 111, 118, 101, 114, 121, 82, 101, 99, 111, 109, 109, 101, 110, 100, 101, 100, 69, 88, 84, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 126, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 115, 112, 97, 116, 105, 97, 108, 95, 101, 110, 116, 105, 116, 121, 92, 83, 116, 114, 117, 99, 116, 115, 92, 88, 114, 83, 112, 97, 116, 105, 97, 108, 66, 117, 102, 102, 101, 114, 69, 88, 84, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 133, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 115, 112, 97, 116, 105, 97, 108, 95, 101, 110, 116, 105, 116, 121, 92, 83, 116, 114, 117, 99, 116, 115, 92, 88, 114, 83, 112, 97, 116, 105, 97, 108, 66, 117, 102, 102, 101, 114, 71, 101, 116, 73, 110, 102, 111, 69, 88, 84, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 144, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 115, 112, 97, 116, 105, 97, 108, 95, 101, 110, 116, 105, 116, 121, 92, 83, 116, 114, 117, 99, 116, 115, 92, 88, 114, 83, 112, 97, 116, 105, 97, 108, 67, 97, 112, 97, 98, 105, 108, 105, 116, 121, 67, 111, 109, 112, 111, 110, 101, 110, 116, 84, 121, 112, 101, 115, 69, 88, 84, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 153, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 115, 112, 97, 116, 105, 97, 108, 95, 101, 110, 116, 105, 116, 121, 92, 83, 116, 114, 117, 99, 116, 115, 92, 88, 114, 83, 112, 97, 116, 105, 97, 108, 67, 97, 112, 97, 98, 105, 108, 105, 116, 121, 67, 111, 110, 102, 105, 103, 117, 114, 97, 116, 105, 111, 110, 66, 97, 115, 101, 72, 101, 97, 100, 101, 114, 69, 88, 84, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 147, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 115, 112, 97, 116, 105, 97, 108, 95, 101, 110, 116, 105, 116, 121, 92, 83, 116, 114, 117, 99, 116, 115, 92, 88, 114, 83, 112, 97, 116, 105, 97, 108, 67, 111, 109, 112, 111, 110, 101, 110, 116, 68, 97, 116, 97, 81, 117, 101, 114, 121, 67, 111, 110, 100, 105, 116, 105, 111, 110, 69, 88, 84, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 144, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 115, 112, 97, 116, 105, 97, 108, 95, 101, 110, 116, 105, 116, 121, 92, 83, 116, 114, 117, 99, 116, 115, 92, 88, 114, 83, 112, 97, 116, 105, 97, 108, 67, 111, 109, 112, 111, 110, 101, 110, 116, 68, 97, 116, 97, 81, 117, 101, 114, 121, 82, 101, 115, 117, 108, 116, 69, 88, 84, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 137, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 115, 112, 97, 116, 105, 97, 108, 95, 101, 110, 116, 105, 116, 121, 92, 83, 116, 114, 117, 99, 116, 115, 92, 88, 114, 83, 112, 97, 116, 105, 97, 108, 67, 111, 110, 116, 101, 120, 116, 67, 114, 101, 97, 116, 101, 73, 110, 102, 111, 69, 88, 84, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 147, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 115, 112, 97, 116, 105, 97, 108, 95, 101, 110, 116, 105, 116, 121, 92, 83, 116, 114, 117, 99, 116, 115, 92, 88, 114, 83, 112, 97, 116, 105, 97, 108, 68, 105, 115, 99, 111, 118, 101, 114, 121, 83, 110, 97, 112, 115, 104, 111, 116, 67, 114, 101, 97, 116, 101, 73, 110, 102, 111, 69, 88, 84, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 142, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 115, 112, 97, 116, 105, 97, 108, 95, 101, 110, 116, 105, 116, 121, 92, 83, 116, 114, 117, 99, 116, 115, 92, 88, 114, 83, 112, 97, 116, 105, 97, 108, 69, 110, 116, 105, 116, 121, 70, 114, 111, 109, 73, 100, 67, 114, 101, 97, 116, 101, 73, 110, 102, 111, 69, 88, 84, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 139, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 115, 112, 97, 116, 105, 97, 108, 95, 101, 110, 116, 105, 116, 121, 92, 83, 116, 114, 117, 99, 116, 115, 92, 88, 114, 83, 112, 97, 116, 105, 97, 108, 70, 105, 108, 116, 101, 114, 84, 114, 97, 99, 107, 105, 110, 103, 83, 116, 97, 116, 101, 69, 88, 84, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 144, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 115, 112, 97, 116, 105, 97, 108, 95, 101, 110, 116, 105, 116, 121, 92, 83, 116, 114, 117, 99, 116, 115, 92, 88, 114, 83, 112, 97, 116, 105, 97, 108, 85, 112, 100, 97, 116, 101, 83, 110, 97, 112, 115, 104, 111, 116, 67, 114, 101, 97, 116, 101, 73, 110, 102, 111, 69, 88, 84, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 160, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 115, 112, 97, 116, 105, 97, 108, 95, 109, 97, 114, 107, 101, 114, 95, 116, 114, 97, 99, 107, 105, 110, 103, 92, 83, 116, 114, 117, 99, 116, 115, 92, 88, 114, 83, 112, 97, 116, 105, 97, 108, 67, 97, 112, 97, 98, 105, 108, 105, 116, 121, 67, 111, 110, 102, 105, 103, 117, 114, 97, 116, 105, 111, 110, 65, 112, 114, 105, 108, 84, 97, 103, 69, 88, 84, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 163, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 115, 112, 97, 116, 105, 97, 108, 95, 109, 97, 114, 107, 101, 114, 95, 116, 114, 97, 99, 107, 105, 110, 103, 92, 83, 116, 114, 117, 99, 116, 115, 92, 88, 114, 83, 112, 97, 116, 105, 97, 108, 67, 97, 112, 97, 98, 105, 108, 105, 116, 121, 67, 111, 110, 102, 105, 103, 117, 114, 97, 116, 105, 111, 110, 65, 114, 117, 99, 111, 77, 97, 114, 107, 101, 114, 69, 88, 84, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 163, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 115, 112, 97, 116, 105, 97, 108, 95, 109, 97, 114, 107, 101, 114, 95, 116, 114, 97, 99, 107, 105, 110, 103, 92, 83, 116, 114, 117, 99, 116, 115, 92, 88, 114, 83, 112, 97, 116, 105, 97, 108, 67, 97, 112, 97, 98, 105, 108, 105, 116, 121, 67, 111, 110, 102, 105, 103, 117, 114, 97, 116, 105, 111, 110, 77, 105, 99, 114, 111, 81, 114, 67, 111, 100, 101, 69, 88, 84, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 158, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 115, 112, 97, 116, 105, 97, 108, 95, 109, 97, 114, 107, 101, 114, 95, 116, 114, 97, 99, 107, 105, 110, 103, 92, 83, 116, 114, 117, 99, 116, 115, 92, 88, 114, 83, 112, 97, 116, 105, 97, 108, 67, 97, 112, 97, 98, 105, 108, 105, 116, 121, 67, 111, 110, 102, 105, 103, 117, 114, 97, 116, 105, 111, 110, 81, 114, 67, 111, 100, 101, 69, 88, 84, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 148, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 115, 112, 97, 116, 105, 97, 108, 95, 109, 97, 114, 107, 101, 114, 95, 116, 114, 97, 99, 107, 105, 110, 103, 92, 83, 116, 114, 117, 99, 116, 115, 92, 88, 114, 83, 112, 97, 116, 105, 97, 108, 67, 111, 109, 112, 111, 110, 101, 110, 116, 77, 97, 114, 107, 101, 114, 76, 105, 115, 116, 69, 88, 84, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 139, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 115, 112, 97, 116, 105, 97, 108, 95, 109, 97, 114, 107, 101, 114, 95, 116, 114, 97, 99, 107, 105, 110, 103, 92, 83, 116, 114, 117, 99, 116, 115, 92, 88, 114, 83, 112, 97, 116, 105, 97, 108, 77, 97, 114, 107, 101, 114, 68, 97, 116, 97, 69, 88, 84, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 139, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 115, 112, 97, 116, 105, 97, 108, 95, 109, 97, 114, 107, 101, 114, 95, 116, 114, 97, 99, 107, 105, 110, 103, 92, 83, 116, 114, 117, 99, 116, 115, 92, 88, 114, 83, 112, 97, 116, 105, 97, 108, 77, 97, 114, 107, 101, 114, 83, 105, 122, 101, 69, 88, 84, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 153, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 115, 112, 97, 116, 105, 97, 108, 95, 109, 97, 114, 107, 101, 114, 95, 116, 114, 97, 99, 107, 105, 110, 103, 92, 83, 116, 114, 117, 99, 116, 115, 92, 88, 114, 83, 112, 97, 116, 105, 97, 108, 77, 97, 114, 107, 101, 114, 83, 116, 97, 116, 105, 99, 79, 112, 116, 105, 109, 105, 122, 97, 116, 105, 111, 110, 69, 88, 84, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 147, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 115, 112, 97, 116, 105, 97, 108, 95, 112, 101, 114, 115, 105, 115, 116, 101, 110, 99, 101, 92, 69, 110, 117, 109, 115, 92, 88, 114, 83, 112, 97, 116, 105, 97, 108, 80, 101, 114, 115, 105, 115, 116, 101, 110, 99, 101, 67, 111, 110, 116, 101, 120, 116, 82, 101, 115, 117, 108, 116, 69, 88, 84, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 120, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 115, 112, 97, 116, 105, 97, 108, 95, 112, 101, 114, 115, 105, 115, 116, 101, 110, 99, 101, 92, 79, 112, 101, 110, 88, 82, 78, 97, 116, 105, 118, 101, 65, 112, 105, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 159, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 115, 112, 97, 116, 105, 97, 108, 95, 112, 101, 114, 115, 105, 115, 116, 101, 110, 99, 101, 92, 83, 116, 114, 117, 99, 116, 115, 92, 88, 114, 67, 114, 101, 97, 116, 101, 83, 112, 97, 116, 105, 97, 108, 80, 101, 114, 115, 105, 115, 116, 101, 110, 99, 101, 67, 111, 110, 116, 101, 120, 116, 67, 111, 109, 112, 108, 101, 116, 105, 111, 110, 69, 88, 84, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 149, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 115, 112, 97, 116, 105, 97, 108, 95, 112, 101, 114, 115, 105, 115, 116, 101, 110, 99, 101, 92, 83, 116, 114, 117, 99, 116, 115, 92, 88, 114, 83, 112, 97, 116, 105, 97, 108, 67, 111, 109, 112, 111, 110, 101, 110, 116, 80, 101, 114, 115, 105, 115, 116, 101, 110, 99, 101, 76, 105, 115, 116, 69, 88, 84, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 149, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 115, 112, 97, 116, 105, 97, 108, 95, 112, 101, 114, 115, 105, 115, 116, 101, 110, 99, 101, 92, 83, 116, 114, 117, 99, 116, 115, 92, 88, 114, 83, 112, 97, 116, 105, 97, 108, 67, 111, 110, 116, 101, 120, 116, 80, 101, 114, 115, 105, 115, 116, 101, 110, 99, 101, 67, 111, 110, 102, 105, 103, 69, 88, 84, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 155, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 115, 112, 97, 116, 105, 97, 108, 95, 112, 101, 114, 115, 105, 115, 116, 101, 110, 99, 101, 92, 83, 116, 114, 117, 99, 116, 115, 92, 88, 114, 83, 112, 97, 116, 105, 97, 108, 68, 105, 115, 99, 111, 118, 101, 114, 121, 80, 101, 114, 115, 105, 115, 116, 101, 110, 99, 101, 85, 117, 105, 100, 70, 105, 108, 116, 101, 114, 69, 88, 84, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 153, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 115, 112, 97, 116, 105, 97, 108, 95, 112, 101, 114, 115, 105, 115, 116, 101, 110, 99, 101, 92, 83, 116, 114, 117, 99, 116, 115, 92, 88, 114, 83, 112, 97, 116, 105, 97, 108, 80, 101, 114, 115, 105, 115, 116, 101, 110, 99, 101, 67, 111, 110, 116, 101, 120, 116, 67, 114, 101, 97, 116, 101, 73, 110, 102, 111, 69, 88, 84, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 140, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 115, 112, 97, 116, 105, 97, 108, 95, 112, 101, 114, 115, 105, 115, 116, 101, 110, 99, 101, 92, 83, 116, 114, 117, 99, 116, 115, 92, 88, 114, 83, 112, 97, 116, 105, 97, 108, 80, 101, 114, 115, 105, 115, 116, 101, 110, 99, 101, 68, 97, 116, 97, 69, 88, 84, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 131, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 115, 112, 97, 116, 105, 97, 108, 95, 112, 101, 114, 115, 105, 115, 116, 101, 110, 99, 101, 95, 111, 112, 101, 114, 97, 116, 105, 111, 110, 115, 92, 79, 112, 101, 110, 88, 82, 78, 97, 116, 105, 118, 101, 65, 112, 105, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 159, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 115, 112, 97, 116, 105, 97, 108, 95, 112, 101, 114, 115, 105, 115, 116, 101, 110, 99, 101, 95, 111, 112, 101, 114, 97, 116, 105, 111, 110, 115, 92, 83, 116, 114, 117, 99, 116, 115, 92, 88, 114, 80, 101, 114, 115, 105, 115, 116, 83, 112, 97, 116, 105, 97, 108, 69, 110, 116, 105, 116, 121, 67, 111, 109, 112, 108, 101, 116, 105, 111, 110, 69, 88, 84, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 153, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 115, 112, 97, 116, 105, 97, 108, 95, 112, 101, 114, 115, 105, 115, 116, 101, 110, 99, 101, 95, 111, 112, 101, 114, 97, 116, 105, 111, 110, 115, 92, 83, 116, 114, 117, 99, 116, 115, 92, 88, 114, 83, 112, 97, 116, 105, 97, 108, 69, 110, 116, 105, 116, 121, 80, 101, 114, 115, 105, 115, 116, 73, 110, 102, 111, 69, 88, 84, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 155, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 115, 112, 97, 116, 105, 97, 108, 95, 112, 101, 114, 115, 105, 115, 116, 101, 110, 99, 101, 95, 111, 112, 101, 114, 97, 116, 105, 111, 110, 115, 92, 83, 116, 114, 117, 99, 116, 115, 92, 88, 114, 83, 112, 97, 116, 105, 97, 108, 69, 110, 116, 105, 116, 121, 85, 110, 112, 101, 114, 115, 105, 115, 116, 73, 110, 102, 111, 69, 88, 84, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 161, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 115, 112, 97, 116, 105, 97, 108, 95, 112, 101, 114, 115, 105, 115, 116, 101, 110, 99, 101, 95, 111, 112, 101, 114, 97, 116, 105, 111, 110, 115, 92, 83, 116, 114, 117, 99, 116, 115, 92, 88, 114, 85, 110, 112, 101, 114, 115, 105, 115, 116, 83, 112, 97, 116, 105, 97, 108, 69, 110, 116, 105, 116, 121, 67, 111, 109, 112, 108, 101, 116, 105, 111, 110, 69, 88, 84, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 164, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 115, 112, 97, 116, 105, 97, 108, 95, 112, 108, 97, 110, 101, 95, 116, 114, 97, 99, 107, 105, 110, 103, 92, 83, 116, 114, 117, 99, 116, 115, 92, 88, 114, 83, 112, 97, 116, 105, 97, 108, 67, 97, 112, 97, 98, 105, 108, 105, 116, 121, 67, 111, 110, 102, 105, 103, 117, 114, 97, 116, 105, 111, 110, 80, 108, 97, 110, 101, 84, 114, 97, 99, 107, 105, 110, 103, 69, 88, 84, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 147, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 115, 112, 97, 116, 105, 97, 108, 95, 112, 108, 97, 110, 101, 95, 116, 114, 97, 99, 107, 105, 110, 103, 92, 83, 116, 114, 117, 99, 116, 115, 92, 88, 114, 83, 112, 97, 116, 105, 97, 108, 67, 111, 109, 112, 111, 110, 101, 110, 116, 77, 101, 115, 104, 50, 68, 76, 105, 115, 116, 69, 88, 84, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 155, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 115, 112, 97, 116, 105, 97, 108, 95, 112, 108, 97, 110, 101, 95, 116, 114, 97, 99, 107, 105, 110, 103, 92, 83, 116, 114, 117, 99, 116, 115, 92, 88, 114, 83, 112, 97, 116, 105, 97, 108, 67, 111, 109, 112, 111, 110, 101, 110, 116, 80, 108, 97, 110, 101, 65, 108, 105, 103, 110, 109, 101, 110, 116, 76, 105, 115, 116, 69, 88, 84, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 159, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 115, 112, 97, 116, 105, 97, 108, 95, 112, 108, 97, 110, 101, 95, 116, 114, 97, 99, 107, 105, 110, 103, 92, 83, 116, 114, 117, 99, 116, 115, 92, 88, 114, 83, 112, 97, 116, 105, 97, 108, 67, 111, 109, 112, 111, 110, 101, 110, 116, 80, 108, 97, 110, 101, 83, 101, 109, 97, 110, 116, 105, 99, 76, 97, 98, 101, 108, 76, 105, 115, 116, 69, 88, 84, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 150, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 115, 112, 97, 116, 105, 97, 108, 95, 112, 108, 97, 110, 101, 95, 116, 114, 97, 99, 107, 105, 110, 103, 92, 83, 116, 114, 117, 99, 116, 115, 92, 88, 114, 83, 112, 97, 116, 105, 97, 108, 67, 111, 109, 112, 111, 110, 101, 110, 116, 80, 111, 108, 121, 103, 111, 110, 50, 68, 76, 105, 115, 116, 69, 88, 84, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 141, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 69, 88, 84, 95, 115, 112, 97, 116, 105, 97, 108, 95, 112, 108, 97, 110, 101, 95, 116, 114, 97, 99, 107, 105, 110, 103, 92, 83, 116, 114, 117, 99, 116, 115, 92, 88, 114, 83, 112, 97, 116, 105, 97, 108, 80, 111, 108, 121, 103, 111, 110, 50, 68, 68, 97, 116, 97, 69, 88, 84, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 99, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 86, 69, 82, 83, 73, 79, 78, 95, 49, 95, 49, 92, 88, 114, 66, 111, 120, 102, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 104, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 86, 69, 82, 83, 73, 79, 78, 95, 49, 95, 49, 92, 88, 114, 69, 120, 116, 101, 110, 116, 51, 68, 102, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 99, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 92, 88, 82, 95, 86, 69, 82, 83, 73, 79, 78, 95, 49, 95, 49, 92, 88, 114, 85, 117, 105, 100, 46, 99, 115, 0, 0, 0, 3, 0, 0, 0, 81, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 79, 112, 101, 110, 88, 82, 65, 110, 97, 108, 121, 116, 105, 99, 115, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 82, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 79, 112, 101, 110, 88, 82, 65, 112, 105, 86, 101, 114, 115, 105, 111, 110, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 94, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 79, 112, 101, 110, 88, 82, 67, 111, 108, 111, 114, 83, 117, 98, 109, 105, 115, 115, 111, 110, 77, 111, 100, 101, 76, 105, 115, 116, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 88, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 79, 112, 101, 110, 88, 82, 68, 105, 97, 103, 110, 111, 115, 116, 105, 99, 82, 101, 112, 111, 114, 116, 46, 99, 115, 0, 0, 0, 3, 0, 0, 0, 78, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 79, 112, 101, 110, 88, 82, 76, 111, 97, 100, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 82, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 79, 112, 101, 110, 88, 82, 76, 111, 97, 100, 101, 114, 66, 97, 115, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 87, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 79, 112, 101, 110, 88, 82, 76, 111, 97, 100, 101, 114, 78, 111, 80, 114, 101, 73, 110, 105, 116, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 86, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 79, 112, 101, 110, 88, 82, 76, 111, 97, 100, 101, 114, 83, 101, 116, 116, 105, 110, 103, 115, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 81, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 79, 112, 101, 110, 88, 82, 82, 101, 115, 116, 97, 114, 116, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 79, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 79, 112, 101, 110, 88, 82, 82, 117, 110, 116, 105, 109, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 85, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 79, 112, 101, 110, 88, 82, 83, 112, 97, 99, 101, 83, 101, 116, 116, 105, 110, 103, 115, 46, 99, 115, 0, 0, 0, 3, 0, 0, 0, 80, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 79, 112, 101, 110, 88, 82, 85, 110, 105, 116, 121, 65, 80, 73, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 79, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 79, 112, 101, 110, 88, 82, 85, 116, 105, 108, 105, 116, 121, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 99, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 83, 101, 116, 116, 105, 110, 103, 115, 92, 79, 112, 101, 110, 88, 82, 80, 101, 114, 109, 105, 115, 115, 105, 111, 110, 83, 101, 116, 116, 105, 110, 103, 115, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 95, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 83, 101, 116, 116, 105, 110, 103, 115, 92, 79, 112, 101, 110, 88, 82, 82, 101, 110, 100, 101, 114, 83, 101, 116, 116, 105, 110, 103, 115, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 89, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 83, 101, 116, 116, 105, 110, 103, 115, 92, 79, 112, 101, 110, 88, 82, 83, 101, 116, 116, 105, 110, 103, 115, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 86, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 111, 112, 101, 110, 120, 114, 64, 101, 102, 48, 48, 51, 51, 97, 53, 56, 54, 98, 102, 92, 82, 117, 110, 116, 105, 109, 101, 92, 87, 97, 105, 116, 70, 111, 114, 82, 101, 115, 116, 97, 114, 116, 70, 105, 110, 105, 115, 104, 46, 99, 115 }, TypesData = new byte[10180] { 0, 0, 0, 0, 39, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 124, 73, 110, 116, 101, 114, 110, 97, 108, 67, 111, 110, 115, 116, 97, 110, 116, 115, 0, 0, 0, 0, 31, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 124, 67, 111, 110, 115, 116, 97, 110, 116, 115, 0, 0, 0, 0, 64, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 70, 101, 97, 116, 117, 114, 101, 115, 124, 65, 117, 116, 111, 109, 97, 116, 105, 99, 68, 121, 110, 97, 109, 105, 99, 82, 101, 115, 111, 108, 117, 116, 105, 111, 110, 70, 101, 97, 116, 117, 114, 101, 0, 0, 0, 0, 90, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 70, 101, 97, 116, 117, 114, 101, 115, 46, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 46, 80, 101, 114, 102, 111, 114, 109, 97, 110, 99, 101, 83, 101, 116, 116, 105, 110, 103, 115, 124, 88, 114, 80, 101, 114, 102, 111, 114, 109, 97, 110, 99, 101, 83, 101, 116, 116, 105, 110, 103, 115, 70, 101, 97, 116, 117, 114, 101, 0, 0, 0, 0, 100, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 70, 101, 97, 116, 117, 114, 101, 115, 46, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 46, 80, 101, 114, 102, 111, 114, 109, 97, 110, 99, 101, 83, 101, 116, 116, 105, 110, 103, 115, 46, 88, 114, 80, 101, 114, 102, 111, 114, 109, 97, 110, 99, 101, 83, 101, 116, 116, 105, 110, 103, 115, 70, 101, 97, 116, 117, 114, 101, 124, 78, 97, 116, 105, 118, 101, 65, 112, 105, 0, 0, 0, 0, 91, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 70, 101, 97, 116, 117, 114, 101, 115, 46, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 46, 80, 101, 114, 102, 111, 114, 109, 97, 110, 99, 101, 83, 101, 116, 116, 105, 110, 103, 115, 124, 80, 101, 114, 102, 111, 114, 109, 97, 110, 99, 101, 67, 104, 97, 110, 103, 101, 78, 111, 116, 105, 102, 105, 99, 97, 116, 105, 111, 110, 0, 0, 0, 0, 55, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 70, 101, 97, 116, 117, 114, 101, 115, 124, 70, 111, 118, 101, 97, 116, 101, 100, 82, 101, 110, 100, 101, 114, 105, 110, 103, 70, 101, 97, 116, 117, 114, 101, 0, 0, 0, 0, 59, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 70, 101, 97, 116, 117, 114, 101, 115, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 115, 124, 68, 80, 97, 100, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 0, 0, 0, 0, 64, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 70, 101, 97, 116, 117, 114, 101, 115, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 115, 46, 68, 80, 97, 100, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 124, 68, 80, 97, 100, 0, 0, 0, 0, 62, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 70, 101, 97, 116, 117, 114, 101, 115, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 115, 124, 69, 121, 101, 71, 97, 122, 101, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 0, 0, 0, 0, 76, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 70, 101, 97, 116, 117, 114, 101, 115, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 115, 46, 69, 121, 101, 71, 97, 122, 101, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 124, 69, 121, 101, 71, 97, 122, 101, 68, 101, 118, 105, 99, 101, 0, 0, 0, 0, 61, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 70, 101, 97, 116, 117, 114, 101, 115, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 115, 124, 69, 121, 101, 84, 114, 97, 99, 107, 105, 110, 103, 85, 115, 97, 103, 101, 115, 0, 0, 0, 0, 70, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 70, 101, 97, 116, 117, 114, 101, 115, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 115, 124, 72, 97, 110, 100, 67, 111, 109, 109, 111, 110, 80, 111, 115, 101, 115, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 0, 0, 0, 0, 91, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 70, 101, 97, 116, 117, 114, 101, 115, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 115, 46, 72, 97, 110, 100, 67, 111, 109, 109, 111, 110, 80, 111, 115, 101, 115, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 124, 72, 97, 110, 100, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 80, 111, 115, 101, 115, 0, 0, 0, 0, 66, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 70, 101, 97, 116, 117, 114, 101, 115, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 115, 124, 72, 97, 110, 100, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 80, 114, 111, 102, 105, 108, 101, 0, 0, 0, 0, 82, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 70, 101, 97, 116, 117, 114, 101, 115, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 115, 46, 72, 97, 110, 100, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 80, 114, 111, 102, 105, 108, 101, 124, 72, 97, 110, 100, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 0, 0, 0, 0, 71, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 70, 101, 97, 116, 117, 114, 101, 115, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 115, 124, 72, 80, 82, 101, 118, 101, 114, 98, 71, 50, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 80, 114, 111, 102, 105, 108, 101, 0, 0, 0, 0, 90, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 70, 101, 97, 116, 117, 114, 101, 115, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 115, 46, 72, 80, 82, 101, 118, 101, 114, 98, 71, 50, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 80, 114, 111, 102, 105, 108, 101, 124, 82, 101, 118, 101, 114, 98, 71, 50, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 0, 0, 0, 0, 68, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 70, 101, 97, 116, 117, 114, 101, 115, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 115, 124, 72, 84, 67, 86, 105, 118, 101, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 80, 114, 111, 102, 105, 108, 101, 0, 0, 0, 0, 83, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 70, 101, 97, 116, 117, 114, 101, 115, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 115, 46, 72, 84, 67, 86, 105, 118, 101, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 80, 114, 111, 102, 105, 108, 101, 124, 86, 105, 118, 101, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 0, 0, 0, 0, 70, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 70, 101, 97, 116, 117, 114, 101, 115, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 115, 124, 75, 72, 82, 83, 105, 109, 112, 108, 101, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 80, 114, 111, 102, 105, 108, 101, 0, 0, 0, 0, 90, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 70, 101, 97, 116, 117, 114, 101, 115, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 115, 46, 75, 72, 82, 83, 105, 109, 112, 108, 101, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 80, 114, 111, 102, 105, 108, 101, 124, 75, 72, 82, 83, 105, 109, 112, 108, 101, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 0, 0, 0, 0, 79, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 70, 101, 97, 116, 117, 114, 101, 115, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 115, 124, 77, 101, 116, 97, 81, 117, 101, 115, 116, 84, 111, 117, 99, 104, 80, 108, 117, 115, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 80, 114, 111, 102, 105, 108, 101, 0, 0, 0, 0, 104, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 70, 101, 97, 116, 117, 114, 101, 115, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 115, 46, 77, 101, 116, 97, 81, 117, 101, 115, 116, 84, 111, 117, 99, 104, 80, 108, 117, 115, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 80, 114, 111, 102, 105, 108, 101, 124, 81, 117, 101, 115, 116, 84, 111, 117, 99, 104, 80, 108, 117, 115, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 0, 0, 0, 0, 78, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 70, 101, 97, 116, 117, 114, 101, 115, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 115, 124, 77, 101, 116, 97, 81, 117, 101, 115, 116, 84, 111, 117, 99, 104, 80, 114, 111, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 80, 114, 111, 102, 105, 108, 101, 0, 0, 0, 0, 102, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 70, 101, 97, 116, 117, 114, 101, 115, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 115, 46, 77, 101, 116, 97, 81, 117, 101, 115, 116, 84, 111, 117, 99, 104, 80, 114, 111, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 80, 114, 111, 102, 105, 108, 101, 124, 81, 117, 101, 115, 116, 80, 114, 111, 84, 111, 117, 99, 104, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 0, 0, 0, 0, 68, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 70, 101, 97, 116, 117, 114, 101, 115, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 115, 124, 77, 105, 99, 114, 111, 115, 111, 102, 116, 72, 97, 110, 100, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 0, 0, 0, 0, 81, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 70, 101, 97, 116, 117, 114, 101, 115, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 115, 46, 77, 105, 99, 114, 111, 115, 111, 102, 116, 72, 97, 110, 100, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 124, 72, 111, 108, 111, 76, 101, 110, 115, 72, 97, 110, 100, 0, 0, 0, 0, 76, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 70, 101, 97, 116, 117, 114, 101, 115, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 115, 124, 77, 105, 99, 114, 111, 115, 111, 102, 116, 77, 111, 116, 105, 111, 110, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 80, 114, 111, 102, 105, 108, 101, 0, 0, 0, 0, 97, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 70, 101, 97, 116, 117, 114, 101, 115, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 115, 46, 77, 105, 99, 114, 111, 115, 111, 102, 116, 77, 111, 116, 105, 111, 110, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 80, 114, 111, 102, 105, 108, 101, 124, 87, 77, 82, 83, 112, 97, 116, 105, 97, 108, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 0, 0, 0, 0, 72, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 70, 101, 97, 116, 117, 114, 101, 115, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 115, 124, 79, 99, 117, 108, 117, 115, 84, 111, 117, 99, 104, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 80, 114, 111, 102, 105, 108, 101, 0, 0, 0, 0, 94, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 70, 101, 97, 116, 117, 114, 101, 115, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 115, 46, 79, 99, 117, 108, 117, 115, 84, 111, 117, 99, 104, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 80, 114, 111, 102, 105, 108, 101, 124, 79, 99, 117, 108, 117, 115, 84, 111, 117, 99, 104, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 0, 0, 0, 0, 63, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 70, 101, 97, 116, 117, 114, 101, 115, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 115, 124, 80, 97, 108, 109, 80, 111, 115, 101, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 0, 0, 0, 0, 72, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 70, 101, 97, 116, 117, 114, 101, 115, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 115, 46, 80, 97, 108, 109, 80, 111, 115, 101, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 124, 80, 97, 108, 109, 80, 111, 115, 101, 0, 0, 0, 0, 71, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 70, 101, 97, 116, 117, 114, 101, 115, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 115, 124, 86, 97, 108, 118, 101, 73, 110, 100, 101, 120, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 80, 114, 111, 102, 105, 108, 101, 0, 0, 0, 0, 92, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 70, 101, 97, 116, 117, 114, 101, 115, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 115, 46, 86, 97, 108, 118, 101, 73, 110, 100, 101, 120, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 80, 114, 111, 102, 105, 108, 101, 124, 86, 97, 108, 118, 101, 73, 110, 100, 101, 120, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 1, 0, 0, 0, 44, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 70, 101, 97, 116, 117, 114, 101, 115, 124, 79, 112, 101, 110, 88, 82, 70, 101, 97, 116, 117, 114, 101, 1, 0, 0, 0, 44, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 70, 101, 97, 116, 117, 114, 101, 115, 124, 79, 112, 101, 110, 88, 82, 70, 101, 97, 116, 117, 114, 101, 1, 0, 0, 0, 36, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 124, 79, 112, 101, 110, 88, 82, 83, 101, 116, 116, 105, 110, 103, 115, 0, 0, 0, 0, 55, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 70, 101, 97, 116, 117, 114, 101, 115, 124, 79, 112, 101, 110, 88, 82, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 70, 101, 97, 116, 117, 114, 101, 0, 0, 0, 0, 69, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 70, 101, 97, 116, 117, 114, 101, 115, 46, 79, 112, 101, 110, 88, 82, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 70, 101, 97, 116, 117, 114, 101, 124, 65, 99, 116, 105, 111, 110, 66, 105, 110, 100, 105, 110, 103, 0, 0, 0, 0, 68, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 70, 101, 97, 116, 117, 114, 101, 115, 46, 79, 112, 101, 110, 88, 82, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 70, 101, 97, 116, 117, 114, 101, 124, 65, 99, 116, 105, 111, 110, 67, 111, 110, 102, 105, 103, 0, 0, 0, 0, 68, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 70, 101, 97, 116, 117, 114, 101, 115, 46, 79, 112, 101, 110, 88, 82, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 70, 101, 97, 116, 117, 114, 101, 124, 68, 101, 118, 105, 99, 101, 67, 111, 110, 102, 105, 103, 0, 0, 0, 0, 71, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 70, 101, 97, 116, 117, 114, 101, 115, 46, 79, 112, 101, 110, 88, 82, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 70, 101, 97, 116, 117, 114, 101, 124, 65, 99, 116, 105, 111, 110, 77, 97, 112, 67, 111, 110, 102, 105, 103, 0, 0, 0, 0, 65, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 70, 101, 97, 116, 117, 114, 101, 115, 46, 79, 112, 101, 110, 88, 82, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 70, 101, 97, 116, 117, 114, 101, 124, 85, 115, 101, 114, 80, 97, 116, 104, 115, 0, 0, 0, 0, 47, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 70, 101, 97, 116, 117, 114, 101, 115, 124, 83, 112, 97, 99, 101, 87, 97, 114, 112, 70, 101, 97, 116, 117, 114, 101, 0, 0, 0, 0, 34, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 73, 110, 112, 117, 116, 124, 72, 97, 112, 116, 105, 99, 0, 0, 0, 0, 41, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 73, 110, 112, 117, 116, 124, 72, 97, 112, 116, 105, 99, 67, 111, 110, 116, 114, 111, 108, 0, 0, 0, 0, 40, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 73, 110, 112, 117, 116, 124, 79, 112, 101, 110, 88, 82, 68, 101, 118, 105, 99, 101, 0, 0, 0, 0, 37, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 73, 110, 112, 117, 116, 124, 79, 112, 101, 110, 88, 82, 72, 109, 100, 0, 0, 0, 0, 39, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 73, 110, 112, 117, 116, 124, 79, 112, 101, 110, 88, 82, 73, 110, 112, 117, 116, 0, 0, 0, 0, 54, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 73, 110, 112, 117, 116, 46, 79, 112, 101, 110, 88, 82, 73, 110, 112, 117, 116, 124, 83, 101, 114, 105, 97, 108, 105, 122, 101, 100, 71, 117, 105, 100, 0, 0, 0, 0, 57, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 73, 110, 112, 117, 116, 46, 79, 112, 101, 110, 88, 82, 73, 110, 112, 117, 116, 124, 83, 101, 114, 105, 97, 108, 105, 122, 101, 100, 66, 105, 110, 100, 105, 110, 103, 0, 0, 0, 0, 66, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 73, 110, 112, 117, 116, 46, 79, 112, 101, 110, 88, 82, 73, 110, 112, 117, 116, 124, 71, 101, 116, 73, 110, 116, 101, 114, 110, 97, 108, 68, 101, 118, 105, 99, 101, 73, 100, 67, 111, 109, 109, 97, 110, 100, 0, 0, 0, 0, 32, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 73, 110, 112, 117, 116, 124, 80, 111, 115, 101, 0, 0, 0, 0, 39, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 73, 110, 112, 117, 116, 124, 80, 111, 115, 101, 67, 111, 110, 116, 114, 111, 108, 0, 0, 0, 0, 49, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 80, 111, 108, 108, 69, 118, 101, 110, 116, 82, 111, 117, 116, 101, 114, 0, 0, 0, 0, 51, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 66, 97, 115, 101, 73, 110, 83, 116, 114, 117, 99, 116, 117, 114, 101, 0, 0, 0, 0, 55, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 69, 118, 101, 110, 116, 68, 97, 116, 97, 66, 97, 115, 101, 72, 101, 97, 100, 101, 114, 0, 0, 0, 0, 45, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 69, 120, 116, 101, 110, 116, 50, 68, 102, 0, 0, 0, 0, 40, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 70, 111, 118, 102, 0, 0, 0, 0, 41, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 80, 111, 115, 101, 102, 0, 0, 0, 0, 47, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 81, 117, 97, 116, 101, 114, 110, 105, 111, 110, 102, 0, 0, 0, 0, 52, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 82, 101, 115, 117, 108, 116, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 0, 0, 0, 0, 55, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 83, 119, 97, 112, 99, 104, 97, 105, 110, 67, 114, 101, 97, 116, 101, 73, 110, 102, 111, 0, 0, 0, 0, 44, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 86, 101, 99, 116, 111, 114, 50, 102, 0, 0, 0, 0, 44, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 86, 101, 99, 116, 111, 114, 51, 102, 0, 0, 0, 0, 52, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 79, 112, 101, 110, 88, 82, 82, 101, 115, 117, 108, 116, 83, 116, 97, 116, 117, 115, 1, 0, 0, 0, 49, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 79, 112, 101, 110, 88, 82, 78, 97, 116, 105, 118, 101, 65, 112, 105, 0, 0, 0, 0, 55, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 70, 117, 116, 117, 114, 101, 67, 97, 110, 99, 101, 108, 73, 110, 102, 111, 69, 88, 84, 0, 0, 0, 0, 65, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 70, 117, 116, 117, 114, 101, 67, 111, 109, 112, 108, 101, 116, 105, 111, 110, 66, 97, 115, 101, 72, 101, 97, 100, 101, 114, 69, 88, 84, 0, 0, 0, 0, 55, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 70, 117, 116, 117, 114, 101, 67, 111, 109, 112, 108, 101, 116, 105, 111, 110, 69, 88, 84, 0, 0, 0, 0, 53, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 70, 117, 116, 117, 114, 101, 80, 111, 108, 108, 73, 110, 102, 111, 69, 88, 84, 0, 0, 0, 0, 55, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 70, 117, 116, 117, 114, 101, 80, 111, 108, 108, 82, 101, 115, 117, 108, 116, 69, 88, 84, 1, 0, 0, 0, 49, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 79, 112, 101, 110, 88, 82, 78, 97, 116, 105, 118, 101, 65, 112, 105, 0, 0, 0, 0, 62, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 83, 112, 97, 116, 105, 97, 108, 65, 110, 99, 104, 111, 114, 67, 114, 101, 97, 116, 101, 73, 110, 102, 111, 69, 88, 84, 0, 0, 0, 0, 75, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 83, 112, 97, 116, 105, 97, 108, 67, 97, 112, 97, 98, 105, 108, 105, 116, 121, 67, 111, 110, 102, 105, 103, 117, 114, 97, 116, 105, 111, 110, 65, 110, 99, 104, 111, 114, 69, 88, 84, 0, 0, 0, 0, 65, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 83, 112, 97, 116, 105, 97, 108, 67, 111, 109, 112, 111, 110, 101, 110, 116, 65, 110, 99, 104, 111, 114, 76, 105, 115, 116, 69, 88, 84, 0, 0, 0, 0, 65, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 73, 83, 112, 97, 116, 105, 97, 108, 67, 97, 112, 97, 98, 105, 108, 105, 116, 121, 67, 111, 110, 102, 105, 103, 117, 114, 97, 116, 105, 111, 110, 1, 0, 0, 0, 49, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 79, 112, 101, 110, 88, 82, 78, 97, 116, 105, 118, 101, 65, 112, 105, 0, 0, 0, 0, 59, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 83, 112, 97, 116, 105, 97, 108, 66, 111, 117, 110, 100, 101, 100, 50, 68, 68, 97, 116, 97, 69, 88, 84, 0, 0, 0, 0, 68, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 83, 112, 97, 116, 105, 97, 108, 67, 111, 109, 112, 111, 110, 101, 110, 116, 66, 111, 117, 110, 100, 101, 100, 50, 68, 76, 105, 115, 116, 69, 88, 84, 0, 0, 0, 0, 68, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 83, 112, 97, 116, 105, 97, 108, 67, 111, 109, 112, 111, 110, 101, 110, 116, 66, 111, 117, 110, 100, 101, 100, 51, 68, 76, 105, 115, 116, 69, 88, 84, 0, 0, 0, 0, 65, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 83, 112, 97, 116, 105, 97, 108, 67, 111, 109, 112, 111, 110, 101, 110, 116, 77, 101, 115, 104, 51, 68, 76, 105, 115, 116, 69, 88, 84, 0, 0, 0, 0, 65, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 83, 112, 97, 116, 105, 97, 108, 67, 111, 109, 112, 111, 110, 101, 110, 116, 80, 97, 114, 101, 110, 116, 76, 105, 115, 116, 69, 88, 84, 0, 0, 0, 0, 54, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 83, 112, 97, 116, 105, 97, 108, 77, 101, 115, 104, 68, 97, 116, 97, 69, 88, 84, 0, 0, 0, 0, 69, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 67, 114, 101, 97, 116, 101, 83, 112, 97, 116, 105, 97, 108, 67, 111, 110, 116, 101, 120, 116, 67, 111, 109, 112, 108, 101, 116, 105, 111, 110, 69, 88, 84, 0, 0, 0, 0, 79, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 67, 114, 101, 97, 116, 101, 83, 112, 97, 116, 105, 97, 108, 68, 105, 115, 99, 111, 118, 101, 114, 121, 83, 110, 97, 112, 115, 104, 111, 116, 67, 111, 109, 112, 108, 101, 116, 105, 111, 110, 69, 88, 84, 0, 0, 0, 0, 83, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 67, 114, 101, 97, 116, 101, 83, 112, 97, 116, 105, 97, 108, 68, 105, 115, 99, 111, 118, 101, 114, 121, 83, 110, 97, 112, 115, 104, 111, 116, 67, 111, 109, 112, 108, 101, 116, 105, 111, 110, 73, 110, 102, 111, 69, 88, 84, 0, 0, 0, 0, 75, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 69, 118, 101, 110, 116, 68, 97, 116, 97, 83, 112, 97, 116, 105, 97, 108, 68, 105, 115, 99, 111, 118, 101, 114, 121, 82, 101, 99, 111, 109, 109, 101, 110, 100, 101, 100, 69, 88, 84, 0, 0, 0, 0, 52, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 83, 112, 97, 116, 105, 97, 108, 66, 117, 102, 102, 101, 114, 69, 88, 84, 0, 0, 0, 0, 59, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 83, 112, 97, 116, 105, 97, 108, 66, 117, 102, 102, 101, 114, 71, 101, 116, 73, 110, 102, 111, 69, 88, 84, 0, 0, 0, 0, 70, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 83, 112, 97, 116, 105, 97, 108, 67, 97, 112, 97, 98, 105, 108, 105, 116, 121, 67, 111, 109, 112, 111, 110, 101, 110, 116, 84, 121, 112, 101, 115, 69, 88, 84, 0, 0, 0, 0, 79, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 83, 112, 97, 116, 105, 97, 108, 67, 97, 112, 97, 98, 105, 108, 105, 116, 121, 67, 111, 110, 102, 105, 103, 117, 114, 97, 116, 105, 111, 110, 66, 97, 115, 101, 72, 101, 97, 100, 101, 114, 69, 88, 84, 0, 0, 0, 0, 73, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 83, 112, 97, 116, 105, 97, 108, 67, 111, 109, 112, 111, 110, 101, 110, 116, 68, 97, 116, 97, 81, 117, 101, 114, 121, 67, 111, 110, 100, 105, 116, 105, 111, 110, 69, 88, 84, 0, 0, 0, 0, 70, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 83, 112, 97, 116, 105, 97, 108, 67, 111, 109, 112, 111, 110, 101, 110, 116, 68, 97, 116, 97, 81, 117, 101, 114, 121, 82, 101, 115, 117, 108, 116, 69, 88, 84, 0, 0, 0, 0, 63, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 83, 112, 97, 116, 105, 97, 108, 67, 111, 110, 116, 101, 120, 116, 67, 114, 101, 97, 116, 101, 73, 110, 102, 111, 69, 88, 84, 0, 0, 0, 0, 73, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 83, 112, 97, 116, 105, 97, 108, 68, 105, 115, 99, 111, 118, 101, 114, 121, 83, 110, 97, 112, 115, 104, 111, 116, 67, 114, 101, 97, 116, 101, 73, 110, 102, 111, 69, 88, 84, 0, 0, 0, 0, 68, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 83, 112, 97, 116, 105, 97, 108, 69, 110, 116, 105, 116, 121, 70, 114, 111, 109, 73, 100, 67, 114, 101, 97, 116, 101, 73, 110, 102, 111, 69, 88, 84, 0, 0, 0, 0, 65, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 83, 112, 97, 116, 105, 97, 108, 70, 105, 108, 116, 101, 114, 84, 114, 97, 99, 107, 105, 110, 103, 83, 116, 97, 116, 101, 69, 88, 84, 0, 0, 0, 0, 70, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 83, 112, 97, 116, 105, 97, 108, 85, 112, 100, 97, 116, 101, 83, 110, 97, 112, 115, 104, 111, 116, 67, 114, 101, 97, 116, 101, 73, 110, 102, 111, 69, 88, 84, 0, 0, 0, 0, 77, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 83, 112, 97, 116, 105, 97, 108, 67, 97, 112, 97, 98, 105, 108, 105, 116, 121, 67, 111, 110, 102, 105, 103, 117, 114, 97, 116, 105, 111, 110, 65, 112, 114, 105, 108, 84, 97, 103, 69, 88, 84, 0, 0, 0, 0, 80, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 83, 112, 97, 116, 105, 97, 108, 67, 97, 112, 97, 98, 105, 108, 105, 116, 121, 67, 111, 110, 102, 105, 103, 117, 114, 97, 116, 105, 111, 110, 65, 114, 117, 99, 111, 77, 97, 114, 107, 101, 114, 69, 88, 84, 0, 0, 0, 0, 80, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 83, 112, 97, 116, 105, 97, 108, 67, 97, 112, 97, 98, 105, 108, 105, 116, 121, 67, 111, 110, 102, 105, 103, 117, 114, 97, 116, 105, 111, 110, 77, 105, 99, 114, 111, 81, 114, 67, 111, 100, 101, 69, 88, 84, 0, 0, 0, 0, 75, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 83, 112, 97, 116, 105, 97, 108, 67, 97, 112, 97, 98, 105, 108, 105, 116, 121, 67, 111, 110, 102, 105, 103, 117, 114, 97, 116, 105, 111, 110, 81, 114, 67, 111, 100, 101, 69, 88, 84, 0, 0, 0, 0, 65, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 83, 112, 97, 116, 105, 97, 108, 67, 111, 109, 112, 111, 110, 101, 110, 116, 77, 97, 114, 107, 101, 114, 76, 105, 115, 116, 69, 88, 84, 0, 0, 0, 0, 56, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 83, 112, 97, 116, 105, 97, 108, 77, 97, 114, 107, 101, 114, 68, 97, 116, 97, 69, 88, 84, 0, 0, 0, 0, 56, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 83, 112, 97, 116, 105, 97, 108, 77, 97, 114, 107, 101, 114, 83, 105, 122, 101, 69, 88, 84, 0, 0, 0, 0, 70, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 83, 112, 97, 116, 105, 97, 108, 77, 97, 114, 107, 101, 114, 83, 116, 97, 116, 105, 99, 79, 112, 116, 105, 109, 105, 122, 97, 116, 105, 111, 110, 69, 88, 84, 0, 0, 0, 0, 80, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 83, 112, 97, 116, 105, 97, 108, 80, 101, 114, 115, 105, 115, 116, 101, 110, 99, 101, 67, 111, 110, 116, 101, 120, 116, 82, 101, 115, 117, 108, 116, 69, 88, 84, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 1, 0, 0, 0, 49, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 79, 112, 101, 110, 88, 82, 78, 97, 116, 105, 118, 101, 65, 112, 105, 0, 0, 0, 0, 80, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 67, 114, 101, 97, 116, 101, 83, 112, 97, 116, 105, 97, 108, 80, 101, 114, 115, 105, 115, 116, 101, 110, 99, 101, 67, 111, 110, 116, 101, 120, 116, 67, 111, 109, 112, 108, 101, 116, 105, 111, 110, 69, 88, 84, 0, 0, 0, 0, 70, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 83, 112, 97, 116, 105, 97, 108, 67, 111, 109, 112, 111, 110, 101, 110, 116, 80, 101, 114, 115, 105, 115, 116, 101, 110, 99, 101, 76, 105, 115, 116, 69, 88, 84, 0, 0, 0, 0, 70, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 83, 112, 97, 116, 105, 97, 108, 67, 111, 110, 116, 101, 120, 116, 80, 101, 114, 115, 105, 115, 116, 101, 110, 99, 101, 67, 111, 110, 102, 105, 103, 69, 88, 84, 0, 0, 0, 0, 76, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 83, 112, 97, 116, 105, 97, 108, 68, 105, 115, 99, 111, 118, 101, 114, 121, 80, 101, 114, 115, 105, 115, 116, 101, 110, 99, 101, 85, 117, 105, 100, 70, 105, 108, 116, 101, 114, 69, 88, 84, 0, 0, 0, 0, 74, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 83, 112, 97, 116, 105, 97, 108, 80, 101, 114, 115, 105, 115, 116, 101, 110, 99, 101, 67, 111, 110, 116, 101, 120, 116, 67, 114, 101, 97, 116, 101, 73, 110, 102, 111, 69, 88, 84, 0, 0, 0, 0, 61, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 83, 112, 97, 116, 105, 97, 108, 80, 101, 114, 115, 105, 115, 116, 101, 110, 99, 101, 68, 97, 116, 97, 69, 88, 84, 1, 0, 0, 0, 49, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 79, 112, 101, 110, 88, 82, 78, 97, 116, 105, 118, 101, 65, 112, 105, 0, 0, 0, 0, 69, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 80, 101, 114, 115, 105, 115, 116, 83, 112, 97, 116, 105, 97, 108, 69, 110, 116, 105, 116, 121, 67, 111, 109, 112, 108, 101, 116, 105, 111, 110, 69, 88, 84, 0, 0, 0, 0, 63, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 83, 112, 97, 116, 105, 97, 108, 69, 110, 116, 105, 116, 121, 80, 101, 114, 115, 105, 115, 116, 73, 110, 102, 111, 69, 88, 84, 0, 0, 0, 0, 65, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 83, 112, 97, 116, 105, 97, 108, 69, 110, 116, 105, 116, 121, 85, 110, 112, 101, 114, 115, 105, 115, 116, 73, 110, 102, 111, 69, 88, 84, 0, 0, 0, 0, 71, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 85, 110, 112, 101, 114, 115, 105, 115, 116, 83, 112, 97, 116, 105, 97, 108, 69, 110, 116, 105, 116, 121, 67, 111, 109, 112, 108, 101, 116, 105, 111, 110, 69, 88, 84, 0, 0, 0, 0, 82, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 83, 112, 97, 116, 105, 97, 108, 67, 97, 112, 97, 98, 105, 108, 105, 116, 121, 67, 111, 110, 102, 105, 103, 117, 114, 97, 116, 105, 111, 110, 80, 108, 97, 110, 101, 84, 114, 97, 99, 107, 105, 110, 103, 69, 88, 84, 0, 0, 0, 0, 65, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 83, 112, 97, 116, 105, 97, 108, 67, 111, 109, 112, 111, 110, 101, 110, 116, 77, 101, 115, 104, 50, 68, 76, 105, 115, 116, 69, 88, 84, 0, 0, 0, 0, 73, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 83, 112, 97, 116, 105, 97, 108, 67, 111, 109, 112, 111, 110, 101, 110, 116, 80, 108, 97, 110, 101, 65, 108, 105, 103, 110, 109, 101, 110, 116, 76, 105, 115, 116, 69, 88, 84, 0, 0, 0, 0, 77, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 83, 112, 97, 116, 105, 97, 108, 67, 111, 109, 112, 111, 110, 101, 110, 116, 80, 108, 97, 110, 101, 83, 101, 109, 97, 110, 116, 105, 99, 76, 97, 98, 101, 108, 76, 105, 115, 116, 69, 88, 84, 0, 0, 0, 0, 68, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 83, 112, 97, 116, 105, 97, 108, 67, 111, 109, 112, 111, 110, 101, 110, 116, 80, 111, 108, 121, 103, 111, 110, 50, 68, 76, 105, 115, 116, 69, 88, 84, 0, 0, 0, 0, 59, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 83, 112, 97, 116, 105, 97, 108, 80, 111, 108, 121, 103, 111, 110, 50, 68, 68, 97, 116, 97, 69, 88, 84, 0, 0, 0, 0, 40, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 66, 111, 120, 102, 0, 0, 0, 0, 45, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 69, 120, 116, 101, 110, 116, 51, 68, 102, 0, 0, 0, 0, 40, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 78, 97, 116, 105, 118, 101, 84, 121, 112, 101, 115, 124, 88, 114, 85, 117, 105, 100, 0, 0, 0, 0, 37, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 124, 79, 112, 101, 110, 88, 82, 65, 110, 97, 108, 121, 116, 105, 99, 115, 0, 0, 0, 0, 53, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 79, 112, 101, 110, 88, 82, 65, 110, 97, 108, 121, 116, 105, 99, 115, 124, 73, 110, 105, 116, 105, 97, 108, 105, 122, 101, 69, 118, 101, 110, 116, 0, 0, 0, 0, 58, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 79, 112, 101, 110, 88, 82, 65, 110, 97, 108, 121, 116, 105, 99, 115, 124, 88, 114, 73, 110, 105, 116, 105, 97, 108, 105, 122, 101, 65, 110, 97, 108, 121, 116, 105, 99, 0, 0, 0, 0, 38, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 124, 79, 112, 101, 110, 88, 82, 65, 112, 105, 86, 101, 114, 115, 105, 111, 110, 1, 0, 0, 0, 36, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 124, 79, 112, 101, 110, 88, 82, 83, 101, 116, 116, 105, 110, 103, 115, 0, 0, 0, 0, 60, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 79, 112, 101, 110, 88, 82, 83, 101, 116, 116, 105, 110, 103, 115, 124, 67, 111, 108, 111, 114, 83, 117, 98, 109, 105, 115, 115, 105, 111, 110, 77, 111, 100, 101, 76, 105, 115, 116, 0, 0, 0, 0, 38, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 124, 68, 105, 97, 103, 110, 111, 115, 116, 105, 99, 82, 101, 112, 111, 114, 116, 0, 0, 0, 0, 34, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 124, 79, 112, 101, 110, 88, 82, 76, 111, 97, 100, 101, 114, 1, 0, 0, 0, 38, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 124, 79, 112, 101, 110, 88, 82, 76, 111, 97, 100, 101, 114, 66, 97, 115, 101, 0, 0, 0, 0, 57, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 79, 112, 101, 110, 88, 82, 76, 111, 97, 100, 101, 114, 66, 97, 115, 101, 124, 70, 101, 97, 116, 117, 114, 101, 76, 111, 103, 103, 105, 110, 103, 73, 110, 102, 111, 1, 0, 0, 0, 38, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 124, 79, 112, 101, 110, 88, 82, 76, 111, 97, 100, 101, 114, 66, 97, 115, 101, 0, 0, 0, 0, 43, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 124, 79, 112, 101, 110, 88, 82, 76, 111, 97, 100, 101, 114, 78, 111, 80, 114, 101, 73, 110, 105, 116, 1, 0, 0, 0, 36, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 124, 79, 112, 101, 110, 88, 82, 83, 101, 116, 116, 105, 110, 103, 115, 0, 0, 0, 0, 37, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 124, 79, 112, 101, 110, 88, 82, 82, 101, 115, 116, 97, 114, 116, 101, 114, 0, 0, 0, 0, 35, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 124, 79, 112, 101, 110, 88, 82, 82, 117, 110, 116, 105, 109, 101, 1, 0, 0, 0, 36, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 124, 79, 112, 101, 110, 88, 82, 83, 101, 116, 116, 105, 110, 103, 115, 0, 0, 0, 0, 44, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 65, 80, 73, 124, 85, 110, 105, 116, 121, 88, 82, 84, 101, 120, 116, 117, 114, 101, 68, 97, 116, 97, 0, 0, 0, 0, 50, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 65, 80, 73, 124, 85, 110, 105, 116, 121, 88, 82, 82, 101, 110, 100, 101, 114, 84, 101, 120, 116, 117, 114, 101, 68, 101, 115, 99, 0, 0, 0, 0, 40, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 46, 65, 80, 73, 124, 85, 110, 105, 116, 121, 88, 82, 68, 105, 115, 112, 108, 97, 121, 0, 0, 0, 0, 35, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 124, 79, 112, 101, 110, 88, 82, 85, 116, 105, 108, 105, 116, 121, 1, 0, 0, 0, 36, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 124, 79, 112, 101, 110, 88, 82, 83, 101, 116, 116, 105, 110, 103, 115, 1, 0, 0, 0, 36, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 124, 79, 112, 101, 110, 88, 82, 83, 101, 116, 116, 105, 110, 103, 115, 1, 0, 0, 0, 36, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 124, 79, 112, 101, 110, 88, 82, 83, 101, 116, 116, 105, 110, 103, 115, 0, 0, 0, 0, 42, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 79, 112, 101, 110, 88, 82, 124, 87, 97, 105, 116, 70, 111, 114, 82, 101, 115, 116, 97, 114, 116, 70, 105, 110, 105, 115, 104 }, TotalFiles = 121, TotalTypes = 155, IsEditorOnly = false }; } } namespace UnityEngine.XR.OpenXR { internal static class InternalConstants { internal const string openXRLibrary = "UnityOpenXR"; internal const string companyName = "Unity"; } public static class Constants { public const string k_SettingsKey = "com.unity.xr.openxr.settings4"; } [Serializable] public class OpenXRSettings : ScriptableObject, ISerializationCallbackReceiver { public enum ColorSubmissionModeGroup { [InspectorName("8 bits per channel (LDR, default)")] kRenderTextureFormatGroup8888, [InspectorName("10 bits floating-point per color channel, 2 bit alpha (HDR)")] kRenderTextureFormatGroup1010102_Float, [InspectorName("16 bits floating-point per channel (HDR)")] kRenderTextureFormatGroup16161616_Float, [InspectorName("5,6,5 bit packed (LDR, mobile)")] kRenderTextureFormatGroup565, [InspectorName("11,11,10 bit packed floating-point (HDR)")] kRenderTextureFormatGroup111110_Float } [Serializable] public class ColorSubmissionModeList { public ColorSubmissionModeGroup[] m_List = new ColorSubmissionModeGroup[1]; } public enum RenderMode { MultiPass, SinglePassInstanced } public enum LatencyOptimization { PrioritizeRendering, PrioritizeInputPolling } public enum DepthSubmissionMode { None, Depth16Bit, Depth24Bit } public enum BackendFovationApi : byte { Legacy, SRPFoveation } public enum SpaceWarpMotionVectorTextureFormat { RGBA16f, RG16f } [FormerlySerializedAs("extensions")] [HideInInspector] [SerializeField] internal OpenXRFeature[] features = new OpenXRFeature[0]; public static readonly ColorSubmissionModeGroup kDefaultColorMode; [SerializeField] [HideInInspector] internal string customLoaderName = string.Empty; [SerializeField] private RenderMode m_renderMode = RenderMode.SinglePassInstanced; [SerializeField] private LatencyOptimization m_latencyOptimization; [SerializeField] private bool m_autoColorSubmissionMode = true; [SerializeField] private ColorSubmissionModeList m_colorSubmissionModes = new ColorSubmissionModeList(); [SerializeField] private DepthSubmissionMode m_depthSubmissionMode; [SerializeField] private SpaceWarpMotionVectorTextureFormat m_spacewarpMotionVectorTextureFormat; [SerializeField] private bool m_optimizeBufferDiscards; [SerializeField] private bool m_symmetricProjection; [SerializeField] private BackendFovationApi m_foveatedRenderingApi; private const string LibraryName = "UnityOpenXR"; private static OpenXRSettings s_RuntimeInstance; public int featureCount => features.Length; public static bool AllowRecentering => Internal_GetAllowRecentering(); public static float FloorOffset => Internal_GetFloorOffset(); public RenderMode renderMode { get { if ((Object)(object)OpenXRLoaderBase.Instance != (Object)null) { return Internal_GetRenderMode(); } return m_renderMode; } set { if ((Object)(object)OpenXRLoaderBase.Instance != (Object)null) { Internal_SetRenderMode(value); } else { m_renderMode = value; } } } public LatencyOptimization latencyOptimization { get { if ((Object)(object)OpenXRLoaderBase.Instance != (Object)null) { return Internal_GetLatencyOptimization(); } return m_latencyOptimization; } set { m_latencyOptimization = value; } } public bool autoColorSubmissionMode { get { return m_autoColorSubmissionMode; } set { m_autoColorSubmissionMode = value; } } public ColorSubmissionModeGroup[] colorSubmissionModes { get { if (m_autoColorSubmissionMode) { return new ColorSubmissionModeGroup[1] { kDefaultColorMode }; } if ((Object)(object)OpenXRLoaderBase.Instance != (Object)null) { int num = Internal_GetColorSubmissionModes(null, 0); int[] array = new int[num]; Internal_GetColorSubmissionModes(array, num); return array.Select((int i) => (ColorSubmissionModeGroup)i).ToArray(); } return m_colorSubmissionModes.m_List; } set { if ((Object)(object)OpenXRLoaderBase.Instance != (Object)null) { Internal_SetColorSubmissionModes(value.Select((ColorSubmissionModeGroup e) => (int)e).ToArray(), value.Length); } else { m_colorSubmissionModes.m_List = value; } } } public DepthSubmissionMode depthSubmissionMode { get { if ((Object)(object)OpenXRLoaderBase.Instance != (Object)null) { return Internal_GetDepthSubmissionMode(); } return m_depthSubmissionMode; } set { if ((Object)(object)OpenXRLoaderBase.Instance != (Object)null) { Internal_SetDepthSubmissionMode(value); } else { m_depthSubmissionMode = value; } } } public SpaceWarpMotionVectorTextureFormat spacewarpMotionVectorTextureFormat { get { if ((Object)(object)OpenXRLoaderBase.Instance != (Object)null) { return Internal_GetSpaceWarpMotionVectorTextureFormat(); } return m_spacewarpMotionVectorTextureFormat; } set { if ((Object)(object)OpenXRLoaderBase.Instance != (Object)null) { Internal_SetSpaceWarpMotionVectorTextureFormat(value); } else { m_spacewarpMotionVectorTextureFormat = value; } } } public bool optimizeBufferDiscards { get { return m_optimizeBufferDiscards; } set { if ((Object)(object)OpenXRLoaderBase.Instance != (Object)null) { Internal_SetOptimizeBufferDiscards(value); } else { m_optimizeBufferDiscards = value; } } } public bool symmetricProjection { get { return m_symmetricProjection; } set { if ((Object)(object)OpenXRLoaderBase.Instance != (Object)null) { Internal_SetSymmetricProjection(value); } else { m_symmetricProjection = value; } } } public BackendFovationApi foveatedRenderingApi { get { if ((Object)(object)OpenXRLoaderBase.Instance != (Object)null) { return Internal_GetUsedFoveatedRenderingApi(); } return m_foveatedRenderingApi; } set { if ((Object)(object)OpenXRLoaderBase.Instance != (Object)null) { Internal_SetUsedFoveatedRenderingApi(value); } else { m_foveatedRenderingApi = value; } } } public static OpenXRSettings ActiveBuildTargetInstance => GetInstance(useActiveBuildTarget: true); public static OpenXRSettings Instance => GetInstance(useActiveBuildTarget: false); public TFeature GetFeature() where TFeature : OpenXRFeature { return (TFeature)GetFeature(typeof(TFeature)); } public OpenXRFeature GetFeature(Type featureType) { OpenXRFeature[] array = features; foreach (OpenXRFeature openXRFeature in array) { if (featureType.IsInstanceOfType(openXRFeature)) { return openXRFeature; } } return null; } public OpenXRFeature[] GetFeatures() { return GetFeatures(typeof(TFeature)); } public OpenXRFeature[] GetFeatures(Type featureType) { List list = new List(); OpenXRFeature[] array = features; foreach (OpenXRFeature openXRFeature in array) { if (featureType.IsInstanceOfType(openXRFeature)) { list.Add(openXRFeature); } } return list.ToArray(); } public int GetFeatures(List featuresOut) where TFeature : OpenXRFeature { featuresOut.Clear(); OpenXRFeature[] array = features; for (int i = 0; i < array.Length; i++) { if (array[i] is TFeature item) { featuresOut.Add(item); } } return featuresOut.Count; } public int GetFeatures(Type featureType, List featuresOut) { featuresOut.Clear(); OpenXRFeature[] array = features; foreach (OpenXRFeature openXRFeature in array) { if (featureType.IsInstanceOfType(openXRFeature)) { featuresOut.Add(openXRFeature); } } return featuresOut.Count; } public OpenXRFeature[] GetFeatures() { return ((OpenXRFeature[])features?.Clone()) ?? new OpenXRFeature[0]; } public int GetFeatures(List featuresOut) { featuresOut.Clear(); featuresOut.AddRange(features); return featuresOut.Count; } public static void SetAllowRecentering(bool allowRecentering, float floorOffset = 1.5f) { Internal_SetAllowRecentering(allowRecentering, floorOffset); } public static void RefreshRecenterSpace() { Internal_RegenerateTrackingOrigin(); } [DllImport("UnityOpenXR", EntryPoint = "NativeConfig_SetAllowRecentering")] private static extern void Internal_SetAllowRecentering([MarshalAs(UnmanagedType.U1)] bool active, float height); [DllImport("UnityOpenXR", EntryPoint = "NativeConfig_RegenerateTrackingOrigin")] private static extern void Internal_RegenerateTrackingOrigin(); [DllImport("UnityOpenXR", EntryPoint = "NativeConfig_GetAllowRecentering")] [return: MarshalAs(UnmanagedType.U1)] private static extern bool Internal_GetAllowRecentering(); [DllImport("UnityOpenXR", EntryPoint = "NativeConfig_GetFloorOffsetHeight")] private static extern float Internal_GetFloorOffset(); private void ApplyPermissionSettings() { } [DllImport("UnityOpenXR", EntryPoint = "OculusFoveation_SetHasEyeTrackingPermissions")] internal static extern void Internal_SetHasEyeTrackingPermissions([MarshalAs(UnmanagedType.I1)] bool value); private void ApplyRenderSettings() { Internal_SetSymmetricProjection(m_symmetricProjection); Internal_SetUsedFoveatedRenderingApi(m_foveatedRenderingApi); Internal_SetRenderMode(m_renderMode); Internal_SetLatencyOptimization(m_latencyOptimization); Internal_SetColorSubmissionModes(m_colorSubmissionModes.m_List.Select((ColorSubmissionModeGroup e) => (int)e).ToArray(), m_colorSubmissionModes.m_List.Length); Internal_SetDepthSubmissionMode(m_depthSubmissionMode); Internal_SetSpaceWarpMotionVectorTextureFormat(m_spacewarpMotionVectorTextureFormat); Internal_SetOptimizeBufferDiscards(m_optimizeBufferDiscards); } private void LogRendererSettings(ulong diagnosticsSectionHandle) { DiagnosticReport.AddSectionEntry(diagnosticsSectionHandle, "Symmetric Projection", $"{m_symmetricProjection}"); DiagnosticReport.AddSectionEntry(diagnosticsSectionHandle, "Stereo Rendering Mode", $"{m_renderMode}"); DiagnosticReport.AddSectionEntry(diagnosticsSectionHandle, "Latency Optimization", $"{m_latencyOptimization}"); string text = string.Join(",", m_colorSubmissionModes.m_List); DiagnosticReport.AddSectionEntry(diagnosticsSectionHandle, "Color Submission Modes", text ?? ""); DiagnosticReport.AddSectionEntry(diagnosticsSectionHandle, "Depth Submission Mode", $"{m_depthSubmissionMode}"); DiagnosticReport.AddSectionEntry(diagnosticsSectionHandle, "Space Warp Motion Vector Texture Format", $"{m_spacewarpMotionVectorTextureFormat}"); DiagnosticReport.AddSectionEntry(diagnosticsSectionHandle, "Optimize Buffer Discards", $"{m_optimizeBufferDiscards}"); DiagnosticReport.AddSectionEntry(diagnosticsSectionHandle, "Foveated Rendering API", $"{m_foveatedRenderingApi}"); } public void OnBeforeSerialize() { } public void OnAfterDeserialize() { } [DllImport("UnityOpenXR", EntryPoint = "NativeConfig_SetRenderMode")] private static extern void Internal_SetRenderMode(RenderMode renderMode); [DllImport("UnityOpenXR", EntryPoint = "NativeConfig_GetRenderMode")] private static extern RenderMode Internal_GetRenderMode(); [DllImport("UnityOpenXR", EntryPoint = "NativeConfig_SetLatencyOptimization")] private static extern void Internal_SetLatencyOptimization(LatencyOptimization latencyOptimzation); [DllImport("UnityOpenXR", EntryPoint = "NativeConfig_GetLatencyOptimization")] private static extern LatencyOptimization Internal_GetLatencyOptimization(); [DllImport("UnityOpenXR", EntryPoint = "NativeConfig_SetDepthSubmissionMode")] private static extern void Internal_SetDepthSubmissionMode(DepthSubmissionMode depthSubmissionMode); [DllImport("UnityOpenXR", EntryPoint = "NativeConfig_GetDepthSubmissionMode")] private static extern DepthSubmissionMode Internal_GetDepthSubmissionMode(); [DllImport("UnityOpenXR", EntryPoint = "NativeConfig_SetSpaceWarpMotionVectorTextureFormat")] private static extern void Internal_SetSpaceWarpMotionVectorTextureFormat(SpaceWarpMotionVectorTextureFormat spaceWarpMotionVectorTextureFormat); [DllImport("UnityOpenXR", EntryPoint = "NativeConfig_GetSpaceWarpMotionVectorTextureFormat")] private static extern SpaceWarpMotionVectorTextureFormat Internal_GetSpaceWarpMotionVectorTextureFormat(); [DllImport("UnityOpenXR", EntryPoint = "NativeConfig_SetSymmetricProjection")] private static extern void Internal_SetSymmetricProjection([MarshalAs(UnmanagedType.I1)] bool enabled); [DllImport("UnityOpenXR", EntryPoint = "NativeConfig_SetOptimizeBufferDiscards")] private static extern void Internal_SetOptimizeBufferDiscards([MarshalAs(UnmanagedType.I1)] bool enabled); [DllImport("UnityOpenXR", EntryPoint = "OculusFoveation_SetUsedApi")] private static extern void Internal_SetUsedFoveatedRenderingApi(BackendFovationApi api); [DllImport("UnityOpenXR", EntryPoint = "OculusFoveation_GetUsedApi")] internal static extern BackendFovationApi Internal_GetUsedFoveatedRenderingApi(); [DllImport("UnityOpenXR", EntryPoint = "NativeConfig_SetColorSubmissionMode")] private static extern void Internal_SetColorSubmissionMode(ColorSubmissionModeGroup[] colorSubmissionMode); [DllImport("UnityOpenXR", EntryPoint = "NativeConfig_SetColorSubmissionModes")] private static extern void Internal_SetColorSubmissionModes(int[] colorSubmissionMode, int arraySize); [DllImport("UnityOpenXR", EntryPoint = "NativeConfig_GetColorSubmissionModes")] private static extern int Internal_GetColorSubmissionModes([Out] int[] colorSubmissionMode, int arraySize); [DllImport("UnityOpenXR", EntryPoint = "NativeConfig_GetIsUsingLegacyXRDisplay")] [return: MarshalAs(UnmanagedType.U1)] private static extern bool Internal_GetIsUsingLegacyXRDisplay(); [DllImport("UnityOpenXR", EntryPoint = "NativeConfig_GetUseOpenXRPredictedTime")] [return: MarshalAs(UnmanagedType.U1)] private static extern bool Internal_GetUseOpenXRPredictedTime(); [DllImport("UnityOpenXR", EntryPoint = "NativeConfig_SetUseOpenXRPredictedTime")] private static extern void Internal_SetUseOpenXRPredictedTime([MarshalAs(UnmanagedType.I1)] bool enabled); private void Awake() { s_RuntimeInstance = this; } internal void ApplySettings(bool logSettings = false) { if (logSettings) { ulong section = DiagnosticReport.GetSection("OpenXR Settings"); DiagnosticReport.AddSectionBreak(section); LogRendererSettings(section); } ApplyRenderSettings(); ApplyPermissionSettings(); } private static OpenXRSettings GetInstance(bool useActiveBuildTarget) { OpenXRSettings openXRSettings = s_RuntimeInstance; if ((Object)(object)openXRSettings == (Object)null) { openXRSettings = ScriptableObject.CreateInstance(); } return openXRSettings; } } internal static class OpenXRAnalytics { [Serializable] private struct InitializeEvent : IData { public bool success; public string runtime; public string runtime_version; public string plugin_version; public string api_version; public string[] available_extensions; public string[] enabled_extensions; public string[] enabled_features; public string[] failed_features; } [AnalyticInfo("openxr_initialize", "unity.openxr", 1, 1000, 1000)] private class XrInitializeAnalytic : IAnalytic { private InitializeEvent? data; public XrInitializeAnalytic(InitializeEvent data) { this.data = data; } public bool TryGatherData(out IData data, [NotNullWhen(false)] out Exception error) { error = null; data = (IData)(object)this.data; return data != null; } } private const int kMaxEventsPerHour = 1000; private const int kMaxNumberOfElements = 1000; private const string kVendorKey = "unity.openxr"; private const string kEventInitialize = "openxr_initialize"; private static bool s_Initialized; private static bool Initialize() { //IL_0022: Unknown result type (might be due to invalid IL or missing references) if (s_Initialized) { return true; } if ((int)Analytics.RegisterEvent("openxr_initialize", 1000, 1000, "unity.openxr", "") != 0) { return false; } s_Initialized = true; return true; } public static void SendInitializeEvent(bool success) { if (s_Initialized || Initialize()) { SendPlayerAnalytics(CreateInitializeEvent(success)); } } private static InitializeEvent CreateInitializeEvent(bool success) { return new InitializeEvent { success = success, runtime = OpenXRRuntime.name, runtime_version = OpenXRRuntime.version, plugin_version = OpenXRRuntime.pluginVersion, api_version = OpenXRRuntime.apiVersion, enabled_extensions = (from ext in OpenXRRuntime.GetEnabledExtensions() select $"{ext}_{OpenXRRuntime.GetExtensionVersion(ext)}").ToArray(), available_extensions = (from ext in OpenXRRuntime.GetAvailableExtensions() select $"{ext}_{OpenXRRuntime.GetExtensionVersion(ext)}").ToArray(), enabled_features = (from f in OpenXRSettings.Instance.features where (Object)(object)f != (Object)null && f.enabled select ((object)f).GetType().FullName + "_" + f.version).ToArray(), failed_features = (from f in OpenXRSettings.Instance.features where (Object)(object)f != (Object)null && f.failedInitialization select ((object)f).GetType().FullName + "_" + f.version).ToArray() }; } private static void SendPlayerAnalytics(InitializeEvent data) { //IL_0011: Unknown result type (might be due to invalid IL or missing references) Analytics.SendEvent("openxr_initialize", (object)data, 1, ""); } } [Serializable] internal class OpenXRApiVersion { [SerializeField] private ushort m_major; [SerializeField] private ushort m_minor; [SerializeField] private uint m_patch; internal static OpenXRApiVersion Current => new OpenXRApiVersion(1, 1, 53u); internal ushort Major => m_major; internal ushort Minor => m_minor; internal uint Patch => m_patch; internal OpenXRApiVersion(ushort major, ushort minor, uint patch) { m_major = major; m_minor = minor; m_patch = patch; } public static bool operator ==(OpenXRApiVersion lhs, OpenXRApiVersion rhs) { if ((object)lhs != null || (object)rhs != null) { if ((object)lhs != null && (object)rhs != null && lhs.m_major == rhs.m_major && lhs.m_minor == rhs.m_minor) { return lhs.m_patch == rhs.m_patch; } return false; } return true; } public static bool operator !=(OpenXRApiVersion lhs, OpenXRApiVersion rhs) { return !(lhs == rhs); } public static bool operator >(OpenXRApiVersion lhs, OpenXRApiVersion rhs) { if ((object)lhs == null || (object)rhs == null) { throw new ArgumentNullException(); } if (lhs.m_major <= rhs.m_major && (lhs.m_major != rhs.m_major || lhs.m_minor <= rhs.m_minor)) { if (lhs.m_major == rhs.m_major && lhs.m_minor == rhs.m_minor) { return lhs.m_patch > rhs.m_patch; } return false; } return true; } public static bool operator <(OpenXRApiVersion lhs, OpenXRApiVersion rhs) { if ((object)lhs == null || (object)rhs == null) { throw new ArgumentNullException(); } if (lhs.m_major >= rhs.m_major && (lhs.m_major != rhs.m_major || lhs.m_minor >= rhs.m_minor)) { if (lhs.m_major == rhs.m_major && lhs.m_minor == rhs.m_minor) { return lhs.m_patch < rhs.m_patch; } return false; } return true; } public static bool operator >=(OpenXRApiVersion lhs, OpenXRApiVersion rhs) { if ((object)lhs == null || (object)rhs == null) { throw new ArgumentNullException(); } if (lhs.m_major != rhs.m_major) { return lhs.m_major > rhs.m_major; } if (lhs.m_minor != rhs.m_minor) { return lhs.m_minor > rhs.m_minor; } return lhs.m_patch >= rhs.m_patch; } public static bool operator <=(OpenXRApiVersion lhs, OpenXRApiVersion rhs) { if ((object)lhs == null || (object)rhs == null) { throw new ArgumentNullException(); } if (lhs.m_major != rhs.m_major) { return lhs.m_major < rhs.m_major; } if (lhs.m_minor != rhs.m_minor) { return lhs.m_minor < rhs.m_minor; } return lhs.m_patch <= rhs.m_patch; } public override bool Equals(object obj) { if (obj is OpenXRApiVersion openXRApiVersion) { return this == openXRApiVersion; } return false; } public override int GetHashCode() { return HashCode.Combine(Major, Minor, Patch); } internal static bool TryParse(string customRuntimeLoaderVersion, out OpenXRApiVersion version) { if (string.IsNullOrEmpty(customRuntimeLoaderVersion)) { version = null; return false; } string[] array = customRuntimeLoaderVersion.Split('.', StringSplitOptions.RemoveEmptyEntries); if (array.Length != 3) { version = null; return false; } ushort major; ushort minor; uint patch; try { major = ushort.Parse(array[0]); minor = ushort.Parse(array[1]); patch = uint.Parse(array[2]); } catch { version = null; return false; } version = new OpenXRApiVersion(major, minor, patch); return true; } public override string ToString() { return $"{m_major}.{m_minor}.{m_patch}"; } } internal class DiagnosticReport { private const string LibraryName = "UnityOpenXR"; public static readonly ulong k_NullSection; [DllImport("UnityOpenXR", EntryPoint = "DiagnosticReport_StartReport")] public static extern void StartReport(); [DllImport("UnityOpenXR", CharSet = CharSet.Ansi, EntryPoint = "DiagnosticReport_GetSection")] public static extern ulong GetSection(string sectionName); [DllImport("UnityOpenXR", CharSet = CharSet.Ansi, EntryPoint = "DiagnosticReport_AddSectionEntry")] public static extern void AddSectionEntry(ulong sectionHandle, string sectionEntry, string sectionBody); [DllImport("UnityOpenXR", CharSet = CharSet.Ansi, EntryPoint = "DiagnosticReport_AddSectionBreak")] public static extern void AddSectionBreak(ulong sectionHandle); [DllImport("UnityOpenXR", CharSet = CharSet.Ansi, EntryPoint = "DiagnosticReport_AddEventEntry")] public static extern void AddEventEntry(string eventName, string eventData); [DllImport("UnityOpenXR", EntryPoint = "DiagnosticReport_DumpReport")] private static extern void Internal_DumpReport(); [DllImport("UnityOpenXR", EntryPoint = "DiagnosticReport_DumpReportWithReason")] private static extern void Internal_DumpReport(string reason); [DllImport("UnityOpenXR", EntryPoint = "DiagnosticReport_GenerateReport")] private static extern IntPtr Internal_GenerateReport(); [DllImport("UnityOpenXR", EntryPoint = "DiagnosticReport_ReleaseReport")] private static extern void Internal_ReleaseReport(IntPtr report); internal static string GenerateReport() { string result = ""; IntPtr intPtr = Internal_GenerateReport(); if (intPtr != IntPtr.Zero) { result = Marshal.PtrToStringAnsi(intPtr); Internal_ReleaseReport(intPtr); intPtr = IntPtr.Zero; } return result; } public static void DumpReport(string reason) { Internal_DumpReport(reason); } } public class OpenXRLoader : OpenXRLoaderBase { } public class OpenXRLoaderBase : XRLoaderHelper { private class FeatureLoggingInfo { public string m_nameUi; public string m_version; public string m_company; public string m_openxrExtensionStrings; public FeatureLoggingInfo(string nameUi, string version, string company, string extensionStrings) { m_nameUi = nameUi; m_version = version; m_company = company; m_openxrExtensionStrings = extensionStrings; } } internal enum LoaderState { Uninitialized, InitializeAttempted, Initialized, StartAttempted, Started, StopAttempted, Stopped, DeinitializeAttempted } internal delegate void ReceiveNativeEventDelegate(OpenXRFeature.NativeEvent e, ulong payload); private const string K_defaultOpenXRLoaderName = "openxr_loader"; internal static Action deinitializedInternal; private List featureLoggingInfo; private const double k_IdlePollingWaitTimeInSeconds = 0.1; private static List s_DisplaySubsystemDescriptors = new List(); private static List s_InputSubsystemDescriptors = new List(); private List validLoaderInitStates = new List { LoaderState.Uninitialized, LoaderState.InitializeAttempted }; private List validLoaderStartStates = new List { LoaderState.Initialized, LoaderState.StartAttempted, LoaderState.Stopped }; private List validLoaderStopStates = new List { LoaderState.StartAttempted, LoaderState.Started, LoaderState.StopAttempted }; private List validLoaderDeinitStates = new List { LoaderState.InitializeAttempted, LoaderState.Initialized, LoaderState.Stopped, LoaderState.DeinitializeAttempted }; private List runningStates = new List { LoaderState.Initialized, LoaderState.StartAttempted, LoaderState.Started }; private OpenXRFeature.NativeEvent currentOpenXRState; private bool actionSetsAttached; private UnhandledExceptionEventHandler unhandledExceptionHandler; internal bool DisableValidationChecksOnEnteringPlaymode; private double lastPollCheckTime; private const string LibraryName = "UnityOpenXR"; internal static OpenXRLoaderBase Instance { get; private set; } internal LoaderState currentLoaderState { get; private set; } internal XRDisplaySubsystem displaySubsystem => ((XRLoaderHelper)this).GetLoadedSubsystem(); internal XRInputSubsystem inputSubsystem { get { OpenXRLoaderBase instance = Instance; if (instance == null) { return null; } return ((XRLoaderHelper)instance).GetLoadedSubsystem(); } } private bool isInitialized { get { if (currentLoaderState != LoaderState.Uninitialized) { return currentLoaderState != LoaderState.DeinitializeAttempted; } return false; } } private bool isStarted => runningStates.Contains(currentLoaderState); private static void ExceptionHandler(object sender, UnhandledExceptionEventArgs args) { ulong section = DiagnosticReport.GetSection("Unhandled Exception Report"); DiagnosticReport.AddSectionEntry(section, "Is Terminating", $"{args.IsTerminating}"); Exception ex = (Exception)args.ExceptionObject; DiagnosticReport.AddSectionEntry(section, "Message", ex.Message ?? ""); DiagnosticReport.AddSectionEntry(section, "Source", ex.Source ?? ""); DiagnosticReport.AddSectionEntry(section, "Stack Trace", "\n" + ex.StackTrace); DiagnosticReport.DumpReport("Uncaught Exception"); } public override bool Initialize() { if (currentLoaderState == LoaderState.Initialized) { return true; } if (!validLoaderInitStates.Contains(currentLoaderState)) { return false; } if ((Object)(object)Instance != (Object)null) { Debug.LogError((object)"Only one OpenXRLoader can be initialized at any given time"); return false; } DiagnosticReport.StartReport(); try { if (InitializeInternal()) { return true; } } catch (Exception ex) { Debug.LogException(ex); } ((XRLoader)this).Deinitialize(); Instance = null; OpenXRAnalytics.SendInitializeEvent(success: false); return false; } private bool InitializeInternal() { //IL_0118: Unknown result type (might be due to invalid IL or missing references) //IL_0122: Expected O, but got Unknown Instance = this; currentLoaderState = LoaderState.InitializeAttempted; Internal_SetSuccessfullyInitialized(value: false); OpenXRInput.RegisterLayouts(); OpenXRFeature.Initialize(); if (!LoadOpenXRSymbols()) { Debug.LogError((object)"Failed to load openxr runtime loader."); return false; } OpenXRSettings.Instance.features = (from f in OpenXRSettings.Instance.features where (Object)(object)f != (Object)null orderby f.priority descending, f.nameUi select f).ToArray(); OpenXRFeature.HookGetInstanceProcAddr(); if (!Internal_InitializeSession()) { return false; } RequestOpenXRFeatures(); RegisterOpenXRCallbacks(); if ((Object)null != (Object)(object)OpenXRSettings.Instance) { OpenXRSettings.Instance.ApplySettings(logSettings: true); } SetApplicationInfo(); if (!CreateSubsystems()) { return false; } if (OpenXRFeature.requiredFeatureFailed) { return false; } OpenXRAnalytics.SendInitializeEvent(success: true); OpenXRFeature.ReceiveLoaderEvent(this, OpenXRFeature.LoaderEvent.SubsystemCreate); DebugLogEnabledSpecExtensions(); Application.onBeforeRender += new UnityAction(ProcessOpenXRMessageLoop); currentLoaderState = LoaderState.Initialized; return true; } private bool CreateSubsystems() { if (displaySubsystem == null) { this.CreateSubsystem(s_DisplaySubsystemDescriptors, "OpenXR Display"); if (displaySubsystem == null) { return false; } } if (inputSubsystem == null) { this.CreateSubsystem(s_InputSubsystemDescriptors, "OpenXR Input"); if (inputSubsystem == null) { return false; } } return true; } internal void ProcessOpenXRMessageLoop() { OpenXRFeature.NativeEvent nativeEvent = currentOpenXRState; if (nativeEvent == OpenXRFeature.NativeEvent.XrIdle || nativeEvent == OpenXRFeature.NativeEvent.XrStopping || nativeEvent == OpenXRFeature.NativeEvent.XrExiting || nativeEvent == OpenXRFeature.NativeEvent.XrLossPending || nativeEvent == OpenXRFeature.NativeEvent.XrInstanceLossPending) { float realtimeSinceStartup = Time.realtimeSinceStartup; if ((double)realtimeSinceStartup - lastPollCheckTime < 0.1) { return; } lastPollCheckTime = realtimeSinceStartup; } Internal_PumpMessageLoop(); } public override bool Start() { if (currentLoaderState == LoaderState.Started) { return true; } if (!validLoaderStartStates.Contains(currentLoaderState)) { return false; } currentLoaderState = LoaderState.StartAttempted; if (!StartInternal()) { ((XRLoader)this).Stop(); return false; } currentLoaderState = LoaderState.Started; return true; } private bool StartInternal() { if (!Internal_CreateSessionIfNeeded()) { return false; } if (currentOpenXRState != OpenXRFeature.NativeEvent.XrReady || (currentLoaderState != LoaderState.StartAttempted && currentLoaderState != LoaderState.Started)) { return true; } this.StartSubsystem(); XRDisplaySubsystem obj = displaySubsystem; if (obj != null && !((IntegratedSubsystem)obj).running) { return false; } Internal_BeginSession(); if (!actionSetsAttached) { OpenXRInput.AttachActionSets(); actionSetsAttached = true; } XRDisplaySubsystem obj2 = displaySubsystem; if (obj2 != null && !((IntegratedSubsystem)obj2).running) { this.StartSubsystem(); } XRInputSubsystem obj3 = inputSubsystem; if (obj3 != null && !((IntegratedSubsystem)obj3).running) { this.StartSubsystem(); } XRInputSubsystem obj4 = inputSubsystem; bool num = obj4 != null && ((IntegratedSubsystem)obj4).running; XRDisplaySubsystem obj5 = displaySubsystem; bool flag = obj5 != null && ((IntegratedSubsystem)obj5).running; if (num && flag) { OpenXRFeature.ReceiveLoaderEvent(this, OpenXRFeature.LoaderEvent.SubsystemStart); return true; } return false; } public override bool Stop() { if (currentLoaderState == LoaderState.Stopped) { return true; } if (!validLoaderStopStates.Contains(currentLoaderState)) { return false; } currentLoaderState = LoaderState.StopAttempted; XRInputSubsystem obj = inputSubsystem; bool num = obj != null && ((IntegratedSubsystem)obj).running; XRDisplaySubsystem obj2 = displaySubsystem; bool flag = obj2 != null && ((IntegratedSubsystem)obj2).running; if (num || flag) { OpenXRFeature.ReceiveLoaderEvent(this, OpenXRFeature.LoaderEvent.SubsystemStop); } if (num) { this.StopSubsystem(); } if (flag) { this.StopSubsystem(); } StopInternal(); currentLoaderState = LoaderState.Stopped; return true; } private void StopInternal() { Internal_EndSession(); ProcessOpenXRMessageLoop(); } public override bool Deinitialize() { //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Expected O, but got Unknown if (currentLoaderState == LoaderState.Uninitialized) { return true; } if (!validLoaderDeinitStates.Contains(currentLoaderState)) { return false; } currentLoaderState = LoaderState.DeinitializeAttempted; try { Internal_RequestExitSession(); Application.onBeforeRender -= new UnityAction(ProcessOpenXRMessageLoop); ProcessOpenXRMessageLoop(); OpenXRFeature.ReceiveLoaderEvent(this, OpenXRFeature.LoaderEvent.SubsystemDestroy); this.DestroySubsystem(); this.DestroySubsystem(); DiagnosticReport.DumpReport("System Shutdown"); Internal_DestroySession(); ProcessOpenXRMessageLoop(); Internal_UnloadOpenXRLibrary(); currentLoaderState = LoaderState.Uninitialized; actionSetsAttached = false; if (unhandledExceptionHandler != null) { AppDomain.CurrentDomain.UnhandledException -= unhandledExceptionHandler; unhandledExceptionHandler = null; } deinitializedInternal?.Invoke(this); return ((XRLoaderHelper)this).Deinitialize(); } finally { Instance = null; } } internal void CreateSubsystem(List descriptors, string id) where TDescriptor : ISubsystemDescriptor where TSubsystem : ISubsystem { ((XRLoaderHelper)this).CreateSubsystem(descriptors, id); } internal void StartSubsystem() where T : class, ISubsystem { ((XRLoaderHelper)this).StartSubsystem(); } internal void StopSubsystem() where T : class, ISubsystem { ((XRLoaderHelper)this).StopSubsystem(); } internal void DestroySubsystem() where T : class, ISubsystem { ((XRLoaderHelper)this).DestroySubsystem(); } private static void SetApplicationInfo() { byte[] array = MD5.Create().ComputeHash(Encoding.UTF8.GetBytes(Application.version)); if (BitConverter.IsLittleEndian) { Array.Reverse(array); } uint applicationVersionHash = BitConverter.ToUInt32(array, 0); Internal_SetApplicationInfo(Application.productName, Application.version, applicationVersionHash, Application.unityVersion); } internal static byte[] StringToWCHAR_T(string s) { return ((Environment.OSVersion.Platform == PlatformID.Unix) ? Encoding.UTF32 : Encoding.Unicode).GetBytes(s + "\0"); } private static bool LoadOpenXRSymbols() { string loaderPath = GetLoaderPath(); Debug.Log((object)("Loading OpenXR loader library at path: " + loaderPath)); return Internal_LoadOpenXRLibrary(StringToWCHAR_T(loaderPath)); } private static string GetLoaderPath() { if (string.IsNullOrWhiteSpace(OpenXRSettings.Instance.customLoaderName)) { return "openxr_loader"; } return OpenXRSettings.Instance.customLoaderName; } private void RequestOpenXRFeatures() { OpenXRSettings instance = OpenXRSettings.Instance; if ((Object)(object)instance == (Object)null || instance.features == null) { return; } featureLoggingInfo = new List(instance.featureCount); OpenXRFeature[] features = instance.features; foreach (OpenXRFeature openXRFeature in features) { if ((Object)(object)openXRFeature == (Object)null || !openXRFeature.enabled) { continue; } featureLoggingInfo.Add(new FeatureLoggingInfo(openXRFeature.nameUi, openXRFeature.version, openXRFeature.company, openXRFeature.openxrExtensionStrings)); if (!string.IsNullOrEmpty(openXRFeature.openxrExtensionStrings)) { string[] array = openXRFeature.openxrExtensionStrings.Split(' '); foreach (string text in array) { if (!string.IsNullOrWhiteSpace(text)) { Internal_RequestEnableExtensionString(text); } } } OpenXRApiVersion version; OpenXRApiVersion openXRApiVersion = (OpenXRApiVersion.TryParse(openXRFeature.targetOpenXRApiVersion, out version) ? version : null); if (openXRApiVersion != null) { Internal_RequestOpenXRApiVersion(openXRApiVersion.Major, openXRApiVersion.Minor, openXRApiVersion.Patch); } } } private void LogRequestedOpenXRFeatures() { OpenXRSettings instance = OpenXRSettings.Instance; if ((Object)(object)instance == (Object)null || instance.features == null) { return; } StringBuilder stringBuilder = new StringBuilder(""); StringBuilder stringBuilder2 = new StringBuilder(""); uint num = 0u; foreach (FeatureLoggingInfo item in featureLoggingInfo) { stringBuilder.Append(" " + item.m_nameUi + ": Version=" + item.m_version + ", Company=\"" + item.m_company + "\""); if (!string.IsNullOrEmpty(item.m_openxrExtensionStrings)) { stringBuilder.Append(", Extensions=\"" + item.m_openxrExtensionStrings + "\""); string[] array = item.m_openxrExtensionStrings.Split(' '); foreach (string text in array) { if (!string.IsNullOrWhiteSpace(text) && !Internal_IsExtensionEnabled(text)) { num++; stringBuilder2.Append(" " + text + ": Feature=\"" + item.m_nameUi + "\": Version=" + item.m_version + ", Company=\"" + item.m_company + "\"\n"); } } } stringBuilder.Append("\n"); } ulong section = DiagnosticReport.GetSection("OpenXR Runtime Info"); DiagnosticReport.AddSectionBreak(section); DiagnosticReport.AddSectionEntry(section, "Features requested to be enabled", $"({featureLoggingInfo.Count})\n{stringBuilder}"); DiagnosticReport.AddSectionBreak(section); DiagnosticReport.AddSectionEntry(section, "Requested feature extensions not supported by runtime", $"({num})\n{stringBuilder2}"); } private static void DebugLogEnabledSpecExtensions() { ulong section = DiagnosticReport.GetSection("OpenXR Runtime Info"); DiagnosticReport.AddSectionBreak(section); string[] enabledExtensions = OpenXRRuntime.GetEnabledExtensions(); StringBuilder stringBuilder = new StringBuilder($"({enabledExtensions.Length})\n"); string[] array = enabledExtensions; foreach (string text in array) { stringBuilder.Append($" {text}: Version={OpenXRRuntime.GetExtensionVersion(text)}\n"); } DiagnosticReport.AddSectionEntry(section, "Runtime extensions enabled", stringBuilder.ToString()); } [MonoPInvokeCallback(typeof(ReceiveNativeEventDelegate))] private static void ReceiveNativeEvent(OpenXRFeature.NativeEvent e, ulong payload) { OpenXRLoaderBase instance = Instance; if ((Object)(object)instance != (Object)null) { instance.currentOpenXRState = e; } switch (e) { case OpenXRFeature.NativeEvent.XrRestartRequested: OpenXRRestarter.Instance.ShutdownAndRestart(); break; case OpenXRFeature.NativeEvent.XrReady: instance.StartInternal(); break; case OpenXRFeature.NativeEvent.XrBeginSession: instance.LogRequestedOpenXRFeatures(); break; case OpenXRFeature.NativeEvent.XrFocused: DiagnosticReport.DumpReport("System Startup Completed"); break; case OpenXRFeature.NativeEvent.XrRequestRestartLoop: Debug.Log((object)"XR Initialization failed, will try to restart xr periodically."); OpenXRRestarter.Instance.PauseAndShutdownAndRestart(); break; case OpenXRFeature.NativeEvent.XrRequestGetSystemLoop: OpenXRRestarter.Instance.PauseAndRetryInitialization(); break; case OpenXRFeature.NativeEvent.XrStopping: instance.StopInternal(); break; } OpenXRFeature.ReceiveNativeEvent(e, payload); if ((!((Object)(object)instance == (Object)null) && instance.isStarted) || e == OpenXRFeature.NativeEvent.XrInstanceChanged) { switch (e) { case OpenXRFeature.NativeEvent.XrExiting: OpenXRRestarter.Instance.Shutdown(); break; case OpenXRFeature.NativeEvent.XrLossPending: OpenXRRestarter.Instance.ShutdownAndRestart(); break; case OpenXRFeature.NativeEvent.XrInstanceLossPending: OpenXRRestarter.Instance.Shutdown(); break; } } } internal static void RegisterOpenXRCallbacks() { Internal_SetCallbacks(ReceiveNativeEvent); } [DllImport("UnityOpenXR", EntryPoint = "main_LoadOpenXRLibrary")] [return: MarshalAs(UnmanagedType.U1)] internal static extern bool Internal_LoadOpenXRLibrary(byte[] loaderPath); [DllImport("UnityOpenXR", EntryPoint = "main_UnloadOpenXRLibrary")] internal static extern void Internal_UnloadOpenXRLibrary(); [DllImport("UnityOpenXR", EntryPoint = "NativeConfig_SetCallbacks")] private static extern void Internal_SetCallbacks(ReceiveNativeEventDelegate callback); [DllImport("UnityOpenXR", CharSet = CharSet.Ansi, EntryPoint = "NativeConfig_SetApplicationInfo")] private static extern void Internal_SetApplicationInfo(string applicationName, string applicationVersion, uint applicationVersionHash, string engineVersion); [DllImport("UnityOpenXR", EntryPoint = "session_RequestExitSession")] internal static extern void Internal_RequestExitSession(); [DllImport("UnityOpenXR", EntryPoint = "session_InitializeSession")] [return: MarshalAs(UnmanagedType.U1)] internal static extern bool Internal_InitializeSession(); [DllImport("UnityOpenXR", EntryPoint = "session_CreateSessionIfNeeded")] [return: MarshalAs(UnmanagedType.U1)] internal static extern bool Internal_CreateSessionIfNeeded(); [DllImport("UnityOpenXR", EntryPoint = "session_BeginSession")] internal static extern void Internal_BeginSession(); [DllImport("UnityOpenXR", EntryPoint = "session_EndSession")] internal static extern void Internal_EndSession(); [DllImport("UnityOpenXR", EntryPoint = "session_DestroySession")] internal static extern void Internal_DestroySession(); [DllImport("UnityOpenXR", EntryPoint = "messagepump_PumpMessageLoop")] private static extern void Internal_PumpMessageLoop(); [DllImport("UnityOpenXR", EntryPoint = "session_SetSuccessfullyInitialized")] internal static extern void Internal_SetSuccessfullyInitialized([MarshalAs(UnmanagedType.I1)] bool value); [DllImport("UnityOpenXR", EntryPoint = "session_RequestOpenXRApiVersion")] private static extern void Internal_RequestOpenXRApiVersion(uint majorVersion, uint minorVersion, uint patchVersion); [DllImport("UnityOpenXR", CharSet = CharSet.Ansi, EntryPoint = "unity_ext_RequestEnableExtensionString")] [return: MarshalAs(UnmanagedType.U1)] internal static extern bool Internal_RequestEnableExtensionString(string extensionString); [DllImport("UnityOpenXR", EntryPoint = "unity_ext_IsExtensionEnabled")] [return: MarshalAs(UnmanagedType.U1)] private static extern bool Internal_IsExtensionEnabled(string extensionName); } public class OpenXRLoaderNoPreInit : OpenXRLoaderBase { } internal class OpenXRRestarter : MonoBehaviour { internal Action onAfterRestart; internal Action onAfterShutdown; internal Action onQuit; internal Action onAfterCoroutine; internal Action onAfterSuccessfulRestart; private static OpenXRRestarter s_Instance; private Coroutine m_Coroutine; private static int m_pauseAndRestartCoroutineCount; private Object m_PauseAndRestartCoroutineCountLock = new Object(); private static int m_pauseAndRestartAttempts; public bool isRunning => m_Coroutine != null; public static float TimeBetweenRestartAttempts { get; set; } public static int PauseAndRestartAttempts => m_pauseAndRestartAttempts; internal static int PauseAndRestartCoroutineCount => m_pauseAndRestartCoroutineCount; public static OpenXRRestarter Instance { get { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Expected O, but got Unknown if ((Object)(object)s_Instance == (Object)null) { GameObject val = GameObject.Find("~oxrestarter"); if ((Object)(object)val == (Object)null) { val = new GameObject("~oxrestarter"); ((Object)val).hideFlags = (HideFlags)61; val.AddComponent(); } s_Instance = val.GetComponent(); } return s_Instance; } } internal static bool DisableApplicationQuit { get; set; } static OpenXRRestarter() { TimeBetweenRestartAttempts = 5f; DisableApplicationQuit = false; } public void ResetCallbacks() { onAfterRestart = null; onAfterSuccessfulRestart = null; onAfterShutdown = null; onAfterCoroutine = null; onQuit = null; m_pauseAndRestartAttempts = 0; } public void Shutdown() { if (!((Object)(object)OpenXRLoaderBase.Instance == (Object)null)) { if (m_Coroutine != null) { Debug.LogError((object)"Only one shutdown or restart can be executed at a time"); } else { m_Coroutine = ((MonoBehaviour)this).StartCoroutine(RestartCoroutine(shouldRestart: false, shouldShutdown: true)); } } } public void ShutdownAndRestart() { if (!((Object)(object)OpenXRLoaderBase.Instance == (Object)null)) { if (m_Coroutine != null) { Debug.LogError((object)"Only one shutdown or restart can be executed at a time"); } else { m_Coroutine = ((MonoBehaviour)this).StartCoroutine(RestartCoroutine(shouldRestart: true, shouldShutdown: true)); } } } public void PauseAndShutdownAndRestart() { if (!((Object)(object)OpenXRLoaderBase.Instance == (Object)null)) { ((MonoBehaviour)this).StartCoroutine(PauseAndShutdownAndRestartCoroutine(TimeBetweenRestartAttempts)); } } public void PauseAndRetryInitialization() { if (!((Object)(object)OpenXRLoaderBase.Instance == (Object)null)) { ((MonoBehaviour)this).StartCoroutine(PauseAndRetryInitializationCoroutine(TimeBetweenRestartAttempts)); } } private void IncrementPauseAndRestartCoroutineCount() { lock (m_PauseAndRestartCoroutineCountLock) { m_pauseAndRestartCoroutineCount++; } } private void DecrementPauseAndRestartCoroutineCount() { lock (m_PauseAndRestartCoroutineCountLock) { m_pauseAndRestartCoroutineCount--; } } private IEnumerator PauseAndShutdownAndRestartCoroutine(float pauseTimeInSeconds) { IncrementPauseAndRestartCoroutineCount(); try { yield return (object)new WaitForSeconds(pauseTimeInSeconds); yield return new WaitForRestartFinish(); m_pauseAndRestartAttempts++; m_Coroutine = ((MonoBehaviour)this).StartCoroutine(RestartCoroutine(shouldRestart: true, shouldShutdown: true)); } finally { onAfterCoroutine?.Invoke(); } DecrementPauseAndRestartCoroutineCount(); } private IEnumerator PauseAndRetryInitializationCoroutine(float pauseTimeInSeconds) { IncrementPauseAndRestartCoroutineCount(); try { yield return (object)new WaitForSeconds(pauseTimeInSeconds); yield return new WaitForRestartFinish(); if (!((Object)(object)XRGeneralSettings.Instance.Manager.activeLoader != (Object)null)) { m_pauseAndRestartAttempts++; m_Coroutine = ((MonoBehaviour)this).StartCoroutine(RestartCoroutine(shouldRestart: true, shouldShutdown: false)); } } finally { onAfterCoroutine?.Invoke(); } DecrementPauseAndRestartCoroutineCount(); } private IEnumerator RestartCoroutine(bool shouldRestart, bool shouldShutdown) { try { if (shouldShutdown) { Debug.Log((object)"Shutting down OpenXR."); yield return null; XRGeneralSettings.Instance.Manager.DeinitializeLoader(); yield return null; onAfterShutdown?.Invoke(); } if (shouldRestart && OpenXRRuntime.ShouldRestart()) { Debug.Log((object)"Initializing OpenXR."); yield return XRGeneralSettings.Instance.Manager.InitializeLoader(); XRGeneralSettings.Instance.Manager.StartSubsystems(); if ((Object)(object)XRGeneralSettings.Instance.Manager.activeLoader != (Object)null) { m_pauseAndRestartAttempts = 0; onAfterSuccessfulRestart?.Invoke(); } onAfterRestart?.Invoke(); } else if (OpenXRRuntime.ShouldQuit()) { onQuit?.Invoke(); if (!DisableApplicationQuit) { Application.Quit(); } } } finally { OpenXRRestarter openXRRestarter = this; openXRRestarter.m_Coroutine = null; openXRRestarter.onAfterCoroutine?.Invoke(); } } } public static class OpenXRRuntime { private const string LibraryName = "UnityOpenXR"; public static string name { get { if (!Internal_GetRuntimeName(out var runtimeNamePtr)) { return ""; } return Marshal.PtrToStringAnsi(runtimeNamePtr); } } public static string version { get { if (!Internal_GetRuntimeVersion(out var major, out var minor, out var patch)) { return ""; } return $"{major}.{minor}.{patch}"; } } public static string apiVersion { get { if (!Internal_GetAPIVersion(out var major, out var minor, out var patch)) { return ""; } return $"{major}.{minor}.{patch}"; } } public static string pluginVersion { get { if (!Internal_GetPluginVersion(out var pluginVersionPtr)) { return ""; } return Marshal.PtrToStringAnsi(pluginVersionPtr); } } public static bool retryInitializationOnFormFactorErrors { get { return Internal_GetSoftRestartLoopAtInitialization(); } set { Internal_SetSoftRestartLoopAtInitialization(value); } } public static event Func wantsToQuit; public static event Func wantsToRestart; internal static bool isRuntimeAPIVersionGreaterThan1_1() { if (Internal_GetAPIVersion(out var major, out var minor, out var _) && major >= 1 && minor >= 1) { return true; } return false; } public static bool IsExtensionEnabled(string extensionName) { return Internal_IsExtensionEnabled(extensionName); } internal static bool IsExtensionEnabled(string extension, string featureName) { if (IsExtensionEnabled(extension)) { return true; } Debug.Log((object)("This OpenXR runtime failed to enable " + extension + ". " + featureName + " will be disabled.")); return false; } public static uint GetExtensionVersion(string extensionName) { return Internal_GetExtensionVersion(extensionName); } public static string[] GetEnabledExtensions() { string[] array = new string[Internal_GetEnabledExtensionCount()]; for (int i = 0; i < array.Length; i++) { Internal_GetEnabledExtensionName((uint)i, out var extensionName); array[i] = extensionName ?? ""; } return array; } public static string[] GetAvailableExtensions() { string[] array = new string[Internal_GetAvailableExtensionCount()]; for (int i = 0; i < array.Length; i++) { Internal_GetAvailableExtensionName((uint)i, out var extensionName); array[i] = extensionName ?? ""; } return array; } private static bool InvokeEvent(Func func) { if (func == null) { return true; } Delegate[] invocationList = func.GetInvocationList(); for (int i = 0; i < invocationList.Length; i++) { Func func2 = (Func)invocationList[i]; try { if (!func2()) { return false; } } catch (Exception ex) { Debug.LogException(ex); } } return true; } internal static bool ShouldQuit() { return InvokeEvent(OpenXRRuntime.wantsToQuit); } internal static bool ShouldRestart() { return InvokeEvent(OpenXRRuntime.wantsToRestart); } [DllImport("UnityOpenXR", EntryPoint = "NativeConfig_GetRuntimeName")] [return: MarshalAs(UnmanagedType.U1)] private static extern bool Internal_GetRuntimeName(out IntPtr runtimeNamePtr); [DllImport("UnityOpenXR", EntryPoint = "NativeConfig_GetRuntimeVersion")] [return: MarshalAs(UnmanagedType.U1)] private static extern bool Internal_GetRuntimeVersion(out ushort major, out ushort minor, out uint patch); [DllImport("UnityOpenXR", EntryPoint = "NativeConfig_GetAPIVersion")] [return: MarshalAs(UnmanagedType.U1)] private static extern bool Internal_GetAPIVersion(out ushort major, out ushort minor, out uint patch); [DllImport("UnityOpenXR", EntryPoint = "NativeConfig_GetPluginVersion")] [return: MarshalAs(UnmanagedType.U1)] private static extern bool Internal_GetPluginVersion(out IntPtr pluginVersionPtr); [DllImport("UnityOpenXR", EntryPoint = "unity_ext_IsExtensionEnabled")] [return: MarshalAs(UnmanagedType.U1)] private static extern bool Internal_IsExtensionEnabled(string extensionName); [DllImport("UnityOpenXR", EntryPoint = "unity_ext_GetExtensionVersion")] private static extern uint Internal_GetExtensionVersion(string extensionName); [DllImport("UnityOpenXR", EntryPoint = "unity_ext_GetEnabledExtensionCount")] private static extern uint Internal_GetEnabledExtensionCount(); [DllImport("UnityOpenXR", CharSet = CharSet.Ansi, EntryPoint = "unity_ext_GetEnabledExtensionName")] [return: MarshalAs(UnmanagedType.U1)] private static extern bool Internal_GetEnabledExtensionNamePtr(uint index, out IntPtr outName); [DllImport("UnityOpenXR", EntryPoint = "session_SetSoftRestartLoopAtInitialization")] private static extern void Internal_SetSoftRestartLoopAtInitialization([MarshalAs(UnmanagedType.I1)] bool value); [DllImport("UnityOpenXR", EntryPoint = "session_GetSoftRestartLoopAtInitialization")] [return: MarshalAs(UnmanagedType.U1)] private static extern bool Internal_GetSoftRestartLoopAtInitialization(); private static bool Internal_GetEnabledExtensionName(uint index, out string extensionName) { if (!Internal_GetEnabledExtensionNamePtr(index, out var outName)) { extensionName = ""; return false; } extensionName = Marshal.PtrToStringAnsi(outName); return true; } [DllImport("UnityOpenXR", EntryPoint = "unity_ext_GetAvailableExtensionCount")] private static extern uint Internal_GetAvailableExtensionCount(); [DllImport("UnityOpenXR", CharSet = CharSet.Ansi, EntryPoint = "unity_ext_GetAvailableExtensionName")] [return: MarshalAs(UnmanagedType.U1)] private static extern bool Internal_GetAvailableExtensionNamePtr(uint index, out IntPtr extensionName); private static bool Internal_GetAvailableExtensionName(uint index, out string extensionName) { if (!Internal_GetAvailableExtensionNamePtr(index, out var extensionName2)) { extensionName = ""; return false; } extensionName = Marshal.PtrToStringAnsi(extensionName2); return true; } [DllImport("UnityOpenXR", CharSet = CharSet.Ansi, EntryPoint = "session_GetLastError")] [return: MarshalAs(UnmanagedType.U1)] private static extern bool Internal_GetLastError(out IntPtr error); internal static bool GetLastError(out string error) { if (!Internal_GetLastError(out var error2)) { error = ""; return false; } error = Marshal.PtrToStringAnsi(error2); return true; } internal static void LogLastError() { if (GetLastError(out var error)) { Debug.LogError((object)error); } } } public static class OpenXRUtility { private const string LibraryName = "UnityOpenXR"; public static bool IsSessionFocused => Internal_IsSessionFocused(); public static bool IsUserPresent => Internal_GetUserPresence(); private static Pose Inverse(Pose p) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) Pose val = default(Pose); val.rotation = Quaternion.Inverse(p.rotation); val.position = val.rotation * -p.position; return val; } public static Pose ComputePoseToWorldSpace(Transform t, Camera camera) { //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)camera == (Object)null) { return default(Pose); } Transform transform = ((Component)camera).transform; Pose val = default(Pose); ((Pose)(ref val))..ctor(transform.localPosition, transform.localRotation); Pose p = default(Pose); ((Pose)(ref p))..ctor(transform.position, transform.rotation); Pose val2 = default(Pose); ((Pose)(ref val2))..ctor(t.position, t.rotation); Pose transformedBy = ((Pose)(ref val2)).GetTransformedBy(Inverse(p)); return ((Pose)(ref transformedBy)).GetTransformedBy(val); } [DllImport("UnityOpenXR", EntryPoint = "NativeConfig_IsSessionFocused")] [return: MarshalAs(UnmanagedType.U1)] private static extern bool Internal_IsSessionFocused(); [DllImport("UnityOpenXR", EntryPoint = "NativeConfig_GetUserPresence")] [return: MarshalAs(UnmanagedType.U1)] private static extern bool Internal_GetUserPresence(); } internal sealed class WaitForRestartFinish : CustomYieldInstruction { private float m_Timeout; public override bool keepWaiting { get { if (!OpenXRRestarter.Instance.isRunning) { return false; } if (Time.realtimeSinceStartup > m_Timeout) { Debug.LogError((object)"WaitForRestartFinish: Timeout"); return false; } return true; } } public WaitForRestartFinish(float timeout = 5f) { m_Timeout = Time.realtimeSinceStartup + timeout; } } } namespace UnityEngine.XR.OpenXR.API { public enum UnityXRRenderTextureFormat { kUnityXRRenderTextureFormatRGBA32 = 0, kUnityXRRenderTextureFormatBGRA32 = 1, kUnityXRRenderTextureFormatRGB565 = 2, kUnityXRRenderTextureFormatR16G16B16A16_SFloat = 3, kUnityXRRenderTextureFormatRGBA1010102 = 4, kUnityXRRenderTextureFormatBGRA1010102 = 5, kUnityXRRenderTextureFormatR11G11B10_UFloat = 6, kUnityXRRenderTextureFormatReference = 64, kUnityXRRenderTextureFormatSoftReferenceMSAA = 65, kUnityXRRenderTextureFormatNone = 66 } public struct UnityXRTextureData { public IntPtr nativePtr; public uint referenceTextureId; } public enum UnityXRDepthTextureFormat { kUnityXRDepthTextureFormat24bitOrGreater, kUnityXRDepthTextureFormat16bit, kUnityXRDepthTextureFormatReference, kUnityXRDepthTextureFormatNone } public enum UnityXRShadingRateFormat { kUnityXRShadingRateFormatNone, kUnityXRShadingRateR8G8 } public enum UnityXRRenderTextureFlags { kUnityXRRenderTextureFlagsUVDirectionTopToBottom = 1, kUnityXRRenderTextureFlagsMultisampleAutoResolve = 2, kUnityXRRenderTextureFlagsLockedWidthHeight = 4, kUnityXRRenderTextureFlagsWriteOnly = 8, kUnityXRRenderTextureFlagsSRGB = 0x10, kUnityXRRenderTextureFlagsOptimizeBufferDiscards = 0x20, kUnityXRRenderTextureFlagsMotionVectorTexture = 0x40, kUnityXRRenderTextureFlagsFoveationOffset = 0x80, kUnityXRRenderTextureFlagsViewportAsRenderArea = 0x100, kUnityXRRenderTextureFlagsHDR = 0x200 } public struct UnityXRRenderTextureDesc { public UnityXRRenderTextureFormat colorFormat; public UnityXRTextureData color; public UnityXRDepthTextureFormat depthFormat; public UnityXRTextureData depth; public UnityXRShadingRateFormat shadingRateFormat; public UnityXRTextureData shadingRate; public uint width; public uint height; public uint textureArrayLength; public uint flags; } public static class UnityXRDisplay { public const uint kUnityXRRenderTextureIdDontCare = 0u; private const string k_UnityOpenXRLib = "UnityOpenXR"; [DllImport("UnityOpenXR", EntryPoint = "Display_CreateTexture")] [return: MarshalAs(UnmanagedType.U1)] public static extern bool CreateTexture(UnityXRRenderTextureDesc desc, out uint id); [DllImport("UnityOpenXR", EntryPoint = "Display_DestroyTexture")] [return: MarshalAs(UnmanagedType.U1)] public static extern bool DestroyTexture(uint textureId); } } namespace UnityEngine.XR.OpenXR.NativeTypes { public unsafe delegate void XrPollEventCallback(XrEventDataBaseHeader* eventData); public static class PollEventRouter { private static readonly HashSet s_SubscribersToAllEvents = new HashSet(); private static readonly Dictionary> s_TypedEventSubscribers = new Dictionary>(); private unsafe static readonly IntPtr s_XrPollEventCallback = Marshal.GetFunctionPointerForDelegate(OnXrPollEvent); private static int numSubscribersToEventReceived => s_SubscribersToAllEvents.Count + s_TypedEventSubscribers.Count; private static void RegisterNativeCallback() { OpenXRLoaderBase.deinitializedInternal = (Action)Delegate.Combine(OpenXRLoaderBase.deinitializedInternal, new Action(ClearAllState)); Internal_RegisterPollEventCallback(s_XrPollEventCallback); } private static void UnregisterNativeCallback() { OpenXRLoaderBase.deinitializedInternal = (Action)Delegate.Remove(OpenXRLoaderBase.deinitializedInternal, new Action(ClearAllState)); Internal_UnregisterPollEventCallback(); } private static void ClearAllState(OpenXRLoaderBase _) { OpenXRLoaderBase.deinitializedInternal = (Action)Delegate.Remove(OpenXRLoaderBase.deinitializedInternal, new Action(ClearAllState)); s_SubscribersToAllEvents.Clear(); s_TypedEventSubscribers.Clear(); Internal_UnregisterPollEventCallback(); } [MonoPInvokeCallback(typeof(XrPollEventCallback))] private unsafe static void OnXrPollEvent(XrEventDataBaseHeader* eventData) { foreach (XrPollEventCallback s_SubscribersToAllEvent in s_SubscribersToAllEvents) { s_SubscribersToAllEvent(eventData); } if (!s_TypedEventSubscribers.ContainsKey(eventData->type)) { return; } foreach (XrPollEventCallback item in s_TypedEventSubscribers[eventData->type]) { item(eventData); } } public static bool TrySubscribeToAllEvents(XrPollEventCallback callback) { if (!s_SubscribersToAllEvents.Add(callback)) { return false; } if (numSubscribersToEventReceived == 1) { RegisterNativeCallback(); } return true; } public static bool TrySubscribeToEventType(XrStructureType eventType, XrPollEventCallback callback) { if (!s_TypedEventSubscribers.ContainsKey(eventType)) { s_TypedEventSubscribers.Add(eventType, new HashSet()); } if (!s_TypedEventSubscribers[eventType].Add(callback)) { return false; } if (numSubscribersToEventReceived == 1) { RegisterNativeCallback(); } return true; } public static bool TryUnsubscribeFromAllEvents(XrPollEventCallback callback) { if (!s_SubscribersToAllEvents.Remove(callback)) { return false; } if (numSubscribersToEventReceived == 0) { UnregisterNativeCallback(); } return true; } public static bool TryUnsubscribeFromEventType(XrStructureType eventType, XrPollEventCallback callback) { if (!s_TypedEventSubscribers.TryGetValue(eventType, out var value)) { return false; } if (!value.Remove(callback)) { return false; } if (value.Count == 0) { s_TypedEventSubscribers.Remove(eventType); } if (numSubscribersToEventReceived == 0) { UnregisterNativeCallback(); } return true; } [DllImport("UnityOpenXR", EntryPoint = "messagepump_RegisterPollEventCallback")] private static extern void Internal_RegisterPollEventCallback(IntPtr callback); [DllImport("UnityOpenXR", EntryPoint = "messagepump_UnregisterPollEventCallback")] private static extern void Internal_UnregisterPollEventCallback(); } public struct XrBaseInStructure { public XrStructureType type { get; } public unsafe void* next { get; set; } public unsafe XrBaseInStructure(XrStructureType type, void* next) { this.type = type; this.next = next; } public XrBaseInStructure(XrStructureType type) : this(type, null) { } } public enum XrEnvironmentBlendMode { Opaque = 1, Additive, AlphaBlend } public readonly struct XrEventDataBaseHeader { public XrStructureType type { get; } public unsafe void* next { get; } public unsafe XrEventDataBaseHeader(XrStructureType type, void* next) { this.type = type; this.next = next; } public XrEventDataBaseHeader(XrStructureType type) : this(type, null) { } } public struct XrExtent2Df : IEquatable { public float Width; public float Height; public XrExtent2Df(float width, float height) { Width = width; Height = height; } public bool Equals(XrExtent2Df other) { if (Width.Equals(other.Width)) { return Height.Equals(other.Height); } return false; } public override bool Equals(object obj) { if (obj is XrExtent2Df other) { return Equals(other); } return false; } public override int GetHashCode() { return HashCode.Combine(Width, Height); } } public struct XrFovf { public float AngleLeft; public float AngleRight; public float AngleUp; public float AngleDown; public XrFovf(float angleLeft, float angleRight, float angleUp, float angleDown) { AngleLeft = angleLeft; AngleRight = angleRight; AngleUp = angleUp; AngleDown = angleDown; } } public struct XrPosef : IEquatable { public XrQuaternionf Orientation; public XrVector3f Position; public XrPosef(Vector3 vec3, Quaternion quaternion) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) Position = new XrVector3f(vec3); Orientation = new XrQuaternionf(quaternion); } public XrPosef(Pose pose) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) Position = new XrVector3f(pose.position); Orientation = new XrQuaternionf(pose.rotation); } public static XrPosef FromSessionSpaceCoordinates(Vector3 position, Quaternion rotation) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) return new XrPosef { Position = XrVector3f.FromSessionSpaceCoordinates(position), Orientation = XrQuaternionf.FromSessionSpaceCoordinates(rotation) }; } public static XrPosef FromSessionSpaceCoordinates(Pose pose) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) return new XrPosef { Position = XrVector3f.FromSessionSpaceCoordinates(pose.position), Orientation = XrQuaternionf.FromSessionSpaceCoordinates(pose.rotation) }; } public Pose ToSessionSpacePose() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) return new Pose(Position.ToSessionSpaceVector3(), Orientation.ToSessionSpaceQuaternion()); } public bool Equals(XrPosef other) { if (Orientation.Equals(other.Orientation)) { return Position.Equals(other.Position); } return false; } public override bool Equals(object obj) { if (obj is XrPosef other) { return Equals(other); } return false; } public override int GetHashCode() { return HashCode.Combine(Orientation, Position); } } public struct XrQuaternionf : IEquatable { public float X; public float Y; public float Z; public float W; public XrQuaternionf(float x, float y, float z, float w) { X = 0f - x; Y = 0f - y; Z = z; W = w; } public XrQuaternionf(Quaternion quaternion) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) X = 0f - quaternion.x; Y = 0f - quaternion.y; Z = quaternion.z; W = quaternion.w; } public static XrQuaternionf FromSessionSpaceCoordinates(float x, float y, float z, float w) { return new XrQuaternionf { X = x, Y = y, Z = z, W = w }; } public static XrQuaternionf FromSessionSpaceCoordinates(Quaternion quaternion) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) return new XrQuaternionf { X = quaternion.x, Y = quaternion.y, Z = quaternion.z, W = quaternion.w }; } public Quaternion AsQuaternion() { //IL_001a: Unknown result type (might be due to invalid IL or missing references) return new Quaternion(0f - X, 0f - Y, Z, W); } public Quaternion ToSessionSpaceQuaternion() { //IL_0018: Unknown result type (might be due to invalid IL or missing references) return new Quaternion(X, Y, Z, W); } public bool Equals(XrQuaternionf other) { if (X.Equals(other.X) && Y.Equals(other.Y) && Z.Equals(other.Z)) { return W.Equals(other.W); } return false; } public override bool Equals(object obj) { if (obj is XrQuaternionf other) { return Equals(other); } return false; } public override int GetHashCode() { return HashCode.Combine(X, Y, Z, W); } } [Flags] public enum XrReferenceSpaceType { View = 1, Local = 2, Stage = 3, UnboundedMsft = 0x3B9B5E70, CombinedEyeVarjo = 0x3B9CA2A8 } public enum XrResult { Success = 0, [Obsolete("This value is misspelled and therefore deprecated in OpenXR Plug-in version 1.14.0. Use TimeoutExpired instead.", false)] TimeoutExpored = 1, TimeoutExpired = 1, LossPending = 3, EventUnavailable = 4, SpaceBoundsUnavailable = 7, SessionNotFocused = 8, FrameDiscarded = 9, ValidationFailure = -1, RuntimeFailure = -2, OutOfMemory = -3, ApiVersionUnsupported = -4, InitializationFailed = -6, FunctionUnsupported = -7, FeatureUnsupported = -8, ExtensionNotPresent = -9, LimitReached = -10, SizeInsufficient = -11, HandleInvalid = -12, InstanceLost = -13, SessionRunning = -14, SessionNotRunning = -16, SessionLost = -17, SystemInvalid = -18, PathInvalid = -19, PathCountExceeded = -20, PathFormatInvalid = -21, PathUnsupported = -22, LayerInvalid = -23, LayerLimitExceeded = -24, SwapchainRectInvalid = -25, SwapchainFormatUnsupported = -26, ActionTypeMismatch = -27, SessionNotReady = -28, SessionNotStopping = -29, TimeInvalid = -30, ReferenceSpaceUnsupported = -31, FileAccessError = -32, FileContentsInvalid = -33, FormFactorUnsupported = -34, FormFactorUnavailable = -35, ApiLayerNotPresent = -36, CallOrderInvalid = -37, GraphicsDeviceInvalid = -38, PoseInvalid = -39, IndexOutOfRange = -40, ViewConfigurationTypeUnsupported = -41, EnvironmentBlendModeUnsupported = -42, NameDuplicated = -44, NameInvalid = -45, ActionsetNotAttached = -46, ActionsetsAlreadyAttached = -47, LocalizedNameDuplicated = -48, LocalizedNameInvalid = -49, GraphicsRequirementsCallMissing = -50, RuntimeUnavailable = -51, ExtensionDependencyNotEnabled = -1000710001, PermissionInsufficient = -1000710000, AndroidThreadSettingsIdInvalidKHR = -1000003000, [Obsolete("This enum value is misspelled and therefore deprecated in OpenXR Plug-in version 1.14.0. Use AndroidThreadSettingsFailureKHR instead.", false)] AndroidThreadSettingsdFailureKHR = -1000003001, AndroidThreadSettingsFailureKHR = -1000003001, CreateSpatialAnchorFailedMSFT = -1000039001, SecondaryViewConfigurationTypeNotEnabledMSFT = -1000053000, ControllerModelKeyInvalidMSFT = -1000055000, ReprojectionModeUnsupportedMSFT = -1000066000, ComputeNewSceneNotCompletedMSFT = -1000097000, SceneComponentIdInvalidMSFT = -1000097001, SceneComponentTypeMismatchMSFT = -1000097002, SceneMeshBufferIdInvalidMSFT = -1000097003, SceneComputeFeatureIncompatibleMSFT = -1000097004, SceneComputeConsistencyMismatchMSFT = -1000097005, DisplayRefreshRateUnsupportedFB = -1000101000, ColorSpaceUnsupportedFB = -1000108000, SpaceComponentNotSupportedFB = -1000113000, SpaceComponentNotEnabledFB = -1000113001, SpaceComponentStatusPendingFB = -1000113002, SpaceComponentStatusAlreadySetFB = -1000113003, UnexpectedStatePassthroughFB = -1000118000, FeatureAlreadyCreatedPassthroughFB = -1000118001, FeatureRequiredPassthroughFB = -1000118002, NotPermittedPassthroughFB = -1000118003, InsufficientResourcesPassthroughFB = -1000118004, UnknownPassthroughFB = -1000118050, RenderModelKeyInvalidFB = -1000119000, RenderModelUnavailableFB = 1000119020, MarkerNotTrackedVARJO = -1000124000, MarkerIdInvalidVARJO = -1000124001, MarkerDetectorPermissionDeniedML = -1000138000, MarkerDetectorLocateFailedML = -1000138001, MarkerDetectorInvalidDataQueryML = -1000138002, MarkerDetectorInvalidCreateInfoML = -1000138003, MarkerInvalidML = -1000138004, LocalizationMapIncompatibleML = -1000139000, LocalizationMapUnavailableML = -1000139001, LocalizationMapFailML = -1000139002, LocalizationMapImportExportPermissionDeniedML = -1000139003, LocalizationMapPermissionDeniedML = -1000139004, LocalizationMapAlreadyExistsML = -1000139005, LocalizationMapCannotExportCloudMapML = -1000139006, SpatialAnchorsPermissionDeniedML = -1000140000, SpatialAnchorsNotLocalizedML = -1000140001, SpatialAnchorsOutOfMapBoundsML = -1000140002, SpatialAnchorsSpaceNotLocatableML = -1000140003, SpatialAnchorsAnchorNotFoundML = -1000141000, SpatialAnchorNameNotFoundMSFT = -1000142001, SpatialAnchorNameInvalidMSFT = -1000142002, SceneMarkerDataNotStringMSFT = 1000147000, SpaceMappingInsufficientFB = -1000169000, SpaceLocalizationFailedFB = -1000169001, SpaceNetworkTimeoutFB = -1000169002, SpaceNetworkRequestFailedFB = -1000169003, SpaceCloudStorageDisabledFB = -1000169004, PassthroughColorLutBufferSizeMismatchMETA = -1000266000, EnvironmentDepthNotAvailableMETA = 1000291000, RenderModelIdInvalidEXT = -1000300000, RenderModelAssetUnavailableEXT = -1000300001, RenderModelGltfExtensionRequiredEXT = -1000300002, NotInteractionRenderModelEXT = -1000301000, HintAlreadySetQCOM = -1000306000, NotAnAnchorHTC = -1000319000, SpatialEntityIdInvalidBD = -1000389000, SpatialSensingServiceUnavailableBD = -1000389001, AnchorNotSupportedForEntityBD = -1000389002, SpatialAnchorNotFoundBD = -1000390000, SpatialAnchorSharingNetworkTimeoutBD = -1000391000, SpatialAnchorSharingAuthenticationFailureBD = -1000391001, SpatialAnchorSharingNetworkFailureBD = -1000391002, SpatialAnchorSharingLocaliztionFailBD = -1000391003, SpatialAnchorSharingMapInsufficientBD = -1000391004, SceneCaptureFailureBD = -1000392000, SpaceNotLocatableEXT = -1000429000, PlaneDetectionPermissionDeniedEXT = -1000429001, FuturePendingEXT = -1000469001, FutureInvalidEXT = -1000469002, SystemNotificationPermissionDeniedML = -1000473000, SystemNotificationIncompatibleSkuML = -1000473001, WorldMeshDetectorPermissionDeniedML = -1000474000, WorldMeshDetectorSpaceNotLocatableML = -1000474001, FacialExpressionPermissionDeniedML = 1000482000, ColocationDiscoveryNetworkFailedMETA = -1000571001, ColocationDiscoveryNoDiscoveryMethodMETA = -1000571002, ColocationDiscoveryAlreadyAdvertisingMETA = 1000571003, ColocationDiscoveryAlreadyDiscoveringMETA = 1000571004, SpaceGroupNotFoundMETA = -1000572002, SpatialCapabilityUnsupportedEXT = -1000740001, SpatialEntityIdInvalidEXT = -1000740002, SpatialBufferIdInvalidEXT = -1000740003, SpatialComponentUnsupportedForCapabilityEXT = -1000740004, SpatialCapabilityConfigurationInvalidEXT = -1000740005, SpatialComponentNotEnabledEXT = -1000740006, SpatialPersistenceScopeUnsupportedEXT = -1000763001, SpatialPersistenceScopeIncompatibleEXT = -1000781001, ExtensionDependencyNotEnabledKHR = -1000710001, PermissionInsufficientKHR = -1000710000, MaxResult = int.MaxValue } public static class XrResultExtensions { public static bool IsSuccess(this XrResult xrResult) { return xrResult >= XrResult.Success; } public static bool IsUnqualifiedSuccess(this XrResult xrResult) { return xrResult == XrResult.Success; } public static bool IsError(this XrResult xrResult) { return xrResult < XrResult.Success; } } public enum XrSessionState { Unknown, Idle, Ready, Synchronized, Visible, Focused, Stopping, LossPending, Exiting } [Flags] public enum XrSpaceLocationFlags { None = 0, OrientationValid = 1, PositionValid = 2, OrientationTracked = 4, PositionTracked = 8 } public enum XrStructureType : uint { XR_TYPE_UNKNOWN = 0u, Unknown = 0u, ApiLayerProperties = 1u, ExtensionProperties = 2u, InstanceCreateInfo = 3u, SystemGetInfo = 4u, SystemProperties = 5u, ViewLocateInfo = 6u, XrView = 7u, SessionCreateInfo = 8u, XR_TYPE_SWAPCHAIN_CREATE_INFO = 9u, SwapchainCreateInfo = 9u, SessionBeginInfo = 10u, ViewState = 11u, FrameEndInfo = 12u, HapticVibration = 13u, EventDataBuffer = 16u, EventDataInstanceLossPending = 17u, EventDataSessionStateChanged = 18u, ActionStateBoolean = 23u, ActionStateFloat = 24u, ActionStateVector2f = 25u, ActionStatePose = 27u, ActionSetCreateInfo = 28u, ActionCreateInfo = 29u, InstanceProperties = 32u, FrameWaitInfo = 33u, XR_TYPE_COMPOSITION_LAYER_PROJECTION = 35u, CompositionLayerProjection = 35u, XR_TYPE_COMPOSITION_LAYER_QUAD = 36u, CompositionLayerQuad = 36u, ReferenceSpaceCreateInfo = 37u, ActionSpaceCreateInfo = 38u, EventDataReferenceSpaceChangePending = 40u, ViewConfigurationView = 41u, SpaceLocation = 42u, SpaceVelocity = 43u, FrameState = 44u, ViewConfigurationProperties = 45u, FrameBeginInfo = 46u, XR_TYPE_COMPOSITION_LAYER_PROJECTION_VIEW = 48u, CompositionLayerProjectionView = 48u, EventDataEventsLost = 49u, InteractionProfileSuggestedBinding = 51u, EventDataInteractionProfileChanged = 52u, InteractionProfileState = 53u, SwapchainImageAcquireInfo = 55u, SwapchainImageWaitInfo = 56u, SwapchainImageReleaseInfo = 57u, ActionStateGetInfo = 58u, HapticActionInfo = 59u, SessionActionSetsAttachInfo = 60u, ActionsSyncInfo = 61u, BoundSourcesForActionEnumerateInfo = 62u, InputSourceLocalizedNameGetInfo = 63u, SpacesLocateInfo = 1000471000u, SpaceLocations = 1000471001u, SpaceVelocities = 1000471002u, XR_TYPE_COMPOSITION_LAYER_CUBE_KHR = 1000006000u, CompositionLayerCubeKHR = 1000006000u, InstanceCreateInfoAndroidKHR = 1000008000u, CompositionLayerDepthInfoKHR = 1000010000u, VulkanSwapchainFormatListCreateInfoKHR = 1000014000u, EventDataPerfSettingsEXT = 1000015000u, XR_TYPE_COMPOSITION_LAYER_CYLINDER_KHR = 1000017000u, CompositionLayerCylinderKHR = 1000017000u, XR_TYPE_COMPOSITION_LAYER_EQUIRECT_KHR = 1000018000u, CompositionLayerEquirectKHR = 1000018000u, DebugUtilsObjectNameInfoEXT = 1000019000u, DebugUtilsMessengerCallbackDataEXT = 1000019001u, DebugUtilsMessengerCreateInfoEXT = 1000019002u, DebugUtilsLabelEXT = 1000019003u, GraphicsBindingOpenGLWin32KHR = 1000023000u, GraphicsBindingOpenGLXlibKHR = 1000023001u, GraphicsBindingOpenGLXcbKHR = 1000023002u, GraphicsBindingOpenGLWaylandKHR = 1000023003u, SwapchainImageOpenGLKHR = 1000023004u, GraphicsRequirementsOpenGLKHR = 1000023005u, GraphicsBindingOpenGLESAndroidKHR = 1000024001u, SwapchainImageOpenGLESKHR = 1000024002u, GraphicsRequirementsOpenGLESKHR = 1000024003u, GraphicsBindingVulkanKHR = 1000025000u, SwapchainImageVulkanKHR = 1000025001u, GraphicsRequirementsVulkanKHR = 1000025002u, GraphicsBindingD3D11KHR = 1000027000u, SwapchainImageD3D11KHR = 1000027001u, GraphicsRequirementsD3D11KHR = 1000027002u, GraphicsBindingD3D12KHR = 1000028000u, SwapchainImageD3D12KHR = 1000028001u, GraphicsRequirementsD3D12KHR = 1000028002u, GraphicsBindingMetalKHR = 1000029000u, SwapchainImageMetalKHR = 1000029001u, GraphicsRequirementsMetalKHR = 1000029002u, SystemEyeGazeInteractionPropertiesEXT = 1000030000u, EyeGazeSampleTimeEXT = 1000030001u, VisibilityMaskKHR = 1000031000u, EventDataVisibilityMaskChangedKHR = 1000031001u, SessionCreateInfoOverlayEXTX = 1000033000u, EventDataMainSessionVisibilityChangedEXTX = 1000033003u, CompositionLayerColorScaleBiasKHR = 1000034000u, SpatialAnchorCreateInfoMSFT = 1000039000u, SpatialAnchorSpaceCreateInfoMSFT = 1000039001u, CompositionLayerImageLayoutFB = 1000040000u, CompositionLayerAlphaBlendFB = 1000041001u, ViewConfigurationDepthRangeEXT = 1000046000u, GraphicsBindingEGLMNDX = 1000048004u, SpatialGraphNodeSpaceCreateInfoMSFT = 1000049000u, SpatialGraphStaticNodeBindingCreateInfoMSFT = 1000049001u, SpatialGraphNodeBindingPropertiesGetInfoMSFT = 1000049002u, SpatialGraphNodeBindingPropertiesMSFT = 1000049003u, SystemHandTrackingPropertiesEXT = 1000051000u, HandTrackerCreateInfoEXT = 1000051001u, HandJointsLocateInfoEXT = 1000051002u, HandJointLocationsEXT = 1000051003u, HandJointVelocitiesEXT = 1000051004u, SystemHandTrackingMeshPropertiesMSFT = 1000052000u, HandMeshSpaceCreateInfoMSFT = 1000052001u, HandMeshUpdateInfoMSFT = 1000052002u, HandMeshMSFT = 1000052003u, HandPoseTypeInfoMSFT = 1000052004u, SecondaryViewConfigurationSessionBeginInfoMSFT = 1000053000u, SecondaryViewConfigurationStateMSFT = 1000053001u, SecondaryViewConfigurationFrameStateMSFT = 1000053002u, SecondaryViewConfigurationFrameEndInfoMSFT = 1000053003u, SecondaryViewConfigurationLayerInfoMSFT = 1000053004u, SecondaryViewConfigurationSwapchainCreateInfoMSFT = 1000053005u, ControllerModelKeyStateMSFT = 1000055000u, ControllerModelNodePropertiesMSFT = 1000055001u, ControllerModelPropertiesMSFT = 1000055002u, ControllerModelNodeStateMSFT = 1000055003u, ControllerModelStateMSFT = 1000055004u, ViewConfigurationViewFovEPIC = 1000059000u, HolographicWindowAttachmentMSFT = 1000063000u, CompositionLayerReprojectionInfoMSFT = 1000066000u, CompositionLayerReprojectionPlaneOverrideMSFT = 1000066001u, AndroidSurfaceSwapchainCreateInfoFB = 1000070000u, CompositionLayerSecureContentFB = 1000072000u, BodyTrackerCreateInfoFB = 1000076001u, BodyJointsLocateInfoFB = 1000076002u, SystemBodyTrackingPropertiesFB = 1000076004u, BodyJointLocationsFB = 1000076005u, BodySkeletonFB = 1000076006u, InteractionProfileDpadBindingEXT = 1000078000u, InteractionProfileAnalogThresholdVALVE = 1000079000u, HandJointsMotionRangeInfoEXT = 1000080000u, LoaderInitInfoAndroidKHR = 1000089000u, VulkanInstanceCreateInfoKHR = 1000090000u, VulkanDeviceCreateInfoKHR = 1000090001u, VulkanGraphicsDeviceGetInfoKHR = 1000090003u, XR_TYPE_COMPOSITION_LAYER_EQUIRECT2_KHR = 1000091000u, CompositionLayerEquirect2KHR = 1000091000u, SceneObserverCreateInfoMSFT = 1000097000u, SceneCreateInfoMSFT = 1000097001u, NewSceneComputeInfoMSFT = 1000097002u, VisualMeshComputeLodInfoMSFT = 1000097003u, SceneComponentsMSFT = 1000097004u, SceneComponentsGetInfoMSFT = 1000097005u, SceneComponentLocationsMSFT = 1000097006u, SceneComponentsLocateInfoMSFT = 1000097007u, SceneObjectsMSFT = 1000097008u, SceneComponentParentFilterInfoMSFT = 1000097009u, SceneObjectTypesFilterInfoMSFT = 1000097010u, ScenePlanesMSFT = 1000097011u, ScenePlaneAlignmentFilterInfoMSFT = 1000097012u, SceneMeshesMSFT = 1000097013u, SceneMeshBuffersGetInfoMSFT = 1000097014u, SceneMeshBuffersMSFT = 1000097015u, SceneMeshVertexBufferMSFT = 1000097016u, SceneMeshIndicesUint32MSFT = 1000097017u, SceneMeshIndicesUint16MSFT = 1000097018u, SerializedSceneFragmentDataGetInfoMSFT = 1000098000u, SceneDeserializeInfoMSFT = 1000098001u, EventDataDisplayRefreshRateChangedFB = 1000101000u, ViveTrackerPathsHTCX = 1000103000u, EventDataViveTrackerConnectedHTCX = 1000103001u, SystemFacialTrackingPropertiesHTC = 1000104000u, FacialTrackerCreateInfoHTC = 1000104001u, FacialExpressionsHTC = 1000104002u, SystemColorSpacePropertiesFB = 1000108000u, HandTrackingMeshFB = 1000110001u, HandTrackingScaleFB = 1000110003u, HandTrackingAimStateFB = 1000111001u, HandTrackingCapsulesStateFB = 1000112000u, SystemSpatialEntityPropertiesFB = 1000113004u, SpatialAnchorCreateInfoFB = 1000113003u, SpaceComponentStatusSetInfoFB = 1000113007u, SpaceComponentStatusFB = 1000113001u, EventDataSpatialAnchorCreateCompleteFB = 1000113005u, EventDataSpaceSetStatusCompleteFB = 1000113006u, FoveationProfileCreateInfoFB = 1000114000u, SwapchainCreateInfoFoveationFB = 1000114001u, SwapchainStateFoveationFB = 1000114002u, FoveationLevelProfileCreateInfoFB = 1000115000u, KeyboardSpaceCreateInfoFB = 1000116009u, KeyboardTrackingQueryFB = 1000116004u, SystemKeyboardTrackingPropertiesFB = 1000116002u, TriangleMeshCreateInfoFB = 1000117001u, SystemPassthroughPropertiesFB = 1000118000u, PassthroughCreateInfoFB = 1000118001u, PassthroughLayerCreateInfoFB = 1000118002u, CompositionLayerPassthroughFB = 1000118003u, GeometryInstanceCreateInfoFB = 1000118004u, GeometryInstanceTransformFB = 1000118005u, SystemPassthroughProperties2FB = 1000118006u, PassthroughStyleFB = 1000118020u, PassthroughColorMapMonoToRgbaFB = 1000118021u, PassthroughColorMapMonoToMonoFB = 1000118022u, PassthroughBrightnessContrastSaturationFB = 1000118023u, EventDataPassthroughStateChangedFB = 1000118030u, RenderModelPathInfoFB = 1000119000u, RenderModelPropertiesFB = 1000119001u, RenderModelBufferFB = 1000119002u, RenderModelLoadInfoFB = 1000119003u, SystemRenderModelPropertiesFB = 1000119004u, RenderModelCapabilitiesRequestFB = 1000119005u, BindingModificationsKHR = 1000120000u, ViewLocateFoveatedRenderingVARJO = 1000121000u, FoveatedViewConfigurationViewVARJO = 1000121001u, SystemFoveatedRenderingPropertiesVARJO = 1000121002u, CompositionLayerDepthTestVARJO = 1000122000u, SystemMarkerTrackingPropertiesVARJO = 1000124000u, EventDataMarkerTrackingUpdateVARJO = 1000124001u, MarkerSpaceCreateInfoVARJO = 1000124002u, FrameEndInfoML = 1000135000u, GlobalDimmerFrameEndInfoML = 1000136000u, CoordinateSpaceCreateInfoML = 1000137000u, SystemMarkerUnderstandingPropertiesML = 1000138000u, MarkerDetectorCreateInfoML = 1000138001u, MarkerDetectorArucoInfoML = 1000138002u, MarkerDetectorSizeInfoML = 1000138003u, MarkerDetectorAprilTagInfoML = 1000138004u, MarkerDetectorCustomProfileInfoML = 1000138005u, MarkerDetectorSnapshotInfoML = 1000138006u, MarkerDetectorStateML = 1000138007u, MarkerSpaceCreateInfoML = 1000138008u, LocalizationMapML = 1000139000u, EventDataLocalizationChangedML = 1000139001u, MapLocalizationRequestInfoML = 1000139002u, LocalizationMapImportInfoML = 1000139003u, LocalizationEnableEventsInfoML = 1000139004u, SpatialAnchorsCreateInfoFromPoseML = 1000140000u, CreateSpatialAnchorsCompletionML = 1000140001u, SpatialAnchorStateML = 1000140002u, SpatialAnchorsCreateStorageInfoML = 1000141000u, SpatialAnchorsQueryInfoRadiusML = 1000141001u, SpatialAnchorsQueryCompletionML = 1000141002u, SpatialAnchorsCreateInfoFromUuidsML = 1000141003u, SpatialAnchorsPublishInfoML = 1000141004u, SpatialAnchorsPublishCompletionML = 1000141005u, SpatialAnchorsDeleteInfoML = 1000141006u, SpatialAnchorsDeleteCompletionML = 1000141007u, SpatialAnchorsUpdateExpirationInfoML = 1000141008u, SpatialAnchorsUpdateExpirationCompletionML = 1000141009u, SpatialAnchorsPublishCompletionDetailsML = 1000141010u, SpatialAnchorsDeleteCompletionDetailsML = 1000141011u, SpatialAnchorsUpdateExpirationCompletionDetailsML = 1000141012u, EventDataHeadsetFitChangedML = 1000472000u, EventDataEyeCalibrationChangedML = 1000472001u, UserCalibrationEnableEventsInfoML = 1000472002u, SpatialAnchorPersistenceInfoMSFT = 1000142000u, SpatialAnchorFromPersistedAnchorCreateInfoMSFT = 1000142001u, SceneMarkersMSFT = 1000147000u, SceneMarkerTypeFilterMSFT = 1000147001u, SceneMarkerQRCodesMSFT = 1000147002u, SpaceQueryInfoFB = 1000156001u, SpaceQueryResultsFB = 1000156002u, SpaceStorageLocationFilterInfoFB = 1000156003u, SpaceUuidFilterInfoFB = 1000156054u, SpaceComponentFilterInfoFB = 1000156052u, EventDataSpaceQueryResultsAvailableFB = 1000156103u, EventDataSpaceQueryCompleteFB = 1000156104u, SpaceSaveInfoFB = 1000158000u, SpaceEraseInfoFB = 1000158001u, EventDataSpaceSaveCompleteFB = 1000158106u, EventDataSpaceEraseCompleteFB = 1000158107u, SwapchainImageFoveationVulkanFB = 1000160000u, SwapchainStateAndroidSurfaceDimensionsFB = 1000161000u, SwapchainStateSamplerOpenGLESFB = 1000162000u, SwapchainStateSamplerVulkanFB = 1000163000u, SpaceShareInfoFB = 1000169001u, EventDataSpaceShareCompleteFB = 1000169002u, CompositionLayerSpaceWarpInfoFB = 1000171000u, SystemSpaceWarpPropertiesFB = 1000171001u, HapticAmplitudeEnvelopeVibrationFB = 1000173001u, SemanticLabelsFB = 1000175000u, RoomLayoutFB = 1000175001u, Boundary2DFB = 1000175002u, SemanticLabelsSupportInfoFB = 1000175010u, DigitalLensControlALMALENCE = 1000196000u, EventDataSceneCaptureCompleteFB = 1000198001u, SceneCaptureRequestInfoFB = 1000198050u, SpaceContainerFB = 1000199000u, FoveationEyeTrackedProfileCreateInfoMETA = 1000200000u, FoveationEyeTrackedStateMETA = 1000200001u, SystemFoveationEyeTrackedPropertiesMETA = 1000200002u, SystemFaceTrackingPropertiesFB = 1000201004u, FaceTrackerCreateInfoFB = 1000201005u, FaceExpressionInfoFB = 1000201002u, FaceExpressionWeightsFB = 1000201006u, EyeTrackerCreateInfoFB = 1000202001u, EyeGazesInfoFB = 1000202002u, EyeGazesFB = 1000202003u, SystemEyeTrackingPropertiesFB = 1000202004u, PassthroughKeyboardHandsIntensityFB = 1000203002u, CompositionLayerSettingsFB = 1000204000u, HapticPcmVibrationFB = 1000209001u, DevicePcmSampleRateStateFB = 1000209002u, FrameSynthesisInfoEXT = 1000211000u, FrameSynthesisConfigViewEXT = 1000211001u, CompositionLayerDepthTestFB = 1000212000u, LocalDimmingFrameEndInfoMETA = 1000216000u, PassthroughPreferencesMETA = 1000217000u, SystemVirtualKeyboardPropertiesMETA = 1000219001u, VirtualKeyboardCreateInfoMETA = 1000219002u, VirtualKeyboardSpaceCreateInfoMETA = 1000219003u, VirtualKeyboardLocationInfoMETA = 1000219004u, VirtualKeyboardModelVisibilitySetInfoMETA = 1000219005u, VirtualKeyboardAnimationStateMETA = 1000219006u, VirtualKeyboardModelAnimationStatesMETA = 1000219007u, VirtualKeyboardTextureDataMETA = 1000219009u, VirtualKeyboardInputInfoMETA = 1000219010u, VirtualKeyboardTextContextChangeInfoMETA = 1000219011u, EventDataVirtualKeyboardCommitTextMETA = 1000219014u, EventDataVirtualKeyboardBackspaceMETA = 1000219015u, EventDataVirtualKeyboardEnterMETA = 1000219016u, EventDataVirtualKeyboardShownMETA = 1000219017u, EventDataVirtualKeyboardHiddenMETA = 1000219018u, ExternalCameraOCULUS = 1000226000u, VulkanSwapchainCreateInfoMETA = 1000227000u, PerformanceMetricsStateMETA = 1000232001u, PerformanceMetricsCounterMETA = 1000232002u, SpaceListSaveInfoFB = 1000238000u, EventDataSpaceListSaveCompleteFB = 1000238001u, SpaceUserCreateInfoFB = 1000241001u, SystemHeadsetIDPropertiesMETA = 1000245000u, RecommendedLayerResolutionMETA = 1000254000u, RecommendedLayerResolutionGetInfoMETA = 1000254001u, SystemPassthroughColorLutPropertiesMETA = 1000266000u, PassthroughColorLutCreateInfoMETA = 1000266001u, PassthroughColorLutUpdateInfoMETA = 1000266002u, PassthroughColorMapLutMETA = 1000266100u, PassthroughColorMapInterpolatedLutMETA = 1000266101u, SpaceTriangleMeshGetInfoMETA = 1000269001u, SpaceTriangleMeshMETA = 1000269002u, SystemPropertiesBodyTrackingFullBodyMETA = 1000274000u, EventDataPassthroughLayerResumedMETA = 1000282000u, SystemFaceTrackingProperties2FB = 1000287013u, FaceTrackerCreateInfo2FB = 1000287014u, FaceExpressionInfo2FB = 1000287015u, FaceExpressionWeights2FB = 1000287016u, SystemSpatialEntitySharingPropertiesMETA = 1000290000u, ShareSpacesInfoMETA = 1000290001u, EventDataShareSpacesCompleteMETA = 1000290002u, EnvironmentDepthProviderCreateInfoMETA = 1000291000u, EnvironmentDepthSwapchainCreateInfoMETA = 1000291001u, EnvironmentDepthSwapchainStateMETA = 1000291002u, EnvironmentDepthImageAcquireInfoMETA = 1000291003u, EnvironmentDepthImageViewMETA = 1000291004u, EnvironmentDepthImageMETA = 1000291005u, EnvironmentDepthHandRemovalSetInfoMETA = 1000291006u, SystemEnvironmentDepthPropertiesMETA = 1000291007u, RenderModelCreateInfoEXT = 1000300000u, RenderModelPropertiesGetInfoEXT = 1000300001u, RenderModelPropertiesEXT = 1000300002u, RenderModelSpaceCreateInfoEXT = 1000300003u, RenderModelStateGetInfoEXT = 1000300004u, RenderModelStateEXT = 1000300005u, RenderModelAssetCreateInfoEXT = 1000300006u, RenderModelAssetDataGetInfoEXT = 1000300007u, RenderModelAssetDataEXT = 1000300008u, RenderModelAssetPropertiesGetInfoEXT = 1000300009u, RenderModelAssetPropertiesEXT = 1000300010u, InteractionRenderModelIdsEnumerateInfoEXT = 1000301000u, InteractionRenderModelSubactionPathInfoEXT = 1000301001u, EventDataInteractionRenderModelsChangedEXT = 1000301002u, InteractionRenderModelTopLevelUserPathGetInfoEXT = 1000301003u, PassthroughCreateInfoHTC = 1000317001u, PassthroughColorHTC = 1000317002u, PassthroughMeshTransformInfoHTC = 1000317003u, CompositionLayerPassthroughHTC = 1000317004u, FoveationApplyInfoHTC = 1000318000u, FoveationDynamicModeInfoHTC = 1000318001u, FoveationCustomModeInfoHTC = 1000318002u, SystemAnchorPropertiesHTC = 1000319000u, SpatialAnchorCreateInfoHTC = 1000319001u, SystemBodyTrackingPropertiesHTC = 1000320000u, BodyTrackerCreateInfoHTC = 1000320001u, BodyJointsLocateInfoHTC = 1000320002u, BodyJointLocationsHTC = 1000320003u, BodySkeletonHTC = 1000320004u, ActiveActionSetPrioritiesEXT = 1000373000u, SystemForceFeedbackCurlPropertiesMNDX = 1000375000u, ForceFeedbackCurlApplyLocationsMNDX = 1000375001u, BodyTrackerCreateInfoBD = 1000385001u, BodyJointsLocateInfoBD = 1000385002u, BodyJointLocationsBD = 1000385003u, SystemBodyTrackingPropertiesBD = 1000385004u, SystemSpatialSensingPropertiesBD = 1000389000u, SpatialEntityComponentGetInfoBD = 1000389001u, SpatialEntityLocationGetInfoBD = 1000389002u, SpatialEntityComponentDataLocationBD = 1000389003u, SpatialEntityComponentDataSemanticBD = 1000389004u, SpatialEntityComponentDataBoundingBox2DBD = 1000389005u, SpatialEntityComponentDataPolygonBD = 1000389006u, SpatialEntityComponentDataBoundingBox3DBD = 1000389007u, SpatialEntityComponentDataTriangleMeshBD = 1000389008u, SenseDataProviderCreateInfoBD = 1000389009u, SenseDataProviderStartInfoBD = 1000389010u, EventDataSenseDataProviderStateChangedBD = 1000389011u, EventDataSenseDataUpdatedBD = 1000389012u, SenseDataQueryInfoBD = 1000389013u, SenseDataQueryCompletionBD = 1000389014u, SenseDataFilterUuidBD = 1000389015u, SenseDataFilterSemanticBD = 1000389016u, QueriedSenseDataGetInfoBD = 1000389017u, QueriedSenseDataBD = 1000389018u, SpatialEntityStateBD = 1000389019u, SpatialEntityAnchorCreateInfoBD = 1000389020u, AnchorSpaceCreateInfoBD = 1000389021u, SystemSpatialAnchorPropertiesBD = 1000390000u, SpatialAnchorCreateInfoBD = 1000390001u, SpatialAnchorCreateCompletionBD = 1000390002u, SpatialAnchorPersistInfoBD = 1000390003u, SpatialAnchorUnpersistInfoBD = 1000390004u, SystemSpatialAnchorSharingPropertiesBD = 1000391000u, SpatialAnchorShareInfoBD = 1000391001u, SharedSpatialAnchorDownloadInfoBD = 1000391002u, SystemSpatialScenePropertiesBD = 1000392000u, SceneCaptureInfoBD = 1000392001u, SystemSpatialMeshPropertiesBD = 1000393000u, SenseDataProviderCreateInfoSpatialMeshBD = 1000393001u, FuturePollResultProgressBD = 1000394001u, SystemSpatialPlanePropertiesBD = 1000396000u, SpatialEntityComponentDataPlaneOrientationBD = 1000396001u, SenseDataFilterPlaneOrientationBD = 1000396002u, HandTrackingDataSourceInfoEXT = 1000428000u, HandTrackingDataSourceStateEXT = 1000428001u, PlaneDetectorCreateInfoEXT = 1000429001u, PlaneDetectorBeginInfoEXT = 1000429002u, PlaneDetectorGetInfoEXT = 1000429003u, PlaneDetectorLocationsEXT = 1000429004u, PlaneDetectorLocationEXT = 1000429005u, PlaneDetectorPolygonBufferEXT = 1000429006u, SystemPlaneDetectionPropertiesEXT = 1000429007u, FutureCancelInfoEXT = 1000469000u, FuturePollInfoEXT = 1000469001u, FutureCompletionEXT = 1000469002u, FuturePollResultEXT = 1000469003u, EventDataUserPresenceChangedEXT = 1000470000u, SystemUserPresencePropertiesEXT = 1000470001u, SystemNotificationsSetInfoML = 1000473000u, WorldMeshDetectorCreateInfoML = 1000474001u, WorldMeshStateRequestInfoML = 1000474002u, WorldMeshBlockStateML = 1000474003u, WorldMeshStateRequestCompletionML = 1000474004u, WorldMeshBufferRecommendedSizeInfoML = 1000474005u, WorldMeshBufferSizeML = 1000474006u, WorldMeshBufferML = 1000474007u, WorldMeshBlockRequestML = 1000474008u, WorldMeshGetInfoML = 1000474009u, WorldMeshBlockML = 1000474010u, WorldMeshRequestCompletionML = 1000474011u, WorldMeshRequestCompletionInfoML = 1000474012u, SystemFacialExpressionPropertiesML = 1000482004u, FacialExpressionClientCreateInfoML = 1000482005u, FacialExpressionBlendShapeGetInfoML = 1000482006u, FacialExpressionBlendShapePropertiesML = 1000482007u, SystemSimultaneousHandsAndControllersPropertiesMETA = 1000532001u, SimultaneousHandsAndControllersTrackingResumeInfoMETA = 1000532002u, SimultaneousHandsAndControllersTrackingPauseInfoMETA = 1000532003u, ColocationDiscoveryStartInfoMETA = 1000571010u, ColocationDiscoveryStopInfoMETA = 1000571011u, ColocationAdvertisementStartInfoMETA = 1000571012u, ColocationAdvertisementStopInfoMETA = 1000571013u, EventDataStartColocationAdvertisementCompleteMETA = 1000571020u, EventDataStopColocationAdvertisementCompleteMETA = 1000571021u, EventDataColocationAdvertisementCompleteMETA = 1000571022u, EventDataStartColocationDiscoveryCompleteMETA = 1000571023u, EventDataColocationDiscoveryResultMETA = 1000571024u, EventDataColocationDiscoveryCompleteMETA = 1000571025u, EventDataStopColocationDiscoveryCompleteMETA = 1000571026u, SystemColocationDiscoveryPropertiesMETA = 1000571030u, ShareSpacesRecipientGroupsMETA = 1000572000u, SpaceGroupUuidFilterInfoMETA = 1000572001u, SystemSpatialEntityGroupSharingPropertiesMETA = 1000572100u, SpatialCapabilityComponentTypesEXT = 1000740000u, SpatialContextCreateInfoEXT = 1000740001u, CreateSpatialContextCompletionEXT = 1000740002u, SpatialDiscoverySnapshotCreateInfoEXT = 1000740003u, CreateSpatialDiscoverySnapshotCompletionInfoEXT = 1000740004u, CreateSpatialDiscoverySnapshotCompletionEXT = 1000740005u, SpatialComponentDataQueryConditionEXT = 1000740006u, SpatialComponentDataQueryResultEXT = 1000740007u, SpatialBufferGetInfoEXT = 1000740008u, SpatialComponentBounded2DListEXT = 1000740009u, SpatialComponentBounded3DListEXT = 1000740010u, SpatialComponentParentListEXT = 1000740011u, SpatialComponentMesh3DListEXT = 1000740012u, SpatialEntityFromIdCreateInfoEXT = 1000740013u, SpatialUpdateSnapshotCreateInfoEXT = 1000740014u, EventDataSpatialDiscoveryRecommendedEXT = 1000740015u, SpatialFilterTrackingStateEXT = 1000740016u, SpatialCapabilityConfigurationPlaneTrackingEXT = 1000741000u, SpatialComponentPlaneAlignmentListEXT = 1000741001u, SpatialComponentMesh2DListEXT = 1000741002u, SpatialComponentPolygon2DListEXT = 1000741003u, SpatialComponentPlaneSemanticLabelListEXT = 1000741004u, SpatialCapabilityConfigurationQrCodeEXT = 1000743000u, SpatialCapabilityConfigurationMicroQrCodeEXT = 1000743001u, SpatialCapabilityConfigurationArucoMarkerEXT = 1000743002u, SpatialCapabilityConfigurationAprilTagEXT = 1000743003u, SpatialMarkerSizeEXT = 1000743004u, SpatialMarkerStaticOptimizationEXT = 1000743005u, SpatialComponentMarkerListEXT = 1000743006u, SpatialCapabilityConfigurationAnchorEXT = 1000762000u, SpatialComponentAnchorListEXT = 1000762001u, SpatialAnchorCreateInfoEXT = 1000762002u, SpatialPersistenceContextCreateInfoEXT = 1000763000u, CreateSpatialPersistenceContextCompletionEXT = 1000763001u, SpatialContextPersistenceConfigEXT = 1000763002u, SpatialDiscoveryPersistenceUuidFilterEXT = 1000763003u, SpatialComponentPersistenceListEXT = 1000763004u, SpatialEntityPersistInfoEXT = 1000781000u, PersistSpatialEntityCompletionEXT = 1000781001u, SpatialEntityUnpersistInfoEXT = 1000781002u, UnpersistSpatialEntityCompletionEXT = 1000781003u, GraphicsBindingVulkan2KHR = 1000025000u, SwapchainImageVulkan2KHR = 1000025001u, GraphicsRequirementsVulkan2KHR = 1000025002u, DevicePcmSampleRateGetInfoFB = 1000209002u, SpacesLocateInfoKHR = 1000471000u, SpaceLocationsKHR = 1000471001u, SpaceVelocitiesKHR = 1000471002u } public struct XrSwapchainCreateInfo { public uint Type; public unsafe void* Next; public ulong CreateFlags; public ulong UsageFlags; public long Format; public uint SampleCount; public uint Width; public uint Height; public uint FaceCount; public uint ArraySize; public uint MipCount; } [Flags] public enum XrSwapchainUsageFlags : ulong { XR_SWAPCHAIN_USAGE_COLOR_ATTACHMENT_BIT = 1uL, XR_SWAPCHAIN_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT = 2uL, XR_SWAPCHAIN_USAGE_UNORDERED_ACCESS_BIT = 4uL, XR_SWAPCHAIN_USAGE_TRANSFER_SRC_BIT = 8uL, XR_SWAPCHAIN_USAGE_TRANSFER_DST_BIT = 0x10uL, XR_SWAPCHAIN_USAGE_SAMPLED_BIT = 0x20uL, XR_SWAPCHAIN_USAGE_MUTABLE_FORMAT_BIT = 0x40uL, XR_SWAPCHAIN_USAGE_INPUT_ATTACHMENT_BIT_MND = 0x80uL, XR_SWAPCHAIN_USAGE_INPUT_ATTACHMENT_BIT_KHR = 0x80uL } public struct XrVector2f : IEquatable { public float X; public float Y; public XrVector2f(float x, float y) { X = x; Y = y; } public XrVector2f(Vector2 value) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) X = value.x; Y = value.y; } public Vector2 AsVector2() { //IL_000c: Unknown result type (might be due to invalid IL or missing references) return new Vector2(X, Y); } public bool Equals(XrVector2f other) { if (X.Equals(other.X)) { return Y.Equals(other.Y); } return false; } public override bool Equals(object obj) { if (obj is XrVector2f other) { return Equals(other); } return false; } public override int GetHashCode() { return HashCode.Combine(X, Y); } } public struct XrVector3f : IEquatable { public float X; public float Y; public float Z; public XrVector3f(float x, float y, float z) { X = x; Y = y; Z = 0f - z; } public XrVector3f(Vector3 value) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) X = value.x; Y = value.y; Z = 0f - value.z; } public static XrVector3f FromSessionSpaceCoordinates(float x, float y, float z) { return new XrVector3f { X = x, Y = y, Z = z }; } public static XrVector3f FromSessionSpaceCoordinates(Vector3 position) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) return new XrVector3f { X = position.x, Y = position.y, Z = position.z }; } public Vector3 AsVector3() { //IL_0013: Unknown result type (might be due to invalid IL or missing references) return new Vector3(X, Y, 0f - Z); } public Vector3 ToSessionSpaceVector3() { //IL_0012: Unknown result type (might be due to invalid IL or missing references) return new Vector3(X, Y, Z); } public bool Equals(XrVector3f other) { if (X.Equals(other.X) && Y.Equals(other.Y)) { return Z.Equals(other.Z); } return false; } public override bool Equals(object obj) { if (obj is XrVector3f other) { return Equals(other); } return false; } public override int GetHashCode() { return HashCode.Combine(X, Y, Z); } } public enum XrViewConfigurationType { PrimaryMono = 1, PrimaryStereo = 2, PrimaryQuadVarjo = 1000037000, SecondaryMonoFirstPersonObserver = 1000054000, SecondaryMonoThirdPersonObserver = 1000145000 } [Flags] public enum XrViewStateFlags { None = 0, OrientationValid = 1, PositionValid = 2, OrientationTracked = 4, PositionTracked = 8 } public readonly struct OpenXRResultStatus : IEquatable, IComparable, IEquatable { public enum StatusCode { PlatformQualifiedSuccess = 1, UnqualifiedSuccess = 0, PlatformError = -1, UnknownError = -2, ProviderUninitialized = -3, ProviderNotStarted = -4, ValidationFailure = -5, Unsupported = -6 } public static OpenXRResultStatus unqualifiedSuccess => new OpenXRResultStatus(StatusCode.UnqualifiedSuccess, XrResult.Success); public StatusCode statusCode { get; } public XrResult nativeStatusCode { get; } public OpenXRResultStatus(StatusCode statusCode) { if (statusCode == StatusCode.PlatformError || statusCode == StatusCode.PlatformQualifiedSuccess) { throw new ArgumentException($"Status code {statusCode} requires a corresponding nativeStatusCode. Use a different constructor.", "statusCode"); } this.statusCode = statusCode; nativeStatusCode = XrResult.Success; } public OpenXRResultStatus(XrResult nativeStatusCode) { this.nativeStatusCode = nativeStatusCode; StatusCode statusCode = ((nativeStatusCode > XrResult.Success) ? StatusCode.PlatformQualifiedSuccess : ((nativeStatusCode != XrResult.Success) ? StatusCode.PlatformError : StatusCode.UnqualifiedSuccess)); this.statusCode = statusCode; } public OpenXRResultStatus(StatusCode statusCode, XrResult nativeStatusCode) { this.statusCode = statusCode; this.nativeStatusCode = nativeStatusCode; } public bool IsUnqualifiedSuccess() { return statusCode == StatusCode.UnqualifiedSuccess; } public bool IsSuccess() { return statusCode >= StatusCode.UnqualifiedSuccess; } public bool IsError() { return statusCode < StatusCode.UnqualifiedSuccess; } public static implicit operator bool(OpenXRResultStatus status) { return status.IsSuccess(); } public bool Equals(OpenXRResultStatus other) { if (statusCode == other.statusCode) { return nativeStatusCode == other.nativeStatusCode; } return false; } public bool Equals(XrResult other) { if (other != nativeStatusCode) { return false; } if (other <= XrResult.Success) { if (other == XrResult.Success) { return statusCode == StatusCode.UnqualifiedSuccess; } return statusCode == StatusCode.PlatformError; } return statusCode == StatusCode.PlatformQualifiedSuccess; } public int CompareTo(OpenXRResultStatus other) { int num = nativeStatusCode.CompareTo(other.nativeStatusCode); if (num != 0) { return num; } return statusCode.CompareTo(other.statusCode); } public override string ToString() { StatusCode statusCode = this.statusCode; if (statusCode != StatusCode.PlatformQualifiedSuccess && statusCode != StatusCode.PlatformError) { return $"({this.statusCode})"; } return $"({this.statusCode}, {nativeStatusCode})"; } } public enum XrFutureStateEXT { Pending = 1, Ready } public static class OpenXRNativeApi { public static XrResult xrPollFutureEXT(ulong instance, in XrFuturePollInfoEXT pollInfo, out XrFuturePollResultEXT pollResult) { pollResult = XrFuturePollResultEXT.defaultValue; return xrPollFutureEXT_native(instance, in pollInfo, ref pollResult); } [DllImport("UnityOpenXR", EntryPoint = "EXT_future_xrPollFutureEXT")] private static extern XrResult xrPollFutureEXT_native(ulong instance, in XrFuturePollInfoEXT pollInfo, ref XrFuturePollResultEXT pollResult); public static OpenXRResultStatus xrPollFutureEXT(in XrFuturePollInfoEXT pollInfo, out XrFuturePollResultEXT pollResult) { pollResult = XrFuturePollResultEXT.defaultValue; return xrPollFutureEXT_usingContext_native(in pollInfo, ref pollResult); } [DllImport("UnityOpenXR", EntryPoint = "EXT_future_xrPollFutureEXT_usingContext")] private static extern OpenXRResultStatus xrPollFutureEXT_usingContext_native(in XrFuturePollInfoEXT pollInfo, ref XrFuturePollResultEXT pollResult); public static OpenXRResultStatus xrPollFutureEXT(ulong future, out XrFuturePollResultEXT pollResult) { XrFuturePollInfoEXT pollInfo = new XrFuturePollInfoEXT(future); pollResult = XrFuturePollResultEXT.defaultValue; return xrPollFutureEXT_usingContext_native(in pollInfo, ref pollResult); } [DllImport("UnityOpenXR", EntryPoint = "EXT_future_xrCancelFutureEXT")] public static extern XrResult xrCancelFutureEXT(ulong instance, in XrFutureCancelInfoEXT cancelInfo); [DllImport("UnityOpenXR", EntryPoint = "EXT_future_xrCancelFutureEXT_usingContext")] public static extern OpenXRResultStatus xrCancelFutureEXT(in XrFutureCancelInfoEXT cancelInfo); public static OpenXRResultStatus xrCancelFutureEXT(ulong future) { return xrCancelFutureEXT(new XrFutureCancelInfoEXT(future)); } [DllImport("UnityOpenXR", EntryPoint = "EXT_spatial_anchor_xrCreateSpatialAnchorEXT")] public static extern XrResult xrCreateSpatialAnchorEXT(ulong spatialContext, in XrSpatialAnchorCreateInfoEXT createInfo, out ulong anchorEntityId, out ulong anchorEntity); [DllImport("UnityOpenXR", EntryPoint = "EXT_spatial_anchor_xrCreateSpatialAnchorEXT_usingContext")] public static extern OpenXRResultStatus xrCreateSpatialAnchorEXT(ulong spatialContext, in XrPosef pose, out ulong anchorEntityId, out ulong anchorEntity); public static OpenXRResultStatus xrCreateSpatialAnchorEXT(ulong spatialContext, Vector3 position, Quaternion rotation, out ulong anchorEntityId, out ulong anchorEntity) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) return xrCreateSpatialAnchorEXT(spatialContext, new XrPosef(position, rotation), out anchorEntityId, out anchorEntity); } [DllImport("UnityOpenXR", EntryPoint = "EXT_spatial_entity_xrEnumerateSpatialCapabilitiesEXT")] public unsafe static extern XrResult xrEnumerateSpatialCapabilitiesEXT(ulong instance, ulong systemId, uint capabilityCountInput, out uint capabilityCountOutput, XrSpatialCapabilityEXT* capabilities); public unsafe static XrResult xrEnumerateSpatialCapabilitiesEXT(ulong instance, ulong systemId, Allocator allocator, out NativeArray capabilities) { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) uint capabilityCountOutput; XrResult xrResult = xrEnumerateSpatialCapabilitiesEXT(instance, systemId, 0u, out capabilityCountOutput, null); if (xrResult.IsError()) { capabilities = default(NativeArray); return xrResult; } capabilities = new NativeArray(checked((int)capabilityCountOutput), allocator, (NativeArrayOptions)1); uint capabilityCountOutput2; return xrEnumerateSpatialCapabilitiesEXT(instance, systemId, capabilityCountOutput, out capabilityCountOutput2, (XrSpatialCapabilityEXT*)NativeArrayUnsafeUtility.GetUnsafePtr(capabilities)); } [DllImport("UnityOpenXR", EntryPoint = "EXT_spatial_entity_xrEnumerateSpatialCapabilitiesEXT_usingContext")] public unsafe static extern OpenXRResultStatus xrEnumerateSpatialCapabilitiesEXT(uint capabilityCountInput, out uint capabilityCountOutput, XrSpatialCapabilityEXT* capabilities); public unsafe static OpenXRResultStatus xrEnumerateSpatialCapabilitiesEXT(Allocator allocator, out NativeArray capabilities) { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) uint capabilityCountOutput; OpenXRResultStatus result = xrEnumerateSpatialCapabilitiesEXT(0u, out capabilityCountOutput, null); if (result.IsError()) { capabilities = default(NativeArray); return result; } capabilities = new NativeArray(checked((int)capabilityCountOutput), allocator, (NativeArrayOptions)1); uint capabilityCountOutput2; return xrEnumerateSpatialCapabilitiesEXT(capabilityCountOutput, out capabilityCountOutput2, (XrSpatialCapabilityEXT*)NativeArrayUnsafeUtility.GetUnsafePtr(capabilities)); } [DllImport("UnityOpenXR", EntryPoint = "EXT_spatial_entity_xrEnumerateSpatialCapabilityComponentTypesEXT")] public static extern XrResult xrEnumerateSpatialCapabilityComponentTypesEXT(ulong instance, ulong systemId, XrSpatialCapabilityEXT capability, ref XrSpatialCapabilityComponentTypesEXT capabilityComponents); public unsafe static XrResult xrEnumerateSpatialCapabilityComponentTypesEXT(ulong instance, ulong systemId, XrSpatialCapabilityEXT capability, Allocator allocator, out NativeArray componentTypes) { //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) XrSpatialCapabilityComponentTypesEXT capabilityComponents = XrSpatialCapabilityComponentTypesEXT.defaultValue; XrResult xrResult = xrEnumerateSpatialCapabilityComponentTypesEXT(instance, systemId, capability, ref capabilityComponents); if (xrResult.IsError()) { componentTypes = default(NativeArray); return xrResult; } capabilityComponents.componentTypeCapacityInput = capabilityComponents.componentTypeCountOutput; componentTypes = new NativeArray(checked((int)capabilityComponents.componentTypeCountOutput), allocator, (NativeArrayOptions)1); capabilityComponents.componentTypes = (XrSpatialComponentTypeEXT*)NativeArrayUnsafeUtility.GetUnsafePtr(componentTypes); return xrEnumerateSpatialCapabilityComponentTypesEXT(instance, systemId, capability, ref capabilityComponents); } [DllImport("UnityOpenXR", EntryPoint = "EXT_spatial_entity_xrEnumerateSpatialCapabilityComponentTypesEXT_usingContext")] public static extern OpenXRResultStatus xrEnumerateSpatialCapabilityComponentTypesEXT(XrSpatialCapabilityEXT capability, ref XrSpatialCapabilityComponentTypesEXT capabilityComponents); public unsafe static OpenXRResultStatus xrEnumerateSpatialCapabilityComponentTypesEXT(XrSpatialCapabilityEXT capability, Allocator allocator, out NativeArray componentTypes) { //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) XrSpatialCapabilityComponentTypesEXT capabilityComponents = XrSpatialCapabilityComponentTypesEXT.defaultValue; OpenXRResultStatus result = xrEnumerateSpatialCapabilityComponentTypesEXT(capability, ref capabilityComponents); if (result.IsError()) { componentTypes = default(NativeArray); return result; } capabilityComponents.componentTypeCapacityInput = capabilityComponents.componentTypeCountOutput; componentTypes = new NativeArray(checked((int)capabilityComponents.componentTypeCountOutput), allocator, (NativeArrayOptions)1); capabilityComponents.componentTypes = (XrSpatialComponentTypeEXT*)NativeArrayUnsafeUtility.GetUnsafePtr(componentTypes); return xrEnumerateSpatialCapabilityComponentTypesEXT(capability, ref capabilityComponents); } [DllImport("UnityOpenXR", EntryPoint = "EXT_spatial_entity_xrEnumerateSpatialCapabilityFeaturesEXT")] public unsafe static extern XrResult xrEnumerateSpatialCapabilityFeaturesEXT(ulong instance, ulong systemId, XrSpatialCapabilityEXT capability, uint capabilityFeatureCapacityInput, out uint capabilityFeatureCountOutput, XrSpatialCapabilityFeatureEXT* capabilityFeatures); public unsafe static XrResult xrEnumerateSpatialCapabilityFeaturesEXT(ulong instance, ulong systemId, XrSpatialCapabilityEXT capability, Allocator allocator, out NativeArray capabilityFeatures) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) uint capabilityFeatureCountOutput; XrResult xrResult = xrEnumerateSpatialCapabilityFeaturesEXT(instance, systemId, capability, 0u, out capabilityFeatureCountOutput, null); if (xrResult.IsError()) { capabilityFeatures = default(NativeArray); return xrResult; } capabilityFeatures = new NativeArray(checked((int)capabilityFeatureCountOutput), allocator, (NativeArrayOptions)1); uint capabilityFeatureCountOutput2; return xrEnumerateSpatialCapabilityFeaturesEXT(instance, systemId, capability, capabilityFeatureCountOutput, out capabilityFeatureCountOutput2, (XrSpatialCapabilityFeatureEXT*)NativeArrayUnsafeUtility.GetUnsafePtr(capabilityFeatures)); } [DllImport("UnityOpenXR", EntryPoint = "EXT_spatial_entity_xrEnumerateSpatialCapabilityFeaturesEXT_usingContext")] public unsafe static extern OpenXRResultStatus xrEnumerateSpatialCapabilityFeaturesEXT(XrSpatialCapabilityEXT capability, uint capabilityFeatureCapacityInput, out uint capabilityFeatureCountOutput, XrSpatialCapabilityFeatureEXT* capabilityFeatures); public unsafe static OpenXRResultStatus xrEnumerateSpatialCapabilityFeaturesEXT(XrSpatialCapabilityEXT capability, Allocator allocator, out NativeArray capabilityFeatures) { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) uint capabilityFeatureCountOutput; OpenXRResultStatus result = xrEnumerateSpatialCapabilityFeaturesEXT(capability, 0u, out capabilityFeatureCountOutput, null); if (result.IsError()) { capabilityFeatures = default(NativeArray); return result; } capabilityFeatures = new NativeArray(checked((int)capabilityFeatureCountOutput), allocator, (NativeArrayOptions)1); uint capabilityFeatureCountOutput2; return xrEnumerateSpatialCapabilityFeaturesEXT(capability, capabilityFeatureCountOutput, out capabilityFeatureCountOutput2, (XrSpatialCapabilityFeatureEXT*)NativeArrayUnsafeUtility.GetUnsafePtr(capabilityFeatures)); } [DllImport("UnityOpenXR", EntryPoint = "EXT_spatial_entity_xrCreateSpatialContextAsyncEXT")] public static extern XrResult xrCreateSpatialContextAsyncEXT(ulong session, in XrSpatialContextCreateInfoEXT createInfo, out ulong future); [DllImport("UnityOpenXR", EntryPoint = "EXT_spatial_entity_xrCreateSpatialContextAsyncEXT_usingContext")] public static extern OpenXRResultStatus xrCreateSpatialContextAsyncEXT(in XrSpatialContextCreateInfoEXT createInfo, out ulong future); public static XrResult xrCreateSpatialContextCompleteEXT(ulong session, ulong future, out XrCreateSpatialContextCompletionEXT completion) { completion = XrCreateSpatialContextCompletionEXT.defaultValue; return xrCreateSpatialContextCompleteEXT_native(session, future, ref completion); } [DllImport("UnityOpenXR", EntryPoint = "EXT_spatial_entity_xrCreateSpatialContextCompleteEXT")] private static extern XrResult xrCreateSpatialContextCompleteEXT_native(ulong session, ulong future, ref XrCreateSpatialContextCompletionEXT completion); public static OpenXRResultStatus xrCreateSpatialContextCompleteEXT(ulong future, out XrCreateSpatialContextCompletionEXT completion) { completion = XrCreateSpatialContextCompletionEXT.defaultValue; return xrCreateSpatialContextCompleteEXT_usingContext(future, ref completion); } [DllImport("UnityOpenXR", EntryPoint = "EXT_spatial_entity_xrCreateSpatialContextCompleteEXT_usingContext")] private static extern OpenXRResultStatus xrCreateSpatialContextCompleteEXT_usingContext(ulong future, ref XrCreateSpatialContextCompletionEXT completion); [DllImport("UnityOpenXR", EntryPoint = "EXT_spatial_entity_xrDestroySpatialContextEXT")] public static extern XrResult xrDestroySpatialContextEXT(ulong spatialContext); [DllImport("UnityOpenXR", EntryPoint = "EXT_spatial_entity_xrCreateSpatialEntityFromIdEXT")] public static extern XrResult xrCreateSpatialEntityFromIdEXT(ulong spatialContext, in XrSpatialEntityFromIdCreateInfoEXT createInfo, out ulong spatialEntity); [DllImport("UnityOpenXR", EntryPoint = "EXT_spatial_entity_xrDestroySpatialEntityEXT")] public static extern XrResult xrDestroySpatialEntityEXT(ulong spatialEntity); [DllImport("UnityOpenXR", EntryPoint = "EXT_spatial_entity_xrCreateSpatialDiscoverySnapshotAsyncEXT")] public static extern XrResult xrCreateSpatialDiscoverySnapshotAsyncEXT(ulong spatialContext, in XrSpatialDiscoverySnapshotCreateInfoEXT createInfo, out ulong future); public static XrResult xrCreateSpatialDiscoverySnapshotCompleteEXT(ulong spatialContext, in XrCreateSpatialDiscoverySnapshotCompletionInfoEXT createSnapshotCompletionInfo, out XrCreateSpatialDiscoverySnapshotCompletionEXT completion) { completion = XrCreateSpatialDiscoverySnapshotCompletionEXT.defaultValue; return xrCreateSpatialDiscoverySnapshotCompleteEXT_native(spatialContext, in createSnapshotCompletionInfo, ref completion); } [DllImport("UnityOpenXR", EntryPoint = "EXT_spatial_entity_xrCreateSpatialDiscoverySnapshotCompleteEXT")] private static extern XrResult xrCreateSpatialDiscoverySnapshotCompleteEXT_native(ulong spatialContext, in XrCreateSpatialDiscoverySnapshotCompletionInfoEXT createSnapshotCompletionInfo, ref XrCreateSpatialDiscoverySnapshotCompletionEXT completion); public static OpenXRResultStatus xrCreateSpatialDiscoverySnapshotCompleteEXT(ulong spatialContext, ulong future, out XrCreateSpatialDiscoverySnapshotCompletionEXT completion) { completion = XrCreateSpatialDiscoverySnapshotCompletionEXT.defaultValue; return xrCreateSpatialDiscoverySnapshotCompleteEXT_usingContext(spatialContext, future, ref completion); } [DllImport("UnityOpenXR", EntryPoint = "EXT_spatial_entity_xrCreateSpatialDiscoverySnapshotCompleteEXT_usingContext")] private static extern OpenXRResultStatus xrCreateSpatialDiscoverySnapshotCompleteEXT_usingContext(ulong spatialContext, ulong future, ref XrCreateSpatialDiscoverySnapshotCompletionEXT completion); [DllImport("UnityOpenXR", EntryPoint = "EXT_spatial_entity_xrQuerySpatialComponentDataEXT")] public static extern XrResult xrQuerySpatialComponentDataEXT(ulong snapshot, in XrSpatialComponentDataQueryConditionEXT queryCondition, ref XrSpatialComponentDataQueryResultEXT queryResult); [DllImport("UnityOpenXR", EntryPoint = "EXT_spatial_entity_xrGetSpatialBufferStringEXT")] public unsafe static extern XrResult xrGetSpatialBufferStringEXT(ulong snapshot, in XrSpatialBufferGetInfoEXT info, uint bufferCapacityInput, out uint bufferCountOutput, byte* buffer); public unsafe static XrResult xrGetSpatialBufferStringEXT(ulong snapshot, in XrSpatialBufferGetInfoEXT info, Allocator allocator, out NativeArray buffer) { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) uint bufferCountOutput; XrResult xrResult = xrGetSpatialBufferStringEXT(snapshot, in info, 0u, out bufferCountOutput, null); if (xrResult.IsError()) { buffer = default(NativeArray); return xrResult; } buffer = new NativeArray(checked((int)bufferCountOutput), allocator, (NativeArrayOptions)1); uint bufferCountOutput2; return xrGetSpatialBufferStringEXT(snapshot, in info, bufferCountOutput, out bufferCountOutput2, (byte*)NativeArrayUnsafeUtility.GetUnsafePtr(buffer)); } [DllImport("UnityOpenXR", EntryPoint = "EXT_spatial_entity_xrGetSpatialBufferUint8EXT")] public unsafe static extern XrResult xrGetSpatialBufferUint8EXT(ulong snapshot, in XrSpatialBufferGetInfoEXT info, uint bufferCapacityInput, out uint bufferCountOutput, byte* buffer); public unsafe static XrResult xrGetSpatialBufferUint8EXT(ulong snapshot, in XrSpatialBufferGetInfoEXT info, Allocator allocator, out NativeArray buffer) { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) uint bufferCountOutput; XrResult xrResult = xrGetSpatialBufferUint8EXT(snapshot, in info, 0u, out bufferCountOutput, null); if (xrResult.IsError()) { buffer = default(NativeArray); return xrResult; } buffer = new NativeArray(checked((int)bufferCountOutput), allocator, (NativeArrayOptions)1); uint bufferCountOutput2; return xrGetSpatialBufferUint8EXT(snapshot, in info, bufferCountOutput, out bufferCountOutput2, (byte*)NativeArrayUnsafeUtility.GetUnsafePtr(buffer)); } [DllImport("UnityOpenXR", EntryPoint = "EXT_spatial_entity_xrGetSpatialBufferUint16EXT")] public unsafe static extern XrResult xrGetSpatialBufferUint16EXT(ulong snapshot, in XrSpatialBufferGetInfoEXT info, uint bufferCapacityInput, out uint bufferCountOutput, ushort* buffer); public unsafe static XrResult xrGetSpatialBufferUint16EXT(ulong snapshot, in XrSpatialBufferGetInfoEXT info, Allocator allocator, out NativeArray buffer) { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) uint bufferCountOutput; XrResult xrResult = xrGetSpatialBufferUint16EXT(snapshot, in info, 0u, out bufferCountOutput, null); if (xrResult.IsError()) { buffer = default(NativeArray); return xrResult; } buffer = new NativeArray(checked((int)bufferCountOutput), allocator, (NativeArrayOptions)1); uint bufferCountOutput2; return xrGetSpatialBufferUint16EXT(snapshot, in info, bufferCountOutput, out bufferCountOutput2, (ushort*)NativeArrayUnsafeUtility.GetUnsafePtr(buffer)); } [DllImport("UnityOpenXR", EntryPoint = "EXT_spatial_entity_xrGetSpatialBufferUint32EXT")] public unsafe static extern XrResult xrGetSpatialBufferUint32EXT(ulong snapshot, in XrSpatialBufferGetInfoEXT info, uint bufferCapacityInput, out uint bufferCountOutput, uint* buffer); public unsafe static XrResult xrGetSpatialBufferUint32EXT(ulong snapshot, in XrSpatialBufferGetInfoEXT info, Allocator allocator, out NativeArray buffer) { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) uint bufferCountOutput; XrResult xrResult = xrGetSpatialBufferUint32EXT(snapshot, in info, 0u, out bufferCountOutput, null); if (xrResult.IsError()) { buffer = default(NativeArray); return xrResult; } buffer = new NativeArray(checked((int)bufferCountOutput), allocator, (NativeArrayOptions)1); uint bufferCountOutput2; return xrGetSpatialBufferUint32EXT(snapshot, in info, bufferCountOutput, out bufferCountOutput2, (uint*)NativeArrayUnsafeUtility.GetUnsafePtr(buffer)); } [DllImport("UnityOpenXR", EntryPoint = "EXT_spatial_entity_xrGetSpatialBufferFloatEXT")] public unsafe static extern XrResult xrGetSpatialBufferFloatEXT(ulong snapshot, in XrSpatialBufferGetInfoEXT info, uint bufferCapacityInput, out uint bufferCountOutput, float* buffer); public unsafe static XrResult xrGetSpatialBufferFloatEXT(ulong snapshot, in XrSpatialBufferGetInfoEXT info, Allocator allocator, out NativeArray buffer) { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) uint bufferCountOutput; XrResult xrResult = xrGetSpatialBufferFloatEXT(snapshot, in info, 0u, out bufferCountOutput, null); if (xrResult.IsError()) { buffer = default(NativeArray); return xrResult; } buffer = new NativeArray(checked((int)bufferCountOutput), allocator, (NativeArrayOptions)1); uint bufferCountOutput2; return xrGetSpatialBufferFloatEXT(snapshot, in info, bufferCountOutput, out bufferCountOutput2, (float*)NativeArrayUnsafeUtility.GetUnsafePtr(buffer)); } [DllImport("UnityOpenXR", EntryPoint = "EXT_spatial_entity_xrGetSpatialBufferVector2fEXT")] public unsafe static extern XrResult xrGetSpatialBufferVector2fEXT(ulong snapshot, in XrSpatialBufferGetInfoEXT info, uint bufferCapacityInput, out uint bufferCountOutput, XrVector2f* buffer); public unsafe static XrResult xrGetSpatialBufferVector2fEXT(ulong snapshot, in XrSpatialBufferGetInfoEXT info, Allocator allocator, out NativeArray buffer) { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) uint bufferCountOutput; XrResult xrResult = xrGetSpatialBufferVector2fEXT(snapshot, in info, 0u, out bufferCountOutput, null); if (xrResult.IsError()) { buffer = default(NativeArray); return xrResult; } buffer = new NativeArray(checked((int)bufferCountOutput), allocator, (NativeArrayOptions)1); uint bufferCountOutput2; return xrGetSpatialBufferVector2fEXT(snapshot, in info, bufferCountOutput, out bufferCountOutput2, (XrVector2f*)NativeArrayUnsafeUtility.GetUnsafePtr(buffer)); } [DllImport("UnityOpenXR", EntryPoint = "EXT_spatial_entity_xrGetSpatialBufferVector3fEXT")] public unsafe static extern XrResult xrGetSpatialBufferVector3fEXT(ulong snapshot, in XrSpatialBufferGetInfoEXT info, uint bufferCapacityInput, out uint bufferCountOutput, XrVector3f* buffer); public unsafe static XrResult xrGetSpatialBufferVector3fEXT(ulong snapshot, in XrSpatialBufferGetInfoEXT info, Allocator allocator, out NativeArray buffer) { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) uint bufferCountOutput; XrResult xrResult = xrGetSpatialBufferVector3fEXT(snapshot, in info, 0u, out bufferCountOutput, null); if (xrResult.IsError()) { buffer = default(NativeArray); return xrResult; } buffer = new NativeArray(checked((int)bufferCountOutput), allocator, (NativeArrayOptions)1); uint bufferCountOutput2; return xrGetSpatialBufferVector3fEXT(snapshot, in info, bufferCountOutput, out bufferCountOutput2, (XrVector3f*)NativeArrayUnsafeUtility.GetUnsafePtr(buffer)); } [DllImport("UnityOpenXR", EntryPoint = "EXT_spatial_entity_xrCreateSpatialUpdateSnapshotEXT")] public static extern XrResult xrCreateSpatialUpdateSnapshotEXT(ulong spatialContext, in XrSpatialUpdateSnapshotCreateInfoEXT createInfo, out ulong snapshot); [DllImport("UnityOpenXR", EntryPoint = "EXT_spatial_entity_xrCreateSpatialUpdateSnapshotEXT_usingContext")] public unsafe static extern OpenXRResultStatus xrCreateSpatialUpdateSnapshotEXT(ulong spatialContext, uint entityCount, ulong* entities, uint componentTypeCount, XrSpatialComponentTypeEXT* componentTypes, out ulong snapshot); public unsafe static OpenXRResultStatus xrCreateSpatialUpdateSnapshotEXT(ulong spatialContext, NativeArray entities, NativeArray componentTypes, out ulong snapshot) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) return xrCreateSpatialUpdateSnapshotEXT(spatialContext, (uint)entities.Length, (ulong*)NativeArrayUnsafeUtility.GetUnsafePtr(entities), (uint)componentTypes.Length, (XrSpatialComponentTypeEXT*)NativeArrayUnsafeUtility.GetUnsafePtr(componentTypes), out snapshot); } [DllImport("UnityOpenXR", EntryPoint = "EXT_spatial_entity_xrDestroySpatialSnapshotEXT")] public static extern XrResult xrDestroySpatialSnapshotEXT(ulong snapshot); [DllImport("UnityOpenXR", EntryPoint = "EXT_spatial_persistence_xrCreateSpatialPersistenceContextAsyncEXT")] public static extern XrResult xrCreateSpatialPersistenceContextAsyncEXT(ulong session, in XrSpatialPersistenceContextCreateInfoEXT createInfo, out ulong future); [DllImport("UnityOpenXR", EntryPoint = "EXT_spatial_persistence_xrCreateSpatialPersistenceContextAsyncEXT_usingContext")] public static extern OpenXRResultStatus xrCreateSpatialPersistenceContextAsyncEXT(in XrSpatialPersistenceContextCreateInfoEXT createInfo, out ulong future); [DllImport("UnityOpenXR", EntryPoint = "EXT_spatial_persistence_xrEnumerateSpatialPersistenceScopesEXT")] public unsafe static extern XrResult xrEnumerateSpatialPersistenceScopesEXT(ulong instance, ulong systemId, uint persistenceScopeCapacityInput, out uint persistenceScopeCountOutput, XrSpatialPersistenceScopeEXT* persistenceScopes); public unsafe static XrResult xrEnumerateSpatialPersistenceScopesEXT(ulong instance, ulong systemId, Allocator allocator, out NativeArray persistenceScopes) { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) uint persistenceScopeCountOutput; XrResult xrResult = xrEnumerateSpatialPersistenceScopesEXT(instance, systemId, 0u, out persistenceScopeCountOutput, null); if (xrResult.IsError()) { persistenceScopes = default(NativeArray); return xrResult; } persistenceScopes = new NativeArray(checked((int)persistenceScopeCountOutput), allocator, (NativeArrayOptions)1); uint persistenceScopeCountOutput2; return xrEnumerateSpatialPersistenceScopesEXT(instance, systemId, persistenceScopeCountOutput, out persistenceScopeCountOutput2, (XrSpatialPersistenceScopeEXT*)NativeArrayUnsafeUtility.GetUnsafePtr(persistenceScopes)); } [DllImport("UnityOpenXR", EntryPoint = "EXT_spatial_persistence_xrEnumerateSpatialPersistenceScopesEXT_usingContext")] public unsafe static extern OpenXRResultStatus xrEnumerateSpatialPersistenceScopesEXT(uint persistenceScopeCapacityInput, out uint persistenceScopeCountOutput, XrSpatialPersistenceScopeEXT* persistenceScopes); public unsafe static OpenXRResultStatus xrEnumerateSpatialPersistenceScopesEXT(Allocator allocator, out NativeArray persistenceScopes) { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) uint persistenceScopeCountOutput; OpenXRResultStatus result = xrEnumerateSpatialPersistenceScopesEXT(0u, out persistenceScopeCountOutput, null); if (result.IsError()) { persistenceScopes = default(NativeArray); return result; } persistenceScopes = new NativeArray(checked((int)persistenceScopeCountOutput), allocator, (NativeArrayOptions)1); uint persistenceScopeCountOutput2; return xrEnumerateSpatialPersistenceScopesEXT(persistenceScopeCountOutput, out persistenceScopeCountOutput2, (XrSpatialPersistenceScopeEXT*)NativeArrayUnsafeUtility.GetUnsafePtr(persistenceScopes)); } public static XrResult xrCreateSpatialPersistenceContextCompleteEXT(ulong session, ulong future, out XrCreateSpatialPersistenceContextCompletionEXT completion) { completion = XrCreateSpatialPersistenceContextCompletionEXT.defaultValue; return xrCreateSpatialPersistenceContextCompleteEXT_native(session, future, ref completion); } [DllImport("UnityOpenXR", EntryPoint = "EXT_spatial_persistence_xrCreateSpatialPersistenceContextCompleteEXT")] private static extern XrResult xrCreateSpatialPersistenceContextCompleteEXT_native(ulong session, ulong future, ref XrCreateSpatialPersistenceContextCompletionEXT completion); public static OpenXRResultStatus xrCreateSpatialPersistenceContextCompleteEXT(ulong future, out XrCreateSpatialPersistenceContextCompletionEXT completion) { completion = XrCreateSpatialPersistenceContextCompletionEXT.defaultValue; return xrCreateSpatialPersistenceContextCompleteEXT_usingContext(future, ref completion); } [DllImport("UnityOpenXR", EntryPoint = "EXT_spatial_persistence_xrCreateSpatialPersistenceContextCompleteEXT_usingContext")] private static extern OpenXRResultStatus xrCreateSpatialPersistenceContextCompleteEXT_usingContext(ulong future, ref XrCreateSpatialPersistenceContextCompletionEXT completion); [DllImport("UnityOpenXR", EntryPoint = "EXT_spatial_persistence_xrDestroySpatialPersistenceContextEXT")] public static extern XrResult xrDestroySpatialPersistenceContextEXT(ulong persistenceContext); [DllImport("UnityOpenXR", EntryPoint = "EXT_spatial_persistence_operations_xrPersistSpatialEntityAsyncEXT")] public static extern XrResult xrPersistSpatialEntityAsyncEXT(ulong persistenceContext, in XrSpatialEntityPersistInfoEXT persistInfo, out ulong future); public static XrResult xrPersistSpatialEntityCompleteEXT(ulong persistenceContext, ulong future, out XrPersistSpatialEntityCompletionEXT completion) { completion = XrPersistSpatialEntityCompletionEXT.defaultValue; return xrPersistSpatialEntityCompleteEXT_native(persistenceContext, future, ref completion); } [DllImport("UnityOpenXR", EntryPoint = "EXT_spatial_persistence_operations_xrPersistSpatialEntityCompleteEXT")] private static extern XrResult xrPersistSpatialEntityCompleteEXT_native(ulong persistenceContext, ulong future, ref XrPersistSpatialEntityCompletionEXT completion); [DllImport("UnityOpenXR", EntryPoint = "EXT_spatial_persistence_operations_xrUnpersistSpatialEntityAsyncEXT")] public static extern XrResult xrUnpersistSpatialEntityAsyncEXT(ulong persistenceContext, in XrSpatialEntityUnpersistInfoEXT unpersistInfo, out ulong future); public static XrResult xrUnpersistSpatialEntityCompleteEXT(ulong persistenceContext, ulong future, out XrUnpersistSpatialEntityCompletionEXT completion) { completion = XrUnpersistSpatialEntityCompletionEXT.defaultValue; return xrUnpersistSpatialEntityCompleteEXT_native(persistenceContext, future, ref completion); } [DllImport("UnityOpenXR", EntryPoint = "EXT_spatial_persistence_operations_xrUnpersistSpatialEntityCompleteEXT")] private static extern XrResult xrUnpersistSpatialEntityCompleteEXT_native(ulong persistenceContext, ulong future, ref XrUnpersistSpatialEntityCompletionEXT completion); } public readonly struct XrFutureCancelInfoEXT { public XrStructureType type { get; } public unsafe void* next { get; } public ulong future { get; } public unsafe XrFutureCancelInfoEXT(void* next, ulong future) { type = XrStructureType.FutureCancelInfoEXT; this.next = next; this.future = future; } public XrFutureCancelInfoEXT(ulong future) : this(null, future) { } } public readonly struct XrFutureCompletionBaseHeaderEXT { public XrStructureType type { get; } public unsafe void* next { get; } public XrResult futureResult { get; } public unsafe XrFutureCompletionBaseHeaderEXT(XrStructureType type, void* next, XrResult futureResult) { this.type = type; this.next = next; this.futureResult = futureResult; } public XrFutureCompletionBaseHeaderEXT(XrStructureType type, XrResult futureResult) : this(type, null, futureResult) { } } public readonly struct XrFutureCompletionEXT { public XrStructureType type { get; } public unsafe void* next { get; } public XrResult futureResult { get; } public unsafe XrFutureCompletionEXT(void* next, XrResult futureResult) { type = XrStructureType.FutureCompletionEXT; this.next = next; this.futureResult = futureResult; } public XrFutureCompletionEXT(XrResult futureResult) : this(null, futureResult) { } } public readonly struct XrFuturePollInfoEXT { public XrStructureType type { get; } public unsafe void* next { get; } public ulong future { get; } public unsafe XrFuturePollInfoEXT(void* next, ulong future) { type = XrStructureType.FuturePollInfoEXT; this.next = next; this.future = future; } public XrFuturePollInfoEXT(ulong future) : this(null, future) { } } public struct XrFuturePollResultEXT { public static XrFuturePollResultEXT defaultValue => new XrFuturePollResultEXT((XrFutureStateEXT)0); public XrStructureType type { get; } public unsafe void* next { get; set; } public XrFutureStateEXT state { get; set; } public unsafe XrFuturePollResultEXT(void* next, XrFutureStateEXT state) { type = XrStructureType.FuturePollResultEXT; this.next = next; this.state = state; } public XrFuturePollResultEXT(XrFutureStateEXT state) : this(null, state) { } } public readonly struct XrSpatialAnchorCreateInfoEXT { public XrStructureType type { get; } public unsafe void* next { get; } public ulong baseSpace { get; } public long time { get; } public XrPosef pose { get; } public unsafe XrSpatialAnchorCreateInfoEXT(void* next, ulong baseSpace, long time, XrPosef pose) { type = XrStructureType.SpatialAnchorCreateInfoEXT; this.next = next; this.baseSpace = baseSpace; this.time = time; this.pose = pose; } public XrSpatialAnchorCreateInfoEXT(ulong baseSpace, long time, XrPosef pose) : this(null, baseSpace, time, pose) { } public unsafe XrSpatialAnchorCreateInfoEXT(void* next, ulong baseSpace, long time, Vector3 position, Quaternion rotation) : this(next, baseSpace, time, new XrPosef(position, rotation)) { }//IL_0004: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) public XrSpatialAnchorCreateInfoEXT(ulong baseSpace, long time, Vector3 position, Quaternion rotation) : this(null, baseSpace, time, new XrPosef(position, rotation)) { }//IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) } public readonly struct XrSpatialCapabilityConfigurationAnchorEXT : ISpatialCapabilityConfiguration { public XrStructureType type { get; } public unsafe void* next { get; } public XrSpatialCapabilityEXT capability { get; } public uint enabledComponentCount { get; } public unsafe XrSpatialComponentTypeEXT* enabledComponents { get; } public unsafe XrSpatialCapabilityConfigurationAnchorEXT(void* next, uint enabledComponentCount, XrSpatialComponentTypeEXT* enabledComponents) { type = XrStructureType.SpatialCapabilityConfigurationAnchorEXT; this.next = next; capability = XrSpatialCapabilityEXT.Anchor; this.enabledComponentCount = enabledComponentCount; this.enabledComponents = enabledComponents; } public unsafe XrSpatialCapabilityConfigurationAnchorEXT(uint enabledComponentCount, XrSpatialComponentTypeEXT* enabledComponents) : this(null, enabledComponentCount, enabledComponents) { } public unsafe XrSpatialCapabilityConfigurationAnchorEXT(void* next, NativeArray enabledComponents) : this(next, (uint)enabledComponents.Length, (XrSpatialComponentTypeEXT*)NativeArrayUnsafeUtility.GetUnsafePtr(enabledComponents)) { }//IL_0009: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialCapabilityConfigurationAnchorEXT(NativeArray enabledComponents) : this(null, (uint)enabledComponents.Length, (XrSpatialComponentTypeEXT*)NativeArrayUnsafeUtility.GetUnsafePtr(enabledComponents)) { }//IL_000a: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialCapabilityConfigurationAnchorEXT(void* next, ReadOnly enabledComponents) : this(next, (uint)enabledComponents.Length, (XrSpatialComponentTypeEXT*)NativeArrayUnsafeUtility.GetUnsafeReadOnlyPtr(enabledComponents)) { }//IL_0009: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialCapabilityConfigurationAnchorEXT(ReadOnly enabledComponents) : this(null, (uint)enabledComponents.Length, (XrSpatialComponentTypeEXT*)NativeArrayUnsafeUtility.GetUnsafeReadOnlyPtr(enabledComponents)) { }//IL_000a: Unknown result type (might be due to invalid IL or missing references) } public readonly struct XrSpatialComponentAnchorListEXT { public XrStructureType type { get; } public unsafe void* next { get; } public uint locationCount { get; } public unsafe XrPosef* locations { get; } public unsafe XrSpatialComponentAnchorListEXT(void* next, uint locationCount, XrPosef* locations) { type = XrStructureType.SpatialComponentAnchorListEXT; this.next = next; this.locationCount = locationCount; this.locations = locations; } public unsafe XrSpatialComponentAnchorListEXT(uint locationCount, XrPosef* locations) : this(null, locationCount, locations) { } public unsafe XrSpatialComponentAnchorListEXT(void* next, NativeArray locations) : this(next, (uint)locations.Length, (XrPosef*)NativeArrayUnsafeUtility.GetUnsafePtr(locations)) { }//IL_0009: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialComponentAnchorListEXT(NativeArray locations) : this(null, (uint)locations.Length, (XrPosef*)NativeArrayUnsafeUtility.GetUnsafePtr(locations)) { }//IL_000a: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialComponentAnchorListEXT(void* next, ReadOnly locations) : this(next, (uint)locations.Length, (XrPosef*)NativeArrayUnsafeUtility.GetUnsafeReadOnlyPtr(locations)) { }//IL_0009: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialComponentAnchorListEXT(ReadOnly locations) : this(null, (uint)locations.Length, (XrPosef*)NativeArrayUnsafeUtility.GetUnsafeReadOnlyPtr(locations)) { }//IL_000a: Unknown result type (might be due to invalid IL or missing references) } public enum XrSpatialBufferTypeEXT { Unknown, String, Uint8, Uint16, Uint32, Float, Vector2f, Vector3f } public enum XrSpatialCapabilityEXT { PlaneTracking = 1000741000, MarkerTrackingQRCode = 1000743000, MarkerTrackingMicroQRCode = 1000743001, MarkerTrackingArucoMarker = 1000743002, MarkerTrackingAprilTag = 1000743003, Anchor = 1000762000 } public enum XrSpatialCapabilityFeatureEXT { MarkerTrackingFixedSizeMarkers = 1000743000, MarkerTrackingStaticMarkers } public enum XrSpatialComponentTypeEXT { Bounded2D = 1, Bounded3D = 2, Parent = 3, Mesh3D = 4, PlaneAlignment = 1000741000, Mesh2D = 1000741001, Polygon2D = 1000741002, PlaneSemanticLabel = 1000741003, Marker = 1000743000, Anchor = 1000762000, Persistence = 1000763000 } public enum XrSpatialEntityTrackingStateEXT { Stopped = 1, Paused, Tracking } public interface ISpatialCapabilityConfiguration { XrStructureType type { get; } unsafe void* next { get; } XrSpatialCapabilityEXT capability { get; } uint enabledComponentCount { get; } unsafe XrSpatialComponentTypeEXT* enabledComponents { get; } } public readonly struct XrSpatialBounded2DDataEXT : IEquatable { public XrPosef center { get; } public XrExtent2Df extents { get; } public XrSpatialBounded2DDataEXT(XrPosef center, XrExtent2Df extents) { this.center = center; this.extents = extents; } public bool Equals(XrSpatialBounded2DDataEXT other) { if (center.Equals(other.center)) { return extents.Equals(other.extents); } return false; } public override bool Equals(object obj) { if (obj is XrSpatialBounded2DDataEXT other) { return Equals(other); } return false; } public override int GetHashCode() { return HashCode.Combine(center, extents); } } public readonly struct XrSpatialComponentBounded2DListEXT { public XrStructureType type { get; } public unsafe void* next { get; } public uint boundCount { get; } public unsafe XrSpatialBounded2DDataEXT* bounds { get; } public unsafe XrSpatialComponentBounded2DListEXT(void* next, uint boundCount, XrSpatialBounded2DDataEXT* bounds) { type = XrStructureType.SpatialComponentBounded2DListEXT; this.next = next; this.boundCount = boundCount; this.bounds = bounds; } public unsafe XrSpatialComponentBounded2DListEXT(uint boundCount, XrSpatialBounded2DDataEXT* bounds) : this(null, boundCount, bounds) { } public unsafe XrSpatialComponentBounded2DListEXT(void* next, NativeArray bounds) : this(next, (uint)bounds.Length, (XrSpatialBounded2DDataEXT*)NativeArrayUnsafeUtility.GetUnsafePtr(bounds)) { }//IL_0009: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialComponentBounded2DListEXT(NativeArray bounds) : this(null, (uint)bounds.Length, (XrSpatialBounded2DDataEXT*)NativeArrayUnsafeUtility.GetUnsafePtr(bounds)) { }//IL_000a: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialComponentBounded2DListEXT(void* next, ReadOnly bounds) : this(next, (uint)bounds.Length, (XrSpatialBounded2DDataEXT*)NativeArrayUnsafeUtility.GetUnsafeReadOnlyPtr(bounds)) { }//IL_0009: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialComponentBounded2DListEXT(ReadOnly bounds) : this(null, (uint)bounds.Length, (XrSpatialBounded2DDataEXT*)NativeArrayUnsafeUtility.GetUnsafeReadOnlyPtr(bounds)) { }//IL_000a: Unknown result type (might be due to invalid IL or missing references) } public readonly struct XrSpatialComponentBounded3DListEXT { public XrStructureType type { get; } public unsafe void* next { get; } public uint boundCount { get; } public unsafe XrBoxf* bounds { get; } public unsafe XrSpatialComponentBounded3DListEXT(void* next, uint boundCount, XrBoxf* bounds) { type = XrStructureType.SpatialComponentBounded3DListEXT; this.next = next; this.boundCount = boundCount; this.bounds = bounds; } public unsafe XrSpatialComponentBounded3DListEXT(uint boundCount, XrBoxf* bounds) : this(null, boundCount, bounds) { } public unsafe XrSpatialComponentBounded3DListEXT(void* next, NativeArray bounds) : this(next, (uint)bounds.Length, (XrBoxf*)NativeArrayUnsafeUtility.GetUnsafePtr(bounds)) { }//IL_0009: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialComponentBounded3DListEXT(NativeArray bounds) : this(null, (uint)bounds.Length, (XrBoxf*)NativeArrayUnsafeUtility.GetUnsafePtr(bounds)) { }//IL_000a: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialComponentBounded3DListEXT(void* next, ReadOnly bounds) : this(next, (uint)bounds.Length, (XrBoxf*)NativeArrayUnsafeUtility.GetUnsafeReadOnlyPtr(bounds)) { }//IL_0009: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialComponentBounded3DListEXT(ReadOnly bounds) : this(null, (uint)bounds.Length, (XrBoxf*)NativeArrayUnsafeUtility.GetUnsafeReadOnlyPtr(bounds)) { }//IL_000a: Unknown result type (might be due to invalid IL or missing references) } public readonly struct XrSpatialComponentMesh3DListEXT { public XrStructureType type { get; } public unsafe void* next { get; } public uint meshCount { get; } public unsafe XrSpatialMeshDataEXT* meshes { get; } public unsafe XrSpatialComponentMesh3DListEXT(void* next, uint meshCount, XrSpatialMeshDataEXT* meshes) { type = XrStructureType.SpatialComponentMesh3DListEXT; this.next = next; this.meshCount = meshCount; this.meshes = meshes; } public unsafe XrSpatialComponentMesh3DListEXT(uint meshCount, XrSpatialMeshDataEXT* meshes) : this(null, meshCount, meshes) { } public unsafe XrSpatialComponentMesh3DListEXT(void* next, NativeArray meshes) : this(next, (uint)meshes.Length, (XrSpatialMeshDataEXT*)NativeArrayUnsafeUtility.GetUnsafePtr(meshes)) { }//IL_0009: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialComponentMesh3DListEXT(NativeArray meshes) : this(null, (uint)meshes.Length, (XrSpatialMeshDataEXT*)NativeArrayUnsafeUtility.GetUnsafePtr(meshes)) { }//IL_000a: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialComponentMesh3DListEXT(void* next, ReadOnly meshes) : this(next, (uint)meshes.Length, (XrSpatialMeshDataEXT*)NativeArrayUnsafeUtility.GetUnsafeReadOnlyPtr(meshes)) { }//IL_0009: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialComponentMesh3DListEXT(ReadOnly meshes) : this(null, (uint)meshes.Length, (XrSpatialMeshDataEXT*)NativeArrayUnsafeUtility.GetUnsafeReadOnlyPtr(meshes)) { }//IL_000a: Unknown result type (might be due to invalid IL or missing references) } public readonly struct XrSpatialComponentParentListEXT { public XrStructureType type { get; } public unsafe void* next { get; } public uint parentCount { get; } public unsafe ulong* parents { get; } public unsafe XrSpatialComponentParentListEXT(void* next, uint parentCount, ulong* parents) { type = XrStructureType.SpatialComponentParentListEXT; this.next = next; this.parentCount = parentCount; this.parents = parents; } public unsafe XrSpatialComponentParentListEXT(uint parentCount, ulong* parents) : this(null, parentCount, parents) { } public unsafe XrSpatialComponentParentListEXT(void* next, NativeArray parents) : this(next, (uint)parents.Length, (ulong*)NativeArrayUnsafeUtility.GetUnsafePtr(parents)) { }//IL_0009: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialComponentParentListEXT(NativeArray parents) : this(null, (uint)parents.Length, (ulong*)NativeArrayUnsafeUtility.GetUnsafePtr(parents)) { }//IL_000a: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialComponentParentListEXT(void* next, ReadOnly parents) : this(next, (uint)parents.Length, (ulong*)NativeArrayUnsafeUtility.GetUnsafeReadOnlyPtr(parents)) { }//IL_0009: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialComponentParentListEXT(ReadOnly parents) : this(null, (uint)parents.Length, (ulong*)NativeArrayUnsafeUtility.GetUnsafeReadOnlyPtr(parents)) { }//IL_000a: Unknown result type (might be due to invalid IL or missing references) } public readonly struct XrSpatialMeshDataEXT : IEquatable { public XrPosef origin { get; } public XrSpatialBufferEXT vertexBuffer { get; } public XrSpatialBufferEXT indexBuffer { get; } public XrSpatialMeshDataEXT(XrPosef origin, XrSpatialBufferEXT vertexBuffer, XrSpatialBufferEXT indexBuffer) { this.origin = origin; this.vertexBuffer = vertexBuffer; this.indexBuffer = indexBuffer; } public bool Equals(XrSpatialMeshDataEXT other) { if (origin.Equals(other.origin) && vertexBuffer.Equals(other.vertexBuffer)) { return indexBuffer.Equals(other.indexBuffer); } return false; } public override bool Equals(object obj) { if (obj is XrSpatialMeshDataEXT other) { return Equals(other); } return false; } public override int GetHashCode() { return HashCode.Combine(origin, vertexBuffer, indexBuffer); } } public struct XrCreateSpatialContextCompletionEXT { public static XrCreateSpatialContextCompletionEXT defaultValue => new XrCreateSpatialContextCompletionEXT(XrResult.Success, 0uL); public XrStructureType type { get; } public unsafe void* next { get; set; } public XrResult futureResult { get; set; } public ulong spatialContext { get; set; } public unsafe XrCreateSpatialContextCompletionEXT(void* next, XrResult futureResult, ulong spatialContext) { type = XrStructureType.CreateSpatialContextCompletionEXT; this.next = next; this.futureResult = futureResult; this.spatialContext = spatialContext; } public XrCreateSpatialContextCompletionEXT(XrResult futureResult, ulong spatialContext) : this(null, futureResult, spatialContext) { } } public struct XrCreateSpatialDiscoverySnapshotCompletionEXT { public static XrCreateSpatialDiscoverySnapshotCompletionEXT defaultValue => new XrCreateSpatialDiscoverySnapshotCompletionEXT(XrResult.Success, 0uL); public XrStructureType type { get; } public unsafe void* next { get; set; } public XrResult futureResult { get; set; } public ulong snapshot { get; set; } public unsafe XrCreateSpatialDiscoverySnapshotCompletionEXT(void* next, XrResult futureResult, ulong snapshot) { type = XrStructureType.CreateSpatialDiscoverySnapshotCompletionEXT; this.next = next; this.futureResult = futureResult; this.snapshot = snapshot; } public XrCreateSpatialDiscoverySnapshotCompletionEXT(XrResult futureResult, ulong snapshot) : this(null, futureResult, snapshot) { } } public readonly struct XrCreateSpatialDiscoverySnapshotCompletionInfoEXT { public XrStructureType type { get; } public unsafe void* next { get; } public ulong baseSpace { get; } public long time { get; } public ulong future { get; } public unsafe XrCreateSpatialDiscoverySnapshotCompletionInfoEXT(void* next, ulong baseSpace, long time, ulong future) { type = XrStructureType.CreateSpatialDiscoverySnapshotCompletionInfoEXT; this.next = next; this.baseSpace = baseSpace; this.time = time; this.future = future; } public XrCreateSpatialDiscoverySnapshotCompletionInfoEXT(ulong baseSpace, long time, ulong future) : this(null, baseSpace, time, future) { } } public readonly struct XrEventDataSpatialDiscoveryRecommendedEXT { public XrStructureType type { get; } public unsafe void* next { get; } public ulong spatialContext { get; } public unsafe XrEventDataSpatialDiscoveryRecommendedEXT(void* next, ulong spatialContext) { type = XrStructureType.EventDataSpatialDiscoveryRecommendedEXT; this.next = next; this.spatialContext = spatialContext; } public XrEventDataSpatialDiscoveryRecommendedEXT(ulong spatialContext) : this(null, spatialContext) { } } public readonly struct XrSpatialBufferEXT : IEquatable { public ulong bufferId { get; } public XrSpatialBufferTypeEXT bufferType { get; } public XrSpatialBufferEXT(ulong bufferId, XrSpatialBufferTypeEXT bufferType) { this.bufferId = bufferId; this.bufferType = bufferType; } public bool Equals(XrSpatialBufferEXT other) { if (bufferId == other.bufferId) { return bufferType == other.bufferType; } return false; } public override bool Equals(object obj) { if (obj is XrSpatialBufferEXT other) { return Equals(other); } return false; } public override int GetHashCode() { return HashCode.Combine(bufferId, (int)bufferType); } } public readonly struct XrSpatialBufferGetInfoEXT { public XrStructureType type { get; } public unsafe void* next { get; } public ulong bufferId { get; } public unsafe XrSpatialBufferGetInfoEXT(void* next, ulong bufferId) { type = XrStructureType.SpatialBufferGetInfoEXT; this.next = next; this.bufferId = bufferId; } public XrSpatialBufferGetInfoEXT(ulong bufferId) : this(null, bufferId) { } } public struct XrSpatialCapabilityComponentTypesEXT { public static XrSpatialCapabilityComponentTypesEXT defaultValue => new XrSpatialCapabilityComponentTypesEXT(0u, 0u, null); public XrStructureType type { get; } public unsafe void* next { get; set; } public uint componentTypeCapacityInput { get; set; } public uint componentTypeCountOutput { get; set; } public unsafe XrSpatialComponentTypeEXT* componentTypes { get; set; } public unsafe XrSpatialCapabilityComponentTypesEXT(void* next, uint componentTypeCapacityInput, uint componentTypeCountOutput, XrSpatialComponentTypeEXT* componentTypes) { type = XrStructureType.SpatialCapabilityComponentTypesEXT; this.next = next; this.componentTypeCapacityInput = componentTypeCapacityInput; this.componentTypeCountOutput = componentTypeCountOutput; this.componentTypes = componentTypes; } public unsafe XrSpatialCapabilityComponentTypesEXT(uint componentTypeCapacityInput, uint componentTypeCountOutput, XrSpatialComponentTypeEXT* componentTypes) : this(null, componentTypeCapacityInput, componentTypeCountOutput, componentTypes) { } } public readonly struct XrSpatialCapabilityConfigurationBaseHeaderEXT { public XrStructureType type { get; } public unsafe void* next { get; } public XrSpatialCapabilityEXT capability { get; } public uint enabledComponentCount { get; } public unsafe XrSpatialComponentTypeEXT* enabledComponents { get; } public unsafe XrSpatialCapabilityConfigurationBaseHeaderEXT(XrStructureType type, void* next, XrSpatialCapabilityEXT capability, uint enabledComponentCount, XrSpatialComponentTypeEXT* enabledComponents) { this.type = type; this.next = next; this.capability = capability; this.enabledComponentCount = enabledComponentCount; this.enabledComponents = enabledComponents; } public unsafe XrSpatialCapabilityConfigurationBaseHeaderEXT(XrStructureType type, XrSpatialCapabilityEXT capability, uint enabledComponentCount, XrSpatialComponentTypeEXT* enabledComponents) : this(type, null, capability, enabledComponentCount, enabledComponents) { } public unsafe XrSpatialCapabilityConfigurationBaseHeaderEXT(XrStructureType type, void* next, XrSpatialCapabilityEXT capability, NativeArray enabledComponents) : this(type, next, capability, (uint)enabledComponents.Length, (XrSpatialComponentTypeEXT*)NativeArrayUnsafeUtility.GetUnsafePtr(enabledComponents)) { }//IL_000b: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialCapabilityConfigurationBaseHeaderEXT(XrStructureType type, XrSpatialCapabilityEXT capability, NativeArray enabledComponents) : this(type, null, capability, (uint)enabledComponents.Length, (XrSpatialComponentTypeEXT*)NativeArrayUnsafeUtility.GetUnsafePtr(enabledComponents)) { }//IL_000c: Unknown result type (might be due to invalid IL or missing references) } public readonly struct XrSpatialComponentDataQueryConditionEXT { public XrStructureType type { get; } public unsafe void* next { get; } public uint componentTypeCount { get; } public unsafe XrSpatialComponentTypeEXT* componentTypes { get; } public unsafe XrSpatialComponentDataQueryConditionEXT(void* next, uint componentTypeCount, XrSpatialComponentTypeEXT* componentTypes) { type = XrStructureType.SpatialComponentDataQueryConditionEXT; this.next = next; this.componentTypeCount = componentTypeCount; this.componentTypes = componentTypes; } public unsafe XrSpatialComponentDataQueryConditionEXT(uint componentTypeCount, XrSpatialComponentTypeEXT* componentTypes) : this(null, componentTypeCount, componentTypes) { } public unsafe XrSpatialComponentDataQueryConditionEXT(void* next, NativeArray componentTypes) : this(next, (uint)componentTypes.Length, (XrSpatialComponentTypeEXT*)NativeArrayUnsafeUtility.GetUnsafePtr(componentTypes)) { }//IL_0009: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialComponentDataQueryConditionEXT(NativeArray componentTypes) : this(null, (uint)componentTypes.Length, (XrSpatialComponentTypeEXT*)NativeArrayUnsafeUtility.GetUnsafePtr(componentTypes)) { }//IL_000a: Unknown result type (might be due to invalid IL or missing references) } public struct XrSpatialComponentDataQueryResultEXT { public static XrSpatialComponentDataQueryResultEXT defaultValue => new XrSpatialComponentDataQueryResultEXT(0u, 0u, null, 0u, 0u, null); public XrStructureType type { get; } public unsafe void* next { get; set; } public uint entityIdCapacityInput { get; set; } public uint entityIdCountOutput { get; set; } public unsafe ulong* entityIds { get; set; } public uint entityStateCapacityInput { get; set; } public uint entityStateCountOutput { get; set; } public unsafe XrSpatialEntityTrackingStateEXT* entityStates { get; set; } public unsafe XrSpatialComponentDataQueryResultEXT(void* next, uint entityIdCapacityInput, uint entityIdCountOutput, ulong* entityIds, uint entityStateCapacityInput, uint entityStateCountOutput, XrSpatialEntityTrackingStateEXT* entityStates) { type = XrStructureType.SpatialComponentDataQueryResultEXT; this.next = next; this.entityIdCapacityInput = entityIdCapacityInput; this.entityIdCountOutput = entityIdCountOutput; this.entityIds = entityIds; this.entityStateCapacityInput = entityStateCapacityInput; this.entityStateCountOutput = entityStateCountOutput; this.entityStates = entityStates; } public unsafe XrSpatialComponentDataQueryResultEXT(uint entityIdCapacityInput, uint entityIdCountOutput, ulong* entityIds, uint entityStateCapacityInput, uint entityStateCountOutput, XrSpatialEntityTrackingStateEXT* entityStates) : this(null, entityIdCapacityInput, entityIdCountOutput, entityIds, entityStateCapacityInput, entityStateCountOutput, entityStates) { } public unsafe XrSpatialComponentDataQueryResultEXT(void* next) { type = XrStructureType.SpatialComponentDataQueryResultEXT; this.next = next; entityIdCapacityInput = 0u; entityIdCountOutput = 0u; entityIds = null; entityStateCapacityInput = 0u; entityStateCountOutput = 0u; entityStates = null; } public unsafe void SetEntityIds(NativeArray ids) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) entityIds = (ulong*)NativeArrayUnsafeUtility.GetUnsafePtr(ids); } public unsafe void SetEntityStates(NativeArray states) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) entityStates = (XrSpatialEntityTrackingStateEXT*)NativeArrayUnsafeUtility.GetUnsafePtr(states); } } public readonly struct XrSpatialContextCreateInfoEXT { public XrStructureType type { get; } public unsafe void* next { get; } public uint capabilityConfigCount { get; } public unsafe XrSpatialCapabilityConfigurationBaseHeaderEXT** capabilityConfigs { get; } public unsafe XrSpatialContextCreateInfoEXT(void* next, uint capabilityConfigCount, XrSpatialCapabilityConfigurationBaseHeaderEXT** capabilityConfigs) { type = XrStructureType.SpatialContextCreateInfoEXT; this.next = next; this.capabilityConfigCount = capabilityConfigCount; this.capabilityConfigs = capabilityConfigs; } public unsafe XrSpatialContextCreateInfoEXT(uint capabilityConfigCount, XrSpatialCapabilityConfigurationBaseHeaderEXT** capabilityConfigs) : this(null, capabilityConfigCount, capabilityConfigs) { } public unsafe XrSpatialContextCreateInfoEXT(void* next, NativeArray capabilityConfigs) : this(next, (uint)capabilityConfigs.Length, (XrSpatialCapabilityConfigurationBaseHeaderEXT**)NativeArrayUnsafeUtility.GetUnsafePtr(capabilityConfigs)) { }//IL_0009: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialContextCreateInfoEXT(NativeArray capabilityConfigs) : this(null, (uint)capabilityConfigs.Length, (XrSpatialCapabilityConfigurationBaseHeaderEXT**)NativeArrayUnsafeUtility.GetUnsafePtr(capabilityConfigs)) { }//IL_000a: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialContextCreateInfoEXT(void* next, ReadOnly capabilityConfigs) : this(next, (uint)capabilityConfigs.Length, (XrSpatialCapabilityConfigurationBaseHeaderEXT**)NativeArrayUnsafeUtility.GetUnsafeReadOnlyPtr(capabilityConfigs)) { }//IL_0009: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialContextCreateInfoEXT(ReadOnly capabilityConfigs) : this(null, (uint)capabilityConfigs.Length, (XrSpatialCapabilityConfigurationBaseHeaderEXT**)NativeArrayUnsafeUtility.GetUnsafeReadOnlyPtr(capabilityConfigs)) { }//IL_000a: Unknown result type (might be due to invalid IL or missing references) } public readonly struct XrSpatialDiscoverySnapshotCreateInfoEXT { public static XrSpatialDiscoverySnapshotCreateInfoEXT defaultValue = new XrSpatialDiscoverySnapshotCreateInfoEXT(0u, null); public XrStructureType type { get; } public unsafe void* next { get; } public uint componentTypeCount { get; } public unsafe XrSpatialComponentTypeEXT* componentTypes { get; } public unsafe XrSpatialDiscoverySnapshotCreateInfoEXT(void* next, uint componentTypeCount, XrSpatialComponentTypeEXT* componentTypes) { type = XrStructureType.SpatialDiscoverySnapshotCreateInfoEXT; this.next = next; this.componentTypeCount = componentTypeCount; this.componentTypes = componentTypes; } public unsafe XrSpatialDiscoverySnapshotCreateInfoEXT(uint componentTypeCount, XrSpatialComponentTypeEXT* componentTypes) : this(null, componentTypeCount, componentTypes) { } public unsafe XrSpatialDiscoverySnapshotCreateInfoEXT(void* next, NativeArray componentTypes) : this(next, (uint)componentTypes.Length, (XrSpatialComponentTypeEXT*)NativeArrayUnsafeUtility.GetUnsafePtr(componentTypes)) { }//IL_0009: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialDiscoverySnapshotCreateInfoEXT(NativeArray componentTypes) : this(null, (uint)componentTypes.Length, (XrSpatialComponentTypeEXT*)NativeArrayUnsafeUtility.GetUnsafePtr(componentTypes)) { }//IL_000a: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialDiscoverySnapshotCreateInfoEXT(void* next, ReadOnly componentTypes) : this(next, (uint)componentTypes.Length, (XrSpatialComponentTypeEXT*)NativeArrayUnsafeUtility.GetUnsafeReadOnlyPtr(componentTypes)) { }//IL_0009: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialDiscoverySnapshotCreateInfoEXT(ReadOnly componentTypes) : this(null, (uint)componentTypes.Length, (XrSpatialComponentTypeEXT*)NativeArrayUnsafeUtility.GetUnsafeReadOnlyPtr(componentTypes)) { }//IL_000a: Unknown result type (might be due to invalid IL or missing references) } public readonly struct XrSpatialEntityFromIdCreateInfoEXT { public XrStructureType type { get; } public unsafe void* next { get; } public ulong entityId { get; } public unsafe XrSpatialEntityFromIdCreateInfoEXT(void* next, ulong entityId) { type = XrStructureType.SpatialEntityFromIdCreateInfoEXT; this.next = next; this.entityId = entityId; } public XrSpatialEntityFromIdCreateInfoEXT(ulong entityId) : this(null, entityId) { } } public readonly struct XrSpatialFilterTrackingStateEXT { public XrStructureType type { get; } public unsafe void* next { get; } public XrSpatialEntityTrackingStateEXT trackingState { get; } public unsafe XrSpatialFilterTrackingStateEXT(void* next, XrSpatialEntityTrackingStateEXT trackingState) { type = XrStructureType.SpatialFilterTrackingStateEXT; this.next = next; this.trackingState = trackingState; } public XrSpatialFilterTrackingStateEXT(XrSpatialEntityTrackingStateEXT trackingState) : this(null, trackingState) { } } public readonly struct XrSpatialUpdateSnapshotCreateInfoEXT { public XrStructureType type { get; } public unsafe void* next { get; } public uint entityCount { get; } public unsafe ulong* entities { get; } public uint componentTypeCount { get; } public unsafe XrSpatialComponentTypeEXT* componentTypes { get; } public ulong baseSpace { get; } public long time { get; } public unsafe XrSpatialUpdateSnapshotCreateInfoEXT(void* next, uint entityCount, ulong* entities, uint componentTypeCount, XrSpatialComponentTypeEXT* componentTypes, ulong baseSpace, long time) { type = XrStructureType.SpatialUpdateSnapshotCreateInfoEXT; this.next = next; this.entityCount = entityCount; this.entities = entities; this.componentTypeCount = componentTypeCount; this.componentTypes = componentTypes; this.baseSpace = baseSpace; this.time = time; } public unsafe XrSpatialUpdateSnapshotCreateInfoEXT(uint entityCount, ulong* entities, uint componentTypeCount, XrSpatialComponentTypeEXT* componentTypes, ulong baseSpace, long time) : this(null, entityCount, entities, componentTypeCount, componentTypes, baseSpace, time) { } } public enum XrSpatialMarkerAprilTagDictEXT { Dict_16h5 = 1, Dict_25h9, Dict_36h10, Dict_36h11 } public enum XrSpatialMarkerArucoDictEXT { Dict_4x4_50 = 1, Dict_4x4_100, Dict_4x4_250, Dict_4x4_1000, Dict_5x5_50, Dict_5x5_100, Dict_5x5_250, Dict_5x5_1000, Dict_6x6_50, Dict_6x6_100, Dict_6x6_250, Dict_6x6_1000, Dict_7x7_50, Dict_7x7_100, Dict_7x7_250, Dict_7x7_1000 } public readonly struct XrSpatialCapabilityConfigurationAprilTagEXT : ISpatialCapabilityConfiguration { public XrStructureType type { get; } public unsafe void* next { get; } public XrSpatialCapabilityEXT capability { get; } public uint enabledComponentCount { get; } public unsafe XrSpatialComponentTypeEXT* enabledComponents { get; } public XrSpatialMarkerAprilTagDictEXT aprilDict { get; } public unsafe XrSpatialCapabilityConfigurationAprilTagEXT(void* next, uint enabledComponentCount, XrSpatialComponentTypeEXT* enabledComponents, XrSpatialMarkerAprilTagDictEXT aprilDict) { type = XrStructureType.SpatialCapabilityConfigurationAprilTagEXT; this.next = next; capability = XrSpatialCapabilityEXT.MarkerTrackingAprilTag; this.enabledComponentCount = enabledComponentCount; this.enabledComponents = enabledComponents; this.aprilDict = aprilDict; } public unsafe XrSpatialCapabilityConfigurationAprilTagEXT(uint enabledComponentCount, XrSpatialComponentTypeEXT* enabledComponents, XrSpatialMarkerAprilTagDictEXT aprilDict) : this(null, enabledComponentCount, enabledComponents, aprilDict) { } public unsafe XrSpatialCapabilityConfigurationAprilTagEXT(void* next, NativeArray enabledComponents, XrSpatialMarkerAprilTagDictEXT aprilDict) : this(next, (uint)enabledComponents.Length, (XrSpatialComponentTypeEXT*)NativeArrayUnsafeUtility.GetUnsafePtr(enabledComponents), aprilDict) { }//IL_0009: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialCapabilityConfigurationAprilTagEXT(NativeArray enabledComponents, XrSpatialMarkerAprilTagDictEXT aprilDict) : this(null, (uint)enabledComponents.Length, (XrSpatialComponentTypeEXT*)NativeArrayUnsafeUtility.GetUnsafePtr(enabledComponents), aprilDict) { }//IL_000a: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialCapabilityConfigurationAprilTagEXT(void* next, ReadOnly enabledComponents, XrSpatialMarkerAprilTagDictEXT aprilDict) : this(next, (uint)enabledComponents.Length, (XrSpatialComponentTypeEXT*)NativeArrayUnsafeUtility.GetUnsafeReadOnlyPtr(enabledComponents), aprilDict) { }//IL_0009: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialCapabilityConfigurationAprilTagEXT(ReadOnly enabledComponents, XrSpatialMarkerAprilTagDictEXT aprilDict) : this(null, (uint)enabledComponents.Length, (XrSpatialComponentTypeEXT*)NativeArrayUnsafeUtility.GetUnsafeReadOnlyPtr(enabledComponents), aprilDict) { }//IL_000a: Unknown result type (might be due to invalid IL or missing references) } public readonly struct XrSpatialCapabilityConfigurationArucoMarkerEXT : ISpatialCapabilityConfiguration { public XrStructureType type { get; } public unsafe void* next { get; } public XrSpatialCapabilityEXT capability { get; } public uint enabledComponentCount { get; } public unsafe XrSpatialComponentTypeEXT* enabledComponents { get; } public XrSpatialMarkerArucoDictEXT arUcoDict { get; } public unsafe XrSpatialCapabilityConfigurationArucoMarkerEXT(void* next, uint enabledComponentCount, XrSpatialComponentTypeEXT* enabledComponents, XrSpatialMarkerArucoDictEXT arUcoDict) { type = XrStructureType.SpatialCapabilityConfigurationArucoMarkerEXT; this.next = next; capability = XrSpatialCapabilityEXT.MarkerTrackingArucoMarker; this.enabledComponentCount = enabledComponentCount; this.enabledComponents = enabledComponents; this.arUcoDict = arUcoDict; } public unsafe XrSpatialCapabilityConfigurationArucoMarkerEXT(uint enabledComponentCount, XrSpatialComponentTypeEXT* enabledComponents, XrSpatialMarkerArucoDictEXT arUcoDict) : this(null, enabledComponentCount, enabledComponents, arUcoDict) { } public unsafe XrSpatialCapabilityConfigurationArucoMarkerEXT(void* next, NativeArray enabledComponents, XrSpatialMarkerArucoDictEXT arUcoDict) : this(next, (uint)enabledComponents.Length, (XrSpatialComponentTypeEXT*)NativeArrayUnsafeUtility.GetUnsafePtr(enabledComponents), arUcoDict) { }//IL_0009: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialCapabilityConfigurationArucoMarkerEXT(NativeArray enabledComponents, XrSpatialMarkerArucoDictEXT arUcoDict) : this(null, (uint)enabledComponents.Length, (XrSpatialComponentTypeEXT*)NativeArrayUnsafeUtility.GetUnsafePtr(enabledComponents), arUcoDict) { }//IL_000a: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialCapabilityConfigurationArucoMarkerEXT(void* next, ReadOnly enabledComponents, XrSpatialMarkerArucoDictEXT arUcoDict) : this(next, (uint)enabledComponents.Length, (XrSpatialComponentTypeEXT*)NativeArrayUnsafeUtility.GetUnsafeReadOnlyPtr(enabledComponents), arUcoDict) { }//IL_0009: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialCapabilityConfigurationArucoMarkerEXT(ReadOnly enabledComponents, XrSpatialMarkerArucoDictEXT arUcoDict) : this(null, (uint)enabledComponents.Length, (XrSpatialComponentTypeEXT*)NativeArrayUnsafeUtility.GetUnsafeReadOnlyPtr(enabledComponents), arUcoDict) { }//IL_000a: Unknown result type (might be due to invalid IL or missing references) } public readonly struct XrSpatialCapabilityConfigurationMicroQrCodeEXT : ISpatialCapabilityConfiguration { public XrStructureType type { get; } public unsafe void* next { get; } public XrSpatialCapabilityEXT capability { get; } public uint enabledComponentCount { get; } public unsafe XrSpatialComponentTypeEXT* enabledComponents { get; } public unsafe XrSpatialCapabilityConfigurationMicroQrCodeEXT(void* next, uint enabledComponentCount, XrSpatialComponentTypeEXT* enabledComponents) { type = XrStructureType.SpatialCapabilityConfigurationMicroQrCodeEXT; this.next = next; capability = XrSpatialCapabilityEXT.MarkerTrackingMicroQRCode; this.enabledComponentCount = enabledComponentCount; this.enabledComponents = enabledComponents; } public unsafe XrSpatialCapabilityConfigurationMicroQrCodeEXT(uint enabledComponentCount, XrSpatialComponentTypeEXT* enabledComponents) : this(null, enabledComponentCount, enabledComponents) { } public unsafe XrSpatialCapabilityConfigurationMicroQrCodeEXT(void* next, NativeArray enabledComponents) : this(next, (uint)enabledComponents.Length, (XrSpatialComponentTypeEXT*)NativeArrayUnsafeUtility.GetUnsafePtr(enabledComponents)) { }//IL_0009: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialCapabilityConfigurationMicroQrCodeEXT(NativeArray enabledComponents) : this(null, (uint)enabledComponents.Length, (XrSpatialComponentTypeEXT*)NativeArrayUnsafeUtility.GetUnsafePtr(enabledComponents)) { }//IL_000a: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialCapabilityConfigurationMicroQrCodeEXT(void* next, ReadOnly enabledComponents) : this(next, (uint)enabledComponents.Length, (XrSpatialComponentTypeEXT*)NativeArrayUnsafeUtility.GetUnsafeReadOnlyPtr(enabledComponents)) { }//IL_0009: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialCapabilityConfigurationMicroQrCodeEXT(ReadOnly enabledComponents) : this(null, (uint)enabledComponents.Length, (XrSpatialComponentTypeEXT*)NativeArrayUnsafeUtility.GetUnsafeReadOnlyPtr(enabledComponents)) { }//IL_000a: Unknown result type (might be due to invalid IL or missing references) } public readonly struct XrSpatialCapabilityConfigurationQrCodeEXT : ISpatialCapabilityConfiguration { public XrStructureType type { get; } public unsafe void* next { get; } public XrSpatialCapabilityEXT capability { get; } public uint enabledComponentCount { get; } public unsafe XrSpatialComponentTypeEXT* enabledComponents { get; } public unsafe XrSpatialCapabilityConfigurationQrCodeEXT(void* next, uint enabledComponentCount, XrSpatialComponentTypeEXT* enabledComponents) { type = XrStructureType.SpatialCapabilityConfigurationQrCodeEXT; this.next = next; capability = XrSpatialCapabilityEXT.MarkerTrackingQRCode; this.enabledComponentCount = enabledComponentCount; this.enabledComponents = enabledComponents; } public unsafe XrSpatialCapabilityConfigurationQrCodeEXT(uint enabledComponentCount, XrSpatialComponentTypeEXT* enabledComponents) : this(null, enabledComponentCount, enabledComponents) { } public unsafe XrSpatialCapabilityConfigurationQrCodeEXT(void* next, NativeArray enabledComponents) : this(next, (uint)enabledComponents.Length, (XrSpatialComponentTypeEXT*)NativeArrayUnsafeUtility.GetUnsafePtr(enabledComponents)) { }//IL_0009: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialCapabilityConfigurationQrCodeEXT(NativeArray enabledComponents) : this(null, (uint)enabledComponents.Length, (XrSpatialComponentTypeEXT*)NativeArrayUnsafeUtility.GetUnsafePtr(enabledComponents)) { }//IL_000a: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialCapabilityConfigurationQrCodeEXT(void* next, ReadOnly enabledComponents) : this(next, (uint)enabledComponents.Length, (XrSpatialComponentTypeEXT*)NativeArrayUnsafeUtility.GetUnsafeReadOnlyPtr(enabledComponents)) { }//IL_0009: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialCapabilityConfigurationQrCodeEXT(ReadOnly enabledComponents) : this(null, (uint)enabledComponents.Length, (XrSpatialComponentTypeEXT*)NativeArrayUnsafeUtility.GetUnsafeReadOnlyPtr(enabledComponents)) { }//IL_000a: Unknown result type (might be due to invalid IL or missing references) } public readonly struct XrSpatialComponentMarkerListEXT { public XrStructureType type { get; } public unsafe void* next { get; } public uint markerCount { get; } public unsafe XrSpatialMarkerDataEXT* markers { get; } public unsafe XrSpatialComponentMarkerListEXT(void* next, uint markerCount, XrSpatialMarkerDataEXT* markers) { type = XrStructureType.SpatialComponentMarkerListEXT; this.next = next; this.markerCount = markerCount; this.markers = markers; } public unsafe XrSpatialComponentMarkerListEXT(uint markerCount, XrSpatialMarkerDataEXT* markers) : this(null, markerCount, markers) { } public unsafe XrSpatialComponentMarkerListEXT(void* next, NativeArray markers) : this(next, (uint)markers.Length, (XrSpatialMarkerDataEXT*)NativeArrayUnsafeUtility.GetUnsafePtr(markers)) { }//IL_0009: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialComponentMarkerListEXT(NativeArray markers) : this(null, (uint)markers.Length, (XrSpatialMarkerDataEXT*)NativeArrayUnsafeUtility.GetUnsafePtr(markers)) { }//IL_000a: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialComponentMarkerListEXT(void* next, ReadOnly markers) : this(next, (uint)markers.Length, (XrSpatialMarkerDataEXT*)NativeArrayUnsafeUtility.GetUnsafeReadOnlyPtr(markers)) { }//IL_0009: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialComponentMarkerListEXT(ReadOnly markers) : this(null, (uint)markers.Length, (XrSpatialMarkerDataEXT*)NativeArrayUnsafeUtility.GetUnsafeReadOnlyPtr(markers)) { }//IL_000a: Unknown result type (might be due to invalid IL or missing references) } public readonly struct XrSpatialMarkerDataEXT : IEquatable { public XrSpatialCapabilityEXT capability { get; } public uint markerId { get; } public XrSpatialBufferEXT data { get; } public XrSpatialMarkerDataEXT(XrSpatialCapabilityEXT capability, uint markerId, XrSpatialBufferEXT data) { this.capability = capability; this.markerId = markerId; this.data = data; } public bool Equals(XrSpatialMarkerDataEXT other) { if (capability == other.capability && markerId == other.markerId) { return data.Equals(other.data); } return false; } public override bool Equals(object obj) { if (obj is XrSpatialMarkerDataEXT other) { return Equals(other); } return false; } public override int GetHashCode() { return HashCode.Combine((int)capability, markerId, data); } } public readonly struct XrSpatialMarkerSizeEXT { public XrStructureType type { get; } public unsafe void* next { get; } public float markerSideLength { get; } public unsafe XrSpatialMarkerSizeEXT(void* next, float markerSideLength) { type = XrStructureType.SpatialMarkerSizeEXT; this.next = next; this.markerSideLength = markerSideLength; } public XrSpatialMarkerSizeEXT(float markerSideLength) : this(null, markerSideLength) { } } public readonly struct XrSpatialMarkerStaticOptimizationEXT { public XrStructureType type { get; } public unsafe void* next { get; } public uint optimizeForStaticMarker { get; } public unsafe XrSpatialMarkerStaticOptimizationEXT(void* next, bool optimizeForStaticMarker) { type = XrStructureType.SpatialMarkerStaticOptimizationEXT; this.next = next; this.optimizeForStaticMarker = (optimizeForStaticMarker ? 1u : 0u); } public XrSpatialMarkerStaticOptimizationEXT(bool optimizeForStaticMarker) : this(null, optimizeForStaticMarker) { } } public enum XrSpatialPersistenceContextResultEXT { Success = 0, EntityNotTracking = -1000781001, PersistUuidNotFound = -1000781002 } public static class XrSpatialPersistenceContextResultEXTExtensions { public static bool IsSuccess(this XrSpatialPersistenceContextResultEXT result) { return result >= XrSpatialPersistenceContextResultEXT.Success; } public static bool IsError(this XrSpatialPersistenceContextResultEXT result) { return result < XrSpatialPersistenceContextResultEXT.Success; } } public enum XrSpatialPersistenceStateEXT { Loaded = 1, NotFound } public struct XrCreateSpatialPersistenceContextCompletionEXT { public static XrCreateSpatialPersistenceContextCompletionEXT defaultValue => new XrCreateSpatialPersistenceContextCompletionEXT(XrResult.Success, XrSpatialPersistenceContextResultEXT.Success, 0uL); public XrStructureType type { get; } public unsafe void* next { get; set; } public XrResult futureResult { get; set; } public XrSpatialPersistenceContextResultEXT createResult { get; set; } public ulong persistenceContext { get; set; } public unsafe XrCreateSpatialPersistenceContextCompletionEXT(void* next, XrResult futureResult, XrSpatialPersistenceContextResultEXT createResult, ulong persistenceContext) { type = XrStructureType.CreateSpatialPersistenceContextCompletionEXT; this.next = next; this.futureResult = futureResult; this.createResult = createResult; this.persistenceContext = persistenceContext; } public XrCreateSpatialPersistenceContextCompletionEXT(XrResult futureResult, XrSpatialPersistenceContextResultEXT createResult, ulong persistenceContext) : this(null, futureResult, createResult, persistenceContext) { } } public readonly struct XrSpatialComponentPersistenceListEXT { public XrStructureType type { get; } public unsafe void* next { get; } public uint persistDataCount { get; } public unsafe XrSpatialPersistenceDataEXT* persistData { get; } public unsafe XrSpatialComponentPersistenceListEXT(void* next, uint persistDataCount, XrSpatialPersistenceDataEXT* persistData) { type = XrStructureType.SpatialComponentPersistenceListEXT; this.next = next; this.persistDataCount = persistDataCount; this.persistData = persistData; } public unsafe XrSpatialComponentPersistenceListEXT(uint persistDataCount, XrSpatialPersistenceDataEXT* persistData) : this(null, persistDataCount, persistData) { } public unsafe XrSpatialComponentPersistenceListEXT(void* next, NativeArray persistData) : this(next, (uint)persistData.Length, (XrSpatialPersistenceDataEXT*)NativeArrayUnsafeUtility.GetUnsafePtr(persistData)) { }//IL_0009: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialComponentPersistenceListEXT(NativeArray persistData) : this(null, (uint)persistData.Length, (XrSpatialPersistenceDataEXT*)NativeArrayUnsafeUtility.GetUnsafePtr(persistData)) { }//IL_000a: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialComponentPersistenceListEXT(void* next, ReadOnly persistData) : this(next, (uint)persistData.Length, (XrSpatialPersistenceDataEXT*)NativeArrayUnsafeUtility.GetUnsafeReadOnlyPtr(persistData)) { }//IL_0009: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialComponentPersistenceListEXT(ReadOnly persistData) : this(null, (uint)persistData.Length, (XrSpatialPersistenceDataEXT*)NativeArrayUnsafeUtility.GetUnsafeReadOnlyPtr(persistData)) { }//IL_000a: Unknown result type (might be due to invalid IL or missing references) } public readonly struct XrSpatialContextPersistenceConfigEXT { public XrStructureType type { get; } public unsafe void* next { get; } public uint persistenceContextCount { get; } public unsafe ulong* persistenceContexts { get; } public unsafe XrSpatialContextPersistenceConfigEXT(void* next, uint persistenceContextCount, ulong* persistenceContexts) { type = XrStructureType.SpatialContextPersistenceConfigEXT; this.next = next; this.persistenceContextCount = persistenceContextCount; this.persistenceContexts = persistenceContexts; } public unsafe XrSpatialContextPersistenceConfigEXT(uint persistenceContextCount, ulong* persistenceContexts) : this(null, persistenceContextCount, persistenceContexts) { } public unsafe XrSpatialContextPersistenceConfigEXT(void* next, NativeArray persistenceContexts) : this(next, (uint)persistenceContexts.Length, (ulong*)NativeArrayUnsafeUtility.GetUnsafePtr(persistenceContexts)) { }//IL_0009: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialContextPersistenceConfigEXT(NativeArray persistenceContexts) : this(null, (uint)persistenceContexts.Length, (ulong*)NativeArrayUnsafeUtility.GetUnsafePtr(persistenceContexts)) { }//IL_000a: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialContextPersistenceConfigEXT(void* next, ReadOnly persistenceContexts) : this(next, (uint)persistenceContexts.Length, (ulong*)NativeArrayUnsafeUtility.GetUnsafeReadOnlyPtr(persistenceContexts)) { }//IL_0009: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialContextPersistenceConfigEXT(ReadOnly persistenceContexts) : this(null, (uint)persistenceContexts.Length, (ulong*)NativeArrayUnsafeUtility.GetUnsafeReadOnlyPtr(persistenceContexts)) { }//IL_000a: Unknown result type (might be due to invalid IL or missing references) } public readonly struct XrSpatialDiscoveryPersistenceUuidFilterEXT { public XrStructureType type { get; } public unsafe void* next { get; } public uint persistedUuidCount { get; } public unsafe XrUuid* persistedUuids { get; } public unsafe XrSpatialDiscoveryPersistenceUuidFilterEXT(void* next, uint persistedUuidCount, XrUuid* persistedUuids) { type = XrStructureType.SpatialDiscoveryPersistenceUuidFilterEXT; this.next = next; this.persistedUuidCount = persistedUuidCount; this.persistedUuids = persistedUuids; } public unsafe XrSpatialDiscoveryPersistenceUuidFilterEXT(uint persistedUuidCount, XrUuid* persistedUuids) : this(null, persistedUuidCount, persistedUuids) { } public unsafe XrSpatialDiscoveryPersistenceUuidFilterEXT(void* next, NativeArray persistedUuids) : this(next, (uint)persistedUuids.Length, (XrUuid*)NativeArrayUnsafeUtility.GetUnsafePtr(persistedUuids)) { }//IL_0009: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialDiscoveryPersistenceUuidFilterEXT(NativeArray persistedUuids) : this((uint)persistedUuids.Length, (XrUuid*)NativeArrayUnsafeUtility.GetUnsafePtr(persistedUuids)) { }//IL_0008: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialDiscoveryPersistenceUuidFilterEXT(void* next, ReadOnly persistedUuids) : this(next, (uint)persistedUuids.Length, (XrUuid*)NativeArrayUnsafeUtility.GetUnsafeReadOnlyPtr(persistedUuids)) { }//IL_0009: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialDiscoveryPersistenceUuidFilterEXT(ReadOnly persistedUuids) : this((uint)persistedUuids.Length, (XrUuid*)NativeArrayUnsafeUtility.GetUnsafeReadOnlyPtr(persistedUuids)) { }//IL_0008: Unknown result type (might be due to invalid IL or missing references) } public readonly struct XrSpatialPersistenceContextCreateInfoEXT { public XrStructureType type { get; } public unsafe void* next { get; } public XrSpatialPersistenceScopeEXT scope { get; } public unsafe XrSpatialPersistenceContextCreateInfoEXT(void* next, XrSpatialPersistenceScopeEXT scope) { type = XrStructureType.SpatialPersistenceContextCreateInfoEXT; this.next = next; this.scope = scope; } public XrSpatialPersistenceContextCreateInfoEXT(XrSpatialPersistenceScopeEXT scope) : this(null, scope) { } } public readonly struct XrSpatialPersistenceDataEXT : IEquatable { public XrUuid persistUuid { get; } public XrSpatialPersistenceStateEXT persistState { get; } public XrSpatialPersistenceDataEXT(XrUuid persistUuid, XrSpatialPersistenceStateEXT persistState) { this.persistUuid = persistUuid; this.persistState = persistState; } public bool Equals(XrSpatialPersistenceDataEXT other) { if (persistUuid.Equals(other.persistUuid)) { return persistState == other.persistState; } return false; } public override bool Equals(object obj) { if (obj is XrSpatialPersistenceDataEXT other) { return Equals(other); } return false; } public override int GetHashCode() { return HashCode.Combine(persistUuid, (int)persistState); } } public enum XrSpatialPersistenceScopeEXT { SystemManaged = 1, LocalAnchors = 1000781000 } public struct XrPersistSpatialEntityCompletionEXT { public static XrPersistSpatialEntityCompletionEXT defaultValue => new XrPersistSpatialEntityCompletionEXT(XrResult.Success, XrSpatialPersistenceContextResultEXT.Success, XrUuid.empty); public XrStructureType type { get; } public unsafe void* next { get; set; } public XrResult futureResult { get; set; } public XrSpatialPersistenceContextResultEXT persistResult { get; set; } public XrUuid persistUuid { get; set; } public unsafe XrPersistSpatialEntityCompletionEXT(void* next, XrResult futureResult, XrSpatialPersistenceContextResultEXT persistResult, XrUuid persistUuid) { type = XrStructureType.PersistSpatialEntityCompletionEXT; this.next = next; this.futureResult = futureResult; this.persistResult = persistResult; this.persistUuid = persistUuid; } public XrPersistSpatialEntityCompletionEXT(XrResult futureResult, XrSpatialPersistenceContextResultEXT persistResult, XrUuid persistUuid) : this(null, futureResult, persistResult, persistUuid) { } } public readonly struct XrSpatialEntityPersistInfoEXT { public XrStructureType type { get; } public unsafe void* next { get; } public ulong spatialContext { get; } public ulong spatialEntityId { get; } public unsafe XrSpatialEntityPersistInfoEXT(void* next, ulong spatialContext, ulong spatialEntityId) { type = XrStructureType.SpatialEntityPersistInfoEXT; this.next = next; this.spatialContext = spatialContext; this.spatialEntityId = spatialEntityId; } public XrSpatialEntityPersistInfoEXT(ulong spatialContext, ulong spatialEntityId) : this(null, spatialContext, spatialEntityId) { } } public readonly struct XrSpatialEntityUnpersistInfoEXT { public XrStructureType type { get; } public unsafe void* next { get; } public XrUuid persistUuid { get; } public unsafe XrSpatialEntityUnpersistInfoEXT(void* next, XrUuid persistUuid) { type = XrStructureType.SpatialEntityUnpersistInfoEXT; this.next = next; this.persistUuid = persistUuid; } public XrSpatialEntityUnpersistInfoEXT(XrUuid persistUuid) : this(null, persistUuid) { } } public struct XrUnpersistSpatialEntityCompletionEXT { public static XrUnpersistSpatialEntityCompletionEXT defaultValue => new XrUnpersistSpatialEntityCompletionEXT(XrResult.Success, XrSpatialPersistenceContextResultEXT.Success); public XrStructureType type { get; } public unsafe void* next { get; set; } public XrResult futureResult { get; set; } public XrSpatialPersistenceContextResultEXT unpersistResult { get; set; } public unsafe XrUnpersistSpatialEntityCompletionEXT(void* next, XrResult futureResult, XrSpatialPersistenceContextResultEXT unpersistResult) { type = XrStructureType.UnpersistSpatialEntityCompletionEXT; this.next = next; this.futureResult = futureResult; this.unpersistResult = unpersistResult; } public XrUnpersistSpatialEntityCompletionEXT(XrResult futureResult, XrSpatialPersistenceContextResultEXT unpersistResult) : this(null, futureResult, unpersistResult) { } } public enum XrSpatialPlaneAlignmentEXT { HorizontalUpward, HorizontalDownward, Vertical, Arbitrary } public enum XrSpatialPlaneSemanticLabelEXT { Uncategorized = 1, Floor, Wall, Ceiling, Table } public readonly struct XrSpatialCapabilityConfigurationPlaneTrackingEXT : ISpatialCapabilityConfiguration { public XrStructureType type { get; } public unsafe void* next { get; } public XrSpatialCapabilityEXT capability { get; } public uint enabledComponentCount { get; } public unsafe XrSpatialComponentTypeEXT* enabledComponents { get; } public unsafe XrSpatialCapabilityConfigurationPlaneTrackingEXT(void* next, uint enabledComponentCount, XrSpatialComponentTypeEXT* enabledComponents) { type = XrStructureType.SpatialCapabilityConfigurationPlaneTrackingEXT; this.next = next; capability = XrSpatialCapabilityEXT.PlaneTracking; this.enabledComponentCount = enabledComponentCount; this.enabledComponents = enabledComponents; } public unsafe XrSpatialCapabilityConfigurationPlaneTrackingEXT(uint enabledComponentCount, XrSpatialComponentTypeEXT* enabledComponents) : this(null, enabledComponentCount, enabledComponents) { } public unsafe XrSpatialCapabilityConfigurationPlaneTrackingEXT(void* next, NativeArray enabledComponents) : this(next, (uint)enabledComponents.Length, (XrSpatialComponentTypeEXT*)NativeArrayUnsafeUtility.GetUnsafePtr(enabledComponents)) { }//IL_0009: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialCapabilityConfigurationPlaneTrackingEXT(NativeArray enabledComponents) : this(null, (uint)enabledComponents.Length, (XrSpatialComponentTypeEXT*)NativeArrayUnsafeUtility.GetUnsafePtr(enabledComponents)) { }//IL_000a: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialCapabilityConfigurationPlaneTrackingEXT(void* next, ReadOnly enabledComponents) : this(next, (uint)enabledComponents.Length, (XrSpatialComponentTypeEXT*)NativeArrayUnsafeUtility.GetUnsafeReadOnlyPtr(enabledComponents)) { }//IL_0009: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialCapabilityConfigurationPlaneTrackingEXT(ReadOnly enabledComponents) : this(null, (uint)enabledComponents.Length, (XrSpatialComponentTypeEXT*)NativeArrayUnsafeUtility.GetUnsafeReadOnlyPtr(enabledComponents)) { }//IL_000a: Unknown result type (might be due to invalid IL or missing references) } public readonly struct XrSpatialComponentMesh2DListEXT { public XrStructureType type { get; } public unsafe void* next { get; } public uint meshCount { get; } public unsafe XrSpatialMeshDataEXT* meshes { get; } public unsafe XrSpatialComponentMesh2DListEXT(void* next, uint meshCount, XrSpatialMeshDataEXT* meshes) { type = XrStructureType.SpatialComponentMesh2DListEXT; this.next = next; this.meshCount = meshCount; this.meshes = meshes; } public unsafe XrSpatialComponentMesh2DListEXT(uint meshCount, XrSpatialMeshDataEXT* meshes) : this(null, meshCount, meshes) { } public unsafe XrSpatialComponentMesh2DListEXT(void* next, NativeArray meshes) : this(next, (uint)meshes.Length, (XrSpatialMeshDataEXT*)NativeArrayUnsafeUtility.GetUnsafePtr(meshes)) { }//IL_0009: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialComponentMesh2DListEXT(NativeArray meshes) : this(null, (uint)meshes.Length, (XrSpatialMeshDataEXT*)NativeArrayUnsafeUtility.GetUnsafePtr(meshes)) { }//IL_000a: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialComponentMesh2DListEXT(void* next, ReadOnly meshes) : this(next, (uint)meshes.Length, (XrSpatialMeshDataEXT*)NativeArrayUnsafeUtility.GetUnsafeReadOnlyPtr(meshes)) { }//IL_0009: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialComponentMesh2DListEXT(ReadOnly meshes) : this(null, (uint)meshes.Length, (XrSpatialMeshDataEXT*)NativeArrayUnsafeUtility.GetUnsafeReadOnlyPtr(meshes)) { }//IL_000a: Unknown result type (might be due to invalid IL or missing references) } public readonly struct XrSpatialComponentPlaneAlignmentListEXT { public XrStructureType type { get; } public unsafe void* next { get; } public uint planeAlignmentCount { get; } public unsafe XrSpatialPlaneAlignmentEXT* planeAlignments { get; } public unsafe XrSpatialComponentPlaneAlignmentListEXT(void* next, uint planeAlignmentCount, XrSpatialPlaneAlignmentEXT* planeAlignments) { type = XrStructureType.SpatialComponentPlaneAlignmentListEXT; this.next = next; this.planeAlignmentCount = planeAlignmentCount; this.planeAlignments = planeAlignments; } public unsafe XrSpatialComponentPlaneAlignmentListEXT(uint planeAlignmentCount, XrSpatialPlaneAlignmentEXT* planeAlignments) : this(null, planeAlignmentCount, planeAlignments) { } public unsafe XrSpatialComponentPlaneAlignmentListEXT(void* next, NativeArray planeAlignments) : this(next, (uint)planeAlignments.Length, (XrSpatialPlaneAlignmentEXT*)NativeArrayUnsafeUtility.GetUnsafePtr(planeAlignments)) { }//IL_0009: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialComponentPlaneAlignmentListEXT(NativeArray planeAlignments) : this(null, (uint)planeAlignments.Length, (XrSpatialPlaneAlignmentEXT*)NativeArrayUnsafeUtility.GetUnsafePtr(planeAlignments)) { }//IL_000a: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialComponentPlaneAlignmentListEXT(void* next, ReadOnly planeAlignments) : this(next, (uint)planeAlignments.Length, (XrSpatialPlaneAlignmentEXT*)NativeArrayUnsafeUtility.GetUnsafeReadOnlyPtr(planeAlignments)) { }//IL_0009: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialComponentPlaneAlignmentListEXT(ReadOnly planeAlignments) : this(null, (uint)planeAlignments.Length, (XrSpatialPlaneAlignmentEXT*)NativeArrayUnsafeUtility.GetUnsafeReadOnlyPtr(planeAlignments)) { }//IL_000a: Unknown result type (might be due to invalid IL or missing references) } public readonly struct XrSpatialComponentPlaneSemanticLabelListEXT { public XrStructureType type { get; } public unsafe void* next { get; } public uint semanticLabelCount { get; } public unsafe XrSpatialPlaneSemanticLabelEXT* semanticLabels { get; } public unsafe XrSpatialComponentPlaneSemanticLabelListEXT(void* next, uint semanticLabelCount, XrSpatialPlaneSemanticLabelEXT* semanticLabels) { type = XrStructureType.SpatialComponentPlaneSemanticLabelListEXT; this.next = next; this.semanticLabelCount = semanticLabelCount; this.semanticLabels = semanticLabels; } public unsafe XrSpatialComponentPlaneSemanticLabelListEXT(uint semanticLabelCount, XrSpatialPlaneSemanticLabelEXT* semanticLabels) : this(null, semanticLabelCount, semanticLabels) { } public unsafe XrSpatialComponentPlaneSemanticLabelListEXT(void* next, NativeArray semanticLabels) : this(next, (uint)semanticLabels.Length, (XrSpatialPlaneSemanticLabelEXT*)NativeArrayUnsafeUtility.GetUnsafePtr(semanticLabels)) { }//IL_0009: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialComponentPlaneSemanticLabelListEXT(NativeArray semanticLabels) : this(null, (uint)semanticLabels.Length, (XrSpatialPlaneSemanticLabelEXT*)NativeArrayUnsafeUtility.GetUnsafePtr(semanticLabels)) { }//IL_000a: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialComponentPlaneSemanticLabelListEXT(void* next, ReadOnly semanticLabels) : this(next, (uint)semanticLabels.Length, (XrSpatialPlaneSemanticLabelEXT*)NativeArrayUnsafeUtility.GetUnsafeReadOnlyPtr(semanticLabels)) { }//IL_0009: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialComponentPlaneSemanticLabelListEXT(ReadOnly semanticLabels) : this(null, (uint)semanticLabels.Length, (XrSpatialPlaneSemanticLabelEXT*)NativeArrayUnsafeUtility.GetUnsafeReadOnlyPtr(semanticLabels)) { }//IL_000a: Unknown result type (might be due to invalid IL or missing references) } public readonly struct XrSpatialComponentPolygon2DListEXT { public XrStructureType type { get; } public unsafe void* next { get; } public uint polygonCount { get; } public unsafe XrSpatialPolygon2DDataEXT* polygons { get; } public unsafe XrSpatialComponentPolygon2DListEXT(void* next, uint polygonCount, XrSpatialPolygon2DDataEXT* polygons) { type = XrStructureType.SpatialComponentPolygon2DListEXT; this.next = next; this.polygonCount = polygonCount; this.polygons = polygons; } public unsafe XrSpatialComponentPolygon2DListEXT(uint polygonCount, XrSpatialPolygon2DDataEXT* polygons) : this(null, polygonCount, polygons) { } public unsafe XrSpatialComponentPolygon2DListEXT(void* next, NativeArray polygons) : this(next, (uint)polygons.Length, (XrSpatialPolygon2DDataEXT*)NativeArrayUnsafeUtility.GetUnsafePtr(polygons)) { }//IL_0009: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialComponentPolygon2DListEXT(NativeArray polygons) : this(null, (uint)polygons.Length, (XrSpatialPolygon2DDataEXT*)NativeArrayUnsafeUtility.GetUnsafePtr(polygons)) { }//IL_000a: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialComponentPolygon2DListEXT(void* next, ReadOnly polygons) : this(next, (uint)polygons.Length, (XrSpatialPolygon2DDataEXT*)NativeArrayUnsafeUtility.GetUnsafeReadOnlyPtr(polygons)) { }//IL_0009: Unknown result type (might be due to invalid IL or missing references) public unsafe XrSpatialComponentPolygon2DListEXT(ReadOnly polygons) : this(null, (uint)polygons.Length, (XrSpatialPolygon2DDataEXT*)NativeArrayUnsafeUtility.GetUnsafeReadOnlyPtr(polygons)) { }//IL_000a: Unknown result type (might be due to invalid IL or missing references) } public readonly struct XrSpatialPolygon2DDataEXT : IEquatable { public XrPosef origin { get; } public XrSpatialBufferEXT vertexBuffer { get; } public XrSpatialPolygon2DDataEXT(XrPosef origin, XrSpatialBufferEXT vertexBuffer) { this.origin = origin; this.vertexBuffer = vertexBuffer; } public bool Equals(XrSpatialPolygon2DDataEXT other) { if (origin.Equals(other.origin)) { return vertexBuffer.Equals(other.vertexBuffer); } return false; } public override bool Equals(object obj) { if (obj is XrSpatialPolygon2DDataEXT other) { return Equals(other); } return false; } public override int GetHashCode() { return HashCode.Combine(origin, vertexBuffer); } } public readonly struct XrBoxf : IEquatable { public XrPosef center { get; } public XrExtent3Df extents { get; } public XrBoxf(XrPosef center, XrExtent3Df extents) { this.center = center; this.extents = extents; } public bool Equals(XrBoxf other) { if (center.Equals(other.center)) { return extents.Equals(other.extents); } return false; } public override bool Equals(object obj) { if (obj is XrBoxf other) { return Equals(other); } return false; } public override int GetHashCode() { return HashCode.Combine(center, extents); } } public readonly struct XrExtent3Df : IEquatable { public float width { get; } public float height { get; } public float depth { get; } public XrExtent3Df(float width, float height, float depth) { this.width = width; this.height = height; this.depth = depth; } public bool Equals(XrExtent3Df other) { if (width.Equals(other.width) && height.Equals(other.height)) { return depth.Equals(other.depth); } return false; } public override bool Equals(object obj) { if (obj is XrExtent3Df other) { return Equals(other); } return false; } public override int GetHashCode() { return HashCode.Combine(width, height, depth); } } [Serializable] public readonly struct XrUuid : IEquatable { public static XrUuid empty => new XrUuid(0uL, 0uL); public ulong dataPart1 { get; } public ulong dataPart2 { get; } public XrUuid(ulong dataPart1, ulong dataPart2) { this.dataPart1 = dataPart1; this.dataPart2 = dataPart2; } public bool Equals(XrUuid other) { if (dataPart1 == other.dataPart1) { return dataPart2 == other.dataPart2; } return false; } public override string ToString() { return $"{dataPart1:X16}-{dataPart2:X16}"; } } } namespace UnityEngine.XR.OpenXR.Input { [StructLayout(LayoutKind.Sequential, Size = 1)] public struct Haptic { } [Preserve] public class HapticControl : InputControl { public HapticControl() { ((InputStateBlock)(ref ((InputControl)this).m_StateBlock)).sizeInBits = 1u; ((InputStateBlock)(ref ((InputControl)this).m_StateBlock)).bitOffset = 0u; ((InputStateBlock)(ref ((InputControl)this).m_StateBlock)).byteOffset = 0u; } public unsafe override Haptic ReadUnprocessedValueFromState(void* statePtr) { return default(Haptic); } } [Preserve] [InputControlLayout(displayName = "OpenXR Action Map")] public abstract class OpenXRDevice : InputDevice { protected override void FinishSetup() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) ((InputControl)this).FinishSetup(); InputDeviceDescription description = ((InputDevice)this).description; XRDeviceDescriptor val = XRDeviceDescriptor.FromJson(((InputDeviceDescription)(ref description)).capabilities); if (val != null) { if ((val.characteristics & 0x100) != 0) { InputSystem.SetDeviceUsage((InputDevice)(object)this, CommonUsages.LeftHand); } else if ((val.characteristics & 0x200) != 0) { InputSystem.SetDeviceUsage((InputDevice)(object)this, CommonUsages.RightHand); } } } } [Preserve] [InputControlLayout(displayName = "OpenXR HMD")] internal class OpenXRHmd : XRHMD { [Preserve] [InputControl] private ButtonControl userPresence { get; set; } protected override void FinishSetup() { ((XRHMD)this).FinishSetup(); userPresence = ((InputControl)this).GetChildControl("UserPresence"); } } public static class OpenXRInput { [StructLayout(LayoutKind.Explicit)] private struct SerializedGuid { [FieldOffset(0)] public Guid guid; [FieldOffset(0)] public ulong ulong1; [FieldOffset(8)] public ulong ulong2; } internal struct SerializedBinding { public ulong actionId; public string path; } [Flags] public enum InputSourceNameFlags { UserPath = 1, InteractionProfile = 2, Component = 4, All = 7 } [StructLayout(LayoutKind.Explicit, Size = 12)] private struct GetInternalDeviceIdCommand : IInputDeviceCommandInfo { private const int k_BaseCommandSizeSize = 8; private const int k_Size = 12; [FieldOffset(0)] private InputDeviceCommand baseCommand; [FieldOffset(8)] public readonly uint deviceId; private static FourCC Type => new FourCC('X', 'R', 'D', 'I'); public FourCC typeStatic => Type; public static GetInternalDeviceIdCommand Create() { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) return new GetInternalDeviceIdCommand { baseCommand = new InputDeviceCommand(Type, 12) }; } } private static readonly Dictionary ExpectedControlTypeToActionType = new Dictionary { ["Digital"] = OpenXRInteractionFeature.ActionType.Binary, ["Button"] = OpenXRInteractionFeature.ActionType.Binary, ["Axis"] = OpenXRInteractionFeature.ActionType.Axis1D, ["Integer"] = OpenXRInteractionFeature.ActionType.Axis1D, ["Analog"] = OpenXRInteractionFeature.ActionType.Axis1D, ["Vector2"] = OpenXRInteractionFeature.ActionType.Axis2D, ["Dpad"] = OpenXRInteractionFeature.ActionType.Axis2D, ["Stick"] = OpenXRInteractionFeature.ActionType.Axis2D, ["Pose"] = OpenXRInteractionFeature.ActionType.Pose, ["Vector3"] = OpenXRInteractionFeature.ActionType.Pose, ["Quaternion"] = OpenXRInteractionFeature.ActionType.Pose, ["Haptic"] = OpenXRInteractionFeature.ActionType.Vibrate }; private const string s_devicePoseActionName = "devicepose"; private const string s_pointerActionName = "pointer"; private static readonly Dictionary kVirtualControlMap = new Dictionary { ["deviceposition"] = "devicepose", ["devicerotation"] = "devicepose", ["trackingstate"] = "devicepose", ["istracked"] = "devicepose", ["pointerposition"] = "pointer", ["pointerrotation"] = "pointer" }; private const string Library = "UnityOpenXR"; internal static void RegisterLayouts() { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) InputSystem.RegisterLayout("Haptic", (InputDeviceMatcher?)null); InputSystem.RegisterLayout((string)null, (InputDeviceMatcher?)null); InputDeviceMatcher val = default(InputDeviceMatcher); val = ((InputDeviceMatcher)(ref val)).WithInterface("^(XRInput)", true); val = ((InputDeviceMatcher)(ref val)).WithProduct("Head Tracking - OpenXR", true); InputSystem.RegisterLayout((string)null, (InputDeviceMatcher?)((InputDeviceMatcher)(ref val)).WithManufacturer("OpenXR", true)); OpenXRInteractionFeature.RegisterLayouts(); } private static bool ValidateActionMapConfig(OpenXRInteractionFeature interactionFeature, OpenXRInteractionFeature.ActionMapConfig actionMapConfig) { bool result = true; if (actionMapConfig.deviceInfos == null || actionMapConfig.deviceInfos.Count == 0) { Debug.LogError((object)$"ActionMapConfig contains no `deviceInfos` in InteractionFeature '{((object)interactionFeature).GetType()}'"); result = false; } if (actionMapConfig.actions == null || actionMapConfig.actions.Count == 0) { Debug.LogError((object)$"ActionMapConfig contains no `actions` in InteractionFeature '{((object)interactionFeature).GetType()}'"); result = false; } return result; } internal static void AttachActionSets() { List list = new List(); List list2 = new List(); IEnumerable source = from f in OpenXRSettings.Instance.features.OfType() where f.enabled select f; foreach (OpenXRInteractionFeature item in source.Where((OpenXRInteractionFeature f) => !f.IsAdditive)) { int count = list.Count; item.CreateActionMaps(list); for (int num = list.Count - 1; num >= count; num--) { if (!ValidateActionMapConfig(item, list[num])) { list.RemoveAt(num); } } } if (!RegisterDevices(list, isAdditive: false)) { return; } foreach (OpenXRInteractionFeature item2 in source.Where((OpenXRInteractionFeature f) => f.IsAdditive)) { item2.CreateActionMaps(list2); item2.AddAdditiveActions(list, list2[list2.Count - 1]); } Dictionary> dictionary = new Dictionary>(); if (!CreateActions(list, dictionary)) { return; } if (list2.Count > 0) { RegisterDevices(list2, isAdditive: true); CreateActions(list2, dictionary); } SetDpadBindingCustomValues(); foreach (KeyValuePair> item3 in dictionary) { if (!Internal_SuggestBindings(item3.Key, item3.Value.ToArray(), (uint)item3.Value.Count)) { OpenXRRuntime.LogLastError(); } } if (!Internal_AttachActionSets()) { OpenXRRuntime.LogLastError(); } } private static bool RegisterDevices(List actionMaps, bool isAdditive) { //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Expected I4, but got Unknown foreach (OpenXRInteractionFeature.ActionMapConfig actionMap in actionMaps) { foreach (OpenXRInteractionFeature.DeviceConfig deviceInfo in actionMap.deviceInfos) { string name = ((actionMap.desiredInteractionProfile == null) ? UserPathToDeviceName(deviceInfo.userPath) : actionMap.localizedName); if (Internal_RegisterDeviceDefinition(deviceInfo.userPath, actionMap.desiredInteractionProfile, isAdditive, (uint)(int)deviceInfo.characteristics, name, actionMap.manufacturer, actionMap.serialNumber) == 0L) { OpenXRRuntime.LogLastError(); return false; } } } return true; } private static bool CreateActions(List actionMaps, Dictionary> interactionProfiles) { foreach (OpenXRInteractionFeature.ActionMapConfig actionMap in actionMaps) { string localizedName = SanitizeStringForOpenXRPath(actionMap.localizedName); ulong num = Internal_CreateActionSet(SanitizeStringForOpenXRPath(actionMap.name), localizedName, default(SerializedGuid)); if (num == 0L) { OpenXRRuntime.LogLastError(); return false; } List list = actionMap.deviceInfos.Select((OpenXRInteractionFeature.DeviceConfig d) => d.userPath).ToList(); foreach (OpenXRInteractionFeature.ActionConfig action in actionMap.actions) { string[] array = action.bindings.Where((OpenXRInteractionFeature.ActionBinding b) => b.userPaths != null).SelectMany((OpenXRInteractionFeature.ActionBinding b) => b.userPaths).Distinct() .ToList() .Union(list) .ToArray(); ulong num2 = Internal_CreateAction(num, SanitizeStringForOpenXRPath(action.name), action.localizedName, (uint)action.type, default(SerializedGuid), array, (uint)array.Length, action.isAdditive, action.usages?.ToArray(), (uint)(action.usages?.Count ?? 0)); if (num2 == 0L) { OpenXRRuntime.LogLastError(); return false; } foreach (OpenXRInteractionFeature.ActionBinding binding in action.bindings) { foreach (string item in binding.userPaths ?? list) { string key = (action.isAdditive ? actionMap.desiredInteractionProfile : (binding.interactionProfileName ?? actionMap.desiredInteractionProfile)); if (!interactionProfiles.TryGetValue(key, out var value)) { value = (interactionProfiles[key] = new List()); } value.Add(new SerializedBinding { actionId = num2, path = item + binding.interactionPath }); } } } } return true; } private static void SetDpadBindingCustomValues() { DPadInteraction feature = OpenXRSettings.Instance.GetFeature(); if ((Object)(object)feature != (Object)null && feature.enabled) { Internal_SetDpadBindingCustomValues(isLeft: true, feature.forceThresholdLeft, feature.forceThresholdReleaseLeft, feature.centerRegionLeft, feature.wedgeAngleLeft, feature.isStickyLeft); Internal_SetDpadBindingCustomValues(isLeft: false, feature.forceThresholdRight, feature.forceThresholdReleaseRight, feature.centerRegionRight, feature.wedgeAngleRight, feature.isStickyRight); } } private static char SanitizeCharForOpenXRPath(char c) { if (char.IsLower(c) || char.IsDigit(c)) { return c; } if (char.IsUpper(c)) { return char.ToLower(c); } if (c == '-' || c == '.' || c == '_' || c == '/') { return c; } return '\0'; } private static string SanitizeStringForOpenXRPath(string input) { if (string.IsNullOrEmpty(input)) { return ""; } int i; for (i = 0; i < input.Length && SanitizeCharForOpenXRPath(input[i]) == input[i]; i++) { } if (i == input.Length) { return input; } StringBuilder stringBuilder = new StringBuilder(input, 0, i, input.Length); for (; i < input.Length; i++) { char c = SanitizeCharForOpenXRPath(input[i]); if (c != 0) { stringBuilder.Append(c); } } return stringBuilder.ToString(); } private static string GetActionHandleName(InputControl control) { InputControl val = control; while (val.parent != null && val.parent.parent != null) { val = val.parent; } string text = SanitizeStringForOpenXRPath(val.name); if (kVirtualControlMap.TryGetValue(text, out var value)) { return value; } return text; } public static void SendHapticImpulse(InputActionReference actionRef, float amplitude, float duration, InputDevice inputDevice = null) { SendHapticImpulse(actionRef, amplitude, 0f, duration, inputDevice); } public static void SendHapticImpulse(InputActionReference actionRef, float amplitude, float frequency, float duration, InputDevice inputDevice = null) { SendHapticImpulse(actionRef.action, amplitude, frequency, duration, inputDevice); } public static void SendHapticImpulse(InputAction action, float amplitude, float duration, InputDevice inputDevice = null) { SendHapticImpulse(action, amplitude, 0f, duration, inputDevice); } public static void SendHapticImpulse(InputAction action, float amplitude, float frequency, float duration, InputDevice inputDevice = null) { if (action != null) { ulong actionHandle = GetActionHandle(action, inputDevice); if (actionHandle != 0L) { amplitude = Mathf.Clamp(amplitude, 0f, 1f); duration = Mathf.Max(duration, 0f); Internal_SendHapticImpulse(GetDeviceId(inputDevice), actionHandle, amplitude, frequency, duration); } } } public static void StopHaptics(InputActionReference actionRef, InputDevice inputDevice = null) { if (!((Object)(object)actionRef == (Object)null)) { StopHaptics(actionRef.action, inputDevice); } } public static void SendHapticImpulse(InputDevice device, float amplitude, float frequency, float duration) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) if (((InputDevice)(ref device)).isValid) { Internal_SendHapticImpulseNoISX(GetDeviceId(device), amplitude, frequency, duration); } } public static void StopHapticImpulse(InputDevice device) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) if (((InputDevice)(ref device)).isValid) { Internal_StopHapticsNoISX(GetDeviceId(device)); } } public static void StopHaptics(InputAction inputAction, InputDevice inputDevice = null) { if (inputAction != null) { ulong actionHandle = GetActionHandle(inputAction, inputDevice); if (actionHandle != 0L) { Internal_StopHaptics(GetDeviceId(inputDevice), actionHandle); } } } public static bool TryGetInputSourceName(InputAction inputAction, int index, out string name, InputSourceNameFlags flags = InputSourceNameFlags.All, InputDevice inputDevice = null) { name = ""; if (index < 0) { return false; } ulong actionHandle = GetActionHandle(inputAction, inputDevice); if (actionHandle == 0L) { return false; } return Internal_TryGetInputSourceName(GetDeviceId(inputDevice), actionHandle, (uint)index, (uint)flags, out name); } public static bool GetActionIsActive(InputAction inputAction) { //IL_0004: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) if (inputAction != null && inputAction.controls.Count > 0 && inputAction.controls[0].device != null) { for (int i = 0; i < inputAction.controls.Count; i++) { uint deviceId = GetDeviceId(inputAction.controls[i].device); if (deviceId != 0) { string actionHandleName = GetActionHandleName(inputAction.controls[i]); if (Internal_GetActionIsActive(deviceId, actionHandleName)) { return true; } } } } return false; } public static bool GetActionIsActive(InputDevice device, InputFeatureUsage usage) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) return GetActionIsActive(device, ((InputFeatureUsage)(ref usage)).name); } public static bool GetActionIsActive(InputDevice device, string usageName) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) uint deviceId = GetDeviceId(device); if (deviceId == 0) { return false; } return Internal_GetActionIsActiveNoISX(deviceId, usageName); } public static bool TrySetControllerLateLatchAction(InputAction inputAction) { //IL_0004: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) if (inputAction == null || inputAction.controls.Count != 1) { return false; } if (inputAction.controls[0].device == null) { return false; } uint deviceId = GetDeviceId(inputAction.controls[0].device); if (deviceId == 0) { return false; } ulong actionHandle = GetActionHandle(inputAction); if (actionHandle == 0L) { return false; } return Internal_TrySetControllerLateLatchAction(deviceId, actionHandle); } public static bool TrySetControllerLateLatchAction(InputDevice device, InputFeatureUsage usage) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) return TrySetControllerLateLatchAction(device, ((InputFeatureUsage)(ref usage)).name); } public static bool TrySetControllerLateLatchAction(InputDevice device, string usageName) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) uint deviceId = GetDeviceId(device); if (deviceId == 0) { return false; } ulong actionHandle = GetActionHandle(device, usageName); if (actionHandle == 0L) { return false; } return Internal_TrySetControllerLateLatchAction(deviceId, actionHandle); } public static ulong GetActionHandle(InputDevice device, InputFeatureUsage usage) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) return GetActionHandle(device, ((InputFeatureUsage)(ref usage)).name); } public static ulong GetActionHandle(InputDevice device, string usageName) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) uint deviceId = GetDeviceId(device); if (deviceId == 0) { return 0uL; } return Internal_GetActionIdNoISX(deviceId, usageName); } public static ulong GetActionHandle(InputAction inputAction, InputDevice inputDevice = null) { //IL_0004: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) if (inputAction == null || inputAction.controls.Count == 0) { return 0uL; } Enumerator enumerator = inputAction.controls.GetEnumerator(); try { while (enumerator.MoveNext()) { InputControl current = enumerator.Current; if ((inputDevice != null && current.device != inputDevice) || current.device == null) { continue; } uint deviceId = GetDeviceId(current.device); if (deviceId != 0) { string actionHandleName = GetActionHandleName(current); ulong num = Internal_GetActionId(deviceId, actionHandleName); if (num != 0L) { return num; } } } } finally { ((IDisposable)enumerator/*cast due to .constrained prefix*/).Dispose(); } return 0uL; } private static uint GetDeviceId(InputDevice inputDevice) { if (inputDevice == null) { return 0u; } GetInternalDeviceIdCommand getInternalDeviceIdCommand = GetInternalDeviceIdCommand.Create(); if (inputDevice.ExecuteCommand(ref getInternalDeviceIdCommand) != 0L) { return getInternalDeviceIdCommand.deviceId; } return 0u; } private static uint GetDeviceId(InputDevice inputDevice) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) return Internal_GetDeviceId(((InputDevice)(ref inputDevice)).characteristics, ((InputDevice)(ref inputDevice)).name); } private static string UserPathToDeviceName(string userPath) { string[] array = userPath.Split('/', '_'); StringBuilder stringBuilder = new StringBuilder("OXR"); string[] array2 = array; foreach (string text in array2) { if (text.Length != 0) { string text2 = SanitizeStringForOpenXRPath(text); stringBuilder.Append(char.ToUpper(text2[0])); stringBuilder.Append(text2.Substring(1)); } } return stringBuilder.ToString(); } [DllImport("UnityOpenXR", CallingConvention = CallingConvention.Cdecl, EntryPoint = "OpenXRInputProvider_SetDpadBindingCustomValues")] private static extern void Internal_SetDpadBindingCustomValues([MarshalAs(UnmanagedType.I1)] bool isLeft, float forceThreshold, float forceThresholdReleased, float centerRegion, float wedgeAngle, [MarshalAs(UnmanagedType.I1)] bool isSticky); [DllImport("UnityOpenXR", CallingConvention = CallingConvention.Cdecl, EntryPoint = "OpenXRInputProvider_SendHapticImpulse")] private static extern void Internal_SendHapticImpulse(uint deviceId, ulong actionId, float amplitude, float frequency, float duration); [DllImport("UnityOpenXR", CallingConvention = CallingConvention.Cdecl, EntryPoint = "OpenXRInputProvider_SendHapticImpulseNoISX")] private static extern void Internal_SendHapticImpulseNoISX(uint deviceId, float amplitude, float frequency, float duration); [DllImport("UnityOpenXR", CallingConvention = CallingConvention.Cdecl, EntryPoint = "OpenXRInputProvider_StopHaptics")] private static extern void Internal_StopHaptics(uint deviceId, ulong actionId); [DllImport("UnityOpenXR", CallingConvention = CallingConvention.Cdecl, EntryPoint = "OpenXRInputProvider_StopHapticsNoISX")] private static extern void Internal_StopHapticsNoISX(uint deviceId); [DllImport("UnityOpenXR", EntryPoint = "OpenXRInputProvider_GetActionIdByControl")] private static extern ulong Internal_GetActionId(uint deviceId, string name); [DllImport("UnityOpenXR", CharSet = CharSet.Ansi, EntryPoint = "OpenXRInputProvider_GetActionIdByUsageName")] private static extern ulong Internal_GetActionIdNoISX(uint deviceId, string usageName); [DllImport("UnityOpenXR", CharSet = CharSet.Ansi, EntryPoint = "OpenXRInputProvider_TryGetInputSourceName")] [return: MarshalAs(UnmanagedType.U1)] private static extern bool Internal_TryGetInputSourceNamePtr(uint deviceId, ulong actionId, uint index, uint flags, out IntPtr outName); internal static bool Internal_TryGetInputSourceName(uint deviceId, ulong actionId, uint index, uint flags, out string outName) { if (!Internal_TryGetInputSourceNamePtr(deviceId, actionId, index, flags, out var outName2)) { outName = ""; return false; } outName = Marshal.PtrToStringAnsi(outName2); return true; } [DllImport("UnityOpenXR", EntryPoint = "OpenXRInputProvider_TrySetControllerLateLatchAction")] [return: MarshalAs(UnmanagedType.U1)] private static extern bool Internal_TrySetControllerLateLatchAction(uint deviceId, ulong actionId); [DllImport("UnityOpenXR", EntryPoint = "OpenXRInputProvider_GetActionIsActive")] [return: MarshalAs(UnmanagedType.U1)] private static extern bool Internal_GetActionIsActive(uint deviceId, string name); [DllImport("UnityOpenXR", CharSet = CharSet.Ansi, EntryPoint = "OpenXRInputProvider_GetActionIsActiveNoISX")] [return: MarshalAs(UnmanagedType.U1)] private static extern bool Internal_GetActionIsActiveNoISX(uint deviceId, string name); [DllImport("UnityOpenXR", CharSet = CharSet.Ansi, EntryPoint = "OpenXRInputProvider_RegisterDeviceDefinition")] private static extern ulong Internal_RegisterDeviceDefinition(string userPath, string interactionProfile, [MarshalAs(UnmanagedType.I1)] bool isAdditive, uint characteristics, string name, string manufacturer, string serialNumber); [DllImport("UnityOpenXR", CharSet = CharSet.Ansi, EntryPoint = "OpenXRInputProvider_CreateActionSet")] private static extern ulong Internal_CreateActionSet(string name, string localizedName, SerializedGuid guid); [DllImport("UnityOpenXR", CharSet = CharSet.Ansi, EntryPoint = "OpenXRInputProvider_CreateAction")] private static extern ulong Internal_CreateAction(ulong actionSetId, string name, string localizedName, uint actionType, SerializedGuid guid, string[] userPaths, uint userPathCount, [MarshalAs(UnmanagedType.I1)] bool isAdditive, string[] usages, uint usageCount); [DllImport("UnityOpenXR", CharSet = CharSet.Ansi, EntryPoint = "OpenXRInputProvider_SuggestBindings")] [return: MarshalAs(UnmanagedType.U1)] internal static extern bool Internal_SuggestBindings(string interactionProfile, SerializedBinding[] serializedBindings, uint serializedBindingCount); [DllImport("UnityOpenXR", CharSet = CharSet.Ansi, EntryPoint = "OpenXRInputProvider_AttachActionSets")] [return: MarshalAs(UnmanagedType.U1)] internal static extern bool Internal_AttachActionSets(); [DllImport("UnityOpenXR", CharSet = CharSet.Ansi, EntryPoint = "OpenXRInputProvider_GetDeviceId")] private static extern uint Internal_GetDeviceId(InputDeviceCharacteristics characteristics, string name); } [Obsolete("OpenXR.Input.Pose is deprecated, Please use UnityEngine.InputSystem.XR.PoseState instead", false)] public struct Pose { public bool isTracked { get; set; } public InputTrackingState trackingState { get; set; } public Vector3 position { get; set; } public Quaternion rotation { get; set; } public Vector3 velocity { get; set; } public Vector3 angularVelocity { get; set; } } [Obsolete("OpenXR.Input.PoseControl is deprecated. Please use UnityEngine.InputSystem.XR.PoseControl instead.", false)] public class PoseControl : InputControl { [Preserve] [InputControl(offset = 0u)] public ButtonControl isTracked { get; private set; } [Preserve] [InputControl(offset = 4u)] public IntegerControl trackingState { get; private set; } [Preserve] [InputControl(offset = 8u, noisy = true)] public Vector3Control position { get; private set; } [Preserve] [InputControl(offset = 20u, noisy = true)] public QuaternionControl rotation { get; private set; } [Preserve] [InputControl(offset = 36u, noisy = true)] public Vector3Control velocity { get; private set; } [Preserve] [InputControl(offset = 48u, noisy = true)] public Vector3Control angularVelocity { get; private set; } protected override void FinishSetup() { isTracked = ((InputControl)this).GetChildControl("isTracked"); trackingState = ((InputControl)this).GetChildControl("trackingState"); position = ((InputControl)this).GetChildControl("position"); rotation = ((InputControl)this).GetChildControl("rotation"); velocity = ((InputControl)this).GetChildControl("velocity"); angularVelocity = ((InputControl)this).GetChildControl("angularVelocity"); base.FinishSetup(); } public unsafe override Pose ReadUnprocessedValueFromState(void* statePtr) { //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) return new Pose { isTracked = (((InputControl)(object)isTracked).ReadUnprocessedValueFromState(statePtr) > 0.5f), trackingState = (InputTrackingState)((InputControl)(object)trackingState).ReadUnprocessedValueFromState(statePtr), position = ((InputControl)(object)position).ReadUnprocessedValueFromState(statePtr), rotation = ((InputControl)(object)rotation).ReadUnprocessedValueFromState(statePtr), velocity = ((InputControl)(object)velocity).ReadUnprocessedValueFromState(statePtr), angularVelocity = ((InputControl)(object)angularVelocity).ReadUnprocessedValueFromState(statePtr) }; } public unsafe override void WriteValueIntoState(Pose value, void* statePtr) { //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Expected I4, but got Unknown //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) InputControlExtensions.WriteValueIntoState((InputControl)(object)isTracked, value.isTracked, statePtr); InputControlExtensions.WriteValueIntoState((InputControl)(object)trackingState, (uint)(int)value.trackingState, statePtr); ((InputControl)(object)position).WriteValueIntoState(value.position, statePtr); ((InputControl)(object)rotation).WriteValueIntoState(value.rotation, statePtr); ((InputControl)(object)velocity).WriteValueIntoState(value.velocity, statePtr); ((InputControl)(object)angularVelocity).WriteValueIntoState(value.angularVelocity, statePtr); } } } namespace UnityEngine.XR.OpenXR.Features { public class AutomaticDynamicResolutionFeature : OpenXRFeature { public const float minResolutionScalarLimit = 0.05f; public const float maxResolutionScalarLimit = 2f; internal const string k_UIName = "Automatic Viewport Dynamic Resolution"; internal const string k_OpenXRRequestedExtensions = "XR_META_recommended_layer_resolution XR_ANDROID_recommended_resolution"; internal const string k_DynamicResolutionFeatureId = "com.unity.openxr.feature.ViewportDynamicResolution"; internal const float k_InitialMinResolutionScalar = 0.05f; internal const float k_InitialMaxResolutionScalar = 1f; [SerializeField] [Tooltip("Select the minimum resolution scalar.")] internal float m_MinResolutionScalar = 0.05f; [SerializeField] [Tooltip("Select the maximum resolution scalar.")] internal float m_MaxResolutionScalar = 1f; private const string k_Library = "UnityOpenXR"; public float minResolutionScalar { get { return m_MinResolutionScalar; } private set { if ((Object)(object)OpenXRLoaderBase.Instance != (Object)null) { if (value > m_MaxResolutionScalar) { m_MinResolutionScalar = m_MaxResolutionScalar; } else { m_MinResolutionScalar = value; } } } } public float maxResolutionScalar { get { return m_MaxResolutionScalar; } private set { if ((Object)(object)OpenXRLoaderBase.Instance != (Object)null) { if (value < m_MinResolutionScalar) { m_MaxResolutionScalar = m_MinResolutionScalar; } else { m_MaxResolutionScalar = value; } } } } public static bool usingSuggestedResolutionScale { get; private set; } = true; protected internal override bool OnInstanceCreate(ulong instance) { if (!base.enabled || !Internal_IsAutomaticDynamicResolutionScalingSupported()) { return false; } Internal_SetUsingSuggestedResolutionScale(usingSuggestedResolutionScale); Internal_SetMinMaxScalerResolution(minResolutionScalar, maxResolutionScalar); XRDisplaySubsystem firstDisplaySubsystem = GetFirstDisplaySubsystem(); if (firstDisplaySubsystem != null) { firstDisplaySubsystem.scaleOfAllRenderTargets = maxResolutionScalar; } RenderPipelineAsset currentRenderPipeline = GraphicsSettings.currentRenderPipeline; UniversalRenderPipelineAsset val = (UniversalRenderPipelineAsset)(object)((currentRenderPipeline is UniversalRenderPipelineAsset) ? currentRenderPipeline : null); if ((Object)(object)val != (Object)null) { val.renderScale = maxResolutionScalar; } return base.OnInstanceCreate(instance); } public static bool IsAutomaticDynamicResolutionScalingSupported() { return Internal_IsAutomaticDynamicResolutionScalingSupported(); } public static void SetUsingSuggestedResolutionScale(bool usingSuggestedScale) { usingSuggestedResolutionScale = usingSuggestedScale; Internal_SetUsingSuggestedResolutionScale(usingSuggestedScale); } private static XRDisplaySubsystem GetFirstDisplaySubsystem() { List list = new List(); SubsystemManager.GetSubsystems(list); if (list.Count == 0) { return null; } return list[0]; } [DllImport("UnityOpenXR", EntryPoint = "DynamicResolution_IsAutomaticDynamicResolutionScalingSupported")] [return: MarshalAs(UnmanagedType.U1)] private static extern bool Internal_IsAutomaticDynamicResolutionScalingSupported(); [DllImport("UnityOpenXR", EntryPoint = "DynamicResolution_SetMinMaxScalerResolution")] private static extern void Internal_SetMinMaxScalerResolution(float min, float max); [DllImport("UnityOpenXR", EntryPoint = "DynamicResolution_SetUsingSuggestedResolutionScale")] private static extern void Internal_SetUsingSuggestedResolutionScale([MarshalAs(UnmanagedType.I1)] bool usingSuggestedScale); } public class FoveatedRenderingFeature : OpenXRFeature { public const string featureId = "com.unity.openxr.feature.foveatedrendering"; [SerializeField] private bool enableSubsampledLayout; private const string Library = "UnityOpenXR"; public static bool isSubsampledLayoutEnabled { get; private set; } public static bool TrySetSubsampledLayoutEnabled(bool enableSubsampling) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Invalid comparison between Unknown and I4 if (enableSubsampling) { if ((int)SystemInfo.graphicsDeviceType != 21) { Debug.LogError((object)"Could not enable subsampling. Subsampled Layout is only supported on Vulkan graphics API."); return false; } if (!OpenXRRuntime.IsExtensionEnabled("XR_META_vulkan_swapchain_create_info")) { Debug.LogError((object)"$Could not enable Vulkan subsampling. OpenXR extension XR_META_vulkan_swapchain_create_info is not available on the current runtime."); return false; } } bool num = Internal_Unity_MetaSetSubsampledLayout(enableSubsampling) == XrResult.Success; if (num) { isSubsampledLayoutEnabled = enableSubsampling; } return num; } protected internal override bool OnInstanceCreate(ulong instance) { Internal_Unity_SetUseFoveatedRenderingLegacyMode((Object)(object)GraphicsSettings.defaultRenderPipeline == (Object)null); TrySetSubsampledLayoutEnabled(enableSubsampledLayout); return base.OnInstanceCreate(instance); } protected internal override IntPtr HookGetInstanceProcAddr(IntPtr func) { return Internal_Unity_intercept_xrGetInstanceProcAddr(func); } [DllImport("UnityOpenXR", EntryPoint = "UnityFoveation_intercept_xrGetInstanceProcAddr")] private static extern IntPtr Internal_Unity_intercept_xrGetInstanceProcAddr(IntPtr func); [DllImport("UnityOpenXR", EntryPoint = "UnityFoveation_SetUseFoveatedRenderingLegacyMode")] private static extern void Internal_Unity_SetUseFoveatedRenderingLegacyMode([MarshalAs(UnmanagedType.I1)] bool value); [DllImport("UnityOpenXR", EntryPoint = "UnityFoveation_GetUseFoveatedRenderingLegacyMode")] [return: MarshalAs(UnmanagedType.U1)] internal static extern bool Internal_Unity_GetUseFoveatedRenderingLegacyMode(); [DllImport("UnityOpenXR", EntryPoint = "MetaSetSubsampledLayout")] private static extern XrResult Internal_Unity_MetaSetSubsampledLayout([MarshalAs(UnmanagedType.U1)] bool enableSubsampling); } [Serializable] public abstract class OpenXRFeature : ScriptableObject { internal enum LoaderEvent { SubsystemCreate, SubsystemDestroy, SubsystemStart, SubsystemStop } internal enum NativeEvent { XrSetupConfigValues, XrSystemIdChanged, XrInstanceChanged, XrSessionChanged, XrBeginSession, XrSessionStateChanged, XrChangedSpaceApp, XrEndSession, XrDestroySession, XrDestroyInstance, XrIdle, XrReady, XrSynchronized, XrVisible, XrFocused, XrStopping, XrExiting, XrLossPending, XrInstanceLossPending, XrRestartRequested, XrRequestRestartLoop, XrRequestGetSystemLoop } [Flags] protected internal enum StatFlags { StatOptionNone = 0, ClearOnUpdate = 1, All = 1 } [FormerlySerializedAs("enabled")] [HideInInspector] [SerializeField] private bool m_enabled; [HideInInspector] [SerializeField] internal string nameUi; [HideInInspector] [SerializeField] internal string version; [HideInInspector] [SerializeField] internal string featureIdInternal; [HideInInspector] [SerializeField] internal string openxrExtensionStrings; [HideInInspector] [SerializeField] internal string company; [HideInInspector] [SerializeField] internal int priority; [HideInInspector] [SerializeField] internal string targetOpenXRApiVersion; [HideInInspector] [SerializeField] internal bool required; [HideInInspector] [SerializeField] internal string customRuntimeLoaderName; [NonSerialized] internal bool internalFieldsUpdated; private const string Library = "UnityOpenXR"; internal bool failedInitialization { get; private set; } internal static bool requiredFeatureFailed { get; private set; } public bool enabled { get { if (m_enabled) { if (!((Object)(object)OpenXRLoaderBase.Instance == (Object)null)) { return !failedInitialization; } return true; } return false; } set { if (enabled != value) { if ((Object)(object)OpenXRLoaderBase.Instance != (Object)null) { Debug.LogError((object)"OpenXRFeature.enabled cannot be changed while OpenXR is running"); return; } m_enabled = value; OnEnabledChange(); } } } protected static IntPtr xrGetInstanceProcAddr => Internal_GetProcAddressPtr(loaderDefault: false); protected internal virtual IntPtr HookGetInstanceProcAddr(IntPtr func) { return func; } protected internal virtual void OnSubsystemCreate() { } protected internal virtual void OnSubsystemStart() { } protected internal virtual void OnSubsystemStop() { } protected internal virtual void OnSubsystemDestroy() { } protected internal virtual bool OnInstanceCreate(ulong xrInstance) { return true; } protected internal virtual void OnSystemChange(ulong xrSystem) { } protected internal virtual void OnSessionCreate(ulong xrSession) { } protected internal virtual void OnAppSpaceChange(ulong xrSpace) { } protected internal virtual void OnSessionStateChange(int oldState, int newState) { } protected internal virtual void OnSessionBegin(ulong xrSession) { } protected internal virtual void OnSessionEnd(ulong xrSession) { } protected internal virtual void OnSessionExiting(ulong xrSession) { } protected internal virtual void OnSessionDestroy(ulong xrSession) { } protected internal virtual void OnInstanceDestroy(ulong xrInstance) { } protected internal virtual void OnSessionLossPending(ulong xrSession) { } protected internal virtual void OnInstanceLossPending(ulong xrInstance) { } protected internal virtual void OnFormFactorChange(int xrFormFactor) { } protected internal virtual void OnViewConfigurationTypeChange(int xrViewConfigurationType) { } protected internal virtual void OnEnvironmentBlendModeChange(XrEnvironmentBlendMode xrEnvironmentBlendMode) { } protected internal virtual void OnEnabledChange() { } protected static string PathToString(ulong path) { if (!Internal_PathToStringPtr(path, out var path2)) { return null; } return Marshal.PtrToStringAnsi(path2); } protected static ulong StringToPath(string str) { if (!Internal_StringToPath(str, out var pathId)) { return 0uL; } return pathId; } protected static ulong GetCurrentInteractionProfile(ulong userPath) { if (!Internal_GetCurrentInteractionProfile(userPath, out var interactionProfile)) { return 0uL; } return interactionProfile; } protected static ulong GetCurrentInteractionProfile(string userPath) { return GetCurrentInteractionProfile(StringToPath(userPath)); } protected static ulong GetCurrentAppSpace() { if (!Internal_GetAppSpace(out var appSpace)) { return 0uL; } return appSpace; } protected static int GetViewConfigurationTypeForRenderPass(int renderPassIndex) { return Internal_GetViewTypeFromRenderIndex(renderPassIndex); } protected static void SetEnvironmentBlendMode(XrEnvironmentBlendMode xrEnvironmentBlendMode) { Internal_SetEnvironmentBlendMode(xrEnvironmentBlendMode); } protected static XrEnvironmentBlendMode GetEnvironmentBlendMode() { return Internal_GetEnvironmentBlendMode(); } protected void CreateSubsystem(List descriptors, string id) where TDescriptor : ISubsystemDescriptor where TSubsystem : ISubsystem { if ((Object)(object)OpenXRLoaderBase.Instance == (Object)null) { Debug.LogError((object)"CreateSubsystem called before loader was initialized"); } else { OpenXRLoaderBase.Instance.CreateSubsystem(descriptors, id); } } protected void StartSubsystem() where T : class, ISubsystem { if ((Object)(object)OpenXRLoaderBase.Instance == (Object)null) { Debug.LogError((object)"StartSubsystem called before loader was initialized"); } else { OpenXRLoaderBase.Instance.StartSubsystem(); } } protected void StopSubsystem() where T : class, ISubsystem { if ((Object)(object)OpenXRLoaderBase.Instance == (Object)null) { Debug.LogError((object)"StopSubsystem called before loader was initialized"); } else { OpenXRLoaderBase.Instance.StopSubsystem(); } } protected void DestroySubsystem() where T : class, ISubsystem { if ((Object)(object)OpenXRLoaderBase.Instance == (Object)null) { Debug.LogError((object)"DestroySubsystem called before loader was initialized"); } else { OpenXRLoaderBase.Instance.DestroySubsystem(); } } protected virtual void OnEnable() { } protected virtual void OnDisable() { } protected virtual void Awake() { } internal static bool ReceiveLoaderEvent(OpenXRLoaderBase loader, LoaderEvent e) { OpenXRSettings instance = OpenXRSettings.Instance; if ((Object)(object)instance == (Object)null) { return true; } OpenXRFeature[] features = instance.features; foreach (OpenXRFeature openXRFeature in features) { if (!((Object)(object)openXRFeature == (Object)null) && openXRFeature.enabled) { switch (e) { case LoaderEvent.SubsystemCreate: openXRFeature.OnSubsystemCreate(); break; case LoaderEvent.SubsystemDestroy: openXRFeature.OnSubsystemDestroy(); break; case LoaderEvent.SubsystemStart: openXRFeature.OnSubsystemStart(); break; case LoaderEvent.SubsystemStop: openXRFeature.OnSubsystemStop(); break; default: throw new ArgumentOutOfRangeException("e", e, null); } } } return true; } internal static void ReceiveNativeEvent(NativeEvent e, ulong payload) { if ((Object)null == (Object)(object)OpenXRSettings.Instance) { return; } OpenXRFeature[] features = OpenXRSettings.Instance.features; foreach (OpenXRFeature openXRFeature in features) { if (!((Object)(object)openXRFeature == (Object)null) && openXRFeature.enabled) { switch (e) { case NativeEvent.XrSetupConfigValues: openXRFeature.OnFormFactorChange(Internal_GetFormFactor()); openXRFeature.OnEnvironmentBlendModeChange(Internal_GetEnvironmentBlendMode()); openXRFeature.OnViewConfigurationTypeChange(Internal_GetViewConfigurationType()); break; case NativeEvent.XrSystemIdChanged: openXRFeature.OnSystemChange(payload); break; case NativeEvent.XrInstanceChanged: openXRFeature.failedInitialization = !openXRFeature.OnInstanceCreate(payload); requiredFeatureFailed |= openXRFeature.required && openXRFeature.failedInitialization; break; case NativeEvent.XrSessionChanged: openXRFeature.OnSessionCreate(payload); break; case NativeEvent.XrBeginSession: openXRFeature.OnSessionBegin(payload); break; case NativeEvent.XrChangedSpaceApp: openXRFeature.OnAppSpaceChange(payload); break; case NativeEvent.XrSessionStateChanged: { Internal_GetSessionState(out var oldState, out var newState); openXRFeature.OnSessionStateChange(oldState, newState); break; } case NativeEvent.XrEndSession: openXRFeature.OnSessionEnd(payload); break; case NativeEvent.XrExiting: openXRFeature.OnSessionExiting(payload); break; case NativeEvent.XrDestroySession: openXRFeature.OnSessionDestroy(payload); break; case NativeEvent.XrDestroyInstance: openXRFeature.OnInstanceDestroy(payload); break; case NativeEvent.XrLossPending: openXRFeature.OnSessionLossPending(payload); break; case NativeEvent.XrInstanceLossPending: openXRFeature.OnInstanceLossPending(payload); break; } } } } internal static void Initialize() { requiredFeatureFailed = false; OpenXRSettings instance = OpenXRSettings.Instance; if ((Object)(object)instance == (Object)null || instance.features == null) { return; } OpenXRFeature[] features = instance.features; foreach (OpenXRFeature openXRFeature in features) { if ((Object)(object)openXRFeature != (Object)null) { openXRFeature.failedInitialization = false; } } } internal static void HookGetInstanceProcAddr() { IntPtr func = Internal_GetProcAddressPtr(loaderDefault: true); OpenXRSettings instance = OpenXRSettings.Instance; if ((Object)(object)instance != (Object)null && instance.features != null) { for (int num = instance.features.Length - 1; num >= 0; num--) { OpenXRFeature openXRFeature = instance.features[num]; if (!((Object)(object)openXRFeature == (Object)null) && openXRFeature.enabled) { func = openXRFeature.HookGetInstanceProcAddr(func); } } } Internal_SetProcAddressPtrAndLoadStage1(func); } protected ulong GetAction(InputAction inputAction) { return OpenXRInput.GetActionHandle(inputAction); } protected ulong GetAction(InputDevice device, InputFeatureUsage usage) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: Unknown result type (might be due to invalid IL or missing references) return OpenXRInput.GetActionHandle(device, usage); } protected ulong GetAction(InputDevice device, string usageName) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) return OpenXRInput.GetActionHandle(device, usageName); } protected internal static ulong RegisterStatsDescriptor(string statName, StatFlags statFlags) { return runtime_RegisterStatsDescriptor(statName, statFlags); } protected internal static void SetStatAsFloat(ulong statId, float value) { runtime_SetStatAsFloat(statId, value); } protected internal static void SetStatAsUInt(ulong statId, uint value) { runtime_SetStatAsUInt(statId, value); } [DllImport("UnityOpenXR", EntryPoint = "Internal_PathToString")] [return: MarshalAs(UnmanagedType.U1)] private static extern bool Internal_PathToStringPtr(ulong pathId, out IntPtr path); [DllImport("UnityOpenXR")] [return: MarshalAs(UnmanagedType.U1)] private static extern bool Internal_StringToPath([MarshalAs(UnmanagedType.LPStr)] string str, out ulong pathId); [DllImport("UnityOpenXR")] [return: MarshalAs(UnmanagedType.U1)] private static extern bool Internal_GetCurrentInteractionProfile(ulong pathId, out ulong interactionProfile); [DllImport("UnityOpenXR", EntryPoint = "NativeConfig_GetFormFactor")] private static extern int Internal_GetFormFactor(); [DllImport("UnityOpenXR", EntryPoint = "NativeConfig_GetViewConfigurationType")] private static extern int Internal_GetViewConfigurationType(); [DllImport("UnityOpenXR", EntryPoint = "NativeConfig_GetViewTypeFromRenderIndex")] private static extern int Internal_GetViewTypeFromRenderIndex(int renderPassIndex); [DllImport("UnityOpenXR", EntryPoint = "OpenXRInputProvider_GetXRSession")] [return: MarshalAs(UnmanagedType.U1)] internal static extern bool Internal_GetXRSession(out ulong xrSession); [DllImport("UnityOpenXR", EntryPoint = "session_GetSessionState")] private static extern void Internal_GetSessionState(out int oldState, out int newState); [DllImport("UnityOpenXR", EntryPoint = "NativeConfig_GetEnvironmentBlendMode")] private static extern XrEnvironmentBlendMode Internal_GetEnvironmentBlendMode(); [DllImport("UnityOpenXR", EntryPoint = "NativeConfig_SetEnvironmentBlendMode")] private static extern void Internal_SetEnvironmentBlendMode(XrEnvironmentBlendMode xrEnvironmentBlendMode); [DllImport("UnityOpenXR", EntryPoint = "OpenXRInputProvider_GetAppSpace")] [return: MarshalAs(UnmanagedType.U1)] internal static extern bool Internal_GetAppSpace(out ulong appSpace); [DllImport("UnityOpenXR", EntryPoint = "NativeConfig_GetProcAddressPtr")] internal static extern IntPtr Internal_GetProcAddressPtr([MarshalAs(UnmanagedType.I1)] bool loaderDefault); [DllImport("UnityOpenXR", EntryPoint = "NativeConfig_SetProcAddressPtrAndLoadStage1")] internal static extern void Internal_SetProcAddressPtrAndLoadStage1(IntPtr func); [DllImport("UnityOpenXR")] internal static extern ulong runtime_RegisterStatsDescriptor(string statName, StatFlags statFlags); [DllImport("UnityOpenXR")] internal static extern void runtime_SetStatAsFloat(ulong statId, float value); [DllImport("UnityOpenXR")] internal static extern void runtime_SetStatAsUInt(ulong statId, uint value); } [Serializable] public abstract class OpenXRInteractionFeature : OpenXRFeature { [Serializable] protected internal enum ActionType { Binary, Axis1D, Axis2D, Pose, Vibrate, Count } [Serializable] protected internal class ActionBinding { public string interactionProfileName; public string interactionPath; public List userPaths; } [Serializable] protected internal class ActionConfig { public string name; public ActionType type; public string localizedName; public List bindings; public List usages; public bool isAdditive; } protected internal class DeviceConfig { public InputDeviceCharacteristics characteristics; public string userPath; } [Serializable] protected internal class ActionMapConfig { public string name; public string localizedName; public List deviceInfos; public List actions; public string desiredInteractionProfile; public string manufacturer; public string serialNumber; } public static class UserPaths { public const string leftHand = "/user/hand/left"; public const string rightHand = "/user/hand/right"; public const string head = "/user/head"; public const string gamepad = "/user/gamepad"; public const string treadmill = "/user/treadmill"; } public enum InteractionProfileType { Device, XRController } private static List m_CreatedActionMaps = null; private static Dictionary> m_InteractionProfileEnabledMaps = new Dictionary>(); internal virtual bool IsAdditive => false; protected virtual void RegisterDeviceLayout() { } protected virtual void UnregisterDeviceLayout() { } protected virtual void RegisterActionMapsWithRuntime() { } protected internal override bool OnInstanceCreate(ulong xrSession) { RegisterDeviceLayout(); return true; } protected virtual InteractionProfileType GetInteractionProfileType() { return InteractionProfileType.XRController; } protected virtual string GetDeviceLayoutName() { return ""; } internal void CreateActionMaps(List configs) { m_CreatedActionMaps = configs; RegisterActionMapsWithRuntime(); m_CreatedActionMaps = null; } protected void AddActionMap(ActionMapConfig map) { if (map == null) { throw new ArgumentNullException("map"); } if (m_CreatedActionMaps == null) { throw new InvalidOperationException("ActionMap must be added from within the RegisterActionMapsWithRuntime method"); } m_CreatedActionMaps.Add(map); } internal virtual void AddAdditiveActions(List actionMaps, ActionMapConfig additiveMap) { } protected internal override void OnEnabledChange() { base.OnEnabledChange(); } internal static void RegisterLayouts() { OpenXRFeature[] features = OpenXRSettings.Instance.GetFeatures(); foreach (OpenXRFeature openXRFeature in features) { if (openXRFeature.enabled) { ((OpenXRInteractionFeature)openXRFeature).RegisterDeviceLayout(); } } } } public class SpaceWarpFeature : OpenXRFeature { public const string k_UiName = "Application SpaceWarp"; public const string k_OpenXRRequestedExtensions = "XR_FB_space_warp"; public const string k_SpaceWarpFeatureId = "com.unity.openxr.feature.spacewarp"; private const string k_Library = "UnityOpenXR"; protected internal override bool OnInstanceCreate(ulong xrInstance) { if (OpenXRRuntime.IsExtensionEnabled("XR_FB_space_warp")) { return base.OnInstanceCreate(xrInstance); } return false; } public static bool SetSpaceWarp(bool enabled) { return MetaSetSpaceWarp(enabled) == XrResult.Success; } public static bool SetAppSpacePosition(Vector3 position) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) return MetaSetAppSpacePosition(position.x, position.y, position.z) == XrResult.Success; } public static bool SetAppSpaceRotation(Quaternion rotation) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) return MetaSetAppSpaceRotation(rotation.x, rotation.y, rotation.z, rotation.w) == XrResult.Success; } [DllImport("UnityOpenXR")] private static extern XrResult MetaSetSpaceWarp([MarshalAs(UnmanagedType.I1)] bool enabled); [DllImport("UnityOpenXR")] private static extern XrResult MetaSetAppSpacePosition(float x, float y, float z); [DllImport("UnityOpenXR")] private static extern XrResult MetaSetAppSpaceRotation(float x, float y, float z, float w); } } namespace UnityEngine.XR.OpenXR.Features.Interactions { public class DPadInteraction : OpenXRInteractionFeature { [Preserve] [InputControlLayout(displayName = "D-Pad Binding (OpenXR)", commonUsages = new string[] { "LeftHand", "RightHand" })] public class DPad : XRController { [Preserve] [InputControl] public ButtonControl thumbstickDpadUp { get; private set; } [Preserve] [InputControl] public ButtonControl thumbstickDpadDown { get; private set; } [Preserve] [InputControl] public ButtonControl thumbstickDpadLeft { get; private set; } [Preserve] [InputControl] public ButtonControl thumbstickDpadRight { get; private set; } [Preserve] [InputControl] public ButtonControl trackpadDpadUp { get; private set; } [Preserve] [InputControl] public ButtonControl trackpadDpadDown { get; private set; } [Preserve] [InputControl] public ButtonControl trackpadDpadLeft { get; private set; } [Preserve] [InputControl] public ButtonControl trackpadDpadRight { get; private set; } [Preserve] [InputControl] public ButtonControl trackpadDpadCenter { get; private set; } protected override void FinishSetup() { ((XRController)this).FinishSetup(); thumbstickDpadUp = ((InputControl)this).GetChildControl("thumbstickDpadUp"); thumbstickDpadDown = ((InputControl)this).GetChildControl("thumbstickDpadDown"); thumbstickDpadLeft = ((InputControl)this).GetChildControl("thumbstickDpadLeft"); thumbstickDpadRight = ((InputControl)this).GetChildControl("thumbstickDpadRight"); trackpadDpadUp = ((InputControl)this).GetChildControl("trackpadDpadUp"); trackpadDpadDown = ((InputControl)this).GetChildControl("trackpadDpadDown"); trackpadDpadLeft = ((InputControl)this).GetChildControl("trackpadDpadLeft"); trackpadDpadRight = ((InputControl)this).GetChildControl("trackpadDpadRight"); trackpadDpadCenter = ((InputControl)this).GetChildControl("trackpadDpadCenter"); } } public const string featureId = "com.unity.openxr.feature.input.dpadinteraction"; public float forceThresholdLeft = 0.5f; public float forceThresholdReleaseLeft = 0.4f; public float centerRegionLeft = 0.5f; public float wedgeAngleLeft = MathF.PI / 2f; public bool isStickyLeft; public float forceThresholdRight = 0.5f; public float forceThresholdReleaseRight = 0.4f; public float centerRegionRight = 0.5f; public float wedgeAngleRight = MathF.PI / 2f; public bool isStickyRight; public const string thumbstickDpadUp = "/input/thumbstick/dpad_up"; public const string thumbstickDpadDown = "/input/thumbstick/dpad_down"; public const string thumbstickDpadLeft = "/input/thumbstick/dpad_left"; public const string thumbstickDpadRight = "/input/thumbstick/dpad_right"; public const string trackpadDpadUp = "/input/trackpad/dpad_up"; public const string trackpadDpadDown = "/input/trackpad/dpad_down"; public const string trackpadDpadLeft = "/input/trackpad/dpad_left"; public const string trackpadDpadRight = "/input/trackpad/dpad_right"; public const string trackpadDpadCenter = "/input/trackpad/dpad_center"; public const string profile = "/interaction_profiles/unity/dpad"; private const string kDeviceLocalizedName = "DPad Interaction OpenXR"; public string[] extensionStrings = new string[2] { "XR_KHR_binding_modification", "XR_EXT_dpad_binding" }; internal override bool IsAdditive => true; protected internal override bool OnInstanceCreate(ulong instance) { string[] array = extensionStrings; for (int i = 0; i < array.Length; i++) { if (!OpenXRRuntime.IsExtensionEnabled(array[i])) { return false; } } return base.OnInstanceCreate(instance); } protected override void RegisterDeviceLayout() { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) Type? typeFromHandle = typeof(DPad); InputDeviceMatcher val = default(InputDeviceMatcher); val = ((InputDeviceMatcher)(ref val)).WithInterface("^(XRInput)", true); InputSystem.RegisterLayout(typeFromHandle, (string)null, (InputDeviceMatcher?)((InputDeviceMatcher)(ref val)).WithProduct("DPad Interaction OpenXR", true)); } protected override void UnregisterDeviceLayout() { InputSystem.RemoveLayout("DPad"); } protected override string GetDeviceLayoutName() { return "DPad"; } protected override void RegisterActionMapsWithRuntime() { //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) ActionMapConfig map = new ActionMapConfig { name = "dpadinteraction", localizedName = "DPad Interaction OpenXR", desiredInteractionProfile = "/interaction_profiles/unity/dpad", manufacturer = "", serialNumber = "", deviceInfos = new List { new DeviceConfig { characteristics = (InputDeviceCharacteristics)356, userPath = "/user/hand/left" }, new DeviceConfig { characteristics = (InputDeviceCharacteristics)612, userPath = "/user/hand/right" } }, actions = new List { new ActionConfig { name = "thumbstickDpadUp", localizedName = " Thumbstick Dpad Up", type = ActionType.Binary, bindings = new List { new ActionBinding { interactionPath = "/input/thumbstick/dpad_up", interactionProfileName = "/interaction_profiles/unity/dpad" } }, isAdditive = true }, new ActionConfig { name = "thumbstickDpadDown", localizedName = "Thumbstick Dpad Down", type = ActionType.Binary, bindings = new List { new ActionBinding { interactionPath = "/input/thumbstick/dpad_down", interactionProfileName = "/interaction_profiles/unity/dpad" } }, isAdditive = true }, new ActionConfig { name = "thumbstickDpadLeft", localizedName = "Thumbstick Dpad Left", type = ActionType.Binary, bindings = new List { new ActionBinding { interactionPath = "/input/thumbstick/dpad_left", interactionProfileName = "/interaction_profiles/unity/dpad" } }, isAdditive = true }, new ActionConfig { name = "thumbstickDpadRight", localizedName = "Thumbstick Dpad Right", type = ActionType.Binary, bindings = new List { new ActionBinding { interactionPath = "/input/thumbstick/dpad_right", interactionProfileName = "/interaction_profiles/unity/dpad" } }, isAdditive = true }, new ActionConfig { name = "trackpadDpadUp", localizedName = "Trackpad Dpad Up", type = ActionType.Binary, bindings = new List { new ActionBinding { interactionPath = "/input/trackpad/dpad_up", interactionProfileName = "/interaction_profiles/unity/dpad" } }, isAdditive = true }, new ActionConfig { name = "trackpadDpadDown", localizedName = "Trackpad Dpad Down", type = ActionType.Binary, bindings = new List { new ActionBinding { interactionPath = "/input/trackpad/dpad_down", interactionProfileName = "/interaction_profiles/unity/dpad" } }, isAdditive = true }, new ActionConfig { name = "trackpadDpadLeft", localizedName = "Trackpad Dpad Left", type = ActionType.Binary, bindings = new List { new ActionBinding { interactionPath = "/input/trackpad/dpad_left", interactionProfileName = "/interaction_profiles/unity/dpad" } }, isAdditive = true }, new ActionConfig { name = "trackpadDpadRight", localizedName = "Trackpad Dpad Right", type = ActionType.Binary, bindings = new List { new ActionBinding { interactionPath = "/input/trackpad/dpad_right", interactionProfileName = "/interaction_profiles/unity/dpad" } }, isAdditive = true }, new ActionConfig { name = "trackpadDpadCenter", localizedName = "Trackpad Dpad Center", type = ActionType.Binary, bindings = new List { new ActionBinding { interactionPath = "/input/trackpad/dpad_center", interactionProfileName = "/interaction_profiles/unity/dpad" } }, isAdditive = true } } }; AddActionMap(map); } internal override void AddAdditiveActions(List actionMaps, ActionMapConfig additiveMap) { foreach (ActionMapConfig actionMap in actionMaps) { if (!actionMap.deviceInfos.Where((DeviceConfig d) => d.userPath != null && (string.CompareOrdinal(d.userPath, "/user/hand/left") == 0 || string.CompareOrdinal(d.userPath, "/user/hand/right") == 0)).Any()) { continue; } bool flag = false; bool flag2 = false; foreach (ActionConfig action in actionMap.actions) { if (!flag && action.bindings.FirstOrDefault((ActionBinding b) => b.interactionPath.Contains("trackpad")) != null) { flag = true; } if (!flag2 && action.bindings.FirstOrDefault((ActionBinding b) => b.interactionPath.Contains("thumbstick")) != null) { flag2 = true; } } foreach (ActionConfig item in additiveMap.actions.Where((ActionConfig a) => a.isAdditive)) { if ((flag && item.name.StartsWith("trackpad")) || (flag2 && item.name.StartsWith("thumbstick"))) { actionMap.actions.Add(item); } } } } } public class EyeGazeInteraction : OpenXRInteractionFeature { [Preserve] [InputControlLayout(displayName = "Eye Gaze (OpenXR)", isGenericTypeOfDevice = true)] public class EyeGazeDevice : OpenXRDevice { [Preserve] [InputControl(offset = 0u, usages = new string[] { "Device", "gaze" })] public PoseControl pose { get; private set; } protected override void FinishSetup() { base.FinishSetup(); pose = ((InputControl)this).GetChildControl("pose"); } } public const string featureId = "com.unity.openxr.feature.input.eyetracking"; private const string userPath = "/user/eyes_ext"; private const string profile = "/interaction_profiles/ext/eye_gaze_interaction"; private const string pose = "/input/gaze_ext/pose"; private const string kDeviceLocalizedName = "Eye Tracking OpenXR"; public const string extensionString = "XR_EXT_eye_gaze_interaction"; private const string layoutName = "EyeGaze"; protected internal override bool OnInstanceCreate(ulong instance) { if (!OpenXRRuntime.IsExtensionEnabled("XR_EXT_eye_gaze_interaction")) { return false; } return base.OnInstanceCreate(instance); } protected override void RegisterDeviceLayout() { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) Type? typeFromHandle = typeof(EyeGazeDevice); InputDeviceMatcher val = default(InputDeviceMatcher); val = ((InputDeviceMatcher)(ref val)).WithInterface("^(XRInput)", true); InputSystem.RegisterLayout(typeFromHandle, "EyeGaze", (InputDeviceMatcher?)((InputDeviceMatcher)(ref val)).WithProduct("Eye Tracking OpenXR", true)); } protected override void UnregisterDeviceLayout() { InputSystem.RemoveLayout("EyeGaze"); } protected override InteractionProfileType GetInteractionProfileType() { if (!typeof(EyeGazeDevice).IsSubclassOf(typeof(XRController))) { return InteractionProfileType.Device; } return InteractionProfileType.XRController; } protected override string GetDeviceLayoutName() { return "EyeGaze"; } protected override void RegisterActionMapsWithRuntime() { //IL_004b: Unknown result type (might be due to invalid IL or missing references) ActionMapConfig map = new ActionMapConfig { name = "eyegaze", localizedName = "Eye Tracking OpenXR", desiredInteractionProfile = "/interaction_profiles/ext/eye_gaze_interaction", manufacturer = "", serialNumber = "", deviceInfos = new List { new DeviceConfig { characteristics = (InputDeviceCharacteristics)49, userPath = "/user/eyes_ext" } }, actions = new List { new ActionConfig { name = "pose", localizedName = "Pose", type = ActionType.Pose, usages = new List { "Device", "gaze" }, bindings = new List { new ActionBinding { interactionPath = "/input/gaze_ext/pose", interactionProfileName = "/interaction_profiles/ext/eye_gaze_interaction" } } } } }; AddActionMap(map); } } public static class EyeTrackingUsages { public static InputFeatureUsage gazePosition = new InputFeatureUsage("gazePosition"); public static InputFeatureUsage gazeRotation = new InputFeatureUsage("gazeRotation"); } public class HandCommonPosesInteraction : OpenXRInteractionFeature { [Preserve] [InputControlLayout(displayName = "Hand Interaction Poses (OpenXR)", commonUsages = new string[] { "LeftHand", "RightHand" }, isGenericTypeOfDevice = true)] public class HandInteractionPoses : OpenXRDevice { [Preserve] [InputControl(offset = 0u, aliases = new string[] { "device", "gripPose" }, usage = "Device")] public PoseControl devicePose { get; private set; } [Preserve] [InputControl(offset = 0u, alias = "aimPose", usage = "Pointer")] public PoseControl pointer { get; private set; } [Preserve] [InputControl(offset = 0u)] public PoseControl pokePose { get; private set; } [Preserve] [InputControl(offset = 0u)] public PoseControl pinchPose { get; private set; } protected override void FinishSetup() { base.FinishSetup(); devicePose = ((InputControl)this).GetChildControl("devicePose"); pointer = ((InputControl)this).GetChildControl("pointer"); pokePose = ((InputControl)this).GetChildControl("pokePose"); pinchPose = ((InputControl)this).GetChildControl("pinchPose"); } } public const string featureId = "com.unity.openxr.feature.input.handinteractionposes"; public const string profile = "/interaction_profiles/unity/hand_interaction_poses"; public const string grip = "/input/grip/pose"; public const string aim = "/input/aim/pose"; public const string poke = "/input/poke_ext/pose"; public const string pinch = "/input/pinch_ext/pose"; private const string kDeviceLocalizedName = "Hand Interaction Poses OpenXR"; public const string extensionString = "XR_EXT_hand_interaction"; internal override bool IsAdditive => true; protected internal override bool OnInstanceCreate(ulong instance) { if (!OpenXRRuntime.IsExtensionEnabled("XR_EXT_hand_interaction")) { return false; } return base.OnInstanceCreate(instance); } protected override void RegisterDeviceLayout() { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) Type? typeFromHandle = typeof(HandInteractionPoses); InputDeviceMatcher val = default(InputDeviceMatcher); val = ((InputDeviceMatcher)(ref val)).WithInterface("^(XRInput)", true); InputSystem.RegisterLayout(typeFromHandle, (string)null, (InputDeviceMatcher?)((InputDeviceMatcher)(ref val)).WithProduct("Hand Interaction Poses OpenXR", true)); } protected override void UnregisterDeviceLayout() { InputSystem.RemoveLayout("HandInteractionPoses"); } protected override InteractionProfileType GetInteractionProfileType() { if (!typeof(HandInteractionPoses).IsSubclassOf(typeof(XRController))) { return InteractionProfileType.Device; } return InteractionProfileType.XRController; } protected override string GetDeviceLayoutName() { return "HandInteractionPoses"; } protected override void RegisterActionMapsWithRuntime() { //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) ActionMapConfig map = new ActionMapConfig { name = "handinteractionposes", localizedName = "Hand Interaction Poses OpenXR", desiredInteractionProfile = "/interaction_profiles/unity/hand_interaction_poses", manufacturer = "", serialNumber = "", deviceInfos = new List { new DeviceConfig { characteristics = (InputDeviceCharacteristics)364, userPath = "/user/hand/left" }, new DeviceConfig { characteristics = (InputDeviceCharacteristics)620, userPath = "/user/hand/right" } }, actions = new List { new ActionConfig { name = "devicePose", localizedName = "Device Pose", type = ActionType.Pose, usages = new List { "Device" }, bindings = new List { new ActionBinding { interactionPath = "/input/grip/pose", interactionProfileName = "/interaction_profiles/unity/hand_interaction_poses" } }, isAdditive = true }, new ActionConfig { name = "pointer", localizedName = "Pointer Pose", type = ActionType.Pose, usages = new List { "Pointer" }, bindings = new List { new ActionBinding { interactionPath = "/input/aim/pose", interactionProfileName = "/interaction_profiles/unity/hand_interaction_poses" } }, isAdditive = true }, new ActionConfig { name = "PokePose", localizedName = "Poke Pose", type = ActionType.Pose, bindings = new List { new ActionBinding { interactionPath = "/input/poke_ext/pose", interactionProfileName = "/interaction_profiles/unity/hand_interaction_poses" } }, isAdditive = true }, new ActionConfig { name = "PinchPose", localizedName = "Pinch Pose", type = ActionType.Pose, bindings = new List { new ActionBinding { interactionPath = "/input/pinch_ext/pose", interactionProfileName = "/interaction_profiles/unity/hand_interaction_poses" } }, isAdditive = true } } }; AddActionMap(map); } internal override void AddAdditiveActions(List actionMaps, ActionMapConfig additiveMap) { foreach (ActionMapConfig actionMap in actionMaps) { if (!actionMap.deviceInfos.Where((DeviceConfig d) => d.userPath != null && (string.CompareOrdinal(d.userPath, "/user/hand/left") == 0 || string.CompareOrdinal(d.userPath, "/user/hand/right") == 0)).Any()) { continue; } foreach (ActionConfig additiveAction in additiveMap.actions.Where((ActionConfig a) => a.isAdditive)) { bool flag = false; foreach (ActionConfig item in actionMap.actions.Where((ActionConfig m) => m.type == ActionType.Pose).Distinct().ToList()) { if (item.bindings.Where((ActionBinding b) => b.interactionPath != null && string.CompareOrdinal(b.interactionPath, additiveAction.bindings[0].interactionPath) == 0).Any()) { item.isAdditive = true; flag = true; } } if (!flag) { actionMap.actions.Add(additiveAction); } } } } } public class HandInteractionProfile : OpenXRInteractionFeature { [Preserve] [InputControlLayout(displayName = "Hand Interaction (OpenXR)", commonUsages = new string[] { "LeftHand", "RightHand" })] public class HandInteraction : XRController { [Preserve] [InputControl(offset = 0u, aliases = new string[] { "device", "gripPose" }, usage = "Device")] public PoseControl devicePose { get; private set; } [Preserve] [InputControl(offset = 0u, alias = "aimPose", usage = "Pointer")] public PoseControl pointer { get; private set; } [Preserve] [InputControl(offset = 0u, usage = "Poke")] public PoseControl pokePose { get; private set; } [Preserve] [InputControl(offset = 0u, usage = "Pinch")] public PoseControl pinchPose { get; private set; } [Preserve] [InputControl(usage = "PinchValue")] public AxisControl pinchValue { get; private set; } [Preserve] [InputControl(usage = "PinchTouched")] public ButtonControl pinchTouched { get; private set; } [Preserve] [InputControl(usage = "PinchReady")] public ButtonControl pinchReady { get; private set; } [Preserve] [InputControl(usage = "PointerActivateValue")] public AxisControl pointerActivateValue { get; private set; } [Preserve] [InputControl(usage = "PointerActivated")] public ButtonControl pointerActivated { get; private set; } [Preserve] [InputControl(usage = "PointerActivateReady")] public ButtonControl pointerActivateReady { get; private set; } [Preserve] [InputControl(usage = "GraspValue")] public AxisControl graspValue { get; private set; } [Preserve] [InputControl(usage = "GraspFirm")] public ButtonControl graspFirm { get; private set; } [Preserve] [InputControl(usage = "GraspReady")] public ButtonControl graspReady { get; private set; } [Preserve] [InputControl(offset = 2u)] public ButtonControl isTracked { get; private set; } [Preserve] [InputControl(offset = 4u)] public IntegerControl trackingState { get; private set; } [Preserve] [InputControl(offset = 8u, noisy = true, alias = "gripPosition")] public Vector3Control devicePosition { get; private set; } [Preserve] [InputControl(offset = 20u, noisy = true, alias = "gripRotation")] public QuaternionControl deviceRotation { get; private set; } [Preserve] [InputControl(offset = 68u, noisy = true)] public Vector3Control pointerPosition { get; private set; } [Preserve] [InputControl(offset = 80u, noisy = true)] public QuaternionControl pointerRotation { get; private set; } [Preserve] [InputControl(offset = 128u, noisy = true)] public Vector3Control pokePosition { get; private set; } [Preserve] [InputControl(offset = 140u, noisy = true)] public QuaternionControl pokeRotation { get; private set; } [Preserve] [InputControl(offset = 188u, noisy = true)] public Vector3Control pinchPosition { get; private set; } [Preserve] [InputControl(offset = 200u, noisy = true)] public QuaternionControl pinchRotation { get; private set; } protected override void FinishSetup() { ((XRController)this).FinishSetup(); devicePose = ((InputControl)this).GetChildControl("devicePose"); pointer = ((InputControl)this).GetChildControl("pointer"); pokePose = ((InputControl)this).GetChildControl("pokePose"); pinchPose = ((InputControl)this).GetChildControl("pinchPose"); pinchValue = ((InputControl)this).GetChildControl("pinchValue"); pinchTouched = ((InputControl)this).GetChildControl("pinchTouched"); pinchReady = ((InputControl)this).GetChildControl("pinchReady"); pointerActivateValue = ((InputControl)this).GetChildControl("pointerActivateValue"); pointerActivated = ((InputControl)this).GetChildControl("pointerActivated"); pointerActivateReady = ((InputControl)this).GetChildControl("pointerActivateReady"); graspValue = ((InputControl)this).GetChildControl("graspValue"); graspFirm = ((InputControl)this).GetChildControl("graspFirm"); graspReady = ((InputControl)this).GetChildControl("graspReady"); isTracked = ((InputControl)this).GetChildControl("isTracked"); trackingState = ((InputControl)this).GetChildControl("trackingState"); devicePosition = ((InputControl)this).GetChildControl("devicePosition"); deviceRotation = ((InputControl)this).GetChildControl("deviceRotation"); pointerPosition = ((InputControl)this).GetChildControl("pointerPosition"); pointerRotation = ((InputControl)this).GetChildControl("pointerRotation"); pokePosition = ((InputControl)this).GetChildControl("pokePosition"); pokeRotation = ((InputControl)this).GetChildControl("pokeRotation"); pinchPosition = ((InputControl)this).GetChildControl("pinchPosition"); pinchRotation = ((InputControl)this).GetChildControl("pinchRotation"); } } public const string featureId = "com.unity.openxr.feature.input.handinteraction"; public const string profile = "/interaction_profiles/ext/hand_interaction_ext"; public const string grip = "/input/grip/pose"; public const string aim = "/input/aim/pose"; public const string poke = "/input/poke_ext/pose"; public const string pinch = "/input/pinch_ext/pose"; public const string pinchValue = "/input/pinch_ext/value"; public const string pinchReady = "/input/pinch_ext/ready_ext"; public const string pointerActivateValue = "/input/aim_activate_ext/value"; public const string pointerActivateReady = "/input/aim_activate_ext/ready_ext"; public const string graspValue = "/input/grasp_ext/value"; public const string graspReady = "/input/grasp_ext/ready_ext"; private const string kDeviceLocalizedName = "Hand Interaction OpenXR"; public const string extensionString = "XR_EXT_hand_interaction"; protected internal override bool OnInstanceCreate(ulong instance) { if (!OpenXRRuntime.IsExtensionEnabled("XR_EXT_hand_interaction")) { return false; } return base.OnInstanceCreate(instance); } protected override void RegisterDeviceLayout() { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) Type? typeFromHandle = typeof(HandInteraction); InputDeviceMatcher val = default(InputDeviceMatcher); val = ((InputDeviceMatcher)(ref val)).WithInterface("^(XRInput)", true); InputSystem.RegisterLayout(typeFromHandle, (string)null, (InputDeviceMatcher?)((InputDeviceMatcher)(ref val)).WithProduct("Hand Interaction OpenXR", true)); } protected override void UnregisterDeviceLayout() { InputSystem.RemoveLayout("HandInteraction"); } protected override string GetDeviceLayoutName() { return "HandInteraction"; } protected override void RegisterActionMapsWithRuntime() { //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) ActionMapConfig map = new ActionMapConfig { name = "handinteraction", localizedName = "Hand Interaction OpenXR", desiredInteractionProfile = "/interaction_profiles/ext/hand_interaction_ext", manufacturer = "", serialNumber = "", deviceInfos = new List { new DeviceConfig { characteristics = (InputDeviceCharacteristics)300, userPath = "/user/hand/left" }, new DeviceConfig { characteristics = (InputDeviceCharacteristics)556, userPath = "/user/hand/right" } }, actions = new List { new ActionConfig { name = "devicePose", localizedName = "Grip Pose", type = ActionType.Pose, usages = new List { "Device" }, bindings = new List { new ActionBinding { interactionPath = "/input/grip/pose", interactionProfileName = "/interaction_profiles/ext/hand_interaction_ext" } } }, new ActionConfig { name = "pointer", localizedName = "Pointer Pose", type = ActionType.Pose, usages = new List { "Pointer" }, bindings = new List { new ActionBinding { interactionPath = "/input/aim/pose", interactionProfileName = "/interaction_profiles/ext/hand_interaction_ext" } } }, new ActionConfig { name = "PokePose", localizedName = "Poke Pose", type = ActionType.Pose, usages = new List { "Poke" }, bindings = new List { new ActionBinding { interactionPath = "/input/poke_ext/pose", interactionProfileName = "/interaction_profiles/ext/hand_interaction_ext" } } }, new ActionConfig { name = "PinchPose", localizedName = "Pinch Pose", type = ActionType.Pose, usages = new List { "Pinch" }, bindings = new List { new ActionBinding { interactionPath = "/input/pinch_ext/pose", interactionProfileName = "/interaction_profiles/ext/hand_interaction_ext" } } }, new ActionConfig { name = "PinchValue", localizedName = "Pinch Value", type = ActionType.Axis1D, usages = new List { "PinchValue" }, bindings = new List { new ActionBinding { interactionPath = "/input/pinch_ext/value", interactionProfileName = "/interaction_profiles/ext/hand_interaction_ext" } } }, new ActionConfig { name = "PinchTouched", localizedName = "Pinch Touched", type = ActionType.Binary, usages = new List { "PinchTouched" }, bindings = new List { new ActionBinding { interactionPath = "/input/pinch_ext/value", interactionProfileName = "/interaction_profiles/ext/hand_interaction_ext" } } }, new ActionConfig { name = "PinchReady", localizedName = "Pinch Ready", type = ActionType.Binary, usages = new List { "PinchReady" }, bindings = new List { new ActionBinding { interactionPath = "/input/pinch_ext/ready_ext", interactionProfileName = "/interaction_profiles/ext/hand_interaction_ext" } } }, new ActionConfig { name = "PointerActivateValue", localizedName = "Pointer Activate Value", type = ActionType.Axis1D, usages = new List { "PointerActivateValue" }, bindings = new List { new ActionBinding { interactionPath = "/input/aim_activate_ext/value", interactionProfileName = "/interaction_profiles/ext/hand_interaction_ext" } } }, new ActionConfig { name = "PointerActivated", localizedName = "Pointer Activated", type = ActionType.Binary, usages = new List { "PointerActivated" }, bindings = new List { new ActionBinding { interactionPath = "/input/aim_activate_ext/value", interactionProfileName = "/interaction_profiles/ext/hand_interaction_ext" } } }, new ActionConfig { name = "PointerActivateReady", localizedName = "Pointer Activate Ready", type = ActionType.Binary, usages = new List { "PointerActivateReady" }, bindings = new List { new ActionBinding { interactionPath = "/input/aim_activate_ext/ready_ext", interactionProfileName = "/interaction_profiles/ext/hand_interaction_ext" } } }, new ActionConfig { name = "GraspValue", localizedName = "Grasp Value", type = ActionType.Axis1D, usages = new List { "GraspValue" }, bindings = new List { new ActionBinding { interactionPath = "/input/grasp_ext/value", interactionProfileName = "/interaction_profiles/ext/hand_interaction_ext" } } }, new ActionConfig { name = "GraspFirm", localizedName = "Grasp Firm", type = ActionType.Binary, usages = new List { "GraspFirm" }, bindings = new List { new ActionBinding { interactionPath = "/input/grasp_ext/value", interactionProfileName = "/interaction_profiles/ext/hand_interaction_ext" } } }, new ActionConfig { name = "GraspReady", localizedName = "Grasp Ready", type = ActionType.Binary, usages = new List { "GraspReady" }, bindings = new List { new ActionBinding { interactionPath = "/input/grasp_ext/ready_ext", interactionProfileName = "/interaction_profiles/ext/hand_interaction_ext" } } } } }; AddActionMap(map); } } public class HPReverbG2ControllerProfile : OpenXRInteractionFeature { [Preserve] [InputControlLayout(displayName = "HP Reverb G2 Controller (OpenXR)", commonUsages = new string[] { "LeftHand", "RightHand" })] public class ReverbG2Controller : XRControllerWithRumble { [Preserve] [InputControl(aliases = new string[] { "A", "X", "buttonA", "buttonX" }, usage = "PrimaryButton")] public ButtonControl primaryButton { get; private set; } [Preserve] [InputControl(aliases = new string[] { "B", "Y", "buttonB", "buttonY" }, usage = "SecondaryButton")] public ButtonControl secondaryButton { get; private set; } [Preserve] [InputControl(aliases = new string[] { "Primary", "menubutton" }, usage = "MenuButton")] public ButtonControl menu { get; private set; } [Preserve] [InputControl(aliases = new string[] { "GripAxis", "squeeze" }, usage = "Grip")] public AxisControl grip { get; private set; } [Preserve] [InputControl(aliases = new string[] { "GripButton", "squeezeClicked" }, usage = "GripButton")] public ButtonControl gripPressed { get; private set; } [Preserve] [InputControl(usage = "Trigger")] public AxisControl trigger { get; private set; } [Preserve] [InputControl(aliases = new string[] { "indexButton", "indexTouched", "triggerbutton" }, usage = "TriggerButton")] public ButtonControl triggerPressed { get; private set; } [Preserve] [InputControl(aliases = new string[] { "Primary2DAxis", "Joystick" }, usage = "Primary2DAxis")] public StickControl thumbstick { get; private set; } [Preserve] [InputControl(aliases = new string[] { "JoystickOrPadPressed", "thumbstickClick", "joystickClicked" }, usage = "Primary2DAxisClick")] public ButtonControl thumbstickClicked { get; private set; } [Preserve] [InputControl(offset = 0u, aliases = new string[] { "device", "gripPose" }, usage = "Device")] public PoseControl devicePose { get; private set; } [Preserve] [InputControl(offset = 0u, alias = "aimPose", usage = "Pointer")] public PoseControl pointer { get; private set; } [Preserve] [InputControl(offset = 29u)] public ButtonControl isTracked { get; private set; } [Preserve] [InputControl(offset = 32u)] public IntegerControl trackingState { get; private set; } [Preserve] [InputControl(offset = 36u, alias = "gripPosition")] public Vector3Control devicePosition { get; private set; } [Preserve] [InputControl(offset = 48u, alias = "gripOrientation")] public QuaternionControl deviceRotation { get; private set; } [Preserve] [InputControl(offset = 96u)] public Vector3Control pointerPosition { get; private set; } [Preserve] [InputControl(offset = 108u, alias = "pointerOrientation")] public QuaternionControl pointerRotation { get; private set; } [Preserve] [InputControl(usage = "Haptic")] public HapticControl haptic { get; private set; } protected override void FinishSetup() { ((XRController)this).FinishSetup(); primaryButton = ((InputControl)this).GetChildControl("primaryButton"); secondaryButton = ((InputControl)this).GetChildControl("secondaryButton"); menu = ((InputControl)this).GetChildControl("menu"); grip = ((InputControl)this).GetChildControl("grip"); gripPressed = ((InputControl)this).GetChildControl("gripPressed"); trigger = ((InputControl)this).GetChildControl("trigger"); triggerPressed = ((InputControl)this).GetChildControl("triggerPressed"); thumbstick = ((InputControl)this).GetChildControl("thumbstick"); thumbstickClicked = ((InputControl)this).GetChildControl("thumbstickClicked"); devicePose = ((InputControl)this).GetChildControl("devicePose"); pointer = ((InputControl)this).GetChildControl("pointer"); isTracked = ((InputControl)this).GetChildControl("isTracked"); trackingState = ((InputControl)this).GetChildControl("trackingState"); devicePosition = ((InputControl)this).GetChildControl("devicePosition"); deviceRotation = ((InputControl)this).GetChildControl("deviceRotation"); pointerPosition = ((InputControl)this).GetChildControl("pointerPosition"); pointerRotation = ((InputControl)this).GetChildControl("pointerRotation"); haptic = ((InputControl)this).GetChildControl("haptic"); } } public const string featureId = "com.unity.openxr.feature.input.hpreverb"; public const string profile = "/interaction_profiles/hp/mixed_reality_controller"; public const string buttonX = "/input/x/click"; public const string buttonY = "/input/y/click"; public const string buttonA = "/input/a/click"; public const string buttonB = "/input/b/click"; public const string menu = "/input/menu/click"; public const string squeeze = "/input/squeeze/value"; public const string trigger = "/input/trigger/value"; public const string thumbstick = "/input/thumbstick"; public const string thumbstickClick = "/input/thumbstick/click"; public const string grip = "/input/grip/pose"; public const string aim = "/input/aim/pose"; public const string haptic = "/output/haptic"; private const string kDeviceLocalizedName = "HP Reverb G2 Controller OpenXR"; protected internal override bool OnInstanceCreate(ulong instance) { if (!OpenXRRuntime.IsExtensionEnabled("XR_EXT_hp_mixed_reality_controller")) { return false; } return base.OnInstanceCreate(instance); } protected override void RegisterDeviceLayout() { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) Type? typeFromHandle = typeof(ReverbG2Controller); InputDeviceMatcher val = default(InputDeviceMatcher); val = ((InputDeviceMatcher)(ref val)).WithInterface("^(XRInput)", true); InputSystem.RegisterLayout(typeFromHandle, (string)null, (InputDeviceMatcher?)((InputDeviceMatcher)(ref val)).WithProduct("HP Reverb G2 Controller OpenXR", true)); } protected override void UnregisterDeviceLayout() { InputSystem.RemoveLayout("ReverbG2Controller"); } protected override string GetDeviceLayoutName() { return "ReverbG2Controller"; } protected override void RegisterActionMapsWithRuntime() { //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) ActionMapConfig map = new ActionMapConfig { name = "hpreverbg2controller", localizedName = "HP Reverb G2 Controller OpenXR", desiredInteractionProfile = "/interaction_profiles/hp/mixed_reality_controller", manufacturer = "HP", serialNumber = "", deviceInfos = new List { new DeviceConfig { characteristics = (InputDeviceCharacteristics)356, userPath = "/user/hand/left" }, new DeviceConfig { characteristics = (InputDeviceCharacteristics)612, userPath = "/user/hand/right" } }, actions = new List { new ActionConfig { name = "primaryButton", localizedName = "Primary Button", type = ActionType.Binary, usages = new List { "PrimaryButton" }, bindings = new List { new ActionBinding { interactionPath = "/input/x/click", interactionProfileName = "/interaction_profiles/hp/mixed_reality_controller", userPaths = new List { "/user/hand/left" } }, new ActionBinding { interactionPath = "/input/a/click", interactionProfileName = "/interaction_profiles/hp/mixed_reality_controller", userPaths = new List { "/user/hand/right" } } } }, new ActionConfig { name = "secondaryButton", localizedName = "Secondary Button", type = ActionType.Binary, usages = new List { "SecondaryButton" }, bindings = new List { new ActionBinding { interactionPath = "/input/y/click", interactionProfileName = "/interaction_profiles/hp/mixed_reality_controller", userPaths = new List { "/user/hand/left" } }, new ActionBinding { interactionPath = "/input/b/click", interactionProfileName = "/interaction_profiles/hp/mixed_reality_controller", userPaths = new List { "/user/hand/right" } } } }, new ActionConfig { name = "menu", localizedName = "Menu", type = ActionType.Binary, usages = new List { "MenuButton" }, bindings = new List { new ActionBinding { interactionPath = "/input/menu/click", interactionProfileName = "/interaction_profiles/hp/mixed_reality_controller" } } }, new ActionConfig { name = "grip", localizedName = "Grip", type = ActionType.Axis1D, usages = new List { "Grip" }, bindings = new List { new ActionBinding { interactionPath = "/input/squeeze/value", interactionProfileName = "/interaction_profiles/hp/mixed_reality_controller" } } }, new ActionConfig { name = "gripPressed", localizedName = "Grip Pressed", type = ActionType.Binary, usages = new List { "GripButton" }, bindings = new List { new ActionBinding { interactionPath = "/input/squeeze/value", interactionProfileName = "/interaction_profiles/hp/mixed_reality_controller" } } }, new ActionConfig { name = "trigger", localizedName = "Trigger", type = ActionType.Axis1D, usages = new List { "Trigger" }, bindings = new List { new ActionBinding { interactionPath = "/input/trigger/value", interactionProfileName = "/interaction_profiles/hp/mixed_reality_controller" } } }, new ActionConfig { name = "triggerPressed", localizedName = "Trigger Pressed", type = ActionType.Binary, usages = new List { "TriggerButton" }, bindings = new List { new ActionBinding { interactionPath = "/input/trigger/value", interactionProfileName = "/interaction_profiles/hp/mixed_reality_controller" } } }, new ActionConfig { name = "thumbstick", localizedName = "Thumbstick", type = ActionType.Axis2D, usages = new List { "Primary2DAxis" }, bindings = new List { new ActionBinding { interactionPath = "/input/thumbstick", interactionProfileName = "/interaction_profiles/hp/mixed_reality_controller" } } }, new ActionConfig { name = "thumbstickClicked", localizedName = "Thumbstick Clicked", type = ActionType.Binary, usages = new List { "Primary2DAxisClick" }, bindings = new List { new ActionBinding { interactionPath = "/input/thumbstick/click", interactionProfileName = "/interaction_profiles/hp/mixed_reality_controller" } } }, new ActionConfig { name = "devicePose", localizedName = "Device Pose", type = ActionType.Pose, usages = new List { "Device" }, bindings = new List { new ActionBinding { interactionPath = "/input/grip/pose", interactionProfileName = "/interaction_profiles/hp/mixed_reality_controller" } } }, new ActionConfig { name = "pointer", localizedName = "Pointer Pose", type = ActionType.Pose, usages = new List { "Pointer" }, bindings = new List { new ActionBinding { interactionPath = "/input/aim/pose", interactionProfileName = "/interaction_profiles/hp/mixed_reality_controller" } } }, new ActionConfig { name = "haptic", localizedName = "Haptic Output", type = ActionType.Vibrate, usages = new List { "Haptic" }, bindings = new List { new ActionBinding { interactionPath = "/output/haptic", interactionProfileName = "/interaction_profiles/hp/mixed_reality_controller" } } } } }; AddActionMap(map); } } public class HTCViveControllerProfile : OpenXRInteractionFeature { [Preserve] [InputControlLayout(displayName = "HTC Vive Controller (OpenXR)", commonUsages = new string[] { "LeftHand", "RightHand" })] public class ViveController : XRControllerWithRumble { [Preserve] [InputControl(aliases = new string[] { "Secondary", "selectbutton" }, usage = "SystemButton")] public ButtonControl select { get; private set; } [Preserve] [InputControl(aliases = new string[] { "GripAxis", "squeeze" }, usage = "Grip")] public AxisControl grip { get; private set; } [Preserve] [InputControl(aliases = new string[] { "GripButton", "squeezeClicked" }, usage = "GripButton")] public ButtonControl gripPressed { get; private set; } [Preserve] [InputControl(aliases = new string[] { "Primary", "menubutton" }, usage = "MenuButton")] public ButtonControl menu { get; private set; } [Preserve] [InputControl(alias = "triggeraxis", usage = "Trigger")] public AxisControl trigger { get; private set; } [Preserve] [InputControl(alias = "triggerbutton", usage = "TriggerButton")] public ButtonControl triggerPressed { get; private set; } [Preserve] [InputControl(aliases = new string[] { "Primary2DAxis", "touchpadaxes", "touchpad" }, usage = "Primary2DAxis")] public StickControl trackpad { get; private set; } [Preserve] [InputControl(aliases = new string[] { "joystickorpadpressed", "touchpadpressed" }, usage = "Primary2DAxisClick")] public ButtonControl trackpadClicked { get; private set; } [Preserve] [InputControl(aliases = new string[] { "joystickorpadtouched", "touchpadtouched" }, usage = "Primary2DAxisTouch")] public ButtonControl trackpadTouched { get; private set; } [Preserve] [InputControl(offset = 0u, aliases = new string[] { "device", "gripPose" }, usage = "Device")] public PoseControl devicePose { get; private set; } [Preserve] [InputControl(offset = 0u, alias = "aimPose", usage = "Pointer")] public PoseControl pointer { get; private set; } [Preserve] [InputControl(offset = 26u)] public ButtonControl isTracked { get; private set; } [Preserve] [InputControl(offset = 28u)] public IntegerControl trackingState { get; private set; } [Preserve] [InputControl(offset = 32u, alias = "gripPosition")] public Vector3Control devicePosition { get; private set; } [Preserve] [InputControl(offset = 44u, alias = "gripOrientation")] public QuaternionControl deviceRotation { get; private set; } [Preserve] [InputControl(offset = 92u)] public Vector3Control pointerPosition { get; private set; } [Preserve] [InputControl(offset = 104u, alias = "pointerOrientation")] public QuaternionControl pointerRotation { get; private set; } [Preserve] [InputControl(usage = "Haptic")] public HapticControl haptic { get; private set; } protected override void FinishSetup() { ((XRController)this).FinishSetup(); select = ((InputControl)this).GetChildControl("select"); grip = ((InputControl)this).GetChildControl("grip"); gripPressed = ((InputControl)this).GetChildControl("gripPressed"); menu = ((InputControl)this).GetChildControl("menu"); trigger = ((InputControl)this).GetChildControl("trigger"); triggerPressed = ((InputControl)this).GetChildControl("triggerPressed"); trackpad = ((InputControl)this).GetChildControl("trackpad"); trackpadClicked = ((InputControl)this).GetChildControl("trackpadClicked"); trackpadTouched = ((InputControl)this).GetChildControl("trackpadTouched"); pointer = ((InputControl)this).GetChildControl("pointer"); pointerPosition = ((InputControl)this).GetChildControl("pointerPosition"); pointerRotation = ((InputControl)this).GetChildControl("pointerRotation"); devicePose = ((InputControl)this).GetChildControl("devicePose"); isTracked = ((InputControl)this).GetChildControl("isTracked"); trackingState = ((InputControl)this).GetChildControl("trackingState"); devicePosition = ((InputControl)this).GetChildControl("devicePosition"); deviceRotation = ((InputControl)this).GetChildControl("deviceRotation"); haptic = ((InputControl)this).GetChildControl("haptic"); } } public const string featureId = "com.unity.openxr.feature.input.htcvive"; public const string profile = "/interaction_profiles/htc/vive_controller"; public const string system = "/input/system/click"; public const string squeeze = "/input/squeeze/click"; public const string menu = "/input/menu/click"; public const string trigger = "/input/trigger/value"; public const string triggerClick = "/input/trigger/click"; public const string trackpad = "/input/trackpad"; public const string trackpadClick = "/input/trackpad/click"; public const string trackpadTouch = "/input/trackpad/touch"; public const string grip = "/input/grip/pose"; public const string aim = "/input/aim/pose"; public const string haptic = "/output/haptic"; private const string kDeviceLocalizedName = "HTC Vive Controller OpenXR"; protected override void RegisterDeviceLayout() { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) Type? typeFromHandle = typeof(ViveController); InputDeviceMatcher val = default(InputDeviceMatcher); val = ((InputDeviceMatcher)(ref val)).WithInterface("^(XRInput)", true); InputSystem.RegisterLayout(typeFromHandle, (string)null, (InputDeviceMatcher?)((InputDeviceMatcher)(ref val)).WithProduct("HTC Vive Controller OpenXR", true)); } protected override void UnregisterDeviceLayout() { InputSystem.RemoveLayout("ViveController"); } protected override string GetDeviceLayoutName() { return "ViveController"; } protected override void RegisterActionMapsWithRuntime() { //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) ActionMapConfig map = new ActionMapConfig { name = "htcvivecontroller", localizedName = "HTC Vive Controller OpenXR", desiredInteractionProfile = "/interaction_profiles/htc/vive_controller", manufacturer = "HTC", serialNumber = "", deviceInfos = new List { new DeviceConfig { characteristics = (InputDeviceCharacteristics)356, userPath = "/user/hand/left" }, new DeviceConfig { characteristics = (InputDeviceCharacteristics)612, userPath = "/user/hand/right" } }, actions = new List { new ActionConfig { name = "grip", localizedName = "Grip", type = ActionType.Axis1D, usages = new List { "Grip" }, bindings = new List { new ActionBinding { interactionPath = "/input/squeeze/click", interactionProfileName = "/interaction_profiles/htc/vive_controller" } } }, new ActionConfig { name = "gripPressed", localizedName = "Grip Pressed", type = ActionType.Binary, usages = new List { "GripButton" }, bindings = new List { new ActionBinding { interactionPath = "/input/squeeze/click", interactionProfileName = "/interaction_profiles/htc/vive_controller" } } }, new ActionConfig { name = "menu", localizedName = "Menu", type = ActionType.Binary, usages = new List { "MenuButton" }, bindings = new List { new ActionBinding { interactionPath = "/input/menu/click", interactionProfileName = "/interaction_profiles/htc/vive_controller" } } }, new ActionConfig { name = "select", localizedName = "Select", type = ActionType.Binary, usages = new List { "SystemButton" }, bindings = new List { new ActionBinding { interactionPath = "/input/system/click", interactionProfileName = "/interaction_profiles/htc/vive_controller" } } }, new ActionConfig { name = "trigger", localizedName = "Trigger", type = ActionType.Axis1D, usages = new List { "Trigger" }, bindings = new List { new ActionBinding { interactionPath = "/input/trigger/value", interactionProfileName = "/interaction_profiles/htc/vive_controller" } } }, new ActionConfig { name = "triggerPressed", localizedName = "Trigger Pressed", type = ActionType.Binary, usages = new List { "TriggerButton" }, bindings = new List { new ActionBinding { interactionPath = "/input/trigger/click", interactionProfileName = "/interaction_profiles/htc/vive_controller" } } }, new ActionConfig { name = "trackpad", localizedName = "Trackpad", type = ActionType.Axis2D, usages = new List { "Primary2DAxis" }, bindings = new List { new ActionBinding { interactionPath = "/input/trackpad", interactionProfileName = "/interaction_profiles/htc/vive_controller" } } }, new ActionConfig { name = "trackpadTouched", localizedName = "Trackpad Touched", type = ActionType.Binary, usages = new List { "Primary2DAxisTouch" }, bindings = new List { new ActionBinding { interactionPath = "/input/trackpad/touch", interactionProfileName = "/interaction_profiles/htc/vive_controller" } } }, new ActionConfig { name = "trackpadClicked", localizedName = "Trackpad Clicked", type = ActionType.Binary, usages = new List { "Primary2DAxisClick" }, bindings = new List { new ActionBinding { interactionPath = "/input/trackpad/click", interactionProfileName = "/interaction_profiles/htc/vive_controller" } } }, new ActionConfig { name = "devicePose", localizedName = "Device Pose", type = ActionType.Pose, usages = new List { "Device" }, bindings = new List { new ActionBinding { interactionPath = "/input/grip/pose", interactionProfileName = "/interaction_profiles/htc/vive_controller" } } }, new ActionConfig { name = "pointer", localizedName = "Pointer Pose", type = ActionType.Pose, usages = new List { "Pointer" }, bindings = new List { new ActionBinding { interactionPath = "/input/aim/pose", interactionProfileName = "/interaction_profiles/htc/vive_controller" } } }, new ActionConfig { name = "haptic", localizedName = "Haptic Output", type = ActionType.Vibrate, usages = new List { "Haptic" }, bindings = new List { new ActionBinding { interactionPath = "/output/haptic", interactionProfileName = "/interaction_profiles/htc/vive_controller" } } } } }; AddActionMap(map); } } public class KHRSimpleControllerProfile : OpenXRInteractionFeature { [Preserve] [InputControlLayout(displayName = "Khronos Simple Controller (OpenXR)", commonUsages = new string[] { "LeftHand", "RightHand" })] public class KHRSimpleController : XRControllerWithRumble { [Preserve] [InputControl(aliases = new string[] { "Secondary", "selectbutton" }, usage = "PrimaryButton")] public ButtonControl select { get; private set; } [Preserve] [InputControl(aliases = new string[] { "Primary", "menubutton" }, usage = "MenuButton")] public ButtonControl menu { get; private set; } [Preserve] [InputControl(offset = 0u, aliases = new string[] { "device", "gripPose" }, usage = "Device")] public PoseControl devicePose { get; private set; } [Preserve] [InputControl(offset = 0u, alias = "aimPose", usage = "Pointer")] public PoseControl pointer { get; private set; } [Preserve] [InputControl(offset = 2u)] public ButtonControl isTracked { get; private set; } [Preserve] [InputControl(offset = 4u)] public IntegerControl trackingState { get; private set; } [Preserve] [InputControl(offset = 8u, alias = "gripPosition")] public Vector3Control devicePosition { get; private set; } [Preserve] [InputControl(offset = 20u, alias = "gripOrientation")] public QuaternionControl deviceRotation { get; private set; } [Preserve] [InputControl(offset = 68u)] public Vector3Control pointerPosition { get; private set; } [Preserve] [InputControl(offset = 80u, alias = "pointerOrientation")] public QuaternionControl pointerRotation { get; private set; } [Preserve] [InputControl(usage = "Haptic")] public HapticControl haptic { get; private set; } protected override void FinishSetup() { ((XRController)this).FinishSetup(); menu = ((InputControl)this).GetChildControl("menu"); select = ((InputControl)this).GetChildControl("select"); devicePose = ((InputControl)this).GetChildControl("devicePose"); pointer = ((InputControl)this).GetChildControl("pointer"); isTracked = ((InputControl)this).GetChildControl("isTracked"); trackingState = ((InputControl)this).GetChildControl("trackingState"); devicePosition = ((InputControl)this).GetChildControl("devicePosition"); deviceRotation = ((InputControl)this).GetChildControl("deviceRotation"); pointerPosition = ((InputControl)this).GetChildControl("pointerPosition"); pointerRotation = ((InputControl)this).GetChildControl("pointerRotation"); haptic = ((InputControl)this).GetChildControl("haptic"); } } public const string featureId = "com.unity.openxr.feature.input.khrsimpleprofile"; public const string profile = "/interaction_profiles/khr/simple_controller"; public const string select = "/input/select/click"; public const string menu = "/input/menu/click"; public const string grip = "/input/grip/pose"; public const string aim = "/input/aim/pose"; public const string haptic = "/output/haptic"; private const string kDeviceLocalizedName = "KHR Simple Controller OpenXR"; protected override void RegisterDeviceLayout() { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) Type? typeFromHandle = typeof(KHRSimpleController); InputDeviceMatcher val = default(InputDeviceMatcher); val = ((InputDeviceMatcher)(ref val)).WithInterface("^(XRInput)", true); InputSystem.RegisterLayout(typeFromHandle, (string)null, (InputDeviceMatcher?)((InputDeviceMatcher)(ref val)).WithProduct("KHR Simple Controller OpenXR", true)); } protected override void UnregisterDeviceLayout() { InputSystem.RemoveLayout(typeof(KHRSimpleController).Name); } protected override string GetDeviceLayoutName() { return "KHRSimpleController"; } protected override void RegisterActionMapsWithRuntime() { //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) ActionMapConfig map = new ActionMapConfig { name = "khrsimplecontroller", localizedName = "KHR Simple Controller OpenXR", desiredInteractionProfile = "/interaction_profiles/khr/simple_controller", manufacturer = "Khronos", serialNumber = "", deviceInfos = new List { new DeviceConfig { characteristics = (InputDeviceCharacteristics)356, userPath = "/user/hand/left" }, new DeviceConfig { characteristics = (InputDeviceCharacteristics)612, userPath = "/user/hand/right" } }, actions = new List { new ActionConfig { name = "select", localizedName = "Select", type = ActionType.Binary, usages = new List { "PrimaryButton" }, bindings = new List { new ActionBinding { interactionPath = "/input/select/click", interactionProfileName = "/interaction_profiles/khr/simple_controller" } } }, new ActionConfig { name = "menu", localizedName = "Menu", type = ActionType.Binary, usages = new List { "MenuButton" }, bindings = new List { new ActionBinding { interactionPath = "/input/menu/click", interactionProfileName = "/interaction_profiles/khr/simple_controller" } } }, new ActionConfig { name = "devicePose", localizedName = "Device Pose", type = ActionType.Pose, usages = new List { "Device" }, bindings = new List { new ActionBinding { interactionPath = "/input/grip/pose", interactionProfileName = "/interaction_profiles/khr/simple_controller" } } }, new ActionConfig { name = "pointer", localizedName = "Pointer Pose", type = ActionType.Pose, usages = new List { "Pointer" }, bindings = new List { new ActionBinding { interactionPath = "/input/aim/pose", interactionProfileName = "/interaction_profiles/khr/simple_controller" } } }, new ActionConfig { name = "haptic", localizedName = "Haptic Output", type = ActionType.Vibrate, usages = new List { "Haptic" }, bindings = new List { new ActionBinding { interactionPath = "/output/haptic", interactionProfileName = "/interaction_profiles/khr/simple_controller" } } } } }; AddActionMap(map); } } public class MetaQuestTouchPlusControllerProfile : OpenXRInteractionFeature { [Preserve] [InputControlLayout(displayName = "Meta Quest Touch Plus Controller(OpenXR)", commonUsages = new string[] { "LeftHand", "RightHand" })] public class QuestTouchPlusController : XRControllerWithRumble { [Preserve] [InputControl(aliases = new string[] { "Primary2DAxis", "Joystick" }, usage = "Primary2DAxis")] public StickControl thumbstick { get; private set; } [Preserve] [InputControl(aliases = new string[] { "GripAxis", "squeeze" }, usage = "Grip")] public AxisControl grip { get; private set; } [Preserve] [InputControl(aliases = new string[] { "GripButton", "squeezeClicked" }, usage = "GripButton")] public ButtonControl gripPressed { get; private set; } [Preserve] [InputControl(aliases = new string[] { "Primary", "menuButton", "systemButton" }, usage = "MenuButton")] public ButtonControl menu { get; private set; } [Preserve] [InputControl(aliases = new string[] { "A", "X", "buttonA", "buttonX" }, usage = "PrimaryButton")] public ButtonControl primaryButton { get; private set; } [Preserve] [InputControl(aliases = new string[] { "ATouched", "XTouched", "ATouch", "XTouch", "buttonATouched", "buttonXTouched" }, usage = "PrimaryTouch")] public ButtonControl primaryTouched { get; private set; } [Preserve] [InputControl(aliases = new string[] { "B", "Y", "buttonB", "buttonY" }, usage = "SecondaryButton")] public ButtonControl secondaryButton { get; private set; } [Preserve] [InputControl(aliases = new string[] { "BTouched", "YTouched", "BTouch", "YTouch", "buttonBTouched", "buttonYTouched" }, usage = "SecondaryTouch")] public ButtonControl secondaryTouched { get; private set; } [Preserve] [InputControl(usage = "Trigger")] public AxisControl trigger { get; private set; } [Preserve] [InputControl(aliases = new string[] { "indexButton", "indexTouched", "triggerbutton" }, usage = "TriggerButton")] public ButtonControl triggerPressed { get; private set; } [Preserve] [InputControl(aliases = new string[] { "indexTouch", "indexNearTouched" }, usage = "TriggerTouch")] public ButtonControl triggerTouched { get; private set; } [Preserve] [InputControl(aliases = new string[] { "JoystickOrPadPressed", "thumbstickClick", "joystickClicked" }, usage = "Primary2DAxisClick")] public ButtonControl thumbstickClicked { get; private set; } [Preserve] [InputControl(aliases = new string[] { "JoystickOrPadTouched", "thumbstickTouch", "joystickTouched" }, usage = "Primary2DAxisTouch")] public ButtonControl thumbstickTouched { get; private set; } [Preserve] [InputControl(usage = "ThumbrestTouch")] public ButtonControl thumbrestTouched { get; private set; } [Preserve] [InputControl(offset = 0u, aliases = new string[] { "device", "gripPose" }, usage = "Device")] public PoseControl devicePose { get; private set; } [Preserve] [InputControl(offset = 0u, alias = "aimPose", usage = "Pointer")] public PoseControl pointer { get; private set; } [Preserve] [InputControl(offset = 28u, usage = "IsTracked")] public ButtonControl isTracked { get; private set; } [Preserve] [InputControl(offset = 32u, usage = "TrackingState")] public IntegerControl trackingState { get; private set; } [Preserve] [InputControl(offset = 36u, noisy = true, alias = "gripPosition")] public Vector3Control devicePosition { get; private set; } [Preserve] [InputControl(offset = 48u, noisy = true, alias = "gripOrientation")] public QuaternionControl deviceRotation { get; private set; } [Preserve] [InputControl(offset = 96u)] public Vector3Control pointerPosition { get; private set; } [Preserve] [InputControl(offset = 108u, alias = "pointerOrientation")] public QuaternionControl pointerRotation { get; private set; } [Preserve] [InputControl(usage = "Haptic")] public HapticControl haptic { get; private set; } [Preserve] [InputControl(usage = "TriggerForce")] public AxisControl triggerForce { get; private set; } [Preserve] [InputControl(usage = "TriggerCurl")] public AxisControl triggerCurl { get; private set; } [Preserve] [InputControl(usage = "TriggerSlide")] public AxisControl triggerSlide { get; private set; } [Preserve] [InputControl(usage = "TriggerProximity")] public ButtonControl triggerProximity { get; private set; } [Preserve] [InputControl(usage = "ThumbProximity")] public ButtonControl thumbProximity { get; private set; } protected override void FinishSetup() { ((XRController)this).FinishSetup(); thumbstick = ((InputControl)this).GetChildControl("thumbstick"); trigger = ((InputControl)this).GetChildControl("trigger"); triggerPressed = ((InputControl)this).GetChildControl("triggerPressed"); triggerTouched = ((InputControl)this).GetChildControl("triggerTouched"); grip = ((InputControl)this).GetChildControl("grip"); gripPressed = ((InputControl)this).GetChildControl("gripPressed"); menu = ((InputControl)this).GetChildControl("menu"); primaryButton = ((InputControl)this).GetChildControl("primaryButton"); primaryTouched = ((InputControl)this).GetChildControl("primaryTouched"); secondaryButton = ((InputControl)this).GetChildControl("secondaryButton"); secondaryTouched = ((InputControl)this).GetChildControl("secondaryTouched"); thumbstickClicked = ((InputControl)this).GetChildControl("thumbstickClicked"); thumbstickTouched = ((InputControl)this).GetChildControl("thumbstickTouched"); thumbrestTouched = ((InputControl)this).GetChildControl("thumbrestTouched"); devicePose = ((InputControl)this).GetChildControl("devicePose"); pointer = ((InputControl)this).GetChildControl("pointer"); isTracked = ((InputControl)this).GetChildControl("isTracked"); trackingState = ((InputControl)this).GetChildControl("trackingState"); devicePosition = ((InputControl)this).GetChildControl("devicePosition"); deviceRotation = ((InputControl)this).GetChildControl("deviceRotation"); pointerPosition = ((InputControl)this).GetChildControl("pointerPosition"); pointerRotation = ((InputControl)this).GetChildControl("pointerRotation"); haptic = ((InputControl)this).GetChildControl("haptic"); triggerForce = ((InputControl)this).GetChildControl("triggerForce"); triggerCurl = ((InputControl)this).GetChildControl("triggerCurl"); triggerSlide = ((InputControl)this).GetChildControl("triggerSlide"); triggerProximity = ((InputControl)this).GetChildControl("triggerProximity"); thumbProximity = ((InputControl)this).GetChildControl("thumbProximity"); } } public const string featureId = "com.unity.openxr.feature.input.metaquestplus"; public const string profile = "/interaction_profiles/meta/touch_controller_plus"; public const string buttonX = "/input/x/click"; public const string buttonXTouch = "/input/x/touch"; public const string buttonY = "/input/y/click"; public const string buttonYTouch = "/input/y/touch"; public const string menu = "/input/menu/click"; public const string buttonA = "/input/a/click"; public const string buttonATouch = "/input/a/touch"; public const string buttonB = "/input/b/click"; public const string buttonBTouch = "/input/b/touch"; public const string system = "/input/system/click"; public const string squeeze = "/input/squeeze/value"; public const string trigger = "/input/trigger/value"; public const string triggerTouch = "/input/trigger/touch"; public const string thumbstick = "/input/thumbstick"; public const string thumbstickClick = "/input/thumbstick/click"; public const string thumbstickTouch = "/input/thumbstick/touch"; public const string thumbrest = "/input/thumbrest/touch"; public const string grip = "/input/grip/pose"; public const string aim = "/input/aim/pose"; public const string haptic = "/output/haptic"; public const string triggerForce = "/input/trigger/force"; public const string triggerCurl = "/input/trigger/curl_meta"; public const string triggerSlide = "/input/trigger/slide_meta"; public const string triggerProximity = "/input/trigger/proximity_meta"; public const string thumbProximity = "/input/thumb_meta/proximity_meta"; private const string kDeviceLocalizedName = "Meta Quest Touch Plus Controller OpenXR"; protected internal override bool OnInstanceCreate(ulong instance) { if (!OpenXRRuntime.IsExtensionEnabled("XR_META_touch_controller_plus")) { return false; } return base.OnInstanceCreate(instance); } protected override void RegisterDeviceLayout() { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) Type? typeFromHandle = typeof(QuestTouchPlusController); InputDeviceMatcher val = default(InputDeviceMatcher); val = ((InputDeviceMatcher)(ref val)).WithInterface("^(XRInput)", true); InputSystem.RegisterLayout(typeFromHandle, (string)null, (InputDeviceMatcher?)((InputDeviceMatcher)(ref val)).WithProduct("Meta Quest Touch Plus Controller OpenXR", true)); } protected override void UnregisterDeviceLayout() { InputSystem.RemoveLayout("QuestTouchPlusController"); } protected override string GetDeviceLayoutName() { return "QuestTouchPlusController"; } protected override void RegisterActionMapsWithRuntime() { //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) ActionMapConfig map = new ActionMapConfig { name = "questtouchpluscontroller", localizedName = "Meta Quest Touch Plus Controller OpenXR", desiredInteractionProfile = "/interaction_profiles/meta/touch_controller_plus", manufacturer = "Oculus", serialNumber = "", deviceInfos = new List { new DeviceConfig { characteristics = (InputDeviceCharacteristics)356, userPath = "/user/hand/left" }, new DeviceConfig { characteristics = (InputDeviceCharacteristics)612, userPath = "/user/hand/right" } }, actions = new List { new ActionConfig { name = "thumbstick", localizedName = "Thumbstick", type = ActionType.Axis2D, usages = new List { "Primary2DAxis" }, bindings = new List { new ActionBinding { interactionPath = "/input/thumbstick", interactionProfileName = "/interaction_profiles/meta/touch_controller_plus" } } }, new ActionConfig { name = "grip", localizedName = "Grip", type = ActionType.Axis1D, usages = new List { "Grip" }, bindings = new List { new ActionBinding { interactionPath = "/input/squeeze/value", interactionProfileName = "/interaction_profiles/meta/touch_controller_plus" } } }, new ActionConfig { name = "gripPressed", localizedName = "Grip Pressed", type = ActionType.Binary, usages = new List { "GripButton" }, bindings = new List { new ActionBinding { interactionPath = "/input/squeeze/value", interactionProfileName = "/interaction_profiles/meta/touch_controller_plus" } } }, new ActionConfig { name = "menu", localizedName = "Menu", type = ActionType.Binary, usages = new List { "MenuButton" }, bindings = new List { new ActionBinding { interactionPath = "/input/menu/click", interactionProfileName = "/interaction_profiles/meta/touch_controller_plus", userPaths = new List { "/user/hand/left" } }, new ActionBinding { interactionPath = "/input/system/click", interactionProfileName = "/interaction_profiles/meta/touch_controller_plus", userPaths = new List { "/user/hand/right" } } } }, new ActionConfig { name = "primaryButton", localizedName = "Primary Button", type = ActionType.Binary, usages = new List { "PrimaryButton" }, bindings = new List { new ActionBinding { interactionPath = "/input/x/click", interactionProfileName = "/interaction_profiles/meta/touch_controller_plus", userPaths = new List { "/user/hand/left" } }, new ActionBinding { interactionPath = "/input/a/click", interactionProfileName = "/interaction_profiles/meta/touch_controller_plus", userPaths = new List { "/user/hand/right" } } } }, new ActionConfig { name = "primaryTouched", localizedName = "Primary Touched", type = ActionType.Binary, usages = new List { "PrimaryTouch" }, bindings = new List { new ActionBinding { interactionPath = "/input/x/touch", interactionProfileName = "/interaction_profiles/meta/touch_controller_plus", userPaths = new List { "/user/hand/left" } }, new ActionBinding { interactionPath = "/input/a/touch", interactionProfileName = "/interaction_profiles/meta/touch_controller_plus", userPaths = new List { "/user/hand/right" } } } }, new ActionConfig { name = "secondaryButton", localizedName = "Secondary Button", type = ActionType.Binary, usages = new List { "SecondaryButton" }, bindings = new List { new ActionBinding { interactionPath = "/input/y/click", interactionProfileName = "/interaction_profiles/meta/touch_controller_plus", userPaths = new List { "/user/hand/left" } }, new ActionBinding { interactionPath = "/input/b/click", interactionProfileName = "/interaction_profiles/meta/touch_controller_plus", userPaths = new List { "/user/hand/right" } } } }, new ActionConfig { name = "secondaryTouched", localizedName = "Secondary Touched", type = ActionType.Binary, usages = new List { "SecondaryTouch" }, bindings = new List { new ActionBinding { interactionPath = "/input/y/touch", interactionProfileName = "/interaction_profiles/meta/touch_controller_plus", userPaths = new List { "/user/hand/left" } }, new ActionBinding { interactionPath = "/input/b/touch", interactionProfileName = "/interaction_profiles/meta/touch_controller_plus", userPaths = new List { "/user/hand/right" } } } }, new ActionConfig { name = "trigger", localizedName = "Trigger", type = ActionType.Axis1D, usages = new List { "Trigger" }, bindings = new List { new ActionBinding { interactionPath = "/input/trigger/value", interactionProfileName = "/interaction_profiles/meta/touch_controller_plus" } } }, new ActionConfig { name = "triggerPressed", localizedName = "Trigger Pressed", type = ActionType.Binary, usages = new List { "TriggerButton" }, bindings = new List { new ActionBinding { interactionPath = "/input/trigger/value", interactionProfileName = "/interaction_profiles/meta/touch_controller_plus" } } }, new ActionConfig { name = "triggerTouched", localizedName = "Trigger Touched", type = ActionType.Binary, usages = new List { "TriggerTouch" }, bindings = new List { new ActionBinding { interactionPath = "/input/trigger/touch", interactionProfileName = "/interaction_profiles/meta/touch_controller_plus" } } }, new ActionConfig { name = "thumbstickClicked", localizedName = "Thumbstick Clicked", type = ActionType.Binary, usages = new List { "Primary2DAxisClick" }, bindings = new List { new ActionBinding { interactionPath = "/input/thumbstick/click", interactionProfileName = "/interaction_profiles/meta/touch_controller_plus" } } }, new ActionConfig { name = "thumbstickTouched", localizedName = "Thumbstick Touched", type = ActionType.Binary, usages = new List { "Primary2DAxisTouch" }, bindings = new List { new ActionBinding { interactionPath = "/input/thumbstick/touch", interactionProfileName = "/interaction_profiles/meta/touch_controller_plus" } } }, new ActionConfig { name = "thumbrestTouched", localizedName = "Thumbrest Touched", type = ActionType.Binary, usages = new List { "ThumbrestTouch" }, bindings = new List { new ActionBinding { interactionPath = "/input/thumbrest/touch", interactionProfileName = "/interaction_profiles/meta/touch_controller_plus" } } }, new ActionConfig { name = "devicePose", localizedName = "Device Pose", type = ActionType.Pose, usages = new List { "Device" }, bindings = new List { new ActionBinding { interactionPath = "/input/grip/pose", interactionProfileName = "/interaction_profiles/meta/touch_controller_plus" } } }, new ActionConfig { name = "pointer", localizedName = "Pointer Pose", type = ActionType.Pose, usages = new List { "Pointer" }, bindings = new List { new ActionBinding { interactionPath = "/input/aim/pose", interactionProfileName = "/interaction_profiles/meta/touch_controller_plus" } } }, new ActionConfig { name = "haptic", localizedName = "Haptic Output", type = ActionType.Vibrate, usages = new List { "Haptic" }, bindings = new List { new ActionBinding { interactionPath = "/output/haptic", interactionProfileName = "/interaction_profiles/meta/touch_controller_plus" } } }, new ActionConfig { name = "triggerForce", localizedName = "Trigger Force", type = ActionType.Axis1D, usages = new List { "TriggerForce" }, bindings = new List { new ActionBinding { interactionPath = "/input/trigger/force", interactionProfileName = "/interaction_profiles/meta/touch_controller_plus" } } }, new ActionConfig { name = "triggerCurl", localizedName = "Trigger Curl", type = ActionType.Axis1D, usages = new List { "TriggerCurl" }, bindings = new List { new ActionBinding { interactionPath = "/input/trigger/curl_meta", interactionProfileName = "/interaction_profiles/meta/touch_controller_plus" } } }, new ActionConfig { name = "triggerSlide", localizedName = "Trigger Slide", type = ActionType.Axis1D, usages = new List { "TriggerSlide" }, bindings = new List { new ActionBinding { interactionPath = "/input/trigger/slide_meta", interactionProfileName = "/interaction_profiles/meta/touch_controller_plus" } } }, new ActionConfig { name = "triggerProximity", localizedName = "Trigger Proximity", type = ActionType.Binary, usages = new List { "TriggerProximity" }, bindings = new List { new ActionBinding { interactionPath = "/input/trigger/proximity_meta", interactionProfileName = "/interaction_profiles/meta/touch_controller_plus" } } }, new ActionConfig { name = "thumbProximity", localizedName = "Thumb Proximity", type = ActionType.Binary, usages = new List { "ThumbProximity" }, bindings = new List { new ActionBinding { interactionPath = "/input/thumb_meta/proximity_meta", interactionProfileName = "/interaction_profiles/meta/touch_controller_plus" } } } } }; AddActionMap(map); } } public class MetaQuestTouchProControllerProfile : OpenXRInteractionFeature { [Preserve] [InputControlLayout(displayName = "Meta Quest Pro Touch Controller(OpenXR)", commonUsages = new string[] { "LeftHand", "RightHand" })] public class QuestProTouchController : XRControllerWithRumble { [Preserve] [InputControl(aliases = new string[] { "Primary2DAxis", "Joystick" }, usage = "Primary2DAxis")] public StickControl thumbstick { get; private set; } [Preserve] [InputControl(aliases = new string[] { "GripAxis", "squeeze" }, usage = "Grip")] public AxisControl grip { get; private set; } [Preserve] [InputControl(aliases = new string[] { "GripButton", "squeezeClicked" }, usage = "GripButton")] public ButtonControl gripPressed { get; private set; } [Preserve] [InputControl(aliases = new string[] { "Primary", "menuButton", "systemButton" }, usage = "MenuButton")] public ButtonControl menu { get; private set; } [Preserve] [InputControl(aliases = new string[] { "A", "X", "buttonA", "buttonX" }, usage = "PrimaryButton")] public ButtonControl primaryButton { get; private set; } [Preserve] [InputControl(aliases = new string[] { "ATouched", "XTouched", "ATouch", "XTouch", "buttonATouched", "buttonXTouched" }, usage = "PrimaryTouch")] public ButtonControl primaryTouched { get; private set; } [Preserve] [InputControl(aliases = new string[] { "B", "Y", "buttonB", "buttonY" }, usage = "SecondaryButton")] public ButtonControl secondaryButton { get; private set; } [Preserve] [InputControl(aliases = new string[] { "BTouched", "YTouched", "BTouch", "YTouch", "buttonBTouched", "buttonYTouched" }, usage = "SecondaryTouch")] public ButtonControl secondaryTouched { get; private set; } [Preserve] [InputControl(usage = "Trigger")] public AxisControl trigger { get; private set; } [Preserve] [InputControl(aliases = new string[] { "indexButton", "indexTouched", "triggerbutton" }, usage = "TriggerButton")] public ButtonControl triggerPressed { get; private set; } [Preserve] [InputControl(aliases = new string[] { "indexTouch", "indexNearTouched" }, usage = "TriggerTouch")] public ButtonControl triggerTouched { get; private set; } [Preserve] [InputControl(aliases = new string[] { "JoystickOrPadPressed", "thumbstickClick", "joystickClicked" }, usage = "Primary2DAxisClick")] public ButtonControl thumbstickClicked { get; private set; } [Preserve] [InputControl(aliases = new string[] { "JoystickOrPadTouched", "thumbstickTouch", "joystickTouched" }, usage = "Primary2DAxisTouch")] public ButtonControl thumbstickTouched { get; private set; } [Preserve] [InputControl(usage = "ThumbrestTouch")] public ButtonControl thumbrestTouched { get; private set; } [Preserve] [InputControl(offset = 0u, aliases = new string[] { "device", "gripPose" }, usage = "Device")] public PoseControl devicePose { get; private set; } [Preserve] [InputControl(offset = 0u, alias = "aimPose", usage = "Pointer")] public PoseControl pointer { get; private set; } [Preserve] [InputControl(offset = 28u, usage = "IsTracked")] public ButtonControl isTracked { get; private set; } [Preserve] [InputControl(offset = 32u, usage = "TrackingState")] public IntegerControl trackingState { get; private set; } [Preserve] [InputControl(offset = 36u, noisy = true, alias = "gripPosition")] public Vector3Control devicePosition { get; private set; } [Preserve] [InputControl(offset = 48u, noisy = true, alias = "gripOrientation")] public QuaternionControl deviceRotation { get; private set; } [Preserve] [InputControl(offset = 96u)] public Vector3Control pointerPosition { get; private set; } [Preserve] [InputControl(offset = 108u, alias = "pointerOrientation")] public QuaternionControl pointerRotation { get; private set; } [Preserve] [InputControl(usage = "Haptic")] public HapticControl haptic { get; private set; } [Preserve] [InputControl(usage = "ThumbrestForce")] public AxisControl thumbrestForce { get; private set; } [Preserve] [InputControl(usage = "StylusForce")] public AxisControl stylusForce { get; private set; } [Preserve] [InputControl(usage = "TriggerCurl")] public AxisControl triggerCurl { get; private set; } [Preserve] [InputControl(usage = "TriggerSlide")] public AxisControl triggerSlide { get; private set; } [Preserve] [InputControl(usage = "TriggerProximity")] public ButtonControl triggerProximity { get; private set; } [Preserve] [InputControl(usage = "ThumbProximity")] public ButtonControl thumbProximity { get; private set; } [Preserve] [InputControl(usage = "HapticTrigger")] public HapticControl hapticTrigger { get; private set; } [Preserve] [InputControl(usage = "HapticThumb")] public HapticControl hapticThumb { get; private set; } protected override void FinishSetup() { ((XRController)this).FinishSetup(); thumbstick = ((InputControl)this).GetChildControl("thumbstick"); trigger = ((InputControl)this).GetChildControl("trigger"); triggerPressed = ((InputControl)this).GetChildControl("triggerPressed"); triggerTouched = ((InputControl)this).GetChildControl("triggerTouched"); grip = ((InputControl)this).GetChildControl("grip"); gripPressed = ((InputControl)this).GetChildControl("gripPressed"); menu = ((InputControl)this).GetChildControl("menu"); primaryButton = ((InputControl)this).GetChildControl("primaryButton"); primaryTouched = ((InputControl)this).GetChildControl("primaryTouched"); secondaryButton = ((InputControl)this).GetChildControl("secondaryButton"); secondaryTouched = ((InputControl)this).GetChildControl("secondaryTouched"); thumbstickClicked = ((InputControl)this).GetChildControl("thumbstickClicked"); thumbstickTouched = ((InputControl)this).GetChildControl("thumbstickTouched"); thumbrestTouched = ((InputControl)this).GetChildControl("thumbrestTouched"); devicePose = ((InputControl)this).GetChildControl("devicePose"); pointer = ((InputControl)this).GetChildControl("pointer"); isTracked = ((InputControl)this).GetChildControl("isTracked"); trackingState = ((InputControl)this).GetChildControl("trackingState"); devicePosition = ((InputControl)this).GetChildControl("devicePosition"); deviceRotation = ((InputControl)this).GetChildControl("deviceRotation"); pointerPosition = ((InputControl)this).GetChildControl("pointerPosition"); pointerRotation = ((InputControl)this).GetChildControl("pointerRotation"); haptic = ((InputControl)this).GetChildControl("haptic"); thumbrestForce = ((InputControl)this).GetChildControl("thumbrestForce"); stylusForce = ((InputControl)this).GetChildControl("stylusForce"); triggerCurl = ((InputControl)this).GetChildControl("triggerCurl"); triggerSlide = ((InputControl)this).GetChildControl("triggerSlide"); triggerProximity = ((InputControl)this).GetChildControl("triggerProximity"); thumbProximity = ((InputControl)this).GetChildControl("thumbProximity"); hapticTrigger = ((InputControl)this).GetChildControl("hapticTrigger"); hapticThumb = ((InputControl)this).GetChildControl("hapticThumb"); } } public const string featureId = "com.unity.openxr.feature.input.metaquestpro"; public const string profile = "/interaction_profiles/facebook/touch_controller_pro"; public const string buttonX = "/input/x/click"; public const string buttonXTouch = "/input/x/touch"; public const string buttonY = "/input/y/click"; public const string buttonYTouch = "/input/y/touch"; public const string menu = "/input/menu/click"; public const string buttonA = "/input/a/click"; public const string buttonATouch = "/input/a/touch"; public const string buttonB = "/input/b/click"; public const string buttonBTouch = "/input/b/touch"; public const string system = "/input/system/click"; public const string squeeze = "/input/squeeze/value"; public const string trigger = "/input/trigger/value"; public const string triggerTouch = "/input/trigger/touch"; public const string thumbstick = "/input/thumbstick"; public const string thumbstickClick = "/input/thumbstick/click"; public const string thumbstickTouch = "/input/thumbstick/touch"; public const string thumbrest = "/input/thumbrest/touch"; public const string grip = "/input/grip/pose"; public const string aim = "/input/aim/pose"; public const string haptic = "/output/haptic"; public const string thumbrestForce = "/input/thumbrest/force"; public const string stylusForce = "/input/stylus_fb/force"; public const string triggerCurl = "/input/trigger/curl_fb"; public const string triggerSlide = "/input/trigger/slide_fb"; public const string triggerProximity = "/input/trigger/proximity_fb"; public const string thumbProximity = "/input/thumb_fb/proximity_fb"; public const string hapticTrigger = "/output/trigger_haptic_fb"; public const string hapticThumb = "/output/thumb_haptic_fb"; private const string kDeviceLocalizedName = "Meta Quest Pro Touch Controller OpenXR"; protected internal override bool OnInstanceCreate(ulong instance) { if (!OpenXRRuntime.IsExtensionEnabled("XR_FB_touch_controller_pro")) { return false; } return base.OnInstanceCreate(instance); } protected override void RegisterDeviceLayout() { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) Type? typeFromHandle = typeof(QuestProTouchController); InputDeviceMatcher val = default(InputDeviceMatcher); val = ((InputDeviceMatcher)(ref val)).WithInterface("^(XRInput)", true); InputSystem.RegisterLayout(typeFromHandle, (string)null, (InputDeviceMatcher?)((InputDeviceMatcher)(ref val)).WithProduct("Meta Quest Pro Touch Controller OpenXR", true)); } protected override void UnregisterDeviceLayout() { InputSystem.RemoveLayout("QuestProTouchController"); } protected override string GetDeviceLayoutName() { return "QuestProTouchController"; } protected override void RegisterActionMapsWithRuntime() { //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) ActionMapConfig map = new ActionMapConfig { name = "questprotouchcontroller", localizedName = "Meta Quest Pro Touch Controller OpenXR", desiredInteractionProfile = "/interaction_profiles/facebook/touch_controller_pro", manufacturer = "Oculus", serialNumber = "", deviceInfos = new List { new DeviceConfig { characteristics = (InputDeviceCharacteristics)356, userPath = "/user/hand/left" }, new DeviceConfig { characteristics = (InputDeviceCharacteristics)612, userPath = "/user/hand/right" } }, actions = new List { new ActionConfig { name = "thumbstick", localizedName = "Thumbstick", type = ActionType.Axis2D, usages = new List { "Primary2DAxis" }, bindings = new List { new ActionBinding { interactionPath = "/input/thumbstick", interactionProfileName = "/interaction_profiles/facebook/touch_controller_pro" } } }, new ActionConfig { name = "grip", localizedName = "Grip", type = ActionType.Axis1D, usages = new List { "Grip" }, bindings = new List { new ActionBinding { interactionPath = "/input/squeeze/value", interactionProfileName = "/interaction_profiles/facebook/touch_controller_pro" } } }, new ActionConfig { name = "gripPressed", localizedName = "Grip Pressed", type = ActionType.Binary, usages = new List { "GripButton" }, bindings = new List { new ActionBinding { interactionPath = "/input/squeeze/value", interactionProfileName = "/interaction_profiles/facebook/touch_controller_pro" } } }, new ActionConfig { name = "menu", localizedName = "Menu", type = ActionType.Binary, usages = new List { "MenuButton" }, bindings = new List { new ActionBinding { interactionPath = "/input/menu/click", interactionProfileName = "/interaction_profiles/facebook/touch_controller_pro", userPaths = new List { "/user/hand/left" } }, new ActionBinding { interactionPath = "/input/system/click", interactionProfileName = "/interaction_profiles/facebook/touch_controller_pro", userPaths = new List { "/user/hand/right" } } } }, new ActionConfig { name = "primaryButton", localizedName = "Primary Button", type = ActionType.Binary, usages = new List { "PrimaryButton" }, bindings = new List { new ActionBinding { interactionPath = "/input/x/click", interactionProfileName = "/interaction_profiles/facebook/touch_controller_pro", userPaths = new List { "/user/hand/left" } }, new ActionBinding { interactionPath = "/input/a/click", interactionProfileName = "/interaction_profiles/facebook/touch_controller_pro", userPaths = new List { "/user/hand/right" } } } }, new ActionConfig { name = "primaryTouched", localizedName = "Primary Touched", type = ActionType.Binary, usages = new List { "PrimaryTouch" }, bindings = new List { new ActionBinding { interactionPath = "/input/x/touch", interactionProfileName = "/interaction_profiles/facebook/touch_controller_pro", userPaths = new List { "/user/hand/left" } }, new ActionBinding { interactionPath = "/input/a/touch", interactionProfileName = "/interaction_profiles/facebook/touch_controller_pro", userPaths = new List { "/user/hand/right" } } } }, new ActionConfig { name = "secondaryButton", localizedName = "Secondary Button", type = ActionType.Binary, usages = new List { "SecondaryButton" }, bindings = new List { new ActionBinding { interactionPath = "/input/y/click", interactionProfileName = "/interaction_profiles/facebook/touch_controller_pro", userPaths = new List { "/user/hand/left" } }, new ActionBinding { interactionPath = "/input/b/click", interactionProfileName = "/interaction_profiles/facebook/touch_controller_pro", userPaths = new List { "/user/hand/right" } } } }, new ActionConfig { name = "secondaryTouched", localizedName = "Secondary Touched", type = ActionType.Binary, usages = new List { "SecondaryTouch" }, bindings = new List { new ActionBinding { interactionPath = "/input/y/touch", interactionProfileName = "/interaction_profiles/facebook/touch_controller_pro", userPaths = new List { "/user/hand/left" } }, new ActionBinding { interactionPath = "/input/b/touch", interactionProfileName = "/interaction_profiles/facebook/touch_controller_pro", userPaths = new List { "/user/hand/right" } } } }, new ActionConfig { name = "trigger", localizedName = "Trigger", type = ActionType.Axis1D, usages = new List { "Trigger" }, bindings = new List { new ActionBinding { interactionPath = "/input/trigger/value", interactionProfileName = "/interaction_profiles/facebook/touch_controller_pro" } } }, new ActionConfig { name = "triggerPressed", localizedName = "Trigger Pressed", type = ActionType.Binary, usages = new List { "TriggerButton" }, bindings = new List { new ActionBinding { interactionPath = "/input/trigger/value", interactionProfileName = "/interaction_profiles/facebook/touch_controller_pro" } } }, new ActionConfig { name = "triggerTouched", localizedName = "Trigger Touched", type = ActionType.Binary, usages = new List { "TriggerTouch" }, bindings = new List { new ActionBinding { interactionPath = "/input/trigger/touch", interactionProfileName = "/interaction_profiles/facebook/touch_controller_pro" } } }, new ActionConfig { name = "thumbstickClicked", localizedName = "Thumbstick Clicked", type = ActionType.Binary, usages = new List { "Primary2DAxisClick" }, bindings = new List { new ActionBinding { interactionPath = "/input/thumbstick/click", interactionProfileName = "/interaction_profiles/facebook/touch_controller_pro" } } }, new ActionConfig { name = "thumbstickTouched", localizedName = "Thumbstick Touched", type = ActionType.Binary, usages = new List { "Primary2DAxisTouch" }, bindings = new List { new ActionBinding { interactionPath = "/input/thumbstick/touch", interactionProfileName = "/interaction_profiles/facebook/touch_controller_pro" } } }, new ActionConfig { name = "thumbrestTouched", localizedName = "Thumbrest Touched", type = ActionType.Binary, usages = new List { "ThumbrestTouch" }, bindings = new List { new ActionBinding { interactionPath = "/input/thumbrest/touch", interactionProfileName = "/interaction_profiles/facebook/touch_controller_pro" } } }, new ActionConfig { name = "devicePose", localizedName = "Device Pose", type = ActionType.Pose, usages = new List { "Device" }, bindings = new List { new ActionBinding { interactionPath = "/input/grip/pose", interactionProfileName = "/interaction_profiles/facebook/touch_controller_pro" } } }, new ActionConfig { name = "pointer", localizedName = "Pointer Pose", type = ActionType.Pose, usages = new List { "Pointer" }, bindings = new List { new ActionBinding { interactionPath = "/input/aim/pose", interactionProfileName = "/interaction_profiles/facebook/touch_controller_pro" } } }, new ActionConfig { name = "haptic", localizedName = "Haptic Output", type = ActionType.Vibrate, usages = new List { "Haptic" }, bindings = new List { new ActionBinding { interactionPath = "/output/haptic", interactionProfileName = "/interaction_profiles/facebook/touch_controller_pro" } } }, new ActionConfig { name = "thumbrestForce", localizedName = "Thumbrest Force", type = ActionType.Axis1D, usages = new List { "ThumbrestForce" }, bindings = new List { new ActionBinding { interactionPath = "/input/thumbrest/force", interactionProfileName = "/interaction_profiles/facebook/touch_controller_pro" } } }, new ActionConfig { name = "stylusForce", localizedName = "Stylus Force", type = ActionType.Axis1D, usages = new List { "StylusForce" }, bindings = new List { new ActionBinding { interactionPath = "/input/stylus_fb/force", interactionProfileName = "/interaction_profiles/facebook/touch_controller_pro" } } }, new ActionConfig { name = "triggerCurl", localizedName = "Trigger Curl", type = ActionType.Axis1D, usages = new List { "TriggerCurl" }, bindings = new List { new ActionBinding { interactionPath = "/input/trigger/curl_fb", interactionProfileName = "/interaction_profiles/facebook/touch_controller_pro" } } }, new ActionConfig { name = "triggerSlide", localizedName = "Trigger Slide", type = ActionType.Axis1D, usages = new List { "TriggerSlide" }, bindings = new List { new ActionBinding { interactionPath = "/input/trigger/slide_fb", interactionProfileName = "/interaction_profiles/facebook/touch_controller_pro" } } }, new ActionConfig { name = "triggerProximity", localizedName = "Trigger Proximity", type = ActionType.Binary, usages = new List { "TriggerProximity" }, bindings = new List { new ActionBinding { interactionPath = "/input/trigger/proximity_fb", interactionProfileName = "/interaction_profiles/facebook/touch_controller_pro" } } }, new ActionConfig { name = "thumbProximity", localizedName = "Thumb Proximity", type = ActionType.Binary, usages = new List { "ThumbProximity" }, bindings = new List { new ActionBinding { interactionPath = "/input/thumb_fb/proximity_fb", interactionProfileName = "/interaction_profiles/facebook/touch_controller_pro" } } }, new ActionConfig { name = "hapticTrigger", localizedName = "Haptic Trigger Output", type = ActionType.Vibrate, usages = new List { "HapticTrigger" }, bindings = new List { new ActionBinding { interactionPath = "/output/trigger_haptic_fb", interactionProfileName = "/interaction_profiles/facebook/touch_controller_pro" } } }, new ActionConfig { name = "hapticThumb", localizedName = "Haptic Thumb Output", type = ActionType.Vibrate, usages = new List { "HapticThumb" }, bindings = new List { new ActionBinding { interactionPath = "/output/thumb_haptic_fb", interactionProfileName = "/interaction_profiles/facebook/touch_controller_pro" } } } } }; AddActionMap(map); } } [Obsolete("OpenXR.Features.MicrosoftHandInteraction is now deprecated and not recommended for production. To access HoloLens 2 functionality, use OpenXR 1.14 on Unity 6.0 or earlier.", false)] public class MicrosoftHandInteraction : OpenXRInteractionFeature { [Preserve] [InputControlLayout(displayName = "Hololens Hand (OpenXR)", commonUsages = new string[] { "LeftHand", "RightHand" })] public class HoloLensHand : XRController { [Preserve] [InputControl(usage = "PrimaryAxis")] public AxisControl select { get; private set; } [Preserve] [InputControl(aliases = new string[] { "Primary", "selectbutton" }, usages = new string[] { "PrimaryButton" })] public ButtonControl selectPressed { get; private set; } [Preserve] [InputControl(alias = "Secondary", usage = "Grip")] public AxisControl squeeze { get; private set; } [Preserve] [InputControl(aliases = new string[] { "GripButton", "squeezeClicked" }, usages = new string[] { "GripButton" })] public ButtonControl squeezePressed { get; private set; } [Preserve] [InputControl(offset = 0u, alias = "device", usage = "Device")] public PoseControl devicePose { get; private set; } [Preserve] [InputControl(offset = 0u, usage = "Pointer")] public PoseControl pointer { get; private set; } [Preserve] [InputControl(offset = 132u)] public ButtonControl isTracked { get; private set; } [Preserve] [InputControl(offset = 136u)] public IntegerControl trackingState { get; private set; } [Preserve] [InputControl(offset = 20u, alias = "gripPosition")] public Vector3Control devicePosition { get; private set; } [Preserve] [InputControl(offset = 32u, alias = "gripOrientation")] public QuaternionControl deviceRotation { get; private set; } [Preserve] [InputControl(offset = 80u)] public Vector3Control pointerPosition { get; private set; } [Preserve] [InputControl(offset = 92u, alias = "pointerOrientation")] public QuaternionControl pointerRotation { get; private set; } protected override void FinishSetup() { ((XRController)this).FinishSetup(); select = ((InputControl)this).GetChildControl("select"); selectPressed = ((InputControl)this).GetChildControl("selectPressed"); squeeze = ((InputControl)this).GetChildControl("squeeze"); squeezePressed = ((InputControl)this).GetChildControl("squeezePressed"); devicePose = ((InputControl)this).GetChildControl("devicePose"); pointer = ((InputControl)this).GetChildControl("pointer"); isTracked = ((InputControl)this).GetChildControl("isTracked"); trackingState = ((InputControl)this).GetChildControl("trackingState"); devicePosition = ((InputControl)this).GetChildControl("devicePosition"); deviceRotation = ((InputControl)this).GetChildControl("deviceRotation"); pointerPosition = ((InputControl)this).GetChildControl("pointerPosition"); pointerRotation = ((InputControl)this).GetChildControl("pointerRotation"); } } public const string featureId = "com.unity.openxr.feature.input.handtracking"; public const string extensionString = "XR_MSFT_hand_interaction"; public const string profile = "/interaction_profiles/microsoft/hand_interaction"; public const string select = "/input/select/value"; public const string squeeze = "/input/squeeze/value"; public const string grip = "/input/grip/pose"; public const string aim = "/input/aim/pose"; private const string kDeviceLocalizedName = "HoloLens Hand OpenXR"; private static bool wasHoloLensEnabled; protected internal override void OnEnabledChange() { base.OnEnabledChange(); if (!wasHoloLensEnabled && base.enabled) { wasHoloLensEnabled = base.enabled; Debug.LogWarning((object)"HoloLens 2 is now deprecated and is not recommended for production."); } } protected override void RegisterDeviceLayout() { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) Type? typeFromHandle = typeof(HoloLensHand); InputDeviceMatcher val = default(InputDeviceMatcher); val = ((InputDeviceMatcher)(ref val)).WithInterface("^(XRInput)", true); InputSystem.RegisterLayout(typeFromHandle, (string)null, (InputDeviceMatcher?)((InputDeviceMatcher)(ref val)).WithProduct("HoloLens Hand OpenXR", true)); } protected override void UnregisterDeviceLayout() { InputSystem.RemoveLayout("HoloLensHand"); } protected override string GetDeviceLayoutName() { return "HoloLensHand"; } protected override void RegisterActionMapsWithRuntime() { //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) ActionMapConfig map = new ActionMapConfig { name = "microsofthandinteraction", localizedName = "HoloLens Hand OpenXR", desiredInteractionProfile = "/interaction_profiles/microsoft/hand_interaction", manufacturer = "Microsoft", serialNumber = "", deviceInfos = new List { new DeviceConfig { characteristics = (InputDeviceCharacteristics)364, userPath = "/user/hand/left" }, new DeviceConfig { characteristics = (InputDeviceCharacteristics)620, userPath = "/user/hand/right" } }, actions = new List { new ActionConfig { name = "select", localizedName = "Select", type = ActionType.Axis1D, usages = new List { "PrimaryAxis" }, bindings = new List { new ActionBinding { interactionPath = "/input/select/value", interactionProfileName = "/interaction_profiles/microsoft/hand_interaction" } } }, new ActionConfig { name = "selectPressed", localizedName = "Select Pressed", type = ActionType.Binary, usages = new List { "PrimaryButton" }, bindings = new List { new ActionBinding { interactionPath = "/input/select/value", interactionProfileName = "/interaction_profiles/microsoft/hand_interaction" } } }, new ActionConfig { name = "squeeze", localizedName = "Squeeze", type = ActionType.Axis1D, usages = new List { "Grip" }, bindings = new List { new ActionBinding { interactionPath = "/input/squeeze/value", interactionProfileName = "/interaction_profiles/microsoft/hand_interaction" } } }, new ActionConfig { name = "squeezePressed", localizedName = "Squeeze Pressed", type = ActionType.Binary, usages = new List { "GripButton" }, bindings = new List { new ActionBinding { interactionPath = "/input/squeeze/value", interactionProfileName = "/interaction_profiles/microsoft/hand_interaction" } } }, new ActionConfig { name = "devicePose", localizedName = "Device Pose", type = ActionType.Pose, usages = new List { "Device" }, bindings = new List { new ActionBinding { interactionPath = "/input/grip/pose", interactionProfileName = "/interaction_profiles/microsoft/hand_interaction" } } }, new ActionConfig { name = "pointer", localizedName = "Pointer Pose", type = ActionType.Pose, usages = new List { "Pointer" }, bindings = new List { new ActionBinding { interactionPath = "/input/aim/pose", interactionProfileName = "/interaction_profiles/microsoft/hand_interaction" } } } } }; AddActionMap(map); } } public class MicrosoftMotionControllerProfile : OpenXRInteractionFeature { [Preserve] [InputControlLayout(displayName = "Windows MR Controller (OpenXR)", commonUsages = new string[] { "LeftHand", "RightHand" })] public class WMRSpatialController : XRControllerWithRumble { [Preserve] [InputControl(aliases = new string[] { "Primary2DAxis", "thumbstickaxes", "thumbstick" }, usage = "Primary2DAxis")] public StickControl joystick { get; private set; } [Preserve] [InputControl(aliases = new string[] { "Secondary2DAxis", "touchpadaxes", "trackpad" }, usage = "Secondary2DAxis")] public StickControl touchpad { get; private set; } [Preserve] [InputControl(aliases = new string[] { "GripAxis", "squeeze" }, usage = "Grip")] public AxisControl grip { get; private set; } [Preserve] [InputControl(aliases = new string[] { "GripButton", "squeezeClicked" }, usage = "GripButton")] public ButtonControl gripPressed { get; private set; } [Preserve] [InputControl(aliases = new string[] { "Primary", "menubutton" }, usage = "MenuButton")] public ButtonControl menu { get; private set; } [Preserve] [InputControl(aliases = new string[] { "triggeraxis" }, usage = "Trigger")] public AxisControl trigger { get; private set; } [Preserve] [InputControl(alias = "triggerbutton", usage = "TriggerButton")] public ButtonControl triggerPressed { get; private set; } [Preserve] [InputControl(aliases = new string[] { "joystickClicked", "thumbstickpressed" }, usage = "Primary2DAxisClick")] public ButtonControl joystickClicked { get; private set; } [Preserve] [InputControl(aliases = new string[] { "joystickorpadpressed", "touchpadpressed", "trackpadClicked" }, usage = "Secondary2DAxisClick")] public ButtonControl touchpadClicked { get; private set; } [Preserve] [InputControl(aliases = new string[] { "joystickorpadtouched", "touchpadtouched", "trackpadTouched" }, usage = "Secondary2DAxisTouch")] public ButtonControl touchpadTouched { get; private set; } [Preserve] [InputControl(offset = 0u, aliases = new string[] { "device", "gripPose" }, usage = "Device")] public PoseControl devicePose { get; private set; } [Preserve] [InputControl(offset = 0u, aliases = new string[] { "aimPose" }, usage = "Pointer")] public PoseControl pointer { get; private set; } [Preserve] [InputControl(offset = 32u)] public ButtonControl isTracked { get; private set; } [Preserve] [InputControl(offset = 36u)] public IntegerControl trackingState { get; private set; } [Preserve] [InputControl(offset = 40u, aliases = new string[] { "gripPosition" })] public Vector3Control devicePosition { get; private set; } [Preserve] [InputControl(offset = 52u, aliases = new string[] { "gripOrientation" })] public QuaternionControl deviceRotation { get; private set; } [Preserve] [InputControl(offset = 100u)] public Vector3Control pointerPosition { get; private set; } [Preserve] [InputControl(offset = 112u, aliases = new string[] { "pointerOrientation" })] public QuaternionControl pointerRotation { get; private set; } [Preserve] [InputControl(usage = "Haptic")] public HapticControl haptic { get; private set; } protected override void FinishSetup() { ((XRController)this).FinishSetup(); joystick = ((InputControl)this).GetChildControl("joystick"); trigger = ((InputControl)this).GetChildControl("trigger"); touchpad = ((InputControl)this).GetChildControl("touchpad"); grip = ((InputControl)this).GetChildControl("grip"); gripPressed = ((InputControl)this).GetChildControl("gripPressed"); menu = ((InputControl)this).GetChildControl("menu"); joystickClicked = ((InputControl)this).GetChildControl("joystickClicked"); triggerPressed = ((InputControl)this).GetChildControl("triggerPressed"); touchpadClicked = ((InputControl)this).GetChildControl("touchpadClicked"); touchpadTouched = ((InputControl)this).GetChildControl("touchPadTouched"); devicePose = ((InputControl)this).GetChildControl("devicePose"); pointer = ((InputControl)this).GetChildControl("pointer"); isTracked = ((InputControl)this).GetChildControl("isTracked"); trackingState = ((InputControl)this).GetChildControl("trackingState"); devicePosition = ((InputControl)this).GetChildControl("devicePosition"); deviceRotation = ((InputControl)this).GetChildControl("deviceRotation"); pointerPosition = ((InputControl)this).GetChildControl("pointerPosition"); pointerRotation = ((InputControl)this).GetChildControl("pointerRotation"); haptic = ((InputControl)this).GetChildControl("haptic"); } } public const string featureId = "com.unity.openxr.feature.input.microsoftmotioncontroller"; public const string profile = "/interaction_profiles/microsoft/motion_controller"; public const string menu = "/input/menu/click"; public const string squeeze = "/input/squeeze/click"; public const string trigger = "/input/trigger/value"; public const string thumbstick = "/input/thumbstick"; public const string thumbstickClick = "/input/thumbstick/click"; public const string trackpad = "/input/trackpad"; public const string trackpadClick = "/input/trackpad/click"; public const string trackpadTouch = "/input/trackpad/touch"; public const string grip = "/input/grip/pose"; public const string aim = "/input/aim/pose"; public const string haptic = "/output/haptic"; private const string kDeviceLocalizedName = "Windows MR Controller OpenXR"; protected override void RegisterDeviceLayout() { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) Type? typeFromHandle = typeof(WMRSpatialController); InputDeviceMatcher val = default(InputDeviceMatcher); val = ((InputDeviceMatcher)(ref val)).WithInterface("^(XRInput)", true); InputSystem.RegisterLayout(typeFromHandle, (string)null, (InputDeviceMatcher?)((InputDeviceMatcher)(ref val)).WithProduct("Windows MR Controller OpenXR", true)); } protected override void UnregisterDeviceLayout() { InputSystem.RemoveLayout("WMRSpatialController"); } protected override string GetDeviceLayoutName() { return "WMRSpatialController"; } protected override void RegisterActionMapsWithRuntime() { //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) ActionMapConfig map = new ActionMapConfig { name = "microsoftmotioncontroller", localizedName = "Windows MR Controller OpenXR", desiredInteractionProfile = "/interaction_profiles/microsoft/motion_controller", manufacturer = "Microsoft", serialNumber = "", deviceInfos = new List { new DeviceConfig { characteristics = (InputDeviceCharacteristics)356, userPath = "/user/hand/left" }, new DeviceConfig { characteristics = (InputDeviceCharacteristics)612, userPath = "/user/hand/right" } }, actions = new List { new ActionConfig { name = "joystick", localizedName = "Joystick", type = ActionType.Axis2D, usages = new List { "Primary2DAxis" }, bindings = new List { new ActionBinding { interactionPath = "/input/thumbstick", interactionProfileName = "/interaction_profiles/microsoft/motion_controller" } } }, new ActionConfig { name = "touchpad", localizedName = "Touchpad", type = ActionType.Axis2D, usages = new List { "Secondary2DAxis" }, bindings = new List { new ActionBinding { interactionPath = "/input/trackpad", interactionProfileName = "/interaction_profiles/microsoft/motion_controller" } } }, new ActionConfig { name = "grip", localizedName = "Grip", type = ActionType.Axis1D, usages = new List { "Grip" }, bindings = new List { new ActionBinding { interactionPath = "/input/squeeze/click", interactionProfileName = "/interaction_profiles/microsoft/motion_controller" } } }, new ActionConfig { name = "gripPressed", localizedName = "Grip Pressed", type = ActionType.Binary, usages = new List { "GripButton" }, bindings = new List { new ActionBinding { interactionPath = "/input/squeeze/click", interactionProfileName = "/interaction_profiles/microsoft/motion_controller" } } }, new ActionConfig { name = "menu", localizedName = "Menu", type = ActionType.Binary, usages = new List { "MenuButton" }, bindings = new List { new ActionBinding { interactionPath = "/input/menu/click", interactionProfileName = "/interaction_profiles/microsoft/motion_controller" } } }, new ActionConfig { name = "trigger", localizedName = "Trigger", type = ActionType.Axis1D, usages = new List { "Trigger" }, bindings = new List { new ActionBinding { interactionPath = "/input/trigger/value", interactionProfileName = "/interaction_profiles/microsoft/motion_controller" } } }, new ActionConfig { name = "triggerPressed", localizedName = "Trigger Pressed", type = ActionType.Binary, usages = new List { "TriggerButton" }, bindings = new List { new ActionBinding { interactionPath = "/input/trigger/value", interactionProfileName = "/interaction_profiles/microsoft/motion_controller" } } }, new ActionConfig { name = "joystickClicked", localizedName = "JoystickClicked", type = ActionType.Binary, usages = new List { "Primary2DAxisClick" }, bindings = new List { new ActionBinding { interactionPath = "/input/thumbstick/click", interactionProfileName = "/interaction_profiles/microsoft/motion_controller" } } }, new ActionConfig { name = "touchpadClicked", localizedName = "Touchpad Clicked", type = ActionType.Binary, usages = new List { "Secondary2DAxisClick" }, bindings = new List { new ActionBinding { interactionPath = "/input/trackpad/click", interactionProfileName = "/interaction_profiles/microsoft/motion_controller" } } }, new ActionConfig { name = "touchpadTouched", localizedName = "Touchpad Touched", type = ActionType.Binary, usages = new List { "Secondary2DAxisTouch" }, bindings = new List { new ActionBinding { interactionPath = "/input/trackpad/touch", interactionProfileName = "/interaction_profiles/microsoft/motion_controller" } } }, new ActionConfig { name = "devicePose", localizedName = "Device Pose", type = ActionType.Pose, usages = new List { "Device" }, bindings = new List { new ActionBinding { interactionPath = "/input/grip/pose", interactionProfileName = "/interaction_profiles/microsoft/motion_controller" } } }, new ActionConfig { name = "pointer", localizedName = "Pointer Pose", type = ActionType.Pose, usages = new List { "Pointer" }, bindings = new List { new ActionBinding { interactionPath = "/input/aim/pose", interactionProfileName = "/interaction_profiles/microsoft/motion_controller" } } }, new ActionConfig { name = "haptic", localizedName = "Haptic Output", type = ActionType.Vibrate, usages = new List { "Haptic" }, bindings = new List { new ActionBinding { interactionPath = "/output/haptic", interactionProfileName = "/interaction_profiles/microsoft/motion_controller" } } } } }; AddActionMap(map); } } public class OculusTouchControllerProfile : OpenXRInteractionFeature { [Preserve] [InputControlLayout(displayName = "Oculus Touch Controller (OpenXR)", commonUsages = new string[] { "LeftHand", "RightHand" })] public class OculusTouchController : XRControllerWithRumble { [Preserve] [InputControl(aliases = new string[] { "Primary2DAxis", "Joystick" }, usage = "Primary2DAxis")] public StickControl thumbstick { get; private set; } [Preserve] [InputControl(aliases = new string[] { "GripAxis", "squeeze" }, usage = "Grip")] public AxisControl grip { get; private set; } [Preserve] [InputControl(aliases = new string[] { "GripButton", "squeezeClicked" }, usage = "GripButton")] public ButtonControl gripPressed { get; private set; } [Preserve] [InputControl(aliases = new string[] { "Primary", "menuButton", "systemButton" }, usage = "MenuButton")] public ButtonControl menu { get; private set; } [Preserve] [InputControl(aliases = new string[] { "A", "X", "buttonA", "buttonX" }, usage = "PrimaryButton")] public ButtonControl primaryButton { get; private set; } [Preserve] [InputControl(aliases = new string[] { "ATouched", "XTouched", "ATouch", "XTouch", "buttonATouched", "buttonXTouched" }, usage = "PrimaryTouch")] public ButtonControl primaryTouched { get; private set; } [Preserve] [InputControl(aliases = new string[] { "B", "Y", "buttonB", "buttonY" }, usage = "SecondaryButton")] public ButtonControl secondaryButton { get; private set; } [Preserve] [InputControl(aliases = new string[] { "BTouched", "YTouched", "BTouch", "YTouch", "buttonBTouched", "buttonYTouched" }, usage = "SecondaryTouch")] public ButtonControl secondaryTouched { get; private set; } [Preserve] [InputControl(usage = "Trigger")] public AxisControl trigger { get; private set; } [Preserve] [InputControl(aliases = new string[] { "indexButton", "indexTouched", "triggerbutton" }, usage = "TriggerButton")] public ButtonControl triggerPressed { get; private set; } [Preserve] [InputControl(aliases = new string[] { "indexTouch", "indexNearTouched" }, usage = "TriggerTouch")] public ButtonControl triggerTouched { get; private set; } [Preserve] [InputControl(aliases = new string[] { "JoystickOrPadPressed", "thumbstickClick", "joystickClicked" }, usage = "Primary2DAxisClick")] public ButtonControl thumbstickClicked { get; private set; } [Preserve] [InputControl(aliases = new string[] { "JoystickOrPadTouched", "thumbstickTouch", "joystickTouched" }, usage = "Primary2DAxisTouch")] public ButtonControl thumbstickTouched { get; private set; } [Preserve] [InputControl(usage = "ThumbrestTouch")] public ButtonControl thumbrestTouched { get; private set; } [Preserve] [InputControl(offset = 0u, aliases = new string[] { "device", "gripPose" }, usage = "Device")] public PoseControl devicePose { get; private set; } [Preserve] [InputControl(offset = 0u, alias = "aimPose", usage = "Pointer")] public PoseControl pointer { get; private set; } [Preserve] [InputControl(offset = 28u, usage = "IsTracked")] public ButtonControl isTracked { get; private set; } [Preserve] [InputControl(offset = 32u, usage = "TrackingState")] public IntegerControl trackingState { get; private set; } [Preserve] [InputControl(offset = 36u, noisy = true, alias = "gripPosition")] public Vector3Control devicePosition { get; private set; } [Preserve] [InputControl(offset = 48u, noisy = true, alias = "gripOrientation")] public QuaternionControl deviceRotation { get; private set; } [Preserve] [InputControl(offset = 96u)] public Vector3Control pointerPosition { get; private set; } [Preserve] [InputControl(offset = 108u, alias = "pointerOrientation")] public QuaternionControl pointerRotation { get; private set; } [Preserve] [InputControl(usage = "Haptic")] public HapticControl haptic { get; private set; } protected override void FinishSetup() { ((XRController)this).FinishSetup(); thumbstick = ((InputControl)this).GetChildControl("thumbstick"); trigger = ((InputControl)this).GetChildControl("trigger"); triggerPressed = ((InputControl)this).GetChildControl("triggerPressed"); triggerTouched = ((InputControl)this).GetChildControl("triggerTouched"); grip = ((InputControl)this).GetChildControl("grip"); gripPressed = ((InputControl)this).GetChildControl("gripPressed"); menu = ((InputControl)this).GetChildControl("menu"); primaryButton = ((InputControl)this).GetChildControl("primaryButton"); primaryTouched = ((InputControl)this).GetChildControl("primaryTouched"); secondaryButton = ((InputControl)this).GetChildControl("secondaryButton"); secondaryTouched = ((InputControl)this).GetChildControl("secondaryTouched"); thumbstickClicked = ((InputControl)this).GetChildControl("thumbstickClicked"); thumbstickTouched = ((InputControl)this).GetChildControl("thumbstickTouched"); thumbrestTouched = ((InputControl)this).GetChildControl("thumbrestTouched"); devicePose = ((InputControl)this).GetChildControl("devicePose"); pointer = ((InputControl)this).GetChildControl("pointer"); isTracked = ((InputControl)this).GetChildControl("isTracked"); trackingState = ((InputControl)this).GetChildControl("trackingState"); devicePosition = ((InputControl)this).GetChildControl("devicePosition"); deviceRotation = ((InputControl)this).GetChildControl("deviceRotation"); pointerPosition = ((InputControl)this).GetChildControl("pointerPosition"); pointerRotation = ((InputControl)this).GetChildControl("pointerRotation"); haptic = ((InputControl)this).GetChildControl("haptic"); } } public const string featureId = "com.unity.openxr.feature.input.oculustouch"; public const string profile = "/interaction_profiles/oculus/touch_controller"; public const string buttonX = "/input/x/click"; public const string buttonXTouch = "/input/x/touch"; public const string buttonY = "/input/y/click"; public const string buttonYTouch = "/input/y/touch"; public const string menu = "/input/menu/click"; public const string buttonA = "/input/a/click"; public const string buttonATouch = "/input/a/touch"; public const string buttonB = "/input/b/click"; public const string buttonBTouch = "/input/b/touch"; public const string system = "/input/system/click"; public const string squeeze = "/input/squeeze/value"; public const string trigger = "/input/trigger/value"; public const string triggerTouch = "/input/trigger/touch"; public const string thumbstick = "/input/thumbstick"; public const string thumbstickClick = "/input/thumbstick/click"; public const string thumbstickTouch = "/input/thumbstick/touch"; public const string thumbrest = "/input/thumbrest/touch"; public const string grip = "/input/grip/pose"; public const string aim = "/input/aim/pose"; public const string haptic = "/output/haptic"; private const string kDeviceLocalizedName = "Oculus Touch Controller OpenXR"; protected override void RegisterDeviceLayout() { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) Type? typeFromHandle = typeof(OculusTouchController); InputDeviceMatcher val = default(InputDeviceMatcher); val = ((InputDeviceMatcher)(ref val)).WithInterface("^(XRInput)", true); InputSystem.RegisterLayout(typeFromHandle, (string)null, (InputDeviceMatcher?)((InputDeviceMatcher)(ref val)).WithProduct("Oculus Touch Controller OpenXR", true)); } protected override void UnregisterDeviceLayout() { InputSystem.RemoveLayout("OculusTouchController"); } protected override string GetDeviceLayoutName() { return "OculusTouchController"; } protected override void RegisterActionMapsWithRuntime() { //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) ActionMapConfig map = new ActionMapConfig { name = "oculustouchcontroller", localizedName = "Oculus Touch Controller OpenXR", desiredInteractionProfile = "/interaction_profiles/oculus/touch_controller", manufacturer = "Oculus", serialNumber = "", deviceInfos = new List { new DeviceConfig { characteristics = (InputDeviceCharacteristics)356, userPath = "/user/hand/left" }, new DeviceConfig { characteristics = (InputDeviceCharacteristics)612, userPath = "/user/hand/right" } }, actions = new List { new ActionConfig { name = "thumbstick", localizedName = "Thumbstick", type = ActionType.Axis2D, usages = new List { "Primary2DAxis" }, bindings = new List { new ActionBinding { interactionPath = "/input/thumbstick", interactionProfileName = "/interaction_profiles/oculus/touch_controller" } } }, new ActionConfig { name = "grip", localizedName = "Grip", type = ActionType.Axis1D, usages = new List { "Grip" }, bindings = new List { new ActionBinding { interactionPath = "/input/squeeze/value", interactionProfileName = "/interaction_profiles/oculus/touch_controller" } } }, new ActionConfig { name = "gripPressed", localizedName = "Grip Pressed", type = ActionType.Binary, usages = new List { "GripButton" }, bindings = new List { new ActionBinding { interactionPath = "/input/squeeze/value", interactionProfileName = "/interaction_profiles/oculus/touch_controller" } } }, new ActionConfig { name = "menu", localizedName = "Menu", type = ActionType.Binary, usages = new List { "MenuButton" }, bindings = new List { new ActionBinding { interactionPath = "/input/menu/click", interactionProfileName = "/interaction_profiles/oculus/touch_controller", userPaths = new List { "/user/hand/left" } }, new ActionBinding { interactionPath = "/input/system/click", interactionProfileName = "/interaction_profiles/oculus/touch_controller", userPaths = new List { "/user/hand/right" } } } }, new ActionConfig { name = "primaryButton", localizedName = "Primary Button", type = ActionType.Binary, usages = new List { "PrimaryButton" }, bindings = new List { new ActionBinding { interactionPath = "/input/x/click", interactionProfileName = "/interaction_profiles/oculus/touch_controller", userPaths = new List { "/user/hand/left" } }, new ActionBinding { interactionPath = "/input/a/click", interactionProfileName = "/interaction_profiles/oculus/touch_controller", userPaths = new List { "/user/hand/right" } } } }, new ActionConfig { name = "primaryTouched", localizedName = "Primary Touched", type = ActionType.Binary, usages = new List { "PrimaryTouch" }, bindings = new List { new ActionBinding { interactionPath = "/input/x/touch", interactionProfileName = "/interaction_profiles/oculus/touch_controller", userPaths = new List { "/user/hand/left" } }, new ActionBinding { interactionPath = "/input/a/touch", interactionProfileName = "/interaction_profiles/oculus/touch_controller", userPaths = new List { "/user/hand/right" } } } }, new ActionConfig { name = "secondaryButton", localizedName = "Secondary Button", type = ActionType.Binary, usages = new List { "SecondaryButton" }, bindings = new List { new ActionBinding { interactionPath = "/input/y/click", interactionProfileName = "/interaction_profiles/oculus/touch_controller", userPaths = new List { "/user/hand/left" } }, new ActionBinding { interactionPath = "/input/b/click", interactionProfileName = "/interaction_profiles/oculus/touch_controller", userPaths = new List { "/user/hand/right" } } } }, new ActionConfig { name = "secondaryTouched", localizedName = "Secondary Touched", type = ActionType.Binary, usages = new List { "SecondaryTouch" }, bindings = new List { new ActionBinding { interactionPath = "/input/y/touch", interactionProfileName = "/interaction_profiles/oculus/touch_controller", userPaths = new List { "/user/hand/left" } }, new ActionBinding { interactionPath = "/input/b/touch", interactionProfileName = "/interaction_profiles/oculus/touch_controller", userPaths = new List { "/user/hand/right" } } } }, new ActionConfig { name = "trigger", localizedName = "Trigger", type = ActionType.Axis1D, usages = new List { "Trigger" }, bindings = new List { new ActionBinding { interactionPath = "/input/trigger/value", interactionProfileName = "/interaction_profiles/oculus/touch_controller" } } }, new ActionConfig { name = "triggerPressed", localizedName = "Trigger Pressed", type = ActionType.Binary, usages = new List { "TriggerButton" }, bindings = new List { new ActionBinding { interactionPath = "/input/trigger/value", interactionProfileName = "/interaction_profiles/oculus/touch_controller" } } }, new ActionConfig { name = "triggerTouched", localizedName = "Trigger Touched", type = ActionType.Binary, usages = new List { "TriggerTouch" }, bindings = new List { new ActionBinding { interactionPath = "/input/trigger/touch", interactionProfileName = "/interaction_profiles/oculus/touch_controller" } } }, new ActionConfig { name = "thumbstickClicked", localizedName = "Thumbstick Clicked", type = ActionType.Binary, usages = new List { "Primary2DAxisClick" }, bindings = new List { new ActionBinding { interactionPath = "/input/thumbstick/click", interactionProfileName = "/interaction_profiles/oculus/touch_controller" } } }, new ActionConfig { name = "thumbstickTouched", localizedName = "Thumbstick Touched", type = ActionType.Binary, usages = new List { "Primary2DAxisTouch" }, bindings = new List { new ActionBinding { interactionPath = "/input/thumbstick/touch", interactionProfileName = "/interaction_profiles/oculus/touch_controller" } } }, new ActionConfig { name = "thumbrestTouched", localizedName = "Thumbrest Touched", type = ActionType.Binary, usages = new List { "ThumbrestTouch" }, bindings = new List { new ActionBinding { interactionPath = "/input/thumbrest/touch", interactionProfileName = "/interaction_profiles/oculus/touch_controller" } } }, new ActionConfig { name = "devicePose", localizedName = "Device Pose", type = ActionType.Pose, usages = new List { "Device" }, bindings = new List { new ActionBinding { interactionPath = "/input/grip/pose", interactionProfileName = "/interaction_profiles/oculus/touch_controller" } } }, new ActionConfig { name = "pointer", localizedName = "Pointer Pose", type = ActionType.Pose, usages = new List { "Pointer" }, bindings = new List { new ActionBinding { interactionPath = "/input/aim/pose", interactionProfileName = "/interaction_profiles/oculus/touch_controller" } } }, new ActionConfig { name = "haptic", localizedName = "Haptic Output", type = ActionType.Vibrate, usages = new List { "Haptic" }, bindings = new List { new ActionBinding { interactionPath = "/output/haptic", interactionProfileName = "/interaction_profiles/oculus/touch_controller" } } } } }; AddActionMap(map); } } public class PalmPoseInteraction : OpenXRInteractionFeature { [Preserve] [InputControlLayout(displayName = "Palm Pose (OpenXR)", commonUsages = new string[] { "LeftHand", "RightHand" })] public class PalmPose : XRController { [Preserve] [InputControl(offset = 0u)] public PoseControl palmPose { get; private set; } [Preserve] [InputControl(offset = 0u)] public ButtonControl isTracked { get; private set; } [Preserve] [InputControl(offset = 4u)] public IntegerControl trackingState { get; private set; } [Preserve] [InputControl(offset = 8u, noisy = true, alias = "palmPosition")] public Vector3Control devicePosition { get; private set; } [Preserve] [InputControl(offset = 20u, noisy = true, alias = "palmRotation")] public QuaternionControl deviceRotation { get; private set; } [Preserve] [InputControl(offset = 8u, noisy = true)] public Vector3Control palmPosition { get; private set; } [Preserve] [InputControl(offset = 20u, noisy = true)] public QuaternionControl palmRotation { get; private set; } protected override void FinishSetup() { ((XRController)this).FinishSetup(); palmPose = ((InputControl)this).GetChildControl("palmPose"); } } public const string featureId = "com.unity.openxr.feature.input.palmpose"; public const string palmPose = "/input/palm_ext/pose"; public const string gripSurfacePose = "/input/grip_surface/pose"; public const string profile = "/interaction_profiles/ext/palmpose"; private const string kDeviceLocalizedName = "Palm Pose Interaction OpenXR"; public const string extensionString = "XR_EXT_palm_pose"; internal override bool IsAdditive => true; protected internal override bool OnInstanceCreate(ulong instance) { if (!OpenXRRuntime.IsExtensionEnabled("XR_EXT_palm_pose")) { return false; } return base.OnInstanceCreate(instance); } protected override void RegisterDeviceLayout() { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) Type? typeFromHandle = typeof(PalmPose); InputDeviceMatcher val = default(InputDeviceMatcher); val = ((InputDeviceMatcher)(ref val)).WithInterface("^(XRInput)", true); InputSystem.RegisterLayout(typeFromHandle, (string)null, (InputDeviceMatcher?)((InputDeviceMatcher)(ref val)).WithProduct("Palm Pose Interaction OpenXR", true)); } protected override void UnregisterDeviceLayout() { InputSystem.RemoveLayout("PalmPose"); } protected override string GetDeviceLayoutName() { return "PalmPose"; } protected override void RegisterActionMapsWithRuntime() { //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) ActionMapConfig map = new ActionMapConfig { name = "palmposeinteraction", localizedName = "Palm Pose Interaction OpenXR", desiredInteractionProfile = "/interaction_profiles/ext/palmpose", manufacturer = "", serialNumber = "", deviceInfos = new List { new DeviceConfig { characteristics = (InputDeviceCharacteristics)364, userPath = "/user/hand/left" }, new DeviceConfig { characteristics = (InputDeviceCharacteristics)620, userPath = "/user/hand/right" } }, actions = new List { new ActionConfig { name = "palmpose", localizedName = "Palm Pose", type = ActionType.Pose, bindings = AddBindingBasedOnRuntimeAPIVersion(), isAdditive = true } } }; AddActionMap(map); } internal List AddBindingBasedOnRuntimeAPIVersion() { if (OpenXRRuntime.isRuntimeAPIVersionGreaterThan1_1()) { return new List { new ActionBinding { interactionPath = "/input/grip_surface/pose", interactionProfileName = "/interaction_profiles/ext/palmpose" } }; } return new List { new ActionBinding { interactionPath = "/input/palm_ext/pose", interactionProfileName = "/interaction_profiles/ext/palmpose" } }; } internal override void AddAdditiveActions(List actionMaps, ActionMapConfig additiveMap) { foreach (ActionMapConfig actionMap in actionMaps) { if (!actionMap.deviceInfos.Where((DeviceConfig d) => d.userPath != null && (string.CompareOrdinal(d.userPath, "/user/hand/left") == 0 || string.CompareOrdinal(d.userPath, "/user/hand/right") == 0)).Any()) { continue; } foreach (ActionConfig item in additiveMap.actions.Where((ActionConfig a) => a.isAdditive)) { actionMap.actions.Add(item); } } } } public class ValveIndexControllerProfile : OpenXRInteractionFeature { [Preserve] [InputControlLayout(displayName = "Index Controller (OpenXR)", commonUsages = new string[] { "LeftHand", "RightHand" })] public class ValveIndexController : XRControllerWithRumble { [Preserve] [InputControl(alias = "systemButton", usage = "MenuButton")] public ButtonControl system { get; private set; } [Preserve] [InputControl(usage = "MenuTouch")] public ButtonControl systemTouched { get; private set; } [Preserve] [InputControl(usage = "PrimaryButton")] public ButtonControl primaryButton { get; private set; } [Preserve] [InputControl(usage = "PrimaryTouch")] public ButtonControl primaryTouched { get; private set; } [Preserve] [InputControl(usage = "SecondaryButton")] public ButtonControl secondaryButton { get; private set; } [Preserve] [InputControl(usage = "SecondaryTouch")] public ButtonControl secondaryTouched { get; private set; } [Preserve] [InputControl(aliases = new string[] { "GripAxis", "squeeze" }, usage = "Grip")] public AxisControl grip { get; private set; } [Preserve] [InputControl(aliases = new string[] { "GripButton", "squeezeClicked" }, usage = "GripButton")] public ButtonControl gripPressed { get; private set; } [Preserve] [InputControl(alias = "squeezeForce", usage = "GripForce")] public AxisControl gripForce { get; private set; } [Preserve] [InputControl(usage = "Trigger")] public AxisControl trigger { get; private set; } [Preserve] [InputControl(usage = "TriggerButton")] public ButtonControl triggerPressed { get; private set; } [Preserve] [InputControl(usage = "TriggerTouch")] public ButtonControl triggerTouched { get; private set; } [Preserve] [InputControl(aliases = new string[] { "joystick", "Primary2DAxis" }, usage = "Primary2DAxis")] public StickControl thumbstick { get; private set; } [Preserve] [InputControl(alias = "joystickClicked", usage = "Primary2DAxisClick")] public ButtonControl thumbstickClicked { get; private set; } [Preserve] [InputControl(alias = "joystickTouched", usage = "Primary2DAxisTouch")] public ButtonControl thumbstickTouched { get; private set; } [Preserve] [InputControl(aliases = new string[] { "touchpad", "Secondary2DAxis" }, usage = "Secondary2DAxis")] public StickControl trackpad { get; private set; } [Preserve] [InputControl(alias = "touchpadTouched", usage = "Secondary2DAxisTouch")] public ButtonControl trackpadTouched { get; private set; } [Preserve] [InputControl(alias = "touchpadForce", usage = "Secondary2DAxisForce")] public AxisControl trackpadForce { get; private set; } [Preserve] [InputControl(offset = 0u, aliases = new string[] { "device", "gripPose" }, usage = "Device")] public PoseControl devicePose { get; private set; } [Preserve] [InputControl(offset = 0u, alias = "aimPose", usage = "Pointer")] public PoseControl pointer { get; private set; } [Preserve] [InputControl(offset = 53u)] public ButtonControl isTracked { get; private set; } [Preserve] [InputControl(offset = 56u)] public IntegerControl trackingState { get; private set; } [Preserve] [InputControl(offset = 60u, alias = "gripPosition")] public Vector3Control devicePosition { get; private set; } [Preserve] [InputControl(offset = 72u, alias = "gripOrientation")] public QuaternionControl deviceRotation { get; private set; } [Preserve] [InputControl(offset = 120u)] public Vector3Control pointerPosition { get; private set; } [Preserve] [InputControl(offset = 132u, alias = "pointerOrientation")] public QuaternionControl pointerRotation { get; private set; } [Preserve] [InputControl(usage = "Haptic")] public HapticControl haptic { get; private set; } protected override void FinishSetup() { ((XRController)this).FinishSetup(); system = ((InputControl)this).GetChildControl("system"); systemTouched = ((InputControl)this).GetChildControl("systemTouched"); primaryButton = ((InputControl)this).GetChildControl("primaryButton"); primaryTouched = ((InputControl)this).GetChildControl("primaryTouched"); secondaryButton = ((InputControl)this).GetChildControl("secondaryButton"); secondaryTouched = ((InputControl)this).GetChildControl("secondaryTouched"); grip = ((InputControl)this).GetChildControl("grip"); gripPressed = ((InputControl)this).GetChildControl("gripPressed"); gripForce = ((InputControl)this).GetChildControl("gripForce"); trigger = ((InputControl)this).GetChildControl("trigger"); triggerPressed = ((InputControl)this).GetChildControl("triggerPressed"); triggerTouched = ((InputControl)this).GetChildControl("triggerTouched"); thumbstick = ((InputControl)this).GetChildControl("thumbstick"); thumbstickClicked = ((InputControl)this).GetChildControl("thumbstickClicked"); thumbstickTouched = ((InputControl)this).GetChildControl("thumbstickTouched"); trackpad = ((InputControl)this).GetChildControl("trackpad"); trackpadTouched = ((InputControl)this).GetChildControl("trackpadTouched"); trackpadForce = ((InputControl)this).GetChildControl("trackpadForce"); devicePose = ((InputControl)this).GetChildControl("devicePose"); pointer = ((InputControl)this).GetChildControl("pointer"); isTracked = ((InputControl)this).GetChildControl("isTracked"); trackingState = ((InputControl)this).GetChildControl("trackingState"); devicePosition = ((InputControl)this).GetChildControl("devicePosition"); deviceRotation = ((InputControl)this).GetChildControl("deviceRotation"); pointerPosition = ((InputControl)this).GetChildControl("pointerPosition"); pointerRotation = ((InputControl)this).GetChildControl("pointerRotation"); haptic = ((InputControl)this).GetChildControl("haptic"); } } public const string featureId = "com.unity.openxr.feature.input.valveindex"; public const string profile = "/interaction_profiles/valve/index_controller"; public const string system = "/input/system/click"; public const string systemTouch = "/input/system/touch"; public const string buttonA = "/input/a/click"; public const string buttonATouch = "/input/a/touch"; public const string buttonB = "/input/b/click"; public const string buttonBTouch = "/input/b/touch"; public const string squeeze = "/input/squeeze/value"; public const string squeezeForce = "/input/squeeze/force"; public const string triggerClick = "/input/trigger/click"; public const string trigger = "/input/trigger/value"; public const string triggerTouch = "/input/trigger/touch"; public const string thumbstick = "/input/thumbstick"; public const string thumbstickClick = "/input/thumbstick/click"; public const string thumbstickTouch = "/input/thumbstick/touch"; public const string trackpad = "/input/trackpad"; public const string trackpadForce = "/input/trackpad/force"; public const string trackpadTouch = "/input/trackpad/touch"; public const string grip = "/input/grip/pose"; public const string aim = "/input/aim/pose"; public const string haptic = "/output/haptic"; private const string kDeviceLocalizedName = "Index Controller OpenXR"; protected override void RegisterDeviceLayout() { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) Type? typeFromHandle = typeof(ValveIndexController); InputDeviceMatcher val = default(InputDeviceMatcher); val = ((InputDeviceMatcher)(ref val)).WithInterface("^(XRInput)", true); InputSystem.RegisterLayout(typeFromHandle, (string)null, (InputDeviceMatcher?)((InputDeviceMatcher)(ref val)).WithProduct("Index Controller OpenXR", true)); } protected override void UnregisterDeviceLayout() { InputSystem.RemoveLayout("ValveIndexController"); } protected override string GetDeviceLayoutName() { return "ValveIndexController"; } protected override void RegisterActionMapsWithRuntime() { //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) ActionMapConfig map = new ActionMapConfig { name = "valveindexcontroller", localizedName = "Index Controller OpenXR", desiredInteractionProfile = "/interaction_profiles/valve/index_controller", manufacturer = "Valve", serialNumber = "", deviceInfos = new List { new DeviceConfig { characteristics = (InputDeviceCharacteristics)356, userPath = "/user/hand/left" }, new DeviceConfig { characteristics = (InputDeviceCharacteristics)612, userPath = "/user/hand/right" } }, actions = new List { new ActionConfig { name = "system", localizedName = "System", type = ActionType.Binary, usages = new List { "MenuButton" }, bindings = new List { new ActionBinding { interactionPath = "/input/system/click", interactionProfileName = "/interaction_profiles/valve/index_controller" } } }, new ActionConfig { name = "systemTouched", localizedName = "System Touched", type = ActionType.Binary, usages = new List { "MenuTouch" }, bindings = new List { new ActionBinding { interactionPath = "/input/system/touch", interactionProfileName = "/interaction_profiles/valve/index_controller" } } }, new ActionConfig { name = "primaryButton", localizedName = "Primary Button", type = ActionType.Binary, usages = new List { "PrimaryButton" }, bindings = new List { new ActionBinding { interactionPath = "/input/a/click", interactionProfileName = "/interaction_profiles/valve/index_controller" } } }, new ActionConfig { name = "primaryTouched", localizedName = "Primary Touched", type = ActionType.Binary, usages = new List { "PrimaryTouch" }, bindings = new List { new ActionBinding { interactionPath = "/input/a/touch", interactionProfileName = "/interaction_profiles/valve/index_controller" } } }, new ActionConfig { name = "secondaryButton", localizedName = "Secondary Button", type = ActionType.Binary, usages = new List { "SecondaryButton" }, bindings = new List { new ActionBinding { interactionPath = "/input/b/click", interactionProfileName = "/interaction_profiles/valve/index_controller" } } }, new ActionConfig { name = "secondaryTouched", localizedName = "Secondary Touched", type = ActionType.Binary, usages = new List { "SecondaryTouch" }, bindings = new List { new ActionBinding { interactionPath = "/input/b/touch", interactionProfileName = "/interaction_profiles/valve/index_controller" } } }, new ActionConfig { name = "grip", localizedName = "Grip", type = ActionType.Axis1D, usages = new List { "Grip" }, bindings = new List { new ActionBinding { interactionPath = "/input/squeeze/value", interactionProfileName = "/interaction_profiles/valve/index_controller" } } }, new ActionConfig { name = "gripPressed", localizedName = "Grip Pressed", type = ActionType.Binary, usages = new List { "GripButton" }, bindings = new List { new ActionBinding { interactionPath = "/input/squeeze/value", interactionProfileName = "/interaction_profiles/valve/index_controller" } } }, new ActionConfig { name = "gripForce", localizedName = "Grip Force", type = ActionType.Axis1D, usages = new List { "GripForce" }, bindings = new List { new ActionBinding { interactionPath = "/input/squeeze/force", interactionProfileName = "/interaction_profiles/valve/index_controller" } } }, new ActionConfig { name = "trigger", localizedName = "Trigger", type = ActionType.Axis1D, usages = new List { "Trigger" }, bindings = new List { new ActionBinding { interactionPath = "/input/trigger/value", interactionProfileName = "/interaction_profiles/valve/index_controller" } } }, new ActionConfig { name = "triggerPressed", localizedName = "Triggger Pressed", type = ActionType.Binary, usages = new List { "TriggerButton" }, bindings = new List { new ActionBinding { interactionPath = "/input/trigger/click", interactionProfileName = "/interaction_profiles/valve/index_controller" } } }, new ActionConfig { name = "triggerTouched", localizedName = "Trigger Touched", type = ActionType.Binary, usages = new List { "TriggerTouch" }, bindings = new List { new ActionBinding { interactionPath = "/input/trigger/touch", interactionProfileName = "/interaction_profiles/valve/index_controller" } } }, new ActionConfig { name = "thumbstick", localizedName = "Thumbstick", type = ActionType.Axis2D, usages = new List { "Primary2DAxis" }, bindings = new List { new ActionBinding { interactionPath = "/input/thumbstick", interactionProfileName = "/interaction_profiles/valve/index_controller" } } }, new ActionConfig { name = "thumbstickClicked", localizedName = "Thumbstick Clicked", type = ActionType.Binary, usages = new List { "Primary2DAxisClick" }, bindings = new List { new ActionBinding { interactionPath = "/input/thumbstick/click", interactionProfileName = "/interaction_profiles/valve/index_controller" } } }, new ActionConfig { name = "thumbstickTouched", localizedName = "Thumbstick Touched", type = ActionType.Binary, usages = new List { "Primary2DAxisTouch" }, bindings = new List { new ActionBinding { interactionPath = "/input/thumbstick/touch", interactionProfileName = "/interaction_profiles/valve/index_controller" } } }, new ActionConfig { name = "trackpad", localizedName = "Trackpad", type = ActionType.Axis2D, usages = new List { "Secondary2DAxis" }, bindings = new List { new ActionBinding { interactionPath = "/input/trackpad", interactionProfileName = "/interaction_profiles/valve/index_controller" } } }, new ActionConfig { name = "trackpadForce", localizedName = "Trackpad Force", type = ActionType.Axis1D, usages = new List { "Secondary2DAxisForce" }, bindings = new List { new ActionBinding { interactionPath = "/input/trackpad/force", interactionProfileName = "/interaction_profiles/valve/index_controller" } } }, new ActionConfig { name = "trackpadTouched", localizedName = "Trackpad Touched", type = ActionType.Binary, usages = new List { "Secondary2DAxisTouch" }, bindings = new List { new ActionBinding { interactionPath = "/input/trackpad/touch", interactionProfileName = "/interaction_profiles/valve/index_controller" } } }, new ActionConfig { name = "devicePose", localizedName = "Device Pose", type = ActionType.Pose, usages = new List { "Device" }, bindings = new List { new ActionBinding { interactionPath = "/input/grip/pose", interactionProfileName = "/interaction_profiles/valve/index_controller" } } }, new ActionConfig { name = "pointer", localizedName = "Pointer Pose", type = ActionType.Pose, usages = new List { "Pointer" }, bindings = new List { new ActionBinding { interactionPath = "/input/aim/pose", interactionProfileName = "/interaction_profiles/valve/index_controller" } } }, new ActionConfig { name = "haptic", localizedName = "Haptic Output", type = ActionType.Vibrate, usages = new List { "Haptic" }, bindings = new List { new ActionBinding { interactionPath = "/output/haptic", interactionProfileName = "/interaction_profiles/valve/index_controller" } } } } }; AddActionMap(map); } } } namespace UnityEngine.XR.OpenXR.Features.Extensions.PerformanceSettings { public class XrPerformanceSettingsFeature : OpenXRFeature { internal static class NativeApi { internal delegate void XrPerformanceNotificationDelegate(PerformanceChangeNotification notification); [DllImport("UnityOpenXR")] [return: MarshalAs(UnmanagedType.U1)] internal static extern bool xr_performance_settings_setEventCallback(XrPerformanceNotificationDelegate callback); [DllImport("UnityOpenXR")] [return: MarshalAs(UnmanagedType.U1)] internal static extern bool xr_performance_settings_setPerformanceLevel(PerformanceDomain domain, PerformanceLevelHint level); } public const string featureId = "com.unity.openxr.feature.extension.performance_settings"; public const string extensionString = "XR_EXT_performance_settings"; [CompilerGenerated] private static UnityAction m_OnXrPerformanceChangeNotification; public static event UnityAction OnXrPerformanceChangeNotification { [CompilerGenerated] add { UnityAction val = XrPerformanceSettingsFeature.m_OnXrPerformanceChangeNotification; UnityAction val2; do { val2 = val; UnityAction value2 = (UnityAction)(object)Delegate.Combine((Delegate?)(object)val2, (Delegate?)(object)value); val = Interlocked.CompareExchange(ref XrPerformanceSettingsFeature.m_OnXrPerformanceChangeNotification, value2, val2); } while (val != val2); } [CompilerGenerated] remove { UnityAction val = XrPerformanceSettingsFeature.m_OnXrPerformanceChangeNotification; UnityAction val2; do { val2 = val; UnityAction value2 = (UnityAction)(object)Delegate.Remove((Delegate?)(object)val2, (Delegate?)(object)value); val = Interlocked.CompareExchange(ref XrPerformanceSettingsFeature.m_OnXrPerformanceChangeNotification, value2, val2); } while (val != val2); } } public static bool SetPerformanceLevelHint(PerformanceDomain domain, PerformanceLevelHint level) { if (OpenXRRuntime.IsExtensionEnabled("XR_EXT_performance_settings")) { return NativeApi.xr_performance_settings_setPerformanceLevel(domain, level); } return false; } protected internal override bool OnInstanceCreate(ulong xrInstance) { if (base.OnInstanceCreate(xrInstance) && OpenXRRuntime.IsExtensionEnabled("XR_EXT_performance_settings")) { return NativeApi.xr_performance_settings_setEventCallback(OnXrPerformanceNotificationCallback); } return false; } [MonoPInvokeCallback(typeof(NativeApi.XrPerformanceNotificationDelegate))] private static void OnXrPerformanceNotificationCallback(PerformanceChangeNotification notification) { XrPerformanceSettingsFeature.OnXrPerformanceChangeNotification?.Invoke(notification); } } public enum PerformanceDomain { Cpu = 1, Gpu } public enum PerformanceSubDomain { Compositing = 1, Rendering, Thermal } public enum PerformanceLevelHint { PowerSavings = 0, SustainedLow = 25, SustainedHigh = 50, Boost = 75 } public enum PerformanceNotificationLevel { Normal = 0, Warning = 25, Impaired = 75 } public struct PerformanceChangeNotification { public PerformanceDomain domain; public PerformanceSubDomain subDomain; public PerformanceNotificationLevel fromLevel; public PerformanceNotificationLevel toLevel; } }