Decompiled source of SterlingModList v1.0.4
BepInEx/patchers/BepInExFasterLoadAssetBundles/BepInExFasterLoadAssetBundles.dll
Decompiled 3 months agousing System; using System.Buffers.Binary; using System.Collections.Concurrent; using System.Collections.Generic; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Globalization; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Threading; using System.Threading.Tasks; using BepInEx.Bootstrap; using BepInEx.Logging; using BepInExFasterLoadAssetBundles.Helpers; using BepInExFasterLoadAssetBundles.Managers; using BepInExFasterLoadAssetBundles.Models; using HarmonyLib; using Microsoft.CodeAnalysis; using Mono.Cecil; using Newtonsoft.Json; using Unity.Collections; using Unity.Collections.LowLevel.Unsafe; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("BepInExFasterLoadAssetBundles")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("0.6.4.0")] [assembly: AssemblyInformationalVersion("0.6.4+7b48a441d0dfccb001fcd003ab16b3a96d5b5a77")] [assembly: AssemblyProduct("BepInExFasterLoadAssetBundles")] [assembly: AssemblyTitle("BepInExFasterLoadAssetBundles")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.6.4.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace BepInExFasterLoadAssetBundles { public class BepInExFasterLoadAssetBundlesPatcher { internal static Harmony Harmony { get; } = new Harmony("BepInExFasterLoadAssetBundlesPatcher"); public static IEnumerable<string> TargetDLLs { get; } = Array.Empty<string>(); public static void Finish() { Harmony.PatchAll(typeof(BepInExFasterLoadAssetBundlesPatcher).Assembly); } public static void Patch(AssemblyDefinition _) { } } [HarmonyPatch] internal static class Patcher { internal static ManualLogSource Logger { get; private set; } internal static AssetBundleManager AssetBundleManager { get; private set; } internal static MetadataManager MetadataManager { get; private set; } [HarmonyPatch(typeof(Chainloader), "Initialize")] [HarmonyPostfix] public static void ChainloaderInitialized() { AsyncHelper.InitUnitySynchronizationContext(); Logger = Logger.CreateLogSource("BepInExFasterLoadAssetBundlesPatcher"); string fullName = new DirectoryInfo(Application.dataPath).Parent.FullName; string text = Path.Combine(fullName, "Cache", "AssetBundles"); if (!Directory.Exists(text)) { Directory.CreateDirectory(text); } AssetBundleManager = new AssetBundleManager(text); MetadataManager = new MetadataManager(Path.Combine(text, "metadata.json")); Patch(); } private static void Patch() { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Expected O, but got Unknown //IL_012e: Unknown result type (might be due to invalid IL or missing references) //IL_013c: Expected O, but got Unknown //IL_0158: Unknown result type (might be due to invalid IL or missing references) //IL_0166: Expected O, but got Unknown Type typeFromHandle = typeof(Patcher); Harmony harmony = BepInExFasterLoadAssetBundlesPatcher.Harmony; BindingFlags all = AccessTools.all; HarmonyMethod val = new HarmonyMethod(typeFromHandle.GetMethod("LoadAssetBundleFromFileFast", all)); Type typeFromHandle2 = typeof(AssetBundle); string[] array = new string[2] { "LoadFromFile", "LoadFromFileAsync" }; string[] array2 = array; foreach (string text in array2) { harmony.Patch((MethodBase)AccessTools.Method(typeFromHandle2, text, new Type[1] { typeof(string) }, (Type[])null), val, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); harmony.Patch((MethodBase)AccessTools.Method(typeFromHandle2, text, new Type[2] { typeof(string), typeof(uint) }, (Type[])null), val, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); harmony.Patch((MethodBase)AccessTools.Method(typeFromHandle2, text, new Type[3] { typeof(string), typeof(uint), typeof(ulong) }, (Type[])null), val, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } harmony.Patch((MethodBase)AccessTools.Method(typeFromHandle2, "LoadFromStreamInternal", (Type[])null, (Type[])null), new HarmonyMethod(typeFromHandle.GetMethod("LoadAssetBundleFromStreamFast", all)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); harmony.Patch((MethodBase)AccessTools.Method(typeFromHandle2, "LoadFromStreamAsyncInternal", (Type[])null, (Type[])null), new HarmonyMethod(typeFromHandle.GetMethod("LoadAssetBundleFromStreamAsyncFast", all)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } private static void LoadAssetBundleFromFileFast(ref string path) { if (string.IsNullOrEmpty(path)) { return; } try { using FileStream stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.None, 16777216, FileOptions.SequentialScan); if (HandleStreamBundle(stream, out string path2)) { path = path2; } } catch (Exception arg) { Logger.LogError((object)$"Failed to decompress assetbundle\n{arg}"); } } private static bool LoadAssetBundleFromStreamFast(Stream stream, ref AssetBundle? __result) { if (HandleStreamBundle(stream, out string path)) { __result = AssetBundle.LoadFromFile_Internal(path, 0u, 0uL); return false; } return true; } private static bool LoadAssetBundleFromStreamAsyncFast(Stream stream, ref AssetBundleCreateRequest? __result) { if (HandleStreamBundle(stream, out string path)) { __result = AssetBundle.LoadFromFileAsync_Internal(path, 0u, 0uL); return false; } return true; } private static bool HandleStreamBundle(Stream stream, [NotNullWhen(true)] out string? path) { long position = stream.Position; try { return AssetBundleManager.TryRecompressAssetBundle(stream, out path); } catch (Exception arg) { Logger.LogError((object)$"Failed to decompress assetbundle\n{arg}"); } stream.Position = position; path = null; return false; } } } namespace BepInExFasterLoadAssetBundles.Models { internal class Metadata { public string? UncompressedAssetBundleName { get; set; } public string OriginalAssetBundleHash { get; set; } public bool ShouldNotDecompress { get; set; } public DateTime LastAccessTime { get; set; } } } namespace BepInExFasterLoadAssetBundles.Managers { internal class AssetBundleManager { private readonly struct WorkAsset { public string Path { get; } public string Hash { get; } public bool DeleteBundleAfterOperation { get; } public CompressionType CompressionType { get; } public WorkAsset(string path, string hash, bool deleteBundleAfterOperation, CompressionType compressionType) { //IL_0016: 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) Path = path; Hash = hash; DeleteBundleAfterOperation = deleteBundleAfterOperation; CompressionType = compressionType; } } private readonly ConcurrentQueue<WorkAsset> m_WorkAssets = new ConcurrentQueue<WorkAsset>(); private readonly object m_Lock = new object(); private readonly string m_PathForTemp; private bool m_IsProcessingQueue; public string CachePath { get; } public AssetBundleManager(string cachePath) { CachePath = cachePath; if (!Directory.Exists(CachePath)) { Directory.CreateDirectory(CachePath); } m_PathForTemp = Path.Combine(CachePath, "temp"); if (!Directory.Exists(m_PathForTemp)) { Directory.CreateDirectory(m_PathForTemp); } DeleteTempFiles(); } private void DeleteTempFiles() { int count2 = 0; try { foreach (string item in Directory.EnumerateFiles(CachePath, "*.tmp").Concat(Directory.EnumerateFiles(m_PathForTemp, "*.assetbundle"))) { DeleteFileSafely(ref count2, item); } } catch (Exception arg) { Patcher.Logger.LogError((object)$"Failed to delete temp files\n{arg}"); } if (count2 > 0) { Patcher.Logger.LogWarning((object)$"Deleted {count2} temp files"); } static void DeleteFileSafely(ref int count, string tempFile) { if (!FileHelper.TryDeleteFile(tempFile, out Exception exception)) { Patcher.Logger.LogError((object)$"Failed to delete temp file\n{exception}"); } else { count++; } } } public unsafe bool TryRecompressAssetBundle(Stream stream, [NotNullWhen(true)] out string? path) { //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_015a: Unknown result type (might be due to invalid IL or missing references) if (BundleHelper.CheckBundleIsAlreadyDecompressed(stream)) { Patcher.Logger.LogInfo((object)"Original bundle is already uncompressed, using it instead"); path = null; return false; } Span<char> span = stackalloc char[32]; HashingHelper.WriteHash(span, stream); path = null; if (FindCachedBundleByHash(span, out string path2)) { if (path2 != null) { path = path2; return true; } Patcher.Logger.LogDebug((object)"Found assetbundle metadata, but path was null. Probably bundle is already uncompressed!"); return false; } CompressionType compressionType = (CompressionType)((stream.Length > 314572800) ? 2 : 0); if (stream is FileStream fileStream) { path = string.Copy(fileStream.Name); RecompressAssetBundleInternal(new WorkAsset(path, span.ToString(), deleteBundleAfterOperation: false, compressionType)); return false; } string path3 = Guid.NewGuid().ToString("N") + ".assetbundle"; string path4 = Path.Combine(m_PathForTemp, path3); using (FileStream fileStream2 = new FileStream(path4, FileMode.CreateNew, FileAccess.Write, FileShare.None, 8192, FileOptions.SequentialScan)) { stream.Seek(0L, SeekOrigin.Begin); if (stream is UnmanagedMemoryStream unmanagedMemoryStream && unmanagedMemoryStream.Length < int.MaxValue) { ReadOnlySpan<byte> buffer = new ReadOnlySpan<byte>(unmanagedMemoryStream.PositionPointer, (int)unmanagedMemoryStream.Length); fileStream2.Write(buffer); } else { stream.CopyTo(fileStream2); } } RecompressAssetBundleInternal(new WorkAsset(path4, span.ToString(), deleteBundleAfterOperation: true, compressionType)); return false; } public void DeleteCachedAssetBundle(string path) { FileHelper.TryDeleteFile(path, out Exception exception); if (exception != null) { Patcher.Logger.LogError((object)$"Failed to delete uncompressed assetbundle\n{exception}"); } } private bool FindCachedBundleByHash(ReadOnlySpan<char> hash, out string? path) { path = null; Metadata metadata2 = Patcher.MetadataManager.FindMetadataByHash(hash); if (metadata2 == null) { return false; } if (metadata2.ShouldNotDecompress) { ModifyAccessTimeAndSave(metadata2); return true; } if (metadata2.UncompressedAssetBundleName == null) { return false; } string text = Path.Combine(CachePath, metadata2.UncompressedAssetBundleName); if (!File.Exists(text)) { Patcher.Logger.LogWarning((object)("Failed to find decompressed assetbundle at \"" + text + "\". Probably it was deleted?")); Patcher.MetadataManager.DeleteMetadata(metadata2); return false; } Patcher.Logger.LogDebug((object)("Loading uncompressed bundle \"" + metadata2.UncompressedAssetBundleName + "\"")); path = text; ModifyAccessTimeAndSave(metadata2); return true; static void ModifyAccessTimeAndSave(Metadata metadata) { metadata.LastAccessTime = DateTime.Now; Patcher.MetadataManager.SaveMetadata(metadata); } } private void RecompressAssetBundleInternal(WorkAsset workAsset) { if (!DriveHelper.HasDriveSpaceOnPath(CachePath, 10L)) { Patcher.Logger.LogWarning((object)"Ignoring request of decompressing, because the free drive space is less than 10GB"); return; } Patcher.Logger.LogDebug((object)("Queued recompress of \"" + Path.GetFileName(workAsset.Path) + "\" assetbundle")); m_WorkAssets.Enqueue(workAsset); StartRunner(); } private void StartRunner() { if (m_IsProcessingQueue) { return; } lock (m_Lock) { if (m_IsProcessingQueue) { return; } m_IsProcessingQueue = true; } AsyncHelper.Schedule(ProcessQueue); } private async Task ProcessQueue() { try { WorkAsset result; while (m_WorkAssets.TryDequeue(out result)) { await DecompressAssetBundleAsync(result); } } finally { lock (m_Lock) { if (m_IsProcessingQueue) { m_IsProcessingQueue = false; } } } } private async Task DecompressAssetBundleAsync(WorkAsset workAsset) { Metadata metadata = new Metadata { OriginalAssetBundleHash = workAsset.Hash, LastAccessTime = DateTime.Now }; string originalFileName = Path.GetFileNameWithoutExtension(workAsset.Path); string outputName = originalFileName + "_" + metadata.GetHashCode() + ".assetbundle"; string outputPath = Path.Combine(CachePath, outputName); CompressionType compressionType = workAsset.CompressionType; BuildCompression val = (((int)compressionType != 0) ? BuildCompression.LZ4Runtime : BuildCompression.UncompressedRuntime); BuildCompression buildCompression = val; Patcher.Logger.LogDebug((object)$"Decompressing \"{originalFileName}\" with compression type {workAsset.CompressionType}"); await FileHelper.RetryUntilFileIsClosedAsync(workAsset.Path); await AsyncHelper.SwitchToMainThread(); AssetBundleRecompressOperation op = AssetBundle.RecompressAssetBundleAsync(workAsset.Path, outputPath, buildCompression, 0u, (ThreadPriority)2); await op.WaitCompletionAsync<AssetBundleRecompressOperation>(); AssetBundleLoadResult result = op.result; string humanReadableResult = op.humanReadableResult; bool success = op.success; string newHash = GetHashOfFile(outputPath); await AsyncHelper.SwitchToThreadPool(); if (workAsset.DeleteBundleAfterOperation) { FileHelper.TryDeleteFile(workAsset.Path, out Exception _); } Patcher.Logger.LogDebug((object)$"Result of decompression \"{originalFileName}\": {result} ({success}), {humanReadableResult}"); if ((int)result != 0 || !success) { Patcher.Logger.LogWarning((object)$"Failed to decompress a assetbundle at \"{workAsset.Path}\"\nResult: {result}, {humanReadableResult}"); } else if (newHash.Equals(workAsset.Hash, StringComparison.InvariantCultureIgnoreCase)) { Patcher.Logger.LogDebug((object)("Assetbundle \"" + originalFileName + "\" is already uncompressed, adding to ignore list")); metadata.ShouldNotDecompress = true; Patcher.MetadataManager.SaveMetadata(metadata); DeleteCachedAssetBundle(outputPath); } else { Patcher.Logger.LogDebug((object)("Assetbundle \"" + originalFileName + "\" is now uncompressed!")); metadata.UncompressedAssetBundleName = outputName; Patcher.MetadataManager.SaveMetadata(metadata); } static string GetHashOfFile(string filePath) { Span<char> destination = stackalloc char[32]; HashingHelper.HashFile(destination, filePath); return destination.ToString(); } } } internal class MetadataManager { private readonly string m_MetadataFile; private readonly object m_Lock = new object(); private List<Metadata> m_Metadata; public MetadataManager(string metadataFile) { m_MetadataFile = metadataFile; LoadFile(); } public Metadata? FindMetadataByHash(ReadOnlySpan<char> hash) { lock (m_Lock) { foreach (Metadata metadatum in m_Metadata) { if (hash.SequenceEqual(metadatum.OriginalAssetBundleHash)) { return metadatum; } } } return null; } public void SaveMetadata(Metadata metadata) { Metadata metadata2 = metadata; lock (m_Lock) { int num = m_Metadata.FindIndex((Metadata m) => m.OriginalAssetBundleHash.Equals(metadata2.OriginalAssetBundleHash, StringComparison.InvariantCulture)); if (num == -1) { m_Metadata.Add(metadata2); } else { m_Metadata[num] = metadata2; } } SaveFile(); } public void DeleteMetadata(Metadata metadata) { Metadata metadata2 = metadata; bool flag = false; lock (m_Lock) { int num = m_Metadata.FindIndex((Metadata m) => m.OriginalAssetBundleHash.Equals(metadata2.OriginalAssetBundleHash, StringComparison.InvariantCulture)); if (num >= 0) { flag = true; m_Metadata.RemoveAt(num); } } if (flag) { SaveFile(); } } private void LoadFile() { if (!File.Exists(m_MetadataFile)) { m_Metadata = new List<Metadata>(); return; } try { m_Metadata = JsonConvert.DeserializeObject<List<Metadata>>(File.ReadAllText(m_MetadataFile)) ?? new List<Metadata>(); } catch (Exception arg) { Patcher.Logger.LogError((object)$"Failed to deserialize metadata.json file\n{arg}"); m_Metadata = new List<Metadata>(); return; } if (!UpgradeMetadata()) { DeleteOldBundles(); } } private bool UpgradeMetadata() { bool flag = false; foreach (Metadata metadatum in m_Metadata) { bool flag2 = metadatum.LastAccessTime == default(DateTime); if (flag2) { metadatum.LastAccessTime = DateTime.Now; } flag = flag || flag2; } if (flag) { SaveFile(); } return flag; } private void SaveFile() { lock (m_Lock) { File.WriteAllText(m_MetadataFile, JsonConvert.SerializeObject((object)m_Metadata)); } } private void DeleteOldBundles() { for (int num = m_Metadata.Count - 1; num >= 0; num--) { Metadata metadata = m_Metadata[num]; if (!((DateTime.Now - metadata.LastAccessTime).TotalDays < 3.0)) { m_Metadata.RemoveAt(num); if (metadata.UncompressedAssetBundleName != null) { Patcher.Logger.LogInfo((object)("Deleting unused asset bundle cache " + metadata.UncompressedAssetBundleName)); Patcher.AssetBundleManager.DeleteCachedAssetBundle(Path.Combine(Patcher.AssetBundleManager.CachePath, metadata.UncompressedAssetBundleName)); } } } int counter2 = 0; string[] files = Directory.GetFiles(Patcher.AssetBundleManager.CachePath, "*.assetbundle", SearchOption.TopDirectoryOnly); foreach (string path2 in files) { string bundleName = Path.GetFileName(path2); Metadata metadata2 = m_Metadata.Find((Metadata m) => m.UncompressedAssetBundleName != null && m.UncompressedAssetBundleName.Equals(bundleName, StringComparison.InvariantCulture)); if (metadata2 == null) { DeleteFileSafely(ref counter2, path2); } } if (counter2 > 0) { Patcher.Logger.LogWarning((object)$"Deleted {counter2} unknown bundles. Metadata file got corrupted?"); } static void DeleteFileSafely(ref int counter, string path) { if (!FileHelper.TryDeleteFile(path, out Exception exception)) { Patcher.Logger.LogWarning((object)$"Failed to delete cache\n{exception}"); } else { counter++; } } } } } namespace BepInExFasterLoadAssetBundles.Helpers { internal static class AsyncHelper { [StructLayout(LayoutKind.Sequential, Size = 1)] public readonly struct SwitchToMainThreadAwaiter : ICriticalNotifyCompletion, INotifyCompletion { private static readonly SendOrPostCallback s_OnPostAction = OnPost; public bool IsCompleted => Thread.CurrentThread.ManagedThreadId == s_MainThreadId; public SwitchToMainThreadAwaiter GetAwaiter() { return this; } public void GetResult() { } public void OnCompleted(Action continuation) { UnsafeOnCompleted(continuation); } public void UnsafeOnCompleted(Action continuation) { ((SynchronizationContext)(object)s_SynchronizationContext).Post(s_OnPostAction, (object?)continuation); } private static void OnPost(object state) { if (state is Action action) { action(); } } } [StructLayout(LayoutKind.Sequential, Size = 1)] public readonly struct SwitchToThreadPoolAwaiter : ICriticalNotifyCompletion, INotifyCompletion { private static readonly WaitCallback s_OnPostAction = OnPost; public bool IsCompleted => false; public SwitchToThreadPoolAwaiter GetAwaiter() { return this; } public void GetResult() { } public void OnCompleted(Action continuation) { ThreadPool.QueueUserWorkItem(s_OnPostAction, continuation); } public void UnsafeOnCompleted(Action continuation) { ThreadPool.UnsafeQueueUserWorkItem(s_OnPostAction, continuation); } private static void OnPost(object state) { if (state is Action action) { action(); } } } private static UnitySynchronizationContext s_SynchronizationContext = null; private static int s_MainThreadId = -1; public static void InitUnitySynchronizationContext() { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Expected O, but got Unknown s_SynchronizationContext = (UnitySynchronizationContext)SynchronizationContext.Current; s_MainThreadId = Thread.CurrentThread.ManagedThreadId; } public static void Schedule(Func<Task> func) { Func<Task> func2 = func; Task.Run(async delegate { try { await func2(); } catch (Exception ex) { Patcher.Logger.LogError((object)ex); } }); } public static SwitchToMainThreadAwaiter SwitchToMainThread() { return default(SwitchToMainThreadAwaiter); } public static SwitchToThreadPoolAwaiter SwitchToThreadPool() { return default(SwitchToThreadPoolAwaiter); } } internal static class AsyncOperationHelper { public struct AsyncOperationAwaiter : ICriticalNotifyCompletion, INotifyCompletion { private AsyncOperation? m_AsyncOperation; private Action? m_ContinuationAction; public readonly bool IsCompleted => m_AsyncOperation.isDone; public AsyncOperationAwaiter(AsyncOperation asyncOperation) { m_AsyncOperation = asyncOperation; m_ContinuationAction = null; } public readonly AsyncOperationAwaiter GetAwaiter() { return this; } public void GetResult() { if (m_AsyncOperation != null) { m_AsyncOperation.completed -= OnCompleted; } m_AsyncOperation = null; m_ContinuationAction = null; } public void OnCompleted(Action continuation) { UnsafeOnCompleted(continuation); } public void UnsafeOnCompleted(Action continuation) { m_ContinuationAction = continuation; m_AsyncOperation.completed += OnCompleted; } private readonly void OnCompleted(AsyncOperation _) { m_ContinuationAction?.Invoke(); } } public static AsyncOperationAwaiter WaitCompletionAsync<T>(this T op) where T : AsyncOperation { return new AsyncOperationAwaiter((AsyncOperation)(object)op); } } internal static class BundleHelper { public static bool CheckBundleIsAlreadyDecompressed(Stream stream) { stream.Seek(0L, SeekOrigin.Begin); SkipString(stream); stream.Position += 4L; SkipString(stream); SkipString(stream); stream.Position += 16L; Span<byte> span = stackalloc byte[4]; stream.Read(span); int num = BinaryPrimitives.ReadInt32BigEndian(span); int num2 = num & 0x3F; if (num2 == 0 || num2 == 2) { return true; } return false; } private static void SkipString(Stream stream) { while (stream.ReadByte() != 0) { } } } internal static class DriveHelper { public static bool HasDriveSpaceOnPath(string path, long expectedSpaceGB) { string pathRoot = Path.GetPathRoot(Path.GetFullPath(path)); DriveInfo driveInfo = new DriveInfo(pathRoot); return driveInfo.AvailableFreeSpace > expectedSpaceGB * 1073741824; } } internal static class FileHelper { public const long c_GBToBytes = 1073741824L; public const long c_MBToBytes = 1048576L; public static bool TryDeleteFile(string path, [NotNullWhen(false)] out Exception? exception) { try { File.Delete(path); exception = null; return true; } catch (Exception ex) { exception = ex; return false; } } public static async Task RetryUntilFileIsClosedAsync(string path, int maxTries = 5) { int tries = maxTries; while (true) { int num = tries - 1; tries = num; if (num <= 0) { break; } try { using (new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read)) { } } catch (IOException) { await Task.Delay(1000); } } } } internal class HashingHelper { private const int c_BufferSize = 16777216; public static int HashFile(Span<char> destination, string path) { using FileStream stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.None, 16777216, FileOptions.SequentialScan); return WriteHash(destination, stream); } public unsafe static int WriteHash(Span<char> destination, Stream stream) { //IL_0028: 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_0074: Unknown result type (might be due to invalid IL or missing references) stream.Seek(0L, SeekOrigin.Begin); void* ptr = UnsafeUtility.Malloc(4096L, 16, (Allocator)2); Span<byte> buffer = new Span<byte>(ptr, 4096); Hash128 val = default(Hash128); int num; while ((num = stream.Read(buffer)) > 0) { ((Hash128)(ref val)).Append(ptr, (ulong)num); } UnsafeUtility.Free(ptr, (Allocator)2); Span<byte> span = stackalloc byte[16]; BinaryPrimitives.WriteUInt64LittleEndian(span, val.u64_0); BinaryPrimitives.WriteUInt64LittleEndian(span.Slice(8), val.u64_1); return HashToString(destination, span); } private static int HashToString(Span<char> destination, ReadOnlySpan<byte> hash) { for (int i = 0; i < hash.Length; i++) { hash[i].TryFormat(destination.Slice(i * 2), out var _, "X2", CultureInfo.InvariantCulture); } return hash.Length * 2; } } }
BepInEx/patchers/LethalPerformance/LethalPerformance.Patcher.dll
Decompiled 3 months agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Reflection.Emit; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using LethalPerformance.Patcher.Helpers; using LethalPerformance.Patcher.TomlConverters; using LethalPerformance.Patcher.Utilities; using Microsoft.CodeAnalysis; using Mono.Cecil; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: IgnoresAccessChecksTo("BepInEx")] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("LethalPerformance.Patcher")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("0.3.4.0")] [assembly: AssemblyInformationalVersion("0.3.4+bb14b4e14435bdf21208f30735df1497be8f9ff6")] [assembly: AssemblyProduct("LethalPerformance.Patcher")] [assembly: AssemblyTitle("LethalPerformance.Patcher")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.3.4.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace LethalPerformance.Patcher { public class LethalPerformancePatcher { private static Harmony? s_Harmony; public static ManualLogSource Logger { get; } = Logger.CreateLogSource("LethalPeformance.Patcher"); public static ConfigSaverTask ConfigSaverTask { get; } = new ConfigSaverTask(); public static IEnumerable<string> TargetDLLs { get; } = Array.Empty<string>(); public static void Finish() { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Expected O, but got Unknown s_Harmony = new Harmony("LethalPerformance.Patcher"); s_Harmony.PatchAll(typeof(LethalPerformancePatcher).Assembly); Harmony.UnpatchID("org.bepinex.fixes.harmonyinterop"); TomlTypeConverter.TypeConverters[typeof(string)] = (TypeConverter)(object)new StringTomlConverter(); TomlTypeConverter.TypeConverters[typeof(bool)] = (TypeConverter)(object)new BoolTomlConverter(); } public static void Patch(AssemblyDefinition _) { } } } namespace LethalPerformance.Patcher.Utilities { public class ConfigSaverTask { private readonly HashSet<ConfigFile> m_ConfigFilesToSave = new HashSet<ConfigFile>(); private readonly HashSet<ConfigFile> m_IgnoredConfigFiles = new HashSet<ConfigFile>(); public void AddConfigFile(ConfigFile configFile) { if (!m_IgnoredConfigFiles.Contains(configFile)) { m_ConfigFilesToSave.Add(configFile); } } public void AddIgnoredConfigFile(ConfigFile configFile) { if (!m_IgnoredConfigFiles.Add(configFile)) { return; } foreach (ConfigFile ignoredConfigFile in m_IgnoredConfigFiles) { m_ConfigFilesToSave.Remove(ignoredConfigFile); } } public void ScheduleSave() { if (m_ConfigFilesToSave.Count != 0) { Queue<ConfigFile> param = new Queue<ConfigFile>(m_ConfigFilesToSave); m_ConfigFilesToSave.Clear(); AsyncHelper.Schedule(SaveAsync, param); } } public void Save() { if (m_ConfigFilesToSave.Count != 0) { Queue<ConfigFile> queue = new Queue<ConfigFile>(m_ConfigFilesToSave); m_ConfigFilesToSave.Clear(); SaveAsync(queue); } } private Task SaveAsync(Queue<ConfigFile> queue) { int count = queue.Count; ConfigFile result; while (queue.TryDequeue(out result)) { result.Save(); } LethalPerformancePatcher.Logger.LogInfo((object)$"Saved {count} config(s)"); return Task.CompletedTask; } } } namespace LethalPerformance.Patcher.TomlConverters { internal class BoolTomlConverter : TypeConverter<bool> { public override bool ConvertToObject(string value) { return bool.Parse(value); } public override string ConvertToString(bool value) { if (!value) { return "false"; } return "true"; } } internal class StringTomlConverter : TypeConverter<string> { private static readonly Regex s_WindowsPathRegex = new Regex("^\"?\\w:\\\\(?!\\\\)(?!.+\\\\\\\\)", RegexOptions.Compiled); public override string ConvertToObject(string value) { if (string.IsNullOrEmpty(value)) { return string.Empty; } if (s_WindowsPathRegex.IsMatch(value)) { return value; } return Unescape(value); } public override string ConvertToString(string value) { return Escape(value); } private static string Escape(string txt) { if (string.IsNullOrEmpty(txt)) { return string.Empty; } StringBuilder stringBuilder = new StringBuilder(txt.Length + 2); foreach (char c in txt) { switch (c) { case '\0': stringBuilder.Append("\\0"); break; case '\a': stringBuilder.Append("\\a"); break; case '\b': stringBuilder.Append("\\b"); break; case '\t': stringBuilder.Append("\\t"); break; case '\n': stringBuilder.Append("\\n"); break; case '\v': stringBuilder.Append("\\v"); break; case '\f': stringBuilder.Append("\\f"); break; case '\r': stringBuilder.Append("\\r"); break; case '\'': stringBuilder.Append("\\'"); break; case '"': stringBuilder.Append("\\\""); break; default: stringBuilder.Append(c); break; } } if (stringBuilder.Length == txt.Length) { return txt; } return stringBuilder.ToString(); } private static string Unescape(string txt) { if (string.IsNullOrEmpty(txt)) { return txt; } int num = txt.IndexOf('\\'); if (num == -1) { return txt; } StringBuilder stringBuilder = new StringBuilder(txt.Length); stringBuilder.Append(txt, 0, num); int num2 = num; while (num2 < txt.Length) { int num3 = txt.IndexOf('\\', num2); if (num3 < 0 || num3 == txt.Length - 1) { num3 = txt.Length; } stringBuilder.Append(txt, num2, num3 - num2); if (num3 >= txt.Length) { break; } char c = txt[num3 + 1]; switch (c) { case '0': stringBuilder.Append('\0'); break; case 'a': stringBuilder.Append('\a'); break; case 'b': stringBuilder.Append('\b'); break; case 't': stringBuilder.Append('\t'); break; case 'n': stringBuilder.Append('\n'); break; case 'v': stringBuilder.Append('\v'); break; case 'f': stringBuilder.Append('\f'); break; case 'r': stringBuilder.Append('\r'); break; case '\'': stringBuilder.Append('\''); break; case '"': stringBuilder.Append('"'); break; case '\\': stringBuilder.Append('\\'); break; default: stringBuilder.Append('\\').Append(c); break; } num2 = num3 + 2; } return stringBuilder.ToString(); } } internal abstract class TypeConverter<T> : TypeConverter where T : IEquatable<T> { protected TypeConverter() { ((TypeConverter)this).ConvertToObject = (string value, Type _) => ConvertToObject(value); ((TypeConverter)this).ConvertToString = (object value, Type _) => ConvertToString((T)value); } public abstract T ConvertToObject(string value); public abstract string ConvertToString(T value); } } namespace LethalPerformance.Patcher.Patches { [HarmonyPatch(typeof(ConfigDefinition))] internal static class Patch_ConfigDefinition { private static readonly MethodInfo s_TargetMethod = typeof(Patch_ConfigDefinition).GetMethod("CheckInvalidConfigCharsOptimized", AccessTools.all); [HarmonyPatch("CheckInvalidConfigChars")] [HarmonyTranspiler] public static IEnumerable<CodeInstruction> CallCheckInvalidConfigCharsOptimized() { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Expected O, but got Unknown //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Expected O, but got Unknown //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Expected O, but got Unknown //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Expected O, but got Unknown return new <>z__ReadOnlyArray<CodeInstruction>((CodeInstruction[])(object)new CodeInstruction[4] { new CodeInstruction(OpCodes.Ldarg_0, (object)null), new CodeInstruction(OpCodes.Ldarg_1, (object)null), new CodeInstruction(OpCodes.Call, (object)s_TargetMethod), new CodeInstruction(OpCodes.Ret, (object)null) }); } private static void CheckInvalidConfigCharsOptimized(string value, string name) { if (value == null) { throw new ArgumentNullException(name); } ReadOnlySpan<char> span = value.AsSpan().Trim(); if (!span.SequenceEqual(value)) { throw new ArgumentException("Cannot use whitespace characters at start or end of section and key names", name); } if (span.IndexOfAny(ConfigDefinition._invalidConfigChars) >= 0) { throw new ArgumentException("Cannot use any of the following characters in section and key names: = \\n \\t \\ \" ' [ ]", name); } } } [HarmonyPatch(typeof(ConfigEntryBase))] internal static class Patch_ConfigEntryBase { [HarmonyPatch("WriteDescription")] [HarmonyTranspiler] public static IEnumerable<CodeInstruction> CallWriteDescriptionOptimized() { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Expected O, but got Unknown //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Expected O, but got Unknown //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Expected O, but got Unknown //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Expected O, but got Unknown return new <>z__ReadOnlyArray<CodeInstruction>((CodeInstruction[])(object)new CodeInstruction[4] { new CodeInstruction(OpCodes.Ldarg_0, (object)null), new CodeInstruction(OpCodes.Ldarg_1, (object)null), new CodeInstruction(OpCodes.Call, (object)SymbolExtensions.GetMethodInfo((Expression<Action>)(() => WriteDescriptionOptimized(null, null)))), new CodeInstruction(OpCodes.Ret, (object)null) }); } public static void WriteDescriptionOptimized(ConfigEntryBase instance, StreamWriter writer) { if (!string.IsNullOrEmpty(instance.Description.Description)) { writer.Write("## "); string description = instance.Description.Description; foreach (char c in description) { writer.Write(c); if (c == '\n') { writer.Write("## "); } } writer.WriteLine(); } writer.Write("# Setting type: "); writer.WriteLine(instance.SettingType.Name); writer.Write("# Default value: "); writer.WriteLine(TomlTypeConverter.ConvertToString(instance.DefaultValue, instance.SettingType)); if (instance.Description.AcceptableValues != null) { writer.WriteLine(instance.Description.AcceptableValues.ToDescriptionString()); } else { if (!instance.SettingType.IsEnum) { return; } writer.Write("# Acceptable values: "); string[] orCreate = EnumCacheHelper.GetOrCreate(instance.SettingType); for (int j = 0; j < orCreate.Length; j++) { string value = orCreate[j]; writer.Write(value); if (j != orCreate.Length - 1) { writer.Write(", "); } } writer.WriteLine(); if (instance.SettingType.IsDefined(typeof(FlagsAttribute), inherit: false)) { writer.WriteLine("# Multiple values can be set at the same time by separating them with , (e.g. Debug, Warning)"); } } } } [HarmonyPatch(typeof(ConfigFile))] internal static class Patch_ConfigFile { private static bool s_IgnoreConfigSet; [HarmonyPatch("Reload")] [HarmonyTranspiler] public static IEnumerable<CodeInstruction> CallOptimizedReload() { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Expected O, but got Unknown //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Expected O, but got Unknown //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Expected O, but got Unknown return new <>z__ReadOnlyArray<CodeInstruction>((CodeInstruction[])(object)new CodeInstruction[3] { new CodeInstruction(OpCodes.Ldarg_0, (object)null), new CodeInstruction(OpCodes.Call, (object)SymbolExtensions.GetMethodInfo((Expression<Action>)(() => OptimizedReload(null)))), new CodeInstruction(OpCodes.Ret, (object)null) }); } [HarmonyPatch("Save")] [HarmonyTranspiler] public static IEnumerable<CodeInstruction> CallOptimizedSave() { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Expected O, but got Unknown //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Expected O, but got Unknown //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Expected O, but got Unknown return new <>z__ReadOnlyArray<CodeInstruction>((CodeInstruction[])(object)new CodeInstruction[3] { new CodeInstruction(OpCodes.Ldarg_0, (object)null), new CodeInstruction(OpCodes.Call, (object)SymbolExtensions.GetMethodInfo((Expression<Action>)(() => SaveOptimized(null)))), new CodeInstruction(OpCodes.Ret, (object)null) }); } [HarmonyPatch(/*Could not decode attribute arguments.*/)] [HarmonyPostfix] public static void SetFalseForSaveOnConfigSet(ConfigFile __instance, bool saveOnInit) { s_IgnoreConfigSet = true; __instance.SaveOnConfigSet = false; s_IgnoreConfigSet = false; if (saveOnInit) { LethalPerformancePatcher.ConfigSaverTask.AddConfigFile(__instance); } __instance.SettingChanged += delegate(object _, SettingChangedEventArgs arg) { LethalPerformancePatcher.ConfigSaverTask.AddConfigFile(arg.ChangedSetting.ConfigFile); }; } [HarmonyPatch(/*Could not decode attribute arguments.*/)] [HarmonyPostfix] public static void AddIgnoreIfSetToFalse(ConfigFile __instance, bool value) { if (!s_IgnoreConfigSet && !value) { LethalPerformancePatcher.ConfigSaverTask.AddIgnoredConfigFile(__instance); } } private static void OptimizedReload(ConfigFile instance) { //IL_0191: Unknown result type (might be due to invalid IL or missing references) //IL_0198: Expected O, but got Unknown lock (instance._ioLock) { instance.OrphanedEntries.Clear(); using StreamReader streamReader = new StreamReader(instance.ConfigFilePath, Encoding.UTF8); string text = string.Empty; Span<Range> ranges = stackalloc Range[2]; string text2; while ((text2 = streamReader.ReadLine()) != null) { ReadOnlySpan<char> readOnlySpan = text2.AsSpan().Trim(); if (readOnlySpan.IsEmpty || readOnlySpan.StartsWith("#")) { continue; } if (readOnlySpan.StartsWith("[") && readOnlySpan.EndsWith("]")) { text = readOnlySpan.Slice(1, readOnlySpan.Length - 2).ToString(); } else if (SpanExtensions.Split(readOnlySpan, ranges, '=')) { Range range = ranges[0]; ReadOnlySpan<char> readOnlySpan2 = readOnlySpan[range.Start..range.End].Trim(); range = ranges[1]; ReadOnlySpan<char> readOnlySpan3 = readOnlySpan[range.Start..range.End].Trim(); ConfigDefinition key = new ConfigDefinition(text, readOnlySpan2.ToString()); if (instance.Entries.TryGetValue(key, out var value)) { value.SetSerializedValue(readOnlySpan3.ToString()); } else { instance.OrphanedEntries[key] = readOnlySpan3.ToString(); } } } } instance.OnConfigReloaded(); } private static void SaveOptimized(ConfigFile instance) { lock (instance._ioLock) { string directoryName = Path.GetDirectoryName(instance.ConfigFilePath); if (!Directory.Exists(directoryName)) { Directory.CreateDirectory(directoryName); } Span<char> destination = stackalloc char[128]; using StreamWriter streamWriter = new StreamWriter(instance.ConfigFilePath, append: false, Utility.UTF8NoBom); if (instance._ownerMetadata != null) { streamWriter.Write("## Settings file was created by plugin "); streamWriter.Write(instance._ownerMetadata.Name); streamWriter.Write(" v"); instance._ownerMetadata.Version.TryFormat(destination, out var charsWritten); streamWriter.WriteLine(destination.Slice(0, charsWritten)); streamWriter.Write("## Plugin GUID: "); streamWriter.WriteLine(instance._ownerMetadata.GUID); streamWriter.WriteLine(); } var second = instance.OrphanedEntries.Select((KeyValuePair<ConfigDefinition, string> x) => new { Key = x.Key, entry = (ConfigEntryBase)null, value = x.Value }); var first = instance.Entries.Select((KeyValuePair<ConfigDefinition, ConfigEntryBase> x) => new { Key = x.Key, entry = x.Value, value = (string)null }); var orderedEnumerable = from x in first.Concat(second) group x by x.Key.Section into x orderby x.Key select x; foreach (var item in orderedEnumerable) { streamWriter.Write('['); streamWriter.Write(item.Key); streamWriter.WriteLine(']'); foreach (var item2 in item) { streamWriter.WriteLine(); ConfigEntryBase entry = item2.entry; if (entry != null) { entry.WriteDescription(streamWriter); } object obj = item2.value; if (obj == null) { ConfigEntryBase entry2 = item2.entry; obj = ((entry2 != null) ? entry2.GetSerializedValue() : null) ?? string.Empty; } string value = (string)obj; streamWriter.Write(item2.Key.Key); streamWriter.Write(" = "); streamWriter.WriteLine(value); } streamWriter.WriteLine(); } } } } [HarmonyPatch] internal class Patch_FileSystemWatcher { private static readonly MethodInfo? s_StartDispatching; private static readonly FieldInfo? s_Watches; static Patch_FileSystemWatcher() { Type type = typeof(FileSystemWatcher).Assembly.GetType("System.IO.DefaultWatcher", throwOnError: false); if (!(type == null)) { s_StartDispatching = type.GetMethod("StartDispatching", AccessTools.all); s_Watches = type.GetField("watches", AccessTools.all); s_Watches?.SetValue(null, new Hashtable()); } } [HarmonyPrepare] private static bool ShouldPatch() { return s_StartDispatching != null; } [HarmonyTargetMethod] private static MethodInfo? GetTargetPatch() { return s_StartDispatching; } [HarmonyPrefix] private static bool DisableDefaultWatcher() { return false; } } } namespace LethalPerformance.Patcher.Helpers { internal static class AsyncHelper { public static void Schedule(Func<Task> func) { Func<Task> func2 = func; Task.Run(async delegate { try { await func2(); } catch (Exception ex) { LethalPerformancePatcher.Logger.LogError((object)ex); } }); } public static void Schedule<T>(Func<T, Task> func, T param1) { Func<T, Task> func2 = func; T param2 = param1; Task.Run(async delegate { try { await func2(param2); } catch (Exception ex) { LethalPerformancePatcher.Logger.LogError((object)ex); } }); } } internal static class EnumCacheHelper { private static readonly Dictionary<Type, string[]> s_EnumNamesCache = new Dictionary<Type, string[]>(); public static string[] GetOrCreate(Type enumType) { if (s_EnumNamesCache.Count >= 255) { s_EnumNamesCache.Clear(); } if (s_EnumNamesCache.TryGetValue(enumType, out string[] value)) { return value; } string[] names = Enum.GetNames(enumType); s_EnumNamesCache[enumType] = names; return names; } } internal static class SpanExtensions { public static bool Split(ReadOnlySpan<char> input, Span<Range> ranges, char separator) { if (ranges.IsEmpty && ranges.Length != 2) { return false; } for (int i = 0; i < input.Length; i++) { char c = input[i]; if (c == separator) { ranges[0] = 0..i; ranges[1] = (i + 1)..input.Length; return true; } } return false; } } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } } internal sealed class <>z__ReadOnlyArray<T> : IEnumerable, ICollection, IList, IEnumerable<T>, IReadOnlyCollection<T>, IReadOnlyList<T>, ICollection<T>, IList<T> { int ICollection.Count => _items.Length; bool ICollection.IsSynchronized => false; object ICollection.SyncRoot => this; object IList.this[int index] { get { return _items[index]; } set { throw new NotSupportedException(); } } bool IList.IsFixedSize => true; bool IList.IsReadOnly => true; int IReadOnlyCollection<T>.Count => _items.Length; T IReadOnlyList<T>.this[int index] => _items[index]; int ICollection<T>.Count => _items.Length; bool ICollection<T>.IsReadOnly => true; T IList<T>.this[int index] { get { return _items[index]; } set { throw new NotSupportedException(); } } public <>z__ReadOnlyArray(T[] items) { _items = items; } IEnumerator IEnumerable.GetEnumerator() { return ((IEnumerable)_items).GetEnumerator(); } void ICollection.CopyTo(Array array, int index) { ((ICollection)_items).CopyTo(array, index); } int IList.Add(object value) { throw new NotSupportedException(); } void IList.Clear() { throw new NotSupportedException(); } bool IList.Contains(object value) { return ((IList)_items).Contains(value); } int IList.IndexOf(object value) { return ((IList)_items).IndexOf(value); } void IList.Insert(int index, object value) { throw new NotSupportedException(); } void IList.Remove(object value) { throw new NotSupportedException(); } void IList.RemoveAt(int index) { throw new NotSupportedException(); } IEnumerator<T> IEnumerable<T>.GetEnumerator() { return ((IEnumerable<T>)_items).GetEnumerator(); } void ICollection<T>.Add(T item) { throw new NotSupportedException(); } void ICollection<T>.Clear() { throw new NotSupportedException(); } bool ICollection<T>.Contains(T item) { return ((ICollection<T>)_items).Contains(item); } void ICollection<T>.CopyTo(T[] array, int arrayIndex) { ((ICollection<T>)_items).CopyTo(array, arrayIndex); } bool ICollection<T>.Remove(T item) { throw new NotSupportedException(); } int IList<T>.IndexOf(T item) { return ((IList<T>)_items).IndexOf(item); } void IList<T>.Insert(int index, T item) { throw new NotSupportedException(); } void IList<T>.RemoveAt(int index) { throw new NotSupportedException(); } }
BepInEx/plugins/EnemySoundFixes.dll
Decompiled 3 months agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Reflection.Emit; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using GameNetcodeStuff; using HarmonyLib; using Microsoft.CodeAnalysis; using Unity.Netcode; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("EnemySoundFixes")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyDescription("Fixes numerous issues with missing sound effects, or SFX playing when they shouldn't.")] [assembly: AssemblyFileVersion("1.5.8.0")] [assembly: AssemblyInformationalVersion("1.5.8+7299a0e1c2c2f2a1ddee575a04f6ae92b91b5ed4")] [assembly: AssemblyProduct("EnemySoundFixes")] [assembly: AssemblyTitle("EnemySoundFixes")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.5.8.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace EnemySoundFixes { internal enum CruiserMute { Nothing = -1, NotRadio, All } [BepInPlugin("butterystancakes.lethalcompany.enemysoundfixes", "Enemy Sound Fixes", "1.5.8")] public class Plugin : BaseUnityPlugin { private const string PLUGIN_GUID = "butterystancakes.lethalcompany.enemysoundfixes"; private const string PLUGIN_NAME = "Enemy Sound Fixes"; private const string PLUGIN_VERSION = "1.5.8"; internal static ManualLogSource Logger; internal static ConfigEntry<bool> configFixMasks; internal static ConfigEntry<bool> configThumperNoThunder; internal static ConfigEntry<bool> configBetterMimicSteps; internal static ConfigEntry<CruiserMute> configSpaceMutesCruiser; private void Awake() { //IL_00fa: Unknown result type (might be due to invalid IL or missing references) Logger = ((BaseUnityPlugin)this).Logger; configFixMasks = ((BaseUnityPlugin)this).Config.Bind<bool>("Misc", "FixMasks", true, "(Host only, requires game restart) Fixes masks' broken audio intervals.\nDisabling this is useful if you use a voice mimicking mod. (Skinwalkers, Mirage, etc.)"); configBetterMimicSteps = ((BaseUnityPlugin)this).Config.Bind<bool>("Misc", "BetterMimicSteps", false, "Mimic footstep volume and distance are altered to sound more accurate to actual players."); configThumperNoThunder = ((BaseUnityPlugin)this).Config.Bind<bool>("Misc", "ThumperNoThunder", true, "Thumpers no longer play thunder sound effects from their voice when they stop chasing after players."); configSpaceMutesCruiser = ((BaseUnityPlugin)this).Config.Bind<CruiserMute>("Misc", "SpaceMutesCruiser", CruiserMute.NotRadio, "What audio sources should be muted on the Cruiser when in orbit. (Engine sounds, the horn, the radio, etc.)"); if (configFixMasks.Value) { if (((BaseUnityPlugin)this).Config.Bind<bool>("Misc", "DontFixMasks", false, "Legacy setting, use \"FixMasks\" instead").Value) { configFixMasks.Value = false; } ((BaseUnityPlugin)this).Config.Remove(((BaseUnityPlugin)this).Config["Misc", "DontFixMasks"].Definition); ((BaseUnityPlugin)this).Config.Save(); } new Harmony("butterystancakes.lethalcompany.enemysoundfixes").PatchAll(); Logger.LogInfo((object)"Enemy Sound Fixes v1.5.8 loaded"); } } internal class References { internal static readonly FieldInfo CREATURE_VOICE = AccessTools.Field(typeof(EnemyAI), "creatureVoice"); internal static readonly FieldInfo IS_ENEMY_DEAD = AccessTools.Field(typeof(EnemyAI), "isEnemyDead"); internal static readonly FieldInfo ENGINE_AUDIO_1 = AccessTools.Field(typeof(VehicleController), "engineAudio1"); internal static readonly MethodInfo REALTIME_SINCE_STARTUP = AccessTools.DeclaredPropertyGetter(typeof(Time), "realtimeSinceStartup"); internal static readonly MethodInfo PLAY_ONE_SHOT = AccessTools.Method(typeof(AudioSource), "PlayOneShot", new Type[1] { typeof(AudioClip) }, (Type[])null); internal static readonly MethodInfo STOP = AccessTools.Method(typeof(AudioSource), "Stop", Array.Empty<Type>(), (Type[])null); internal static readonly MethodInfo DAMAGE_PLAYER = AccessTools.Method(typeof(PlayerControllerB), "DamagePlayer", (Type[])null, (Type[])null); internal static readonly MethodInfo HIT_ENEMY = AccessTools.Method(typeof(EnemyAI), "HitEnemy", (Type[])null, (Type[])null); internal static AudioClip baboonTakeDamage; internal static AudioClip hitEnemyBody; } public static class PluginInfo { public const string PLUGIN_GUID = "EnemySoundFixes"; public const string PLUGIN_NAME = "EnemySoundFixes"; public const string PLUGIN_VERSION = "1.5.8"; } } namespace EnemySoundFixes.Patches { [HarmonyPatch] internal class BaboonHawkPatches { [HarmonyPatch(typeof(BaboonBirdAI), "HitEnemy")] [HarmonyPostfix] private static void BaboonBirdAIPostHitEnemy(BaboonBirdAI __instance, bool playHitSFX) { if (playHitSFX && !((EnemyAI)__instance).isEnemyDead && (Object)(object)References.baboonTakeDamage != (Object)null) { ((EnemyAI)__instance).creatureVoice.PlayOneShot(References.baboonTakeDamage); Plugin.Logger.LogInfo((object)"Baboon hawk: Ouch"); } } [HarmonyPatch(typeof(BaboonBirdAI), "OnCollideWithEnemy")] [HarmonyTranspiler] private static IEnumerable<CodeInstruction> EnemyTransOnCollideWithEnemy(IEnumerable<CodeInstruction> instructions, ILGenerator generator) { //IL_01aa: Unknown result type (might be due to invalid IL or missing references) //IL_01b0: Expected O, but got Unknown //IL_01bc: Unknown result type (might be due to invalid IL or missing references) //IL_01c2: Expected O, but got Unknown //IL_01ca: Unknown result type (might be due to invalid IL or missing references) //IL_01d0: Expected O, but got Unknown //IL_01d8: Unknown result type (might be due to invalid IL or missing references) //IL_01de: Expected O, but got Unknown //IL_00f1: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: Expected O, but got Unknown //IL_0103: Unknown result type (might be due to invalid IL or missing references) //IL_0109: Expected O, but got Unknown //IL_0117: Unknown result type (might be due to invalid IL or missing references) //IL_011d: Expected O, but got Unknown List<CodeInstruction> list = instructions.ToList(); MethodInfo methodInfo = AccessTools.Method(typeof(Animator), "ResetTrigger", new Type[1] { typeof(string) }, (Type[])null); MethodInfo methodInfo2 = AccessTools.DeclaredPropertyGetter(typeof(RoundManager), "Instance"); for (int i = 3; i < list.Count; i++) { if (list[i].opcode == OpCodes.Callvirt && (MethodInfo)list[i].operand == methodInfo) { for (int j = i + 1; j < list.Count; j++) { if (list[j].opcode == OpCodes.Call && (MethodInfo)list[j].operand == methodInfo2) { Label label = generator.DefineLabel(); list[j].labels.Add(label); list.InsertRange(i - 3, new <>z__ReadOnlyArray<CodeInstruction>((CodeInstruction[])(object)new CodeInstruction[3] { new CodeInstruction(OpCodes.Ldarg_2, (object)null), new CodeInstruction(OpCodes.Ldfld, (object)References.IS_ENEMY_DEAD), new CodeInstruction(OpCodes.Brtrue, (object)label) })); Plugin.Logger.LogDebug((object)"Transpiler (Baboon hawk): Don't play hit sound when attacking dead enemy (A)"); i += 3; break; } } } else if (list[i].opcode == OpCodes.Callvirt && (MethodInfo)list[i].operand == References.HIT_ENEMY) { list.RemoveAt(i - 2); list.InsertRange(i - 2, new <>z__ReadOnlyArray<CodeInstruction>((CodeInstruction[])(object)new CodeInstruction[4] { new CodeInstruction(OpCodes.Ldarg_2, (object)null), new CodeInstruction(OpCodes.Ldfld, (object)References.IS_ENEMY_DEAD), new CodeInstruction(OpCodes.Ldc_I4_0, (object)null), new CodeInstruction(OpCodes.Ceq, (object)null) })); Plugin.Logger.LogDebug((object)"Transpiler (Baboon hawk): Don't play hit sound when attacking dead enemy (B)"); i += 4; } } return list; } } [HarmonyPatch] internal class BrackenPatches { [HarmonyPatch(typeof(FlowermanAI), "HitEnemy")] [HarmonyPrefix] private static void FlowermanAIPreHitEnemy(FlowermanAI __instance, int force, bool playHitSFX) { GeneralPatches.playHitSound = playHitSFX && !((EnemyAI)__instance).isEnemyDead && ((EnemyAI)__instance).enemyHP <= force; } [HarmonyPatch(typeof(FlowermanAI), "KillEnemy")] [HarmonyPostfix] private static void FlowermanAIPostKillEnemy(FlowermanAI __instance, bool destroy) { if (GeneralPatches.playHitSound) { GeneralPatches.playHitSound = false; if (!destroy) { ((EnemyAI)__instance).creatureSFX.PlayOneShot(((EnemyAI)__instance).enemyType.hitBodySFX); Plugin.Logger.LogInfo((object)"Bracken: Play hit sound on death"); } } } } [HarmonyPatch] internal class ButlerPatches { [HarmonyPatch(typeof(ButlerEnemyAI), "Update")] [HarmonyPostfix] private static void ButlerEnemyAIPostUpdate(ButlerEnemyAI __instance) { if (((EnemyAI)__instance).isEnemyDead && __instance.buzzingAmbience.isPlaying && ((EnemyAI)__instance).creatureAnimator.GetBool("popFinish")) { __instance.buzzingAmbience.Stop(); Plugin.Logger.LogInfo((object)"Butler: Stop buzzing (bugs are free)"); } } } [HarmonyPatch] internal class CruiserPatches { public static HangarShipDoor hangarShipDoor; [HarmonyPatch(typeof(VehicleController), "RevCarClientRpc")] [HarmonyPatch(/*Could not decode attribute arguments.*/)] [HarmonyPatch(typeof(VehicleController), "SetIgnition")] [HarmonyTranspiler] private static IEnumerable<CodeInstruction> VehicleControllerTransEngineRev(IEnumerable<CodeInstruction> instructions) { //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Expected O, but got Unknown //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Expected O, but got Unknown //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00d7: Expected O, but got Unknown List<CodeInstruction> list = instructions.ToList(); for (int i = 4; i < list.Count; i++) { if (list[i].opcode == OpCodes.Callvirt && (MethodInfo)list[i].operand == References.PLAY_ONE_SHOT && list[i - 3].opcode == OpCodes.Ldfld && (FieldInfo)list[i - 3].operand == References.ENGINE_AUDIO_1) { list.InsertRange(i - 4, new <>z__ReadOnlyArray<CodeInstruction>((CodeInstruction[])(object)new CodeInstruction[3] { new CodeInstruction(list[i - 4].opcode, list[i - 4].operand), new CodeInstruction(OpCodes.Ldfld, (object)References.ENGINE_AUDIO_1), new CodeInstruction(OpCodes.Callvirt, (object)References.STOP) })); Plugin.Logger.LogDebug((object)"Transpiler (Cruiser): Reset engine rev sounds"); return list; } } Plugin.Logger.LogError((object)"Cruiser transpiler failed"); return list; } [HarmonyPatch(typeof(VehicleController), "PlayCollisionAudio")] [HarmonyTranspiler] private static IEnumerable<CodeInstruction> VehicleControllerTransPlayCollisionAudio(IEnumerable<CodeInstruction> instructions) { List<CodeInstruction> list = instructions.ToList(); FieldInfo fieldInfo = AccessTools.Field(typeof(VehicleController), "audio1Type"); FieldInfo operand = AccessTools.Field(typeof(VehicleController), "audio1Time"); FieldInfo fieldInfo2 = AccessTools.Field(typeof(VehicleController), "audio2Type"); FieldInfo operand2 = AccessTools.Field(typeof(VehicleController), "audio2Time"); for (int i = 0; i < list.Count - 2; i++) { if (list[i].opcode == OpCodes.Call && (MethodInfo)list[i].operand == References.REALTIME_SINCE_STARTUP && list[i + 2].opcode == OpCodes.Ldfld) { if ((FieldInfo)list[i + 2].operand == fieldInfo) { Plugin.Logger.LogDebug((object)"Transpiler (Cruiser): Fix timestamp check for collision audio (#1)"); list[i + 2].operand = operand; } else if ((FieldInfo)list[i + 2].operand == fieldInfo2) { Plugin.Logger.LogDebug((object)"Transpiler (Cruiser): Fix timestamp check for collision audio (#2)"); list[i + 2].operand = operand2; } } } return list; } [HarmonyPatch(typeof(VehicleController), "SetVehicleAudioProperties")] [HarmonyPrefix] private static void VehicleControllerPreSetVehicleAudioProperties(VehicleController __instance, AudioSource audio, ref bool audioActive) { if (audioActive && (((Object)(object)audio == (Object)(object)__instance.extremeStressAudio && __instance.magnetedToShip) || (((Object)(object)audio == (Object)(object)__instance.rollingAudio || (Object)(object)audio == (Object)(object)__instance.skiddingAudio) && (__instance.magnetedToShip || (!__instance.FrontLeftWheel.isGrounded && !__instance.FrontRightWheel.isGrounded && !__instance.BackLeftWheel.isGrounded && !__instance.FrontLeftWheel.isGrounded))))) { audioActive = false; } } [HarmonyPatch(typeof(VehicleController), "SetVehicleAudioProperties")] [HarmonyTranspiler] private static IEnumerable<CodeInstruction> VehicleControllerTransSetVehicleAudioProperties(IEnumerable<CodeInstruction> instructions) { List<CodeInstruction> list = instructions.ToList(); MethodInfo methodInfo = AccessTools.DeclaredPropertyGetter(typeof(AudioSource), "volume"); for (int i = 0; i < list.Count - 2; i++) { if (list[i].opcode == OpCodes.Callvirt && (MethodInfo)list[i].operand == methodInfo && list[i + 1].opcode == OpCodes.Ldc_R4 && (float)list[i + 1].operand == 0f && list[i - 2].opcode == OpCodes.Bne_Un) { list[i + 1].operand = 0.001f; list[i + 2].opcode = OpCodes.Bge; Plugin.Logger.LogDebug((object)"Transpiler (Cruiser): Stop audio source when volume is close enough to zero"); break; } } return list; } [HarmonyPatch(typeof(VehicleController), "LateUpdate")] [HarmonyPostfix] private static void VehicleControllerPostLateUpdate(VehicleController __instance) { if (__instance.magnetedToShip && Plugin.configSpaceMutesCruiser.Value > CruiserMute.Nothing && (StartOfRound.Instance.inShipPhase || !StartOfRound.Instance.shipDoorsEnabled)) { __instance.hornAudio.mute = true; __instance.engineAudio1.mute = true; __instance.engineAudio2.mute = true; __instance.turbulenceAudio.mute = true; if (Plugin.configSpaceMutesCruiser.Value == CruiserMute.NotRadio) { __instance.radioAudio.mute = false; __instance.radioInterference.mute = false; } else { __instance.radioAudio.mute = true; __instance.radioInterference.mute = true; } } else { __instance.hornAudio.mute = false; __instance.engineAudio1.mute = false; __instance.engineAudio2.mute = false; __instance.turbulenceAudio.mute = false; __instance.radioAudio.mute = false; __instance.radioInterference.mute = false; } } } [HarmonyPatch] internal class EyelessDogPatches { private const float TIME_DROP_CARRIED_BODY = 5.01f; private static Dictionary<MouthDogAI, (float Pitch, float Time)> dogPitches = new Dictionary<MouthDogAI, (float, float)>(); [HarmonyPatch(typeof(MouthDogAI), "KillEnemy")] [HarmonyPostfix] private static void MouthDogAIPostKillEnemy(MouthDogAI __instance, bool destroy) { if (GeneralPatches.playHitSound) { GeneralPatches.playHitSound = false; if (!destroy && (Object)(object)References.hitEnemyBody != (Object)null) { ((EnemyAI)__instance).creatureSFX.PlayOneShot(((EnemyAI)__instance).enemyType.hitBodySFX); Plugin.Logger.LogInfo((object)"Mouth dog: Play hit sound on death"); } } if (!destroy) { ((EnemyAI)__instance).creatureVoice.mute = true; Plugin.Logger.LogInfo((object)"Eyeless dog: Don't start breathing after death"); } } [HarmonyPatch(typeof(MouthDogAI), "Start")] [HarmonyPostfix] private static void MouthDogAIPostStart(MouthDogAI __instance) { Random random = new Random(StartOfRound.Instance.randomMapSeed + (int)((NetworkBehaviour)__instance).NetworkObjectId); if (random.Next(10) < 2) { ((EnemyAI)__instance).creatureVoice.pitch = 0.6f + 0.7f * (float)random.NextDouble(); } else { ((EnemyAI)__instance).creatureVoice.pitch = 0.9f + 0.2f * (float)random.NextDouble(); } Plugin.Logger.LogInfo((object)"Eyeless dog: Reroll voice pitch (seeded random)"); } [HarmonyPatch(typeof(MouthDogAI), "KillPlayerClientRpc")] [HarmonyPrefix] private static void MouthDogAIPreKillPlayerClientRpc(MouthDogAI __instance) { if (!dogPitches.ContainsKey(__instance)) { dogPitches.Add(__instance, (((EnemyAI)__instance).creatureVoice.pitch, Time.timeSinceLevelLoad + 5.01f)); Plugin.Logger.LogInfo((object)$"Eyeless dog #{((Object)__instance).GetInstanceID()}: Cached {((EnemyAI)__instance).creatureVoice.pitch}x voice pitch (kill animation will start)"); } else { Plugin.Logger.LogWarning((object)$"Eyeless dog #{((Object)__instance).GetInstanceID()}: Tried to initiate kill animation before ending previous kill animation"); } } [HarmonyPatch(typeof(MouthDogAI), "Update")] [HarmonyPostfix] private static void MouthDogAIPostUpdate(MouthDogAI __instance, bool ___inKillAnimation) { if (!((EnemyAI)__instance).isEnemyDead) { if (dogPitches.Count > 0 && !___inKillAnimation && dogPitches.TryGetValue(__instance, out (float, float) value) && Time.timeSinceLevelLoad >= value.Item2) { dogPitches.Remove(__instance); Plugin.Logger.LogInfo((object)$"Eyeless dog #{((Object)__instance).GetInstanceID()}: Reset voice pitch now that kill sound is done ({((EnemyAI)__instance).creatureVoice.pitch}x -> {value.Item1}x)"); ((EnemyAI)__instance).creatureVoice.pitch = value.Item1; } if (!((EnemyAI)__instance).creatureVoice.isPlaying) { ((EnemyAI)__instance).creatureVoice.Play(); } } } [HarmonyPatch(/*Could not decode attribute arguments.*/)] [HarmonyTranspiler] private static IEnumerable<CodeInstruction> MouthDogAITransEnterChaseMode(IEnumerable<CodeInstruction> instructions) { List<CodeInstruction> list = instructions.ToList(); for (int i = 1; i < list.Count; i++) { if (list[i].opcode == OpCodes.Callvirt && (MethodInfo)list[i].operand == References.PLAY_ONE_SHOT && list[i - 1].opcode == OpCodes.Ldfld && (FieldInfo)list[i - 1].operand == AccessTools.Field(typeof(MouthDogAI), "breathingSFX")) { for (int j = i - 4; j <= i; j++) { list[j].opcode = OpCodes.Nop; } Plugin.Logger.LogDebug((object)"Transpiler (Eyeless dog): Fix overlapping breathing"); break; } } return list; } [HarmonyPatch(typeof(EnemyAI), "SubtractFromPowerLevel")] [HarmonyPostfix] private static void EnemyAIPostSubtractFromPowerLevel(EnemyAI __instance) { MouthDogAI val = (MouthDogAI)(object)((__instance is MouthDogAI) ? __instance : null); if ((Object)(object)val != (Object)null && dogPitches.Remove(val)) { Plugin.Logger.LogInfo((object)$"Eyeless dog #{((Object)__instance).GetInstanceID()}: Died mid kill animation (clean up cached reference)"); } } [HarmonyPatch(typeof(RoundManager), "ResetEnemyVariables")] [HarmonyPostfix] private static void RoundManagerPostResetEnemyVariables() { dogPitches.Clear(); } [HarmonyPatch(typeof(MouthDogAI), "HitEnemy")] [HarmonyPrefix] private static void MouthDogAIPreHitEnemy(MouthDogAI __instance, int force, bool playHitSFX) { GeneralPatches.playHitSound = playHitSFX && !((EnemyAI)__instance).isEnemyDead && ((EnemyAI)__instance).enemyHP <= force; } } [HarmonyPatch] internal class ForestKeeperPatches { private const float TIME_PLAY_AUDIO_2 = 2.2f; [HarmonyPatch(typeof(ForestGiantAI), "Update")] [HarmonyPostfix] private static void ForestGiantAIPostUpdate(ForestGiantAI __instance) { if (((EnemyAI)__instance).stunNormalizedTimer > 0f || ((EnemyAI)__instance).isEnemyDead || ((EnemyAI)__instance).currentBehaviourStateIndex == 2) { PlayAudioAnimationEvent component = ((Component)__instance.animationContainer).GetComponent<PlayAudioAnimationEvent>(); AudioSource audioToPlay = component.audioToPlay; if (audioToPlay.isPlaying) { audioToPlay.Stop(); Plugin.Logger.LogInfo((object)"Forest keeper: Stop chewing (eating animation interrupted)"); } ParticleSystem particle = component.particle; if (particle.isEmitting) { particle.Stop(); Plugin.Logger.LogInfo((object)"Forest keeper: Stop spraying blood from mouth (eating animation interrupted)"); } } } [HarmonyPatch(typeof(ForestGiantAI), "StopKillAnimation")] [HarmonyPatch(/*Could not decode attribute arguments.*/)] [HarmonyTranspiler] private static IEnumerable<CodeInstruction> ForestGiantAITransAnimation(IEnumerable<CodeInstruction> instructions) { List<CodeInstruction> list = instructions.ToList(); for (int i = 1; i < list.Count - 1; i++) { if (list[i].opcode == OpCodes.Ldfld && (FieldInfo)list[i].operand == References.CREATURE_VOICE) { for (int j = i - 1; j <= i + 1; j++) { list[j].opcode = OpCodes.Nop; list[j].operand = null; } Plugin.Logger.LogDebug((object)"Transpiler (Forest Keeper): Don't interrupt voice"); break; } } return list; } [HarmonyPatch(typeof(ForestGiantAI), "AnimationEventA")] [HarmonyPostfix] private static void ForestGiantAIPostAnimationEventA(ForestGiantAI __instance) { ((EnemyAI)__instance).creatureSFX.PlayOneShot(__instance.giantFall); Plugin.Logger.LogInfo((object)"Forest keeper: Fallen down"); } [HarmonyPatch(typeof(PlayAudioAnimationEvent), "PlayAudio2")] [HarmonyPrefix] private static bool PlayAudioAnimationEventPrePlayAudio2(PlayAudioAnimationEvent __instance) { if (((Object)__instance.audioClip2).name == "FGiantEatPlayerSFX") { EnemyAI mainScript = ((Component)__instance).GetComponent<EnemyAnimationEvent>().mainScript; ForestGiantAI val = (ForestGiantAI)(object)((mainScript is ForestGiantAI) ? mainScript : null); if ((Object)(object)((EnemyAI)val).inSpecialAnimationWithPlayer != (Object)null && (Object)(object)((EnemyAI)val).inSpecialAnimationWithPlayer.inAnimationWithEnemy == (Object)(object)val) { __instance.audioToPlay.PlayOneShot(__instance.audioClip2); Plugin.Logger.LogInfo((object)"Forest keeper: Play bite sound effect with overlap"); } else { Plugin.Logger.LogInfo((object)"Forest keeper: Don't bite (player was teleported)"); } return false; } return true; } [HarmonyPatch(typeof(PlayAudioAnimationEvent), "PlayParticle")] [HarmonyPrefix] private static bool PlayAudioAnimationEventPrePlayParticle(PlayAudioAnimationEvent __instance) { if ((Object)(object)__instance.audioClip2 != (Object)null && ((Object)__instance.audioClip2).name == "FGiantEatPlayerSFX") { EnemyAI mainScript = ((Component)__instance).GetComponent<EnemyAnimationEvent>().mainScript; if ((Object)(object)mainScript.inSpecialAnimationWithPlayer == (Object)null || (Object)(object)mainScript.inSpecialAnimationWithPlayer.inAnimationWithEnemy != (Object)(object)mainScript) { Plugin.Logger.LogInfo((object)"Forest keeper: Don't spray blood (player was teleported)"); return false; } } return true; } [HarmonyPatch(typeof(EnemyAI), "CancelSpecialAnimationWithPlayer")] [HarmonyPrefix] private static void EnemyAIPreCancelSpecialAnimationWithPlayer(EnemyAI __instance) { if (!(__instance is ForestGiantAI) || !((Object)(object)__instance.inSpecialAnimationWithPlayer != (Object)null) || !((Object)(object)__instance.inSpecialAnimationWithPlayer.inAnimationWithEnemy == (Object)(object)__instance) || __instance.inSpecialAnimationWithPlayer.isPlayerDead) { return; } PlayAudioAnimationEvent component = ((Component)((ForestGiantAI)((__instance is ForestGiantAI) ? __instance : null)).animationContainer).GetComponent<PlayAudioAnimationEvent>(); AudioSource audioToPlay = component.audioToPlay; if (!audioToPlay.isPlaying) { return; } AudioClip clip = audioToPlay.clip; if (((clip != null) ? ((Object)clip).name : null) == "Roar" && audioToPlay.time > 2.2f) { audioToPlay.Stop(); Plugin.Logger.LogInfo((object)"Forest keeper: Stop chewing (player was teleported)"); ParticleSystem particle = component.particle; if (particle.isEmitting) { particle.Stop(); Plugin.Logger.LogInfo((object)"Forest keeper: Stop spraying blood from mouth (player was teleported)"); } } } } [HarmonyPatch] internal class GeneralPatches { internal static bool playHitSound; [HarmonyPatch(typeof(QuickMenuManager), "Start")] [HarmonyPostfix] private static void QuickMenuManagerPostStart(QuickMenuManager __instance) { List<SpawnableEnemyWithRarity> enemies = __instance.testAllEnemiesLevel.Enemies; List<SpawnableEnemyWithRarity> outsideEnemies = __instance.testAllEnemiesLevel.OutsideEnemies; List<SpawnableEnemyWithRarity> daytimeEnemies = __instance.testAllEnemiesLevel.DaytimeEnemies; List<SpawnableEnemyWithRarity> list = new List<SpawnableEnemyWithRarity>(enemies.Count + outsideEnemies.Count + daytimeEnemies.Count); list.AddRange(enemies); list.AddRange(outsideEnemies); list.AddRange(daytimeEnemies); EnemyType val = null; foreach (SpawnableEnemyWithRarity item in list) { switch (((Object)item.enemyType).name) { case "BaboonHawk": if ((Object)(object)References.baboonTakeDamage == (Object)null) { References.baboonTakeDamage = item.enemyType.hitBodySFX; Plugin.Logger.LogInfo((object)"Cached baboon hawk damage sound"); } item.enemyType.hitBodySFX = null; Plugin.Logger.LogInfo((object)"Overwritten baboon hawk damage sound"); ((EnemyAI)item.enemyType.enemyPrefab.GetComponent<BaboonBirdAI>()).dieSFX = item.enemyType.deathSFX; Plugin.Logger.LogInfo((object)"Overwritten missing baboon hawk death sound"); break; case "Centipede": ((EnemyAI)item.enemyType.enemyPrefab.GetComponent<CentipedeAI>()).creatureSFX.loop = true; Plugin.Logger.LogInfo((object)"Loop snare flea walking and clinging"); break; case "Crawler": if (Plugin.configThumperNoThunder.Value) { EnemyBehaviourState val2 = ((IEnumerable<EnemyBehaviourState>)((EnemyAI)item.enemyType.enemyPrefab.GetComponent<CrawlerAI>()).enemyBehaviourStates).FirstOrDefault((Func<EnemyBehaviourState, bool>)((EnemyBehaviourState enemyBehaviourState) => enemyBehaviourState.name == "searching")); if (val2 != null) { val2.VoiceClip = null; val2.playOneShotVoice = false; Plugin.Logger.LogInfo((object)"Remove thunder sound from thumper"); } } break; case "ForestGiant": { ForestGiantAI component = item.enemyType.enemyPrefab.GetComponent<ForestGiantAI>(); ((EnemyAI)component).creatureSFX.spatialBlend = 1f; Plugin.Logger.LogInfo((object)"Fix forest giant global audio volume"); item.enemyType.hitBodySFX = ((IEnumerable<FootstepSurface>)StartOfRound.Instance.footstepSurfaces).FirstOrDefault((Func<FootstepSurface, bool>)((FootstepSurface footstepSurface) => footstepSurface.surfaceTag == "Wood")).hitSurfaceSFX; Plugin.Logger.LogInfo((object)"Overwritten missing forest giant hit sound"); component.giantBurningAudio.volume = 0f; Plugin.Logger.LogInfo((object)"Fix forest giant burning volume fade"); break; } case "MouthDog": val = item.enemyType; break; } if ((Object)(object)References.hitEnemyBody == (Object)null && ((Object)item.enemyType.hitBodySFX).name == "HitEnemyBody") { References.hitEnemyBody = item.enemyType.hitBodySFX; Plugin.Logger.LogInfo((object)"Cached generic damage sound"); } } if ((Object)(object)References.hitEnemyBody != (Object)null && (Object)(object)val != (Object)null) { val.hitBodySFX = References.hitEnemyBody; Plugin.Logger.LogInfo((object)"Overwritten missing eyeless dog hit sound"); } } [HarmonyPatch(typeof(AnimatedObjectTrigger), "Start")] [HarmonyPostfix] private static void AnimatedObjectTriggerPostStart(AnimatedObjectTrigger __instance) { if (__instance.playAudiosInSequence && (Object)(object)__instance.playParticle == (Object)null) { __instance.playParticleOnTimesTriggered = -1; Plugin.Logger.LogWarning((object)("\"" + ((Object)__instance).name + ".AnimatedObjectTrigger\" doesn't have particles attached")); } } [HarmonyPatch(typeof(MouthDogAI), "OnCollideWithEnemy")] [HarmonyPatch(typeof(BushWolfEnemy), "OnCollideWithEnemy")] [HarmonyTranspiler] private static IEnumerable<CodeInstruction> EnemyTransOnCollideWithEnemy(IEnumerable<CodeInstruction> instructions) { //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Expected O, but got Unknown //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Expected O, but got Unknown //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Expected O, but got Unknown //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Expected O, but got Unknown List<CodeInstruction> list = instructions.ToList(); for (int i = 2; i < list.Count; i++) { if (list[i].opcode == OpCodes.Callvirt && (MethodInfo)list[i].operand == References.HIT_ENEMY) { list.RemoveAt(i - 2); list.InsertRange(i - 2, new <>z__ReadOnlyArray<CodeInstruction>((CodeInstruction[])(object)new CodeInstruction[4] { new CodeInstruction(OpCodes.Ldarg_2, (object)null), new CodeInstruction(OpCodes.Ldfld, (object)References.IS_ENEMY_DEAD), new CodeInstruction(OpCodes.Ldc_I4_0, (object)null), new CodeInstruction(OpCodes.Ceq, (object)null) })); Plugin.Logger.LogDebug((object)"Transpiler: Don't play hit sound when attacking dead enemy"); break; } } return list; } } [HarmonyPatch] internal class HoardingBugPatches { [HarmonyPatch(typeof(HoarderBugAI), "KillEnemy")] [HarmonyPostfix] private static void HoarderBugAIPostKillEnemy(HoarderBugAI __instance, bool destroy) { if (GeneralPatches.playHitSound) { GeneralPatches.playHitSound = false; if (!destroy) { ((EnemyAI)__instance).creatureSFX.PlayOneShot(((EnemyAI)__instance).enemyType.hitBodySFX); Plugin.Logger.LogInfo((object)"Hoarding bug: Play hit sound on death"); } } if (!destroy) { ((EnemyAI)__instance).creatureVoice.PlayOneShot(((EnemyAI)__instance).enemyType.deathSFX); Plugin.Logger.LogInfo((object)"Hoarding bug: Played backup death sound"); } } [HarmonyPatch(typeof(HoarderBugAI), "HitEnemy")] [HarmonyPrefix] private static void HoarderBugAIPreHitEnemy(HoarderBugAI __instance, int force, bool playHitSFX) { GeneralPatches.playHitSound = playHitSFX && !((EnemyAI)__instance).isEnemyDead && ((EnemyAI)__instance).enemyHP <= force; } } [HarmonyPatch] internal class KidnapperFoxPatches { [HarmonyPatch(typeof(BushWolfEnemy), "HitTongueLocalClient")] [HarmonyPostfix] private static void BushWolfEnemyPostHitTongueLocalClient(BushWolfEnemy __instance) { ((EnemyAI)__instance).creatureVoice.PlayOneShot(__instance.hitBushWolfSFX); Plugin.Logger.LogInfo((object)"Kidnapper fox: Bit my tongue"); } [HarmonyPatch(typeof(BushWolfEnemy), "Update")] [HarmonyPostfix] private static void BushWolfEnemyPostUpdate(BushWolfEnemy __instance, bool ___dragging) { if ((!___dragging || ((EnemyAI)__instance).isEnemyDead || ((EnemyAI)__instance).stunNormalizedTimer > 0f) && ((EnemyAI)__instance).creatureVoice.isPlaying && (Object)(object)((EnemyAI)__instance).creatureVoice.clip == (Object)(object)__instance.snarlSFX) { ((EnemyAI)__instance).creatureVoice.clip = null; Plugin.Logger.LogInfo((object)"Kidnapper fox: Cancel snarl (failsafe)"); } if (((EnemyAI)__instance).isEnemyDead && __instance.spitParticle.isEmitting) { __instance.spitParticle.Stop(); Plugin.Logger.LogInfo((object)"Kidnapper fox: Cancel drool"); } } [HarmonyPatch(typeof(BushWolfEnemy), "CancelReelingPlayerIn")] [HarmonyPrefix] private static void BushWolfEnemyPreCancelReelingPlayerIn(BushWolfEnemy __instance, ref bool ___dragging) { if (___dragging && ((EnemyAI)__instance).isEnemyDead) { ___dragging = false; Plugin.Logger.LogInfo((object)"Kidnapper fox: Don't let dragging interrupt death voice"); } } [HarmonyPatch(typeof(BushWolfEnemy), "HitEnemy")] [HarmonyTranspiler] private static IEnumerable<CodeInstruction> BushWolfEnemyTransHitEnemy(IEnumerable<CodeInstruction> instructions, ILGenerator generator) { //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Expected O, but got Unknown //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Expected O, but got Unknown //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Expected O, but got Unknown List<CodeInstruction> list = instructions.ToList(); MethodInfo methodInfo = AccessTools.Method(typeof(BushWolfEnemy), "CancelReelingPlayerIn", (Type[])null, (Type[])null); Label label = generator.DefineLabel(); list[list.Count - 1].labels.Add(label); for (int num = list.Count - 1; num >= 0; num--) { if (list[num].opcode == OpCodes.Call && (MethodInfo)list[num].operand == methodInfo) { list.InsertRange(num + 1, new <>z__ReadOnlyArray<CodeInstruction>((CodeInstruction[])(object)new CodeInstruction[3] { new CodeInstruction(OpCodes.Ldarg_0, (object)null), new CodeInstruction(OpCodes.Ldfld, (object)References.IS_ENEMY_DEAD), new CodeInstruction(OpCodes.Brtrue, (object)label) })); Plugin.Logger.LogDebug((object)"Transpiler (Kidnapper fox): Don't cry when dead"); break; } } return list; } } [HarmonyPatch] internal class ManeaterPatches { [HarmonyPatch(typeof(CaveDwellerAI), "KillEnemy")] [HarmonyPostfix] private static void CaveDwellerAIPostKillEnemy(CaveDwellerAI __instance, bool destroy) { if (!destroy) { AudioSource[] array = (AudioSource[])(object)new AudioSource[5] { __instance.clickingAudio1, __instance.clickingAudio2, __instance.walkingAudio, __instance.screamAudio, __instance.screamAudioNonDiagetic }; foreach (AudioSource obj in array) { obj.Stop(); obj.mute = true; } ((EnemyAI)__instance).creatureVoice.Stop(); ((EnemyAI)__instance).creatureVoice.PlayOneShot(((EnemyAI)__instance).dieSFX); } } } [HarmonyPatch] internal class MaskPatches { [HarmonyPatch(typeof(RandomPeriodicAudioPlayer), "Update")] [HarmonyTranspiler] private static IEnumerable<CodeInstruction> RandomPeriodicAudioPlayerTransUpdate(IEnumerable<CodeInstruction> instructions) { if (!Plugin.configFixMasks.Value) { return instructions; } List<CodeInstruction> list = instructions.ToList(); for (int i = 1; i < list.Count; i++) { if (!(list[i].opcode == OpCodes.Add)) { continue; } for (int num = i - 1; num >= 0; num--) { if (list[num].opcode == OpCodes.Call && (MethodInfo)list[num].operand == References.REALTIME_SINCE_STARTUP) { list[i].opcode = OpCodes.Nop; list[num].opcode = OpCodes.Nop; Plugin.Logger.LogDebug((object)"Transpiler (Periodic mask audio): Fix intervals"); return list; } } } return list; } [HarmonyPatch(typeof(MaskedPlayerEnemy), "Start")] [HarmonyPostfix] private static void MaskedPlayerEnemyPostStart(MaskedPlayerEnemy __instance) { //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Unknown result type (might be due to invalid IL or missing references) if (!Plugin.configBetterMimicSteps.Value) { return; } AudioSource val = GameNetworkManager.Instance?.localPlayerController?.movementAudio; if ((Object)(object)val == (Object)null) { return; } ((Component)__instance.movementAudio).transform.localPosition = new Vector3(0f, 0.278f, 0f); __instance.movementAudio.volume = val.volume; __instance.movementAudio.dopplerLevel = val.dopplerLevel; __instance.movementAudio.spread = val.spread; __instance.movementAudio.rolloffMode = (AudioRolloffMode)2; foreach (AudioSourceCurveType value in Enum.GetValues(typeof(AudioSourceCurveType))) { __instance.movementAudio.SetCustomCurve(value, val.GetCustomCurve(value)); } Plugin.Logger.LogInfo((object)"Mimic: Footsteps match players"); } } [HarmonyPatch] internal class NutcrackerPatches { [HarmonyPatch(typeof(NutcrackerEnemyAI), "KillEnemy")] [HarmonyPostfix] private static void NutcrackerEnemyAIPostKillEnemy(NutcrackerEnemyAI __instance, bool destroy) { if (!destroy) { ((EnemyAI)__instance).creatureVoice.loop = false; ((EnemyAI)__instance).creatureVoice.clip = null; ((EnemyAI)__instance).creatureVoice.pitch = 1f; ((EnemyAI)__instance).creatureVoice.PlayOneShot(((EnemyAI)__instance).enemyType.deathSFX); Plugin.Logger.LogInfo((object)"Nutcracker: Played death sound"); } } } [HarmonyPatch] internal class PlayerPatches { [HarmonyPatch(typeof(PlayerControllerB), "DamagePlayer")] [HarmonyPrefix] private static void PlayerControllerBPreDamagePlayer(CauseOfDeath causeOfDeath, ref bool fallDamage) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Invalid comparison between Unknown and I4 if ((int)causeOfDeath == 2 && !fallDamage) { fallDamage = true; Plugin.Logger.LogInfo((object)"Player: Treat Gravity damage as fall damage"); } } [HarmonyPatch(typeof(PlayerControllerB), "DamagePlayerFromOtherClientClientRpc")] [HarmonyTranspiler] private static IEnumerable<CodeInstruction> PlayerControllerBTransDamagePlayerFromOtherClientClientRpc(IEnumerable<CodeInstruction> instructions) { List<CodeInstruction> list = instructions.ToList(); for (int i = 3; i < list.Count; i++) { if (!(list[i].opcode == OpCodes.Call) || !((MethodInfo)list[i].operand == References.DAMAGE_PLAYER)) { continue; } for (int num = i - 1; num > 0; num--) { if (list[num].opcode == OpCodes.Ldarg_1 && list[num + 1].opcode == OpCodes.Ldc_I4_1) { list[num + 1].opcode = OpCodes.Ldc_I4_0; Plugin.Logger.LogDebug((object)"Transpiler (Players): Melee weapons don't stack hit sounds"); break; } } } return list; } } [HarmonyPatch] internal class SnareFleaPatches { [HarmonyPatch(/*Could not decode attribute arguments.*/)] [HarmonyTranspiler] private static IEnumerable<CodeInstruction> TransDelayedShriek(IEnumerable<CodeInstruction> instructions, ILGenerator generator) { //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Expected O, but got Unknown //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Expected O, but got Unknown //IL_00b6: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Expected O, but got Unknown //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Expected O, but got Unknown //IL_00d2: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Expected O, but got Unknown List<CodeInstruction> list = instructions.ToList(); Label label = generator.DefineLabel(); for (int i = 0; i < list.Count - 1; i++) { if (list[i].opcode == OpCodes.Ldloc_1 && list[i + 1].opcode == OpCodes.Ldfld && (FieldInfo)list[i + 1].operand == References.CREATURE_VOICE) { list[i].labels.Add(label); list.InsertRange(i, new <>z__ReadOnlyArray<CodeInstruction>((CodeInstruction[])(object)new CodeInstruction[5] { new CodeInstruction(OpCodes.Ldloc_1, (object)null), new CodeInstruction(OpCodes.Ldfld, (object)References.IS_ENEMY_DEAD), new CodeInstruction(OpCodes.Brfalse, (object)label), new CodeInstruction(OpCodes.Ldc_I4_0, (object)null), new CodeInstruction(OpCodes.Ret, (object)null) })); Plugin.Logger.LogDebug((object)"Transpiler (Snare flea): Don't shriek when dead"); break; } } return list; } [HarmonyPatch(typeof(CentipedeAI), "Update")] [HarmonyPrefix] private static void CentipedeAIPreUpdate(CentipedeAI __instance) { if (((EnemyAI)__instance).creatureSFX.isPlaying && (Object)(object)((EnemyAI)__instance).creatureSFX.clip == (Object)(object)((EnemyAI)__instance).enemyBehaviourStates[2].SFXClip && (((EnemyAI)__instance).isEnemyDead || ((EnemyAI)__instance).currentBehaviourStateIndex != 2)) { ((EnemyAI)__instance).creatureSFX.Stop(); ((EnemyAI)__instance).creatureSFX.clip = null; Plugin.Logger.LogInfo((object)"Snare flea: Stop walking while dead, clinging to player, or sneaking away"); } } [HarmonyPatch(typeof(CentipedeAI), "KillEnemy")] [HarmonyPostfix] private static void CentipedeAIPostKillEnemy(CentipedeAI __instance) { ((EnemyAI)__instance).creatureSFX.clip = null; } [HarmonyPatch(typeof(EnemyAI), "PlayAudioOfCurrentState")] [HarmonyPostfix] private static void PostPlayAudioOfCurrentState(EnemyAI __instance) { if (__instance is CentipedeAI && __instance.currentBehaviourStateIndex == 1 && __instance.creatureVoice.pitch > 1f) { __instance.creatureVoice.pitch = 1f; Plugin.Logger.LogInfo((object)"Snare flea: Reset \"voice\" pitch for attacking again"); } } [HarmonyPatch(typeof(CentipedeAI), "HitEnemy")] [HarmonyPrefix] private static void CentipedeAIPreHitEnemy(CentipedeAI __instance) { if (((EnemyAI)__instance).creatureSFX.isPlaying && (Object)(object)((EnemyAI)__instance).creatureSFX.clip == (Object)(object)((EnemyAI)__instance).enemyBehaviourStates[2].SFXClip) { ((EnemyAI)__instance).creatureSFX.Stop(); ((EnemyAI)__instance).creatureSFX.clip = null; } } } [HarmonyPatch] internal class TulipSnakePatches { [HarmonyPatch(typeof(FlowerSnakeEnemy), "Update")] [HarmonyPostfix] private static void FlowerSnakeEnemyPostUpdate(FlowerSnakeEnemy __instance) { if (!__instance.flappingAudio.isPlaying) { return; } if (((EnemyAI)__instance).isEnemyDead) { __instance.flappingAudio.Stop(); __instance.flappingAudio.mute = true; Plugin.Logger.LogInfo((object)"Tulip snake: Stop making noise while dead"); } else if ((Object)(object)__instance.flappingAudio.clip == (Object)(object)((EnemyAI)__instance).enemyType.audioClips[9]) { if ((Object)(object)__instance.clingingToPlayer != (Object)null) { __instance.flappingAudio.Stop(); Plugin.Logger.LogInfo((object)"Tulip snake: Stop scurrying (latched to player)"); } } else if ((Object)(object)__instance.clingingToPlayer == (Object)null) { __instance.flappingAudio.Stop(); Plugin.Logger.LogInfo((object)"Tulip snake: Stop flapping (no longer clinging)"); } } [HarmonyPatch(typeof(FlowerSnakeEnemy), "StopLeapOnLocalClient")] [HarmonyPostfix] private static void PostStopLeapOnLocalClient(FlowerSnakeEnemy __instance, bool landOnGround) { if (landOnGround && !((EnemyAI)__instance).isEnemyDead) { __instance.flappingAudio.pitch = Random.Range(0.8f, 1.2f); Plugin.Logger.LogInfo((object)"Tulip snake: Reroll scurry pitch (landed from leap)"); } } [HarmonyPatch(typeof(FlowerSnakeEnemy), "StopClingingOnLocalClient")] [HarmonyPostfix] private static void PostStopClingingOnLocalClient(FlowerSnakeEnemy __instance) { if (!((EnemyAI)__instance).isEnemyDead) { __instance.flappingAudio.pitch = Random.Range(0.8f, 1.2f); Plugin.Logger.LogInfo((object)"Tulip snake: Reroll scurry pitch (dismounted player)"); } } [HarmonyPatch(typeof(FlowerSnakeEnemy), "HitEnemy")] [HarmonyPrefix] private static void FlowerSnakeEnemyPreHitEnemy(FlowerSnakeEnemy __instance, bool playHitSFX) { GeneralPatches.playHitSound = playHitSFX && !((EnemyAI)__instance).isEnemyDead; } [HarmonyPatch(typeof(FlowerSnakeEnemy), "KillEnemy")] [HarmonyPostfix] private static void FlowerSnakeEnemyPostKillEnemy(FlowerSnakeEnemy __instance, bool destroy) { if (GeneralPatches.playHitSound) { GeneralPatches.playHitSound = false; if (!destroy && (Object)(object)References.hitEnemyBody != (Object)null) { ((EnemyAI)__instance).creatureSFX.PlayOneShot(References.hitEnemyBody); Plugin.Logger.LogInfo((object)"Tulip snake: Squish"); } } } } } internal sealed class <>z__ReadOnlyArray<T> : IEnumerable, ICollection, IList, IEnumerable<T>, IReadOnlyCollection<T>, IReadOnlyList<T>, ICollection<T>, IList<T> { int ICollection.Count => _items.Length; bool ICollection.IsSynchronized => false; object ICollection.SyncRoot => this; object IList.this[int index] { get { return _items[index]; } set { throw new NotSupportedException(); } } bool IList.IsFixedSize => true; bool IList.IsReadOnly => true; int IReadOnlyCollection<T>.Count => _items.Length; T IReadOnlyList<T>.this[int index] => _items[index]; int ICollection<T>.Count => _items.Length; bool ICollection<T>.IsReadOnly => true; T IList<T>.this[int index] { get { return _items[index]; } set { throw new NotSupportedException(); } } public <>z__ReadOnlyArray(T[] items) { _items = items; } IEnumerator IEnumerable.GetEnumerator() { return ((IEnumerable)_items).GetEnumerator(); } void ICollection.CopyTo(Array array, int index) { ((ICollection)_items).CopyTo(array, index); } int IList.Add(object value) { throw new NotSupportedException(); } void IList.Clear() { throw new NotSupportedException(); } bool IList.Contains(object value) { return ((IList)_items).Contains(value); } int IList.IndexOf(object value) { return ((IList)_items).IndexOf(value); } void IList.Insert(int index, object value) { throw new NotSupportedException(); } void IList.Remove(object value) { throw new NotSupportedException(); } void IList.RemoveAt(int index) { throw new NotSupportedException(); } IEnumerator<T> IEnumerable<T>.GetEnumerator() { return ((IEnumerable<T>)_items).GetEnumerator(); } void ICollection<T>.Add(T item) { throw new NotSupportedException(); } void ICollection<T>.Clear() { throw new NotSupportedException(); } bool ICollection<T>.Contains(T item) { return ((ICollection<T>)_items).Contains(item); } void ICollection<T>.CopyTo(T[] array, int arrayIndex) { ((ICollection<T>)_items).CopyTo(array, arrayIndex); } bool ICollection<T>.Remove(T item) { throw new NotSupportedException(); } int IList<T>.IndexOf(T item) { return ((IList<T>)_items).IndexOf(item); } void IList<T>.Insert(int index, T item) { throw new NotSupportedException(); } void IList<T>.RemoveAt(int index) { throw new NotSupportedException(); } }
BepInEx/plugins/GoAwayModList.dll
Decompiled 3 months agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Reflection.Emit; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using HarmonyLib; using LC_API; using LC_API.GameInterfaceAPI.Features; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("Go Away ModList")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("Go Away ModList")] [assembly: AssemblyCopyright("Copyright © RTPoogle 2024")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("6e7bde11-075e-4589-8140-a0065ee617f8")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { internal IgnoresAccessChecksToAttribute(string assemblyName) { } } } namespace FacilityMeltdownPatch { [BepInPlugin("xyz.poogle.goml", "Go Away ModList", "1.0.1")] [BepInDependency(/*Could not decode attribute arguments.*/)] public class GOMLPlugin : BaseUnityPlugin { public const string GUID = "xyz.poogle.goml"; public const string NAME = "Go Away ModList"; public const string VER = "1.0.1"; public readonly Harmony harmony = new Harmony("xyz.poogle.goml"); public ManualLogSource LogSrc; public static GOMLPlugin Instance; private void Awake() { if ((Object)(object)Instance == (Object)null) { Instance = this; } LogSrc = Logger.CreateLogSource("xyz.poogle.goml"); Patches.InitPatches(); LogSrc.LogInfo((object)"Initialized!"); } } internal class Patches { [HarmonyPatch] public static class CheatDatabase_OtherPlayerCheatDetector_Patch { private static readonly MethodInfo QueueTip = AccessTools.Method(typeof(Player), "QueueTip", (Type[])null, (Type[])null); private static readonly MethodInfo LocalPlayer = AccessTools.PropertyGetter(typeof(Player), "LocalPlayer"); private static readonly MethodInfo Nop_With_Params = CreateDynamicNop(); private static readonly int LookAhead = ((MethodBase)QueueTip).GetParameterTypes().Length + 1; private static MethodInfo CreateDynamicNop() { DynamicMethod dynamicMethod = new DynamicMethod("Nop", null, ((MethodBase)QueueTip).GetParameterTypes(), typeof(Player)); dynamicMethod.GetILGenerator().Emit(OpCodes.Ret); return dynamicMethod; } public static IEnumerable<MethodBase> TargetMethods() { return AccessTools.GetDeclaredMethods(typeof(CheatDatabase)).Cast<MethodBase>(); } private static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions, MethodBase original) { //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Expected O, but got Unknown //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Expected O, but got Unknown GOMLPlugin.Instance.LogSrc.LogInfo((object)("Patching " + original.Name)); List<CodeInstruction> list = new List<CodeInstruction>(instructions); for (int i = 0; i < list.Count - LookAhead; i++) { if (CodeInstructionExtensions.Calls(list[i], LocalPlayer) && CodeInstructionExtensions.Calls(list[i + LookAhead], QueueTip)) { list[i] = new CodeInstruction(OpCodes.Nop, (object)null); list[i + LookAhead] = new CodeInstruction(OpCodes.Callvirt, (object)Nop_With_Params); } } GOMLPlugin.Instance.LogSrc.LogInfo((object)("Patched " + original.Name)); return list; } } internal static void InitPatches() { GOMLPlugin.Instance.harmony.PatchAll(); } } }
BepInEx/plugins/LateCompanyV1.0.17.dll
Decompiled 3 months agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Reflection.Emit; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Logging; using GameNetcodeStuff; using HarmonyLib; using Microsoft.CodeAnalysis; using Unity.Netcode; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETFramework,Version=v4.6", FrameworkDisplayName = ".NET Framework 4.6")] [assembly: AssemblyCompany("LateCompany")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+394f6e913ae93b8bc416d40547f3b1a710f49a92")] [assembly: AssemblyProduct("LateCompany")] [assembly: AssemblyTitle("LateCompany")] [assembly: AssemblyVersion("1.0.0.0")] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace LateCompany { public static class PluginInfo { public const string GUID = "twig.latecompany"; public const string PrintName = "Late Company"; public const string Version = "1.0.17"; } [BepInPlugin("twig.latecompany", "Late Company", "1.0.17")] internal class Plugin : BaseUnityPlugin { public static bool LobbyJoinable = true; public void Awake() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Expected O, but got Unknown Harmony val = new Harmony("twig.latecompany"); val.PatchAll(typeof(Plugin).Assembly); ((BaseUnityPlugin)this).Logger.Log((LogLevel)16, (object)"Late Company loaded!"); } public static void SetLobbyJoinable(bool joinable) { LobbyJoinable = joinable; GameNetworkManager.Instance.SetLobbyJoinable(joinable); QuickMenuManager val = Object.FindObjectOfType<QuickMenuManager>(); if (Object.op_Implicit((Object)(object)val)) { val.inviteFriendsTextAlpha.alpha = (joinable ? 1f : 0.2f); } } } } namespace LateCompany.Patches { [HarmonyPatch(typeof(GameNetworkManager), "LeaveLobbyAtGameStart")] [HarmonyWrapSafe] internal static class LeaveLobbyAtGameStart_Patch { [HarmonyPrefix] private static bool Prefix() { return false; } } [HarmonyPatch(typeof(GameNetworkManager), "ConnectionApproval")] [HarmonyWrapSafe] internal static class ConnectionApproval_Patch { [HarmonyPostfix] private static void Postfix(ref ConnectionApprovalRequest request, ref ConnectionApprovalResponse response) { if (request.ClientNetworkId != NetworkManager.Singleton.LocalClientId && Plugin.LobbyJoinable && response.Reason == "Game has already started!") { response.Reason = ""; response.Approved = true; } } } [HarmonyPatch(typeof(QuickMenuManager), "DisableInviteFriendsButton")] internal static class DisableInviteFriendsButton_Patch { [HarmonyPrefix] private static bool Prefix() { return false; } } [HarmonyPatch(typeof(QuickMenuManager), "InviteFriendsButton")] internal static class InviteFriendsButton_Patch { [HarmonyPrefix] private static bool Prefix() { if (Plugin.LobbyJoinable && !GameNetworkManager.Instance.disableSteam) { GameNetworkManager.Instance.InviteFriendsUI(); } return false; } } [HarmonyPatch(typeof(StartOfRound), "OnPlayerConnectedClientRpc")] [HarmonyWrapSafe] internal static class OnPlayerConnectedClientRpc_Patch { internal static void UpdateControlledState() { for (int i = 0; i < StartOfRound.Instance.connectedPlayersAmount + 1; i++) { if ((i == 0 || !((NetworkBehaviour)StartOfRound.Instance.allPlayerScripts[i]).IsOwnedByServer) && !StartOfRound.Instance.allPlayerScripts[i].isPlayerDead) { StartOfRound.Instance.allPlayerScripts[i].isPlayerControlled = true; } } } [HarmonyTranspiler] private static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions) { //IL_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_00e6: Expected O, but got Unknown List<CodeInstruction> list = new List<CodeInstruction>(); bool flag = false; bool flag2 = false; bool flag3 = false; foreach (CodeInstruction instruction in instructions) { if (!flag3) { if (!flag && instruction.opcode == OpCodes.Call && instruction.operand != null && instruction.operand.ToString() == "System.Collections.IEnumerator setPlayerToSpawnPosition(UnityEngine.Transform, UnityEngine.Vector3)") { flag = true; } else { if (flag && instruction.opcode == OpCodes.Ldc_I4_0) { flag2 = true; continue; } if (flag2 && instruction.opcode == OpCodes.Ldloc_0) { flag2 = false; flag3 = true; list.Add(new CodeInstruction(OpCodes.Call, (object)AccessTools.Method(typeof(OnPlayerConnectedClientRpc_Patch), "UpdateControlledState", new Type[0], (Type[])null))); } } } if (!flag2) { list.Add(instruction); } } if (!flag3) { Debug.LogError((object)"Failed to transpile StartOfRound::OnPlayerConnectedClientRpc"); } return list.AsEnumerable(); } [HarmonyPostfix] private static void Postfix() { if (StartOfRound.Instance.connectedPlayersAmount + 1 >= StartOfRound.Instance.allPlayerScripts.Length) { Plugin.SetLobbyJoinable(joinable: false); } } } [HarmonyPatch(typeof(StartOfRound), "OnPlayerDC")] [HarmonyWrapSafe] internal static class OnPlayerDC_Patch { [HarmonyPostfix] private static void Postfix(int playerObjectNumber) { //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) if (StartOfRound.Instance.inShipPhase) { Plugin.SetLobbyJoinable(joinable: true); } PlayerControllerB val = StartOfRound.Instance.allPlayerScripts[playerObjectNumber]; val.activatingItem = false; val.bleedingHeavily = false; val.clampLooking = false; val.criticallyInjured = false; val.Crouch(false); val.disableInteract = false; val.DisableJetpackControlsLocally(); val.disableLookInput = false; val.disableMoveInput = false; val.DisablePlayerModel(((Component)val).gameObject, true, true); val.disableSyncInAnimation = false; val.externalForceAutoFade = Vector3.zero; val.freeRotationInInteractAnimation = false; val.hasBeenCriticallyInjured = false; val.health = 100; ((Behaviour)val.helmetLight).enabled = false; val.holdingWalkieTalkie = false; val.inAnimationWithEnemy = null; val.inShockingMinigame = false; val.inSpecialInteractAnimation = false; val.inVehicleAnimation = false; val.isClimbingLadder = false; val.isSinking = false; val.isUnderwater = false; Animator mapRadarDotAnimator = val.mapRadarDotAnimator; if (mapRadarDotAnimator != null) { mapRadarDotAnimator.SetBool("dead", false); } Animator playerBodyAnimator = val.playerBodyAnimator; if (playerBodyAnimator != null) { playerBodyAnimator.SetBool("Limp", false); } val.ResetZAndXRotation(); val.sinkingValue = 0f; val.speakingToWalkieTalkie = false; AudioSource statusEffectAudio = val.statusEffectAudio; if (statusEffectAudio != null) { statusEffectAudio.Stop(); } ((Collider)val.thisController).enabled = true; ((Component)val).transform.SetParent(StartOfRound.Instance.playersContainer); val.twoHanded = false; val.voiceMuffledByEnemy = false; } } [HarmonyPatch(typeof(StartOfRound), "SetShipReadyToLand")] internal static class SetShipReadyToLand_Patch { [HarmonyPostfix] private static void Postfix() { if (StartOfRound.Instance.connectedPlayersAmount + 1 < StartOfRound.Instance.allPlayerScripts.Length) { Plugin.SetLobbyJoinable(joinable: true); } } } [HarmonyPatch(typeof(StartOfRound), "StartGame")] internal static class StartGame_Patch { [HarmonyPrefix] private static void Prefix() { Plugin.SetLobbyJoinable(joinable: false); } } }
BepInEx/plugins/LCMaxSoundsFix.dll
Decompiled 3 months agousing System; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using Microsoft.CodeAnalysis; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("LCMaxSoundsFix")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyDescription("Simple mod that increase max number of simultaneous playing sounds, hopefully fixing missing footsteps and other missing sound problems.")] [assembly: AssemblyFileVersion("1.2.0.0")] [assembly: AssemblyInformationalVersion("1.2.0+9a4b27ad682db1b4d7bf4f4f8177235f287bb642")] [assembly: AssemblyProduct("LCMaxSoundsFix")] [assembly: AssemblyTitle("LCMaxSoundsFix")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.2.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace LCMaxSoundFix { public class AcceptableValueListSorted<T> : AcceptableValueList<T> where T : IEquatable<T>, IComparable<T> { public AcceptableValueListSorted(params T[] acceptableValues) : base(acceptableValues) { Array.Sort(((AcceptableValueList<T>)this).AcceptableValues); } public override object Clamp(object value) { if (value is IComparable<T>) { int num = 0; T other = (T)value; for (int i = 0; i < ((AcceptableValueList<T>)this).AcceptableValues.Length; i++) { int num2 = ((AcceptableValueList<T>)this).AcceptableValues[i].CompareTo(other); if (num2 == 0) { num = i; break; } if (num2 < 0) { num = i; } else if (num2 > 0) { if (i == 0) { num = i; } else if (typeof(T) == typeof(int)) { int num3 = Math.Abs(Convert.ToInt32(((AcceptableValueList<T>)this).AcceptableValues[i]) - (int)value); int num4 = Math.Abs(Convert.ToInt32(((AcceptableValueList<T>)this).AcceptableValues[i - 1]) - (int)value); num = ((num3 < num4) ? i : (i - 1)); } break; } } return ((AcceptableValueList<T>)this).AcceptableValues[num]; } return base.Clamp(value); } } internal static class AudioConfig { private static ConfigEntry<int> _numRealVoices = null; private static ConfigEntry<int> _numVirtualVoices = null; private static readonly int[] _validNumVoices = new int[13] { 1, 2, 4, 8, 16, 32, 50, 64, 100, 128, 256, 512, 1024 }; public static void Bind(BaseUnityPlugin plugin) { //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Expected O, but got Unknown //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Expected O, but got Unknown if (plugin == null) { throw new ArgumentNullException("plugin"); } Unbind(); _numRealVoices = plugin.Config.Bind<int>("Audio Settings", "Real Voices", 128, new ConfigDescription("The current maximum number of simultaneously audible sounds in the game. Game default: 40", (AcceptableValueBase)(object)new AcceptableValueListSorted<int>(_validNumVoices), Array.Empty<object>())); _numVirtualVoices = plugin.Config.Bind<int>("Audio Settings", "Virtual Voices", 1024, new ConfigDescription("The maximum number of managed sounds in the game. Beyond this limit sounds will simply stop playing. Game default: 512", (AcceptableValueBase)(object)new AcceptableValueListSorted<int>(_validNumVoices), Array.Empty<object>())); _numRealVoices.SettingChanged += OnSettingChanged; _numVirtualVoices.SettingChanged += OnSettingChanged; ApplyChanges(); } public static void Unbind() { if (_numRealVoices != null) { _numRealVoices.SettingChanged -= OnSettingChanged; ((ConfigEntryBase)_numRealVoices).ConfigFile.Remove(((ConfigEntryBase)_numRealVoices).Definition); _numRealVoices = null; } if (_numVirtualVoices != null) { _numVirtualVoices.SettingChanged -= OnSettingChanged; ((ConfigEntryBase)_numVirtualVoices).ConfigFile.Remove(((ConfigEntryBase)_numVirtualVoices).Definition); _numVirtualVoices = null; } } private static void OnSettingChanged(object sender, EventArgs e) { ApplyChanges(); } private static void ApplyChanges() { //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_003d: Unknown result type (might be due to invalid IL or missing references) ManualLogSource logger = Plugin.Logger; if (logger != null) { logger.LogDebug((object)"Applying audio settings..."); } AudioConfiguration configuration = AudioSettings.GetConfiguration(); configuration.numRealVoices = _numRealVoices.Value; configuration.numVirtualVoices = _numVirtualVoices.Value; AudioSettings.Reset(configuration); ManualLogSource logger2 = Plugin.Logger; if (logger2 != null) { logger2.LogInfo((object)$"Audio settings (numRealVoices={_numRealVoices.Value}; numVirtualVoices={_numVirtualVoices.Value}) are applied."); } } } [BepInPlugin(".LCMaxSoundsFix", "LCMaxSoundsFix", "1.2.0")] internal class Plugin : BaseUnityPlugin { internal static ManualLogSource Logger { get; private set; } protected Plugin() { Logger = ((BaseUnityPlugin)this).Logger; } protected void Awake() { ManualLogSource logger = Logger; if (logger != null) { logger.LogInfo((object)"Plugin LCMaxSoundsFix is loaded!"); } ManualLogSource logger2 = Logger; if (logger2 != null) { logger2.LogDebug((object)"Binding audio config..."); } AudioConfig.Bind((BaseUnityPlugin)(object)this); } } public static class PluginInfo { public const string PLUGIN_GUID = "LCMaxSoundsFix"; public const string PLUGIN_NAME = "LCMaxSoundsFix"; public const string PLUGIN_VERSION = "1.2.0"; } }
BepInEx/plugins/LethalPerformance/LethalPerformance.dll
Decompiled 3 months agousing System; using System.Buffers.Binary; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Reflection.Emit; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using Dissonance; using GameNetcodeStuff; using HarmonyLib; using HarmonyLib.Tools; using LethalPerformance.API; using LethalPerformance.Configuration; using LethalPerformance.Extensions; using LethalPerformance.Patcher; using LethalPerformance.Unity; using LethalPerformance.Utilities; using Microsoft.CodeAnalysis; using NAudio.Wave; using TMPro; using Unity.Burst.LowLevel; using Unity.Mathematics; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.InputSystem; using UnityEngine.Rendering; using UnityEngine.Rendering.HighDefinition; using UnityEngine.SceneManagement; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: IgnoresAccessChecksTo("DissonanceVoip")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Runtime")] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("LethalPerformance")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("0.3.4.0")] [assembly: AssemblyInformationalVersion("0.3.4+bb14b4e14435bdf21208f30735df1497be8f9ff6")] [assembly: AssemblyProduct("LethalPerformance")] [assembly: AssemblyTitle("LethalPerformance")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.3.4.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace LethalPerformance { internal static class Dependencies { public const string MoreCompany = "me.swipez.melonloader.morecompany"; public const string Loadstone = "com.adibtw.loadstone"; public const string MoreSuits = "x753.More_Suits"; public const string LethalCompanyVR = "io.daxcess.lcvr"; public static bool IsModLoaded(string id) { return Chainloader.PluginInfos.ContainsKey(id); } } [BepInPlugin("LethalPerformance", "LethalPerformance", "0.3.4")] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] public class LethalPerformancePlugin : BaseUnityPlugin { public static LethalPerformancePlugin Instance { get; private set; } internal ManualLogSource Logger { get; private set; } internal string WorkingDirectory { get; private set; } internal ConfigManager Configuration { get; private set; } internal Harmony? Harmony { get; private set; } private void Awake() { Instance = this; Logger = ((BaseUnityPlugin)this).Logger; WorkingDirectory = new FileInfo(((BaseUnityPlugin)this).Info.Location).DirectoryName; Configuration = new ConfigManager(((BaseUnityPlugin)this).Config); LoadGameBurstLib(); CallInitializeOnAwake(); InitializeHarmony(); InitializeSaveScheduler(); } private void InitializeSaveScheduler() { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Expected O, but got Unknown GameObject val = new GameObject("Lethal Performance Configuration Scheduler", new Type[1] { typeof(SaveScheduleComponent) }); ((Object)val).hideFlags = (HideFlags)61; Object.DontDestroyOnLoad((Object)(object)val); } private void InitializeHarmony() { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //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) //IL_0008: 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_0021: Expected O, but got Unknown //IL_004c: Unknown result type (might be due to invalid IL or missing references) LogChannel channelFilter = Logger.ChannelFilter; if ((channelFilter & 4) == 0) { Logger.ChannelFilter = (LogChannel)0; } Harmony = new Harmony("LethalPerformance"); try { Harmony.PatchAll(typeof(LethalPerformancePlugin).Assembly); } catch (Exception ex) { Logger.LogError((object)ex); } Logger.ChannelFilter = channelFilter; } private void CallInitializeOnAwake() { foreach (MethodInfo item in from m in typeof(LethalPerformancePlugin).Assembly.GetTypes().SelectMany((Type t) => t.GetMethods(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic)) where m.GetCustomAttribute<InitializeOnAwakeAttribute>() != null select m) { item.Invoke(null, null); Logger.LogInfo((object)("Initialized " + GeneralExtensions.FullDescription((MethodBase)item))); } } private void LoadGameBurstLib() { string text = Path.Combine(WorkingDirectory, "lib_burst_generated.data"); if (!File.Exists(text)) { Logger.LogFatal((object)"Failed to find \"lib_burst_generated.data\""); } else if (!BurstCompilerService.LoadBurstLibrary(text)) { Logger.LogFatal((object)"Failed to load burst library. Probably machine architecture is not x64 or CPU doesn't support AVX2 and SSE2 instructions"); } } } internal sealed class SaveScheduleComponent : MonoBehaviour { public void LateUpdate() { LethalPerformancePatcher.ConfigSaverTask.ScheduleSave(); } public void OnDisable() { LethalPerformancePatcher.ConfigSaverTask.Save(); } } public static class MyPluginInfo { public const string PLUGIN_GUID = "LethalPerformance"; public const string PLUGIN_NAME = "LethalPerformance"; public const string PLUGIN_VERSION = "0.3.4"; } } namespace LethalPerformance.Utilities { internal static class HDRenderPipelineAssetOptimizer { [InitializeOnAwake] public static void Initialize() { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown //IL_000c: 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_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) HDRenderPipelineAsset val = (HDRenderPipelineAsset)GraphicsSettings.currentRenderPipeline; RenderPipelineSettings currentPlatformRenderPipelineSettings = val.currentPlatformRenderPipelineSettings; currentPlatformRenderPipelineSettings.lightLoopSettings.reflectionProbeTexCacheSize = LethalPerformancePlugin.Instance.Configuration.ReflectionProbeCacheResolution.Value; currentPlatformRenderPipelineSettings.lightLoopSettings.cookieAtlasSize = (CookieAtlasResolution)LethalPerformancePlugin.Instance.Configuration.CookieAtlasResolution.Value; currentPlatformRenderPipelineSettings.hdShadowInitParams.cachedAreaLightShadowAtlas = 8192; currentPlatformRenderPipelineSettings.hdShadowInitParams.cachedPunctualLightShadowAtlas = 8192; currentPlatformRenderPipelineSettings.hdShadowInitParams.allowDirectionalMixedCachedShadows = true; val.currentPlatformRenderPipelineSettings = currentPlatformRenderPipelineSettings; HDRenderPipelineGlobalSettings instance = HDRenderPipelineGlobalSettings.instance; ref FrameSettings defaultFrameSettings = ref instance.GetDefaultFrameSettings((FrameSettingsRenderType)0); ((BitArray128)(ref defaultFrameSettings.bitDatas))[80u] = false; ((BitArray128)(ref defaultFrameSettings.bitDatas))[1u] = true; ((BitArray128)(ref defaultFrameSettings.bitDatas))[5u] = true; ((BitArray128)(ref defaultFrameSettings.bitDatas))[22u] = false; LethalPerformancePlugin.Instance.Logger.LogInfo((object)"Disabled StopNan and enabled DepthPrepassWithDeferredRendering globally"); } } internal class OpenLogsFolderKeybind { private static InputActionAsset? s_InputActions; [InitializeOnAwake] private static void Initialize() { //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_005f: 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_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) InputActionAsset val = (s_InputActions = ScriptableObject.CreateInstance<InputActionAsset>()); ((Object)val).name = "LethalPerformance Input Asset"; ((Object)val).hideFlags = (HideFlags)61; Object.DontDestroyOnLoad((Object)(object)val); InputActionMap val2 = InputActionSetupExtensions.AddActionMap(val, "LPActionMap"); InputAction val3 = InputActionSetupExtensions.AddAction(val2, "General", (InputActionType)1, (string)null, (string)null, (string)null, (string)null, (string)null); CompositeSyntax val4 = InputActionSetupExtensions.AddCompositeBinding(val3, "TwoModifiers", (string)null, (string)null); val4 = ((CompositeSyntax)(ref val4)).With("Binding", "<Keyboard>/l", (string)null, (string)null); val4 = ((CompositeSyntax)(ref val4)).With("Modifier1", "<Keyboard>/ctrl", (string)null, (string)null); ((CompositeSyntax)(ref val4)).With("Modifier2", "<Keyboard>/shift", (string)null, (string)null); val3.performed += OnOpenLogsPressed; SceneManager.activeSceneChanged += SceneManager_activeSceneChanged; } private static void SceneManager_activeSceneChanged(Scene arg0, Scene arg1) { SceneManager.activeSceneChanged -= SceneManager_activeSceneChanged; if ((Object)(object)s_InputActions != (Object)null) { s_InputActions.Enable(); } } private static void OnOpenLogsPressed(CallbackContext obj) { if (!((Object)(object)GameNetworkManager.Instance != (Object)null) || !((Object)(object)GameNetworkManager.Instance.localPlayerController != (Object)null) || !GameNetworkManager.Instance.localPlayerController.isTypingChat) { Application.OpenURL("\"" + Application.persistentDataPath + "\""); } } } internal static class SceneUtilities { public static bool IsSceneShip(this Scene scene) { return ((Scene)(ref scene)).name == "SampleSceneRelay"; } } internal abstract class UnsafeCachedInstance { public static List<UnsafeCachedInstance> UnsafeCachedInstances { get; private set; } = new List<UnsafeCachedInstance>(); public abstract void SaveInstance(); public abstract void Cleanup(); } internal sealed class UnsafeCachedInstance<T> : UnsafeCachedInstance where T : MonoBehaviour { private readonly string m_HierarchyPath; public T? Instance { get; set; } public UnsafeCachedInstance(string hierarchyPath) { m_HierarchyPath = hierarchyPath; Instance = default(T); UnsafeCachedInstance.UnsafeCachedInstances.Add(this); } public override void SaveInstance() { GameObject val = GameObject.Find(m_HierarchyPath); if ((Object)(object)val != (Object)null) { T instance = default(T); if (val.TryGetComponent<T>(ref instance)) { Instance = instance; } else { LethalPerformancePlugin.Instance.Logger.LogWarning((object)("Failed to cache instance of " + typeof(T).Name)); } } else { LethalPerformancePlugin.Instance.Logger.LogWarning((object)("Failed to find gameobject of " + typeof(T).Name)); } } public (bool, MonoBehaviour?) TryGetInstance(FindObjectsInactive findObjectsInactive) { //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Invalid comparison between Unknown and I4 if ((Object)(object)Instance == (Object)null) { return (false, null); } if ((int)findObjectsInactive == 1) { return (true, (MonoBehaviour)(object)Instance); } if (((Behaviour)(object)Instance).enabled && ((Component)(object)Instance).gameObject.activeInHierarchy) { return (true, (MonoBehaviour)(object)Instance); } return (true, null); } public override void Cleanup() { Instance = default(T); } } internal static class UnsafeCacheManager { private delegate(bool, MonoBehaviour?) TryGetInstance(FindObjectsInactive findObjectsInactive); private static readonly Dictionary<Type, TryGetInstance> s_MapGettingInstance; static UnsafeCacheManager() { s_MapGettingInstance = new Dictionary<Type, TryGetInstance> { [typeof(StartOfRound)] = (FindObjectsInactive _) => (Object.op_Implicit((Object)(object)StartOfRound.Instance), (MonoBehaviour)(object)StartOfRound.Instance), [typeof(GameNetworkManager)] = (FindObjectsInactive _) => (true, (MonoBehaviour)(object)GameNetworkManager.Instance), [typeof(HUDManager)] = (FindObjectsInactive _) => (Object.op_Implicit((Object)(object)HUDManager.Instance), (MonoBehaviour)(object)HUDManager.Instance), [typeof(GlobalEffects)] = (FindObjectsInactive _) => (Object.op_Implicit((Object)(object)GlobalEffects.Instance), (MonoBehaviour)(object)GlobalEffects.Instance), [typeof(IngamePlayerSettings)] = (FindObjectsInactive _) => (true, (MonoBehaviour)(object)IngamePlayerSettings.Instance), [typeof(SteamManager)] = (FindObjectsInactive _) => (true, (MonoBehaviour)(object)SteamManager.Instance), [typeof(DissonanceComms)] = (FindObjectsInactive _) => ((Object)(object)StartOfRound.Instance != (Object)null && (Object)(object)StartOfRound.Instance.voiceChatModule != (Object)null) ? (true, (MonoBehaviour)(object)StartOfRound.Instance.voiceChatModule) : (false, null), [typeof(QuickMenuManager)] = delegate(FindObjectsInactive findObjectInactive) { //IL_004e: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)GameNetworkManager.Instance == (Object)null || (Object)(object)GameNetworkManager.Instance.localPlayerController == (Object)null || (Object)(object)GameNetworkManager.Instance.localPlayerController.quickMenuManager == (Object)null) { return (false, null); } QuickMenuManager quickMenuManager = GameNetworkManager.Instance.localPlayerController.quickMenuManager; return ((int)findObjectInactive == 0 && !((Behaviour)quickMenuManager).isActiveAndEnabled) ? (true, null) : (true, (MonoBehaviour)(object)quickMenuManager); } }; AddReference<RoundManager>("/Systems/GameSystems/RoundManager"); AddReference<QuickMenuManager>("/Systems/GameSystems/QuickMenuManager"); AddReference<TimeOfDay>("/Systems/GameSystems/TimeAndWeather"); AddReference<SoundManager>("/Systems/GameSystems/SoundManager"); AddReference<ShipBuildModeManager>("/Systems/GameSystems/ShipBuildMode"); AddReference<MoldSpreadManager>("/Systems/GameSystems/Misc/MoldSpread"); AddReference<Terminal>("/Environment/HangarShip/Terminal/TerminalTrigger/TerminalScript"); AddReference<StartMatchLever>("/Environment/HangarShip/StartGameLever"); AddReference<HangarShipDoor>("/Environment/HangarShip/AnimatedShipDoor"); AddReference<StormyWeather>("/Systems/GameSystems/TimeAndWeather/Stormy"); } private static void AddReference<T>(string hierarchyPath) where T : MonoBehaviour { UnsafeCachedInstance<T> @object = new UnsafeCachedInstance<T>(hierarchyPath); s_MapGettingInstance[typeof(T)] = @object.TryGetInstance; } public static void CacheInstances() { foreach (UnsafeCachedInstance unsafeCachedInstance in UnsafeCachedInstance.UnsafeCachedInstances) { unsafeCachedInstance.SaveInstance(); } } public static bool TryGetCachedReference(Type type, FindObjectsInactive findObjectsInactive, out Object? cache) { //IL_0010: Unknown result type (might be due to invalid IL or missing references) if (s_MapGettingInstance.TryGetValue(type, out TryGetInstance value)) { (bool, MonoBehaviour?) tuple = value(findObjectsInactive); Behaviour item = (Behaviour)(object)tuple.Item2; bool item2 = tuple.Item1; Behaviour val = item; if (item2) { cache = (Object?)(object)val; return true; } } cache = null; return false; } public static void CleanupCache() { foreach (UnsafeCachedInstance unsafeCachedInstance in UnsafeCachedInstance.UnsafeCachedInstances) { unsafeCachedInstance.Cleanup(); } } } } namespace LethalPerformance.Patches { [HarmonyPatch(typeof(AudioReverbTrigger), "OnTriggerStay")] internal static class Patch_AudioReverbTrigger { [HarmonyCleanup] public static Exception? Cleanup(Exception exception) { return HarmonyExceptionHandler.ReportException(exception); } [HarmonyTranspiler] public static IEnumerable<CodeInstruction> FixTagAllocation(IEnumerable<CodeInstruction> instructions) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Expected O, but got Unknown //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Expected O, but got Unknown //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Expected O, but got Unknown CodeMatcher val = new CodeMatcher(instructions, (ILGenerator)null); MethodInfo getMethod = typeof(GameObject).GetProperty("tag", AccessTools.all).GetMethod; val.MatchForward(false, (CodeMatch[])(object)new CodeMatch[3] { new CodeMatch((OpCode?)OpCodes.Callvirt, (object)getMethod, (string)null), new CodeMatch((OpCode?)OpCodes.Ldstr, (object)null, (string)null), new CodeMatch((OpCode?)OpCodes.Callvirt, (object)null, (string)null) }).RemoveInstructions(3).Insert((CodeInstruction[])(object)new CodeInstruction[1] { CodeInstruction.Call<GameObject, bool>((Expression<Func<GameObject, bool>>)((GameObject x) => ObjectExtensions.ComparePlayerRagdollTag(x))) }); return val.InstructionEnumeration(); } } [HarmonyPatch(typeof(HangarShipDoor))] internal static class Patch_HangarShipDoor { [HarmonyCleanup] public static Exception? Cleanup(Exception exception) { return HarmonyExceptionHandler.ReportException(exception); } [HarmonyPatch("Update")] [HarmonyTranspiler] public static IEnumerable<CodeInstruction> FixFormatAllocation(IEnumerable<CodeInstruction> instructions) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Expected O, but got Unknown //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Expected O, but got Unknown //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Expected O, but got Unknown CodeMatcher val = new CodeMatcher(instructions, (ILGenerator)null); val.MatchForward(false, (CodeMatch[])(object)new CodeMatch[3] { new CodeMatch((OpCode?)OpCodes.Box, (object)null, (string)null), new CodeMatch((OpCode?)OpCodes.Call, (object)null, (string)null), new CodeMatch((OpCode?)OpCodes.Callvirt, (object)null, (string)null) }).SetInstructionAndAdvance(new CodeInstruction(OpCodes.Conv_R4, (object)null)).RemoveInstruction() .Set(OpCodes.Call, (object)typeof(TMP_Text).GetMethod("SetText", new Type[2] { typeof(string), typeof(float) })); return val.InstructionEnumeration(); } } [HarmonyPatch(typeof(HDAdditionalCameraData))] internal static class Patch_HDAdditionalCameraData { [HarmonyPatch("RegisterDebug")] [HarmonyPrefix] public static bool DisableRegisteringDebugData() { return false; } } [HarmonyPatch(typeof(HDCamera))] internal static class Patch_HDCamera { [HarmonyCleanup] public static Exception? Cleanup(Exception exception) { return HarmonyExceptionHandler.ReportException(exception); } [HarmonyPrefix] [HarmonyPatch("UpdateShaderVariablesXRCB")] public unsafe static bool Prefix(HDCamera __instance, ref ShaderVariablesXR cb) { fixed (ShaderVariablesXR* ptr = &cb) { void* ptr2 = ptr; fixed (ViewConstants* ptr3 = __instance.m_XRViewConstants) { void* ptr4 = ptr3; ReadableViewConstants* ptr5 = (ReadableViewConstants*)ptr4; int viewCount = __instance.viewCount; Testing.Test(ref ptr5, ref viewCount, (ReadableShaderVariablesXR*)ptr2); return false; } } } [HarmonyPrefix] [HarmonyPatch(/*Could not decode attribute arguments.*/)] public unsafe static bool UpdateShaderVariablesGlobalCB(HDCamera __instance, ref ShaderVariablesGlobal cb, int frameCount) { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0039: 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_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0049: 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) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_0146: Unknown result type (might be due to invalid IL or missing references) //IL_0126: Unknown result type (might be due to invalid IL or missing references) //IL_012b: Unknown result type (might be due to invalid IL or missing references) //IL_014b: Unknown result type (might be due to invalid IL or missing references) //IL_0163: Unknown result type (might be due to invalid IL or missing references) //IL_0157: Unknown result type (might be due to invalid IL or missing references) //IL_015c: Unknown result type (might be due to invalid IL or missing references) //IL_0168: Unknown result type (might be due to invalid IL or missing references) //IL_016c: Unknown result type (might be due to invalid IL or missing references) //IL_0171: Unknown result type (might be due to invalid IL or missing references) //IL_0176: Unknown result type (might be due to invalid IL or missing references) //IL_017b: Unknown result type (might be due to invalid IL or missing references) //IL_0185: Unknown result type (might be due to invalid IL or missing references) //IL_018a: Unknown result type (might be due to invalid IL or missing references) fixed (ShaderVariablesGlobal* ptr = &cb) { void* ptr2 = ptr; fixed (ViewConstants* ptr3 = &__instance.mainViewConstants) { void* ptr4 = ptr3; fixed (Vector4* ptr5 = __instance.frustumPlaneEquations) { void* ptr6 = ptr5; float4x4 val = default(float4x4); ((float4x4)(ref val))..ctor(float4.op_Implicit(__instance.screenSize), float4.op_Implicit(__instance.postProcessScreenSize), float4.op_Implicit(RTHandles.rtHandleProperties.rtHandleScale), float4.op_Implicit(__instance.m_HistoryRTSystem.rtHandleProperties.rtHandleScale)); float4x4 val2 = default(float4x4); ((float4x4)(ref val2))..ctor(float4.op_Implicit(__instance.m_PostProcessRTScales), float4.op_Implicit(__instance.m_PostProcessRTScalesHistory), new float4((float)__instance.actualWidth, ((Rect)(ref __instance.finalViewport)).width, (float)__instance.actualHeight, ((Rect)(ref __instance.finalViewport)).height), float4.op_Implicit(__instance.zBufferParams)); float4x4 val3 = default(float4x4); ((float4x4)(ref val3))..ctor(float4.op_Implicit(__instance.projectionParams), float4.op_Implicit(__instance.unity_OrthoParams), float4.op_Implicit(__instance.screenParams), float4.op_Implicit(__instance.taaJitter)); bool flag = (Object)(object)__instance.m_AdditionalCameraData == (Object)null; float num = (flag ? 1f : __instance.m_AdditionalCameraData.deExposureMultiplier); float4 val4 = (float4)(flag ? new float4(1f, 1f, 0f, 0f) : float4.op_Implicit(__instance.m_AdditionalCameraData.screenCoordScaleBias)); float4 val5 = (flag ? float4.zero : float4.op_Implicit(__instance.m_AdditionalCameraData.screenSizeOverride)); FrameSettings frameSettings = __instance.frameSettings; AntialiasingMode antialiasing = __instance.antialiasing; CameraType cameraType = __instance.camera.cameraType; ReadableViewConstants* ptr7 = (ReadableViewConstants*)ptr4; float4* ptr8 = (float4*)ptr6; ref float taaSharpenStrength = ref __instance.taaSharpenStrength; ref int taaFrameIndex = ref __instance.taaFrameIndex; ref int colorPyramidHistoryMipCount = ref __instance.colorPyramidHistoryMipCount; float globalMipBias = __instance.globalMipBias; ref float time = ref __instance.time; ref float lastTime = ref __instance.lastTime; int viewCount = __instance.viewCount; float probeRangeCompressionFactor = __instance.probeRangeCompressionFactor; bool flag2 = !flag; Testing.UpdateShaderVariablesGlobalCB((ReadableShaderVariablesGlobal*)ptr2, ref frameSettings, ref antialiasing, ref cameraType, ref ptr7, ref val, ref val2, ref val3, ref ptr8, ref taaSharpenStrength, ref taaFrameIndex, ref colorPyramidHistoryMipCount, ref globalMipBias, ref time, ref lastTime, ref frameCount, ref viewCount, ref probeRangeCompressionFactor, ref num, ref val4, ref flag2, ref val5); return false; } } } } } [HarmonyPatch(typeof(HDRenderPipeline))] internal static class Patch_HDRenderPipeline { [HarmonyPrepare] public static bool ShouldPatch() { return LethalPerformancePlugin.Instance.Configuration.PatchHDRenderPipeline.Value; } [HarmonyCleanup] public static Exception? Cleanup(Exception exception) { return HarmonyExceptionHandler.ReportException(exception); } [HarmonyPatch("PushCameraGlobalMipBiasPass")] [HarmonyTranspiler] public static IEnumerable<CodeInstruction> DisablePushCameraGlobalMipBiasPass(IEnumerable<CodeInstruction> _) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Expected O, but got Unknown return new <>z__ReadOnlySingleElementList<CodeInstruction>(new CodeInstruction(OpCodes.Ret, (object)null)); } } [HarmonyPatch(typeof(PlayerControllerB))] internal static class Patch_PlayerControllerB { [HarmonyCleanup] public static Exception? Cleanup(Exception exception) { return HarmonyExceptionHandler.ReportException(exception); } [HarmonyPrefix] [HarmonyPatch("ShowNameBillboard")] public static bool FixLocalBillBoardIsEnabling(PlayerControllerB __instance, bool __runOriginal) { if (!__runOriginal) { return __runOriginal; } bool flag = (Object)(object)__instance == (Object)(object)StartOfRound.Instance.localPlayerController; return !flag; } } [HarmonyPatch(typeof(StartOfRound))] internal static class Patch_StartOfRound { [HarmonyCleanup] public static Exception? Cleanup(Exception exception) { return HarmonyExceptionHandler.ReportException(exception); } [HarmonyPatch("SetPlayerSafeInShip")] [HarmonyTranspiler] public static IEnumerable<CodeInstruction> ReplaceFindOfObjectOfType(IEnumerable<CodeInstruction> instructions, ILGenerator generator) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Expected O, but got Unknown //IL_010e: Unknown result type (might be due to invalid IL or missing references) //IL_0114: Expected O, but got Unknown //IL_011d: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Expected O, but got Unknown //IL_013c: Unknown result type (might be due to invalid IL or missing references) //IL_0142: Expected O, but got Unknown //IL_014a: Unknown result type (might be due to invalid IL or missing references) //IL_0150: Expected O, but got Unknown //IL_0159: Unknown result type (might be due to invalid IL or missing references) //IL_015f: Expected O, but got Unknown //IL_016c: Unknown result type (might be due to invalid IL or missing references) //IL_0172: Expected O, but got Unknown //IL_018e: Unknown result type (might be due to invalid IL or missing references) //IL_0194: Expected O, but got Unknown //IL_01a2: Unknown result type (might be due to invalid IL or missing references) //IL_01a8: Expected O, but got Unknown CodeMatcher val = new CodeMatcher(instructions, (ILGenerator)null); LocalBuilder countLocal = generator.DeclareLocal(typeof(int), pinned: false); MethodInfo findObjectOfTypeMethod = typeof(Object).GetMethod("FindObjectsOfType", 1, AccessTools.all, null, CallingConventions.Any, Array.Empty<Type>(), Array.Empty<ParameterModifier>()).MakeGenericMethod(typeof(EnemyAI)); MethodInfo getMethod = typeof(RoundManager).GetProperty("Instance", AccessTools.all).GetGetMethod(); FieldInfo field = typeof(RoundManager).GetField("SpawnedEnemies", AccessTools.all); FieldInfo field2 = typeof(List<EnemyAI>).GetField("_items", AccessTools.all); MethodInfo getMethod2 = typeof(List<EnemyAI>).GetProperty("Count", AccessTools.all).GetGetMethod(); val.SearchForward((Func<CodeInstruction, bool>)((CodeInstruction c) => CodeInstructionExtensions.Calls(c, findObjectOfTypeMethod))).Set(OpCodes.Call, (object)getMethod).Advance(1) .InsertAndAdvance((CodeInstruction[])(object)new CodeInstruction[2] { new CodeInstruction(OpCodes.Ldfld, (object)field), new CodeInstruction(OpCodes.Ldfld, (object)field2) }) .Advance(1) .InsertAndAdvance((CodeInstruction[])(object)new CodeInstruction[4] { new CodeInstruction(OpCodes.Call, (object)getMethod), new CodeInstruction(OpCodes.Ldfld, (object)field), new CodeInstruction(OpCodes.Callvirt, (object)getMethod2), new CodeInstruction(OpCodes.Stloc, (object)countLocal) }); val.MatchForward(false, (CodeMatch[])(object)new CodeMatch[2] { new CodeMatch((OpCode?)OpCodes.Ldloc_1, (object)null, (string)null), new CodeMatch((OpCode?)OpCodes.Ldlen, (object)null, (string)null) }).Repeat((Action<CodeMatcher>)delegate(CodeMatcher m) { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Expected O, but got Unknown m.RemoveInstructions(2).InsertAndAdvance((CodeInstruction[])(object)new CodeInstruction[1] { new CodeInstruction(OpCodes.Ldloc, (object)countLocal) }); }, (Action<string>)null); return val.InstructionEnumeration(); } } [HarmonyPatch(typeof(TimeOfDay))] [HarmonyPriority(0)] internal static class Patch_TimeOfDay { [HarmonyPatch("Start")] [HarmonyPostfix] public static void FixParticleSubEmitters(TimeOfDay __instance) { //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003b: 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_0066: Unknown result type (might be due to invalid IL or missing references) WeatherEffect[] effects = __instance.effects; foreach (WeatherEffect val in effects) { if (val == null || (Object)(object)val.effectObject == (Object)null) { continue; } ParticleSystem componentInChildren = val.effectObject.GetComponentInChildren<ParticleSystem>(); if ((Object)(object)componentInChildren == (Object)null) { continue; } SubEmittersModule subEmitters = componentInChildren.subEmitters; if (((SubEmittersModule)(ref subEmitters)).enabled) { int subEmittersCount = ((SubEmittersModule)(ref subEmitters)).subEmittersCount; for (int j = 0; j < subEmittersCount; j++) { ParticleSystem subEmitterSystem = ((SubEmittersModule)(ref subEmitters)).GetSubEmitterSystem(j); MainModule main = subEmitterSystem.main; ((MainModule)(ref main)).stopAction = (ParticleSystemStopAction)0; } } } } } [HarmonyPatch] internal static class Patch_WaveFileWriter { private static readonly byte[] s_RIFF = "RIFF"u8.ToArray(); private static readonly byte[] s_WAVE = "WAVE"u8.ToArray(); private static readonly byte[] s_Fmt = "fmt "u8.ToArray(); private static readonly byte[] s_Data = "data"u8.ToArray(); private static readonly byte[] s_Fact = "fact"u8.ToArray(); private static readonly Dictionary<string, FieldInfo> s_StringToFieldMapping = new Dictionary<string, FieldInfo> { ["RIFF"] = typeof(Patch_WaveFileWriter).GetField("s_RIFF", AccessTools.all), ["WAVE"] = typeof(Patch_WaveFileWriter).GetField("s_WAVE", AccessTools.all), ["fmt "] = typeof(Patch_WaveFileWriter).GetField("s_Fmt", AccessTools.all), ["data"] = typeof(Patch_WaveFileWriter).GetField("s_Data", AccessTools.all), ["fact"] = typeof(Patch_WaveFileWriter).GetField("s_Fact", AccessTools.all) }; [HarmonyCleanup] public static Exception? Cleanup(Exception exception) { return HarmonyExceptionHandler.ReportException(exception); } [HarmonyPatch(/*Could not decode attribute arguments.*/)] [HarmonyPatch(typeof(WaveFileWriter), "WriteDataChunkHeader")] [HarmonyPatch(typeof(WaveFileWriter), "CreateFactChunk")] [HarmonyTranspiler] private static IEnumerable<CodeInstruction> ReplaceASCIICallToStaticField(IEnumerable<CodeInstruction> instructions) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Expected O, but got Unknown //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Expected O, but got Unknown CodeMatcher val = new CodeMatcher(instructions, (ILGenerator)null); val.MatchForward(false, (CodeMatch[])(object)new CodeMatch[3] { new CodeMatch((OpCode?)OpCodes.Call, (object)null, (string)null), new CodeMatch((OpCode?)OpCodes.Ldstr, (object)null, (string)null), new CodeMatch((OpCode?)OpCodes.Callvirt, (object)null, (string)null) }).Repeat((Action<CodeMatcher>)delegate(CodeMatcher m) { //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Expected O, but got Unknown string key = (string)m.InstructionAt(1).operand; FieldInfo fieldInfo = s_StringToFieldMapping[key]; m.RemoveInstructions(3).Insert((CodeInstruction[])(object)new CodeInstruction[1] { new CodeInstruction(OpCodes.Ldsfld, (object)fieldInfo) }); }, (Action<string>)null); return val.InstructionEnumeration(); } [HarmonyPatch(typeof(WaveFileWriter), "WriteSamples")] [HarmonyTranspiler] private static IEnumerable<CodeInstruction> FixWriterFloatAllocation(IEnumerable<CodeInstruction> _) { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Expected O, but got Unknown //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Expected O, but got Unknown //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Expected O, but got Unknown //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Expected O, but got Unknown //IL_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Expected O, but got Unknown return new <>z__ReadOnlyArray<CodeInstruction>((CodeInstruction[])(object)new CodeInstruction[6] { new CodeInstruction(OpCodes.Ldarg_0, (object)null), new CodeInstruction(OpCodes.Ldarg_1, (object)null), new CodeInstruction(OpCodes.Ldarg_2, (object)null), new CodeInstruction(OpCodes.Ldarg_3, (object)null), CodeInstruction.Call((LambdaExpression)(Expression<Action<WaveFileWriter, float[], int>>)((WaveFileWriter x, float[] y, int _) => WriteSamples(x, y, _, _))), new CodeInstruction(OpCodes.Ret, (object)null) }); } private static void WriteSamples(WaveFileWriter waveFileWriter, float[] samples, int offset, int count) { Span<byte> span = stackalloc byte[4]; for (int i = 0; i < count; i++) { BinaryPrimitivesExtension.WriteSingleLittleEndian(span, samples[offset + i]); waveFileWriter._outStream.Write(span); waveFileWriter._dataChunkSize += 4; } } } } namespace LethalPerformance.Patches.ReferenceHolder { [HarmonyPatch(typeof(EventSystem))] internal static class Patch_EventSystem { [HarmonyPatch("OnEnable")] [HarmonyPrefix] public static void FindReferences(EventSystem __instance) { //IL_0006: 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_000c: Unknown result type (might be due to invalid IL or missing references) Scene scene = ((Component)__instance).gameObject.scene; if (!scene.IsSceneShip()) { return; } try { UnsafeCacheManager.CacheInstances(); DeleteUnusedStuff(); } catch (Exception arg) { LethalPerformancePlugin.Instance.Logger.LogWarning((object)$"Failed to get references. Probably other mod destroyed object.\n{arg}"); } } [HarmonyPatch("OnDisable")] [HarmonyPrefix] public static void CleanReferences(EventSystem __instance) { //IL_0006: 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_000c: Unknown result type (might be due to invalid IL or missing references) Scene scene = ((Component)__instance).gameObject.scene; if (!scene.IsSceneShip()) { return; } LethalPerformancePlugin.Instance.Logger.LogInfo((object)"Cleanup references"); try { UnsafeCacheManager.CleanupCache(); } catch (Exception arg) { LethalPerformancePlugin.Instance.Logger.LogWarning((object)$"Failed to clean references.\n{arg}"); } } private static void DeleteUnusedStuff() { //IL_002b: 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) GameObject val = GameObject.Find("/PlayersContainer"); if ((Object)(object)val == (Object)null) { LethalPerformancePlugin.Instance.Logger.LogWarning((object)"Failed to find Player container"); return; } List<PlayerControllerB> list = default(List<PlayerControllerB>); PooledObject<List<PlayerControllerB>> val2 = ListPool<PlayerControllerB>.Get(ref list); try { val.GetComponentsInChildren<PlayerControllerB>(list); CanvasScaler val3 = default(CanvasScaler); GraphicRaycaster val4 = default(GraphicRaycaster); foreach (PlayerControllerB item in list) { if (((Component)item.usernameCanvas).TryGetComponent<CanvasScaler>(ref val3)) { Object.Destroy((Object)(object)val3); LethalPerformancePlugin.Instance.Logger.LogInfo((object)"Destroyed Username CanvasScaler"); } if (((Component)item.usernameCanvas).TryGetComponent<GraphicRaycaster>(ref val4)) { Object.Destroy((Object)(object)val4); LethalPerformancePlugin.Instance.Logger.LogInfo((object)"Destroyed Username GraphicRaycaster"); } } val = GameObject.Find("/Systems/GameSystems/ItemSystems/MapScreenUIWorldSpace"); if ((Object)(object)val != (Object)null) { GraphicRaycaster val5 = default(GraphicRaycaster); if (val.TryGetComponent<GraphicRaycaster>(ref val5)) { Object.Destroy((Object)(object)val5); LethalPerformancePlugin.Instance.Logger.LogInfo((object)"Destroyed GraphicRaycaster of map screen"); } CanvasScaler val6 = default(CanvasScaler); if (val.TryGetComponent<CanvasScaler>(ref val6)) { Object.Destroy((Object)(object)val6); LethalPerformancePlugin.Instance.Logger.LogInfo((object)"Destroyed CanvasScaler of map screen"); } } val = GameObject.Find("/Environment/HangarShip/ShipModels2b/MonitorWall/Cube/Canvas (1)"); if ((Object)(object)val != (Object)null) { GraphicRaycaster val7 = default(GraphicRaycaster); if (val.TryGetComponent<GraphicRaycaster>(ref val7)) { Object.Destroy((Object)(object)val7); LethalPerformancePlugin.Instance.Logger.LogInfo((object)"Destroyed GraphicRaycaster of quota monitor"); } CanvasScaler val8 = default(CanvasScaler); if (val.TryGetComponent<CanvasScaler>(ref val8)) { Object.Destroy((Object)(object)val8); LethalPerformancePlugin.Instance.Logger.LogInfo((object)"Destroyed CanvasScaler of quota monitor"); } } ChangeUICameraSettings(); } finally { ((IDisposable)val2).Dispose(); } } private static void ChangeUICameraSettings() { //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Unknown result type (might be due to invalid IL or missing references) if (!Dependencies.IsModLoaded("io.daxcess.lcvr")) { GameObject val = GameObject.Find("/Systems/UI/UICamera"); HDAdditionalCameraData val2 = default(HDAdditionalCameraData); if (!((Object)(object)val == (Object)null) && val.TryGetComponent<HDAdditionalCameraData>(ref val2)) { ref FrameSettingsOverrideMask renderingPathCustomFrameSettingsOverrideMask = ref val2.renderingPathCustomFrameSettingsOverrideMask; ref FrameSettings renderingPathCustomFrameSettings = ref val2.renderingPathCustomFrameSettings; ((BitArray128)(ref renderingPathCustomFrameSettingsOverrideMask.mask))[0u] = true; ((FrameSettings)(ref renderingPathCustomFrameSettings)).litShaderMode = (LitShaderMode)0; ((BitArray128)(ref renderingPathCustomFrameSettingsOverrideMask.mask))[2u] = true; ((BitArray128)(ref renderingPathCustomFrameSettings.bitDatas))[2u] = false; ((BitArray128)(ref renderingPathCustomFrameSettingsOverrideMask.mask))[127u] = true; ((BitArray128)(ref renderingPathCustomFrameSettings.bitDatas))[127u] = false; ((BitArray128)(ref renderingPathCustomFrameSettingsOverrideMask.mask))[79u] = true; ((BitArray128)(ref renderingPathCustomFrameSettings.bitDatas))[79u] = false; val2.probeLayerMask = LayerMask.op_Implicit(0); } } } } } namespace LethalPerformance.Patches.Mods { [HarmonyPatch] internal static class Patch_MoreSuits { private static readonly MethodInfo? s_MethodToPatch; static Patch_MoreSuits() { if (Chainloader.PluginInfos.TryGetValue("x753.More_Suits", out var value)) { Type type = AccessTools.Inner(((object)value.Instance).GetType(), "StartOfRoundPatch"); if (type != null) { s_MethodToPatch = type.GetMethod("StartPatch", AccessTools.all); } } } [HarmonyPrepare] public static bool ShouldPatch() { if (LethalPerformancePlugin.Instance.Configuration.CompressSuitsTextures.Value) { return s_MethodToPatch != null; } return false; } [HarmonyTargetMethod] public static MethodBase GetTargetMethod() { return s_MethodToPatch; } [HarmonyTranspiler] public static IEnumerable<CodeInstruction> OptimizeSuitsTextures(IEnumerable<CodeInstruction> codeInstructions) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Expected O, but got Unknown //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Expected O, but got Unknown //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Expected O, but got Unknown //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Expected O, but got Unknown CodeMatcher val = new CodeMatcher(codeInstructions, (ILGenerator)null); ConstructorInfo textureConstructor = typeof(Texture2D).GetConstructor(new Type[4] { typeof(int), typeof(int), typeof(TextureFormat), typeof(bool) }); val.MatchForward(false, (CodeMatch[])(object)new CodeMatch[3] { new CodeMatch((OpCode?)OpCodes.Ldc_I4_2, (object)null, (string)null), new CodeMatch((OpCode?)OpCodes.Ldc_I4_2, (object)null, (string)null), new CodeMatch((OpCode?)OpCodes.Newobj, (object)null, (string)null) }).Repeat((Action<CodeMatcher>)delegate(CodeMatcher m) { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Expected O, but got Unknown //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Expected O, but got Unknown m.SetOpcodeAndAdvance(OpCodes.Ldc_I4_4).SetOpcodeAndAdvance(OpCodes.Ldc_I4_4).InsertAndAdvance((CodeInstruction[])(object)new CodeInstruction[2] { new CodeInstruction(OpCodes.Ldc_I4, (object)12), new CodeInstruction(OpCodes.Ldc_I4_1, (object)null) }) .SetOperandAndAdvance((object)textureConstructor); }, (Action<string>)null); return val.InstructionEnumeration(); } } } namespace LethalPerformance.Patches.FindingObjectOptimization { [HarmonyPatch(typeof(Object))] internal static class NativeFindObjectOfTypePatch { [HarmonyCleanup] public static Exception? Cleanup(Exception exception) { return HarmonyExceptionHandler.ReportException(exception); } [HarmonyPatch("FindAnyObjectByType", new Type[] { typeof(Type), typeof(FindObjectsInactive) })] [HarmonyPatch("FindFirstObjectByType", new Type[] { typeof(Type), typeof(FindObjectsInactive) })] [HarmonyPrefix] public static bool FindObjectFast(Type type, FindObjectsInactive findObjectsInactive, ref Object? __result) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return !TryFindObjectFast(type, findObjectsInactive, out __result); } [HarmonyPatch("FindObjectOfType", new Type[] { typeof(Type), typeof(bool) })] [HarmonyPrefix] public static bool FindObjectFast(Type type, bool includeInactive, ref Object? __result) { return !TryFindObjectFast(type, (FindObjectsInactive)(includeInactive ? 1 : 0), out __result); } [Conditional("ENABLE_PROFILER")] private static void ShowInProfilerType(Type type) { } public static bool TryFindObjectFast(Type type, FindObjectsInactive findObjectsInactive, out Object? __result) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) if (UnsafeCacheManager.TryGetCachedReference(type, findObjectsInactive, out Object cache)) { __result = cache; return true; } __result = null; return false; } } [HarmonyPatch] internal static class ReplaceFindObjectOfTypePatch { private static readonly Dictionary<Type, MethodInfo> s_MapGettingInstance = new Dictionary<Type, MethodInfo> { { typeof(StartOfRound), AccessTools.PropertyGetter(typeof(StartOfRound), "Instance") }, { typeof(TimeOfDay), AccessTools.PropertyGetter(typeof(TimeOfDay), "Instance") }, { typeof(GameNetworkManager), AccessTools.PropertyGetter(typeof(GameNetworkManager), "Instance") }, { typeof(HUDManager), AccessTools.PropertyGetter(typeof(HUDManager), "Instance") }, { typeof(GlobalEffects), AccessTools.PropertyGetter(typeof(GlobalEffects), "Instance") }, { typeof(IngamePlayerSettings), AccessTools.PropertyGetter(typeof(IngamePlayerSettings), "Instance") }, { typeof(RoundManager), AccessTools.PropertyGetter(typeof(RoundManager), "Instance") }, { typeof(ShipBuildModeManager), AccessTools.PropertyGetter(typeof(ShipBuildModeManager), "Instance") }, { typeof(SoundManager), AccessTools.PropertyGetter(typeof(SoundManager), "Instance") }, { typeof(SteamManager), AccessTools.PropertyGetter(typeof(SteamManager), "Instance") } }; private static readonly HashSet<Type> s_ExcludedTypes = new HashSet<Type>(); private static readonly MethodInfo s_FindObjectByTypeNonOrdered = typeof(ObjectExtensions).GetMethod("FindObjectByTypeNonOrdered", AccessTools.all); private static readonly MethodInfo s_FindObjectByTypeNonOrderedInActive = typeof(ObjectExtensions).GetMethod("FindObjectByTypeNonOrderedInActive", AccessTools.all); [HarmonyCleanup] public static Exception? Cleanup(Exception exception) { return HarmonyExceptionHandler.ReportException(exception); } [HarmonyTargetMethods] private static IEnumerable<MethodInfo> GetTargetMethods() { Type type29 = typeof(BreakerBox); yield return type29.GetMethod("Start", AccessTools.all); yield return type29.GetMethod("SetSwitchesOff", AccessTools.all); type29 = typeof(FoliageDetailDistance); yield return type29.GetMethod("Start", AccessTools.all); type29 = typeof(animatedSun); yield return type29.GetMethod("Start", AccessTools.all); type29 = typeof(BoomboxItem); yield return type29.GetMethod("Start", AccessTools.all); type29 = typeof(TimeOfDay); yield return type29.GetMethod("Start", AccessTools.all); yield return type29.GetMethod("SyncNewProfitQuotaClientRpc", AccessTools.all); type29 = typeof(Terminal); yield return type29.GetMethod("Start", AccessTools.all); yield return type29.GetMethod("ParsePlayerSentence", AccessTools.all); yield return type29.GetMethod("LoadNewNodeIfAffordable", AccessTools.all); yield return AccessTools.EnumeratorMoveNext((MethodBase)type29.GetMethod("displayReimbursedTipDelay", AccessTools.all)); type29 = typeof(StartOfRound); yield return type29.GetMethod("Start", AccessTools.all); yield return type29.GetMethod("SetMapScreenInfoToCurrentLevel", AccessTools.all); yield return type29.GetMethod("ChangePlanet", AccessTools.all); yield return type29.GetMethod("ArriveAtLevel", AccessTools.all); yield return type29.GetMethod("SwitchMapMonitorPurpose", AccessTools.all); yield return type29.GetMethod("StartGameServerRpc", AccessTools.all); yield return type29.GetMethod("StartGame", AccessTools.all); yield return type29.GetMethod("ShipHasLeft", AccessTools.all); yield return type29.GetMethod("SetTimeAndPlanetToSavedSettings", AccessTools.all); yield return type29.GetMethod("SetShipReadyToLand", AccessTools.all); yield return type29.GetMethod("SetShipDoorsOverheatClientRpc", AccessTools.all); yield return type29.GetMethod("SetPlanetsMold", AccessTools.all); yield return type29.GetMethod("ResetShip", AccessTools.all); yield return type29.GetMethod("ResetPlayersLoadedValueClientRpc", AccessTools.all); yield return type29.GetMethod("ResetMoldStates", AccessTools.all); yield return type29.GetMethod("PowerSurgeShip", AccessTools.all); yield return type29.GetMethod("PassTimeToNextDay", AccessTools.all); yield return AccessTools.EnumeratorMoveNext((MethodBase)type29.GetMethod("TravelToLevelEffects", AccessTools.all)); type29 = typeof(Shovel); yield return type29.GetMethod("HitShovel", AccessTools.all); type29 = typeof(RoundManager); yield return type29.GetMethod("Start", AccessTools.all); yield return AccessTools.EnumeratorMoveNext((MethodBase)type29.GetMethod("turnOnLights", AccessTools.all)); type29 = typeof(OutOfBoundsTrigger); yield return type29.GetMethod("Start", AccessTools.all); type29 = typeof(MouthDogAI); yield return type29.GetMethod("Start", AccessTools.all); type29 = typeof(LungProp); yield return type29.GetMethod("Start", AccessTools.all); type29 = typeof(LevelGenerationManager); yield return type29.GetMethod("Awake", AccessTools.all); type29 = typeof(Landmine); yield return AccessTools.EnumeratorMoveNext((MethodBase)type29.GetMethod("StartIdleAnimation", AccessTools.all)); type29 = typeof(KnifeItem); yield return type29.GetMethod("HitKnife", AccessTools.all); type29 = typeof(ItemDropship); yield return type29.GetMethod("Start", AccessTools.all); type29 = typeof(InteractTrigger); yield return type29.GetMethod("Start", AccessTools.all); type29 = typeof(HUDManager); yield return type29.GetMethod("Awake", AccessTools.all); type29 = typeof(HangarShipDoor); yield return type29.GetMethod("Start", AccessTools.all); type29 = typeof(GlobalEffects); yield return type29.GetMethod("Awake", AccessTools.all); type29 = typeof(GameNetworkManager); yield return type29.GetMethod("SaveGameValues", AccessTools.all); yield return type29.GetMethod("ResetSavedGameValues", AccessTools.all); type29 = typeof(PlayerControllerB); yield return type29.GetMethod("SetSpectatedPlayerEffects", AccessTools.all); type29 = typeof(EntranceTeleport); yield return type29.GetMethod("Awake", AccessTools.all); type29 = typeof(EnemyVent); yield return type29.GetMethod("Start", AccessTools.all); type29 = typeof(Anomaly); yield return type29.GetMethod("Start", AccessTools.all); type29 = typeof(PlayerVoiceIngameSettings); yield return type29.GetMethod("InitializeComponents", AccessTools.all); type29 = typeof(StunGrenadeItem); yield return type29.GetMethod("ExplodeStunGrenade", AccessTools.all); type29 = typeof(StoryLog); yield return type29.GetMethod("Start", AccessTools.all); yield return type29.GetMethod("CollectLog", AccessTools.all); type29 = typeof(AudioReverbTrigger); yield return type29.GetMethod("OnTriggerStay", AccessTools.all); } [HarmonyTranspiler] public static IEnumerable<CodeInstruction> ReplaceFindObjectOfTypeTranspiler(IEnumerable<CodeInstruction> codeInstructions) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Expected O, but got Unknown //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Expected O, but got Unknown CodeMatcher matcher = new CodeMatcher(codeInstructions, (ILGenerator)null); matcher.MatchForward(false, (CodeMatch[])(object)new CodeMatch[1] { new CodeMatch((Func<CodeInstruction, bool>)CallsFindObjectOfType, (string)null) }).Repeat((Action<CodeMatcher>)delegate(CodeMatcher m) { MethodInfo methodInfo = (MethodInfo)matcher.Operand; Type type = methodInfo.GetGenericArguments()[0]; ParameterInfo[] parameters = methodInfo.GetParameters(); if (s_MapGettingInstance.TryGetValue(type, out MethodInfo value)) { if (parameters.Length != 0 && parameters[0].ParameterType == typeof(bool)) { m.Advance(-1).RemoveInstruction(); } matcher.Operand = value; } else { value = ((parameters.Length == 0 || !(parameters[0].ParameterType == typeof(bool))) ? s_FindObjectByTypeNonOrdered.MakeGenericMethod(type) : s_FindObjectByTypeNonOrderedInActive.MakeGenericMethod(type)); matcher.Operand = value; } }, (Action<string>)null); return matcher.InstructionEnumeration(); } private static bool CallsFindObjectOfType(CodeInstruction instruction) { if (!(instruction.operand is MethodInfo methodInfo) || !methodInfo.IsGenericMethod || methodInfo.DeclaringType != typeof(Object) || !methodInfo.Name.Equals("FindObjectOfType")) { return false; } Type item = methodInfo.GetGenericArguments()[0]; if (s_ExcludedTypes.Contains(item)) { return false; } return true; } } } namespace LethalPerformance.Extensions { internal static class BinaryPrimitivesExtension { public static void WriteSingleLittleEndian(Span<byte> destination, float value) { if (BitConverter.IsLittleEndian) { MemoryMarshal.Write(destination, ref value); return; } int value2 = BinaryPrimitives.ReverseEndianness(BitConverter.SingleToInt32Bits(value)); MemoryMarshal.Write(destination, ref value2); } } } namespace LethalPerformance.Configuration { internal class AcceptableValueEnum<T> : AcceptableValueBase where T : struct { private static readonly string[] s_EnumValues = Enum.GetNames(typeof(T)); public AcceptableValueEnum() : base(typeof(T)) { if (s_EnumValues.Length == 0) { throw new ArgumentException("Enum should have any value"); } } public override object Clamp(object value) { if (((AcceptableValueBase)this).IsValid(value)) { return value; } return Enum.Parse<T>(s_EnumValues[0]); } public override bool IsValid(object value) { return Enum.IsDefined(typeof(T), value); } public override string ToDescriptionString() { return "# Acceptable values: " + string.Join(", ", s_EnumValues); } } internal class ConfigManager { private readonly ConfigFile m_Config; public ConfigEntry<bool> PatchHDRenderPipeline { get; private set; } public ConfigEntry<bool> CompressSuitsTextures { get; private set; } public ConfigEntry<CookieAtlasResolutionLimited> CookieAtlasResolution { get; private set; } public ConfigEntry<ReflectionProbeTextureCacheResolution> ReflectionProbeCacheResolution { get; private set; } public ConfigManager(ConfigFile config) { m_Config = config; BindConfig(); } private void BindConfig() { //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Expected O, but got Unknown //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Expected O, but got Unknown bool defaultValue = false; PatchHDRenderPipeline = BindHarmonyConfig("Unsafe.Rendering", "Remove useless calls from HDRenderPipeline", defaultValue, "Remove useless method calls in rendering to improve performance.\nMay cause graphical issues, if you noticed them, disable this option."); CompressSuitsTextures = BindHarmonyConfig("Experimental.Mods", "Compress custom suits textures", defaultValue, "Compress custom suits from MoreSuits mod to reduce usage of VRAM."); CookieAtlasResolution = BindRenderingConfig("Rendering", "Cookie atlas texture resolution", CookieAtlasResolutionLimited.CookieResolution1024, new ConfigDescription("Sets cookie light atlas texture resolution. By default 1024 is enough for vanilla, but some mods can use custom cookie texture, causing this log spam:\n\"No more space in the 2D Cookie Texture Atlas. To solve this issue, increase the resolution of the cookie atlas in the HDRP settings\".\nTo fix it just increase the resolution of texture atlas.", (AcceptableValueBase)(object)new AcceptableValueEnum<CookieAtlasResolutionLimited>(), Array.Empty<object>())); ReflectionProbeCacheResolution = BindRenderingConfig<ReflectionProbeTextureCacheResolution>("Rendering", "Reflection probe atlas texture resolution", (ReflectionProbeTextureCacheResolution)1024, new ConfigDescription("Sets reflection probe cache resolution. By default it's 16384x8192 causing high RAM usage (~1GB) even if vanilla game doesn't use them at all. But some mods may use, so it may cause this log spam:\n\"No more space in Reflection Probe Atlas. To solve this issue, increase the size of the Reflection Probe Atlas in the HDRP settings\".\nTo fix it just increase the resolution of texture atlas.", (AcceptableValueBase)(object)new AcceptableValueEnum<ReflectionProbeTextureCacheResolution>(), Array.Empty<object>())); } private ConfigEntry<T> BindRenderingConfig<T>(string section, string key, T defaultValue, ConfigDescription? description) { ConfigEntry<T> val = m_Config.Bind<T>(section, key, defaultValue, description); val.SettingChanged += UpdateRenderingAsset; return val; } private ConfigEntry<T> BindHarmonyConfig<T>(string section, string key, T defaultValue, string? description) { //IL_000c: Unknown result type (might be due to invalid IL or missing references) ConfigDescription val = ((description == null) ? ((ConfigDescription)null) : new ConfigDescription(description, (AcceptableValueBase)null, Array.Empty<object>())); ConfigEntry<T> val2 = m_Config.Bind<T>(section, key, defaultValue, val); val2.SettingChanged += RepatchHarmony; return val2; } private static void UpdateRenderingAsset(object _, EventArgs __) { HDRenderPipelineAssetOptimizer.Initialize(); } private static void RepatchHarmony(object _, EventArgs __) { LethalPerformancePlugin.Instance.Logger.LogInfo((object)"Config option of Harmony got changed, repatching..."); Harmony harmony = LethalPerformancePlugin.Instance.Harmony; if (harmony == null) { return; } try { harmony.UnpatchSelf(); harmony.PatchAll(typeof(ConfigManager).Assembly); } catch (Exception ex) { LethalPerformancePlugin.Instance.Logger.LogError((object)("Failed to repatch with Harmony\n" + ex)); } } } internal enum CookieAtlasResolutionLimited { CookieResolution1024 = 0x400, CookieResolution2048 = 0x800, CookieResolution4096 = 0x1000, CookieResolution8192 = 0x2000, CookieResolution16384 = 0x4000 } } namespace LethalPerformance.API { internal static class HarmonyExceptionHandler { public static Exception? ReportException(Exception? exception) { if (exception != null) { LethalPerformancePlugin.Instance.Logger.LogWarning((object)exception); } return null; } } [AttributeUsage(AttributeTargets.Method)] internal sealed class InitializeOnAwakeAttribute : Attribute { } internal static class ObjectExtensions { public static T? FindObjectByTypeNonOrdered<T>() where T : Object { if (UnsafeCacheManager.TryGetCachedReference(typeof(T), (FindObjectsInactive)0, out Object cache)) { return (T)(object)cache; } Object[] array = Object.FindObjectsByType(typeof(T), (FindObjectsInactive)0, (FindObjectsSortMode)0); Object val = ((array.Length != 0) ? array[0] : null); return (T)(object)((val is T) ? val : null); } public static T? FindObjectByTypeNonOrderedInActive<T>(bool includeInactive) where T : Object { //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) if (UnsafeCacheManager.TryGetCachedReference(typeof(T), (FindObjectsInactive)1, out Object cache)) { return (T)(object)cache; } FindObjectsInactive val = (FindObjectsInactive)(includeInactive ? 1 : 0); Object[] array = Object.FindObjectsByType(typeof(T), val, (FindObjectsSortMode)0); Object val2 = ((array.Length != 0) ? array[0] : null); return (T)(object)((val2 is T) ? val2 : null); } public static bool ComparePlayerRagdollTag(GameObject gameObject) { if (!gameObject.CompareTag("PlayerRagdoll") && !gameObject.CompareTag("PlayerRagdoll1") && !gameObject.CompareTag("PlayerRagdoll2")) { return gameObject.CompareTag("PlayerRagdoll3"); } return true; } } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } } internal sealed class <>z__ReadOnlyArray<T> : IEnumerable, ICollection, IList, IEnumerable<T>, IReadOnlyCollection<T>, IReadOnlyList<T>, ICollection<T>, IList<T> { int ICollection.Count => _items.Length; bool ICollection.IsSynchronized => false; object ICollection.SyncRoot => this; object IList.this[int index] { get { return _items[index]; } set { throw new NotSupportedException(); } } bool IList.IsFixedSize => true; bool IList.IsReadOnly => true; int IReadOnlyCollection<T>.Count => _items.Length; T IReadOnlyList<T>.this[int index] => _items[index]; int ICollection<T>.Count => _items.Length; bool ICollection<T>.IsReadOnly => true; T IList<T>.this[int index] { get { return _items[index]; } set { throw new NotSupportedException(); } } public <>z__ReadOnlyArray(T[] items) { _items = items; } IEnumerator IEnumerable.GetEnumerator() { return ((IEnumerable)_items).GetEnumerator(); } void ICollection.CopyTo(Array array, int index) { ((ICollection)_items).CopyTo(array, index); } int IList.Add(object value) { throw new NotSupportedException(); } void IList.Clear() { throw new NotSupportedException(); } bool IList.Contains(object value) { return ((IList)_items).Contains(value); } int IList.IndexOf(object value) { return ((IList)_items).IndexOf(value); } void IList.Insert(int index, object value) { throw new NotSupportedException(); } void IList.Remove(object value) { throw new NotSupportedException(); } void IList.RemoveAt(int index) { throw new NotSupportedException(); } IEnumerator<T> IEnumerable<T>.GetEnumerator() { return ((IEnumerable<T>)_items).GetEnumerator(); } void ICollection<T>.Add(T item) { throw new NotSupportedException(); } void ICollection<T>.Clear() { throw new NotSupportedException(); } bool ICollection<T>.Contains(T item) { return ((ICollection<T>)_items).Contains(item); } void ICollection<T>.CopyTo(T[] array, int arrayIndex) { ((ICollection<T>)_items).CopyTo(array, arrayIndex); } bool ICollection<T>.Remove(T item) { throw new NotSupportedException(); } int IList<T>.IndexOf(T item) { return ((IList<T>)_items).IndexOf(item); } void IList<T>.Insert(int index, T item) { throw new NotSupportedException(); } void IList<T>.RemoveAt(int index) { throw new NotSupportedException(); } } internal sealed class <>z__ReadOnlySingleElementList<T> : IEnumerable, ICollection, IList, IEnumerable<T>, IReadOnlyCollection<T>, IReadOnlyList<T>, ICollection<T>, IList<T> { private sealed class Enumerator : IDisposable, IEnumerator, IEnumerator<T> { object IEnumerator.Current => _item; T IEnumerator<T>.Current => _item; public Enumerator(T item) { _item = item; } bool IEnumerator.MoveNext() { if (!_moveNextCalled) { return _moveNextCalled = true; } return false; } void IEnumerator.Reset() { _moveNextCalled = false; } void IDisposable.Dispose() { } } int ICollection.Count => 1; bool ICollection.IsSynchronized => false; object ICollection.SyncRoot => this; object IList.this[int index] { get { if (index != 0) { throw new IndexOutOfRangeException(); } return _item; } set { throw new NotSupportedException(); } } bool IList.IsFixedSize => true; bool IList.IsReadOnly => true; int IReadOnlyCollection<T>.Count => 1; T IReadOnlyList<T>.this[int index] { get { if (index != 0) { throw new IndexOutOfRangeException(); } return _item; } } int ICollection<T>.Count => 1; bool ICollection<T>.IsReadOnly => true; T IList<T>.this[int index] { get { if (index != 0) { throw new IndexOutOfRangeException(); } return _item; } set { throw new NotSupportedException(); } } public <>z__ReadOnlySingleElementList(T item) { _item = item; } IEnumerator IEnumerable.GetEnumerator() { return new Enumerator(_item); } void ICollection.CopyTo(Array array, int index) { array.SetValue(_item, index); } int IList.Add(object value) { throw new NotSupportedException(); } void IList.Clear() { throw new NotSupportedException(); } bool IList.Contains(object value) { return EqualityComparer<T>.Default.Equals(_item, (T)value); } int IList.IndexOf(object value) { if (!EqualityComparer<T>.Default.Equals(_item, (T)value)) { return -1; } return 0; } void IList.Insert(int index, object value) { throw new NotSupportedException(); } void IList.Remove(object value) { throw new NotSupportedException(); } void IList.RemoveAt(int index) { throw new NotSupportedException(); } IEnumerator<T> IEnumerable<T>.GetEnumerator() { return new Enumerator(_item); } void ICollection<T>.Add(T item) { throw new NotSupportedException(); } void ICollection<T>.Clear() { throw new NotSupportedException(); } bool ICollection<T>.Contains(T item) { return EqualityComparer<T>.Default.Equals(_item, item); } void ICollection<T>.CopyTo(T[] array, int arrayIndex) { array[arrayIndex] = _item; } bool ICollection<T>.Remove(T item) { throw new NotSupportedException(); } int IList<T>.IndexOf(T item) { if (!EqualityComparer<T>.Default.Equals(_item, item)) { return -1; } return 0; } void IList<T>.Insert(int index, T item) { throw new NotSupportedException(); } void IList<T>.RemoveAt(int index) { throw new NotSupportedException(); } }
BepInEx/plugins/LethalPerformance/LethalPerformance.Unity.dll
Decompiled 3 months agousing System; using System.CodeDom.Compiler; using System.ComponentModel; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Security; using System.Security.Permissions; using BepInEx; using LethalPerformance.Unity; using Unity.Burst; using Unity.Collections; using Unity.Collections.LowLevel.Unsafe; using Unity.Mathematics; using UnityEngine; using UnityEngine.Rendering.HighDefinition; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: StaticTypeReinit(typeof(LethalPerformance.Unity.Log_00000004$BurstDirectCall))] [assembly: StaticTypeReinit(typeof(LethalPerformance.Unity.Test_00000005$BurstDirectCall))] [assembly: StaticTypeReinit(typeof(LethalPerformance.Unity.UpdateShaderVariablesGlobalCB_00000006$BurstDirectCall))] [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() { MonoScriptData result = default(MonoScriptData); result.FilePathsData = new byte[109] { 0, 0, 0, 1, 0, 0, 0, 57, 92, 65, 115, 115, 101, 116, 115, 92, 76, 101, 116, 104, 97, 108, 80, 101, 114, 102, 111, 114, 109, 97, 110, 99, 101, 92, 76, 101, 116, 104, 97, 108, 80, 101, 114, 102, 111, 114, 109, 97, 110, 99, 101, 85, 110, 105, 116, 121, 80, 108, 117, 103, 105, 110, 46, 99, 115, 0, 0, 0, 4, 0, 0, 0, 36, 92, 65, 115, 115, 101, 116, 115, 92, 76, 101, 116, 104, 97, 108, 80, 101, 114, 102, 111, 114, 109, 97, 110, 99, 101, 92, 84, 101, 115, 116, 105, 110, 103, 46, 99, 115 }; result.TypesData = new byte[279] { 0, 0, 0, 0, 52, 76, 101, 116, 104, 97, 108, 80, 101, 114, 102, 111, 114, 109, 97, 110, 99, 101, 46, 85, 110, 105, 116, 121, 124, 76, 101, 116, 104, 97, 108, 80, 101, 114, 102, 111, 114, 109, 97, 110, 99, 101, 85, 110, 105, 116, 121, 80, 108, 117, 103, 105, 110, 0, 0, 0, 0, 31, 76, 101, 116, 104, 97, 108, 80, 101, 114, 102, 111, 114, 109, 97, 110, 99, 101, 46, 85, 110, 105, 116, 121, 124, 84, 101, 115, 116, 105, 110, 103, 0, 0, 0, 0, 53, 76, 101, 116, 104, 97, 108, 80, 101, 114, 102, 111, 114, 109, 97, 110, 99, 101, 46, 85, 110, 105, 116, 121, 46, 84, 101, 115, 116, 105, 110, 103, 124, 82, 101, 97, 100, 97, 98, 108, 101, 86, 105, 101, 119, 67, 111, 110, 115, 116, 97, 110, 116, 115, 0, 0, 0, 0, 57, 76, 101, 116, 104, 97, 108, 80, 101, 114, 102, 111, 114, 109, 97, 110, 99, 101, 46, 85, 110, 105, 116, 121, 46, 84, 101, 115, 116, 105, 110, 103, 124, 82, 101, 97, 100, 97, 98, 108, 101, 83, 104, 97, 100, 101, 114, 86, 97, 114, 105, 97, 98, 108, 101, 115, 88, 82, 0, 0, 0, 0, 61, 76, 101, 116, 104, 97, 108, 80, 101, 114, 102, 111, 114, 109, 97, 110, 99, 101, 46, 85, 110, 105, 116, 121, 46, 84, 101, 115, 116, 105, 110, 103, 124, 82, 101, 97, 100, 97, 98, 108, 101, 83, 104, 97, 100, 101, 114, 86, 97, 114, 105, 97, 98, 108, 101, 115, 71, 108, 111, 98, 97, 108 }; result.TotalFiles = 2; result.TotalTypes = 5; result.IsEditorOnly = false; return result; } } namespace LethalPerformance.Unity; [BepInPlugin("LethalPerformance.Unity", "Lethal Performance Unity", "0.0.0")] public class LethalPerformanceUnityPlugin : BaseUnityPlugin { } [BurstCompile] public static class Testing { public readonly struct ReadableViewConstants { public readonly Matrix4x4 viewMatrix; public readonly Matrix4x4 invViewMatrix; public readonly Matrix4x4 projMatrix; public readonly Matrix4x4 invProjMatrix; public readonly Matrix4x4 viewProjMatrix; public readonly Matrix4x4 invViewProjMatrix; public readonly Matrix4x4 nonJitteredViewProjMatrix; public readonly Matrix4x4 prevViewMatrix; public readonly Matrix4x4 prevViewProjMatrix; public readonly Matrix4x4 prevInvViewProjMatrix; public readonly Matrix4x4 prevViewProjMatrixNoCameraTrans; public readonly Matrix4x4 pixelCoordToViewDirWS; public readonly Matrix4x4 viewProjectionNoCameraTrans; public readonly Vector3 worldSpaceCameraPos; internal readonly float pad0; public readonly Vector3 worldSpaceCameraPosViewOffset; internal readonly float pad1; public readonly Vector3 prevWorldSpaceCameraPos; internal readonly float pad2; } public struct ReadableShaderVariablesXR { public unsafe fixed float _XRViewMatrix[32]; public unsafe fixed float _XRInvViewMatrix[32]; public unsafe fixed float _XRProjMatrix[32]; public unsafe fixed float _XRInvProjMatrix[32]; public unsafe fixed float _XRViewProjMatrix[32]; public unsafe fixed float _XRInvViewProjMatrix[32]; public unsafe fixed float _XRNonJitteredViewProjMatrix[32]; public unsafe fixed float _XRPrevViewProjMatrix[32]; public unsafe fixed float _XRPrevInvViewProjMatrix[32]; public unsafe fixed float _XRPrevViewProjMatrixNoCameraTrans[32]; public unsafe fixed float _XRViewProjMatrixNoCameraTrans[32]; public unsafe fixed float _XRPixelCoordToViewDirWS[32]; public unsafe fixed float _XRWorldSpaceCameraPos[8]; public unsafe fixed float _XRWorldSpaceCameraPosViewOffset[8]; public unsafe fixed float _XRPrevWorldSpaceCameraPos[8]; } public struct ReadableShaderVariablesGlobal { public Matrix4x4 _ViewMatrix; public Matrix4x4 _CameraViewMatrix; public Matrix4x4 _InvViewMatrix; public Matrix4x4 _ProjMatrix; public Matrix4x4 _InvProjMatrix; public Matrix4x4 _ViewProjMatrix; public Matrix4x4 _CameraViewProjMatrix; public Matrix4x4 _InvViewProjMatrix; public Matrix4x4 _NonJitteredViewProjMatrix; public Matrix4x4 _PrevViewProjMatrix; public Matrix4x4 _PrevInvViewProjMatrix; public Vector4 _WorldSpaceCameraPos_Internal; public Vector4 _PrevCamPosRWS_Internal; public Vector4 _ScreenSize; public Vector4 _PostProcessScreenSize; public Vector4 _RTHandleScale; public Vector4 _RTHandleScaleHistory; public Vector4 _RTHandlePostProcessScale; public Vector4 _RTHandlePostProcessScaleHistory; public Vector4 _DynamicResolutionFullscreenScale; public Vector4 _ZBufferParams; public Vector4 _ProjectionParams; public Vector4 unity_OrthoParams; public Vector4 _ScreenParams; public unsafe fixed float _FrustumPlanes[24]; public unsafe fixed float _ShadowFrustumPlanes[24]; public Vector4 _TaaFrameInfo; public Vector4 _TaaJitterStrength; public Vector4 _Time; public Vector4 _SinTime; public Vector4 _CosTime; public Vector4 unity_DeltaTime; public Vector4 _TimeParameters; public Vector4 _LastTimeParameters; public int _FogEnabled; public int _PBRFogEnabled; public int _EnableVolumetricFog; public float _MaxFogDistance; public Vector4 _FogColor; public float _FogColorMode; public float _GlobalMipBias; public float _GlobalMipBiasPow2; public float _Pad0; public Vector4 _MipFogParameters; public Vector4 _HeightFogBaseScattering; public float _HeightFogBaseExtinction; public float _HeightFogBaseHeight; public float _GlobalFogAnisotropy; public int _VolumetricFilteringEnabled; public Vector2 _HeightFogExponents; public int _FogDirectionalOnly; public float _FogGIDimmer; public Vector4 _VBufferViewportSize; public Vector4 _VBufferLightingViewportScale; public Vector4 _VBufferLightingViewportLimit; public Vector4 _VBufferDistanceEncodingParams; public Vector4 _VBufferDistanceDecodingParams; public uint _VBufferSliceCount; public float _VBufferRcpSliceCount; public float _VBufferRcpInstancedViewCount; public float _VBufferLastSliceDist; public Vector4 _ShadowAtlasSize; public Vector4 _CascadeShadowAtlasSize; public Vector4 _AreaShadowAtlasSize; public Vector4 _CachedShadowAtlasSize; public Vector4 _CachedAreaShadowAtlasSize; public int _ReflectionsMode; public int _UnusedPadding0; public int _UnusedPadding1; public int _UnusedPadding2; public uint _DirectionalLightCount; public uint _PunctualLightCount; public uint _AreaLightCount; public uint _EnvLightCount; public int _EnvLightSkyEnabled; public uint _CascadeShadowCount; public int _DirectionalShadowIndex; public uint _EnableLightLayers; public uint _EnableSkyReflection; public uint _EnableSSRefraction; public float _SSRefractionInvScreenWeightDistance; public float _ColorPyramidLodCount; public float _DirectionalTransmissionMultiplier; public float _ProbeExposureScale; public float _ContactShadowOpacity; public float _ReplaceDiffuseForIndirect; public Vector4 _AmbientOcclusionParam; public float _IndirectDiffuseLightingMultiplier; public uint _IndirectDiffuseLightingLayers; public float _ReflectionLightingMultiplier; public uint _ReflectionLightingLayers; public float _MicroShadowOpacity; public uint _EnableProbeVolumes; public uint _ProbeVolumeCount; public float _SlopeScaleDepthBias; public Vector4 _CookieAtlasSize; public Vector4 _CookieAtlasData; public Vector4 _ReflectionAtlasCubeData; public Vector4 _ReflectionAtlasPlanarData; public uint _NumTileFtplX; public uint _NumTileFtplY; public float g_fClustScale; public float g_fClustBase; public float g_fNearPlane; public float g_fFarPlane; public int g_iLog2NumClusters; public uint g_isLogBaseBufferEnabled; public uint _NumTileClusteredX; public uint _NumTileClusteredY; public int _EnvSliceSize; public uint _EnableDecalLayers; public unsafe fixed float _ShapeParamsAndMaxScatterDists[64]; public unsafe fixed float _TransmissionTintsAndFresnel0[64]; public unsafe fixed float _WorldScalesAndFilterRadiiAndThicknessRemaps[64]; public unsafe fixed float _DiffusionProfileHashTable[64]; public uint _EnableSubsurfaceScattering; public uint _TexturingModeFlags; public uint _TransmissionFlags; public uint _DiffusionProfileCount; public Vector2 _DecalAtlasResolution; public uint _EnableDecals; public uint _DecalCount; public float _OffScreenDownsampleFactor; public uint _OffScreenRendering; public uint _XRViewCount; public int _FrameCount; public Vector4 _CoarseStencilBufferSize; public int _IndirectDiffuseMode; public int _EnableRayTracedReflections; public int _RaytracingFrameIndex; public uint _EnableRecursiveRayTracing; public int _TransparentCameraOnlyMotionVectors; public float _GlobalTessellationFactorMultiplier; public float _SpecularOcclusionBlend; public float _DeExposureMultiplier; public Vector4 _ScreenSizeOverride; public Vector4 _ScreenCoordScaleBias; } public delegate void Log_00000004$PostfixBurstDelegate(in FixedString128Bytes log); internal static class Log_00000004$BurstDirectCall { private static IntPtr Pointer; private static IntPtr DeferredCompilation; [BurstDiscard] private unsafe static void GetFunctionPointerDiscard(ref IntPtr P_0) { if (Pointer == (IntPtr)0) { Pointer = (nint)BurstCompiler.GetILPPMethodFunctionPointer2(DeferredCompilation, (RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/, typeof(Log_00000004$PostfixBurstDelegate).TypeHandle); } P_0 = Pointer; } private static IntPtr GetFunctionPointer() { nint result = 0; GetFunctionPointerDiscard(ref result); return result; } public static void Constructor() { DeferredCompilation = BurstCompiler.CompileILPPMethod2((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/); } public static void Initialize() { } static Log_00000004$BurstDirectCall() { Constructor(); } public unsafe static void Invoke(in FixedString128Bytes log) { if (BurstCompiler.IsEnabled) { IntPtr functionPointer = GetFunctionPointer(); if (functionPointer != (IntPtr)0) { ((delegate* unmanaged[Cdecl]<ref FixedString128Bytes, void>)functionPointer)(ref log); return; } } Log$BurstManaged(in log); } } public unsafe delegate void Test_00000005$PostfixBurstDelegate(in ReadableViewConstants* xrViewConstants, in int viewCount, ReadableShaderVariablesXR* cb); internal static class Test_00000005$BurstDirectCall { private static IntPtr Pointer; private static IntPtr DeferredCompilation; [BurstDiscard] private unsafe static void GetFunctionPointerDiscard(ref IntPtr P_0) { if (Pointer == (IntPtr)0) { Pointer = (nint)BurstCompiler.GetILPPMethodFunctionPointer2(DeferredCompilation, (RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/, typeof(Test_00000005$PostfixBurstDelegate).TypeHandle); } P_0 = Pointer; } private static IntPtr GetFunctionPointer() { nint result = 0; GetFunctionPointerDiscard(ref result); return result; } public static void Constructor() { DeferredCompilation = BurstCompiler.CompileILPPMethod2((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/); } public static void Initialize() { } static Test_00000005$BurstDirectCall() { Constructor(); } public unsafe static void Invoke(in ReadableViewConstants* xrViewConstants, in int viewCount, ReadableShaderVariablesXR* cb) { if (BurstCompiler.IsEnabled) { IntPtr functionPointer = GetFunctionPointer(); if (functionPointer != (IntPtr)0) { ((delegate* unmanaged[Cdecl]<ref ReadableViewConstants*, ref int, ReadableShaderVariablesXR*, void>)functionPointer)(ref xrViewConstants, ref viewCount, cb); return; } } Test$BurstManaged(in xrViewConstants, in viewCount, cb); } } public unsafe delegate void UpdateShaderVariablesGlobalCB_00000006$PostfixBurstDelegate(ReadableShaderVariablesGlobal* cb, in FrameSettings frameSettings, in AntialiasingMode antialiasingMode, in CameraType cameraType, in ReadableViewConstants* mainViewConstants, in float4x4 vectorParams, in float4x4 vectorParams2, in float4x4 vectorParams3, in float4* frustumPlaneEquations, in float taaSharpenStrength, in int taaFrameIndex, in int colorPyramidHistoryMipCount, in float globalMipBias, in float time, in float lastTime, in int frameCount, in int viewCount, in float probeRangeCompressionFactor, in float deExposureMultiplier, in float4 screenCoordScaleBias, in bool useScreenSizeOverride, in float4 screenSizeOverride); internal static class UpdateShaderVariablesGlobalCB_00000006$BurstDirectCall { private static IntPtr Pointer; private static IntPtr DeferredCompilation; [BurstDiscard] private unsafe static void GetFunctionPointerDiscard(ref IntPtr P_0) { if (Pointer == (IntPtr)0) { Pointer = (nint)BurstCompiler.GetILPPMethodFunctionPointer2(DeferredCompilation, (RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/, typeof(UpdateShaderVariablesGlobalCB_00000006$PostfixBurstDelegate).TypeHandle); } P_0 = Pointer; } private static IntPtr GetFunctionPointer() { nint result = 0; GetFunctionPointerDiscard(ref result); return result; } public static void Constructor() { DeferredCompilation = BurstCompiler.CompileILPPMethod2((RuntimeMethodHandle)/*OpCode not supported: LdMemberToken*/); } public static void Initialize() { } static UpdateShaderVariablesGlobalCB_00000006$BurstDirectCall() { Constructor(); } public unsafe static void Invoke(ReadableShaderVariablesGlobal* cb, in FrameSettings frameSettings, in AntialiasingMode antialiasingMode, in CameraType cameraType, in ReadableViewConstants* mainViewConstants, in float4x4 vectorParams, in float4x4 vectorParams2, in float4x4 vectorParams3, in float4* frustumPlaneEquations, in float taaSharpenStrength, in int taaFrameIndex, in int colorPyramidHistoryMipCount, in float globalMipBias, in float time, in float lastTime, in int frameCount, in int viewCount, in float probeRangeCompressionFactor, in float deExposureMultiplier, in float4 screenCoordScaleBias, in bool useScreenSizeOverride, in float4 screenSizeOverride) { if (BurstCompiler.IsEnabled) { IntPtr functionPointer = GetFunctionPointer(); if (functionPointer != (IntPtr)0) { ((delegate* unmanaged[Cdecl]<ReadableShaderVariablesGlobal*, ref FrameSettings, ref AntialiasingMode, ref CameraType, ref ReadableViewConstants*, ref float4x4, ref float4x4, ref float4x4, ref float4*, ref float, ref int, ref int, ref float, ref float, ref float, ref int, ref int, ref float, ref float, ref float4, ref bool, ref float4, void>)functionPointer)(cb, ref frameSettings, ref antialiasingMode, ref cameraType, ref mainViewConstants, ref vectorParams, ref vectorParams2, ref vectorParams3, ref frustumPlaneEquations, ref taaSharpenStrength, ref taaFrameIndex, ref colorPyramidHistoryMipCount, ref globalMipBias, ref time, ref lastTime, ref frameCount, ref viewCount, ref probeRangeCompressionFactor, ref deExposureMultiplier, ref screenCoordScaleBias, ref useScreenSizeOverride, ref screenSizeOverride); return; } } UpdateShaderVariablesGlobalCB$BurstManaged(cb, in frameSettings, in antialiasingMode, in cameraType, in mainViewConstants, in vectorParams, in vectorParams2, in vectorParams3, in frustumPlaneEquations, in taaSharpenStrength, in taaFrameIndex, in colorPyramidHistoryMipCount, in globalMipBias, in time, in lastTime, in frameCount, in viewCount, in probeRangeCompressionFactor, in deExposureMultiplier, in screenCoordScaleBias, in useScreenSizeOverride, in screenSizeOverride); } } [BurstCompile] public static void Log(in FixedString128Bytes log) { Log_00000004$BurstDirectCall.Invoke(in log); } [BurstCompile] public unsafe static void Test(in ReadableViewConstants* xrViewConstants, in int viewCount, ReadableShaderVariablesXR* cb) { Test_00000005$BurstDirectCall.Invoke(in xrViewConstants, in viewCount, cb); } [BurstCompile] public unsafe static void UpdateShaderVariablesGlobalCB(ReadableShaderVariablesGlobal* cb, in FrameSettings frameSettings, in AntialiasingMode antialiasingMode, in CameraType cameraType, in ReadableViewConstants* mainViewConstants, in float4x4 vectorParams, in float4x4 vectorParams2, in float4x4 vectorParams3, in float4* frustumPlaneEquations, in float taaSharpenStrength, in int taaFrameIndex, in int colorPyramidHistoryMipCount, in float globalMipBias, in float time, in float lastTime, in int frameCount, in int viewCount, in float probeRangeCompressionFactor, in float deExposureMultiplier, in float4 screenCoordScaleBias, in bool useScreenSizeOverride, in float4 screenSizeOverride) { UpdateShaderVariablesGlobalCB_00000006$BurstDirectCall.Invoke(cb, in frameSettings, in antialiasingMode, in cameraType, in mainViewConstants, in vectorParams, in vectorParams2, in vectorParams3, in frustumPlaneEquations, in taaSharpenStrength, in taaFrameIndex, in colorPyramidHistoryMipCount, in globalMipBias, in time, in lastTime, in frameCount, in viewCount, in probeRangeCompressionFactor, in deExposureMultiplier, in screenCoordScaleBias, in useScreenSizeOverride, in screenSizeOverride); } [MethodImpl(MethodImplOptions.AggressiveInlining)] [BurstCompile] public static void Log$BurstManaged(in FixedString128Bytes log) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) Debug.Log((object)log); } [MethodImpl(MethodImplOptions.AggressiveInlining)] [BurstCompile] public unsafe static void Test$BurstManaged(in ReadableViewConstants* xrViewConstants, in int viewCount, ReadableShaderVariablesXR* cb) { for (int i = 0; i < viewCount; i++) { UnsafeUtility.MemCpy((void*)(cb->_XRViewMatrix + i * 15), (void*)(&xrViewConstants[i].viewMatrix), (long)Unsafe.SizeOf<float4x4>()); UnsafeUtility.MemCpy((void*)(cb->_XRInvViewMatrix + i * 15), (void*)(&xrViewConstants[i].invViewMatrix), (long)Unsafe.SizeOf<float4x4>()); UnsafeUtility.MemCpy((void*)(cb->_XRProjMatrix + i * 15), (void*)(&xrViewConstants[i].projMatrix), (long)Unsafe.SizeOf<float4x4>()); UnsafeUtility.MemCpy((void*)(cb->_XRInvProjMatrix + i * 15), (void*)(&xrViewConstants[i].invProjMatrix), (long)Unsafe.SizeOf<float4x4>()); UnsafeUtility.MemCpy((void*)(cb->_XRViewProjMatrix + i * 15), (void*)(&xrViewConstants[i].viewProjMatrix), (long)Unsafe.SizeOf<float4x4>()); UnsafeUtility.MemCpy((void*)(cb->_XRInvViewProjMatrix + i * 15), (void*)(&xrViewConstants[i].invViewProjMatrix), (long)Unsafe.SizeOf<float4x4>()); UnsafeUtility.MemCpy((void*)(cb->_XRNonJitteredViewProjMatrix + i * 15), (void*)(&xrViewConstants[i].nonJitteredViewProjMatrix), (long)Unsafe.SizeOf<float4x4>()); UnsafeUtility.MemCpy((void*)(cb->_XRPrevViewProjMatrix + i * 15), (void*)(&xrViewConstants[i].prevViewProjMatrix), (long)Unsafe.SizeOf<float4x4>()); UnsafeUtility.MemCpy((void*)(cb->_XRPrevInvViewProjMatrix + i * 15), (void*)(&xrViewConstants[i].prevInvViewProjMatrix), (long)Unsafe.SizeOf<float4x4>()); UnsafeUtility.MemCpy((void*)(cb->_XRViewProjMatrixNoCameraTrans + i * 15), (void*)(&xrViewConstants[i].viewProjectionNoCameraTrans), (long)Unsafe.SizeOf<float4x4>()); UnsafeUtility.MemCpy((void*)(cb->_XRPrevViewProjMatrixNoCameraTrans + i * 15), (void*)(&xrViewConstants[i].prevViewProjMatrixNoCameraTrans), (long)Unsafe.SizeOf<float4x4>()); UnsafeUtility.MemCpy((void*)(cb->_XRPixelCoordToViewDirWS + i * 15), (void*)(&xrViewConstants[i].pixelCoordToViewDirWS), (long)Unsafe.SizeOf<float4x4>()); UnsafeUtility.MemCpy((void*)(cb->_XRWorldSpaceCameraPos + i * 3), (void*)(&xrViewConstants[i].worldSpaceCameraPos), (long)Unsafe.SizeOf<float4>()); UnsafeUtility.MemCpy((void*)(cb->_XRWorldSpaceCameraPosViewOffset + i * 3), (void*)(&xrViewConstants[i].worldSpaceCameraPosViewOffset), (long)Unsafe.SizeOf<float4>()); UnsafeUtility.MemCpy((void*)(cb->_XRPrevWorldSpaceCameraPos + i * 3), (void*)(&xrViewConstants[i].prevWorldSpaceCameraPos), (long)Unsafe.SizeOf<float4>()); } } [MethodImpl(MethodImplOptions.AggressiveInlining)] [BurstCompile] public unsafe static void UpdateShaderVariablesGlobalCB$BurstManaged(ReadableShaderVariablesGlobal* cb, in FrameSettings frameSettings, in AntialiasingMode antialiasingMode, in CameraType cameraType, in ReadableViewConstants* mainViewConstants, in float4x4 vectorParams, in float4x4 vectorParams2, in float4x4 vectorParams3, in float4* frustumPlaneEquations, in float taaSharpenStrength, in int taaFrameIndex, in int colorPyramidHistoryMipCount, in float globalMipBias, in float time, in float lastTime, in int frameCount, in int viewCount, in float probeRangeCompressionFactor, in float deExposureMultiplier, in float4 screenCoordScaleBias, in bool useScreenSizeOverride, in float4 screenSizeOverride) { //IL_0001: 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_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0029: 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) //IL_0053: 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_006a: 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) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_00fc: Unknown result type (might be due to invalid IL or missing references) //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_0109: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Unknown result type (might be due to invalid IL or missing references) //IL_011d: Unknown result type (might be due to invalid IL or missing references) //IL_0125: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Unknown result type (might be due to invalid IL or missing references) //IL_0134: Unknown result type (might be due to invalid IL or missing references) //IL_0139: Unknown result type (might be due to invalid IL or missing references) //IL_013e: Unknown result type (might be due to invalid IL or missing references) //IL_0146: Unknown result type (might be due to invalid IL or missing references) //IL_014b: Unknown result type (might be due to invalid IL or missing references) //IL_0155: Unknown result type (might be due to invalid IL or missing references) //IL_015a: Unknown result type (might be due to invalid IL or missing references) //IL_015f: Unknown result type (might be due to invalid IL or missing references) //IL_0167: Unknown result type (might be due to invalid IL or missing references) //IL_016c: Unknown result type (might be due to invalid IL or missing references) //IL_0176: Unknown result type (might be due to invalid IL or missing references) //IL_017b: Unknown result type (might be due to invalid IL or missing references) //IL_0180: Unknown result type (might be due to invalid IL or missing references) //IL_0188: Unknown result type (might be due to invalid IL or missing references) //IL_018d: Unknown result type (might be due to invalid IL or missing references) //IL_0197: Unknown result type (might be due to invalid IL or missing references) //IL_019c: Unknown result type (might be due to invalid IL or missing references) //IL_01a1: Unknown result type (might be due to invalid IL or missing references) //IL_01a9: Unknown result type (might be due to invalid IL or missing references) //IL_01ae: Unknown result type (might be due to invalid IL or missing references) //IL_01c0: Unknown result type (might be due to invalid IL or missing references) //IL_01c5: Unknown result type (might be due to invalid IL or missing references) //IL_01d8: Unknown result type (might be due to invalid IL or missing references) //IL_01dd: Unknown result type (might be due to invalid IL or missing references) //IL_01ef: Unknown result type (might be due to invalid IL or missing references) //IL_01f4: Unknown result type (might be due to invalid IL or missing references) //IL_020f: Unknown result type (might be due to invalid IL or missing references) //IL_0214: Unknown result type (might be due to invalid IL or missing references) //IL_0219: Unknown result type (might be due to invalid IL or missing references) //IL_0221: Unknown result type (might be due to invalid IL or missing references) //IL_0226: Unknown result type (might be due to invalid IL or missing references) //IL_0230: Unknown result type (might be due to invalid IL or missing references) //IL_0235: Unknown result type (might be due to invalid IL or missing references) //IL_023a: Unknown result type (might be due to invalid IL or missing references) //IL_0242: Unknown result type (might be due to invalid IL or missing references) //IL_0247: Unknown result type (might be due to invalid IL or missing references) //IL_0251: Unknown result type (might be due to invalid IL or missing references) //IL_0256: Unknown result type (might be due to invalid IL or missing references) //IL_025b: Unknown result type (might be due to invalid IL or missing references) //IL_0263: Unknown result type (might be due to invalid IL or missing references) //IL_0268: Unknown result type (might be due to invalid IL or missing references) //IL_0272: Unknown result type (might be due to invalid IL or missing references) //IL_0277: Unknown result type (might be due to invalid IL or missing references) //IL_027c: Unknown result type (might be due to invalid IL or missing references) //IL_0284: Unknown result type (might be due to invalid IL or missing references) //IL_0289: Unknown result type (might be due to invalid IL or missing references) //IL_0293: Unknown result type (might be due to invalid IL or missing references) //IL_0298: Unknown result type (might be due to invalid IL or missing references) //IL_029d: Unknown result type (might be due to invalid IL or missing references) //IL_02db: Unknown result type (might be due to invalid IL or missing references) //IL_02e0: Unknown result type (might be due to invalid IL or missing references) //IL_02e5: Unknown result type (might be due to invalid IL or missing references) //IL_02ed: Unknown result type (might be due to invalid IL or missing references) //IL_02f2: Unknown result type (might be due to invalid IL or missing references) //IL_02fc: Unknown result type (might be due to invalid IL or missing references) //IL_0301: Unknown result type (might be due to invalid IL or missing references) //IL_0306: Unknown result type (might be due to invalid IL or missing references) //IL_0362: Unknown result type (might be due to invalid IL or missing references) //IL_0367: Unknown result type (might be due to invalid IL or missing references) //IL_036c: Unknown result type (might be due to invalid IL or missing references) //IL_03a4: Unknown result type (might be due to invalid IL or missing references) //IL_03a9: Unknown result type (might be due to invalid IL or missing references) //IL_03ae: Unknown result type (might be due to invalid IL or missing references) //IL_03e6: Unknown result type (might be due to invalid IL or missing references) //IL_03eb: Unknown result type (might be due to invalid IL or missing references) //IL_03f0: Unknown result type (might be due to invalid IL or missing references) //IL_0406: Unknown result type (might be due to invalid IL or missing references) //IL_040b: Unknown result type (might be due to invalid IL or missing references) //IL_0410: Unknown result type (might be due to invalid IL or missing references) //IL_042e: Unknown result type (might be due to invalid IL or missing references) //IL_0433: Unknown result type (might be due to invalid IL or missing references) //IL_0438: Unknown result type (might be due to invalid IL or missing references) //IL_0456: Unknown result type (might be due to invalid IL or missing references) //IL_045b: Unknown result type (might be due to invalid IL or missing references) //IL_0460: Unknown result type (might be due to invalid IL or missing references) //IL_049b: Unknown result type (might be due to invalid IL or missing references) //IL_04a0: Unknown result type (might be due to invalid IL or missing references) //IL_04ad: Unknown result type (might be due to invalid IL or missing references) //IL_04b2: Unknown result type (might be due to invalid IL or missing references) //IL_04ca: Unknown result type (might be due to invalid IL or missing references) //IL_04cf: Unknown result type (might be due to invalid IL or missing references) //IL_04d4: Unknown result type (might be due to invalid IL or missing references) //IL_04e9: Unknown result type (might be due to invalid IL or missing references) //IL_04ee: Unknown result type (might be due to invalid IL or missing references) //IL_04e0: Unknown result type (might be due to invalid IL or missing references) //IL_04f3: Unknown result type (might be due to invalid IL or missing references) FrameSettings val = frameSettings; bool flag = ((FrameSettings)(ref val)).IsEnabled((FrameSettingsField)15) && (int)antialiasingMode == 2 && (int)cameraType == 1; Unsafe.Write(&cb->_ViewMatrix, mainViewConstants->viewMatrix); Unsafe.Write(&cb->_CameraViewMatrix, mainViewConstants->viewMatrix); Unsafe.Write(&cb->_InvViewMatrix, mainViewConstants->invViewMatrix); Unsafe.Write(&cb->_ProjMatrix, mainViewConstants->projMatrix); Unsafe.Write(&cb->_InvProjMatrix, mainViewConstants->invProjMatrix); Unsafe.Write(&cb->_ViewProjMatrix, mainViewConstants->viewProjMatrix); Unsafe.Write(&cb->_CameraViewProjMatrix, mainViewConstants->viewProjMatrix); Unsafe.Write(&cb->_InvViewProjMatrix, mainViewConstants->invViewProjMatrix); Unsafe.Write(&cb->_NonJitteredViewProjMatrix, mainViewConstants->nonJitteredViewProjMatrix); Unsafe.Write(&cb->_PrevViewProjMatrix, mainViewConstants->prevViewProjMatrix); Unsafe.Write(&cb->_PrevInvViewProjMatrix, mainViewConstants->prevInvViewProjMatrix); Unsafe.Write(&cb->_WorldSpaceCameraPos_Internal, Vector4.op_Implicit(mainViewConstants->worldSpaceCameraPos)); Unsafe.Write(&cb->_PrevCamPosRWS_Internal, Vector4.op_Implicit(mainViewConstants->prevWorldSpaceCameraPos)); float4x4 val2 = vectorParams; Unsafe.Write(&cb->_ScreenSize, float4.op_Implicit(((float4x4)(ref val2))[0])); val2 = vectorParams; Unsafe.Write(&cb->_PostProcessScreenSize, float4.op_Implicit(((float4x4)(ref val2))[1])); val2 = vectorParams; Unsafe.Write(&cb->_RTHandleScale, float4.op_Implicit(((float4x4)(ref val2))[2])); val2 = vectorParams; Unsafe.Write(&cb->_RTHandleScaleHistory, float4.op_Implicit(((float4x4)(ref val2))[3])); val2 = vectorParams2; Unsafe.Write(&cb->_RTHandlePostProcessScale, float4.op_Implicit(((float4x4)(ref val2))[0])); val2 = vectorParams2; Unsafe.Write(&cb->_RTHandlePostProcessScaleHistory, float4.op_Implicit(((float4x4)(ref val2))[1])); val2 = vectorParams2; float num = ((float4)(ref ((float4x4)(ref val2))[2]))[0]; val2 = vectorParams2; float num2 = num / ((float4)(ref ((float4x4)(ref val2))[2]))[1]; val2 = vectorParams2; float num3 = ((float4)(ref ((float4x4)(ref val2))[2]))[2]; val2 = vectorParams2; Unsafe.Write(&cb->_DynamicResolutionFullscreenScale, float4.op_Implicit(new float4(num2, num3 / ((float4)(ref ((float4x4)(ref val2))[2]))[3], 0f, 0f))); val2 = vectorParams2; Unsafe.Write(&cb->_ZBufferParams, float4.op_Implicit(((float4x4)(ref val2))[3])); val2 = vectorParams3; Unsafe.Write(&cb->_ProjectionParams, float4.op_Implicit(((float4x4)(ref val2))[0])); val2 = vectorParams3; Unsafe.Write(&cb->unity_OrthoParams, float4.op_Implicit(((float4x4)(ref val2))[1])); val2 = vectorParams3; Unsafe.Write(&cb->_ScreenParams, float4.op_Implicit(((float4x4)(ref val2))[2])); UnsafeUtility.MemCpy((void*)cb->_FrustumPlanes, (void*)frustumPlaneEquations, (long)(Unsafe.SizeOf<float4>() * 6)); Unsafe.Write(&cb->_TaaFrameInfo, float4.op_Implicit(new float4(taaSharpenStrength, 0f, (float)taaFrameIndex, flag ? 1f : 0f))); val2 = vectorParams3; Unsafe.Write(&cb->_TaaJitterStrength, float4.op_Implicit(((float4x4)(ref val2))[3])); cb->_ColorPyramidLodCount = colorPyramidHistoryMipCount; cb->_GlobalMipBias = globalMipBias; cb->_GlobalMipBiasPow2 = (float)math.pow(2.0, (double)globalMipBias); float deltaTime = Time.deltaTime; float smoothDeltaTime = Time.smoothDeltaTime; Unsafe.Write(&cb->_Time, float4.op_Implicit(new float4(time * 0.05f, time, time * 2f, time * 3f))); Unsafe.Write(&cb->_SinTime, float4.op_Implicit(new float4(math.sin(time * 0.125f), math.sin(time * 0.25f), math.sin(time * 0.5f), math.sin(time)))); Unsafe.Write(&cb->_CosTime, float4.op_Implicit(new float4(math.cos(time * 0.125f), math.cos(time * 0.25f), math.cos(time * 0.5f), math.cos(time)))); Unsafe.Write(&cb->unity_DeltaTime, float4.op_Implicit(new float4(deltaTime, 1f / deltaTime, smoothDeltaTime, 1f / smoothDeltaTime))); Unsafe.Write(&cb->_TimeParameters, float4.op_Implicit(new float4(time, math.sin(time), math.cos(time), 0f))); Unsafe.Write(&cb->_LastTimeParameters, float4.op_Implicit(new float4(lastTime, math.sin(lastTime), math.cos(lastTime), 0f))); cb->_FrameCount = frameCount; cb->_XRViewCount = (uint)viewCount; cb->_ProbeExposureScale = 1f / math.max(probeRangeCompressionFactor, 1E-06f); cb->_DeExposureMultiplier = deExposureMultiplier; val = frameSettings; int transparentCameraOnlyMotionVectors; if (((FrameSettings)(ref val)).IsEnabled((FrameSettingsField)10)) { val = frameSettings; if (!((FrameSettings)(ref val)).IsEnabled((FrameSettingsField)16)) { transparentCameraOnlyMotionVectors = 1; goto IL_04c2; } } transparentCameraOnlyMotionVectors = 0; goto IL_04c2; IL_04c2: cb->_TransparentCameraOnlyMotionVectors = transparentCameraOnlyMotionVectors; Unsafe.Write(&cb->_ScreenCoordScaleBias, float4.op_Implicit(screenCoordScaleBias)); Unsafe.Write(&cb->_ScreenSizeOverride, useScreenSizeOverride ? float4.op_Implicit(screenSizeOverride) : cb->_ScreenSize); } } internal static class $BurstDirectCallInitializer { [RuntimeInitializeOnLoadMethod(/*Could not decode attribute arguments.*/)] private static void Initialize() { Testing.Log_00000004$BurstDirectCall.Initialize(); Testing.Test_00000005$BurstDirectCall.Initialize(); Testing.UpdateShaderVariablesGlobalCB_00000006$BurstDirectCall.Initialize(); } }
BepInEx/plugins/me.loaforc.soundapi.dll
Decompiled 3 months agousing System; using System.Buffers; using System.Collections.Concurrent; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Text; using System.Threading; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using Cysharp.Threading.Tasks; using Cysharp.Threading.Tasks.CompilerServices; using HarmonyLib; using Microsoft.CodeAnalysis; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using UnityEngine; using UnityEngine.Networking; using UnityEngine.SceneManagement; using loaforcsSoundAPI.API; using loaforcsSoundAPI.Behaviours; using loaforcsSoundAPI.Data; using loaforcsSoundAPI.LethalCompany; using loaforcsSoundAPI.LethalCompany.Conditions; using loaforcsSoundAPI.Patches; using loaforcsSoundAPI.Providers.Conditions; using loaforcsSoundAPI.Providers.Formats; using loaforcsSoundAPI.Utils; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: IgnoresAccessChecksTo("AmazingAssets.TerrainToMesh")] [assembly: IgnoresAccessChecksTo("Assembly-CSharp-firstpass")] [assembly: IgnoresAccessChecksTo("Assembly-CSharp")] [assembly: IgnoresAccessChecksTo("ClientNetworkTransform")] [assembly: IgnoresAccessChecksTo("DissonanceVoip")] [assembly: IgnoresAccessChecksTo("Facepunch Transport for Netcode for GameObjects")] [assembly: IgnoresAccessChecksTo("Facepunch.Steamworks.Win64")] [assembly: IgnoresAccessChecksTo("Unity.AI.Navigation")] [assembly: IgnoresAccessChecksTo("Unity.Animation.Rigging")] [assembly: IgnoresAccessChecksTo("Unity.Animation.Rigging.DocCodeExamples")] [assembly: IgnoresAccessChecksTo("Unity.Burst")] [assembly: IgnoresAccessChecksTo("Unity.Burst.Unsafe")] [assembly: IgnoresAccessChecksTo("Unity.Collections")] [assembly: IgnoresAccessChecksTo("Unity.Collections.LowLevel.ILSupport")] [assembly: IgnoresAccessChecksTo("Unity.InputSystem")] [assembly: IgnoresAccessChecksTo("Unity.InputSystem.ForUI")] [assembly: IgnoresAccessChecksTo("Unity.Jobs")] [assembly: IgnoresAccessChecksTo("Unity.Mathematics")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.Common")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.MetricTypes")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStats")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Component")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Configuration")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Implementation")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsReporting")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetworkProfiler.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetworkSolutionInterface")] [assembly: IgnoresAccessChecksTo("Unity.Netcode.Components")] [assembly: IgnoresAccessChecksTo("Unity.Netcode.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.Networking.Transport")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Csg")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.KdTree")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Poly2Tri")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Stl")] [assembly: IgnoresAccessChecksTo("Unity.Profiling.Core")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.ShaderLibrary")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Config.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.ShaderGraph.ShaderGraphLibrary")] [assembly: IgnoresAccessChecksTo("Unity.Services.Authentication")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Analytics")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Configuration")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Device")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Environments")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Environments.Internal")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Internal")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Networking")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Registration")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Scheduler")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Telemetry")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Threading")] [assembly: IgnoresAccessChecksTo("Unity.Services.QoS")] [assembly: IgnoresAccessChecksTo("Unity.Services.Relay")] [assembly: IgnoresAccessChecksTo("Unity.TextMeshPro")] [assembly: IgnoresAccessChecksTo("Unity.Timeline")] [assembly: IgnoresAccessChecksTo("Unity.VisualEffectGraph.Runtime")] [assembly: IgnoresAccessChecksTo("UnityEngine.ARModule")] [assembly: IgnoresAccessChecksTo("UnityEngine.NVIDIAModule")] [assembly: IgnoresAccessChecksTo("UnityEngine.UI")] [assembly: AssemblyCompany("me.loaforc.soundapi")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.1.7.0")] [assembly: AssemblyInformationalVersion("1.1.7+db5507b4bca7431455f856c23063a1fa6eb0843a")] [assembly: AssemblyProduct("loaforcsSoundAPI")] [assembly: AssemblyTitle("me.loaforc.soundapi")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.1.7.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace loaforcsSoundAPI { public static class SoundLoader { public static bool GetAudioClip(string packName, string folder, string soundName, out AudioClip clip) { if (SoundPluginConfig.LOGGING_LEVEL.Value == SoundPluginConfig.LoggingLevel.IM_GOING_TO_LOSE_IT) { SoundPlugin.logger.LogLosingIt("Loading sound: " + packName + "/" + folder + "/" + soundName); } clip = null; if (!GetAudioPath(packName, folder, soundName, out var path)) { ((ManualLogSource)SoundPlugin.logger).LogError((object)"Failed getting path, check above for more detailed error!"); return false; } clip = SoundAPI.FileFormats[Path.GetExtension(path).ToLower()].LoadAudioClip(path); if ((Object)(object)clip == (Object)null) { ((ManualLogSource)SoundPlugin.logger).LogError((object)"Failed getting clip from disk, check above for more detailed error!"); return false; } if (string.IsNullOrEmpty(clip.GetName())) { ((Object)clip).name = soundName; } return true; } private static bool GetAudioPath(string packName, string folder, string soundName, out string path) { string text = Path.Combine(Paths.PluginPath, packName, "sounds", folder); path = Path.Combine(text, soundName); if (!Directory.Exists(text)) { ((ManualLogSource)SoundPlugin.logger).LogError((object)(text + " doesn't exist! (failed loading: " + soundName + ")")); path = null; return false; } if (!File.Exists(path)) { ((ManualLogSource)SoundPlugin.logger).LogError((object)(path + " is a valid folder but the sound contained doesn't exist!")); path = null; return false; } return true; } } [BepInPlugin("me.loaforc.soundapi", "loaforcsSoundAPI", "1.1.7")] public class SoundPlugin : BaseUnityPlugin { internal static List<SoundPack> SoundPacks = new List<SoundPack>(); internal List<UniTask> loadingTasks = new List<UniTask>(); public static SoundPlugin Instance { get; private set; } internal static LoafLogger logger { get; private set; } [Obsolete] internal static ManualLogSource Logger => (ManualLogSource)(object)logger; private void Awake() { //IL_0229: Unknown result type (might be due to invalid IL or missing references) logger = new LoafLogger("me.loaforc.soundapi"); Logger.Sources.Add((ILogSource)(object)logger); Instance = this; ((ManualLogSource)logger).LogInfo((object)"Patching..."); Harmony val = Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), "me.loaforc.soundapi"); ((ManualLogSource)logger).LogInfo((object)"Setting up config..."); new SoundPluginConfig(((BaseUnityPlugin)this).Config); ((ManualLogSource)logger).LogInfo((object)("Logging Level at: " + SoundPluginConfig.LOGGING_LEVEL.Value)); ((ManualLogSource)logger).LogInfo((object)"Searching for soundpacks..."); string[] directories = Directory.GetDirectories(Paths.PluginPath); ((ManualLogSource)logger).LogInfo((object)"Beginning Bindings"); ((ManualLogSource)logger).LogInfo((object)"Bindings => General => Audio Formats"); SoundAPI.RegisterAudioFormatProvider(".mp3", new Mp3AudioFormat()); SoundAPI.RegisterAudioFormatProvider(".ogg", new OggAudioFormat()); SoundAPI.RegisterAudioFormatProvider(".wav", new WavAudioFormat()); ((ManualLogSource)logger).LogInfo((object)"Bindings => General => Conditions"); SoundAPI.RegisterConditionProvider("config", new ConfigCondition()); SoundAPI.RegisterConditionProvider("mod_installed", new ModInstalledConditionProvider()); SoundAPI.RegisterConditionProvider("and", new AndCondition()); SoundAPI.RegisterConditionProvider("not", new NotCondition()); SoundAPI.RegisterConditionProvider("or", new OrCondition()); LethalCompanyBindings.Bind(); string[] array = directories; foreach (string text in array) { string[] directories2 = Directory.GetDirectories(text); foreach (string text2 in directories2) { string path = Path.Combine(text2, "sound_pack.json"); ((ManualLogSource)logger).LogDebug((object)text2); if (File.Exists(path)) { SoundPacks.Add(new SoundPack(text2)); break; } } string path2 = Path.Combine(text, "sound_pack.json"); if (File.Exists(path2)) { SoundPacks.Add(new SoundPack(text)); } } ((ManualLogSource)logger).LogInfo((object)"Starting up JoinableThreadPool."); foreach (SoundPack soundPack in SoundPacks) { if (SoundPluginConfig.ENABLE_MULTITHREADING.Value) { loadingTasks.Add(soundPack.AsyncQueueLoad()); } else { soundPack.QueueLoad(); } } logger.LogLosingIt($"Created {loadingTasks.Count} loading tasks!"); ((ManualLogSource)logger).LogInfo((object)"Registering onSceneLoaded"); SceneManager.sceneLoaded += delegate(Scene scene, LoadSceneMode __) { //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) logger.LogLosingIt("NEW SCENE LOADED! Scanning for inital playOnAwake sounds..."); logger.LogLosingIt("scene.name: " + ((Scene)(ref scene)).name); AudioSourcePatch.TrimmedGameobjectNames.Clear(); AudioSource[] array2 = Object.FindObjectsOfType<AudioSource>(true); foreach (AudioSource val2 in array2) { if (!(((Component)val2).gameObject.scene != scene)) { if (val2.playOnAwake) { logger.LogLosingIt($"source: {val2}"); logger.LogLosingIt($"source.gameObject: {((Component)val2).gameObject}"); logger.LogLosingIt($"source.clip: {(Object)(object)val2.clip == (Object)null}"); logger.LogLosingIt(((Object)((Component)val2).gameObject).name + ":" + (((Object)(object)val2.clip == (Object)null) ? "null" : ((Object)val2.clip).name) + " calling Stop() because its play on awake."); val2.Stop(); } AudioSourceReplaceHelper audioSourceReplaceHelper = ((Component)val2).gameObject.AddComponent<AudioSourceReplaceHelper>(); audioSourceReplaceHelper.source = val2; } } }; ((ManualLogSource)logger).LogInfo((object)"me.loaforc.soundapi:1.1.7 has loaded!"); } internal void EnsureSoundsAreLoaded() { //IL_002c: 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_007b: Unknown result type (might be due to invalid IL or missing references) if (!SoundPluginConfig.ENABLE_MULTITHREADING.Value) { return; } ((ManualLogSource)logger).LogInfo((object)"Ensuring all sounds are loaded..."); foreach (UniTask loadingTask in loadingTasks) { UniTask current = loadingTask; int num = 0; while (!UniTaskStatusExtensions.IsCompleted(((UniTask)(ref current)).Status)) { Thread.Sleep(100); num++; logger.LogLosingIt("Still waiting..."); if (num > 100) { ((ManualLogSource)logger).LogWarning((object)"AAAAAAAAAAAAAAAAAAAAAAA ITS BEEN LONGER THAN 10 SECONDS THIS ISN'T GOODD!!"); } if (num % 10 == 0) { ((ManualLogSource)logger).LogInfo((object)"Things are still happening don't worry."); } } } ((ManualLogSource)logger).LogInfo((object)"it's all good :3"); } } internal class SoundPluginConfig { internal enum LoggingLevel { NORMAL, EXTENDED, IM_GOING_TO_LOSE_IT } internal static ConfigEntry<bool> ENABLE_MULTITHREADING; internal static ConfigEntry<int> THREADPOOL_MAX_THREADS; internal static ConfigEntry<bool> SKIP_LOADING_UNUSED_SOUNDS; internal static ConfigEntry<LoggingLevel> LOGGING_LEVEL; internal static ConfigEntry<bool> EXPERIMENTAL_HANDLE_LOOPING_SOUNDS; private static ConfigEntry<int> CONFIG_VERSION; internal SoundPluginConfig(ConfigFile config) { ENABLE_MULTITHREADING = config.Bind<bool>("SoundLoading", "Multithreading", true, "Whether or not to use multithreading when loading a sound pack. If you haven't been told that you should disable multithreading, you probably don't need to!\nThis setting may not be needed with the new 1.0.0 rewrite of multithreading."); THREADPOOL_MAX_THREADS = config.Bind<int>("SoundLoading", "MaxThreadsInThreadPool", 4, "Max amount of threads the loading thread pool can create at once.\nIncreasing this number will decrease loading of non-startup packs but may be unsupported by your CPU."); SKIP_LOADING_UNUSED_SOUNDS = config.Bind<bool>("SoundLoading", "SkipLikelyUnusedSounds", true, "When using only a config loaforcsSoundAPI will be able to skip loading some sounds. This means mods that let you change config mid-game will not take affect until a restart."); LOGGING_LEVEL = config.Bind<LoggingLevel>("Logging", "LoggingLevel", LoggingLevel.NORMAL, "What level should sound api log at?"); EXPERIMENTAL_HANDLE_LOOPING_SOUNDS = config.Bind<bool>("Experimental", "HandleLoopingSounds", false, "Enable experimental support to replace sounds everytime they loop?"); CONFIG_VERSION = config.Bind<int>("INTERNAL_DO_NOT_TOUCH", "CONFIG_VERSION_DO_NOT_TOUCH", 1, "Don't touch this. This is for internal use only."); if (CONFIG_VERSION.Value == 1) { CONFIG_VERSION.Value = 2; if (THREADPOOL_MAX_THREADS.Value == 32) { THREADPOOL_MAX_THREADS.Value = 4; ((ManualLogSource)SoundPlugin.logger).LogInfo((object)"Migrated config info."); } } } } public static class MyPluginInfo { public const string PLUGIN_GUID = "me.loaforc.soundapi"; public const string PLUGIN_NAME = "loaforcsSoundAPI"; public const string PLUGIN_VERSION = "1.1.7"; } } namespace loaforcsSoundAPI.Utils { public static class ExtensionMethods { public static T GetValueOrDefault<T>(this JObject jsonObject, string key, T defaultValue = default(T)) { JToken val = ((jsonObject != null) ? jsonObject.GetValue(key, StringComparison.OrdinalIgnoreCase) : null); if (val == null) { return defaultValue; } return val.ToObject<T>(); } public static TValue GetValueOrDefault<TKey, TValue>(this Dictionary<TKey, TValue> dictionary, TKey key, TValue defaultValue) { if (!dictionary.TryGetValue(key, out var value)) { return defaultValue; } return value; } public static TValue GetValueOrDefault<TKey, TValue>(this Dictionary<TKey, TValue> dictionary, TKey key, Func<TValue> defaultValueProvider) { if (!dictionary.TryGetValue(key, out var value)) { return defaultValueProvider(); } return value; } public static bool IsNumber(this object @object) { if (@object is int || @object is double || @object is float) { return true; } return false; } } internal class LoafLogger : ManualLogSource { public LoafLogger(string sourceName) : base(sourceName) { } internal void LogExtended(object message) { if (SoundPluginConfig.LOGGING_LEVEL.Value == SoundPluginConfig.LoggingLevel.EXTENDED || SoundPluginConfig.LOGGING_LEVEL.Value == SoundPluginConfig.LoggingLevel.IM_GOING_TO_LOSE_IT) { ((ManualLogSource)this).LogDebug((object)$"[EXTENDED] {message}"); } } internal void LogLosingIt(object message) { if (SoundPluginConfig.LOGGING_LEVEL.Value == SoundPluginConfig.LoggingLevel.IM_GOING_TO_LOSE_IT) { ((ManualLogSource)this).LogDebug((object)$"[IM_GOING_TO_LOSE_IT] {message}"); } } internal void LogTraceback() { LogLosingIt(new StackTrace().ToString()); } } } namespace loaforcsSoundAPI.Providers.Formats { internal class Mp3AudioFormat : AudioFormatProvider { public override AudioClip LoadAudioClip(string path) { return LoadFromUWR(path, (AudioType)24); } } internal class OggAudioFormat : AudioFormatProvider { public override AudioClip LoadAudioClip(string path) { return LoadFromUWR(path, (AudioType)14); } } internal class WavAudioFormat : AudioFormatProvider { public override AudioClip LoadAudioClip(string path) { return LoadFromUWR(path, (AudioType)20); } } } namespace loaforcsSoundAPI.Providers.Conditions { internal class AndCondition : ConditionProvider { public override bool Evaluate(SoundReplaceGroup pack, JObject conditionDef) { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Expected O, but got Unknown foreach (JObject item in (IEnumerable<JToken>)conditionDef["conditions"]) { JObject val = item; if (!SoundAPI.ConditionProviders[(string)val["type"]].Evaluate(pack, val)) { return false; } } return true; } } internal class ConfigCondition : ConditionProvider { public override bool Evaluate(SoundReplaceGroup group, JObject conditionDef) { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Invalid comparison between Unknown and I4 //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Invalid comparison between Unknown and I4 if (!conditionDef.ContainsKey("value")) { return group.pack.GetConfigOption<bool>((string)conditionDef["config"]); } if ((int)conditionDef["value"].Type == 9) { return group.pack.GetConfigOption<bool>((string)conditionDef["config"]) == (bool)conditionDef["value"]; } object rawConfigOption = group.pack.GetRawConfigOption((string)conditionDef["config"]); if ((int)conditionDef["value"].Type == 8) { if (rawConfigOption is ConfigEntry<float>) { return EvaluateRangeOperator((rawConfigOption as ConfigEntry<float>).Value, (string)conditionDef["value"]); } return (string)rawConfigOption == (string)conditionDef["value"]; } return false; } } internal class ModInstalledConditionProvider : ConditionProvider { public override bool Evaluate(SoundReplaceGroup group, JObject conditionDef) { return Chainloader.PluginInfos.ContainsKey((string)conditionDef["value"]); } } internal class NotCondition : ConditionProvider { public override bool Evaluate(SoundReplaceGroup pack, JObject conditionDef) { ConditionProvider conditionProvider = SoundAPI.ConditionProviders[(string)conditionDef["condition"][(object)"type"]]; JToken obj = conditionDef["condition"]; return !conditionProvider.Evaluate(pack, (JObject)(object)((obj is JObject) ? obj : null)); } } internal class OrCondition : ConditionProvider { public override bool Evaluate(SoundReplaceGroup pack, JObject conditionDef) { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Expected O, but got Unknown foreach (JObject item in (IEnumerable<JToken>)conditionDef["conditions"]) { JObject val = item; if (SoundAPI.ConditionProviders[(string)val["type"]].Evaluate(pack, val)) { return true; } } return false; } } } namespace loaforcsSoundAPI.Patches { [HarmonyPatch(typeof(AudioSource))] internal static class AudioSourcePatch { private const int TOKEN_PARENT_NAME = 0; private const int TOKEN_OBJECT_NAME = 1; private const int TOKEN_CLIP_NAME = 2; private static string[] SUFFIXES_TO_REMOVE = new string[4] { "(Clone)", "(1)", "(2)", "(3)" }; internal static Dictionary<int, string> TrimmedGameobjectNames = new Dictionary<int, string>(); private static StringBuilder builder = new StringBuilder(); [HarmonyPrefix] [HarmonyPatch("Play", new Type[] { })] [HarmonyPatch("Play", new Type[] { typeof(ulong) })] [HarmonyPatch("Play", new Type[] { typeof(double) })] private static bool Play(AudioSource __instance) { if (TryReplaceAudio(__instance, __instance.clip, out var replacement)) { if ((Object)(object)replacement == (Object)null) { return false; } __instance.clip = replacement; } if (AudioSourceReplaceHelper.helpers.TryGetValue(__instance, out var value)) { value._isPlaying = true; } return true; } [HarmonyPrefix] [HarmonyPatch("PlayOneShot", new Type[] { typeof(AudioClip), typeof(float) })] private static bool PlayOneShot(AudioSource __instance, ref AudioClip clip) { if (TryReplaceAudio(__instance, clip, out var replacement)) { if ((Object)(object)replacement == (Object)null) { return false; } clip = replacement; } return true; } [HarmonyPostfix] [HarmonyPatch("Stop", new Type[] { typeof(bool) })] private static void UpdateIsPlayingForHelper(AudioSource __instance) { if (SoundPluginConfig.EXPERIMENTAL_HANDLE_LOOPING_SOUNDS.Value && AudioSourceReplaceHelper.helpers.TryGetValue(__instance, out var value) && value._isPlaying) { value._isPlaying = false; if (SoundPluginConfig.LOGGING_LEVEL.Value == SoundPluginConfig.LoggingLevel.IM_GOING_TO_LOSE_IT) { SoundPlugin.logger.LogLosingIt(".Stop() updated ._isPlaying to false"); } } } [HarmonyPrefix] [HarmonyPatch(/*Could not decode attribute arguments.*/)] private static bool SetAudioSourceLooping(AudioSource __instance, bool value) { if (!SoundPluginConfig.EXPERIMENTAL_HANDLE_LOOPING_SOUNDS.Value) { return true; } if (AudioSourceReplaceHelper.helpers.TryGetValue(__instance, out var value2)) { if (SoundPluginConfig.LOGGING_LEVEL.Value == SoundPluginConfig.LoggingLevel.IM_GOING_TO_LOSE_IT) { SoundPlugin.logger.LogLosingIt($"updating looping for {((Component)__instance).gameObject}, value: {value}"); } value2.Loop = value; return false; } return true; } [HarmonyPostfix] [HarmonyPatch(/*Could not decode attribute arguments.*/)] private static void GetAudioSourceLooping(AudioSource __instance, ref bool __result) { if (SoundPluginConfig.EXPERIMENTAL_HANDLE_LOOPING_SOUNDS.Value && AudioSourceReplaceHelper.helpers.TryGetValue(__instance, out var value)) { if (SoundPluginConfig.LOGGING_LEVEL.Value == SoundPluginConfig.LoggingLevel.IM_GOING_TO_LOSE_IT) { SoundPlugin.logger.LogLosingIt("swapping out result of AudioSource.loop :3"); } __result = value.Loop; } } internal static bool TryReplaceAudio(AudioSource __instance, AudioClip clip, out AudioClip replacement) { replacement = null; if ((Object)(object)((Component)__instance).gameObject == (Object)null) { if (SoundPluginConfig.LOGGING_LEVEL.Value == SoundPluginConfig.LoggingLevel.IM_GOING_TO_LOSE_IT) { SoundPlugin.logger.LogLosingIt("AudioSource has no GameObject!!"); } return false; } if (AudioSourceReplaceHelper.helpers.TryGetValue(__instance, out var value) && value.DisableReplacing) { return false; } string[] name = ArrayPool<string>.Shared.Rent(3); if (!TryProcessName(ref name, __instance, clip)) { ArrayPool<string>.Shared.Return(name); return false; } if (!TryGetReplacementClip(name, out var collection, out var clip2)) { ArrayPool<string>.Shared.Return(name); return false; } ArrayPool<string>.Shared.Return(name); if ((Object)(object)value == (Object)null) { if (__instance.playOnAwake) { __instance.Stop(); } value = ((Component)__instance).gameObject.AddComponent<AudioSourceReplaceHelper>(); value.source = __instance; } ((Object)clip2).name = ((Object)clip).name; replacement = clip2; value.replacedWith = collection; return true; } private static string TrimGameObjectName(GameObject gameObject) { if (TrimmedGameobjectNames.ContainsKey(((object)gameObject).GetHashCode())) { return TrimmedGameobjectNames[((object)gameObject).GetHashCode()]; } builder.Clear(); builder.Append(((Object)gameObject).name); string[] sUFFIXES_TO_REMOVE = SUFFIXES_TO_REMOVE; foreach (string oldValue in sUFFIXES_TO_REMOVE) { builder.Replace(oldValue, string.Empty); } int num = builder.Length; while (num > 0 && builder[num - 1] == ' ') { num--; } builder.Remove(num, builder.Length - num); string text = builder.ToString(); TrimmedGameobjectNames[((object)gameObject).GetHashCode()] = text; if (SoundPluginConfig.LOGGING_LEVEL.Value == SoundPluginConfig.LoggingLevel.IM_GOING_TO_LOSE_IT) { SoundPlugin.logger.LogLosingIt("trimmed `" + ((Object)gameObject).name + "` to `" + text + "`"); } return text; } private static bool TryProcessName(ref string[] name, AudioSource source, AudioClip clip) { if ((Object)(object)clip == (Object)null) { return false; } if ((Object)(object)((Component)source).transform.parent == (Object)null) { name[0] = "*"; } else { name[0] = TrimGameObjectName(((Component)((Component)source).transform.parent).gameObject); } name[1] = TrimGameObjectName(((Component)source).gameObject); name[2] = ((Object)clip).name; return true; } private static bool TryGetReplacementClip(string[] name, out SoundReplacementCollection collection, out AudioClip clip) { collection = null; clip = null; if (name == null) { return false; } SoundPluginConfig.LoggingLevel value = SoundPluginConfig.LOGGING_LEVEL.Value; if ((uint)(value - 1) <= 1u) { SoundPlugin.logger.LogExtended("Getting replacement for: " + string.Join(":", name)); } if (!SoundAPI.SoundReplacements.TryGetValue(name[2], out var value2)) { return false; } value2 = (from x in value2 where x.MatchesWith(name) where x.TestCondition() select x).ToList(); if (value2.Count == 0) { return false; } collection = value2[Random.Range(0, value2.Count)]; List<SoundReplacement> list = collection.replacements.Where((SoundReplacement x) => x.TestCondition()).ToList(); if (list.Count == 0) { return false; } int totalWeight = 0; list.ForEach(delegate(SoundReplacement replacement) { totalWeight += replacement.Weight; }); int num = Random.Range(0, totalWeight); int index = 0; while (num > 0) { index = Random.Range(0, list.Count); num -= Random.Range(1, list[index].Weight); } clip = list[index].Clip; return true; } } [HarmonyPatch(typeof(GameObject))] internal class GameObjectPatch { [HarmonyPostfix] [HarmonyPatch("AddComponent", new Type[] { typeof(Type) })] internal static void NewAudioSource(GameObject __instance, ref Component __result) { if (__result is AudioSource) { Component obj = __result; AudioSource val = (AudioSource)(object)((obj is AudioSource) ? obj : null); if (val.playOnAwake) { val.Stop(); } AudioSourceReplaceHelper audioSourceReplaceHelper = __instance.AddComponent<AudioSourceReplaceHelper>(); audioSourceReplaceHelper.source = val; if (SoundPluginConfig.LOGGING_LEVEL.Value == SoundPluginConfig.LoggingLevel.IM_GOING_TO_LOSE_IT) { SoundPlugin.logger.LogLosingIt("Handled AudioSource created via .AddComponent()"); } } } } [HarmonyPatch(typeof(Logger))] internal static class LoggerPatch { [HarmonyPrefix] [HarmonyPatch("LogMessage")] private static void ReenableAndSaveConfigs(object data) { if (data is string text && text == "Chainloader startup complete") { SoundPlugin.Instance.EnsureSoundsAreLoaded(); } } } [HarmonyPatch(typeof(Object))] internal static class UnityObjectPatch { [HarmonyPostfix] [HarmonyPatch("Instantiate", new Type[] { typeof(Object) })] [HarmonyPatch("Instantiate", new Type[] { typeof(Object), typeof(Transform), typeof(bool) })] [HarmonyPatch("Instantiate", new Type[] { typeof(Object), typeof(Vector3), typeof(Quaternion) })] [HarmonyPatch("Instantiate", new Type[] { typeof(Object), typeof(Vector3), typeof(Quaternion), typeof(Transform) })] internal static void FixPlayOnAwake(ref Object __result) { if (__result is GameObject) { Object obj = __result; CheckGameObject((GameObject)(object)((obj is GameObject) ? obj : null)); } } private static void CheckGameObject(GameObject @object) { //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Expected O, but got Unknown AudioSourceReplaceHelper audioSourceReplaceHelper = default(AudioSourceReplaceHelper); if (@object.TryGetComponent<AudioSourceReplaceHelper>(ref audioSourceReplaceHelper)) { return; } AudioSource[] components = @object.GetComponents<AudioSource>(); AudioSource[] array = components; foreach (AudioSource val in array) { if (val.playOnAwake) { val.Stop(); } AudioSourceReplaceHelper audioSourceReplaceHelper2 = @object.AddComponent<AudioSourceReplaceHelper>(); audioSourceReplaceHelper2.source = val; if (SoundPluginConfig.LOGGING_LEVEL.Value == SoundPluginConfig.LoggingLevel.IM_GOING_TO_LOSE_IT) { SoundPlugin.logger.LogLosingIt("Handled AudioSource created via prefab instantiate"); } } foreach (Transform item in @object.transform) { Transform val2 = item; CheckGameObject(((Component)val2).gameObject); } } } } namespace loaforcsSoundAPI.LethalCompany { internal static class LethalCompanyBindings { internal static void Bind() { SoundAPI.RegisterConditionProvider("LethalCompany:dungeon_name", new DungeonConditionProvider()); SoundAPI.RegisterConditionProvider("LethalCompany:moon_name", new MoonConditionProvider()); SoundAPI.RegisterConditionProvider("LethalCompany:player_health", new PlayerHealthConditionProvider()); SoundAPI.RegisterConditionProvider("LethalCompany:time_of_day", new TimeOfDayConditionProvider()); SoundAPI.RegisterConditionProvider("LethalCompany:player_location", new PlayerLocationTypeConditionProvider()); } } } namespace loaforcsSoundAPI.LethalCompany.Conditions { internal class DungeonConditionProvider : ConditionProvider { public override bool Evaluate(SoundReplaceGroup group, JObject conditionDef) { SoundPlugin.logger.LogExtended("LethalCompany:dungeon_name value: " + ((Object)RoundManager.Instance.dungeonGenerator.Generator.DungeonFlow).name); return Extensions.Value<string>((IEnumerable<JToken>)conditionDef["value"]) == ((Object)RoundManager.Instance.dungeonGenerator.Generator.DungeonFlow).name; } } internal class MoonConditionProvider : ConditionProvider { public override bool Evaluate(SoundReplaceGroup group, JObject conditionDef) { SoundPlugin.logger.LogExtended("LethalCompany:moon_name value: " + ((Object)StartOfRound.Instance.currentLevel).name); return Extensions.Value<string>((IEnumerable<JToken>)conditionDef["value"]) == ((Object)StartOfRound.Instance.currentLevel).name; } } internal class PlayerHealthConditionProvider : ConditionProvider { public override bool Evaluate(SoundReplaceGroup group, JObject conditionDef) { return EvaluateRangeOperator(GameNetworkManager.Instance.localPlayerController.health, Extensions.Value<string>((IEnumerable<JToken>)conditionDef["value"])); } } internal class PlayerLocationTypeConditionProvider : ConditionProvider { public override bool Evaluate(SoundReplaceGroup group, JObject varDef) { //IL_0049: 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) //IL_0060: Unknown result type (might be due to invalid IL or missing references) if (GameNetworkManager.Instance.localPlayerController.isPlayerDead) { return false; } if (GameNetworkManager.Instance.localPlayerController.isInsideFactory) { return Extensions.Value<string>((IEnumerable<JToken>)varDef["value"]) == "inside"; } Bounds bounds = StartOfRound.Instance.shipBounds.bounds; if (((Bounds)(ref bounds)).Contains(((Component)GameNetworkManager.Instance.localPlayerController).transform.position)) { return Extensions.Value<string>((IEnumerable<JToken>)varDef["value"]) == "on_ship"; } return Extensions.Value<string>((IEnumerable<JToken>)varDef["value"]) == "outside"; } } internal class TimeOfDayConditionProvider : ConditionProvider { public override bool Evaluate(SoundReplaceGroup group, JObject varDef) { return Extensions.Value<string>((IEnumerable<JToken>)varDef["value"]) == ((object)(DayMode)(ref TimeOfDay.Instance.dayMode)).ToString().ToLower(); } } } namespace loaforcsSoundAPI.Data { public class SoundPack { [StructLayout(LayoutKind.Auto)] [CompilerGenerated] private struct <AsyncParseReplacer>d__18 : IAsyncStateMachine { public int <>1__state; public AsyncUniTaskMethodBuilder <>t__builder; public SoundPack <>4__this; public string replacer; private Awaiter <>u__1; private void MoveNext() { //IL_0049: 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) //IL_0055: 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) //IL_0019: 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_0032: 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) int num = <>1__state; SoundPack soundPack = <>4__this; try { Awaiter awaiter; if (num != 0) { SwitchToTaskPoolAwaitable val = UniTask.SwitchToTaskPool(); awaiter = ((SwitchToTaskPoolAwaitable)(ref val)).GetAwaiter(); if (!((Awaiter)(ref awaiter)).IsCompleted) { num = (<>1__state = 0); <>u__1 = awaiter; ((AsyncUniTaskMethodBuilder)(ref <>t__builder)).AwaitUnsafeOnCompleted<Awaiter, <AsyncParseReplacer>d__18>(ref awaiter, ref this); return; } } else { awaiter = <>u__1; <>u__1 = default(Awaiter); num = (<>1__state = -1); } ((Awaiter)(ref awaiter)).GetResult(); Thread.Sleep(new Random().Next(100, 500)); soundPack.ParseReplacer(replacer); } catch (Exception exception) { <>1__state = -2; ((AsyncUniTaskMethodBuilder)(ref <>t__builder)).SetException(exception); return; } <>1__state = -2; ((AsyncUniTaskMethodBuilder)(ref <>t__builder)).SetResult(); } void IAsyncStateMachine.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext this.MoveNext(); } [DebuggerHidden] private void SetStateMachine(IAsyncStateMachine stateMachine) { ((AsyncUniTaskMethodBuilder)(ref <>t__builder)).SetStateMachine(stateMachine); } void IAsyncStateMachine.SetStateMachine(IAsyncStateMachine stateMachine) { //ILSpy generated this explicit interface implementation from .override directive in SetStateMachine this.SetStateMachine(stateMachine); } } [StructLayout(LayoutKind.Auto)] [CompilerGenerated] private struct <AsyncQueueLoad>d__17 : IAsyncStateMachine { public int <>1__state; public AsyncUniTaskMethodBuilder <>t__builder; public SoundPack <>4__this; private Stopwatch <loadTime>5__2; private Awaiter <>u__1; private Awaiter <>u__2; private void MoveNext() { //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Unknown result type (might be due to invalid IL or missing references) //IL_0111: Unknown result type (might be due to invalid IL or missing references) //IL_0119: 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) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0021: 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_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: 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_003b: Unknown result type (might be due to invalid IL or missing references) //IL_00f1: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Unknown result type (might be due to invalid IL or missing references) int num = <>1__state; SoundPack soundPack = <>4__this; try { Awaiter awaiter; Awaiter awaiter2; if (num != 0) { if (num == 1) { awaiter = <>u__2; <>u__2 = default(Awaiter); num = (<>1__state = -1); goto IL_0128; } SwitchToTaskPoolAwaitable val = UniTask.SwitchToTaskPool(); awaiter2 = ((SwitchToTaskPoolAwaitable)(ref val)).GetAwaiter(); if (!((Awaiter)(ref awaiter2)).IsCompleted) { num = (<>1__state = 0); <>u__1 = awaiter2; ((AsyncUniTaskMethodBuilder)(ref <>t__builder)).AwaitUnsafeOnCompleted<Awaiter, <AsyncQueueLoad>d__17>(ref awaiter2, ref this); return; } } else { awaiter2 = <>u__1; <>u__1 = default(Awaiter); num = (<>1__state = -1); } ((Awaiter)(ref awaiter2)).GetResult(); string[] array = Directory.GetFiles(Path.Combine(soundPack.PackPath, "replacers")).Select(Path.GetFileName).ToArray(); <loadTime>5__2 = Stopwatch.StartNew(); UniTask val2 = UniTask.WhenAll(EnumerableAsyncExtensions.Select<string>((IEnumerable<string>)array, (Func<string, UniTask>)soundPack.AsyncParseReplacer)); awaiter = ((UniTask)(ref val2)).GetAwaiter(); if (!((Awaiter)(ref awaiter)).IsCompleted) { num = (<>1__state = 1); <>u__2 = awaiter; ((AsyncUniTaskMethodBuilder)(ref <>t__builder)).AwaitUnsafeOnCompleted<Awaiter, <AsyncQueueLoad>d__17>(ref awaiter, ref this); return; } goto IL_0128; IL_0128: ((Awaiter)(ref awaiter)).GetResult(); <loadTime>5__2.Stop(); ((ManualLogSource)SoundPlugin.logger).LogInfo((object)$"Loaded {soundPack.Name}(sound-loading) in {<loadTime>5__2.ElapsedMilliseconds}ms."); } catch (Exception exception) { <>1__state = -2; <loadTime>5__2 = null; ((AsyncUniTaskMethodBuilder)(ref <>t__builder)).SetException(exception); return; } <>1__state = -2; <loadTime>5__2 = null; ((AsyncUniTaskMethodBuilder)(ref <>t__builder)).SetResult(); } void IAsyncStateMachine.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext this.MoveNext(); } [DebuggerHidden] private void SetStateMachine(IAsyncStateMachine stateMachine) { ((AsyncUniTaskMethodBuilder)(ref <>t__builder)).SetStateMachine(stateMachine); } void IAsyncStateMachine.SetStateMachine(IAsyncStateMachine stateMachine) { //ILSpy generated this explicit interface implementation from .override directive in SetStateMachine this.SetStateMachine(stateMachine); } } private static List<SoundPack> LoadedSoundPacks = new List<SoundPack>(); private List<SoundReplaceGroup> replaceGroups = new List<SoundReplaceGroup>(); private Dictionary<string, object> Config = new Dictionary<string, object>(); public string Name { get; private set; } public string PackPath { get; private set; } public IReadOnlyCollection<SoundReplaceGroup> ReplaceGroups => replaceGroups.AsReadOnly(); public T GetConfigOption<T>(string configID) { return ((ConfigEntry<T>)Config[configID]).Value; } internal object GetRawConfigOption(string configID) { return Config[configID]; } public SoundPack(string folder) { //IL_014d: Unknown result type (might be due to invalid IL or missing references) //IL_0154: Expected O, but got Unknown //IL_0172: Unknown result type (might be due to invalid IL or missing references) //IL_0179: Expected O, but got Unknown //IL_01f4: Unknown result type (might be due to invalid IL or missing references) //IL_01f9: Unknown result type (might be due to invalid IL or missing references) //IL_01fb: Unknown result type (might be due to invalid IL or missing references) //IL_01fe: Unknown result type (might be due to invalid IL or missing references) //IL_0214: Expected I4, but got Unknown //IL_0365: Unknown result type (might be due to invalid IL or missing references) ((ManualLogSource)SoundPlugin.logger).LogDebug((object)("Soundpack `" + folder + "` is being loaded.")); Stopwatch stopwatch = Stopwatch.StartNew(); PackPath = Path.Combine(Paths.PluginPath, folder); string text = File.ReadAllText(Path.Combine(PackPath, "sound_pack.json")); object obj = JsonConvert.DeserializeObject(text); JObject val = (JObject)((obj is JObject) ? obj : null); Name = (string)val["name"]; if (string.IsNullOrEmpty(Name)) { ((ManualLogSource)SoundPlugin.logger).LogError((object)("`name` is missing or empty in `" + folder + "/sound_pack.json`")); return; } if (!Directory.Exists(Path.Combine(PackPath, "replacers"))) { ((ManualLogSource)SoundPlugin.logger).LogInfo((object)"You've succesfully made a Sound-Pack! Continue with the tutorial to learn how to begin replacing sounds."); } else if (val.ContainsKey("load_on_startup")) { ((ManualLogSource)SoundPlugin.logger).LogWarning((object)("Soundpack '" + Name + "' is using 'load_on_startup' which is deprecated and doesn't do anything! (If you're the creator, you can safely delete that from your sound_pack.json)")); } if (val.ContainsKey("config")) { Stopwatch stopwatch2 = Stopwatch.StartNew(); ConfigFile val2 = new ConfigFile(Utility.CombinePaths(new string[2] { Paths.ConfigPath, "soundpack." + Name + ".cfg" }), false, MetadataHelper.GetMetadata((object)SoundPlugin.Instance)); foreach (JProperty item in (IEnumerable<JToken>)val["config"]) { JProperty val3 = item; JToken value = val3.Value; JObject val4 = (JObject)(object)((value is JObject) ? value : null); if (!val4.ContainsKey("default")) { ((ManualLogSource)SoundPlugin.logger).LogError((object)("`" + val3.Name + " doesn't have a default value!")); continue; } if (!val4.ContainsKey("description")) { ((ManualLogSource)SoundPlugin.logger).LogWarning((object)("`" + val3.Name + " doesn't have a description, consider adding one!")); } JTokenType type = val4["default"].Type; switch (type - 6) { case 3: Config.Add(val3.Name, val2.Bind<bool>(val3.Name.Split(":")[0], val3.Name.Split(":")[1], (bool)val4["default"], val4.GetValueOrDefault("description", "[no description was provided]"))); break; case 2: Config.Add(val3.Name, val2.Bind<string>(val3.Name.Split(":")[0], val3.Name.Split(":")[1], (string)val4["default"], val4.GetValueOrDefault("description", "[no description was provided]"))); break; case 0: case 1: Config.Add(val3.Name, val2.Bind<float>(val3.Name.Split(":")[0], val3.Name.Split(":")[1], (float)val4["default"], val4.GetValueOrDefault("description", "[no description was provided]"))); break; default: ((ManualLogSource)SoundPlugin.logger).LogError((object)string.Format("`{0} configtype is currently unsupported! Supported values: bool, float, int, string", val4["default"].Type)); break; } } stopwatch2.Stop(); ((ManualLogSource)SoundPlugin.logger).LogInfo((object)$"Loaded {Name}(config) in {stopwatch2.ElapsedMilliseconds}ms."); } LoadedSoundPacks.Add(this); stopwatch.Stop(); ((ManualLogSource)SoundPlugin.logger).LogInfo((object)$"Loaded {Name}(init) in {stopwatch.ElapsedMilliseconds}ms."); } internal void QueueLoad() { if (Directory.Exists(Path.Combine(PackPath, "replacers"))) { string[] array = Directory.GetFiles(Path.Combine(PackPath, "replacers")).Select(Path.GetFileName).ToArray(); Stopwatch stopwatch = Stopwatch.StartNew(); string[] array2 = array; foreach (string replacer in array2) { ParseReplacer(replacer); } stopwatch.Stop(); ((ManualLogSource)SoundPlugin.logger).LogInfo((object)$"Loaded {Name}(sound-loading) in {stopwatch.ElapsedMilliseconds}ms."); } } [AsyncStateMachine(typeof(<AsyncQueueLoad>d__17))] internal UniTask AsyncQueueLoad() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: 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) <AsyncQueueLoad>d__17 <AsyncQueueLoad>d__ = default(<AsyncQueueLoad>d__17); <AsyncQueueLoad>d__.<>t__builder = AsyncUniTaskMethodBuilder.Create(); <AsyncQueueLoad>d__.<>4__this = this; <AsyncQueueLoad>d__.<>1__state = -1; ((AsyncUniTaskMethodBuilder)(ref <AsyncQueueLoad>d__.<>t__builder)).Start<<AsyncQueueLoad>d__17>(ref <AsyncQueueLoad>d__); return ((AsyncUniTaskMethodBuilder)(ref <AsyncQueueLoad>d__.<>t__builder)).Task; } [AsyncStateMachine(typeof(<AsyncParseReplacer>d__18))] private UniTask AsyncParseReplacer(string replacer) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) <AsyncParseReplacer>d__18 <AsyncParseReplacer>d__ = default(<AsyncParseReplacer>d__18); <AsyncParseReplacer>d__.<>t__builder = AsyncUniTaskMethodBuilder.Create(); <AsyncParseReplacer>d__.<>4__this = this; <AsyncParseReplacer>d__.replacer = replacer; <AsyncParseReplacer>d__.<>1__state = -1; ((AsyncUniTaskMethodBuilder)(ref <AsyncParseReplacer>d__.<>t__builder)).Start<<AsyncParseReplacer>d__18>(ref <AsyncParseReplacer>d__); return ((AsyncUniTaskMethodBuilder)(ref <AsyncParseReplacer>d__.<>t__builder)).Task; } private void ParseReplacer(string replacer) { string path = Path.Combine(PackPath, "replacers", replacer); ((ManualLogSource)SoundPlugin.logger).LogDebug((object)("Parsing `" + Path.GetFileName(path) + "` as a sound replacer")); object obj = JsonConvert.DeserializeObject(File.ReadAllText(path)); JObject data = (JObject)((obj is JObject) ? obj : null); if (SoundPluginConfig.LOGGING_LEVEL.Value == SoundPluginConfig.LoggingLevel.IM_GOING_TO_LOSE_IT) { SoundPlugin.logger.LogLosingIt("JSON data desrialized!"); } new SoundReplaceGroup(this, data); } } public class SoundReplaceGroup : Conditonal { public SoundPack pack { get; private set; } internal JObject RandomSettings { get; private set; } internal bool UpdateEveryFrame { get; private set; } internal bool IgnoreLooping { get; private set; } public SoundReplaceGroup(SoundPack pack, JObject data) { //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Expected O, but got Unknown this.pack = pack; if (data.ContainsKey("condition")) { JToken obj = data["condition"]; Setup(this, (JObject)(object)((obj is JObject) ? obj : null)); if ((string)data["condition"][(object)"type"] == "config" && SoundPluginConfig.SKIP_LOADING_UNUSED_SOUNDS.Value && !TestCondition()) { if (SoundPluginConfig.LOGGING_LEVEL.Value == SoundPluginConfig.LoggingLevel.IM_GOING_TO_LOSE_IT) { SoundPlugin.logger.LogLosingIt("Skipping loading SoundReplaceGroup because the config is disabled.."); } return; } } if (SoundPluginConfig.LOGGING_LEVEL.Value == SoundPluginConfig.LoggingLevel.IM_GOING_TO_LOSE_IT) { SoundPlugin.logger.LogLosingIt("Loading audio"); } foreach (JObject item in (IEnumerable<JToken>)data["replacements"]) { JObject data2 = item; new SoundReplacementCollection(this, data2); } if (SoundPluginConfig.LOGGING_LEVEL.Value == SoundPluginConfig.LoggingLevel.IM_GOING_TO_LOSE_IT) { SoundPlugin.logger.LogLosingIt("Done loading audio"); } if (data.ContainsKey("update_every_frame")) { UpdateEveryFrame = (bool)data["update_every_frame"]; } if (data.ContainsKey("ignore_looping")) { UpdateEveryFrame = (bool)data["ignore_looping"]; } if (data.ContainsKey("randomnesss")) { ((ManualLogSource)SoundPlugin.logger).LogWarning((object)("Found deprecated value `randomness` for pack `" + pack.Name + "`")); } } } internal class SoundReplacementCollection : Conditonal { internal readonly List<SoundReplacement> replacements = new List<SoundReplacement>(); private readonly List<string> matchers = new List<string>(); internal readonly SoundReplaceGroup group; internal SoundReplacementCollection(SoundReplaceGroup group, JObject data) { //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Expected O, but got Unknown //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Invalid comparison between Unknown and I4 this.group = group; JToken val = default(JToken); if (data.TryGetValue("condition", ref val)) { Setup(group, (JObject)(object)((val is JObject) ? val : null)); } if (((object)data["matches"]).GetType() == typeof(JValue)) { RegisterWithMatch((string)data["matches"]); } else { foreach (JToken item in (IEnumerable<JToken>)data["matches"]) { string matchString = (string)item; RegisterWithMatch(matchString); } } foreach (JObject item2 in (IEnumerable<JToken>)data["sounds"]) { JObject val2 = item2; if ((int)val2["sound"].Type == 10) { SoundPlugin.logger.LogExtended("Adding null sound, will remove the sound when chosen"); replacements.Add(new SoundReplacement(group, val2) { Weight = val2.GetValueOrDefault("weight", 1) }); continue; } SoundReplacement soundReplacement = new SoundReplacement(group, val2) { Weight = val2.GetValueOrDefault("weight", 1) }; SoundLoader.GetAudioClip(group.pack.PackPath, Path.GetDirectoryName((string)val2["sound"]), Path.GetFileName((string)val2["sound"]), out var clip); if ((Object)(object)clip == (Object)null) { ((ManualLogSource)SoundPlugin.logger).LogError((object)"Failed to get audio clip, check above more detailed error"); continue; } soundReplacement.Clip = clip; replacements.Add(soundReplacement); } } internal bool MatchesWith(string[] a) { foreach (string matcher in matchers) { if (SoundAPI.MatchStrings(a, matcher)) { return true; } } return false; } private void RegisterWithMatch(string matchString) { string key = SoundAPI.FormatMatchString(matchString).Split(":")[2]; List<SoundReplacementCollection> valueOrDefault = SoundAPI.SoundReplacements.GetValueOrDefault(key, new List<SoundReplacementCollection>()); valueOrDefault.Add(this); matchers.Add(SoundAPI.FormatMatchString(matchString)); SoundAPI.SoundReplacements[key] = valueOrDefault; } public override bool TestCondition() { if (base.TestCondition()) { return group.TestCondition(); } return false; } } internal class SoundReplacement : Conditonal { public int Weight = 1; public AudioClip Clip { get; set; } public SoundReplacement(SoundReplaceGroup group, JObject data) { if (data.ContainsKey("condition")) { JToken obj = data["condition"]; Setup(group, (JObject)(object)((obj is JObject) ? obj : null)); } } } } namespace loaforcsSoundAPI.Behaviours { public class AudioSourceReplaceHelper : MonoBehaviour { internal AudioSource source; internal SoundReplacementCollection replacedWith; internal static Dictionary<AudioSource, AudioSourceReplaceHelper> helpers = new Dictionary<AudioSource, AudioSourceReplaceHelper>(); private bool _loop; internal bool _isPlaying; public bool DisableReplacing { get; private set; } public bool Loop { get { return _loop; } set { if (SoundPluginConfig.LOGGING_LEVEL.Value == SoundPluginConfig.LoggingLevel.IM_GOING_TO_LOSE_IT) { SoundPlugin.logger.LogLosingIt($"AudioSourceReplaceHelper looping is now at: {value}"); } _loop = value; } } private void Start() { if ((Object)(object)source == (Object)null) { ((ManualLogSource)SoundPlugin.logger).LogWarning((object)("AudioSource (on gameobject: " + ((Object)((Component)this).gameObject).name + ") became null between the OnSceneLoaded callback and Start.")); return; } string text = (((Object)(object)source.clip == (Object)null) ? "null" : ((Object)source.clip).name); if (SoundPluginConfig.LOGGING_LEVEL.Value == SoundPluginConfig.LoggingLevel.IM_GOING_TO_LOSE_IT) { SoundPlugin.logger.LogLosingIt("AudioSourceReplaceHelper.Start(), gameObject: " + ((Object)((Component)this).gameObject).name + ", audioClip.name: " + text); } if (source.playOnAwake) { if (((Behaviour)source).enabled) { if ((Object)(object)source.clip != (Object)null) { source.Play(); if (SoundPluginConfig.LOGGING_LEVEL.Value == SoundPluginConfig.LoggingLevel.IM_GOING_TO_LOSE_IT) { SoundPlugin.logger.LogLosingIt(((Object)((Component)this).gameObject).name + ":" + text + " calling source.Play() because its playOnAwake and enabled."); } _isPlaying = true; } if (SoundPluginConfig.LOGGING_LEVEL.Value == SoundPluginConfig.LoggingLevel.IM_GOING_TO_LOSE_IT) { SoundPlugin.logger.LogLosingIt(((Object)((Component)this).gameObject).name + ":" + text + " play on awake + enabled + null audio clip. WHYYYYYYY"); } } else if (SoundPluginConfig.LOGGING_LEVEL.Value == SoundPluginConfig.LoggingLevel.IM_GOING_TO_LOSE_IT) { SoundPlugin.logger.LogLosingIt(((Object)((Component)this).gameObject).name + ":" + text + " not calling Play() because its playOnAwake but not enabled."); } } if (SoundPluginConfig.EXPERIMENTAL_HANDLE_LOOPING_SOUNDS.Value) { Loop = source.loop; source.loop = false; if (SoundPluginConfig.LOGGING_LEVEL.Value == SoundPluginConfig.LoggingLevel.IM_GOING_TO_LOSE_IT) { SoundPlugin.logger.LogLosingIt($"{((Object)((Component)this).gameObject).name}:{text}, Looping? {Loop}"); } } helpers[source] = this; } private void OnEnable() { if (!((Object)(object)source == (Object)null)) { helpers[source] = this; } } private void OnDestroy() { if (!((Object)(object)source == (Object)null) && helpers.ContainsKey(source)) { helpers.Remove(source); } } private void HandleLoopingSounds() { if (!_isPlaying) { return; } if ((Object)(object)source.clip == (Object)null) { if (SoundPluginConfig.LOGGING_LEVEL.Value == SoundPluginConfig.LoggingLevel.IM_GOING_TO_LOSE_IT) { SoundPlugin.logger.LogLosingIt(((Object)((Component)this).gameObject).name + ":" + (((Object)(object)source.clip == (Object)null) ? "null" : ((Object)source.clip).name) + " has a null clipp!!!!!"); } _isPlaying = false; } else { if (source.isPlaying) { return; } if (Loop) { source.Play(); if (SoundPluginConfig.LOGGING_LEVEL.Value == SoundPluginConfig.LoggingLevel.IM_GOING_TO_LOSE_IT) { SoundPlugin.logger.LogLosingIt(((Object)((Component)this).gameObject).name + ":" + (((Object)(object)source.clip == (Object)null) ? "null" : ((Object)source.clip).name) + " succesfully looped!"); } } else { _isPlaying = false; } } } private void LateUpdate() { if ((Object)(object)source == (Object)null || !((Behaviour)source).enabled) { return; } if (SoundPluginConfig.EXPERIMENTAL_HANDLE_LOOPING_SOUNDS.Value) { HandleLoopingSounds(); } if (replacedWith == null) { return; } DisableReplacing = replacedWith.group.UpdateEveryFrame || replacedWith.group.IgnoreLooping; if (!replacedWith.group.UpdateEveryFrame) { return; } float time = source.time; SoundReplacement soundReplacement = replacedWith.replacements.Where((SoundReplacement x) => x.TestCondition()).ToList()[0]; if (!((Object)(object)soundReplacement.Clip == (Object)(object)source.clip)) { source.clip = soundReplacement.Clip; source.Play(); source.time = time; if (!source.isPlaying) { SoundPlugin.logger.LogExtended("Sound ended, resetting update_every_frame"); DisableReplacing = false; replacedWith = null; } } } } } namespace loaforcsSoundAPI.API { public abstract class AudioFormatProvider { public abstract AudioClip LoadAudioClip(string path); protected AudioClip LoadFromUWR(string path, AudioType type) { //IL_0003: 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_0020: Invalid comparison between Unknown and I4 AudioClip result = null; UnityWebRequest audioClip = UnityWebRequestMultimedia.GetAudioClip(path, type); try { audioClip.SendWebRequest(); try { while (!audioClip.isDone) { } if ((int)audioClip.result != 1) { ((ManualLogSource)SoundPlugin.logger).LogError((object)"============"); ((ManualLogSource)SoundPlugin.logger).LogError((object)("UnityWebRequest failed while trying to get " + path + ". Full error below")); ((ManualLogSource)SoundPlugin.logger).LogError((object)audioClip.error); ((ManualLogSource)SoundPlugin.logger).LogError((object)"============"); } else { result = DownloadHandlerAudioClip.GetContent(audioClip); } } catch (Exception ex) { ((ManualLogSource)SoundPlugin.logger).LogError((object)(ex.Message + ", " + ex.StackTrace)); } } finally { ((IDisposable)audioClip)?.Dispose(); } return result; } } public abstract class ConditionProvider { public abstract bool Evaluate(SoundReplaceGroup group, JObject conditionDef); public bool EvaluateRangeOperator(JToken number, string condition) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Invalid comparison between Unknown and I4 if ((int)number.Type == 7) { return EvaluateRangeOperator(Extensions.Value<float>((IEnumerable<JToken>)number), condition); } return EvaluateRangeOperator(Extensions.Value<int>((IEnumerable<JToken>)number), condition); } public bool EvaluateRangeOperator(int number, string condition) { return EvaluateRangeOperator((double)number, condition); } public bool EvaluateRangeOperator(float number, string condition) { return EvaluateRangeOperator((double)number, condition); } public bool EvaluateRangeOperator(double number, string condition) { string[] array = condition.Split(".."); if (array.Length == 1) { if (double.TryParse(array[0], out var result)) { return number == result; } return false; } if (array.Length == 2) { double result2; if (array[0] == "") { result2 = double.MinValue; } else if (!double.TryParse(array[0], out result2)) { return false; } double result3; if (array[1] == "") { result3 = double.MaxValue; } else if (!double.TryParse(array[1], out result3)) { return false; } if (number >= result2) { return number <= result3; } return false; } return false; } } public abstract class Conditonal { private ConditionProvider GroupCondition; private SoundReplaceGroup group; internal JObject ConditionSettings { get; private set; } protected void Setup(SoundReplaceGroup group, JObject settings) { this.group = group; if (settings != null) { ConditionSettings = settings; GroupCondition = SoundAPI.ConditionProviders[(string)ConditionSettings["type"]]; } } public virtual bool TestCondition() { if (GroupCondition == null) { return true; } return GroupCondition.Evaluate(group, ConditionSettings); } } public static class SoundAPI { internal static Dictionary<string, AudioFormatProvider> FileFormats = new Dictionary<string, AudioFormatProvider>(); internal static Dictionary<string, ConditionProvider> ConditionProviders = new Dictionary<string, ConditionProvider>(); internal static ConcurrentDictionary<string, List<SoundReplacementCollection>> SoundReplacements = new ConcurrentDictionary<string, List<SoundReplacementCollection>>(); public static void RegisterAudioFormatProvider(string extension, AudioFormatProvider provider) { FileFormats.Add(extension, provider); } public static void RegisterConditionProvider(string extension, ConditionProvider provider) { ConditionProviders.Add(extension, provider); } public static string FormatMatchString(string input) { if (input.Split(":").Length == 2) { input = "*:" + input; } return input; } public static bool MatchStrings(string[] a, string b) { string[] array = b.Split(":"); if (array[0] != "*" && array[0] != a[0]) { return false; } if (array[1] != "*" && array[1] != a[1]) { return false; } return a[2] == array[2]; } } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } }
BepInEx/plugins/Mimics.dll
Decompiled 3 months agousing System; using System.CodeDom.Compiler; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Globalization; using System.Linq; using System.Reflection; using System.Resources; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using DunGen; using GameNetcodeStuff; using HarmonyLib; using LethalCompanyMimics.Properties; using Microsoft.CodeAnalysis; using Mimics.API; using Mimics.NetcodePatcher; using Unity.Netcode; using UnityEngine; using UnityEngine.Events; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("Mimics")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyDescription("A mod that adds mimics to Lethal Company")] [assembly: AssemblyFileVersion("2.6.4.0")] [assembly: AssemblyInformationalVersion("2.6.4")] [assembly: AssemblyProduct("Mimics")] [assembly: AssemblyTitle("Mimics")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("2.6.4.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] [module: NetcodePatchedAssembly] internal class <Module> { static <Module>() { NetworkVariableSerializationTypes.InitializeSerializer_UnmanagedByMemcpy<bool>(); NetworkVariableSerializationTypes.InitializeEqualityChecker_UnmanagedIEquatable<bool>(); } } namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace LethalCompanyMimics.Properties { [GeneratedCode("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] [DebuggerNonUserCode] [CompilerGenerated] internal class Resources { private static ResourceManager resourceMan; private static CultureInfo resourceCulture; [EditorBrowsable(EditorBrowsableState.Advanced)] internal static ResourceManager ResourceManager { get { if (resourceMan == null) { ResourceManager resourceManager = new ResourceManager("LethalCompanyMimics.Properties.Resources", typeof(Resources).Assembly); resourceMan = resourceManager; } return resourceMan; } } [EditorBrowsable(EditorBrowsableState.Advanced)] internal static CultureInfo Culture { get { return resourceCulture; } set { resourceCulture = value; } } internal static byte[] mimicdoor { get { object @object = ResourceManager.GetObject("mimicdoor", resourceCulture); return (byte[])@object; } } internal Resources() { } } } namespace Mimics { [BepInPlugin("x753.Mimics", "Mimics", "2.6.4")] public class Mimics : BaseUnityPlugin { [HarmonyPatch(typeof(GameNetworkManager))] internal class GameNetworkManagerPatch { [HarmonyPatch("Start")] [HarmonyPostfix] private static void StartPatch() { ((Component)GameNetworkManager.Instance).GetComponent<NetworkManager>().AddNetworkPrefab(MimicNetworkerPrefab); } } [HarmonyPatch(typeof(StartOfRound))] internal class StartOfRoundPatch { [HarmonyPatch("Start")] [HarmonyPostfix] private static void StartPatch(ref StartOfRound __instance) { if (((NetworkBehaviour)__instance).IsServer && (Object)(object)MimicNetworker.Instance == (Object)null) { GameObject val = Object.Instantiate<GameObject>(MimicNetworkerPrefab); val.GetComponent<NetworkObject>().Spawn(true); MimicNetworker.SpawnWeight0.Value = SpawnRates[0]; MimicNetworker.SpawnWeight1.Value = SpawnRates[1]; MimicNetworker.SpawnWeight2.Value = SpawnRates[2]; MimicNetworker.SpawnWeight3.Value = SpawnRates[3]; MimicNetworker.SpawnWeight4.Value = SpawnRates[4]; MimicNetworker.SpawnWeightMax.Value = SpawnRates[5]; MimicNetworker.SpawnRateDynamic.Value = DynamicSpawnRate; } } } [HarmonyPatch(typeof(Terminal))] internal class TerminalPatch { [HarmonyPatch("Start")] [HarmonyPostfix] private static void StartPatch(ref StartOfRound __instance) { //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Expected O, but got Unknown //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Expected O, but got Unknown Terminal val = Object.FindObjectOfType<Terminal>(); if (!Object.op_Implicit((Object)(object)val.enemyFiles.Find((TerminalNode node) => node.creatureName == "Mimics"))) { MimicCreatureID = val.enemyFiles.Count; MimicFile.creatureFileID = MimicCreatureID; val.enemyFiles.Add(MimicFile); TerminalKeyword val2 = val.terminalNodes.allKeywords.First((TerminalKeyword keyword) => keyword.word == "info"); TerminalKeyword val3 = new TerminalKeyword { word = "mimics", isVerb = false, defaultVerb = val2 }; List<CompatibleNoun> list = val2.compatibleNouns.ToList(); list.Add(new CompatibleNoun { noun = val3, result = MimicFile }); val2.compatibleNouns = list.ToArray(); List<TerminalKeyword> list2 = val.terminalNodes.allKeywords.ToList(); list2.Add(val3); val.terminalNodes.allKeywords = list2.ToArray(); } } } [HarmonyPatch(typeof(RoundManager))] internal class RoundManagerPatch { [HarmonyPatch("SetExitIDs")] [HarmonyPostfix] private static void SetExitIDsPatch(ref RoundManager __instance, Vector3 mainEntrancePosition) { //IL_058c: Unknown result type (might be due to invalid IL or missing references) //IL_059d: Unknown result type (might be due to invalid IL or missing references) //IL_05a2: Unknown result type (might be due to invalid IL or missing references) //IL_05a7: Unknown result type (might be due to invalid IL or missing references) //IL_05ac: Unknown result type (might be due to invalid IL or missing references) //IL_027d: Unknown result type (might be due to invalid IL or missing references) //IL_0289: Unknown result type (might be due to invalid IL or missing references) //IL_029d: Unknown result type (might be due to invalid IL or missing references) //IL_02a2: Unknown result type (might be due to invalid IL or missing references) //IL_02a7: Unknown result type (might be due to invalid IL or missing references) //IL_02ba: Unknown result type (might be due to invalid IL or missing references) //IL_02ce: Unknown result type (might be due to invalid IL or missing references) //IL_02de: Unknown result type (might be due to invalid IL or missing references) //IL_02e3: Unknown result type (might be due to invalid IL or missing references) //IL_02ef: Unknown result type (might be due to invalid IL or missing references) //IL_02f6: Unknown result type (might be due to invalid IL or missing references) //IL_0302: Unknown result type (might be due to invalid IL or missing references) //IL_05bb: Unknown result type (might be due to invalid IL or missing references) //IL_05c0: Unknown result type (might be due to invalid IL or missing references) //IL_05c2: Unknown result type (might be due to invalid IL or missing references) //IL_05c4: Unknown result type (might be due to invalid IL or missing references) //IL_05f9: Unknown result type (might be due to invalid IL or missing references) //IL_063a: Unknown result type (might be due to invalid IL or missing references) //IL_0716: Unknown result type (might be due to invalid IL or missing references) //IL_071b: Unknown result type (might be due to invalid IL or missing references) //IL_071f: Unknown result type (might be due to invalid IL or missing references) //IL_072b: Unknown result type (might be due to invalid IL or missing references) //IL_0730: Unknown result type (might be due to invalid IL or missing references) //IL_0734: Unknown result type (might be due to invalid IL or missing references) //IL_0739: Unknown result type (might be due to invalid IL or missing references) //IL_06d1: Unknown result type (might be due to invalid IL or missing references) //IL_0385: Unknown result type (might be due to invalid IL or missing references) //IL_0396: Unknown result type (might be due to invalid IL or missing references) //IL_039b: Unknown result type (might be due to invalid IL or missing references) //IL_03a0: Unknown result type (might be due to invalid IL or missing references) //IL_03a5: Unknown result type (might be due to invalid IL or missing references) //IL_03af: Unknown result type (might be due to invalid IL or missing references) //IL_03b4: Unknown result type (might be due to invalid IL or missing references) //IL_03b9: Unknown result type (might be due to invalid IL or missing references) //IL_03bf: Unknown result type (might be due to invalid IL or missing references) //IL_03c7: Unknown result type (might be due to invalid IL or missing references) //IL_03d0: Unknown result type (might be due to invalid IL or missing references) //IL_03da: Unknown result type (might be due to invalid IL or missing references) //IL_045c: Unknown result type (might be due to invalid IL or missing references) //IL_0464: Unknown result type (might be due to invalid IL or missing references) //IL_046d: Unknown result type (might be due to invalid IL or missing references) //IL_0477: Unknown result type (might be due to invalid IL or missing references) //IL_0829: Unknown result type (might be due to invalid IL or missing references) //IL_0833: Expected O, but got Unknown //IL_0931: Unknown result type (might be due to invalid IL or missing references) //IL_0958: Unknown result type (might be due to invalid IL or missing references) //IL_08d2: Unknown result type (might be due to invalid IL or missing references) //IL_08f9: Unknown result type (might be due to invalid IL or missing references) //IL_0a0c: Unknown result type (might be due to invalid IL or missing references) //IL_0a33: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)MimicNetworker.Instance == (Object)null) { return; } MimicsAPI.MainAPI.RefreshMimicEventHandler(); MimicDoor.allMimics = new List<MimicDoor>(); int num = 0; Dungeon currentDungeon = __instance.dungeonGenerator.Generator.CurrentDungeon; if (!InteriorWhitelist.Contains(((Object)currentDungeon.DungeonFlow).name.ToLower().Trim())) { return; } int num2 = 0; int[] array = new int[6] { MimicNetworker.SpawnWeight0.Value, MimicNetworker.SpawnWeight1.Value, MimicNetworker.SpawnWeight2.Value, MimicNetworker.SpawnWeight3.Value, MimicNetworker.SpawnWeight4.Value, MimicNetworker.SpawnWeightMax.Value }; int num3 = 0; int[] array2 = array; foreach (int num4 in array2) { num3 += num4; } Random random = new Random(StartOfRound.Instance.randomMapSeed + 753); int num5 = random.Next(0, num3); int num6 = 0; for (int j = 0; j < array.Length; j++) { if (num5 < array[j] + num6) { num2 = j; break; } num6 += array[j]; } if (num2 == 5) { num2 = 999; } EntranceTeleport[] array3 = Object.FindObjectsOfType<EntranceTeleport>(false); int num7 = (array3.Length - 2) / 2; if (MimicNetworker.SpawnRateDynamic.Value && num2 < num7 && num7 > 1) { num2 += random.Next(0, 2); } if (MimicNetworker.SpawnRateDynamic.Value && currentDungeon.AllTiles.Count > 100) { num2 += random.Next(0, 2); } if (((NetworkBehaviour)RoundManager.Instance).IsOwner) { Debug.Log((object)("I am the host. Desired mimics: " + num2)); } else { Debug.Log((object)("I am the client. Desired mimics: " + num2)); } List<Doorway> list = new List<Doorway>(); Bounds val2 = default(Bounds); foreach (Tile allTile in currentDungeon.AllTiles) { foreach (Doorway unusedDoorway in allTile.UnusedDoorways) { if (!MimicsAPI.MainAPI.IgnoreDefaultPlacementValidation(unusedDoorway)) { if (unusedDoorway.HasDoorPrefabInstance || (Object)(object)((Component)unusedDoorway).GetComponentInChildren<SpawnSyncedObject>(true) == (Object)null) { continue; } GameObject gameObject = ((Component)((Component)((Component)unusedDoorway).GetComponentInChildren<SpawnSyncedObject>(true)).transform.parent).gameObject; if (!((Object)gameObject).name.StartsWith("AlleyExitDoorContainer") || gameObject.activeSelf) { continue; } bool flag = false; Matrix4x4 val = Matrix4x4.TRS(((Component)unusedDoorway).transform.position, ((Component)unusedDoorway).transform.rotation, new Vector3(1f, 1f, 1f)); ((Bounds)(ref val2))..ctor(new Vector3(0f, 1.5f, 5.5f), new Vector3(2f, 6f, 8f)); ((Bounds)(ref val2)).center = ((Matrix4x4)(ref val)).MultiplyPoint3x4(((Bounds)(ref val2)).center); Collider[] array4 = Physics.OverlapBox(((Bounds)(ref val2)).center, ((Bounds)(ref val2)).extents, ((Component)unusedDoorway).transform.rotation, LayerMask.GetMask(new string[3] { "Room", "Railing", "MapHazards" })); Collider[] array5 = array4; int num8 = 0; if (num8 < array5.Length) { Collider val3 = array5[num8]; flag = true; } if (flag) { continue; } foreach (Tile allTile2 in currentDungeon.AllTiles) { if (!((Object)(object)allTile == (Object)(object)allTile2)) { Vector3 origin = ((Component)unusedDoorway).transform.position + 5f * ((Component)unusedDoorway).transform.forward; Bounds val4 = UnityUtil.CalculateProxyBounds(((Component)allTile2).gameObject, true, Vector3.up); Ray val5 = default(Ray); ((Ray)(ref val5)).origin = origin; ((Ray)(ref val5)).direction = Vector3.up; if (((Bounds)(ref val4)).IntersectRay(val5) && (((Object)allTile2).name.Contains("Catwalk") || ((Object)allTile2).name.Contains("LargeForkTile") || ((Object)allTile2).name.Contains("4x4BigStair") || ((Object)allTile2).name.Contains("ElevatorConnector") || (((Object)allTile2).name.Contains("StartRoom") && !((Object)allTile2).name.Contains("Manor")))) { flag = true; } val5 = default(Ray); ((Ray)(ref val5)).origin = origin; ((Ray)(ref val5)).direction = Vector3.down; if (((Bounds)(ref val4)).IntersectRay(val5) && (((Object)allTile2).name.Contains("MediumRoomHallway1B") || ((Object)allTile2).name.Contains("LargeForkTile") || ((Object)allTile2).name.Contains("4x4BigStair") || ((Object)allTile2).name.Contains("ElevatorConnector") || ((Object)allTile2).name.Contains("StartRoom"))) { flag = true; } } } if (flag) { continue; } } if (MimicsAPI.MainAPI.IsPlacementValid(unusedDoorway)) { list.Add(unusedDoorway); } } } Shuffle(list, StartOfRound.Instance.randomMapSeed); List<Vector3> list2 = new List<Vector3>(); foreach (Doorway item in list) { if (num >= num2) { break; } bool flag2 = false; Vector3 val6 = ((Component)item).transform.position + 5f * ((Component)item).transform.forward; foreach (Vector3 item2 in list2) { if (Vector3.Distance(val6, item2) < 4f) { flag2 = true; break; } } if (flag2) { continue; } list2.Add(val6); GameObject gameObject2 = ((Component)((Component)((Component)item).GetComponentInChildren<SpawnSyncedObject>(true)).transform.parent).gameObject; GameObject val7 = Object.Instantiate<GameObject>(MimicPrefab, ((Component)item).transform); val7.transform.position = gameObject2.transform.position; MimicDoor component = val7.GetComponent<MimicDoor>(); component.scanNode.creatureScanID = MimicCreatureID; AudioSource[] componentsInChildren = val7.GetComponentsInChildren<AudioSource>(true); foreach (AudioSource val8 in componentsInChildren) { val8.volume = MimicVolume / 100f; val8.outputAudioMixerGroup = StartOfRound.Instance.ship3DAudio.outputAudioMixerGroup; } if (SpawnRates[5] == 9753 && num == 0) { val7.transform.position = new Vector3(-7f, 0f, -10f); } MimicDoor.allMimics.Add(component); component.mimicIndex = num; num++; GameObject gameObject3 = ((Component)((Component)item).transform.GetChild(0)).gameObject; gameObject3.SetActive(false); Bounds bounds = ((Collider)component.frameBox).bounds; Vector3 center = ((Bounds)(ref bounds)).center; bounds = ((Collider)component.frameBox).bounds; Collider[] array6 = Physics.OverlapBox(center, ((Bounds)(ref bounds)).extents, Quaternion.identity); foreach (Collider val9 in array6) { if (((Object)((Component)val9).gameObject).name.Contains("Shelf")) { ((Component)val9).gameObject.SetActive(false); } } Light componentInChildren = gameObject2.GetComponentInChildren<Light>(true); ((Component)componentInChildren).transform.parent.SetParent(val7.transform); MeshRenderer[] componentsInChildren2 = val7.GetComponentsInChildren<MeshRenderer>(); MeshRenderer[] array7 = componentsInChildren2; foreach (MeshRenderer val10 in array7) { Material[] materials = ((Renderer)val10).materials; foreach (Material val11 in materials) { val11.shader = ((Renderer)gameObject3.GetComponentInChildren<MeshRenderer>(true)).material.shader; val11.renderQueue = ((Renderer)gameObject3.GetComponentInChildren<MeshRenderer>(true)).material.renderQueue; } } component.interactTrigger.onInteract = new InteractEvent(); ((UnityEvent<PlayerControllerB>)(object)component.interactTrigger.onInteract).AddListener((UnityAction<PlayerControllerB>)component.TouchMimic); MimicsAPI.MainAPI.OnMimicCreated(component, item); if (MimicsAPI.MainAPI.OverrideDefaultImperfectionCreation(component, item)) { MimicsAPI.MainAPI.OnMimicCreateImperfections(component); break; } if (MimicPerfection) { continue; } component.interactTrigger.timeToHold = 0.9f; if (!ColorBlindMode) { if ((StartOfRound.Instance.randomMapSeed + num) % 2 == 0) { ((Renderer)val7.GetComponentsInChildren<MeshRenderer>()[0]).material.color = new Color(0.490566f, 0.1226415f, 0.1302275f); ((Renderer)val7.GetComponentsInChildren<MeshRenderer>()[1]).material.color = new Color(0.4339623f, 0.1043965f, 0.1150277f); componentInChildren.colorTemperature = 1250f; } else { ((Renderer)val7.GetComponentsInChildren<MeshRenderer>()[0]).material.color = new Color(0.5f, 0.1580188f, 0.1657038f); ((Renderer)val7.GetComponentsInChildren<MeshRenderer>()[1]).material.color = new Color(43f / 106f, 0.1358579f, 0.1393619f); componentInChildren.colorTemperature = 1300f; } } else if ((StartOfRound.Instance.randomMapSeed + num) % 2 == 0) { component.interactTrigger.timeToHold = 1.1f; } else { component.interactTrigger.timeToHold = 1f; } if (!EasyMode) { continue; } Random random2 = new Random(StartOfRound.Instance.randomMapSeed + num); switch (random2.Next(0, 4)) { case 0: if (!ColorBlindMode) { ((Renderer)val7.GetComponentsInChildren<MeshRenderer>()[0]).material.color = new Color(0.489f, 0.2415526f, 0.1479868f); ((Renderer)val7.GetComponentsInChildren<MeshRenderer>()[1]).material.color = new Color(0.489f, 0.2415526f, 0.1479868f); } else { component.interactTrigger.timeToHold = 1.5f; } break; case 1: component.interactTrigger.hoverTip = "Feed : [LMB]"; component.interactTrigger.holdTip = "Feed : [LMB]"; break; case 2: component.interactTrigger.hoverIcon = component.LostFingersIcon; break; case 3: component.interactTrigger.holdTip = "DIE : [LMB]"; component.interactTrigger.timeToHold = 0.5f; break; default: component.interactTrigger.hoverTip = "BUG, REPORT TO DEVELOPER"; break; } } } } [HarmonyPatch(typeof(SprayPaintItem))] internal class SprayPaintItemPatch { private static FieldInfo SprayHit = typeof(SprayPaintItem).GetField("sprayHit", BindingFlags.Instance | BindingFlags.NonPublic); [HarmonyPatch("SprayPaintClientRpc")] [HarmonyPostfix] private static void SprayPaintClientRpcPatch(SprayPaintItem __instance, Vector3 sprayPos, Vector3 sprayRot) { //IL_0019: 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) if ((Object)(object)MimicNetworker.Instance == (Object)null) { return; } RaycastHit val = (RaycastHit)SprayHit.GetValue(__instance); if ((Object)(object)((RaycastHit)(ref val)).collider != (Object)null && ((Object)((RaycastHit)(ref val)).collider).name == "MimicSprayCollider") { MimicDoor component = ((Component)((Component)((RaycastHit)(ref val)).collider).transform.parent.parent).GetComponent<MimicDoor>(); component.sprayCount++; if (component.sprayCount > 8) { MimicNetworker.Instance.MimicAddAnger(1, component.mimicIndex); } } } } [HarmonyPatch(typeof(LockPicker))] internal class LockPickerPatch { private static FieldInfo RayHit = typeof(LockPicker).GetField("hit", BindingFlags.Instance | BindingFlags.NonPublic); [HarmonyPatch("ItemActivate")] [HarmonyPostfix] private static void ItemActivatePatch(LockPicker __instance, bool used, bool buttonDown = true) { //IL_0019: 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_0032: 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) if ((Object)(object)MimicNetworker.Instance == (Object)null) { return; } RaycastHit val = (RaycastHit)RayHit.GetValue(__instance); if (!((Object)(object)((GrabbableObject)__instance).playerHeldBy == (Object)null) && !((object)(RaycastHit)(ref val)).Equals((object)default(RaycastHit)) && !((Object)(object)((RaycastHit)(ref val)).transform.parent == (Object)null)) { Transform parent = ((RaycastHit)(ref val)).transform.parent; if (((Object)parent).name.StartsWith("MimicDoor")) { MimicNetworker.Instance.MimicLockPick(__instance, ((Component)parent).GetComponent<MimicDoor>().mimicIndex); } } } } private const string modGUID = "x753.Mimics"; private const string modName = "Mimics"; private const string modVersion = "2.6.4"; private readonly Harmony harmony = new Harmony("x753.Mimics"); internal static ManualLogSource MimicsLogger; private static Mimics Instance; public static GameObject MimicPrefab; public static GameObject MimicNetworkerPrefab; public static TerminalNode MimicFile; public static int MimicCreatureID; public static int[] SpawnRates; public static bool MimicPerfection; public static bool UpgradeCompatibility; public static bool EasyMode; public static bool ColorBlindMode; public static float MimicVolume; public static bool DynamicSpawnRate; public static List<string> InteriorWhitelist; private void Awake() { AssetBundle val = AssetBundle.LoadFromMemory(Resources.mimicdoor); MimicPrefab = val.LoadAsset<GameObject>("Assets/MimicDoor.prefab"); MimicNetworkerPrefab = val.LoadAsset<GameObject>("Assets/MimicNetworker.prefab"); MimicFile = val.LoadAsset<TerminalNode>("Assets/MimicFile.asset"); if ((Object)(object)Instance == (Object)null) { Instance = this; } harmony.PatchAll(); MimicsLogger = Logger.CreateLogSource("x753.Mimics"); MimicsLogger.LogInfo((object)"Plugin Mimics is loaded!!"); string value = ((BaseUnityPlugin)this).Config.Bind<string>("Compatibility", "Interiors Whitelist", "Level1Flow, Level1Flow3Exits, Level1FlowExtraLarge, Level2Flow, SDMLevel, OfficeDungeonFlow, TranquillityManorFlow", "Comma separated list of interiors that mimics can spawn in. Not all interiors will work.").Value; InteriorWhitelist = (from s in value.ToLower().Split(',') select s.Trim()).ToList(); SpawnRates = new int[6] { ((BaseUnityPlugin)this).Config.Bind<int>("Spawn Rate", "Zero Mimics", 23, "Weight of zero mimics spawning").Value, ((BaseUnityPlugin)this).Config.Bind<int>("Spawn Rate", "One Mimic", 69, "Weight of one mimic spawning").Value, ((BaseUnityPlugin)this).Config.Bind<int>("Spawn Rate", "Two Mimics", 7, "Weight of two mimics spawning").Value, ((BaseUnityPlugin)this).Config.Bind<int>("Spawn Rate", "Three Mimics", 1, "Weight of three mimics spawning").Value, ((BaseUnityPlugin)this).Config.Bind<int>("Spawn Rate", "Four Mimics", 0, "Weight of four mimics spawning").Value, ((BaseUnityPlugin)this).Config.Bind<int>("Spawn Rate", "Maximum Mimics", 0, "Weight of maximum mimics spawning").Value }; DynamicSpawnRate = ((BaseUnityPlugin)this).Config.Bind<bool>("Spawn Rate", "Dynamic Spawn Rate", true, "Increases mimic spawn rate based on dungeon size and the number of instances of the real thing.").Value; MimicPerfection = ((BaseUnityPlugin)this).Config.Bind<bool>("Difficulty", "Perfect Mimics", false, "Select this if you want mimics to be the exact same color as the real thing. Overrides all difficulty settings.").Value; UpgradeCompatibility = ((BaseUnityPlugin)this).Config.Bind<bool>("Difficulty", "Upgrade Compatibility", false, "Mimics won't instantly attack when struck with a powerful blow, such as an upgraded shovel.").Value; EasyMode = ((BaseUnityPlugin)this).Config.Bind<bool>("Difficulty", "Easy Mode", false, "Each mimic will have one of several possible imperfections to help you tell if it's a mimic.").Value; ColorBlindMode = ((BaseUnityPlugin)this).Config.Bind<bool>("Difficulty", "Color Blind Mode", false, "Replaces all color differences with another way to differentiate mimics.").Value; MimicVolume = ((BaseUnityPlugin)this).Config.Bind<int>("General", "SFX Volume", 100, "Volume of the mimic's SFX (0-100)").Value; if (MimicVolume < 0f) { MimicVolume = 0f; } if (MimicVolume > 100f) { MimicVolume = 100f; } Type[] types = Assembly.GetExecutingAssembly().GetTypes(); Type[] array = types; foreach (Type type in array) { MethodInfo[] methods = type.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic); MethodInfo[] array2 = methods; foreach (MethodInfo methodInfo in array2) { object[] customAttributes = methodInfo.GetCustomAttributes(typeof(RuntimeInitializeOnLoadMethodAttribute), inherit: false); if (customAttributes.Length != 0) { methodInfo.Invoke(null, null); } } } } public static void Shuffle<T>(IList<T> list, int seed) { Random random = new Random(seed); int num = list.Count; while (num > 1) { num--; int index = random.Next(num + 1); T value = list[index]; list[index] = list[num]; list[num] = value; } } } public class MimicNetworker : NetworkBehaviour { public static MimicNetworker Instance; public static NetworkVariable<int> SpawnWeight0 = new NetworkVariable<int>(0, (NetworkVariableReadPermission)0, (NetworkVariableWritePermission)0); public static NetworkVariable<int> SpawnWeight1 = new NetworkVariable<int>(0, (NetworkVariableReadPermission)0, (NetworkVariableWritePermission)0); public static NetworkVariable<int> SpawnWeight2 = new NetworkVariable<int>(0, (NetworkVariableReadPermission)0, (NetworkVariableWritePermission)0); public static NetworkVariable<int> SpawnWeight3 = new NetworkVariable<int>(0, (NetworkVariableReadPermission)0, (NetworkVariableWritePermission)0); public static NetworkVariable<int> SpawnWeight4 = new NetworkVariable<int>(0, (NetworkVariableReadPermission)0, (NetworkVariableWritePermission)0); public static NetworkVariable<int> SpawnWeightMax = new NetworkVariable<int>(0, (NetworkVariableReadPermission)0, (NetworkVariableWritePermission)0); public static NetworkVariable<bool> SpawnRateDynamic = new NetworkVariable<bool>(false, (NetworkVariableReadPermission)0, (NetworkVariableWritePermission)0); private void Awake() { Instance = this; } public void MimicAttack(int playerId, int mimicIndex, bool ownerOnly = false) { if (((NetworkBehaviour)this).IsOwner) { Instance.MimicAttackClientRpc(playerId, mimicIndex); } else if (!ownerOnly) { Instance.MimicAttackServerRpc(playerId, mimicIndex); } } [ClientRpc] public void MimicAttackClientRpc(int playerId, int mimicIndex) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: 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_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(2885019175u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, playerId); BytePacker.WriteValueBitPacked(val2, mimicIndex); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2885019175u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost)) { ((MonoBehaviour)this).StartCoroutine(MimicDoor.allMimics[mimicIndex].Attack(playerId)); } } } [ServerRpc(RequireOwnership = false)] public void MimicAttackServerRpc(int playerId, int mimicIndex) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: 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_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(1024971481u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, playerId); BytePacker.WriteValueBitPacked(val2, mimicIndex); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 1024971481u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { Instance.MimicAttackClientRpc(playerId, mimicIndex); } } } public void MimicAddAnger(int amount, int mimicIndex) { if (((NetworkBehaviour)this).IsOwner) { Instance.MimicAddAngerClientRpc(amount, mimicIndex); } else { Instance.MimicAddAngerServerRpc(amount, mimicIndex); } } [ClientRpc] public void MimicAddAngerClientRpc(int amount, int mimicIndex) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: 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_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(1137632670u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, amount); BytePacker.WriteValueBitPacked(val2, mimicIndex); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1137632670u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost)) { ((MonoBehaviour)this).StartCoroutine(MimicDoor.allMimics[mimicIndex].AddAnger(amount)); } } } [ServerRpc(RequireOwnership = false)] public void MimicAddAngerServerRpc(int amount, int mimicIndex) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: 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_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(669208889u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, amount); BytePacker.WriteValueBitPacked(val2, mimicIndex); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 669208889u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { Instance.MimicAddAngerClientRpc(amount, mimicIndex); } } } public void MimicLockPick(LockPicker lockPicker, int mimicIndex, bool ownerOnly = false) { int playerId = (int)((GrabbableObject)lockPicker).playerHeldBy.playerClientId; if (((NetworkBehaviour)this).IsOwner) { Instance.MimicLockPickClientRpc(playerId, mimicIndex); } else if (!ownerOnly) { Instance.MimicLockPickServerRpc(playerId, mimicIndex); } } [ClientRpc] public void MimicLockPickClientRpc(int playerId, int mimicIndex) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: 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_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(3716888238u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, playerId); BytePacker.WriteValueBitPacked(val2, mimicIndex); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 3716888238u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost)) { ((MonoBehaviour)this).StartCoroutine(MimicDoor.allMimics[mimicIndex].MimicLockPick(playerId)); } } } [ServerRpc(RequireOwnership = false)] public void MimicLockPickServerRpc(int playerId, int mimicIndex) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: 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_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(1897916243u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, playerId); BytePacker.WriteValueBitPacked(val2, mimicIndex); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 1897916243u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { Instance.MimicLockPickClientRpc(playerId, mimicIndex); } } } protected override void __initializeVariables() { if (SpawnWeight0 == null) { throw new Exception("MimicNetworker.SpawnWeight0 cannot be null. All NetworkVariableBase instances must be initialized."); } ((NetworkVariableBase)SpawnWeight0).Initialize((NetworkBehaviour)(object)this); ((NetworkBehaviour)this).__nameNetworkVariable((NetworkVariableBase)(object)SpawnWeight0, "SpawnWeight0"); base.NetworkVariableFields.Add((NetworkVariableBase)(object)SpawnWeight0); if (SpawnWeight1 == null) { throw new Exception("MimicNetworker.SpawnWeight1 cannot be null. All NetworkVariableBase instances must be initialized."); } ((NetworkVariableBase)SpawnWeight1).Initialize((NetworkBehaviour)(object)this); ((NetworkBehaviour)this).__nameNetworkVariable((NetworkVariableBase)(object)SpawnWeight1, "SpawnWeight1"); base.NetworkVariableFields.Add((NetworkVariableBase)(object)SpawnWeight1); if (SpawnWeight2 == null) { throw new Exception("MimicNetworker.SpawnWeight2 cannot be null. All NetworkVariableBase instances must be initialized."); } ((NetworkVariableBase)SpawnWeight2).Initialize((NetworkBehaviour)(object)this); ((NetworkBehaviour)this).__nameNetworkVariable((NetworkVariableBase)(object)SpawnWeight2, "SpawnWeight2"); base.NetworkVariableFields.Add((NetworkVariableBase)(object)SpawnWeight2); if (SpawnWeight3 == null) { throw new Exception("MimicNetworker.SpawnWeight3 cannot be null. All NetworkVariableBase instances must be initialized."); } ((NetworkVariableBase)SpawnWeight3).Initialize((NetworkBehaviour)(object)this); ((NetworkBehaviour)this).__nameNetworkVariable((NetworkVariableBase)(object)SpawnWeight3, "SpawnWeight3"); base.NetworkVariableFields.Add((NetworkVariableBase)(object)SpawnWeight3); if (SpawnWeight4 == null) { throw new Exception("MimicNetworker.SpawnWeight4 cannot be null. All NetworkVariableBase instances must be initialized."); } ((NetworkVariableBase)SpawnWeight4).Initialize((NetworkBehaviour)(object)this); ((NetworkBehaviour)this).__nameNetworkVariable((NetworkVariableBase)(object)SpawnWeight4, "SpawnWeight4"); base.NetworkVariableFields.Add((NetworkVariableBase)(object)SpawnWeight4); if (SpawnWeightMax == null) { throw new Exception("MimicNetworker.SpawnWeightMax cannot be null. All NetworkVariableBase instances must be initialized."); } ((NetworkVariableBase)SpawnWeightMax).Initialize((NetworkBehaviour)(object)this); ((NetworkBehaviour)this).__nameNetworkVariable((NetworkVariableBase)(object)SpawnWeightMax, "SpawnWeightMax"); base.NetworkVariableFields.Add((NetworkVariableBase)(object)SpawnWeightMax); if (SpawnRateDynamic == null) { throw new Exception("MimicNetworker.SpawnRateDynamic cannot be null. All NetworkVariableBase instances must be initialized."); } ((NetworkVariableBase)SpawnRateDynamic).Initialize((NetworkBehaviour)(object)this); ((NetworkBehaviour)this).__nameNetworkVariable((NetworkVariableBase)(object)SpawnRateDynamic, "SpawnRateDynamic"); base.NetworkVariableFields.Add((NetworkVariableBase)(object)SpawnRateDynamic); ((NetworkBehaviour)this).__initializeVariables(); } [RuntimeInitializeOnLoadMethod] internal static void InitializeRPCS_MimicNetworker() { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Expected O, but got Unknown //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Expected O, but got Unknown //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Expected O, but got Unknown //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Expected O, but got Unknown NetworkManager.__rpc_func_table.Add(2885019175u, new RpcReceiveHandler(__rpc_handler_2885019175)); NetworkManager.__rpc_func_table.Add(1024971481u, new RpcReceiveHandler(__rpc_handler_1024971481)); NetworkManager.__rpc_func_table.Add(1137632670u, new RpcReceiveHandler(__rpc_handler_1137632670)); NetworkManager.__rpc_func_table.Add(669208889u, new RpcReceiveHandler(__rpc_handler_669208889)); NetworkManager.__rpc_func_table.Add(3716888238u, new RpcReceiveHandler(__rpc_handler_3716888238)); NetworkManager.__rpc_func_table.Add(1897916243u, new RpcReceiveHandler(__rpc_handler_1897916243)); } private static void __rpc_handler_2885019175(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: 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_0043: 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) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { int playerId = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref playerId); int mimicIndex = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref mimicIndex); target.__rpc_exec_stage = (__RpcExecStage)2; ((MimicNetworker)(object)target).MimicAttackClientRpc(playerId, mimicIndex); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_1024971481(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: 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_0043: 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) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { int playerId = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref playerId); int mimicIndex = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref mimicIndex); target.__rpc_exec_stage = (__RpcExecStage)1; ((MimicNetworker)(object)target).MimicAttackServerRpc(playerId, mimicIndex); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_1137632670(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: 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_0043: 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) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { int amount = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref amount); int mimicIndex = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref mimicIndex); target.__rpc_exec_stage = (__RpcExecStage)2; ((MimicNetworker)(object)target).MimicAddAngerClientRpc(amount, mimicIndex); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_669208889(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: 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_0043: 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) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { int amount = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref amount); int mimicIndex = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref mimicIndex); target.__rpc_exec_stage = (__RpcExecStage)1; ((MimicNetworker)(object)target).MimicAddAngerServerRpc(amount, mimicIndex); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_3716888238(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: 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_0043: 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) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { int playerId = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref playerId); int mimicIndex = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref mimicIndex); target.__rpc_exec_stage = (__RpcExecStage)2; ((MimicNetworker)(object)target).MimicLockPickClientRpc(playerId, mimicIndex); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_1897916243(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: 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_0043: 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) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { int playerId = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref playerId); int mimicIndex = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref mimicIndex); target.__rpc_exec_stage = (__RpcExecStage)1; ((MimicNetworker)(object)target).MimicLockPickServerRpc(playerId, mimicIndex); target.__rpc_exec_stage = (__RpcExecStage)0; } } protected internal override string __getTypeName() { return "MimicNetworker"; } } public class MimicDoor : MonoBehaviour { public GameObject playerTarget; public BoxCollider frameBox; public Sprite LostFingersIcon; public Animator mimicAnimator; public GameObject grabPoint; public InteractTrigger interactTrigger; public ScanNodeProperties scanNode; public int anger; public bool angering; public int sprayCount; private bool attacking; public static List<MimicDoor> allMimics; public int mimicIndex; private static MethodInfo RetractClaws = typeof(LockPicker).GetMethod("RetractClaws", BindingFlags.Instance | BindingFlags.NonPublic); public void TouchMimic(PlayerControllerB player) { if (!attacking) { MimicNetworker.Instance.MimicAttack((int)player.playerClientId, mimicIndex); } } public IEnumerator Attack(int playerId) { PlayerControllerB player = StartOfRound.Instance.allPlayerScripts[playerId]; MimicsAPI.MainAPI.OnMimicAttackStart(this, player); attacking = true; interactTrigger.interactable = false; mimicAnimator.SetTrigger("Attack"); playerTarget.transform.position = ((Component)player).transform.position; yield return (object)new WaitForSeconds(0.1f); playerTarget.transform.position = ((Component)player).transform.position; yield return (object)new WaitForSeconds(0.1f); playerTarget.transform.position = ((Component)player).transform.position; yield return (object)new WaitForSeconds(0.1f); playerTarget.transform.position = ((Component)player).transform.position; yield return (object)new WaitForSeconds(0.1f); float num = Vector3.Distance(((Component)GameNetworkManager.Instance.localPlayerController).transform.position, ((Component)frameBox).transform.position); if (num < 8f) { HUDManager.Instance.ShakeCamera((ScreenShakeType)1); } else if (num < 14f) { HUDManager.Instance.ShakeCamera((ScreenShakeType)0); } yield return (object)new WaitForSeconds(0.2f); if (((NetworkBehaviour)player).IsOwner && Vector3.Distance(((Component)player).transform.position, ((Component)this).transform.position) < 8.45f) { player.KillPlayer(Vector3.zero, true, (CauseOfDeath)0, 0, default(Vector3)); } float startTime = Time.timeSinceLevelLoad; yield return (object)new WaitUntil((Func<bool>)(() => (Object)(object)player.deadBody != (Object)null || Time.timeSinceLevelLoad - startTime > 4f)); if ((Object)(object)player.deadBody != (Object)null) { player.deadBody.attachedTo = grabPoint.transform; player.deadBody.attachedLimb = player.deadBody.bodyParts[5]; player.deadBody.matchPositionExactly = true; for (int i = 0; i < player.deadBody.bodyParts.Length; i++) { ((Component)player.deadBody.bodyParts[i]).GetComponent<Collider>().excludeLayers = LayerMask.op_Implicit(-1); } } yield return (object)new WaitForSeconds(2f); if ((Object)(object)player.deadBody != (Object)null) { player.deadBody.attachedTo = null; player.deadBody.attachedLimb = null; player.deadBody.matchPositionExactly = false; ((Component)((Component)player.deadBody).transform.GetChild(0)).gameObject.SetActive(false); player.deadBody = null; } yield return (object)new WaitForSeconds(4.5f); attacking = false; interactTrigger.interactable = true; MimicsAPI.MainAPI.OnMimicAttackEnd(this); } public IEnumerator MimicLockPick(int playerId) { if (angering || attacking) { yield break; } LockPicker lockPicker = default(LockPicker); ref LockPicker reference = ref lockPicker; GrabbableObject currentlyHeldObjectServer = StartOfRound.Instance.allPlayerScripts[playerId].currentlyHeldObjectServer; reference = (LockPicker)(object)((currentlyHeldObjectServer is LockPicker) ? currentlyHeldObjectServer : null); if ((Object)(object)lockPicker == (Object)null) { yield break; } attacking = true; interactTrigger.interactable = false; AudioSource component = ((Component)lockPicker).GetComponent<AudioSource>(); component.PlayOneShot(lockPicker.placeLockPickerClips[Random.Range(0, lockPicker.placeLockPickerClips.Length)]); lockPicker.armsAnimator.SetBool("mounted", true); lockPicker.armsAnimator.SetBool("picking", true); component.Play(); component.pitch = Random.Range(0.94f, 1.06f); lockPicker.isOnDoor = true; lockPicker.isPickingLock = true; ((GrabbableObject)lockPicker).grabbable = false; if (((NetworkBehaviour)lockPicker).IsOwner) { ((GrabbableObject)lockPicker).playerHeldBy.DiscardHeldObject(true, ((NetworkBehaviour)MimicNetworker.Instance).NetworkObject, ((Component)this).transform.position + ((Component)this).transform.up * 1.5f - ((Component)this).transform.forward * 1.15f, true); } float startTime = Time.timeSinceLevelLoad; yield return (object)new WaitUntil((Func<bool>)(() => !((GrabbableObject)lockPicker).isHeld || Time.timeSinceLevelLoad - startTime > 10f)); ((Component)lockPicker).transform.localEulerAngles = new Vector3(((Component)this).transform.eulerAngles.x, ((Component)this).transform.eulerAngles.y + 90f, ((Component)this).transform.eulerAngles.z); yield return (object)new WaitForSeconds(5f); RetractClaws.Invoke(lockPicker, null); ((Component)lockPicker).transform.SetParent((Transform)null); ((GrabbableObject)lockPicker).startFallingPosition = ((Component)lockPicker).transform.position; ((GrabbableObject)lockPicker).FallToGround(false); ((GrabbableObject)lockPicker).grabbable = true; yield return (object)new WaitForSeconds(1f); anger = 3; attacking = false; interactTrigger.interactable = false; PlayerControllerB val = null; float num = 9999f; PlayerControllerB[] allPlayerScripts = StartOfRound.Instance.allPlayerScripts; foreach (PlayerControllerB val2 in allPlayerScripts) { float num2 = Vector3.Distance(((Component)this).transform.position, ((Component)val2).transform.position); if (num2 < num) { num = num2; val = val2; } } if ((Object)(object)val != (Object)null) { MimicNetworker.Instance.MimicAttackClientRpc((int)val.playerClientId, mimicIndex); } else { interactTrigger.interactable = true; } } public IEnumerator AddAnger(int amount) { if (angering || attacking) { yield break; } angering = true; anger += amount; if (anger == 1) { Sprite oldIcon2 = interactTrigger.hoverIcon; interactTrigger.hoverIcon = LostFingersIcon; mimicAnimator.SetTrigger("Growl"); yield return (object)new WaitForSeconds(2.75f); interactTrigger.hoverIcon = oldIcon2; sprayCount = 0; angering = false; yield break; } if (anger == 2) { interactTrigger.holdTip = "DIE : [LMB]"; interactTrigger.timeToHold = 0.25f; Sprite oldIcon2 = interactTrigger.hoverIcon; interactTrigger.hoverIcon = LostFingersIcon; mimicAnimator.SetTrigger("Growl"); yield return (object)new WaitForSeconds(2.75f); interactTrigger.hoverIcon = oldIcon2; sprayCount = 0; angering = false; yield break; } if (anger > 2) { PlayerControllerB val = null; float num = 9999f; PlayerControllerB[] allPlayerScripts = StartOfRound.Instance.allPlayerScripts; foreach (PlayerControllerB val2 in allPlayerScripts) { float num2 = Vector3.Distance(((Component)this).transform.position, ((Component)val2).transform.position); if (num2 < num) { num = num2; val = val2; } } if ((Object)(object)val != (Object)null) { MimicNetworker.Instance.MimicAttackClientRpc((int)val.playerClientId, mimicIndex); } } sprayCount = 0; angering = false; } } public class MimicCollider : MonoBehaviour, IHittable { public MimicDoor mimic; bool IHittable.Hit(int force, Vector3 hitDirection, PlayerControllerB playerWhoHit = null, bool playHitSFX = false, int hitID = -1) { if (Mimics.UpgradeCompatibility) { force = 1; } MimicNetworker.Instance.MimicAddAnger(force, mimic.mimicIndex); return true; } } public class MimicListener : MonoBehaviour, INoiseListener { public MimicDoor mimic; private int tolerance = 100; void INoiseListener.DetectNoise(Vector3 noisePosition, float noiseLoudness, int timesPlayedInOneSpot, int noiseID) { //IL_0014: 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) if ((noiseLoudness >= 0.9f || noiseID == 101158) && Vector3.Distance(noisePosition, ((Component)mimic).transform.position) < 5f) { switch (noiseID) { case 75: tolerance--; break; case 5: tolerance -= 15; break; case 101158: tolerance -= 35; break; default: tolerance -= 30; break; } if (tolerance <= 0) { tolerance = 100; MimicNetworker.Instance.MimicAddAnger(1, mimic.mimicIndex); } } } } } namespace Mimics.API { public static class MimicsAPI { private static MainMimicsAPI _API; internal static MainMimicsAPI MainAPI { get { if (_API == null) { _API = new MainMimicsAPI(); } return _API; } } public static IMimicsAPI GetAPI() { return MainAPI; } } public interface IMimicsAPI { void RegisterMimicEventHandler(MimicEventHandler handler); MimicEventHandler GetCurrentMimicEventHandler(); } internal class MainMimicsAPI : IMimicsAPI { internal List<MimicEventHandler> mimicEventHandlers = new List<MimicEventHandler>(); internal MimicEventHandler _currentMimicEventHandler; public void RegisterMimicEventHandler(MimicEventHandler handler) { Mimics.MimicsLogger.LogInfo((object)("Registered handler for " + handler.ModGUID)); mimicEventHandlers.Add(handler); } public MimicEventHandler GetCurrentMimicEventHandler() { return _currentMimicEventHandler; } internal void RefreshMimicEventHandler() { _currentMimicEventHandler = null; foreach (MimicEventHandler mimicEventHandler in mimicEventHandlers) { try { if (mimicEventHandler.IsMyInteriorLoaded && (_currentMimicEventHandler == null || mimicEventHandler.Priority > _currentMimicEventHandler.Priority)) { _currentMimicEventHandler = mimicEventHandler; } } catch (Exception ex) { string text = ((_currentMimicEventHandler != null) ? _currentMimicEventHandler.ModGUID : "NULL"); Mimics.MimicsLogger.LogError((object)("Error with IsMyInteriorLoaded/Priority function for handler " + mimicEventHandler.ModGUID + " or " + text)); Mimics.MimicsLogger.LogError((object)ex.ToString()); } } } internal bool IgnoreDefaultPlacementValidation(Doorway doorway) { try { if (_currentMimicEventHandler == null) { return false; } return _currentMimicEventHandler.IgnoreDefaultPlacementValidation(doorway); } catch (Exception ex) { Mimics.MimicsLogger.LogError((object)("Error with IgnoreDefaultPlacementValidation function for handler " + _currentMimicEventHandler.ModGUID)); Mimics.MimicsLogger.LogError((object)ex.ToString()); } return false; } internal bool IsPlacementValid(Doorway doorway) { try { if (_currentMimicEventHandler == null) { return true; } return _currentMimicEventHandler.IsPlacementValid(doorway); } catch (Exception ex) { Mimics.MimicsLogger.LogError((object)("Error with IsPlacementValid function for handler " + _currentMimicEventHandler.ModGUID)); Mimics.MimicsLogger.LogError((object)ex.ToString()); } return true; } internal bool OverrideDefaultImperfectionCreation(MimicDoor mimicDoor, Doorway doorway) { try { if (_currentMimicEventHandler == null) { return false; } return _currentMimicEventHandler.OverrideDefaultImperfectionCreation(mimicDoor, doorway); } catch (Exception ex) { Mimics.MimicsLogger.LogError((object)("Error with OverrideDefaultImperfectionCreation function for handler " + _currentMimicEventHandler.ModGUID)); Mimics.MimicsLogger.LogError((object)ex.ToString()); } return false; } internal void OnMimicCreated(MimicDoor mimicDoor, Doorway doorway) { try { _currentMimicEventHandler?.OnMimicCreated(mimicDoor, doorway); } catch (Exception ex) { Mimics.MimicsLogger.LogError((object)("Error with OnMimicCreated function for handler " + _currentMimicEventHandler.ModGUID)); Mimics.MimicsLogger.LogError((object)ex.ToString()); } } internal void OnMimicCreateImperfections(MimicDoor mimicDoor) { try { _currentMimicEventHandler?.OnMimicCreateImperfections(mimicDoor); } catch (Exception ex) { Mimics.MimicsLogger.LogError((object)("Error with OnMimicCreateImperfections function for handler " + _currentMimicEventHandler.ModGUID)); Mimics.MimicsLogger.LogError((object)ex.ToString()); } } internal void OnMimicAttackStart(MimicDoor mimicDoor, PlayerControllerB playerToAttack) { try { _currentMimicEventHandler?.OnMimicAttackStart(mimicDoor, playerToAttack); } catch (Exception ex) { Mimics.MimicsLogger.LogError((object)("Error with OnMimicAttackStart function for handler " + _currentMimicEventHandler.ModGUID)); Mimics.MimicsLogger.LogError((object)ex.ToString()); } } internal void OnMimicAttackEnd(MimicDoor mimicDoor) { try { _currentMimicEventHandler?.OnMimicAttackEnd(mimicDoor); } catch (Exception ex) { Mimics.MimicsLogger.LogError((object)("Error with OnMimicAttackEnd function for handler " + _currentMimicEventHandler.ModGUID)); Mimics.MimicsLogger.LogError((object)ex.ToString()); } } } public abstract class MimicEventHandler { public abstract string ModGUID { get; } public virtual bool IsMyInteriorLoaded => false; public virtual int Priority => 0; public virtual bool IsPlacementValid(Doorway doorway) { return true; } public virtual bool IgnoreDefaultPlacementValidation(Doorway doorway) { return false; } public virtual bool OverrideDefaultImperfectionCreation(MimicDoor mimicDoor, Doorway doorway) { return false; } public virtual void OnMimicCreated(MimicDoor mimicDoor, Doorway doorway) { } public virtual void OnMimicCreateImperfections(MimicDoor mimicDoor) { } public virtual void OnMimicAttackStart(MimicDoor mimicDoor, PlayerControllerB playerToAttack) { } public virtual void OnMimicAttackEnd(MimicDoor mimicDoor) { } } } namespace Mimics.NetcodePatcher { [AttributeUsage(AttributeTargets.Module)] internal class NetcodePatchedAssemblyAttribute : Attribute { } }
BepInEx/plugins/SCPCBDunGen/SCPCBDunGen.dll
Decompiled 3 months ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using GameNetcodeStuff; using LethalLevelLoader; using LobbyCompatibility.Enums; using LobbyCompatibility.Features; using Microsoft.CodeAnalysis; using Newtonsoft.Json; using On; using PiggyVarietyMod; using SCPCBDunGen.NetcodePatcher; using SCPCBDunGen.Patches; using Unity.Netcode; using UnityEngine; using UnityEngine.AI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: IgnoresAccessChecksTo("AmazingAssets.TerrainToMesh")] [assembly: IgnoresAccessChecksTo("Assembly-CSharp-firstpass")] [assembly: IgnoresAccessChecksTo("Assembly-CSharp")] [assembly: IgnoresAccessChecksTo("ClientNetworkTransform")] [assembly: IgnoresAccessChecksTo("DissonanceVoip")] [assembly: IgnoresAccessChecksTo("Facepunch Transport for Netcode for GameObjects")] [assembly: IgnoresAccessChecksTo("Facepunch.Steamworks.Win64")] [assembly: IgnoresAccessChecksTo("Unity.AI.Navigation")] [assembly: IgnoresAccessChecksTo("Unity.Animation.Rigging")] [assembly: IgnoresAccessChecksTo("Unity.Animation.Rigging.DocCodeExamples")] [assembly: IgnoresAccessChecksTo("Unity.Burst")] [assembly: IgnoresAccessChecksTo("Unity.Burst.Unsafe")] [assembly: IgnoresAccessChecksTo("Unity.Collections")] [assembly: IgnoresAccessChecksTo("Unity.Collections.LowLevel.ILSupport")] [assembly: IgnoresAccessChecksTo("Unity.InputSystem")] [assembly: IgnoresAccessChecksTo("Unity.InputSystem.ForUI")] [assembly: IgnoresAccessChecksTo("Unity.Jobs")] [assembly: IgnoresAccessChecksTo("Unity.Mathematics")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.Common")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.MetricTypes")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStats")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Component")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Configuration")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Implementation")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsReporting")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetworkProfiler.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetworkSolutionInterface")] [assembly: IgnoresAccessChecksTo("Unity.Netcode.Components")] [assembly: IgnoresAccessChecksTo("Unity.Netcode.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.Networking.Transport")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Csg")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.KdTree")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Poly2Tri")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Stl")] [assembly: IgnoresAccessChecksTo("Unity.Profiling.Core")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.ShaderLibrary")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Config.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.ShaderGraph.ShaderGraphLibrary")] [assembly: IgnoresAccessChecksTo("Unity.Services.Authentication")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Analytics")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Configuration")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Device")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Environments")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Environments.Internal")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Internal")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Networking")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Registration")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Scheduler")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Telemetry")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Threading")] [assembly: IgnoresAccessChecksTo("Unity.Services.QoS")] [assembly: IgnoresAccessChecksTo("Unity.Services.Relay")] [assembly: IgnoresAccessChecksTo("Unity.TextMeshPro")] [assembly: IgnoresAccessChecksTo("Unity.Timeline")] [assembly: IgnoresAccessChecksTo("Unity.VisualEffectGraph.Runtime")] [assembly: IgnoresAccessChecksTo("UnityEngine.ARModule")] [assembly: IgnoresAccessChecksTo("UnityEngine.NVIDIAModule")] [assembly: IgnoresAccessChecksTo("UnityEngine.UI")] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("SCPCBDunGen")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("4.3.4.0")] [assembly: AssemblyInformationalVersion("4.3.4+effb0360ba5e19c8134781c129e09319de632a03")] [assembly: AssemblyProduct("SCPCBDunGen")] [assembly: AssemblyTitle("SCPCBDunGen")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("4.3.4.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] [module: NetcodePatchedAssembly] internal class <Module> { static <Module>() { } } namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace SCPCBDunGen { public class SCP914Converter : NetworkBehaviour { public enum SCP914Setting { ROUGH, COARSE, ONETOONE, FINE, VERYFINE } public BoxCollider InputStore; public Collider colliderOutput; public InteractTrigger SettingKnobTrigger; public GameObject SettingKnobPivot; public AudioSource SettingKnobSoundSrc; public InteractTrigger ActivateTrigger; public AudioSource ActivateAudioSrc; public AudioSource RefineAudioSrc; public Animator DoorIn; public Animator DoorOut; private readonly (SCP914Setting, float)[] SCP914SettingRotations = new(SCP914Setting, float)[5] { (SCP914Setting.ROUGH, 90f), (SCP914Setting.COARSE, 45f), (SCP914Setting.ONETOONE, 0f), (SCP914Setting.FINE, -45f), (SCP914Setting.VERYFINE, -90f) }; private Dictionary<Item, List<Item>>[] arItemMappings = new Dictionary<Item, List<Item>>[5] { new Dictionary<Item, List<Item>>(), new Dictionary<Item, List<Item>>(), new Dictionary<Item, List<Item>>(), new Dictionary<Item, List<Item>>(), new Dictionary<Item, List<Item>>() }; private Dictionary<EnemyType, List<EnemyType>>[] arEnemyMappings = new Dictionary<EnemyType, List<EnemyType>>[5] { new Dictionary<EnemyType, List<EnemyType>>(), new Dictionary<EnemyType, List<EnemyType>>(), new Dictionary<EnemyType, List<EnemyType>>(), new Dictionary<EnemyType, List<EnemyType>>(), new Dictionary<EnemyType, List<EnemyType>>() }; private Dictionary<Item, List<EnemyType>>[] arItemEnemyMappings = new Dictionary<Item, List<EnemyType>>[5] { new Dictionary<Item, List<EnemyType>>(), new Dictionary<Item, List<EnemyType>>(), new Dictionary<Item, List<EnemyType>>(), new Dictionary<Item, List<EnemyType>>(), new Dictionary<Item, List<EnemyType>>() }; private Dictionary<EnemyType, List<Item>>[] arEnemyItemMappings = new Dictionary<EnemyType, List<Item>>[5] { new Dictionary<EnemyType, List<Item>>(), new Dictionary<EnemyType, List<Item>>(), new Dictionary<EnemyType, List<Item>>(), new Dictionary<EnemyType, List<Item>>(), new Dictionary<EnemyType, List<Item>>() }; private int iCurrentState; private bool bActive; private Transform ScrapTransform; private RoundManager roundManager; private StartOfRound StartOfRound; private EnemyType MaskedType; public void AddConversion(SCP914Setting setting, Item itemInput, List<Item> lItemOutputs) { Dictionary<Item, List<Item>> dictionary = arItemMappings[(int)setting]; if (dictionary.TryGetValue(itemInput, out var value)) { value.AddRange(lItemOutputs); } else { arItemMappings[(int)setting].Add(itemInput, lItemOutputs); } } public void AddConversion(SCP914Setting setting, EnemyType enemyInput, List<EnemyType> lEnemyOutputs) { Dictionary<EnemyType, List<EnemyType>> dictionary = arEnemyMappings[(int)setting]; if (dictionary.TryGetValue(enemyInput, out var value)) { value.AddRange(lEnemyOutputs); } else { arEnemyMappings[(int)setting].Add(enemyInput, lEnemyOutputs); } } public void AddConversion(SCP914Setting setting, Item itemInput, List<EnemyType> lEnemyOutputs) { Dictionary<Item, List<EnemyType>> dictionary = arItemEnemyMappings[(int)setting]; if (dictionary.TryGetValue(itemInput, out var value)) { value.AddRange(lEnemyOutputs); } else { arItemEnemyMappings[(int)setting].Add(itemInput, lEnemyOutputs); } } public void AddConversion(SCP914Setting setting, EnemyType enemyInput, List<Item> lItemOutputs) { Dictionary<EnemyType, List<Item>> dictionary = arEnemyItemMappings[(int)setting]; if (dictionary.TryGetValue(enemyInput, out var value)) { value.AddRange(lItemOutputs); } else { arEnemyItemMappings[(int)setting].Add(enemyInput, lItemOutputs); } } private Dictionary<Item, List<Item>> GetItemMapping() { return arItemMappings[iCurrentState]; } private Dictionary<EnemyType, List<EnemyType>> GetEnemyMapping() { return arEnemyMappings[iCurrentState]; } private Dictionary<Item, List<EnemyType>> GetItemEnemyMapping() { return arItemEnemyMappings[iCurrentState]; } private Dictionary<EnemyType, List<Item>> GetEnemyItemMapping() { return arEnemyItemMappings[iCurrentState]; } private Vector3 GetRandomNavMeshPositionInCollider(Collider collider) { //IL_0001: 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_0009: 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_0010: 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_0018: 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_002b: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) Bounds bounds = collider.bounds; Vector3 center = ((Bounds)(ref bounds)).center; bounds = collider.bounds; float x = ((Bounds)(ref bounds)).extents.x; bounds = collider.bounds; float num = Math.Min(x, ((Bounds)(ref bounds)).extents.z); center.x += Random.Range(0f - num, num); center.z += Random.Range(0f - num, num); ref float y = ref center.y; float num2 = y; bounds = collider.bounds; y = num2 - ((Bounds)(ref bounds)).extents.y / 2f; NavMeshHit val = default(NavMeshHit); if (NavMesh.SamplePosition(center, ref val, 5f, -1)) { return ((NavMeshHit)(ref val)).position; } return center; } private Vector3 GetRandomPositionInCollider(Collider collider) { //IL_0001: 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_0009: 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_0010: 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_0018: 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_002b: 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) Bounds bounds = collider.bounds; Vector3 center = ((Bounds)(ref bounds)).center; bounds = collider.bounds; float x = ((Bounds)(ref bounds)).extents.x; bounds = collider.bounds; float num = Math.Min(x, ((Bounds)(ref bounds)).extents.z); center.x += Random.Range(0f - num, num); center.z += Random.Range(0f - num, num); return center; } [ServerRpc(RequireOwnership = false)] public void TurnStateServerRpc() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(2627837757u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 2627837757u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { int iNewState = (iCurrentState + 1) % 5; TurnStateClientRpc(iNewState); } } } [ClientRpc] public void TurnStateClientRpc(int iNewState) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: 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_0089: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_0111: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(301590527u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, iNewState); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 301590527u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost)) { iCurrentState = iNewState; Quaternion rotation = SettingKnobPivot.transform.rotation; Vector3 eulerAngles = ((Quaternion)(ref rotation)).eulerAngles; eulerAngles.z = SCP914SettingRotations[iCurrentState].Item2; SettingKnobPivot.transform.rotation = Quaternion.Euler(eulerAngles); SettingKnobSoundSrc.Play(); } } } [ServerRpc(RequireOwnership = false)] public void ActivateServerRpc() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(1051910848u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 1051910848u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost) && !bActive) { bActive = true; ActivateClientRpc(); ((MonoBehaviour)this).StartCoroutine(ConversionProcess()); } } } [ClientRpc] public void ActivateClientRpc() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(3833341719u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 3833341719u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost)) { ActivateTrigger.interactable = false; SettingKnobTrigger.interactable = false; ActivateAudioSrc.Play(); DoorIn.SetBoolString("open", false); DoorOut.SetBoolString("open", false); } } } [ClientRpc] public void RefineFinishClientRpc() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(4143732333u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 4143732333u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost)) { ActivateTrigger.interactable = true; SettingKnobTrigger.interactable = true; DoorIn.SetBoolString("open", true); DoorOut.SetBoolString("open", true); } } } [ClientRpc] public void SpawnItemsClientRpc(NetworkObjectReference[] arNetworkObjectReferences, int[] arScrapValues, bool bChargeBattery) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_013d: Unknown result type (might be due to invalid IL or missing references) //IL_0147: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Unknown result type (might be due to invalid IL or missing references) //IL_0119: Unknown result type (might be due to invalid IL or missing references) //IL_012d: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(4044311993u, val, (RpcDelivery)0); bool flag = arNetworkObjectReferences != null; ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives)); if (flag) { ((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkObjectReference>(arNetworkObjectReferences, default(ForNetworkSerializable)); } bool flag2 = arScrapValues != null; ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag2, default(ForPrimitives)); if (flag2) { ((FastBufferWriter)(ref val2)).WriteValueSafe<int>(arScrapValues, default(ForPrimitives)); } ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref bChargeBattery, default(ForPrimitives)); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 4044311993u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage != 2 || (!networkManager.IsClient && !networkManager.IsHost)) { return; } NetworkObject val3 = default(NetworkObject); for (int i = 0; i < arNetworkObjectReferences.Length; i++) { SCPCBDunGen.Logger.LogInfo((object)$"Item conversion scrap value {i}: {arScrapValues[i]}"); if (((NetworkObjectReference)(ref arNetworkObjectReferences[i])).TryGet(ref val3, (NetworkManager)null)) { GrabbableObject component = ((Component)val3).GetComponent<GrabbableObject>(); if (component.itemProperties.isScrap) { component.SetScrapValue(arScrapValues[i]); } if (component.itemProperties.requiresBattery) { component.insertedBattery.charge = (bChargeBattery ? 1f : 0f); } } } } private IEnumerator ConversionProcess() { RefineAudioSrc.Play(); yield return (object)new WaitForSeconds(7f); if ((Object)(object)roundManager == (Object)null) { SCPCBDunGen.Logger.LogInfo((object)"Getting round manager"); roundManager = Object.FindObjectOfType<RoundManager>(); if ((Object)(object)roundManager == (Object)null) { SCPCBDunGen.Logger.LogError((object)"Failed to find round manager."); yield break; } } if ((Object)(object)ScrapTransform == (Object)null) { SCP914Converter sCP914Converter = this; GameObject obj = GameObject.FindGameObjectWithTag("MapPropsContainer"); sCP914Converter.ScrapTransform = ((obj != null) ? obj.transform : null); if ((Object)(object)ScrapTransform == (Object)null) { SCPCBDunGen.Logger.LogError((object)"SCPCB Failed to find props container."); yield break; } } List<NetworkObjectReference> list = new List<NetworkObjectReference>(); List<int> list2 = new List<int>(); bool bChargeBattery = iCurrentState > 1; BoxCollider inputStore = InputStore; if ((Object)(object)inputStore == (Object)null) { SCPCBDunGen.Logger.LogError((object)"Failed to get input store collider."); yield break; } Collider[] array = Physics.OverlapBox(inputStore.center + ((Component)inputStore).gameObject.transform.position, inputStore.size / 2f); SCPCBDunGen.Logger.LogInfo((object)$"Contained item count: {array.Length}"); Collider[] array2 = array; foreach (Collider val in array2) { GameObject gameObject = ((Component)val).gameObject; SCPCBDunGen.Logger.LogInfo((object)("Converting " + ((Object)gameObject).name)); GrabbableObject component = gameObject.GetComponent<GrabbableObject>(); if ((Object)(object)component != (Object)null) { SCPCBDunGen.Logger.LogInfo((object)"Converting item."); ConvertItem(list, list2, component); continue; } PlayerControllerB component2 = gameObject.GetComponent<PlayerControllerB>(); if ((Object)(object)component2 != (Object)null) { SCPCBDunGen.Logger.LogInfo((object)"Converting player."); ConvertPlayer(component2); continue; } EnemyAI componentInParent = gameObject.GetComponentInParent<EnemyAI>(); if ((Object)(object)componentInParent != (Object)null) { SCPCBDunGen.Logger.LogInfo((object)"Converting enemy."); ConvertEnemy(list, list2, componentInParent); } else { SCPCBDunGen.Logger.LogWarning((object)("Unidentified object: " + ((Object)gameObject).name + ". Not converting.")); } } SCPCBDunGen.Logger.LogInfo((object)"Finished spawning scrap, syncing with clients"); SpawnItemsClientRpc(list.ToArray(), list2.ToArray(), bChargeBattery); yield return (object)new WaitForSeconds(7f); RefineFinishClientRpc(); bActive = false; } private void ConvertItemToItem(List<NetworkObjectReference> lNetworkObjectReferences, List<int> lScrapValues, GrabbableObject grabbable) { //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_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: 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) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_019e: Unknown result type (might be due to invalid IL or missing references) Vector3 randomPositionInCollider = GetRandomPositionInCollider(colliderOutput); GameObject val = null; NetworkObject val2 = null; GrabbableObject val3 = null; if (GetItemMapping().TryGetValue(grabbable.itemProperties, out List<Item> value)) { SCPCBDunGen.Logger.LogInfo((object)"Mapping found"); Item val4 = value[roundManager.AnomalyRandom.Next(value.Count)]; if ((Object)(object)val4 != (Object)null) { SCPCBDunGen.Logger.LogInfo((object)"Conversion found"); val = Object.Instantiate<GameObject>(val4.spawnPrefab, randomPositionInCollider, Quaternion.identity, ScrapTransform); val2 = val.GetComponent<NetworkObject>(); val3 = val.GetComponent<GrabbableObject>(); } } else { SCPCBDunGen.Logger.LogInfo((object)"No conversion, making new item copy with new scrap value"); val = Object.Instantiate<GameObject>(grabbable.itemProperties.spawnPrefab, randomPositionInCollider, Quaternion.identity, ScrapTransform); val2 = val.GetComponent<NetworkObject>(); val3 = val.GetComponent<GrabbableObject>(); } SCPCBDunGen.Logger.LogInfo((object)"Preprocessing done"); if ((Object)(object)val3 == (Object)null) { SCPCBDunGen.Logger.LogInfo((object)"Conversion was null, item is intended to be destroyed in process."); return; } Item itemProperties = val3.itemProperties; if (itemProperties.isScrap) { SCPCBDunGen.Logger.LogInfo((object)"Item is scrap or null, generating a copy with new value"); GrabbableObject component = val.GetComponent<GrabbableObject>(); int num = (int)((float)roundManager.AnomalyRandom.Next(itemProperties.minValue, itemProperties.maxValue) * roundManager.scrapValueMultiplier); component.SetScrapValue(num); SCPCBDunGen.Logger.LogInfo((object)$"new scrap value: {num}"); lScrapValues.Add(num); } else { SCPCBDunGen.Logger.LogInfo((object)"Item is not scrap, adding empty scrap value"); lScrapValues.Add(0); } val2.Spawn(true); lNetworkObjectReferences.Add(NetworkObjectReference.op_Implicit(val2)); } private void ConvertItemToEnemy(GrabbableObject grabbable, EnemyType enemyType) { //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_0013: 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) Vector3 randomNavMeshPositionInCollider = GetRandomNavMeshPositionInCollider(colliderOutput); roundManager.SpawnEnemyGameObject(randomNavMeshPositionInCollider, 0f, -1, enemyType); } private void ConvertItem(List<NetworkObjectReference> lNetworkObjectReferences, List<int> lScrapValues, GrabbableObject grabbable) { if (grabbable.isHeld) { return; } SCPCBDunGen.Logger.LogInfo((object)("Found grabbable item " + ((Object)grabbable.itemProperties).name)); Dictionary<Item, List<Item>> itemMapping = GetItemMapping(); Dictionary<Item, List<EnemyType>> itemEnemyMapping = GetItemEnemyMapping(); if (itemEnemyMapping.TryGetValue(grabbable.itemProperties, out var value)) { if (roundManager.AnomalyRandom.Next(2) == 0 && itemMapping.ContainsKey(grabbable.itemProperties)) { ConvertItemToItem(lNetworkObjectReferences, lScrapValues, grabbable); } else { ConvertItemToEnemy(grabbable, value[roundManager.AnomalyRandom.Next(value.Count)]); } } else { ConvertItemToItem(lNetworkObjectReferences, lScrapValues, grabbable); } Object.Destroy((Object)(object)((Component)grabbable).gameObject); } [ClientRpc] private void ConvertPlayerTeleportClientRpc(NetworkBehaviourReference netBehaviourRefPlayer, Vector3 vPosition) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Expected O, but got Unknown //IL_0111: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(3018499267u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkBehaviourReference>(ref netBehaviourRefPlayer, default(ForNetworkSerializable)); ((FastBufferWriter)(ref val2)).WriteValueSafe(ref vPosition); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 3018499267u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost)) { NetworkBehaviour val3 = null; ((NetworkBehaviourReference)(ref netBehaviourRefPlayer)).TryGet(ref val3, (NetworkManager)null); if ((Object)(object)val3 == (Object)null) { SCPCBDunGen.Logger.LogError((object)"Failed to get player controller."); return; } PlayerControllerB val4 = (PlayerControllerB)val3; val4.TeleportPlayer(vPosition, false, 0f, false, true); } } [ClientRpc] private void ConvertPlayerKillClientRpc(NetworkBehaviourReference netBehaviourRefPlayer) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: Unknown result type (might be due to invalid IL or missing references) //IL_0103: Expected O, but got Unknown //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Unknown result type (might be due to invalid IL or missing references) //IL_0114: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(1252059581u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkBehaviourReference>(ref netBehaviourRefPlayer, default(ForNetworkSerializable)); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1252059581u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost)) { NetworkBehaviour val3 = null; ((NetworkBehaviourReference)(ref netBehaviourRefPlayer)).TryGet(ref val3, (NetworkManager)null); if ((Object)(object)val3 == (Object)null) { SCPCBDunGen.Logger.LogError((object)"Failed to get player controller."); return; } PlayerControllerB val4 = (PlayerControllerB)val3; val4.KillPlayer(Vector3.zero, true, (CauseOfDeath)6, 0, default(Vector3)); } } [ClientRpc] private void ConvertPlayerAlterHealthClientRpc(NetworkBehaviourReference netBehaviourRefPlayer, int iHealthDelta) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Expected O, but got Unknown //IL_0119: Unknown result type (might be due to invalid IL or missing references) //IL_011f: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(527346026u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkBehaviourReference>(ref netBehaviourRefPlayer, default(ForNetworkSerializable)); BytePacker.WriteValueBitPacked(val2, iHealthDelta); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 527346026u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost)) { NetworkBehaviour val3 = null; ((NetworkBehaviourReference)(ref netBehaviourRefPlayer)).TryGet(ref val3, (NetworkManager)null); if ((Object)(object)val3 == (Object)null) { SCPCBDunGen.Logger.LogError((object)"Failed to get player controller."); return; } PlayerControllerB val4 = (PlayerControllerB)val3; val4.DamagePlayer(iHealthDelta, true, true, (CauseOfDeath)8, 0, false, default(Vector3)); } } [ClientRpc] private void ConvertPlayerRandomSkinClientRpc(NetworkBehaviourReference netBehaviourRefPlayer, int iSuitID) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_0141: Unknown result type (might be due to invalid IL or missing references) //IL_0147: Expected O, but got Unknown NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(1669287785u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkBehaviourReference>(ref netBehaviourRefPlayer, default(ForNetworkSerializable)); BytePacker.WriteValueBitPacked(val2, iSuitID); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1669287785u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage != 2 || (!networkManager.IsClient && !networkManager.IsHost)) { return; } if ((Object)(object)StartOfRound == (Object)null) { StartOfRound = Object.FindObjectOfType<StartOfRound>(); if ((Object)(object)StartOfRound == (Object)null) { SCPCBDunGen.Logger.LogError((object)"Failed to find StartOfRound."); return; } } NetworkBehaviour val3 = null; ((NetworkBehaviourReference)(ref netBehaviourRefPlayer)).TryGet(ref val3, (NetworkManager)null); if ((Object)(object)val3 == (Object)null) { SCPCBDunGen.Logger.LogError((object)"Failed to get player controller."); return; } PlayerControllerB val4 = (PlayerControllerB)val3; int num = 0; foreach (UnlockableItem unlockable in StartOfRound.unlockablesList.unlockables) { if ((Object)(object)unlockable.suitMaterial != (Object)null) { SCPCBDunGen.Logger.LogInfo((object)$"Found suit at index {num}"); } num++; } UnlockableItem val5 = StartOfRound.unlockablesList.unlockables[iSuitID]; if (val5 == null) { SCPCBDunGen.Logger.LogError((object)$"Invalid suit ID: {iSuitID}"); return; } Material suitMaterial = val5.suitMaterial; ((Renderer)val4.thisPlayerModel).material = suitMaterial; ((Renderer)val4.thisPlayerModelLOD1).material = suitMaterial; ((Renderer)val4.thisPlayerModelLOD2).material = suitMaterial; ((Renderer)val4.thisPlayerModelArms).material = suitMaterial; val4.currentSuitID = iSuitID; } private void ConvertPlayerRandomSkin(PlayerControllerB playerController) { //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)StartOfRound == (Object)null) { StartOfRound = Object.FindObjectOfType<StartOfRound>(); if ((Object)(object)StartOfRound == (Object)null) { SCPCBDunGen.Logger.LogError((object)"Failed to find StartOfRound."); return; } } List<int> list = new List<int>(); int num = 0; foreach (UnlockableItem unlockable in StartOfRound.unlockablesList.unlockables) { if ((Object)(object)unlockable.suitMaterial != (Object)null && num != playerController.currentSuitID) { list.Add(num); } num++; } int count = list.Count; if (count == 0) { SCPCBDunGen.Logger.LogError((object)"No suits to swap to found."); return; } int index = roundManager.AnomalyRandom.Next(0, count); NetworkBehaviourReference netBehaviourRefPlayer = NetworkBehaviourReference.op_Implicit((NetworkBehaviour)(object)playerController); ConvertPlayerRandomSkinClientRpc(netBehaviourRefPlayer, list[index]); } private IEnumerator ConvertPlayerMaskedWaitForSpawn(NetworkObjectReference netObjRefMasked, NetworkBehaviourReference netBehaviourRefPlayer) { //IL_0007: 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_000e: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) NetworkObject netObjMasked = null; NetworkBehaviour netBehaviourPlayer = null; float fStartTime = Time.realtimeSinceStartup; yield return (object)new WaitUntil((Func<bool>)(() => Time.realtimeSinceStartup - fStartTime > 20f || ((NetworkObjectReference)(ref netObjRefMasked)).TryGet(ref netObjMasked, (NetworkManager)null))); yield return (object)new WaitUntil((Func<bool>)(() => Time.realtimeSinceStartup - fStartTime > 20f || ((NetworkBehaviourReference)(ref netBehaviourRefPlayer)).TryGet(ref netBehaviourPlayer, (NetworkManager)null))); PlayerControllerB playerController = (PlayerControllerB)netBehaviourPlayer; if ((Object)(object)playerController.deadBody == (Object)null) { yield return (object)new WaitUntil((Func<bool>)(() => Time.realtimeSinceStartup - fStartTime > 20f || (Object)(object)playerController.deadBody != (Object)null)); } if ((Object)(object)playerController.deadBody != (Object)null) { playerController.deadBody.DeactivateBody(false); if ((Object)(object)netObjMasked != (Object)null) { MaskedPlayerEnemy component = ((Component)netObjMasked).GetComponent<MaskedPlayerEnemy>(); component.mimickingPlayer = playerController; component.SetSuit(playerController.currentSuitID); ((EnemyAI)component).SetEnemyOutside(false); playerController.redirectToEnemy = (EnemyAI)(object)component; } } } [ClientRpc] private void ConvertPlayerMaskedClientRpc(NetworkObjectReference netObjRefMasked, NetworkBehaviourReference netBehaviourRefPlayer) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00cc: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Unknown result type (might be due to invalid IL or missing references) //IL_011e: Expected O, but got Unknown //IL_011f: Unknown result type (might be due to invalid IL or missing references) //IL_0129: Unknown result type (might be due to invalid IL or missing references) //IL_012f: Unknown result type (might be due to invalid IL or missing references) //IL_0151: Unknown result type (might be due to invalid IL or missing references) //IL_0152: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(358260797u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkObjectReference>(ref netObjRefMasked, default(ForNetworkSerializable)); ((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkBehaviourReference>(ref netBehaviourRefPlayer, default(ForNetworkSerializable)); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 358260797u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage != 2 || (!networkManager.IsClient && !networkManager.IsHost)) { return; } NetworkBehaviour val3 = null; ((NetworkBehaviourReference)(ref netBehaviourRefPlayer)).TryGet(ref val3, (NetworkManager)null); if ((Object)(object)val3 == (Object)null) { SCPCBDunGen.Logger.LogError((object)"Failed to get player controller."); return; } PlayerControllerB val4 = (PlayerControllerB)val3; val4.KillPlayer(Vector3.zero, true, (CauseOfDeath)5, 0, default(Vector3)); if ((Object)(object)val4.deadBody != (Object)null) { val4.deadBody.DeactivateBody(false); } ((MonoBehaviour)this).StartCoroutine(ConvertPlayerMaskedWaitForSpawn(netObjRefMasked, netBehaviourRefPlayer)); } private void ConvertPlayerMasked(NetworkBehaviourReference netBehaviourRefPlayer, Vector3 vMaskedPosition) { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Expected O, but got Unknown //IL_002e: 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_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0139: Unknown result type (might be due to invalid IL or missing references) //IL_0146: Unknown result type (might be due to invalid IL or missing references) //IL_014b: Unknown result type (might be due to invalid IL or missing references) //IL_01af: Unknown result type (might be due to invalid IL or missing references) //IL_01b0: Unknown result type (might be due to invalid IL or missing references) NetworkBehaviour val = null; ((NetworkBehaviourReference)(ref netBehaviourRefPlayer)).TryGet(ref val, (NetworkManager)null); if ((Object)(object)val == (Object)null) { SCPCBDunGen.Logger.LogError((object)"Failed to get player controller."); return; } PlayerControllerB val2 = (PlayerControllerB)val; val2.KillPlayer(Vector3.zero, true, (CauseOfDeath)5, 0, default(Vector3)); if ((Object)(object)StartOfRound == (Object)null) { StartOfRound = Object.FindObjectOfType<StartOfRound>(); if ((Object)(object)StartOfRound == (Object)null) { SCPCBDunGen.Logger.LogError((object)"Failed to find StartOfRound."); return; } } if ((Object)(object)MaskedType == (Object)null) { SelectableLevel val3 = Array.Find(StartOfRound.levels, (SelectableLevel x) => x.PlanetName == "8 Titan"); if ((Object)(object)val3 == (Object)null) { SCPCBDunGen.Logger.LogError((object)"Failed to get Titan level data."); return; } MaskedType = val3.Enemies.Find((SpawnableEnemyWithRarity x) => x.enemyType.enemyName == "Masked")?.enemyType; if ((Object)(object)MaskedType == (Object)null) { SCPCBDunGen.Logger.LogError((object)"Failed to get masked enemy type."); return; } } NetworkObjectReference netObjRefMasked = roundManager.SpawnEnemyGameObject(vMaskedPosition, 0f, -1, MaskedType); NetworkObject val4 = default(NetworkObject); if (((NetworkObjectReference)(ref netObjRefMasked)).TryGet(ref val4, (NetworkManager)null)) { SCPCBDunGen.Logger.LogInfo((object)"Got network object for mask enemy"); MaskedPlayerEnemy component = ((Component)val4).GetComponent<MaskedPlayerEnemy>(); component.SetSuit(val2.currentSuitID); component.mimickingPlayer = val2; ((EnemyAI)component).SetEnemyOutside(false); val2.redirectToEnemy = (EnemyAI)(object)component; if ((Object)(object)val2.deadBody != (Object)null) { val2.deadBody.DeactivateBody(false); } } ConvertPlayerMaskedClientRpc(netObjRefMasked, netBehaviourRefPlayer); } private void ConvertPlayer(PlayerControllerB playerController) { //IL_001d: 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_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0029: 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_002c: Unknown result type (might be due to invalid IL or missing references) //IL_004f: 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_0069: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0091: Unknown result type (might be due to invalid IL or missing references) SCPCBDunGen.Logger.LogInfo((object)"Player detected, doing player conversion"); SCP914Setting sCP914Setting = (SCP914Setting)iCurrentState; Vector3 randomNavMeshPositionInCollider = GetRandomNavMeshPositionInCollider(colliderOutput); NetworkBehaviourReference netBehaviourRefPlayer = NetworkBehaviourReference.op_Implicit((NetworkBehaviour)(object)playerController); ConvertPlayerTeleportClientRpc(netBehaviourRefPlayer, randomNavMeshPositionInCollider); switch (sCP914Setting) { case SCP914Setting.ROUGH: ConvertPlayerKillClientRpc(netBehaviourRefPlayer); break; case SCP914Setting.COARSE: ConvertPlayerAlterHealthClientRpc(netBehaviourRefPlayer, 50); break; case SCP914Setting.ONETOONE: ConvertPlayerRandomSkin(playerController); break; case SCP914Setting.FINE: ConvertPlayerAlterHealthClientRpc(netBehaviourRefPlayer, -50); break; case SCP914Setting.VERYFINE: if (!playerController.AllowPlayerDeath()) { SCPCBDunGen.Logger.LogInfo((object)"Refined player with Very Fine, but player death is prevented. Doing nothing."); } else { ConvertPlayerMasked(NetworkBehaviourReference.op_Implicit((NetworkBehaviour)(object)playerController), randomNavMeshPositionInCollider); } break; default: SCPCBDunGen.Logger.LogError((object)"Invalid SCP 914 setting when attempting to convert player."); break; } } [ClientRpc] private void TeleportEnemyClientRpc(NetworkBehaviourReference netBehaviourRefEnemy, Vector3 vPosition) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Expected O, but got Unknown //IL_0111: Unknown result type (might be due to invalid IL or missing references) //IL_0112: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(2839432350u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkBehaviourReference>(ref netBehaviourRefEnemy, default(ForNetworkSerializable)); ((FastBufferWriter)(ref val2)).WriteValueSafe(ref vPosition); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2839432350u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost)) { NetworkBehaviour val3 = null; ((NetworkBehaviourReference)(ref netBehaviourRefEnemy)).TryGet(ref val3, (NetworkManager)null); if ((Object)(object)val3 == (Object)null) { SCPCBDunGen.Logger.LogError((object)"Failed to get enemy AI."); return; } EnemyAI val4 = (EnemyAI)val3; val4.serverPosition = vPosition; } } private void MoveEnemy(EnemyAI enemy, Vector3 NavPosition) { //IL_0015: 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_002d: Unknown result type (might be due to invalid IL or missing references) //IL_002e: 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) SCPCBDunGen.Logger.LogInfo((object)$"No conversions for enemy: {enemy.enemyType.enemyName}. Teleporting to {NavPosition}"); NetworkBehaviourReference netBehaviourRefEnemy = NetworkBehaviourReference.op_Implicit((NetworkBehaviour)(object)enemy); TeleportEnemyClientRpc(netBehaviourRefEnemy, NavPosition); enemy.agent.Warp(NavPosition); enemy.SyncPositionToClients(); if (iCurrentState == 0) { enemy.KillEnemyOnOwnerClient(false); } } private void ConvertEnemyToEnemy(EnemyAI enemy) { //IL_000e: 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) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_004f: 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) Dictionary<EnemyType, List<EnemyType>> enemyMapping = GetEnemyMapping(); Vector3 randomNavMeshPositionInCollider = GetRandomNavMeshPositionInCollider(colliderOutput); if (enemyMapping.TryGetValue(enemy.enemyType, out var value) && value.Count != 0) { EnemyType val = value[roundManager.AnomalyRandom.Next(value.Count)]; roundManager.SpawnEnemyGameObject(randomNavMeshPositionInCollider, 0f, -1, val); Object.Destroy((Object)(object)((Component)enemy).gameObject); } MoveEnemy(enemy, randomNavMeshPositionInCollider); } private void ConvertEnemyToItem(List<NetworkObjectReference> lNetworkObjectReferences, List<int> lScrapValues, EnemyAI enemy) { //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_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0195: Unknown result type (might be due to invalid IL or missing references) Vector3 randomPositionInCollider = GetRandomPositionInCollider(colliderOutput); GameObject val = null; NetworkObject val2 = null; GrabbableObject val3 = null; if (GetEnemyItemMapping().TryGetValue(enemy.enemyType, out List<Item> value)) { SCPCBDunGen.Logger.LogInfo((object)"Mapping found"); Item val4 = value[roundManager.AnomalyRandom.Next(value.Count)]; Object.Destroy((Object)(object)((Component)enemy).gameObject); if ((Object)(object)val4 != (Object)null) { SCPCBDunGen.Logger.LogInfo((object)"Conversion found"); val = Object.Instantiate<GameObject>(val4.spawnPrefab, randomPositionInCollider, Quaternion.identity, ScrapTransform); val2 = val.GetComponent<NetworkObject>(); val3 = val.GetComponent<GrabbableObject>(); } } else { SCPCBDunGen.Logger.LogInfo((object)"No conversion, teleporting enemy"); Vector3 randomNavMeshPositionInCollider = GetRandomNavMeshPositionInCollider(colliderOutput); MoveEnemy(enemy, randomNavMeshPositionInCollider); } SCPCBDunGen.Logger.LogInfo((object)"Preprocessing done"); if ((Object)(object)val3 == (Object)null) { SCPCBDunGen.Logger.LogInfo((object)"Conversion was null, item is intended to be destroyed in process."); return; } Item itemProperties = val3.itemProperties; if (itemProperties.isScrap) { SCPCBDunGen.Logger.LogInfo((object)"Item is scrap or null, generating a copy with new value"); GrabbableObject component = val.GetComponent<GrabbableObject>(); int num = (int)((float)roundManager.AnomalyRandom.Next(itemProperties.minValue, itemProperties.maxValue) * roundManager.scrapValueMultiplier); component.SetScrapValue(num); SCPCBDunGen.Logger.LogInfo((object)$"new scrap value: {num}"); lScrapValues.Add(num); } else { SCPCBDunGen.Logger.LogInfo((object)"Item is not scrap, adding empty scrap value"); lScrapValues.Add(0); } val2.Spawn(true); lNetworkObjectReferences.Add(NetworkObjectReference.op_Implicit(val2)); } private void ConvertEnemy(List<NetworkObjectReference> lNetworkObjectReferences, List<int> lScrapValues, EnemyAI enemy) { //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) Dictionary<EnemyType, List<Item>> enemyItemMapping = GetEnemyItemMapping(); Dictionary<EnemyType, List<EnemyType>> enemyMapping = GetEnemyMapping(); if (GetEnemyMapping().TryGetValue(enemy.enemyType, out List<EnemyType> _)) { if (roundManager.AnomalyRandom.Next(2) == 0 && GetEnemyItemMapping().ContainsKey(enemy.enemyType)) { ConvertEnemyToItem(lNetworkObjectReferences, lScrapValues, enemy); } else { ConvertEnemyToEnemy(enemy); } } else if (GetEnemyItemMapping().ContainsKey(enemy.enemyType)) { ConvertEnemyToItem(lNetworkObjectReferences, lScrapValues, enemy); } else { Vector3 randomNavMeshPositionInCollider = GetRandomNavMeshPositionInCollider(colliderOutput); MoveEnemy(enemy, randomNavMeshPositionInCollider); } Object.Destroy((Object)(object)((Component)enemy).gameObject); } protected override void __initializeVariables() { ((NetworkBehaviour)this).__initializeVariables(); } [RuntimeInitializeOnLoadMethod] internal static void InitializeRPCS_SCP914Converter() { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Expected O, but got Unknown //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Expected O, but got Unknown //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Expected O, but got Unknown //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Expected O, but got Unknown //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Expected O, but got Unknown //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Expected O, but got Unknown //IL_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Expected O, but got Unknown //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Expected O, but got Unknown //IL_011f: Unknown result type (might be due to invalid IL or missing references) //IL_0129: Expected O, but got Unknown //IL_013a: Unknown result type (might be due to invalid IL or missing references) //IL_0144: Expected O, but got Unknown NetworkManager.__rpc_func_table.Add(2627837757u, new RpcReceiveHandler(__rpc_handler_2627837757)); NetworkManager.__rpc_func_table.Add(301590527u, new RpcReceiveHandler(__rpc_handler_301590527)); NetworkManager.__rpc_func_table.Add(1051910848u, new RpcReceiveHandler(__rpc_handler_1051910848)); NetworkManager.__rpc_func_table.Add(3833341719u, new RpcReceiveHandler(__rpc_handler_3833341719)); NetworkManager.__rpc_func_table.Add(4143732333u, new RpcReceiveHandler(__rpc_handler_4143732333)); NetworkManager.__rpc_func_table.Add(4044311993u, new RpcReceiveHandler(__rpc_handler_4044311993)); NetworkManager.__rpc_func_table.Add(3018499267u, new RpcReceiveHandler(__rpc_handler_3018499267)); NetworkManager.__rpc_func_table.Add(1252059581u, new RpcReceiveHandler(__rpc_handler_1252059581)); NetworkManager.__rpc_func_table.Add(527346026u, new RpcReceiveHandler(__rpc_handler_527346026)); NetworkManager.__rpc_func_table.Add(1669287785u, new RpcReceiveHandler(__rpc_handler_1669287785)); NetworkManager.__rpc_func_table.Add(358260797u, new RpcReceiveHandler(__rpc_handler_358260797)); NetworkManager.__rpc_func_table.Add(2839432350u, new RpcReceiveHandler(__rpc_handler_2839432350)); } private static void __rpc_handler_2627837757(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0029: 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) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { target.__rpc_exec_stage = (__RpcExecStage)1; ((SCP914Converter)(object)target).TurnStateServerRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_301590527(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { int iNewState = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref iNewState); target.__rpc_exec_stage = (__RpcExecStage)2; ((SCP914Converter)(object)target).TurnStateClientRpc(iNewState); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_1051910848(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0029: 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) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { target.__rpc_exec_stage = (__RpcExecStage)1; ((SCP914Converter)(object)target).ActivateServerRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_3833341719(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0029: 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) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { target.__rpc_exec_stage = (__RpcExecStage)2; ((SCP914Converter)(object)target).ActivateClientRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_4143732333(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0029: 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) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { target.__rpc_exec_stage = (__RpcExecStage)2; ((SCP914Converter)(object)target).RefineFinishClientRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_4044311993(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { bool flag = default(bool); ((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag, default(ForPrimitives)); NetworkObjectReference[] arNetworkObjectReferences = null; if (flag) { ((FastBufferReader)(ref reader)).ReadValueSafe<NetworkObjectReference>(ref arNetworkObjectReferences, default(ForNetworkSerializable)); } bool flag2 = default(bool); ((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag2, default(ForPrimitives)); int[] arScrapValues = null; if (flag2) { ((FastBufferReader)(ref reader)).ReadValueSafe<int>(ref arScrapValues, default(ForPrimitives)); } bool bChargeBattery = default(bool); ((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref bChargeBattery, default(ForPrimitives)); target.__rpc_exec_stage = (__RpcExecStage)2; ((SCP914Converter)(object)target).SpawnItemsClientRpc(arNetworkObjectReferences, arScrapValues, bChargeBattery); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_3018499267(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0035: 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_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0060: 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) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { NetworkBehaviourReference netBehaviourRefPlayer = default(NetworkBehaviourReference); ((FastBufferReader)(ref reader)).ReadValueSafe<NetworkBehaviourReference>(ref netBehaviourRefPlayer, default(ForNetworkSerializable)); Vector3 vPosition = default(Vector3); ((FastBufferReader)(ref reader)).ReadValueSafe(ref vPosition); target.__rpc_exec_stage = (__RpcExecStage)2; ((SCP914Converter)(object)target).ConvertPlayerTeleportClientRpc(netBehaviourRefPlayer, vPosition); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_1252059581(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0035: 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_004f: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { NetworkBehaviourReference netBehaviourRefPlayer = default(NetworkBehaviourReference); ((FastBufferReader)(ref reader)).ReadValueSafe<NetworkBehaviourReference>(ref netBehaviourRefPlayer, default(ForNetworkSerializable)); target.__rpc_exec_stage = (__RpcExecStage)2; ((SCP914Converter)(object)target).ConvertPlayerKillClientRpc(netBehaviourRefPlayer); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_527346026(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //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_005c: 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) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { NetworkBehaviourReference netBehaviourRefPlayer = default(NetworkBehaviourReference); ((FastBufferReader)(ref reader)).ReadValueSafe<NetworkBehaviourReference>(ref netBehaviourRefPlayer, default(ForNetworkSerializable)); int iHealthDelta = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref iHealthDelta); target.__rpc_exec_stage = (__RpcExecStage)2; ((SCP914Converter)(object)target).ConvertPlayerAlterHealthClientRpc(netBehaviourRefPlayer, iHealthDelta); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_1669287785(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //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_005c: 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) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { NetworkBehaviourReference netBehaviourRefPlayer = default(NetworkBehaviourReference); ((FastBufferReader)(ref reader)).ReadValueSafe<NetworkBehaviourReference>(ref netBehaviourRefPlayer, default(ForNetworkSerializable)); int iSuitID = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref iSuitID); target.__rpc_exec_stage = (__RpcExecStage)2; ((SCP914Converter)(object)target).ConvertPlayerRandomSkinClientRpc(netBehaviourRefPlayer, iSuitID); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_358260797(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0035: 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_0050: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { NetworkObjectReference netObjRefMasked = default(NetworkObjectReference); ((FastBufferReader)(ref reader)).ReadValueSafe<NetworkObjectReference>(ref netObjRefMasked, default(ForNetworkSerializable)); NetworkBehaviourReference netBehaviourRefPlayer = default(NetworkBehaviourReference); ((FastBufferReader)(ref reader)).ReadValueSafe<NetworkBehaviourReference>(ref netBehaviourRefPlayer, default(ForNetworkSerializable)); target.__rpc_exec_stage = (__RpcExecStage)2; ((SCP914Converter)(object)target).ConvertPlayerMaskedClientRpc(netObjRefMasked, netBehaviourRefPlayer); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_2839432350(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0035: 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_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0060: 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) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { NetworkBehaviourReference netBehaviourRefEnemy = default(NetworkBehaviourReference); ((FastBufferReader)(ref reader)).ReadValueSafe<NetworkBehaviourReference>(ref netBehaviourRefEnemy, default(ForNetworkSerializable)); Vector3 vPosition = default(Vector3); ((FastBufferReader)(ref reader)).ReadValueSafe(ref vPosition); target.__rpc_exec_stage = (__RpcExecStage)2; ((SCP914Converter)(object)target).TeleportEnemyClientRpc(netBehaviourRefEnemy, vPosition); target.__rpc_exec_stage = (__RpcExecStage)0; } } [MethodImpl(MethodImplOptions.NoInlining)] protected internal override string __getTypeName() { return "SCP914Converter"; } } public class SCPDoorMover : NetworkBehaviour { public NavMeshObstacle navObstacle; public Animator doors; public List<AudioClip> doorAudioClips; public AudioClip doorAudioClipFast; public AudioSource doorSFXSource; public InteractTrigger ButtonA; public InteractTrigger ButtonB; private bool bDoorOpen; private bool bDoorWaiting; private List<EnemyAICollisionDetect> EnemiesInCollider = new List<EnemyAICollisionDetect>(); private void OnTriggerEnter(Collider other) { if (!((Object)(object)NetworkManager.Singleton == (Object)null) && ((NetworkBehaviour)this).IsServer && ((Component)other).CompareTag("Enemy")) { EnemyAICollisionDetect component = ((Component)other).GetComponent<EnemyAICollisionDetect>(); if (!((Object)(object)component == (Object)null)) { SCPCBDunGen.Logger.LogInfo((object)("Enemy entered trigger: " + ((Object)component.mainScript.enemyType).name)); EnemiesInCollider.Add(component); } } } private void OnTriggerExit(Collider other) { if (!((Object)(object)NetworkManager.Singleton == (Object)null) && ((NetworkBehaviour)this).IsServer && ((Component)other).CompareTag("Enemy")) { EnemyAICollisionDetect component = ((Component)other).GetComponent<EnemyAICollisionDetect>(); if (!((Object)(object)component == (Object)null) && !EnemiesInCollider.Remove(component)) { SCPCBDunGen.Logger.LogWarning((object)"Enemy left door trigger but somehow wasn't detected in trigger entry."); } } } private void Update() { if ((Object)(object)NetworkManager.Singleton == (Object)null || !((NetworkBehaviour)this).IsServer || bDoorOpen || bDoorWaiting || EnemiesInCollider.Count == 0) { return; } SCPCBDunGen.Logger.LogInfo((object)"Enemy attempting to open door..."); float num = 0f; foreach (EnemyAICollisionDetect item in EnemiesInCollider) { EnemyAI mainScript = item.mainScript; if (!mainScript.isEnemyDead) { SCPCBDunGen.Logger.LogInfo((object)$"Enemy {((Object)mainScript.enemyType).name} with open mult {mainScript.openDoorSpeedMultiplier}"); float val = mainScript.openDoorSpeedMultiplier; if (((Object)mainScript.enemyType).name == "MaskedPlayerEnemy") { val = 1f; } if (((Object)mainScript.enemyType).name == "Crawler") { val = 2f; } num = Math.Max(num, val); } } SCPCBDunGen.Logger.LogInfo((object)$"Highest multiplier is {num}."); if (num != 0f) { SCPCBDunGen.Logger.LogInfo((object)"Door being opened."); if (num > 1.5f) { OpenDoorFastServerRpc(); } else { ToggleDoorServerRpc(); } } } [ServerRpc] public void OpenDoorFastServerRpc() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00d2: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Invalid comparison between Unknown and I4 //IL_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Invalid comparison between Unknown and I4 NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { if (((NetworkBehaviour)this).OwnerClientId != networkManager.LocalClientId) { if ((int)networkManager.LogLevel <= 1) { Debug.LogError((object)"Only the owner can invoke a ServerRpc that requires ownership!"); } return; } ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(289563691u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 289563691u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { SCPCBDunGen.Logger.LogInfo((object)"Opening door fast [SERVER]."); bDoorWaiting = true; bDoorOpen = true; ((Behaviour)navObstacle).enabled = false; OpenDoorFastClientRpc(); ((MonoBehaviour)this).StartCoroutine(DoorToggleButtonUsable()); } } [ClientRpc] public void OpenDoorFastClientRpc() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(1678254293u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1678254293u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost)) { SCPCBDunGen.Logger.LogInfo((object)"Opening door fast [CLIENT]."); bDoorWaiting = true; bDoorOpen = true; ButtonA.interactable = false; ButtonB.interactable = false; ((Behaviour)navObstacle).enabled = false; doorSFXSource.PlayOneShot(doorAudioClipFast); doors.SetTrigger("openfast"); } } } private IEnumerator DoorToggleButtonUsable() { yield return (object)new WaitForSeconds(1f); bDoorWaiting = false; yield return (object)new WaitForSeconds(1f); EnableDoorButtonClientRpc(); } [ServerRpc(RequireOwnership = false)] public void ToggleDoorServerRpc() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(40313670u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 40313670u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost) && !bDoorWaiting) { bool flag = !bDoorOpen; string text = (flag ? "opening" : "closing"); SCPCBDunGen.Logger.LogInfo((object)("Door is " + text + ".")); bDoorWaiting = true; bDoorOpen = flag; ((Behaviour)navObstacle).enabled = !flag; ToggleDoorClientRpc(bDoorOpen); ((MonoBehaviour)this).StartCoroutine(DoorToggleButtonUsable()); } } } [ClientRpc] public void ToggleDoorClientRpc(bool _bDoorOpen) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(659555206u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref _bDoorOpen, default(ForPrimitives)); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 659555206u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost)) { bDoorOpen = _bDoorOpen; ButtonA.interactable = false; ButtonB.interactable = false; ((Behaviour)navObstacle).enabled = !_bDoorOpen; doorSFXSource.PlayOneShot(doorAudioClips[Random.Range(0, doorAudioClips.Count)]); doors.SetTrigger(bDoorOpen ? "open" : "close"); } } } [ClientRpc] public void EnableDoorButtonClientRpc() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(1538705838u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1538705838u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost)) { ButtonA.interactable = true; ButtonB.interactable = true; } } } protected override void __initializeVariables() { ((NetworkBehaviour)this).__initializeVariables(); } [RuntimeInitializeOnLoadMethod] internal static void InitializeRPCS_SCPDoorMover() { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Expected O, but got Unknown //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Expected O, but got Unknown //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Expected O, but got Unknown NetworkManager.__rpc_func_table.Add(289563691u, new RpcReceiveHandler(__rpc_handler_289563691)); NetworkManager.__rpc_func_table.Add(1678254293u, new RpcReceiveHandler(__rpc_handler_1678254293)); NetworkManager.__rpc_func_table.Add(40313670u, new RpcReceiveHandler(__rpc_handler_40313670)); NetworkManager.__rpc_func_table.Add(659555206u, new RpcReceiveHandler(__rpc_handler_659555206)); NetworkManager.__rpc_func_table.Add(1538705838u, new RpcReceiveHandler(__rpc_handler_1538705838)); } private static void __rpc_handler_289563691(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: 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_0029: 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_008c: 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_0055: Invalid comparison between Unknown and I4 NetworkManager networkManager = target.NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if (rpcParams.Server.Receive.SenderClientId != target.OwnerClientId) { if ((int)networkManager.LogLevel <= 1) { Debug.LogError((object)"Only the owner can invoke a ServerRpc that requires ownership!"); } } else { target.__rpc_exec_stage = (__RpcExecStage)1; ((SCPDoorMover)(object)target).OpenDoorFastServerRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_1678254293(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0029: 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) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { target.__rpc_exec_stage = (__RpcExecStage)2; ((SCPDoorMover)(object)target).OpenDoorFastClientRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_40313670(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0029: 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) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { target.__rpc_exec_stage = (__RpcExecStage)1; ((SCPDoorMover)(object)target).ToggleDoorServerRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_659555206(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0035: 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_005e: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { bool flag = default(bool); ((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag, default(ForPrimitives)); target.__rpc_exec_stage = (__RpcExecStage)2; ((SCPDoorMover)(object)target).ToggleDoorClientRpc(flag); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_1538705838(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0029: 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) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { target.__rpc_exec_stage = (__RpcExecStage)2; ((SCPDoorMover)(object)target).EnableDoorButtonClientRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } [MethodImpl(MethodImplOptions.NoInlining)] protected internal override string __getTypeName() { return "SCPDoorMover"; } } public struct SCP914Conversion { public string ItemName; public List<string> RoughResults { get; set; } public List<string> CoarseResults { get; set; } public List<string> OneToOneResults { get; set; } public List<string> FineResults { get; set; } public List<string> VeryFineResults { get; set; } } public class SCP914ConversionSet : KeyedCollection<string, SCP914Conversion> { protected override string GetKeyForItem(SCP914Conversion conversion) { return conversion.ItemName; } } [BepInPlugin("SCPCBDunGen", "SCPCBDunGen", "4.3.4")] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] public class SCPCBDunGen : BaseUnityPlugin { [CompilerGenerated] private static class <>O { public static Func<string, bool> <0>__Exists; public static Func<string, IEnumerable<string>> <1>__GetFiles; public static hook_SpawnScrapInLevel <2>__SetItemSpawnPoints; public static hook_SpawnScrapInLevel <3>__SCP914Configuration; } public static AssetBundle? SCPCBAssets; public SCP914ConversionSet SCP914Conversions = new SCP914ConversionSet(); public static SCPCBDunGen Instance { get; private set; } internal static ManualLogSource Logger { get; private set; } private void Awake() { //IL_029f: Expected O, but got Unknown //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Expected O, but got Unknown //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: Expected O, but got Unknown Logger = ((BaseUnityPlugin)this).Logger; Instance = this; NetcodePatcher(); Hook(); string directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); SCPCBAssets = AssetBundle.LoadFromFile(Path.Combine(directoryName, "scpcb_dungeon")); if ((Object)(object)SCPCBAssets == (Object)null) { Logger.LogError((object)"Failed to load SCPCB Dungeon assets."); return; } ExtendedDungeonFlow val = SCPCBAssets.LoadAsset<ExtendedDungeonFlow>("assets/Mods/SCP/data/SCPCBDunGenExtFlow.asset"); if ((Object)(object)val == (Object)null) { Logger.LogError((object)"Failed to load SCP:CB Extended Dungeon Flow."); return; } ConfigEntry<bool> val2 = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Default914Recipes", true, new ConfigDescription("If false, any custom 914 Json files named \"default.json\" will be ignored (i.e. the default 914 config will not be loaded).\nSome custom 914 implementations may want to fully override the default settings, in which case this can be set to false.", (AcceptableValueBase)null, Array.Empty<object>())); ConfigEntry<bool> val3 = ((BaseUnityPlugin)this).Config.Bind<bool>("Mod Compatibility", "PiggysVarietyMod", true, new ConfigDescription("If Piggys Variety Mod is present and this setting is enabled, tesla gates can spawn in the SCP Foundation.\nWARNING: Ensure this value matches across all clients or desync will occur.", (AcceptableValueBase)null, Array.Empty<object>())); if (val3.Value && Chainloader.PluginInfos.ContainsKey("Piggy.PiggyVarietyMod")) { CompatPVM(val); } if (Chainloader.PluginInfos.ContainsKey("BMX.LobbyCompatibility")) { CompatBMXLobby(); } PatchedContent.RegisterExtendedDungeonFlow(val); foreach (string item in DiscoverConfiguredRecipeFiles()) { if (!val2.Value && Path.GetFileName(item) == "default.json") { continue; } StreamReader streamReader = new StreamReader(item); string text = streamReader.ReadToEnd(); try { List<SCP914Conversion> list = JsonConvert.DeserializeObject<List<SCP914Conversion>>(text); foreach (SCP914Conversion item2 in list) { if (SCP914Conversions.Contains(item2.ItemName.ToLowerInvariant())) { SCP914Conversions[item2.ItemName].RoughResults.AddRange(item2.RoughResults); SCP914Conversions[item2.ItemName].CoarseResults.AddRange(item2.CoarseResults); SCP914Conversions[item2.ItemName].OneToO
BepInEx/plugins/TooManyEmotes.dll
Decompiled 3 months ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Serialization.Formatters.Binary; using System.Runtime.Versioning; using AdvancedCompany.Cosmetics; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using Dissonance.Integrations.Unity_NFGO; using GameNetcodeStuff; using HarmonyLib; using LCVR.Player; using LethalCompanyInputUtils.Api; using MoreCompany.Cosmetics; using TMPro; using TooManyEmotes.Audio; using TooManyEmotes.Compatibility; using TooManyEmotes.Config; using TooManyEmotes.Input; using TooManyEmotes.Networking; using TooManyEmotes.Patches; using TooManyEmotes.Props; using TooManyEmotes.UI; using Unity.Collections; using Unity.Netcode; using UnityEngine; using UnityEngine.AI; using UnityEngine.Animations.Rigging; using UnityEngine.EventSystems; using UnityEngine.Events; using UnityEngine.Experimental.Rendering; using UnityEngine.InputSystem; using UnityEngine.Rendering; using UnityEngine.Rendering.HighDefinition; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("TooManyEmotes")] [assembly: AssemblyDescription("Mod made by flipf17")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("TooManyEmotes")] [assembly: AssemblyCopyright("Copyright © 2023")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("d6950625-e3a1-4896-a183-87110491bf18")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: InternalsVisibleTo("TooManyEmotesScrap")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyVersion("1.0.0.0")] namespace TooManyEmotes { [HarmonyPatch] public static class AdditionalEmoteData { public static void SetAdditionalEmoteData() { } public static void SetAdditionalPropData() { if (EmotesManager.allUnlockableEmotesDict != null) { AssignPropToEmote("jug_prop", "jug_band.jug"); AssignPropToEmote("guitar_prop", "jug_band.guitar"); AssignPropToEmote("banjo_prop", "jug_band.banjo"); AssignPropToEmote("fiddle_prop", "jug_band.fiddle"); AssignPropToEmote("sexy_saxophone.sexy_sax.prop", "sexy_saxophone.sexy_sax"); AssignPropToEmote("sexy_saxophone.epic_sax.prop", "sexy_saxophone.epic_sax"); AssignPropToEmote("trombone.prop", "sad_trombone"); AssignPropToEmote("old_chair.prop", "ma-ya-hi"); AssignPropToEmote("baseball_bat.prop", "miracle_trickshot"); AssignPropToEmote("dumbbell.prop", "pumping_iron"); AssignPropToEmote("paddle.prop", "paddle_royale"); AssignPropToEmote("gamepad.prop", "controller_crew"); AssignPropToEmote("jar_of_dirt.prop", "jar_of_dirt"); AssignPropToEmote("travelers.banjo.prop", "travelers.banjo"); AssignPropToEmote("travelers.harmonica.prop", "travelers.harmonica"); AssignPropToEmote("travelers.drums.prop", "travelers.drums"); AssignPropToEmote("travelers.flute.prop", "travelers.flute"); AssignPropToEmote("travelers.whistle.prop", "travelers.whistle"); AssignPropToEmote("travelers.piano.prop", "travelers.piano"); AssignPropToEmote("travelers.bow.prop", "travelers.bow"); } } public static void SetAdditionalMusicData() { if (EmotesManager.allUnlockableEmotesDict == null) { return; } SetEmoteDoesNotUseBoombox("jug_band.jug"); SetEmoteDoesNotUseBoombox("jug_band.guitar"); SetEmoteDoesNotUseBoombox("jug_band.banjo"); SetEmoteDoesNotUseBoombox("jug_band.fiddle"); SetEmoteDoesNotUseBoombox("hand_signals"); SetEmoteDoesNotUseBoombox("red_card"); SetEmoteDoesNotUseBoombox("sexy_saxophone.sexy_sax"); SetEmoteDoesNotUseBoombox("sexy_saxophone.epic_sax"); SetEmoteDoesNotUseBoombox("sad_trombone"); SetEmoteDoesNotUseBoombox("snake_summoner"); SetEmoteDoesNotUseBoombox("miracle_trickshot"); SetEmoteDoesNotUseBoombox("junk_food"); SetEmoteDoesNotUseBoombox("pumping_iron"); SetEmoteDoesNotUseBoombox("paddle_royale"); SetEmoteDoesNotUseBoombox("wolf_howl"); SetEmoteDoesNotUseBoombox("jar_of_dirt"); SetEmoteDoesNotUseBoombox("travelers.banjo"); SetEmoteDoesNotUseBoombox("travelers.harmonica"); SetEmoteDoesNotUseBoombox("travelers.drums"); SetEmoteDoesNotUseBoombox("travelers.flute"); SetEmoteDoesNotUseBoombox("travelers.whistle"); SetEmoteDoesNotUseBoombox("travelers.piano"); SetEmoteDoesNotUseBoombox("travelers.bow"); AssignMusicToEmote("jug_band.jug", "jug_band.jug"); AssignMusicToEmote("jug_band.guitar", "jug_band.guitar"); AssignMusicToEmote("jug_band.banjo", "jug_band.banjo"); AssignMusicToEmote("jug_band.fiddle", "jug_band.fiddle"); AssignMusicToEmote("travelers.banjo", "travelers.banjo"); AssignMusicToEmote("travelers.harmonica", "travelers.harmonica"); AssignMusicToEmote("travelers.drums", "travelers.drums"); AssignMusicToEmote("travelers.flute", "travelers.flute"); AssignMusicToEmote("travelers.whistle", "travelers.whistle"); AssignMusicToEmote("travelers.piano", "travelers.piano"); AssignMusicToEmote("travelers.bow", "travelers.bow"); if (EmotesManager.allUnlockableEmotesDict.TryGetValue("jug_band.banjo", out var value) && value.inEmoteSyncGroup) { foreach (UnlockableEmote item in value.emoteSyncGroup) { item.recordSongLoopValue = 1f; } } if (!EmotesManager.allUnlockableEmotesDict.TryGetValue("travelers.banjo", out value) || !value.inEmoteSyncGroup) { return; } foreach (UnlockableEmote item2 in value.emoteSyncGroup) { item2.recordSongLoopValue = 0.5f; } } public static void AssignPropToEmote(string propName, string emoteName) { if (!EmotePropManager.emotePropsDataDict.TryGetValue(propName, out var _)) { CustomLogging.LogWarning("Failed to assign prop: " + propName + " to emote. Prop does not exist!"); return; } if (!EmotesManager.allUnlockableEmotesDict.TryGetValue(emoteName, out var value2)) { CustomLogging.LogWarning("Failed to assign prop: " + propName + " to emote: " + emoteName + ". Emote does not exist!"); return; } if (!EmotePropManager.emotePropsDataDict.TryGetValue(propName, out var value3)) { CustomLogging.LogWarning("Failed to assign prop: " + propName + " to emote: " + emoteName + ". Prop data does not exist for: " + propName); return; } if (value2.propNamesInEmote == null) { value2.propNamesInEmote = new List<string>(); } value2.propNamesInEmote.Add(propName); if (value3.parentEmotes == null) { value3.parentEmotes = new List<UnlockableEmote>(); } if (!value3.parentEmotes.Contains(value2)) { value3.parentEmotes.Add(value2); } } public static void SetEmoteDoesNotUseBoombox(string emoteName) { if (EmotesManager.allUnlockableEmotesDict.TryGetValue(emoteName, out var value)) { value.isBoomboxAudio = false; } } public static void SetCanMoveWhileEmoting(string emoteName) { if (EmotesManager.allUnlockableEmotesDict.TryGetValue(emoteName, out var value)) { value.canMoveWhileEmoting = true; } } public static void AssignMusicToEmote(string emoteName, string audioName, string audioLoopName = "") { if (EmotesManager.allUnlockableEmotesDict.TryGetValue(emoteName, out var value) && AudioManager.AudioExists(audioName)) { value.overrideAudioClipName = audioName; value.overrideAudioLoopClipName = audioLoopName; } } } public static class BoneMapper { public static Dictionary<Transform, Transform> CreateBoneMap(Transform sourceSkeleton, Transform targetSkeleton, List<string> sourceBoneNames, List<string> targetBoneNames = null) { if ((Object)(object)sourceSkeleton == (Object)null || (Object)(object)targetSkeleton == (Object)null || sourceBoneNames == null) { return null; } if (targetBoneNames == null) { targetBoneNames = sourceBoneNames; } if (sourceBoneNames.Count != targetBoneNames.Count) { CustomLogging.LogError("Attempted to map humanoid skeleton, but passed two sets of bone names with differing sizes."); return null; } int count = sourceBoneNames.Count; Transform[] array = (Transform[])(object)new Transform[count]; Transform[] array2 = (Transform[])(object)new Transform[count]; FindBones(sourceSkeleton, sourceBoneNames, array); FindBones(targetSkeleton, targetBoneNames, array2); Dictionary<Transform, Transform> dictionary = new Dictionary<Transform, Transform>(); for (int i = 0; i < count; i++) { if ((Object)(object)array[i] != (Object)null && !dictionary.ContainsKey(array[i])) { dictionary.Add(array[i], array2[i]); } } return dictionary; } private static void FindBones(Transform bone, List<string> boneNames, Transform[] boneArray) { if ((Object)(object)((Component)bone).GetComponent<Rig>() != (Object)null || ((Object)bone).name == "ScavengerModelArmsOnly") { return; } if (boneNames.Contains(((Object)bone).name)) { int num = boneNames.IndexOf(((Object)bone).name); if (!((Object)(object)boneArray[num] != (Object)null)) { boneArray[num] = bone; } } for (int i = 0; i < bone.childCount; i++) { FindBones(bone.GetChild(i), boneNames, boneArray); } } } internal static class CustomLogging { private static ManualLogSource logger; public static void InitLogger() { try { logger = Logger.CreateLogSource($"{((BaseUnityPlugin)Plugin.instance).Info.Metadata.Name}-{((BaseUnityPlugin)Plugin.instance).Info.Metadata.Version}"); } catch { logger = Plugin.defaultLogger; } } public static void Log(string message) { logger.LogInfo((object)message); } public static void LogError(string message) { logger.LogError((object)message); } public static void LogWarning(string message) { logger.LogWarning((object)message); } public static void LogVerbose(string message) { if (ConfigSettings.verboseLogs.Value) { logger.LogInfo((object)("[VERBOSE] " + message)); } } public static void LogErrorVerbose(string message) { if (ConfigSettings.verboseLogs.Value) { logger.LogError((object)("[VERBOSE] " + message)); } } public static void LogWarningVerbose(string message) { if (ConfigSettings.verboseLogs.Value) { logger.LogWarning((object)("[VERBOSE] " + message)); } } public static bool Assert(bool condition, string failMessage) { if (!condition) { LogWarning(failMessage); } return condition; } } public class OnAnimatorIKHandler : MonoBehaviour { private EmoteController emoteController; private Animator animator; public float handIKWeight = 0.8f; private void Awake() { animator = ((Component)this).GetComponent<Animator>(); if ((Object)(object)animator == (Object)null) { CustomLogging.LogWarning("OnIKHandler must be attached to a gameobject with an animator component."); } } public void SetParentEmoteController(EmoteController emoteController) { this.emoteController = emoteController; } protected void OnAnimatorIK(int layerIndex) { //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_0132: Unknown result type (might be due to invalid IL or missing references) //IL_014f: Unknown result type (might be due to invalid IL or missing references) //IL_0178: Unknown result type (might be due to invalid IL or missing references) //IL_017d: Unknown result type (might be due to invalid IL or missing references) //IL_01bb: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)emoteController) && emoteController.initialized && emoteController.IsPerformingCustomEmote()) { if (Object.op_Implicit((Object)(object)emoteController.ikLeftHand) && emoteController.ikLeftHand.localPosition != Vector3.zero) { animator.SetIKPositionWeight((AvatarIKGoal)2, handIKWeight); animator.SetIKRotationWeight((AvatarIKGoal)2, handIKWeight); animator.SetIKPosition((AvatarIKGoal)2, emoteController.ikLeftHand.position); animator.SetIKRotation((AvatarIKGoal)2, emoteController.ikLeftHand.rotation); } if (Object.op_Implicit((Object)(object)emoteController.ikRightHand) && emoteController.ikRightHand.localPosition != Vector3.zero) { animator.SetIKPositionWeight((AvatarIKGoal)3, handIKWeight); animator.SetIKRotationWeight((AvatarIKGoal)3, handIKWeight); animator.SetIKPosition((AvatarIKGoal)3, emoteController.ikRightHand.position); animator.SetIKRotation((AvatarIKGoal)3, emoteController.ikRightHand.rotation); } if (Object.op_Implicit((Object)(object)emoteController.ikHead) && emoteController.ikHead.localPosition != Vector3.zero) { animator.SetLookAtWeight(1f, 0.25f, 0.5f); animator.SetLookAtPosition(emoteController.ikHead.position); } } } } [HarmonyPatch] public class EmoteSyncGroup { public static int currentEmoteSyncId = 0; public static Dictionary<int, EmoteSyncGroup> allEmoteSyncGroups = new Dictionary<int, EmoteSyncGroup>(); public int syncId = -1; public List<EmoteController> syncGroup; public Dictionary<UnlockableEmote, EmoteController> leadEmoteControllerByEmote = new Dictionary<UnlockableEmote, EmoteController>(); public Dictionary<UnlockableEmote, EmoteAudioSource> currentEmoteAudioSources; public float timeStartedEmote; public UnlockableEmote performingEmote; public bool useAudio = true; public EmoteAudioPlayer currentAudioPlayer; public EmoteController leadEmoteController => (syncGroup != null && syncGroup.Count > 0) ? syncGroup[0] : null; public EmoteAudioSource leadEmoteAudioSource { get { if (currentEmoteAudioSources != null && currentEmoteAudioSources.Count > 0) { foreach (EmoteController item in syncGroup) { if ((Object)(object)item?.personalEmoteAudioSource != (Object)null && currentEmoteAudioSources.ContainsValue(item.personalEmoteAudioSource)) { return item.personalEmoteAudioSource; } } } return null; } } [HarmonyPatch(typeof(StartOfRound), "Awake")] [HarmonyPrefix] public static void Init() { currentEmoteSyncId = 0; allEmoteSyncGroups?.Clear(); } public static EmoteSyncGroup CreateEmoteSyncGroup(EmoteController emoteController, bool useAudio = true) { return new EmoteSyncGroup(emoteController, useAudio); } public EmoteSyncGroup(EmoteController emoteController, bool useAudio = true) { syncGroup = new List<EmoteController> { emoteController }; syncId = currentEmoteSyncId++; performingEmote = emoteController.performingEmote; leadEmoteControllerByEmote.Add(performingEmote, emoteController); this.useAudio = useAudio; if (useAudio && performingEmote.hasAudio) { if (!performingEmote.isBoomboxAudio) { currentEmoteAudioSources = new Dictionary<UnlockableEmote, EmoteAudioSource>(); if ((Object)(object)emoteController.personalEmoteAudioSource == (Object)null) { CustomLogging.LogError("Attempted to perform emote with personal audio source, which is null."); this.useAudio = false; } else { currentEmoteAudioSources[performingEmote] = emoteController.personalEmoteAudioSource; emoteController.personalEmoteAudioSource.SyncWithEmoteControllerAudio(emoteController); emoteController.personalEmoteAudioSource.AddToEmoteSyncGroup(this); } } else { EmoteAudioPlayer nearestEmoteAudioPlayer = EmoteAudioPlayerManager.GetNearestEmoteAudioPlayer(((Component)emoteController).transform); if ((Object)(object)nearestEmoteAudioPlayer != (Object)null && nearestEmoteAudioPlayer.CanPlayMusic()) { AssignExternalAudioPlayer(nearestEmoteAudioPlayer); } else { CustomLogging.LogWarning("Performing emote with no music. No available boomboxes found nearby. Don't worry. Everything will be okay."); } } UpdateAudioVolume(); } allEmoteSyncGroups[syncId] = this; timeStartedEmote = Time.time; } public void AddToEmoteSyncGroup(EmoteController emoteController) { if (syncGroup == null || syncGroup.Contains(emoteController)) { return; } syncGroup.Add(emoteController); if (!leadEmoteControllerByEmote.ContainsKey(emoteController.performingEmote) || (Object)(object)leadEmoteControllerByEmote[emoteController.performingEmote] == (Object)null) { leadEmoteControllerByEmote[emoteController.performingEmote] = emoteController; } if (!useAudio || !performingEmote.hasAudio) { return; } if (!performingEmote.isBoomboxAudio) { if (currentEmoteAudioSources != null && (!currentEmoteAudioSources.ContainsKey(emoteController.performingEmote) || (Object)(object)currentEmoteAudioSources[emoteController.performingEmote] == (Object)null)) { currentEmoteAudioSources[emoteController.performingEmote] = emoteController.personalEmoteAudioSource; emoteController.personalEmoteAudioSource.SyncWithEmoteSyncGroup(this, emoteController); emoteController.personalEmoteAudioSource.AddToEmoteSyncGroup(this); } } else if ((Object)(object)currentAudioPlayer == (Object)null) { EmoteAudioPlayer nearestEmoteAudioPlayer = EmoteAudioPlayerManager.GetNearestEmoteAudioPlayer(((Component)emoteController).transform); if ((Object)(object)nearestEmoteAudioPlayer != (Object)null && nearestEmoteAudioPlayer.CanPlayMusic()) { AssignExternalAudioPlayer(nearestEmoteAudioPlayer); } } UpdateAudioVolume(); } public void RemoveFromEmoteSyncGroup(EmoteController emoteController) { if (syncGroup == null) { return; } syncGroup.Remove(emoteController); if (syncGroup.Count <= 0) { DestroyEmoteSyncGroup(); return; } if (leadEmoteControllerByEmote.ContainsValue(emoteController)) { UnlockableEmote key = leadEmoteControllerByEmote.FirstOrDefault((KeyValuePair<UnlockableEmote, EmoteController> x) => (Object)(object)x.Value == (Object)(object)emoteController).Key; leadEmoteControllerByEmote.Remove(key); foreach (EmoteController item in syncGroup) { if ((Object)(object)item == (Object)null || item.performingEmote == null || item.performingEmote != key) { continue; } leadEmoteControllerByEmote[key] = item; break; } } if (currentEmoteAudioSources == null) { return; } if (currentEmoteAudioSources.ContainsValue(emoteController.personalEmoteAudioSource)) { emoteController.personalEmoteAudioSource.StopAudio(); emoteController.personalEmoteAudioSource.RemoveFromEmoteSyncGroup(); UnlockableEmote key2 = currentEmoteAudioSources.FirstOrDefault((KeyValuePair<UnlockableEmote, EmoteAudioSource> x) => (Object)(object)x.Value == (Object)(object)emoteController.personalEmoteAudioSource).Key; currentEmoteAudioSources.Remove(key2); if (useAudio && key2.hasAudio && !key2.isBoomboxAudio) { foreach (EmoteController item2 in syncGroup) { if (!((Object)(object)item2 == (Object)null) && item2.performingEmote != null && !((Object)(object)item2 == (Object)(object)emoteController)) { EmoteAudioSource personalEmoteAudioSource = item2.personalEmoteAudioSource; if (item2.performingEmote == key2 && (Object)(object)personalEmoteAudioSource != (Object)null && personalEmoteAudioSource.CanPlayMusic()) { currentEmoteAudioSources[key2] = personalEmoteAudioSource; personalEmoteAudioSource.SyncWithEmoteControllerAudio(item2); break; } } } } } UpdateAudioVolume(); } public void DestroyEmoteSyncGroup() { CustomLogging.Log("Cleaning up emote sync group with id: " + syncId); if (currentEmoteAudioSources != null) { foreach (EmoteAudioSource value in currentEmoteAudioSources.Values) { if ((Object)(object)value != (Object)null) { value.StopAudio(); value.RemoveFromEmoteSyncGroup(); } } currentEmoteAudioSources = null; } if ((Object)(object)currentAudioPlayer != (Object)null) { currentAudioPlayer.StopAudio(); currentAudioPlayer.RemoveFromEmoteSyncGroup(); } allEmoteSyncGroups.Remove(syncId); syncGroup = null; syncId = -1; } public void UpdateAudioVolume() { if (currentEmoteAudioSources != null) { foreach (EmoteAudioSource value in currentEmoteAudioSources.Values) { if ((Object)(object)value != (Object)null) { value.UpdateVolume(); } } } if ((Object)(object)currentAudioPlayer != (Object)null) { currentAudioPlayer.UpdateVolume(); } } public void AssignExternalAudioPlayer(EmoteAudioPlayer audioPlayer) { if ((Object)(object)currentAudioPlayer != (Object)null) { currentAudioPlayer.StopAudio(); currentAudioPlayer.RemoveFromEmoteSyncGroup(); currentAudioPlayer = null; } if (useAudio && performingEmote.hasAudio && performingEmote.isBoomboxAudio) { currentAudioPlayer = audioPlayer; if ((Object)(object)currentAudioPlayer != (Object)null) { currentAudioPlayer.SyncWithEmoteControllerAudio(leadEmoteController); currentAudioPlayer.AddToEmoteSyncGroup(this); currentAudioPlayer.UpdateVolume(); } } } } internal static class HelperTools { public static NetworkManager networkManager => NetworkManager.Singleton; public static bool isClient => networkManager.IsClient; public static bool isServer => networkManager.IsServer; public static bool isHost => networkManager.IsHost; public static PlayerControllerB localPlayerController => StartOfRound.Instance?.localPlayerController; public static QuickMenuManager quickMenuManager => localPlayerController?.quickMenuManager; public static TextMeshProUGUI[] controlTipLines => HUDManager.Instance?.controlTipLines; public static List<Item> allItems => StartOfRound.Instance?.allItemsList?.itemsList; public static SelectableLevel[] selectableLevels => StartOfRound.Instance?.levels; public static string currentSaveFileName => GameNetworkManager.Instance?.currentSaveFileName; public static int groupCredits => ((Object)(object)TerminalPatcher.terminalInstance != (Object)null) ? groupCredits : (-1); public static int currentEmoteCredits => TerminalPatcher.currentEmoteCredits; public static EmoteControllerPlayer emoteControllerLocal => EmoteControllerPlayer.emoteControllerLocal; public static bool TryGetPlayerByClientId(ulong clientId, out PlayerControllerB playerController) { playerController = null; PlayerControllerB[] allPlayerScripts = StartOfRound.Instance.allPlayerScripts; foreach (PlayerControllerB val in allPlayerScripts) { if (val.actualClientId == clientId) { playerController = val; break; } } return (Object)(object)playerController != (Object)null; } public static bool TryGetPlayerByUsername(string username, out PlayerControllerB playerController) { playerController = null; PlayerControllerB[] allPlayerScripts = StartOfRound.Instance.allPlayerScripts; foreach (PlayerControllerB val in allPlayerScripts) { if (val.playerUsername == username) { playerController = val; break; } } return (Object)(object)playerController != (Object)null; } public static EmoteController GetEmoteControllerById(ulong id) { foreach (EmoteController value in EmoteController.allEmoteControllers.Values) { if (value.emoteControllerId == id) { return value; } } return null; } } [HarmonyPatch] public class EmoteControllerMaskedEnemy : EmoteController { public static Dictionary<MaskedPlayerEnemy, EmoteControllerMaskedEnemy> allMaskedEnemyEmoteControllers = new Dictionary<MaskedPlayerEnemy, EmoteControllerMaskedEnemy>(); public MaskedPlayerEnemy maskedEnemy; public int emoteCount = 0; public bool stoppedAndStaring = false; public bool behaviour1 = false; public Vector3 emotedAtPosition; public int id => (int)((NetworkBehaviour)maskedEnemy).NetworkObjectId; public float stopAndStareTimer { get { return (float)Traverse.Create((object)maskedEnemy).Field("stopAndStareTimer").GetValue(); } set { Traverse.Create((object)maskedEnemy).Field("stopAndStareTimer").SetValue((object)value); } } public NavMeshAgent agent => ((EnemyAI)maskedEnemy).agent; public PlayerControllerB lookingAtPlayer { get { Transform stareAtTransform = maskedEnemy.stareAtTransform; return (stareAtTransform != null) ? ((Component)stareAtTransform).GetComponentInParent<PlayerControllerB>() : null; } } public bool inKillAnimation => (bool)Traverse.Create((object)maskedEnemy).Field("inKillAnimation").GetValue(); public bool handsOut => (bool)Traverse.Create((object)maskedEnemy).Field("handsOut").GetValue(); public float localSpeed { get { //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) Vector3 val = (Vector3)Traverse.Create((object)maskedEnemy).Field("agentLocalVelocity").GetValue(); return ((Vector3)(ref val)).magnitude; } } public bool isMoving => animator.GetBool("IsMoving"); public override void Initialize(string sourceRootBoneName = "metarig") { base.Initialize(); if (initialized) { maskedEnemy = ((Component)this).GetComponentInParent<MaskedPlayerEnemy>(); if ((Object)(object)maskedEnemy == (Object)null) { CustomLogging.LogError("Failed to find MaskedPlayerEnemy component in parent of EmoteControllerMaskedEnemy."); } else { allMaskedEnemyEmoteControllers.Add(maskedEnemy, this); } } } protected override void OnDestroy() { base.OnDestroy(); allMaskedEnemyEmoteControllers?.Remove(maskedEnemy); } protected override bool CheckIfShouldStopEmoting() { //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) if (!isPerformingEmote) { return false; } if (base.CheckIfShouldStopEmoting()) { return true; } return ((EnemyAI)maskedEnemy).isEnemyDead || (NetworkManager.Singleton.IsServer && (agent.speed > 0f || stopAndStareTimer <= 0f)) || (!NetworkManager.Singleton.IsServer && Vector3.Distance(emotedAtPosition, ((Component)maskedEnemy).transform.position) > 0.01f) || inKillAnimation; } public override bool IsPerformingCustomEmote() { return base.IsPerformingCustomEmote(); } public override bool CanPerformEmote() { return base.CanPerformEmote() && (Object)(object)lookingAtPlayer != (Object)null && (!NetworkManager.Singleton.IsServer || stopAndStareTimer >= 2f) && !inKillAnimation && ((NetworkManager.Singleton.IsServer && agent.speed == 0f) || (!NetworkManager.Singleton.IsServer && !isMoving)) && !((EnemyAI)maskedEnemy).isEnemyDead; } public override bool PerformEmote(UnlockableEmote emote, int overrideEmoteId = -1, bool doNotTriggerAudio = false) { //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) bool result = base.PerformEmote(emote, overrideEmoteId, doNotTriggerAudio); if (isPerformingEmote) { emoteCount++; emotedAtPosition = ((Component)maskedEnemy).transform.position; } return result; } public override void StopPerformingEmote() { base.StopPerformingEmote(); stoppedAndStaring = false; } protected override void CreateBoneMap() { boneMap = BoneMapper.CreateBoneMap(humanoidSkeleton, metarig, EmoteControllerPlayer.sourceBoneNames); } protected override ulong GetEmoteControllerId() { return ((Object)(object)maskedEnemy != (Object)null) ? ((NetworkBehaviour)maskedEnemy).NetworkObjectId : 0; } protected override string GetEmoteControllerName() { return ((Object)(object)maskedEnemy != (Object)null) ? ((Object)maskedEnemy).name : base.GetEmoteControllerName(); } } [DefaultExecutionOrder(-2)] public class EmoteControllerPlayer : EmoteController { public static Dictionary<PlayerControllerB, EmoteControllerPlayer> allPlayerEmoteControllers = new Dictionary<PlayerControllerB, EmoteControllerPlayer>(); public PlayerControllerB playerController; public Animator originalAnimator; private Dictionary<Transform, Transform> boneMapLocalPlayerArms; internal Transform humanoidHead; private Transform cameraContainerTarget; private Transform cameraContainerLerp; public static List<string> sourceBoneNames = new List<string> { "spine", "spine.001", "spine.002", "spine.003", "spine.004", "shoulder.L", "arm.L_upper", "arm.L_lower", "hand.L", "finger1.L", "finger1.L.001", "finger2.L", "finger2.L.001", "finger3.L", "finger3.L.001", "finger4.L", "finger4.L.001", "finger5.L", "finger5.L.001", "shoulder.R", "arm.R_upper", "arm.R_lower", "hand.R", "finger1.R", "finger1.R.001", "finger2.R", "finger2.R.001", "finger3.R", "finger3.R.001", "finger4.R", "finger4.R.001", "finger5.R", "finger5.R.001", "thigh.L", "shin.L", "foot.L", "heel.02.L", "toe.L", "thigh.R", "shin.R", "foot.R", "heel.02.R", "toe.R" }; public GrabbablePropObject sourceGrabbableEmoteProp; public static EmoteControllerPlayer emoteControllerLocal => ((Object)(object)HelperTools.localPlayerController != (Object)null && allPlayerEmoteControllers.ContainsKey(HelperTools.localPlayerController)) ? allPlayerEmoteControllers[HelperTools.localPlayerController] : null; public bool isLocalPlayer => (Object)(object)playerController == (Object)(object)StartOfRound.Instance?.localPlayerController; public ulong clientId => playerController.actualClientId; public ulong playerId => playerController.playerClientId; public ulong steamId => playerController.playerSteamId; public string username => playerController.playerUsername; public float timeSinceStartingEmote { get { return (float)Traverse.Create((object)playerController).Field("timeSinceStartingEmote").GetValue(); } set { Traverse.Create((object)playerController).Field("timeSinceStartingEmote").SetValue((object)value); } } public override void Initialize(string sourceRootBoneName = "metarig") { base.Initialize(); if (initialized) { originalAnimator = ((Component)metarig).GetComponentInChildren<Animator>(); playerController = ((Component)this).GetComponentInParent<PlayerControllerB>(); if ((Object)(object)playerController == (Object)null) { CustomLogging.LogError("Failed to find PlayerControllerB component in parent of EmoteControllerPlayer."); } else { allPlayerEmoteControllers.Add(playerController, this); } } } protected override void Start() { //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) base.Start(); if (initialized) { Transform val = FindChildRecursive("spine.004", metarig); if ((Object)(object)val != (Object)null) { cameraContainerTarget = new GameObject("CameraContainer_Target").transform; cameraContainerTarget.SetParent(val); cameraContainerTarget.localPosition = new Vector3(0f, 0.22f, 0f); cameraContainerTarget.localEulerAngles = new Vector3(-3f, 0f, 0f); cameraContainerLerp = new GameObject("CameraContainer_Lerp").transform; cameraContainerLerp.SetParent(humanoidSkeleton); cameraContainerLerp.SetLocalPositionAndRotation(Vector3.zero, Quaternion.identity); } humanoidHead = FindChildRecursive("head", humanoidSkeleton); if (!Object.op_Implicit((Object)(object)humanoidHead)) { CustomLogging.LogError("Failed to find Head on: " + base.emoteControllerName); } } } protected override void OnDestroy() { base.OnDestroy(); allPlayerEmoteControllers?.Remove(playerController); } protected override void Update() { if (initialized && !((Object)(object)playerController == (Object)null) && (!((Object)(object)playerController == (Object)(object)HelperTools.localPlayerController) || (!ConfigSettings.disableEmotesForSelf.Value && !LCVR_Compat.LoadedAndEnabled))) { base.Update(); } } protected override void LateUpdate() { //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) if (!initialized || (Object)(object)playerController == (Object)null || ((Object)(object)playerController == (Object)(object)HelperTools.localPlayerController && (ConfigSettings.disableEmotesForSelf.Value || LCVR_Compat.LoadedAndEnabled))) { return; } bool flag = isPerformingEmote; base.LateUpdate(); if (flag && !isPerformingEmote && playerController.performingEmote) { playerController.performingEmote = false; originalAnimator.SetInteger("emoteNumber", 0); AnimatorStateInfo currentAnimatorStateInfo = originalAnimator.GetCurrentAnimatorStateInfo(0); animator.Play(((AnimatorStateInfo)(ref currentAnimatorStateInfo)).fullPathHash, 0, 0f); if (isLocalPlayer) { timeSinceStartingEmote = 0f; playerController.StopPerformingEmoteServerRpc(); } } } protected override void TranslateAnimation() { //IL_006c: 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) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_0194: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Unknown result type (might be due to invalid IL or missing references) //IL_0140: Unknown result type (might be due to invalid IL or missing references) //IL_0161: Unknown result type (might be due to invalid IL or missing references) //IL_0209: Unknown result type (might be due to invalid IL or missing references) //IL_0222: Unknown result type (might be due to invalid IL or missing references) if (!initialized || !isPerformingEmote || (Object)(object)playerController == (Object)null) { return; } base.TranslateAnimation(); if (Object.op_Implicit((Object)(object)humanoidHead) && Object.op_Implicit((Object)(object)cameraContainerLerp) && Object.op_Implicit((Object)(object)cameraContainerTarget)) { cameraContainerLerp.position = Vector3.Lerp(cameraContainerLerp.position, cameraContainerTarget.position, 25f * Time.deltaTime); cameraContainerLerp.rotation = Quaternion.Lerp(cameraContainerLerp.rotation, cameraContainerTarget.rotation, 25f * Time.deltaTime); if (!isLocalPlayer || !ThirdPersonEmoteController.firstPersonEmotesEnabled || !ThirdPersonEmoteController.isMovingWhileEmoting) { playerController.cameraContainerTransform.position = cameraContainerLerp.position; playerController.cameraContainerTransform.rotation = cameraContainerLerp.rotation; } if (isLocalPlayer) { playerController.localVisor.position = playerController.localVisorTargetPoint.position; playerController.localVisor.rotation = playerController.localVisorTargetPoint.rotation; } } if (!isLocalPlayer) { return; } playerController.playerModelArmsMetarig.rotation = playerController.localArmsRotationTarget.rotation; if (boneMapLocalPlayerArms == null) { return; } foreach (KeyValuePair<Transform, Transform> boneMapLocalPlayerArm in boneMapLocalPlayerArms) { Transform key = boneMapLocalPlayerArm.Key; Transform value = boneMapLocalPlayerArm.Value; if (!((Object)(object)key == (Object)null) && !((Object)(object)value == (Object)null)) { ((Component)value).transform.position = ((Component)key).transform.position; ((Component)value).transform.rotation = ((Component)key).transform.rotation; } } } protected override bool CheckIfShouldStopEmoting() { if ((Object)(object)playerController == (Object)null || !isPerformingEmote) { return false; } if (base.CheckIfShouldStopEmoting() || !playerController.performingEmote || performingEmote == null) { return true; } GrabbableObject val = playerController.ItemSlots[playerController.currentItemSlot]; if ((Object)(object)sourceGrabbableEmoteProp != (Object)null && (Object)(object)sourceGrabbableEmoteProp != (Object)(object)val) { return true; } return false; } public override bool IsPerformingCustomEmote() { return base.IsPerformingCustomEmote(); } public bool TryPerformingEmoteLocal(UnlockableEmote emote, int overrideEmoteId = -1, GrabbablePropObject sourcePropObject = null) { if (!initialized || ConfigSettings.disableEmotesForSelf.Value || LCVR_Compat.LoadedAndEnabled) { return false; } if (!isLocalPlayer) { CustomLogging.LogWarning("Cannot run TryPerformEmoteLocal on a character who does not belong to the local player. This is not allowed."); return false; } CustomLogging.Log("Attempting to perform emote on local player."); if (!CanPerformEmote()) { return false; } if (overrideEmoteId >= 0 && (emote.emoteSyncGroup == null || emote.emoteSyncGroup.Count <= 1 || overrideEmoteId < 0 || overrideEmoteId >= emote.emoteSyncGroup.Count)) { overrideEmoteId = -1; } if (emote.emoteSyncGroup != null && emote.emoteSyncGroup.Count > 1) { if (emote.randomEmote) { if (overrideEmoteId < 0) { overrideEmoteId = Random.Range(0, emote.emoteSyncGroup.Count); } } else { emote = emote.emoteSyncGroup[0]; } } if (overrideEmoteId >= 0 && emote.emoteSyncGroup != null && overrideEmoteId < emote.emoteSyncGroup.Count) { emote = emote.emoteSyncGroup[overrideEmoteId]; } else { overrideEmoteId = -1; } EmoteController emoteController = null; if (isPerformingEmote && performingEmote.IsEmoteInEmoteGroup(emote) && (!performingEmote.randomEmote || performingEmote.loopable)) { if (performingEmote.emoteSyncGroup != null && performingEmote.emoteSyncGroup.Count > 1) { overrideEmoteId = (performingEmote.emoteSyncGroup.IndexOf(performingEmote) + 1) % performingEmote.emoteSyncGroup.Count; if (performingEmote.emoteSyncGroup[overrideEmoteId] != null) { emote = performingEmote.emoteSyncGroup[overrideEmoteId]; } } if (emoteSyncGroup?.syncGroup != null && emoteSyncGroup.syncGroup.Count > 1) { if (emoteSyncGroup.syncGroup.Count > 1 && (performingEmote?.emoteSyncGroup == null || performingEmote.emoteSyncGroup.Count <= 1)) { return true; } foreach (EmoteController item in emoteSyncGroup.syncGroup) { if ((Object)(object)item != (Object)(object)this) { emoteController = item; break; } } } } if ((Object)(object)emoteController != (Object)null) { return TrySyncingEmoteWithEmoteController(emoteController, overrideEmoteId); } bool result = ((!((Object)(object)sourcePropObject != (Object)null) || !((Object)(object)sourcePropObject == (Object)(object)HelperTools.localPlayerController.ItemSlots[HelperTools.localPlayerController.currentItemSlot])) ? PerformEmote(emote, overrideEmoteId, AudioManager.emoteOnlyMode) : PerformEmote(emote, sourcePropObject, overrideEmoteId, AudioManager.emoteOnlyMode)); playerController.StartPerformingEmoteServerRpc(); SyncPerformingEmoteManager.SendPerformingEmoteUpdateToServer(emote, AudioManager.emoteOnlyMode); timeSinceStartingEmote = 0f; playerController.performingEmote = true; return result; } public bool TrySyncingEmoteWithEmoteController(EmoteController emoteController, int overrideEmoteId = -1) { if (!initialized || (Object)(object)emoteController == (Object)null || ConfigSettings.disableEmotesForSelf.Value || LCVR_Compat.LoadedAndEnabled) { return false; } if (!isLocalPlayer) { CustomLogging.LogWarning("Cannot run TrySyncingEmoteWithEmoteController on a character who does not belong to the local player. This is not allowed."); return false; } CustomLogging.Log("Attempting to sync emote for player: " + ((Object)playerController).name + " with emote controller with id: " + emoteController.emoteControllerId); if (!CanPerformEmote() || !emoteController.IsPerformingCustomEmote()) { return false; } if (overrideEmoteId >= 0 && (emoteController.performingEmote?.emoteSyncGroup == null || overrideEmoteId >= emoteController.performingEmote.emoteSyncGroup.Count || emoteController.performingEmote.emoteSyncGroup[overrideEmoteId] == null)) { overrideEmoteId = -1; } SyncWithEmoteController(emoteController, overrideEmoteId); if (performingEmote != null) { if (performingEmote.inEmoteSyncGroup) { overrideEmoteId = performingEmote.emoteSyncGroup.IndexOf(performingEmote); } playerController.StartPerformingEmoteServerRpc(); SyncPerformingEmoteManager.SendSyncEmoteUpdateToServer(emoteController, overrideEmoteId); timeSinceStartingEmote = 0f; playerController.performingEmote = true; return true; } return false; } public override bool CanPerformEmote() { if (!isLocalPlayer) { return true; } if (!initialized || ConfigSettings.disableEmotesForSelf.Value || LCVR_Compat.LoadedAndEnabled) { return false; } bool flag = base.CanPerformEmote(); MethodInfo method = ((object)playerController).GetType().GetMethod("CheckConditionsForEmote", BindingFlags.Instance | BindingFlags.NonPublic); flag &= (bool)method.Invoke(playerController, new object[0]); bool flag2 = (Object)(object)playerController.inAnimationWithEnemy == (Object)null && (!isLocalPlayer || !CentipedePatcher.IsCentipedeLatchedOntoLocalPlayer()); return flag && flag2; } [HarmonyPatch(typeof(PlayerControllerB), "SwitchToItemSlot")] [HarmonyPostfix] private static void OnSwapItem(int slot, PlayerControllerB __instance) { if (allPlayerEmoteControllers.TryGetValue(__instance, out var value) && value.IsPerformingCustomEmote()) { GrabbableObject val = __instance.ItemSlots[slot]; if ((Object)(object)value.sourceGrabbableEmoteProp != (Object)null && (Object)(object)value.sourceGrabbableEmoteProp != (Object)(object)val) { value.StopPerformingEmote(); } else if (Object.op_Implicit((Object)(object)val) && value.emotingProps.Count > 0) { val.EnableItemMeshes(false); } } } public bool PerformEmote(UnlockableEmote emote, GrabbablePropObject sourcePropObject, int overrideEmoteId = -1, bool doNotTriggerAudio = false) { if ((Object)(object)sourcePropObject != (Object)null && (Object)(object)sourcePropObject == (Object)(object)playerController.ItemSlots[playerController.currentItemSlot]) { sourceGrabbableEmoteProp = sourcePropObject; } bool result = PerformEmote(emote, overrideEmoteId, doNotTriggerAudio); if (isPerformingEmote) { if (!isLocalPlayer && SyncManager.isSynced && ConfigSync.instance.syncPersistentUnlocksGlobal && !SessionManager.unlockedEmotesByPlayer.TryGetValue(playerController.playerUsername, out var value) && !value.Contains(performingEmote)) { SessionManager.UnlockEmoteLocal(emote.emoteId, purchased: false, playerController.playerUsername); } } else { StopPerformingEmote(); } return result; } public override bool PerformEmote(UnlockableEmote emote, int overrideEmoteId = -1, bool doNotTriggerAudio = false) { //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)playerController == (Object)null || (isLocalPlayer && (ConfigSettings.disableEmotesForSelf.Value || LCVR_Compat.LoadedAndEnabled))) { return false; } bool result = base.PerformEmote(emote, overrideEmoteId, doNotTriggerAudio); if (isPerformingEmote) { cameraContainerLerp.SetPositionAndRotation(cameraContainerTarget.position, cameraContainerTarget.rotation); playerController.performingEmote = true; if (!isLocalPlayer) { originalAnimator.SetInteger("emoteNumber", 0); } GrabbableObject val = playerController.ItemSlots[playerController.currentItemSlot]; if (Object.op_Implicit((Object)(object)val) && emotingProps.Count > 0) { val.EnableItemMeshes(false); } if (isLocalPlayer) { ThirdPersonEmoteController.OnStartCustomEmoteLocal(); } } return result; } public override bool SyncWithEmoteController(EmoteController emoteController, int overrideEmoteId = -1) { //IL_0059: 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) if ((Object)(object)playerController == (Object)null || (isLocalPlayer && (ConfigSettings.disableEmotesForSelf.Value || LCVR_Compat.LoadedAndEnabled))) { return false; } bool result = base.SyncWithEmoteController(emoteController, overrideEmoteId); if (isPerformingEmote) { cameraContainerLerp.SetPositionAndRotation(cameraContainerTarget.position, cameraContainerTarget.rotation); playerController.performingEmote = true; if (!isLocalPlayer) { originalAnimator.SetInteger("emoteNumber", 0); } else { ThirdPersonEmoteController.OnStartCustomEmoteLocal(); playerController.StartPerformingEmoteServerRpc(); } } return result; } public override void StopPerformingEmote() { //IL_0043: 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) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)playerController == (Object)null || (isLocalPlayer && ConfigSettings.disableEmotesForSelf.Value)) { return; } base.StopPerformingEmote(); cameraContainerLerp.SetPositionAndRotation(cameraContainerTarget.position, cameraContainerTarget.rotation); ((Component)playerController.gameplayCamera).transform.SetLocalPositionAndRotation(Vector3.zero, Quaternion.identity); GrabbableObject val = playerController.ItemSlots[playerController.currentItemSlot]; if (Object.op_Implicit((Object)(object)val)) { val.EnableItemMeshes(true); } if ((Object)(object)sourceGrabbableEmoteProp != (Object)null) { if (sourceGrabbableEmoteProp.isPerformingEmote) { sourceGrabbableEmoteProp.StopEmote(); } sourceGrabbableEmoteProp = null; } playerController.playerBodyAnimator.SetInteger("emote_number", 0); playerController.performingEmote = false; playerController.playerBodyAnimator.Update(0f); if (isLocalPlayer) { ThirdPersonEmoteController.OnStopCustomEmoteLocal(); playerController.StopPerformingEmoteServerRpc(); } } public override void ResetPerformingEmote() { if ((Object)(object)playerController == (Object)null || (isLocalPlayer && ConfigSettings.disableEmotesForSelf.Value)) { return; } base.ResetPerformingEmote(); if ((Object)(object)sourceGrabbableEmoteProp != (Object)null) { if (sourceGrabbableEmoteProp.isPerformingEmote) { sourceGrabbableEmoteProp.StopEmote(); } sourceGrabbableEmoteProp = null; } GrabbableObject val = playerController.ItemSlots[playerController.currentItemSlot]; if (Object.op_Implicit((Object)(object)val)) { val.EnableItemMeshes(true); } } protected override void CreateBoneMap() { boneMap = BoneMapper.CreateBoneMap(humanoidSkeleton, metarig, sourceBoneNames); List<string> list = new List<string> { "arm.L_upper", "arm.L_lower", "hand.L", "finger1.L", "finger1.L.001", "finger2.L", "finger2.L.001", "finger3.L", "finger3.L.001", "finger4.L", "finger4.L.001", "finger5.L", "finger5.L.001", "arm.R_upper", "arm.R_lower", "hand.R", "finger1.R", "finger1.R.001", "finger2.R", "finger2.R.001", "finger3.R", "finger3.R.001", "finger4.R", "finger4.R.001", "finger5.R", "finger5.R.001" }; boneMapLocalPlayerArms = BoneMapper.CreateBoneMap(humanoidSkeleton, playerController.localArmsTransform, list); } protected override ulong GetEmoteControllerId() { return ((Object)(object)playerController != (Object)null) ? ((NetworkBehaviour)playerController).NetworkObjectId : 0; } protected override string GetEmoteControllerName() { return ((Object)(object)playerController != (Object)null) ? playerController.playerUsername : base.GetEmoteControllerName(); } } [HarmonyPatch] [DefaultExecutionOrder(-2)] public class EmoteController : MonoBehaviour { public static Dictionary<GameObject, EmoteController> allEmoteControllers = new Dictionary<GameObject, EmoteController>(); public bool initialized = false; public Transform metarig; public Transform humanoidSkeleton; public Animator animator; public AnimatorOverrideController animatorController; public bool isPerformingEmote = false; public UnlockableEmote performingEmote; protected Dictionary<Transform, Transform> boneMap; public List<Transform> groundContactPoints = new List<Transform>(); public Transform propsParent; public List<PropObject> emotingProps = new List<PropObject>(); public Transform ikLeftHand; public Transform ikRightHand; public Transform ikLeftFoot; public Transform ikRightFoot; public Transform ikHead; public EmoteSyncGroup emoteSyncGroup; public EmoteAudioSource personalEmoteAudioSource; private float timePerformedEmote = 0f; public bool smoothTransitionToEmote = false; public ulong emoteControllerId => GetEmoteControllerId(); public string emoteControllerName => GetEmoteControllerName(); public float currentAnimationTimeNormalized { get { //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) AnimatorStateInfo currentAnimatorStateInfo = animator.GetCurrentAnimatorStateInfo(0); return ((AnimatorStateInfo)(ref currentAnimatorStateInfo)).normalizedTime; } } public float currentAnimationTime { get { AnimationClip currentAnimationClip = GetCurrentAnimationClip(); return ((Object)(object)currentAnimationClip != (Object)null) ? (currentAnimationClip.length * (currentAnimationTimeNormalized % 1f)) : 0f; } } public int currentStateHash { get { //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) AnimatorStateInfo currentAnimatorStateInfo = animator.GetCurrentAnimatorStateInfo(0); return ((AnimatorStateInfo)(ref currentAnimatorStateInfo)).shortNameHash; } } public bool isLooping { get { return animator.GetBool("loop"); } set { animator.SetBool("loop", value); } } public bool isAnimatorInLoopingState { get { //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) AnimatorStateInfo currentAnimatorStateInfo = animator.GetCurrentAnimatorStateInfo(0); return ((AnimatorStateInfo)(ref currentAnimatorStateInfo)).IsName("emote_loop"); } } public bool isSimpleEmoteController => ((object)this).GetType() == typeof(EmoteController); public int emoteSyncId => (emoteSyncGroup != null) ? emoteSyncGroup.syncId : (-1); protected virtual void Awake() { if (!initialized) { Initialize(); } } public virtual void Initialize(string sourceRootBoneName = "metarig") { //IL_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Expected O, but got Unknown //IL_00f1: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Unknown result type (might be due to invalid IL or missing references) //IL_0121: Unknown result type (might be due to invalid IL or missing references) //IL_0151: Unknown result type (might be due to invalid IL or missing references) //IL_0157: Expected O, but got Unknown //IL_016f: Unknown result type (might be due to invalid IL or missing references) //IL_0174: Unknown result type (might be due to invalid IL or missing references) //IL_0185: Unknown result type (might be due to invalid IL or missing references) //IL_01df: Unknown result type (might be due to invalid IL or missing references) //IL_0206: Unknown result type (might be due to invalid IL or missing references) //IL_020b: Unknown result type (might be due to invalid IL or missing references) //IL_021c: Unknown result type (might be due to invalid IL or missing references) if (initialized || (Object)(object)Plugin.humanoidSkeletonPrefab == (Object)null || (Object)(object)Plugin.humanoidAnimatorController == (Object)null || (Object)(object)Plugin.humanoidAvatar == (Object)null) { return; } try { metarig = FindChildRecursive(sourceRootBoneName, ((Component)this).transform); humanoidSkeleton = Object.Instantiate<GameObject>(Plugin.humanoidSkeletonPrefab, metarig.parent).transform; ((Object)humanoidSkeleton).name = "HumanoidSkeleton"; humanoidSkeleton.SetSiblingIndex(metarig.GetSiblingIndex() + 1); animator = ((Component)humanoidSkeleton).GetComponent<Animator>(); OnAnimatorIKHandler onAnimatorIKHandler = ((Component)animator).gameObject.AddComponent<OnAnimatorIKHandler>(); onAnimatorIKHandler.SetParentEmoteController(this); animatorController = new AnimatorOverrideController(Plugin.humanoidAnimatorController); animator.runtimeAnimatorController = (RuntimeAnimatorController)(object)animatorController; humanoidSkeleton.SetLocalPositionAndRotation(metarig.localPosition + Vector3.down * 0.025f, Quaternion.identity); humanoidSkeleton.localScale = metarig.localScale; if (!isSimpleEmoteController) { allEmoteControllers.Add(((Component)this).gameObject, this); GameObject val = new GameObject("PersonalEmoteAudioSource"); val.transform.SetParent(humanoidSkeleton); val.transform.SetLocalPositionAndRotation(Vector3.zero, Quaternion.identity); val.transform.localScale = Vector3.one; personalEmoteAudioSource = val.AddComponent<EmoteAudioSource>(); } if ((Object)(object)propsParent == (Object)null) { propsParent = ((Component)this).transform.Find("EmoteProps"); if ((Object)(object)propsParent == (Object)null) { propsParent = new GameObject("EmoteProps").transform; propsParent.SetParent(humanoidSkeleton); propsParent.SetLocalPositionAndRotation(Vector3.zero, Quaternion.identity); propsParent.localScale = Vector3.one; } } initialized = true; } catch (Exception ex) { Debug.LogError((object)("Failed to initialize EmoteController. Error: " + ex)); } } protected virtual void Start() { if (!initialized) { return; } if (boneMap == null) { if (!isSimpleEmoteController) { CreateBoneMap(); } else { Debug.LogWarning((object)"Using the base emote controller. Remember that when doing this, the bonemap will need to be built manually."); } } FindIkBones(); } protected virtual void OnEnable() { } protected virtual void OnDisable() { if (isPerformingEmote) { StopPerformingEmote(); } } protected virtual void OnDestroy() { if (isPerformingEmote) { StopPerformingEmote(); } allEmoteControllers?.Remove(((Component)this).gameObject); if (SyncPerformingEmoteManager.doNotTriggerAudioDict.ContainsKey(this)) { SyncPerformingEmoteManager.doNotTriggerAudioDict.Remove(this); } } protected virtual void Update() { if (initialized) { } } protected virtual void LateUpdate() { if (initialized) { if (isPerformingEmote && CheckIfShouldStopEmoting()) { StopPerformingEmote(); } if (!((Object)(object)animator == (Object)null) && !((Object)(object)animatorController == (Object)null) && boneMap != null && isPerformingEmote) { TranslateAnimation(); } } } protected virtual void TranslateAnimation() { //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00de: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Unknown result type (might be due to invalid IL or missing references) if (performingEmote == null || boneMap == null || boneMap.Count <= 0) { return; } foreach (KeyValuePair<Transform, Transform> item in boneMap) { Transform key = item.Key; Transform value = item.Value; if (!((Object)(object)key == (Object)null) && !((Object)(object)value == (Object)null)) { float num = Time.time - timePerformedEmote; float num2 = (smoothTransitionToEmote ? Mathf.Clamp01(num / 0.2f) : 1f); ((Component)value).transform.position = Vector3.Lerp(((Component)value).transform.position, ((Component)key).transform.position, num2); ((Component)value).transform.rotation = Quaternion.Slerp(((Component)value).transform.rotation, ((Component)key).transform.rotation, num2); } } } protected virtual bool CheckIfShouldStopEmoting() { if (isPerformingEmote) { return performingEmote == null || (!performingEmote.loopable && !performingEmote.isPose && currentAnimationTimeNormalized >= 1f); } return false; } protected virtual void CorrectVerticalPosition() { //IL_0037: 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_008c: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Unknown result type (might be due to invalid IL or missing references) if (groundContactPoints == null) { return; } float num = 0f; foreach (Transform groundContactPoint in groundContactPoints) { num = Mathf.Min(num, ((Component)groundContactPoint).transform.position.y - metarig.position.y); } if (num < 0f) { metarig.position = new Vector3(metarig.position.x, metarig.position.y - num, metarig.position.z); } } public virtual bool IsPerformingCustomEmote() { return isPerformingEmote && performingEmote != null; } public virtual bool CanPerformEmote() { return initialized && (Object)(object)animator != (Object)null && ((Behaviour)animator).enabled; } public virtual bool PerformEmote(UnlockableEmote emote, int overrideEmoteId = -1, bool doNotTriggerAudio = false) { if (!initialized || !CanPerformEmote()) { return false; } if (!isSimpleEmoteController) { CustomLogging.Log("[" + emoteControllerName + "] Performing emote: " + emote.emoteName); } if (isPerformingEmote) { ResetPerformingEmote(); } if (emote.emoteSyncGroup != null) { if (overrideEmoteId >= 0 && overrideEmoteId < emote.emoteSyncGroup.Count && emote.emoteSyncGroup[overrideEmoteId] != null) { emote = emote.emoteSyncGroup[overrideEmoteId]; } else if (emote.randomEmote) { int index = Random.Range(0, emote.emoteSyncGroup.Count); UnlockableEmote unlockableEmote = emote.emoteSyncGroup[index]; if (unlockableEmote != null) { emote = unlockableEmote; } } } animatorController["emote"] = emote.animationClip; if ((Object)(object)emote.transitionsToClip != (Object)null) { animatorController["emote_loop"] = emote.transitionsToClip; } animator.SetBool("loop", (Object)(object)emote.transitionsToClip != (Object)null); animator.Play("emote", 0, 0f); animator.Update(0f); performingEmote = emote; isPerformingEmote = true; timePerformedEmote = Time.time; RecordStartingBonePositions(); PerformEmoteProps(); if (!isSimpleEmoteController) { CreateEmoteSyncGroup(doNotTriggerAudio); } DiscoBallPatcher.OnPerformEmote(this); return true; } public virtual bool SyncWithEmoteController(EmoteController emoteController, int overrideEmoteId = -1) { if (!initialized || !CanPerformEmote() || (Object)(object)emoteController == (Object)null || !emoteController.IsPerformingCustomEmote()) { return false; } if (!isSimpleEmoteController) { CustomLogging.Log("[" + emoteControllerName + "] Attempting to sync with emote controller: " + ((Object)emoteController).name + " Emote: " + emoteController.performingEmote.emoteName + " PlayEmoteAtTimeNormalized: " + emoteController.currentAnimationTimeNormalized % 1f); } if (isPerformingEmote) { ResetPerformingEmote(); } EmoteSyncGroup emoteSyncGroup = emoteController.emoteSyncGroup; if (emoteSyncGroup == null) { CustomLogging.LogWarning("[" + emoteControllerName + "] Attempted to sync with emote controller who is not a part of an emote sync group. Continuing anyways."); } UnlockableEmote unlockableEmote = emoteController.performingEmote; if (unlockableEmote.emoteSyncGroup != null) { if (overrideEmoteId >= 0 && overrideEmoteId < unlockableEmote.emoteSyncGroup.Count && unlockableEmote.emoteSyncGroup[overrideEmoteId] != null) { unlockableEmote = unlockableEmote.emoteSyncGroup[overrideEmoteId]; } else if (unlockableEmote.randomEmote) { if (unlockableEmote.hasAudio && !unlockableEmote.isBoomboxAudio) { unlockableEmote = emoteController.performingEmote; } else { int index = Random.Range(0, unlockableEmote.emoteSyncGroup.Count); UnlockableEmote unlockableEmote2 = unlockableEmote.emoteSyncGroup[index]; if (unlockableEmote2 != null) { unlockableEmote = unlockableEmote2; } } } else { bool flag = false; foreach (UnlockableEmote item in unlockableEmote.emoteSyncGroup) { if (!emoteSyncGroup.leadEmoteControllerByEmote.ContainsKey(item) || (Object)(object)emoteSyncGroup.leadEmoteControllerByEmote[unlockableEmote] == (Object)null) { unlockableEmote = item; flag = true; break; } } if (!flag) { int num = unlockableEmote.emoteSyncGroup.IndexOf(unlockableEmote); if (num >= 0) { num = (num + 1) % unlockableEmote.emoteSyncGroup.Count; unlockableEmote = unlockableEmote.emoteSyncGroup[num]; } } } } AnimationClip currentAnimationClip = emoteController.GetCurrentAnimationClip(); if (!unlockableEmote.ClipIsInEmote(currentAnimationClip)) { CustomLogging.LogError("[" + emoteControllerName + "] Attempted to sync with emote controller whose animation clip is not a part of their performing emote? Emote: " + emoteController.performingEmote?.ToString() + " AnimationClip: " + ((Object)currentAnimationClip).name); return false; } animatorController["emote"] = unlockableEmote.animationClip; if ((Object)(object)unlockableEmote.transitionsToClip != (Object)null) { animatorController["emote_loop"] = unlockableEmote.transitionsToClip; } float num2 = emoteController.currentAnimationTimeNormalized % 1f; animator.SetBool("loop", (Object)(object)unlockableEmote.transitionsToClip != (Object)null); animator.Play(((Object)(object)currentAnimationClip == (Object)(object)unlockableEmote.transitionsToClip) ? "emote_loop" : "emote", 0, num2); animator.Update(0f); performingEmote = unlockableEmote; isPerformingEmote = true; PerformEmoteProps(); if (!isSimpleEmoteController && emoteController.emoteSyncGroup != null) { AddToEmoteSyncGroup(emoteController.emoteSyncGroup); } DiscoBallPatcher.OnPerformEmote(this); return true; } protected void PerformEmoteProps() { if ((Object)(object)propsParent != (Object)null && performingEmote.propNamesInEmote != null) { LoadEmoteProps(); } if (emotingProps == null) { return; } foreach (PropObject emotingProp in emotingProps) { emotingProp.SyncWithEmoteController(this); } } protected void LoadEmoteProps() { //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) UnloadEmoteProps(); if (performingEmote.propNamesInEmote == null) { return; } foreach (string item in performingEmote.propNamesInEmote) { PropObject propObject = EmotePropManager.LoadEmoteProp(item); propObject.SetPropLayer(6); emotingProps.Add(propObject); ((Component)propObject).transform.SetParent(propsParent); ((Component)propObject).transform.localPosition = Vector3.zero; ((Component)propObject).transform.localRotation = Quaternion.identity; } } protected void UnloadEmoteProps() { if (emotingProps == null) { return; } foreach (PropObject emotingProp in emotingProps) { ((Component)emotingProp).transform.SetParent(EmotePropManager.propPoolParent); emotingProp.active = false; } emotingProps.Clear(); } public virtual void StopPerformingEmote() { //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_011e: Unknown result type (might be due to invalid IL or missing references) if (initialized) { isPerformingEmote = false; if (!isSimpleEmoteController) { CustomLogging.Log(string.Format("[" + emoteControllerName + "] Stopping emote.")); } animatorController["emote"] = null; animatorController["emote_loop"] = null; RemoveFromEmoteSyncGroup(); UnloadEmoteProps(); if ((Object)(object)ikLeftHand != (Object)null) { ikLeftHand.localPosition = Vector3.zero; } if ((Object)(object)ikRightHand != (Object)null) { ikRightHand.localPosition = Vector3.zero; } if ((Object)(object)ikLeftFoot != (Object)null) { ikLeftFoot.localPosition = Vector3.zero; } if ((Object)(object)ikRightFoot != (Object)null) { ikRightFoot.localPosition = Vector3.zero; } if ((Object)(object)ikHead != (Object)null) { ikHead.localPosition = Vector3.zero; } DiscoBallPatcher.OnStopPerformingEmote(this); } } public virtual void ResetPerformingEmote() { //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Unknown result type (might be due to invalid IL or missing references) if (initialized) { isPerformingEmote = false; animatorController["emote"] = null; animatorController["emote_loop"] = null; RemoveFromEmoteSyncGroup(); UnloadEmoteProps(); if ((Object)(object)ikLeftHand != (Object)null) { ikLeftHand.localPosition = Vector3.zero; } if ((Object)(object)ikRightHand != (Object)null) { ikRightHand.localPosition = Vector3.zero; } if ((Object)(object)ikLeftFoot != (Object)null) { ikLeftFoot.localPosition = Vector3.zero; } if ((Object)(object)ikRightFoot != (Object)null) { ikRightFoot.localPosition = Vector3.zero; } if ((Object)(object)ikHead != (Object)null) { ikHead.localPosition = Vector3.zero; } } } public AnimationClip GetCurrentAnimationClip() { //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) if (!IsPerformingCustomEmote()) { return null; } if (!animator.GetBool("loop")) { return animatorController["emote"]; } AnimatorStateInfo currentAnimatorStateInfo = animator.GetCurrentAnimatorStateInfo(0); return animatorController[((AnimatorStateInfo)(ref currentAnimatorStateInfo)).IsName("emote_loop") ? "emote_loop" : "emote"]; } protected virtual void CreateBoneMap() { } public void CreateBoneMap(List<string> sourceBoneNames, List<string> targetBoneNames = null) { boneMap = BoneMapper.CreateBoneMap(humanoidSkeleton, metarig, sourceBoneNames, targetBoneNames); } protected virtual void FindIkBones() { Transform val = FindChildRecursive("root_ik"); if ((Object)(object)val == (Object)null) { CustomLogging.LogError("Failed to find root ik bone called \"root_ik\" in humanoid skeleton: " + emoteControllerName); return; } ikLeftHand = val.Find("hand_ik_l"); ikRightHand = val.Find("hand_ik_r"); ikLeftFoot = val.Find("foot_ik_l"); ikRightFoot = val.Find("foot_ik_r"); ikHead = val.Find("head_ik"); } protected virtual Transform FindChildRecursive(string objectName, Transform root = null) { if ((Object)(object)root == (Object)null) { root = humanoidSkeleton; } if (((Object)root).name == objectName) { return root; } for (int i = 0; i < root.childCount; i++) { Transform child = root.GetChild(i); Transform val = FindChildRecursive(objectName, child); if ((Object)(object)val != (Object)null) { return val; } } return null; } protected virtual ulong GetEmoteControllerId() { return 0uL; } protected virtual string GetEmoteControllerName() { return ((Object)this).name; } protected void CreateEmoteSyncGroup(bool doNotTriggerAudio = false) { emoteSyncGroup = EmoteSyncGroup.CreateEmoteSyncGroup(this, !doNotTriggerAudio); } protected void AddToEmoteSyncGroup(EmoteSyncGroup emoteSyncGroup) { CustomLogging.Log("Adding to emote sync group with id: " + emoteSyncGroup.syncId); emoteSyncGroup.AddToEmoteSyncGroup(this); this.emoteSyncGroup = emoteSyncGroup; } protected void RemoveFromEmoteSyncGroup() { if (emoteSyncGroup != null) { emoteSyncGroup.RemoveFromEmoteSyncGroup(this); } emoteSyncGroup = null; } protected void RecordStartingBonePositions() { } } [HarmonyPatch] public static class EmotesManager { public static List<UnlockableEmote> allUnlockableEmotes; public static Dictionary<string, UnlockableEmote> allUnlockableEmotesDict; public static List<UnlockableEmote> complementaryEmotes; internal static List<UnlockableEmote> complementaryEmotesDefault; public static List<string> allFavoriteEmotes; public static List<UnlockableEmote> allEmotesTier0; public static List<UnlockableEmote> allEmotesTier1; public static List<UnlockableEmote> allEmotesTier2; public static List<UnlockableEmote> allEmotesTier3; public static void BuildEmotesList() { allUnlockableEmotes = new List<UnlockableEmote>(); allUnlockableEmotesDict = new Dictionary<string, UnlockableEmote>(); complementaryEmotesDefault = new List<UnlockableEmote>(); allFavoriteEmotes = new List<string>(); allEmotesTier0 = new List<UnlockableEmote>(); allEmotesTier1 = new List<UnlockableEmote>(); allEmotesTier2 = new List<UnlockableEmote>(); allEmotesTier3 = new List<UnlockableEmote>(); Dictionary<string, List<UnlockableEmote>> dictionary = new Dictionary<string, List<UnlockableEmote>>(); for (int i = 0; i < Plugin.customAnimationClips.Count; i++) { AnimationClip val = Plugin.customAnimationClips[i]; UnlockableEmote unlockableEmote = new UnlockableEmote { emoteId = i, emoteName = ((Object)val).name, displayName = "", animationClip = val, rarity = 0 }; unlockableEmote.rarity = (Plugin.animationClipsTier1.Contains(val) ? 1 : (Plugin.animationClipsTier2.Contains(val) ? 2 : (Plugin.animationClipsTier3.Contains(val) ? 3 : 0))); if (Plugin.complementaryAnimationClips.Contains(val)) { unlockableEmote.complementary = true; } if (unlockableEmote.emoteName.Contains("_start") && !unlockableEmote.emoteName.Contains("_start_")) { string key = unlockableEmote.emoteName.Replace("_start", "_loop"); AnimationClip val2 = Plugin.customAnimationClipsLoopDict[key]; if ((Object)(object)val2 != (Object)null) { unlockableEmote.transitionsToClip = val2; unlockableEmote.emoteName = unlockableEmote.emoteName.Replace("_start", ""); ((Object)unlockableEmote.animationClip).name = unlockableEmote.emoteName + "_start"; ((Object)unlockableEmote.transitionsToClip).name = unlockableEmote.emoteName + "_loop"; } } else if (unlockableEmote.emoteName.Contains("_pose")) { unlockableEmote.isPose = true; unlockableEmote.emoteName = unlockableEmote.emoteName.Replace("_pose", ""); ((Object)unlockableEmote.animationClip).name = unlockableEmote.emoteName; } if (unlockableEmote.emoteName.Contains(".")) { string[] array = unlockableEmote.emoteName.Split(new char[1] { '.' }); if (array.Length != 0 && array[0].Length > 0) { if (array.Length > 3) { CustomLogging.LogError("Error parsing emote name: " + unlockableEmote.emoteName + ". Correct format: \"emote_group.optional_arg.emote_name\""); continue; } unlockableEmote.emoteSyncGroupName = array[0]; unlockableEmote.emoteName = unlockableEmote.emoteSyncGroupName + "." + array[^1]; unlockableEmote.displayName = unlockableEmote.emoteSyncGroupName; if ((Object)(object)unlockableEmote.transitionsToClip == (Object)null) { ((Object)unlockableEmote.animationClip).name = unlockableEmote.emoteName; } else { ((Object)unlockableEmote.animationClip).name = unlockableEmote.emoteName + "_start"; ((Object)unlockableEmote.transitionsToClip).name = unlockableEmote.emoteName + "_loop"; } if (!dictionary.TryGetValue(unlockableEmote.emoteSyncGroupName, out unlockableEmote.emoteSyncGroup)) { unlockableEmote.emoteSyncGroup = new List<UnlockableEmote>(); dictionary.Add(unlockableEmote.emoteSyncGroupName, unlockableEmote.emoteSyncGroup); } if (array.Length == 3 && array[1].ToLower().Contains("layer_")) { ((Object)val).name = ((Object)val).name.Replace("." + array[1], ""); if ((Object)(object)unlockableEmote.transitionsToClip != (Object)null) { ((Object)unlockableEmote.transitionsToClip).name = ((Object)unlockableEmote.transitionsToClip).name.Replace("." + array[1], ""); } if (!int.TryParse(array[1].Substring(6), out var result)) { CustomLogging.LogError("Failed to parse emote layer number in arg: " + array[1] + ". Emote will not be added."); continue; } unlockableEmote.purchasable = result == 0; while (unlockableEmote.emoteSyncGroup.Count <= result) { unlockableEmote.emoteSyncGroup.Add(null); } unlockableEmote.emoteSyncGroup[result] = unlockableEmote; } else { unlockableEmote.emoteSyncGroup.Add(unlockableEmote); unlockableEmote.purchasable = unlockableEmote.emoteSyncGroup.Count == 1; if (array.Length == 3 && array[1].ToLower() == "random") { unlockableEmote.randomEmote = true; ((Object)val).name = ((Object)val).name.Replace("." + array[1], ""); if ((Object)(object)unlockableEmote.transitionsToClip != (Object)null) { ((Object)unlockableEmote.transitionsToClip).name = ((Object)unlockableEmote.transitionsToClip).name.Replace("." + array[1], ""); } } } } } if (unlockableEmote.emoteName.Contains("_start") && !unlockableEmote.emoteName.Contains("_start_")) { string key2 = unlockableEmote.emoteName.Replace("_start", "_loop"); AnimationClip val3 = Plugin.customAnimationClipsLoopDict[key2]; if ((Object)(object)val3 != (Object)null) { unlockableEmote.transitionsToClip = val3; unlockableEmote.emoteName = unlockableEmote.emoteName.Replace("_start", ""); ((Object)unlockableEmote.animationClip).name = unlockableEmote.emoteName + "_start"; ((Object)unlockableEmote.transitionsToClip).name = unlockableEmote.emoteName + "_loop"; } } else if (unlockableEmote.emoteName.Contains("_pose")) { unlockableEmote.isPose = true; unlockableEmote.emoteName = unlockableEmote.emoteName.Replace("_pose", ""); ((Object)unlockableEmote.animationClip).name = unlockableEmote.emoteName; } if ((!((Object)(object)unlockableEmote.transitionsToClip != (Object)null) && !((Motion)unlockableEmote.animationClip).isLooping && !unlockableEmote.isPose && unlockableEmote.emoteSyncGroup == null) || true) { unlockableEmote.canSyncEmote = true; } if (unlockableEmote.displayName == "") { unlockableEmote.displayName = unlockableEmote.emoteName; } unlockableEmote.displayName = unlockableEmote.displayName.Replace('_', ' ').Trim(new char[1] { ' ' }); unlockableEmote.displayName = char.ToUpper(unlockableEmote.displayName[0]) + unlockableEmote.displayName.Substring(1).ToLower(); if (!allUnlockableEmotes.Contains(unlockableEmote)) { allUnlockableEmotes.Add(unlockableEmote); allUnlockableEmotesDict.Add(unlockableEmote.emoteName, unlockableEmote); } if (Plugin.complementaryAnimationClips.Contains(val) && unlockableEmote.purchasable) { unlockableEmote.complementary = true; complementaryEmotesDefault.Add(unlockableEmote); } } allUnlockableEmotes = allUnlockableEmotes.OrderBy((UnlockableEmote item) => item.emoteName).ToList(); int num = 0; foreach (UnlockableEmote allUnlockableEmote in allUnlockableEmotes) { allUnlockableEmote.emoteId = num++; if (!allUnlockableEmote.complementary) { if (allUnlockableEmote.rarity == 0) { allEmotesTier0.Add(allUnlockableEmote); } else if (allUnlockableEmote.rarity == 1) { allEmotesTier1.Add(allUnlockableEmote); } else if (allUnlockableEmote.rarity == 2) { allEmotesTier2.Add(allUnlockableEmote); } else if (allUnlockableEmote.rarity == 3) { allEmotesTier3.Add(allUnlockableEmote); } } } complementaryEmotes = new List<UnlockableEmote>(complementaryEmotesDefault); SaveManager.LoadFavoritedEmotes(); } } [HarmonyPatch] public static class SessionManager { public static List<UnlockableEmote> unlockedEmotes = new List<UnlockableEmote>(); public static List<UnlockableEmote> unlockedEmotesTier0 = new List<UnlockableEmote>(); public static List<UnlockableEmote> unlockedEmotesTier1 = new List<UnlockableEmote>(); public static List<UnlockableEmote> unlockedEmotesTier2 = new List<UnlockableEmote>(); public static List<UnlockableEmote> unlockedEmotesTier3 = new List<UnlockableEmote>(); internal static List<UnlockableEmote> emotesUnlockedThisSession = new List<UnlockableEmote>(); public static Dictionary<string, List<UnlockableEmote>> unlockedEmotesByPlayer = new Dictionary<string, List<UnlockableEmote>>(); public static List<UnlockableEmote> unlockedFavoriteEmotes = new List<UnlockableEmote>(); public static string localPlayerUsername => GameNetworkManager.Instance?.username; [HarmonyPatch(typeof(StartOfRound), "Awake")] [HarmonyPrefix] private static void ResetGameValues() { EmoteController.allEmoteControllers?.Clear(); EmoteControllerPlayer.allPlayerEmoteControllers?.Clear(); EmoteControllerMaskedEnemy.allMaskedEnemyEmoteControllers?.Clear(); EmoteAudioSource.allEmoteAudioSources?.Clear(); EmotesManager.complementaryEmotes = new List<UnlockableEmote>(EmotesManager.complementaryEmotesDefault); } [HarmonyPatch(typeof(PlayerControllerB), "ConnectClientToPlayerObject")] [HarmonyPostfix] private static void OnHostConnected(PlayerControllerB __instance) { if (!HelperTools.isServer) { return; } if (!unlockedEmotesByPlayer.ContainsKey(HelperTools.localPlayerController.playerUsername)) { unlockedEmotesByPlayer.Add(HelperTools.localPlayerController.playerUsername, unlockedEmotes); TerminalPatcher.currentEmoteCreditsByPlayer.Add(HelperTools.localPlayerController.playerUsername, TerminalPatcher.currentEmoteCredits); return; } foreach (UnlockableEmote item in unlockedEmotesByPlayer[HelperTools.localPlayerController.playerUsername]) { if (!IsEmoteUnlocked(item)) { unlockedEmotes.Add(item); } } unlockedEmotesByPlayer[HelperTools.localPlayerController.playerUsername] = unlockedEmotes; TerminalPatcher.currentEmoteCreditsByPlayer[HelperTools.localPlayerController.playerUsername] = TerminalPatcher.currentEmoteCredits; } [HarmonyPatch(typeof(StartOfRound), "Start")] [HarmonyPostfix] private static void OnServerStart(StartOfRound __instance) { if (HelperTools.isServer) { } SyncManager.RotateEmoteSelectionServer(TerminalPatcher.emoteStoreSeed); } [HarmonyPatch(typeof(StartOfRound), "StartGame")] [HarmonyPostfix] private static void ResetOverrideSeedFlag(StartOfRound __instance) { __instance.overrideRandomSeed = false; } [HarmonyPatch(typeof(StartOfRound), "ResetShip")] [HarmonyPostfix] private static void ResetEmotesOnShipReset(StartOfRound __instance) { if (!ConfigSync.instance.syncUnlockEverything) { ResetProgressLocal(); } if (HelperTools.isServer) { SyncManager.RotateEmoteSelectionServer(); } } public static void ResetProgressLocal(bool forceResetAll = false) { CustomLogging.Log("Resetting progress."); if (!ConfigSync.instance.syncPersistentUnlocks || forceResetAll) { ResetEmotesLocal(); } if (!ConfigSync.instance.syncPersistentEmoteCredits || forceResetAll) { TerminalPatcher.currentEmoteCredits = ConfigSync.instance.syncStartingEmoteCredits; List<string> list = new List<string>(TerminalPatcher.currentEmoteCreditsByPlayer.Keys); foreach (string item in list) { TerminalPatcher.currentEmoteCreditsByPlayer[item] = ConfigSync.instance.syncStartingEmoteCredits; } } TerminalPatcher.emoteStoreSeed = 0; } [HarmonyPatch(typeof(StartOfRound), "SyncShipUnlockablesServerRpc")] [HarmonyPostfix] private static void SyncUnlockedEmotesWithClients(StartOfRound __instance) { if (!HelperTools.isServer || ConfigSync.instance.syncUnlockEverything || ConfigSync.instance.syncPersistentUnlocksGlobal) { return; } if (ConfigSync.instance.syncShareEverything) { CustomLogging.Log("Syncing unlocked emotes with clients."); SyncManager.SendOnUnlockEmoteUpdateMulti(TerminalPatcher.currentEmoteCredits); return; } HashSet<ulong> hashSet = new HashSet<ulong>(); PlayerControllerB[] allPlayerScripts = StartOfRound.Instance.allPlayerScripts; foreach (PlayerControllerB val in allPlayerScripts) { if (val.actualClientId != 0L && val.playerSteamId != 0) { hashSet.Add(val.actualClientId); } } foreach (ulong item in hashSet) { SyncManager.ServerSendSyncToClient(item); } } public static bool IsEmoteUnlocked(string emoteName, string playerUsername = "") { if (EmotesManager.allUnlockableEmotesDict.TryGetValue(emoteName, out var value)) { return IsEmoteUnlocked(value, playerUsername); } return false; } public static bool IsEmoteUnlocked(UnlockableEmote emote, string playerUsername = "") { if (emote == null) { return false; } List<UnlockableEmote> value = unlockedEmotes; if (playerUsername != "" && !unlockedEmotesByPlayer.TryGetValue(playerUsername, out value)) { return false; } if (emote.emoteSyncGroup != null && emote.emoteSyncGroup.Count > 0) { foreach (UnlockableEmote item in emote.emoteSyncGroup) { if (value.Contains(item)) { return true; } } } return value.Contains(emote); } public static List<UnlockableEmote> GetUnlockedEmotes(PlayerControllerB playerController) { return GetUnlockedEmotes(((Object)(object)playerController != (Object)null) ? playerController.playerUsername : ""); } public static List<UnlockableEmote> GetUnlockedEmotes(string playerUsername) { if (unlockedEmotesByPlayer.TryGetValue(playerUsername, out var value)) { return value; } return null; } public static void UnlockEmotesLocal(IEnumerable<UnlockableEmote> emotes, bool purchased = false, string playerUsername = "") { foreach (UnlockableEmote emote in emotes) { UnlockEmoteLocal(emote, purchased, playerUsername); } } public static void UnlockEmoteLocal(int emoteId, bool purchased = false, string playerUsername = "") { UnlockEmoteLocal((emoteId >= 0 && emoteId < EmotesManager.allUnlockableEmotes.Count) ? EmotesManager.allUnlockableEmotes[emoteId] : null, purchased, playerUsername); } public static void UnlockEmoteLocal(UnlockableEmote emote, bool purchased = false, string playerUsername = "") { if (emote == null || (emote.requiresHeldProp && ConfigSync.instance.syncRemoveGrabbableEmotesPartyPooperMode)) { return; } List<UnlockableEmote> list = unlockedEmotes; if (playerUsername != "" && playerUsername != localPlayerUsername) { if (!unlockedEmotesByPlayer.TryGetValue(playerUsername, out var value) && !ConfigSync.instance.syncShareEverything) { return; } if (value != null) { list = value; } } if (IsEmoteUnlocked(emote, playerUsername)) { return; } if (emote.emoteSyncGroup != null) { foreach (UnlockableEmote item in emote.emoteSyncGroup) { if (list.Contains(item)) { return; } } } if (!list.Contains(emote)) { list.Add(emote); } if (list != unlockedEmotes) { return; } if (!emote.complementary) { if (emote.rarity == 3 && !unlockedEmotesTier3.Contains(emote)) { unlockedEmotesTier3.Add(emote); } else if (emote.rarity == 2 && !unlockedEmotesTier2.Contains(emote)) { unlockedEmotesTier2.Add(emote); } else if (emote.rarity == 1 && !unlockedEmotesTier1.Contains(emote)) { unlockedEmotesTier1.Add(emote); } else if (emote.rarity == 0 && !unlockedEmotesTier0.Contains(emote)) { unlockedEmotesTier0.Add(emote); } } if (EmotesManager.allFavoriteEmotes.Contains(emote.emoteName) && !unlockedFavoriteEmotes.Contains(emote)) { unlockedFavoriteEmotes.Add(emote); } if (ConfigSync.instance.syncPersistentUnlocksGlobal && purchased && !emotesUnlockedThisSession.Contains(emote)) { emotesUnlockedThisSession.Add(emote); } } public static void RemoveEmoteLocal(UnlockableEmote emote) { unlockedEmotes.Remove(emote); unlockedEmotesTier0.Remove(emote); unlockedEmotesTier1.Remove(emote); unlockedEmotesTier2.Remove(emote); unlockedEmotesTier3.Remove(emote); unlockedFavoriteEmotes.Remove(emote); emotesUnlockedThisSession.Remove(emote); foreach (List<UnlockableEmote> value in unlockedEmotesByPlayer.Values) { value.Remove(emote); } } public static void ResetEmotesLocal() { CustomLogging.Log("Resetting unlocked emotes."); unlockedEmotes.Clear(); unlockedEmotesTier0.Clear(); unlockedEmotesTier1.Clear(); unlockedEmotesTier2.Clear(); unlockedEmotesTier3.Clear(); emotesUnlockedThisSession.Clear(); unlockedEmotesByPlayer.Clear(); PlayerControllerB[] allPlayerScripts = StartOfRound.Instance.allPlayerScripts; foreach (PlayerControllerB val in allPlayerScripts) { if (val.playerSteamId != 0) { unlockedEmotesByPlayer.Add(val.playerUsername, ((Object)(object)val == (Object)(object)HelperTools.localPlayerController || ConfigSync.instance.syncShareEverything) ? unlockedEmotes : new List<UnlockableEmote>()); } } UnlockEmotesLocal(ConfigSync.instance.syncUnlockEverything ? EmotesManager.allUnlockableEmotes : EmotesManager.complementaryEmotes); UpdateUnlockedFavoriteEmotes(); } public static void UpdateUnlockedFavoriteEmotes() { unlockedFavoriteEmotes?.Clear(); if (EmotesManager.allFavoriteEmotes == null || EmotesManager.allUnlockableEmotesDict == null || unlockedFavoriteEmotes == null) { return; } foreach (string allFavoriteEmote in EmotesManager.allFavoriteEmotes) { if (EmotesManager.allUnlockableEmotesDict.TryGetValue(allFavoriteEmote, out var value)) { if (value.emoteSyncGroup != null && value.emoteSyncGroup.Count > 0) { value = value.emoteSyncGroup[0]; } if (IsEmoteUnlocked(value)) { unlockedFavoriteEmotes.Add(value); } } } } } public class UnlockableEmote { public int emoteId; public string emoteName; public string displayName = ""; public AnimationClip animationClip; public AnimationClip transitionsToClip = null; public bool purchasable = true; public bool requiresHeldProp = false; public GameObject requiredHeldPropPrefab = null; public bool complementary = false; public bool isPose = false; public bool canMoveWhileEmoting = false; private bool _isBoomboxAudio = true; public string overrideAudioClipName = ""; public string overrideAudioLoopClipName = ""; public string emoteSyncGroupName = ""; public List<UnlockableEmote> emoteSyncGroup; public float recordSongLoopValue = 0f; public bool randomEmote = false; public List<string> propNamesInEmote; public bool canSyncEmote = false; public int rarity = 0; public static string[] rarityColorCodes = new string[4] { ConfigSettings.emoteNameColorTier0.Value, ConfigSettings.emoteNameColorTier1.Value, ConfigSettings.emoteNameColorTier2.Value, ConfigSettings.emoteNameColorTier3.Value }; public string displayNameColorCoded => $"<color={nameColor}>{displayName}</color>"; public bool humanoidAnimation => ((Motion)animationClip).isHumanMotion; public bool loopable => ((Motion)animationClip).isLooping || ((Object)(object)transitionsToClip != (Object)null && ((Motion)transitionsToClip).isLooping); public bool hasAudio => audioClipName != "" || audioLoopClipName != ""; public bool isBoomboxAudio { get { return _isBoomboxAudio && !ConfigSettings.disableBoomboxRequirement.Value; } set { _isBoomboxAudio = value; } } public string audioClipName => ((Object)(object)animationClip != (Object)null && AudioManager.AudioExists(((Object)animationClip).name)) ? ((Object)animationClip).name : ((overrideAudioClipName != "" && AudioManager.AudioExists(overrideAudioClipName)) ? overrideAudioClipName : ""); public string audioLoopClipName => ((Object)(object)transitionsToClip != (Object)null && AudioManager.AudioExists(((Object)transitionsToClip).name)) ? ((Object)transitionsToClip).name : ((overrideAudioLoopClipName != "" && AudioManager.AudioExists(overrideAudioLoopClipName)) ? overrideAudioLoopClipName : ""); public bool inEmoteSyncGroup => emoteSyncGroup != null && !randomEmote; public bool favorite => EmotesManager.allFavoriteEmotes.Contains(emoteName); public string rarityText { get { if (rarity == 0) { return "Common"; } if (rarity == 1) { return "Rare"; } if (rarity == 2) { return "Epic"; } if (rarity == 3) { return "Legendary"; } return "Invalid"; } } public int price { get { int num = -1; if (complementary) { num = 0; } else if (rarity == 0) { num = ConfigSync.instance.syncBasePriceEmoteTier0; } else if (rarity == 1) { num = ConfigSync.instance.syncBasePriceEmoteTier1; } else if (rarity == 2) { num = ConfigSync.instance.syncBasePriceEmoteTier2; } else if (rarity == 3) { num = ConfigSync.instance.syncBasePriceEmoteTier3; } return (int)Mathf.Max((float)num * ConfigSync.instance.syncPriceMultiplierEmotesStore, 0f); } } public string nameColor => rarityColorCodes[rarity]; public bool IsEmoteInEmoteGroup(UnlockableEmote emote) { return this == emote || (emoteSyncGroup != null && emoteSyncGroup.Contains(emote)); } public bool ClipIsInEmote(AnimationClip clip) { if ((Object)(object)clip == (Object)null) { return false; } if ((Object)(object)clip == (Object)(object)animationClip || (Object)(object)clip == (Object)(object)transitionsToClip) { return true; } if (emoteSyncGroup != null) { foreach (UnlockableEmote item in emoteSyncGroup) { if ((Object)(object)clip == (Object)(object)item.animationClip || (Object)(object)clip == (Object)(object)item.transitionsToClip) { return true; } } } return false; } public AudioClip LoadAudioClip() { if (hasAudio && audioClipName.Length > 0) { return AudioManager.LoadAudioClip(audioClipName); } return null; } public AudioClip LoadAudioLoopClip() { if (hasAudio && (Object)(object)transitionsToClip != (Object)null && audioLoopClipName.Length > 0) { return AudioManager.LoadAudioClip(audioLoopClipName); } return null; } } [HarmonyPatch] public static class SaveManager { public static string TooManyEmotesSaveFileName = "TooManyEmotes_LocalSaveData"; private static List<string> globallyUnlockedEmoteNames = new List<string>(); [HarmonyPatch(typeof(PlayerControllerB), "ConnectClientToPlayerObject")] [HarmonyPrefix] private static void CheckIfShouldResetLocalSettings() { if (ConfigSettings.resetGloballyUnlockedEmotes) { ResetGloballyUnlockedEmotes(); } if (ConfigSettings.resetFavoriteEmotes) { ResetFavoritedEmotes(); } ConfigSettings.resetGloballyUnlockedEmotes = false; ConfigSettings.resetFavoriteEmotes = false; } [HarmonyPatch(typeof(GameNetworkManager), "SaveGameValues")] [HarmonyPostfix] private static void SaveUnlockedEmotes(GameNetworkManager __instance) { if (!__instance.isHostingGame || !StartOfRound.Instance.inShipPhase) { return; } CustomLogging.Log("Saving game values."); try { HashSet<string> hashSet; try { hashSet = new HashSet<string>(ES3.Load<string[]>("TooManyEmotes.UnlockedEmotes.PlayersList", HelperTools.currentSaveFileName, new string[0])); } catch (Exception ex) { CustomLogging.LogErrorVerbose("Error loading previous users list. Deleting key: TooManyEmotes.UnlockedEmotes.PlayersList from file: " + HelperTools.currentSaveFileName); CustomLogging.LogErrorVerbose(ex.ToString()); ES3.DeleteKey("TooManyEmotes.UnlockedEmotes.PlayersList", HelperTools.currentSaveFileName); hashSet = new HashSet<string>(); } foreach (string key in SessionManager.unlockedEmotesByPlayer.Keys) { hashSet.Add(key); } ES3.Save<string[]>("TooManyEmotes.UnlockedEmotes.PlayersList", hashSet.ToArray(), HelperTools.currentSaveFileName); foreach (string item in hashSet) { if (!ConfigSync.instance.syncPersistentUnlocksGlobal) { if (!SessionManager.unlockedEmotesByPlayer.ContainsKey(item)) { continue; } if (SessionManager.unlockedEmotesByPlayer.TryGetValue(item, out var value)) { CustomLogging.Log("Saving " + value.Count + " unlocked emotes for player: " + item); string[] array = new string[value.Count]; for (int i = 0; i < value.Count; i++) { array[i] = value[i].emoteName; } if (value == SessionManager.unlockedEmotes) { ES3.Save<string[]>("TooManyEmotes.UnlockedEmotes", array, HelperTools.currentSaveFileName); } else { ES3.Save<string[]>("TooManyEmotes.UnlockedEmotes.Player_" + item, array, HelperTools.currentSaveFileName); } } } if (TerminalPatcher.currentEmoteCreditsByPlayer.ContainsKey(item)) { CustomLogging.Log("Saving " + TerminalPatcher.currentEmoteCreditsByPlayer[item] + " emote credits for player: " + item); string text = "TooManyEmotes.CurrentEmoteCredits" + (ConfigSync.instance.syncPersistentUnlocks ? ".Persistent" : ""); if ((Object)(object)HelperTools.localPlayerController != (Object)null && HelperTools.localPlayerController.playerSteamId != 0L && item == HelperTools.localPlayerController.playerUsername) { ES3.Save<int>(text, TerminalPatcher.currentEmoteCredits, __instance.currentSaveFileName); } else { ES3.Save<int>(text + ".Player_" + item, TerminalPatcher.currentEmoteCreditsByPlayer[item], __instance.currentSaveFileName); } } } ES3.Save<int>("TooManyEmotes.EmoteStoreSeed", TerminalPatcher.emoteStoreSeed, __instance.currentSaveFileName); CustomLogging.Log("Saved Seed: " + TerminalPatcher.emoteStoreSeed); } catch (Exception ex2) { CustomLogging.LogError("Error while trying to save TooManyEmotes values when disconnecting as host."); CustomLogging.LogError(ex2.ToString()); } } [HarmonyPatch(typeof(StartOfRound), "LoadUnlockables")] [HarmonyPostfix] private static void LoadUnlockedEmotes(StartOfRound __instance) { if (!GameNetworkManager.Instance.isHostingGame) { return; } CustomLogging.Log("Loading game values."); try { if (!ConfigSync.instance.syncPersistentUnlocksGlobal) { SessionManager.ResetEmotesLocal(); string[] array = ES3.Load<string[]>("TooManyEmotes.UnlockedEmotes", HelperTools.currentSaveFileName, new string[0]); string[] array2 = array; foreach (string key in array2) { if (EmotesManager.allUnlockableEmotesDict.TryGetValue(key, out var value)) { SessionManager.UnlockEmoteLocal(value); } } } string text = "TooManyEmotes.CurrentEmoteCredits" + (ConfigSync.instance.syncPersistentUnlocks ? ".Persistent" : ""); TerminalPatcher.currentEmoteCredits = ES3.Load<int>(text, HelperTools.currentSaveFileName, ConfigSync.instance.syncStartingEmoteCredits); string[] array3 = ES3.Load<string[]>("TooManyEmotes.UnlockedEmotes.PlayersList", HelperTools.currentSaveFileName, new string[0]); string[] array4 = array3; foreach (string text2 in array4) { if ((Object)(object)HelperTools.localPlayerController != (Object)null && HelperTools.localPlayerController.playerSteamId != 0L && text2 == HelperTools.localPlayerController.playerUsername) { continue; } if (!SessionManager.unlockedEmotesByPlayer.ContainsKey(text2)) { SessionManager.unlockedEmotesByPlayer.Add(text2, new List<UnlockableEmote>()); } text = "TooManyEmotes.UnlockedEmotes.Player_" + text2; if (!ConfigSync.instance.syncPersistentUnlocksGlobal) { string[] array5 = ES3.Load<string[]>(text, HelperTools.currentSaveFileName, new string[0]); CustomLogging.Log("Loading " + array5.Length + " unlocked emotes for player: " + text2); string[] array6 = array5; foreach (string key2 in array6) { if (EmotesManager.allUnlockableEmotesDict.TryGetValue(key2, out var value2)) { SessionManager.UnlockEmoteLocal(value2, purchased: false, text2); } } } text = "TooManyEmotes.CurrentEmoteCredits.Player_" + text2; if (ConfigSync.instan
BepInEx/plugins/UniTask.Addressables.dll
Decompiled 3 months agousing System.CodeDom.Compiler; using System.ComponentModel; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyVersion("0.0.0.0")] [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() { MonoScriptData result = default(MonoScriptData); result.FilePathsData = new byte[0]; result.TypesData = new byte[0]; result.TotalFiles = 0; result.TotalTypes = 0; result.IsEditorOnly = false; return result; } }
BepInEx/plugins/UniTask.dll
Decompiled 3 months ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.CodeDom.Compiler; using System.Collections; using System.Collections.Concurrent; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Globalization; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.ExceptionServices; using System.Runtime.InteropServices; using System.Security; using System.Text; using System.Text.RegularExpressions; using System.Threading; using System.Threading.Tasks; using Cysharp.Threading.Tasks.CompilerServices; using Cysharp.Threading.Tasks.Internal; using Cysharp.Threading.Tasks.Triggers; using Unity.Jobs; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.Events; using UnityEngine.LowLevel; using UnityEngine.Networking; using UnityEngine.ParticleSystemJobs; using UnityEngine.PlayerLoop; using UnityEngine.Rendering; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: InternalsVisibleTo("UniTask.Linq")] [assembly: InternalsVisibleTo("UniTask.Addressables")] [assembly: InternalsVisibleTo("UniTask.DOTween")] [assembly: InternalsVisibleTo("UniTask.TextMeshPro")] [assembly: AssemblyVersion("0.0.0.0")] [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() { MonoScriptData result = default(MonoScriptData); result.FilePathsData = new byte[6371] { 0, 0, 0, 2, 0, 0, 0, 68, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 65, 115, 121, 110, 99, 76, 97, 122, 121, 46, 99, 115, 0, 0, 0, 11, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 65, 115, 121, 110, 99, 82, 101, 97, 99, 116, 105, 118, 101, 80, 114, 111, 112, 101, 114, 116, 121, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 68, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 65, 115, 121, 110, 99, 85, 110, 105, 116, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 92, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 67, 97, 110, 99, 101, 108, 108, 97, 116, 105, 111, 110, 84, 111, 107, 101, 110, 69, 113, 117, 97, 108, 105, 116, 121, 67, 111, 109, 112, 97, 114, 101, 114, 46, 99, 115, 0, 0, 0, 3, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 67, 97, 110, 99, 101, 108, 108, 97, 116, 105, 111, 110, 84, 111, 107, 101, 110, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 92, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 67, 97, 110, 99, 101, 108, 108, 97, 116, 105, 111, 110, 84, 111, 107, 101, 110, 83, 111, 117, 114, 99, 101, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 46, 99, 115, 0, 0, 0, 10, 0, 0, 0, 66, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 67, 104, 97, 110, 110, 101, 108, 46, 99, 115, 0, 0, 0, 1, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 67, 111, 109, 112, 105, 108, 101, 114, 83, 101, 114, 118, 105, 99, 101, 115, 92, 65, 115, 121, 110, 99, 77, 101, 116, 104, 111, 100, 66, 117, 105, 108, 100, 101, 114, 65, 116, 116, 114, 105, 98, 117, 116, 101, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 101, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 67, 111, 109, 112, 105, 108, 101, 114, 83, 101, 114, 118, 105, 99, 101, 115, 92, 65, 115, 121, 110, 99, 85, 110, 105, 84, 97, 115, 107, 77, 101, 116, 104, 111, 100, 66, 117, 105, 108, 100, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 105, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 67, 111, 109, 112, 105, 108, 101, 114, 83, 101, 114, 118, 105, 99, 101, 115, 92, 65, 115, 121, 110, 99, 85, 110, 105, 84, 97, 115, 107, 86, 111, 105, 100, 77, 101, 116, 104, 111, 100, 66, 117, 105, 108, 100, 101, 114, 46, 99, 115, 0, 0, 0, 7, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 67, 111, 109, 112, 105, 108, 101, 114, 83, 101, 114, 118, 105, 99, 101, 115, 92, 83, 116, 97, 116, 101, 77, 97, 99, 104, 105, 110, 101, 82, 117, 110, 110, 101, 114, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 65, 115, 121, 110, 99, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 46, 99, 115, 0, 0, 0, 2, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 69, 110, 117, 109, 101, 114, 97, 116, 111, 114, 65, 115, 121, 110, 99, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 46, 99, 115, 0, 0, 0, 1, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 69, 120, 99, 101, 112, 116, 105, 111, 110, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 77, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 110, 97, 108, 92, 65, 114, 114, 97, 121, 80, 111, 111, 108, 46, 99, 115, 0, 0, 0, 2, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 110, 97, 108, 92, 65, 114, 114, 97, 121, 80, 111, 111, 108, 85, 116, 105, 108, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 77, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 110, 97, 108, 92, 65, 114, 114, 97, 121, 85, 116, 105, 108, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 110, 97, 108, 92, 67, 111, 110, 116, 105, 110, 117, 97, 116, 105, 111, 110, 81, 117, 101, 117, 101, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 110, 97, 108, 92, 68, 105, 97, 103, 110, 111, 115, 116, 105, 99, 115, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 73, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 110, 97, 108, 92, 69, 114, 114, 111, 114, 46, 99, 115, 0, 0, 0, 1, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 110, 97, 108, 92, 77, 105, 110, 105, 109, 117, 109, 81, 117, 101, 117, 101, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 110, 97, 108, 92, 80, 108, 97, 121, 101, 114, 76, 111, 111, 112, 82, 117, 110, 110, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 110, 97, 108, 92, 80, 111, 111, 108, 101, 100, 68, 101, 108, 101, 103, 97, 116, 101, 46, 99, 115, 0, 0, 0, 2, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 110, 97, 108, 92, 82, 117, 110, 116, 105, 109, 101, 72, 101, 108, 112, 101, 114, 115, 65, 98, 115, 116, 114, 97, 99, 116, 105, 111, 110, 46, 99, 115, 0, 0, 0, 7, 0, 0, 0, 77, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 110, 97, 108, 92, 83, 116, 97, 116, 101, 80, 111, 111, 108, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 110, 97, 108, 92, 84, 97, 115, 107, 84, 114, 97, 99, 107, 101, 114, 46, 99, 115, 0, 0, 0, 15, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 110, 97, 108, 92, 85, 110, 105, 116, 121, 69, 113, 117, 97, 108, 105, 116, 121, 67, 111, 109, 112, 97, 114, 101, 114, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 110, 97, 108, 92, 85, 110, 105, 116, 121, 87, 101, 98, 82, 101, 113, 117, 101, 115, 116, 69, 120, 116, 101, 110, 115, 105, 111, 110, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 110, 97, 108, 92, 86, 97, 108, 117, 101, 83, 116, 111, 112, 119, 97, 116, 99, 104, 46, 99, 115, 0, 0, 0, 2, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 110, 97, 108, 92, 87, 101, 97, 107, 68, 105, 99, 116, 105, 111, 110, 97, 114, 121, 46, 99, 115, 0, 0, 0, 8, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 46, 99, 115, 0, 0, 0, 3, 0, 0, 0, 73, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 85, 110, 105, 84, 97, 115, 107, 83, 111, 117, 114, 99, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 73, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 77, 111, 118, 101, 78, 101, 120, 116, 83, 111, 117, 114, 99, 101, 46, 99, 115, 0, 0, 0, 35, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 80, 108, 97, 121, 101, 114, 76, 111, 111, 112, 72, 101, 108, 112, 101, 114, 46, 99, 115, 0, 0, 0, 4, 0, 0, 0, 74, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 80, 108, 97, 121, 101, 114, 76, 111, 111, 112, 84, 105, 109, 101, 114, 46, 99, 115, 0, 0, 0, 4, 0, 0, 0, 67, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 80, 114, 111, 103, 114, 101, 115, 115, 46, 99, 115, 0, 0, 0, 3, 0, 0, 0, 67, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 84, 97, 115, 107, 80, 111, 111, 108, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 76, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 84, 105, 109, 101, 111, 117, 116, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 71, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 84, 114, 105, 103, 103, 101, 114, 69, 118, 101, 110, 116, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 84, 114, 105, 103, 103, 101, 114, 115, 92, 65, 115, 121, 110, 99, 65, 119, 97, 107, 101, 84, 114, 105, 103, 103, 101, 114, 46, 99, 115, 0, 0, 0, 3, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 84, 114, 105, 103, 103, 101, 114, 115, 92, 65, 115, 121, 110, 99, 68, 101, 115, 116, 114, 111, 121, 84, 114, 105, 103, 103, 101, 114, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 84, 114, 105, 103, 103, 101, 114, 115, 92, 65, 115, 121, 110, 99, 83, 116, 97, 114, 116, 84, 114, 105, 103, 103, 101, 114, 46, 99, 115, 0, 0, 0, 6, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 84, 114, 105, 103, 103, 101, 114, 115, 92, 65, 115, 121, 110, 99, 84, 114, 105, 103, 103, 101, 114, 66, 97, 115, 101, 46, 99, 115, 0, 0, 0, 2, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 84, 114, 105, 103, 103, 101, 114, 115, 92, 65, 115, 121, 110, 99, 84, 114, 105, 103, 103, 101, 114, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 46, 99, 115, 0, 0, 1, 40, 0, 0, 0, 97, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 84, 114, 105, 103, 103, 101, 114, 115, 92, 77, 111, 110, 111, 66, 101, 104, 97, 118, 105, 111, 117, 114, 77, 101, 115, 115, 97, 103, 101, 115, 84, 114, 105, 103, 103, 101, 114, 115, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 73, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 110, 105, 84, 97, 115, 107, 46, 66, 114, 105, 100, 103, 101, 46, 99, 115, 0, 0, 0, 10, 0, 0, 0, 66, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 110, 105, 84, 97, 115, 107, 46, 99, 115, 0, 0, 0, 10, 0, 0, 0, 72, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 110, 105, 84, 97, 115, 107, 46, 68, 101, 108, 97, 121, 46, 99, 115, 0, 0, 0, 10, 0, 0, 0, 74, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 110, 105, 84, 97, 115, 107, 46, 70, 97, 99, 116, 111, 114, 121, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 70, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 110, 105, 84, 97, 115, 107, 46, 82, 117, 110, 46, 99, 115, 0, 0, 0, 13, 0, 0, 0, 76, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 110, 105, 84, 97, 115, 107, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 99, 115, 0, 0, 0, 6, 0, 0, 0, 76, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 110, 105, 84, 97, 115, 107, 46, 87, 97, 105, 116, 85, 110, 116, 105, 108, 46, 99, 115, 0, 0, 0, 3, 0, 0, 0, 74, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 110, 105, 84, 97, 115, 107, 46, 87, 104, 101, 110, 65, 108, 108, 46, 99, 115, 0, 0, 0, 15, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 110, 105, 84, 97, 115, 107, 46, 87, 104, 101, 110, 65, 108, 108, 46, 71, 101, 110, 101, 114, 97, 116, 101, 100, 46, 99, 115, 0, 0, 0, 4, 0, 0, 0, 74, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 110, 105, 84, 97, 115, 107, 46, 87, 104, 101, 110, 65, 110, 121, 46, 99, 115, 0, 0, 0, 15, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 110, 105, 84, 97, 115, 107, 46, 87, 104, 101, 110, 65, 110, 121, 46, 71, 101, 110, 101, 114, 97, 116, 101, 100, 46, 99, 115, 0, 0, 0, 13, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 110, 105, 84, 97, 115, 107, 67, 111, 109, 112, 108, 101, 116, 105, 111, 110, 83, 111, 117, 114, 99, 101, 46, 99, 115, 0, 0, 0, 5, 0, 0, 0, 76, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 110, 105, 84, 97, 115, 107, 69, 120, 116, 101, 110, 115, 105, 111, 110, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 110, 105, 84, 97, 115, 107, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 46, 83, 104, 111, 114, 116, 104, 97, 110, 100, 46, 99, 115, 0, 0, 0, 14, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 110, 105, 84, 97, 115, 107, 79, 98, 115, 101, 114, 118, 97, 98, 108, 101, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 46, 99, 115, 0, 0, 0, 1, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 110, 105, 84, 97, 115, 107, 83, 99, 104, 101, 100, 117, 108, 101, 114, 46, 99, 115, 0, 0, 0, 2, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 110, 105, 84, 97, 115, 107, 83, 121, 110, 99, 104, 114, 111, 110, 105, 122, 97, 116, 105, 111, 110, 67, 111, 110, 116, 101, 120, 116, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 70, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 110, 105, 84, 97, 115, 107, 86, 111, 105, 100, 46, 99, 115, 0, 0, 0, 3, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 110, 105, 116, 121, 65, 115, 121, 110, 99, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 46, 65, 115, 115, 101, 116, 66, 117, 110, 100, 108, 101, 82, 101, 113, 117, 101, 115, 116, 65, 108, 108, 65, 115, 115, 101, 116, 115, 46, 99, 115, 0, 0, 0, 2, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 110, 105, 116, 121, 65, 115, 121, 110, 99, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 46, 65, 115, 121, 110, 99, 71, 80, 85, 82, 101, 97, 100, 98, 97, 99, 107, 46, 99, 115, 0, 0, 0, 11, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 110, 105, 116, 121, 65, 115, 121, 110, 99, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 46, 99, 115, 0, 0, 0, 2, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 110, 105, 116, 121, 65, 115, 121, 110, 99, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 46, 74, 111, 98, 115, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 110, 105, 116, 121, 65, 115, 121, 110, 99, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 46, 77, 111, 110, 111, 66, 101, 104, 97, 118, 105, 111, 117, 114, 46, 99, 115, 0, 0, 0, 16, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 110, 105, 116, 121, 65, 115, 121, 110, 99, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 46, 117, 71, 85, 73, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 110, 105, 116, 121, 66, 105, 110, 100, 105, 110, 103, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 46, 99, 115, 0, 0, 0, 1, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 110, 105, 116, 121, 87, 101, 98, 82, 101, 113, 117, 101, 115, 116, 69, 120, 99, 101, 112, 116, 105, 111, 110, 46, 99, 115 }; result.TypesData = new byte[36615] { 1, 0, 0, 0, 33, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 124, 65, 115, 121, 110, 99, 76, 97, 122, 121, 1, 0, 0, 0, 33, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 124, 65, 115, 121, 110, 99, 76, 97, 122, 121, 0, 0, 0, 0, 54, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 124, 73, 82, 101, 97, 100, 79, 110, 108, 121, 65, 115, 121, 110, 99, 82, 101, 97, 99, 116, 105, 118, 101, 80, 114, 111, 112, 101, 114, 116, 121, 0, 0, 0, 0, 46, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 124, 73, 65, 115, 121, 110, 99, 82, 101, 97, 99, 116, 105, 118, 101, 80, 114, 111, 112, 101, 114, 116, 121, 0, 0, 0, 0, 45, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 124, 65, 115, 121, 110, 99, 82, 101, 97, 99, 116, 105, 118, 101, 80, 114, 111, 112, 101, 114, 116, 121, 0, 0, 0, 0, 61, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 65, 115, 121, 110, 99, 82, 101, 97, 99, 116, 105, 118, 101, 80, 114, 111, 112, 101, 114, 116, 121, 124, 87, 97, 105, 116, 65, 115, 121, 110, 99, 83, 111, 117, 114, 99, 101, 0, 0, 0, 0, 70, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 65, 115, 121, 110, 99, 82, 101, 97, 99, 116, 105, 118, 101, 80, 114, 111, 112, 101, 114, 116, 121, 124, 87, 105, 116, 104, 111, 117, 116, 67, 117, 114, 114, 101, 110, 116, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 56, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 65, 115, 121, 110, 99, 82, 101, 97, 99, 116, 105, 118, 101, 80, 114, 111, 112, 101, 114, 116, 121, 124, 69, 110, 117, 109, 101, 114, 97, 116, 111, 114, 0, 0, 0, 0, 53, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 124, 82, 101, 97, 100, 79, 110, 108, 121, 65, 115, 121, 110, 99, 82, 101, 97, 99, 116, 105, 118, 101, 80, 114, 111, 112, 101, 114, 116, 121, 0, 0, 0, 0, 69, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 82, 101, 97, 100, 79, 110, 108, 121, 65, 115, 121, 110, 99, 82, 101, 97, 99, 116, 105, 118, 101, 80, 114, 111, 112, 101, 114, 116, 121, 124, 87, 97, 105, 116, 65, 115, 121, 110, 99, 83, 111, 117, 114, 99, 101, 0, 0, 0, 0, 78, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 82, 101, 97, 100, 79, 110, 108, 121, 65, 115, 121, 110, 99, 82, 101, 97, 99, 116, 105, 118, 101, 80, 114, 111, 112, 101, 114, 116, 121, 124, 87, 105, 116, 104, 111, 117, 116, 67, 117, 114, 114, 101, 110, 116, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 64, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 82, 101, 97, 100, 79, 110, 108, 121, 65, 115, 121, 110, 99, 82, 101, 97, 99, 116, 105, 118, 101, 80, 114, 111, 112, 101, 114, 116, 121, 124, 69, 110, 117, 109, 101, 114, 97, 116, 111, 114, 0, 0, 0, 0, 39, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 124, 83, 116, 97, 116, 101, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 0, 0, 0, 0, 33, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 124, 65, 115, 121, 110, 99, 85, 110, 105, 116, 0, 0, 0, 0, 57, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 124, 67, 97, 110, 99, 101, 108, 108, 97, 116, 105, 111, 110, 84, 111, 107, 101, 110, 69, 113, 117, 97, 108, 105, 116, 121, 67, 111, 109, 112, 97, 114, 101, 114, 0, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 124, 67, 97, 110, 99, 101, 108, 108, 97, 116, 105, 111, 110, 84, 111, 107, 101, 110, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 0, 0, 0, 0, 50, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 124, 67, 97, 110, 99, 101, 108, 108, 97, 116, 105, 111, 110, 84, 111, 107, 101, 110, 65, 119, 97, 105, 116, 97, 98, 108, 101, 1, 0, 0, 0, 32, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 124, 65, 119, 97, 105, 116, 101, 114, 0, 0, 0, 0, 57, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 124, 67, 97, 110, 99, 101, 108, 108, 97, 116, 105, 111, 110, 84, 111, 107, 101, 110, 83, 111, 117, 114, 99, 101, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 1, 0, 0, 0, 31, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 124, 67, 104, 97, 110, 110, 101, 108, 1, 0, 0, 0, 31, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 124, 67, 104, 97, 110, 110, 101, 108, 1, 0, 0, 0, 31, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 124, 67, 104, 97, 110, 110, 101, 108, 0, 0, 0, 0, 37, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 124, 67, 104, 97, 110, 110, 101, 108, 82, 101, 97, 100, 101, 114, 0, 0, 0, 0, 37, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 124, 67, 104, 97, 110, 110, 101, 108, 87, 114, 105, 116, 101, 114, 0, 0, 0, 0, 46, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 124, 67, 104, 97, 110, 110, 101, 108, 67, 108, 111, 115, 101, 100, 69, 120, 99, 101, 112, 116, 105, 111, 110, 0, 0, 0, 0, 54, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 124, 83, 105, 110, 103, 108, 101, 67, 111, 110, 115, 117, 109, 101, 114, 85, 110, 98, 111, 117, 110, 100, 101, 100, 67, 104, 97, 110, 110, 101, 108, 0, 0, 0, 0, 91, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 83, 105, 110, 103, 108, 101, 67, 111, 110, 115, 117, 109, 101, 114, 85, 110, 98, 111, 117, 110, 100, 101, 100, 67, 104, 97, 110, 110, 101, 108, 124, 83, 105, 110, 103, 108, 101, 67, 111, 110, 115, 117, 109, 101, 114, 85, 110, 98, 111, 117, 110, 100, 101, 100, 67, 104, 97, 110, 110, 101, 108, 87, 114, 105, 116, 101, 114, 0, 0, 0, 0, 91, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 83, 105, 110, 103, 108, 101, 67, 111, 110, 115, 117, 109, 101, 114, 85, 110, 98, 111, 117, 110, 100, 101, 100, 67, 104, 97, 110, 110, 101, 108, 124, 83, 105, 110, 103, 108, 101, 67, 111, 110, 115, 117, 109, 101, 114, 85, 110, 98, 111, 117, 110, 100, 101, 100, 67, 104, 97, 110, 110, 101, 108, 82, 101, 97, 100, 101, 114, 0, 0, 0, 0, 114, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 83, 105, 110, 103, 108, 101, 67, 111, 110, 115, 117, 109, 101, 114, 85, 110, 98, 111, 117, 110, 100, 101, 100, 67, 104, 97, 110, 110, 101, 108, 43, 83, 105, 110, 103, 108, 101, 67, 111, 110, 115, 117, 109, 101, 114, 85, 110, 98, 111, 117, 110, 100, 101, 100, 67, 104, 97, 110, 110, 101, 108, 82, 101, 97, 100, 101, 114, 124, 82, 101, 97, 100, 65, 108, 108, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 59, 83, 121, 115, 116, 101, 109, 46, 82, 117, 110, 116, 105, 109, 101, 46, 67, 111, 109, 112, 105, 108, 101, 114, 83, 101, 114, 118, 105, 99, 101, 115, 124, 65, 115, 121, 110, 99, 77, 101, 116, 104, 111, 100, 66, 117, 105, 108, 100, 101, 114, 65, 116, 116, 114, 105, 98, 117, 116, 101, 1, 0, 0, 0, 66, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 67, 111, 109, 112, 105, 108, 101, 114, 83, 101, 114, 118, 105, 99, 101, 115, 124, 65, 115, 121, 110, 99, 85, 110, 105, 84, 97, 115, 107, 77, 101, 116, 104, 111, 100, 66, 117, 105, 108, 100, 101, 114, 1, 0, 0, 0, 66, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 67, 111, 109, 112, 105, 108, 101, 114, 83, 101, 114, 118, 105, 99, 101, 115, 124, 65, 115, 121, 110, 99, 85, 110, 105, 84, 97, 115, 107, 77, 101, 116, 104, 111, 100, 66, 117, 105, 108, 100, 101, 114, 0, 0, 0, 0, 70, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 67, 111, 109, 112, 105, 108, 101, 114, 83, 101, 114, 118, 105, 99, 101, 115, 124, 65, 115, 121, 110, 99, 85, 110, 105, 84, 97, 115, 107, 86, 111, 105, 100, 77, 101, 116, 104, 111, 100, 66, 117, 105, 108, 100, 101, 114, 0, 0, 0, 0, 60, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 67, 111, 109, 112, 105, 108, 101, 114, 83, 101, 114, 118, 105, 99, 101, 115, 124, 73, 83, 116, 97, 116, 101, 77, 97, 99, 104, 105, 110, 101, 82, 117, 110, 110, 101, 114, 1, 0, 0, 0, 67, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 67, 111, 109, 112, 105, 108, 101, 114, 83, 101, 114, 118, 105, 99, 101, 115, 124, 73, 83, 116, 97, 116, 101, 77, 97, 99, 104, 105, 110, 101, 82, 117, 110, 110, 101, 114, 80, 114, 111, 109, 105, 115, 101, 1, 0, 0, 0, 67, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 67, 111, 109, 112, 105, 108, 101, 114, 83, 101, 114, 118, 105, 99, 101, 115, 124, 73, 83, 116, 97, 116, 101, 77, 97, 99, 104, 105, 110, 101, 82, 117, 110, 110, 101, 114, 80, 114, 111, 109, 105, 115, 101, 0, 0, 0, 0, 60, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 67, 111, 109, 112, 105, 108, 101, 114, 83, 101, 114, 118, 105, 99, 101, 115, 124, 83, 116, 97, 116, 101, 77, 97, 99, 104, 105, 110, 101, 85, 116, 105, 108, 105, 116, 121, 0, 0, 0, 0, 57, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 67, 111, 109, 112, 105, 108, 101, 114, 83, 101, 114, 118, 105, 99, 101, 115, 124, 65, 115, 121, 110, 99, 85, 110, 105, 84, 97, 115, 107, 86, 111, 105, 100, 1, 0, 0, 0, 53, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 67, 111, 109, 112, 105, 108, 101, 114, 83, 101, 114, 118, 105, 99, 101, 115, 124, 65, 115, 121, 110, 99, 85, 110, 105, 84, 97, 115, 107, 1, 0, 0, 0, 53, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 67, 111, 109, 112, 105, 108, 101, 114, 83, 101, 114, 118, 105, 99, 101, 115, 124, 65, 115, 121, 110, 99, 85, 110, 105, 84, 97, 115, 107, 0, 0, 0, 0, 49, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 124, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 65, 115, 121, 110, 99, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 0, 0, 0, 0, 49, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 124, 69, 110, 117, 109, 101, 114, 97, 116, 111, 114, 65, 115, 121, 110, 99, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 0, 0, 0, 0, 67, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 69, 110, 117, 109, 101, 114, 97, 116, 111, 114, 65, 115, 121, 110, 99, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 124, 69, 110, 117, 109, 101, 114, 97, 116, 111, 114, 80, 114, 111, 109, 105, 115, 101, 0, 0, 0, 0, 43, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 124, 69, 120, 99, 101, 112, 116, 105, 111, 110, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 0, 0, 0, 0, 42, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 73, 110, 116, 101, 114, 110, 97, 108, 124, 65, 114, 114, 97, 121, 80, 111, 111, 108, 0, 0, 0, 0, 46, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 73, 110, 116, 101, 114, 110, 97, 108, 124, 65, 114, 114, 97, 121, 80, 111, 111, 108, 85, 116, 105, 108, 0, 0, 0, 0, 56, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 73, 110, 116, 101, 114, 110, 97, 108, 46, 65, 114, 114, 97, 121, 80, 111, 111, 108, 85, 116, 105, 108, 124, 82, 101, 110, 116, 65, 114, 114, 97, 121, 0, 0, 0, 0, 42, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 73, 110, 116, 101, 114, 110, 97, 108, 124, 65, 114, 114, 97, 121, 85, 116, 105, 108, 0, 0, 0, 0, 50, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 73, 110, 116, 101, 114, 110, 97, 108, 124, 67, 111, 110, 116, 105, 110, 117, 97, 116, 105, 111, 110, 81, 117, 101, 117, 101, 0, 0, 0, 0, 54, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 73, 110, 116, 101, 114, 110, 97, 108, 124, 68, 105, 97, 103, 110, 111, 115, 116, 105, 99, 115, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 0, 0, 0, 0, 38, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 73, 110, 116, 101, 114, 110, 97, 108, 124, 69, 114, 114, 111, 114, 0, 0, 0, 0, 45, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 73, 110, 116, 101, 114, 110, 97, 108, 124, 77, 105, 110, 105, 109, 117, 109, 81, 117, 101, 117, 101, 0, 0, 0, 0, 49, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 73, 110, 116, 101, 114, 110, 97, 108, 124, 80, 108, 97, 121, 101, 114, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 0, 0, 0, 0, 47, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 73, 110, 116, 101, 114, 110, 97, 108, 124, 80, 111, 111, 108, 101, 100, 68, 101, 108, 101, 103, 97, 116, 101, 0, 0, 0, 0, 58, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 73, 110, 116, 101, 114, 110, 97, 108, 124, 82, 117, 110, 116, 105, 109, 101, 72, 101, 108, 112, 101, 114, 115, 65, 98, 115, 116, 114, 97, 99, 116, 105, 111, 110, 0, 0, 0, 0, 91, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 73, 110, 116, 101, 114, 110, 97, 108, 46, 82, 117, 110, 116, 105, 109, 101, 72, 101, 108, 112, 101, 114, 115, 65, 98, 115, 116, 114, 97, 99, 116, 105, 111, 110, 124, 87, 101, 108, 108, 75, 110, 111, 119, 110, 78, 111, 82, 101, 102, 101, 114, 101, 110, 99, 101, 67, 111, 110, 116, 97, 105, 110, 115, 84, 121, 112, 101, 1, 0, 0, 0, 43, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 73, 110, 116, 101, 114, 110, 97, 108, 124, 83, 116, 97, 116, 101, 84, 117, 112, 108, 101, 1, 0, 0, 0, 43, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 73, 110, 116, 101, 114, 110, 97, 108, 124, 83, 116, 97, 116, 101, 84, 117, 112, 108, 101, 1, 0, 0, 0, 42, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 73, 110, 116, 101, 114, 110, 97, 108, 124, 83, 116, 97, 116, 101, 80, 111, 111, 108, 1, 0, 0, 0, 43, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 73, 110, 116, 101, 114, 110, 97, 108, 124, 83, 116, 97, 116, 101, 84, 117, 112, 108, 101, 1, 0, 0, 0, 42, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 73, 110, 116, 101, 114, 110, 97, 108, 124, 83, 116, 97, 116, 101, 80, 111, 111, 108, 1, 0, 0, 0, 43, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 73, 110, 116, 101, 114, 110, 97, 108, 124, 83, 116, 97, 116, 101, 84, 117, 112, 108, 101, 1, 0, 0, 0, 42, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 73, 110, 116, 101, 114, 110, 97, 108, 124, 83, 116, 97, 116, 101, 80, 111, 111, 108, 0, 0, 0, 0, 35, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 124, 84, 97, 115, 107, 84, 114, 97, 99, 107, 101, 114, 0, 0, 0, 0, 54, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 73, 110, 116, 101, 114, 110, 97, 108, 124, 85, 110, 105, 116, 121, 69, 113, 117, 97, 108, 105, 116, 121, 67, 111, 109, 112, 97, 114, 101, 114, 0, 0, 0, 0, 60, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 73, 110, 116, 101, 114, 110, 97, 108, 46, 85, 110, 105, 116, 121, 69, 113, 117, 97, 108, 105, 116, 121, 67, 111, 109, 112, 97, 114, 101, 114, 124, 67, 97, 99, 104, 101, 0, 0, 0, 0, 78, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 73, 110, 116, 101, 114, 110, 97, 108, 46, 85, 110, 105, 116, 121, 69, 113, 117, 97, 108, 105, 116, 121, 67, 111, 109, 112, 97, 114, 101, 114, 124, 86, 101, 99, 116, 111, 114, 50, 69, 113, 117, 97, 108, 105, 116, 121, 67, 111, 109, 112, 97, 114, 101, 114, 0, 0, 0, 0, 78, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 73, 110, 116, 101, 114, 110, 97, 108, 46, 85, 110, 105, 116, 121, 69, 113, 117, 97, 108, 105, 116, 121, 67, 111, 109, 112, 97, 114, 101, 114, 124, 86, 101, 99, 116, 111, 114, 51, 69, 113, 117, 97, 108, 105, 116, 121, 67, 111, 109, 112, 97, 114, 101, 114, 0, 0, 0, 0, 78, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 73, 110, 116, 101, 114, 110, 97, 108, 46, 85, 110, 105, 116, 121, 69, 113, 117, 97, 108, 105, 116, 121, 67, 111, 109, 112, 97, 114, 101, 114, 124, 86, 101, 99, 116, 111, 114, 52, 69, 113, 117, 97, 108, 105, 116, 121, 67, 111, 109, 112, 97, 114, 101, 114, 0, 0, 0, 0, 76, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 73, 110, 116, 101, 114, 110, 97, 108, 46, 85, 110, 105, 116, 121, 69, 113, 117, 97, 108, 105, 116, 121, 67, 111, 109, 112, 97, 114, 101, 114, 124, 67, 111, 108, 111, 114, 69, 113, 117, 97, 108, 105, 116, 121, 67, 111, 109, 112, 97, 114, 101, 114, 0, 0, 0, 0, 75, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 73, 110, 116, 101, 114, 110, 97, 108, 46, 85, 110, 105, 116, 121, 69, 113, 117, 97, 108, 105, 116, 121, 67, 111, 109, 112, 97, 114, 101, 114, 124, 82, 101, 99, 116, 69, 113, 117, 97, 108, 105, 116, 121, 67, 111, 109, 112, 97, 114, 101, 114, 0, 0, 0, 0, 77, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 73, 110, 116, 101, 114, 110, 97, 108, 46, 85, 110, 105, 116, 121, 69, 113, 117, 97, 108, 105, 116, 121, 67, 111, 109, 112, 97, 114, 101, 114, 124, 66, 111, 117, 110, 100, 115, 69, 113, 117, 97, 108, 105, 116, 121, 67, 111, 109, 112, 97, 114, 101, 114, 0, 0, 0, 0, 81, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 73, 110, 116, 101, 114, 110, 97, 108, 46, 85, 110, 105, 116, 121, 69, 113, 117, 97, 108, 105, 116, 121, 67, 111, 109, 112, 97, 114, 101, 114, 124, 81, 117, 97, 116, 101, 114, 110, 105, 111, 110, 69, 113, 117, 97, 108, 105, 116, 121, 67, 111, 109, 112, 97, 114, 101, 114, 0, 0, 0, 0, 78, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 73, 110, 116, 101, 114, 110, 97, 108, 46, 85, 110, 105, 116, 121, 69, 113, 117, 97, 108, 105, 116, 121, 67, 111, 109, 112, 97, 114, 101, 114, 124, 67, 111, 108, 111, 114, 51, 50, 69, 113, 117, 97, 108, 105, 116, 121, 67, 111, 109, 112, 97, 114, 101, 114, 0, 0, 0, 0, 81, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 73, 110, 116, 101, 114, 110, 97, 108, 46, 85, 110, 105, 116, 121, 69, 113, 117, 97, 108, 105, 116, 121, 67, 111, 109, 112, 97, 114, 101, 114, 124, 86, 101, 99, 116, 111, 114, 50, 73, 110, 116, 69, 113, 117, 97, 108, 105, 116, 121, 67, 111, 109, 112, 97, 114, 101, 114, 0, 0, 0, 0, 81, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 73, 110, 116, 101, 114, 110, 97, 108, 46, 85, 110, 105, 116, 121, 69, 113, 117, 97, 108, 105, 116, 121, 67, 111, 109, 112, 97, 114, 101, 114, 124, 86, 101, 99, 116, 111, 114, 51, 73, 110, 116, 69, 113, 117, 97, 108, 105, 116, 121, 67, 111, 109, 112, 97, 114, 101, 114, 0, 0, 0, 0, 79, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 73, 110, 116, 101, 114, 110, 97, 108, 46, 85, 110, 105, 116, 121, 69, 113, 117, 97, 108, 105, 116, 121, 67, 111, 109, 112, 97, 114, 101, 114, 124, 82, 97, 110, 103, 101, 73, 110, 116, 69, 113, 117, 97, 108, 105, 116, 121, 67, 111, 109, 112, 97, 114, 101, 114, 0, 0, 0, 0, 78, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 73, 110, 116, 101, 114, 110, 97, 108, 46, 85, 110, 105, 116, 121, 69, 113, 117, 97, 108, 105, 116, 121, 67, 111, 109, 112, 97, 114, 101, 114, 124, 82, 101, 99, 116, 73, 110, 116, 69, 113, 117, 97, 108, 105, 116, 121, 67, 111, 109, 112, 97, 114, 101, 114, 0, 0, 0, 0, 80, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 73, 110, 116, 101, 114, 110, 97, 108, 46, 85, 110, 105, 116, 121, 69, 113, 117, 97, 108, 105, 116, 121, 67, 111, 109, 112, 97, 114, 101, 114, 124, 66, 111, 117, 110, 100, 115, 73, 110, 116, 69, 113, 117, 97, 108, 105, 116, 121, 67, 111, 109, 112, 97, 114, 101, 114, 0, 0, 0, 0, 64, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 73, 110, 116, 101, 114, 110, 97, 108, 124, 85, 110, 105, 116, 121, 87, 101, 98, 82, 101, 113, 117, 101, 115, 116, 82, 101, 115, 117, 108, 116, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 0, 0, 0, 0, 47, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 73, 110, 116, 101, 114, 110, 97, 108, 124, 86, 97, 108, 117, 101, 83, 116, 111, 112, 119, 97, 116, 99, 104, 0, 0, 0, 0, 47, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 73, 110, 116, 101, 114, 110, 97, 108, 124, 87, 101, 97, 107, 68, 105, 99, 116, 105, 111, 110, 97, 114, 121, 0, 0, 0, 0, 53, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 73, 110, 116, 101, 114, 110, 97, 108, 46, 87, 101, 97, 107, 68, 105, 99, 116, 105, 111, 110, 97, 114, 121, 124, 69, 110, 116, 114, 121, 0, 0, 0, 0, 47, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 124, 73, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 47, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 124, 73, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 116, 111, 114, 0, 0, 0, 0, 47, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 124, 73, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 68, 105, 115, 112, 111, 115, 97, 98, 108, 101, 0, 0, 0, 0, 54, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 124, 73, 85, 110, 105, 84, 97, 115, 107, 79, 114, 100, 101, 114, 101, 100, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 58, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 124, 73, 67, 111, 110, 110, 101, 99, 116, 97, 98, 108, 101, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 56, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 0, 0, 0, 0, 56, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 124, 85, 110, 105, 84, 97, 115, 107, 67, 97, 110, 99, 101, 108, 97, 98, 108, 101, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 35, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 124, 69, 110, 117, 109, 101, 114, 97, 116, 111, 114, 1, 0, 0, 0, 38, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 124, 73, 85, 110, 105, 84, 97, 115, 107, 83, 111, 117, 114, 99, 101, 1, 0, 0, 0, 38, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 124, 73, 85, 110, 105, 84, 97, 115, 107, 83, 111, 117, 114, 99, 101, 0, 0, 0, 0, 47, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 124, 85, 110, 105, 84, 97, 115, 107, 83, 116, 97, 116, 117, 115, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 0, 0, 0, 0, 38, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 124, 77, 111, 118, 101, 78, 101, 120, 116, 83, 111, 117, 114, 99, 101, 0, 0, 0, 0, 42, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 124, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 115, 0, 0, 0, 0, 74, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 115, 124, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 73, 110, 105, 116, 105, 97, 108, 105, 122, 97, 116, 105, 111, 110, 0, 0, 0, 0, 71, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 115, 124, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 69, 97, 114, 108, 121, 85, 112, 100, 97, 116, 101, 0, 0, 0, 0, 71, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 115, 124, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 70, 105, 120, 101, 100, 85, 112, 100, 97, 116, 101, 0, 0, 0, 0, 69, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 115, 124, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 80, 114, 101, 85, 112, 100, 97, 116, 101, 0, 0, 0, 0, 66, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 115, 124, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 85, 112, 100, 97, 116, 101, 0, 0, 0, 0, 73, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 115, 124, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 80, 114, 101, 76, 97, 116, 101, 85, 112, 100, 97, 116, 101, 0, 0, 0, 0, 74, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 115, 124, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 80, 111, 115, 116, 76, 97, 116, 101, 85, 112, 100, 97, 116, 101, 0, 0, 0, 0, 78, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 115, 124, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 76, 97, 115, 116, 73, 110, 105, 116, 105, 97, 108, 105, 122, 97, 116, 105, 111, 110, 0, 0, 0, 0, 75, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 115, 124, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 76, 97, 115, 116, 69, 97, 114, 108, 121, 85, 112, 100, 97, 116, 101, 0, 0, 0, 0, 75, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 115, 124, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 76, 97, 115, 116, 70, 105, 120, 101, 100, 85, 112, 100, 97, 116, 101, 0, 0, 0, 0, 73, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 115, 124, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 76, 97, 115, 116, 80, 114, 101, 85, 112, 100, 97, 116, 101, 0, 0, 0, 0, 70, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 115, 124, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 76, 97, 115, 116, 85, 112, 100, 97, 116, 101, 0, 0, 0, 0, 77, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 115, 124, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 76, 97, 115, 116, 80, 114, 101, 76, 97, 116, 101, 85, 112, 100, 97, 116, 101, 0, 0, 0, 0, 78, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 115, 124, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 76, 97, 115, 116, 80, 111, 115, 116, 76, 97, 116, 101, 85, 112, 100, 97, 116, 101, 0, 0, 0, 0, 79, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 115, 124, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 89, 105, 101, 108, 100, 73, 110, 105, 116, 105, 97, 108, 105, 122, 97, 116, 105, 111, 110, 0, 0, 0, 0, 76, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 115, 124, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 89, 105, 101, 108, 100, 69, 97, 114, 108, 121, 85, 112, 100, 97, 116, 101, 0, 0, 0, 0, 76, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 115, 124, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 89, 105, 101, 108, 100, 70, 105, 120, 101, 100, 85, 112, 100, 97, 116, 101, 0, 0, 0, 0, 74, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 115, 124, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 89, 105, 101, 108, 100, 80, 114, 101, 85, 112, 100, 97, 116, 101, 0, 0, 0, 0, 71, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 115, 124, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 89, 105, 101, 108, 100, 85, 112, 100, 97, 116, 101, 0, 0, 0, 0, 78, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 115, 124, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 89, 105, 101, 108, 100, 80, 114, 101, 76, 97, 116, 101, 85, 112, 100, 97, 116, 101, 0, 0, 0, 0, 79, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 115, 124, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 89, 105, 101, 108, 100, 80, 111, 115, 116, 76, 97, 116, 101, 85, 112, 100, 97, 116, 101, 0, 0, 0, 0, 83, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 115, 124, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 76, 97, 115, 116, 89, 105, 101, 108, 100, 73, 110, 105, 116, 105, 97, 108, 105, 122, 97, 116, 105, 111, 110, 0, 0, 0, 0, 80, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 115, 124, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 76, 97, 115, 116, 89, 105, 101, 108, 100, 69, 97, 114, 108, 121, 85, 112, 100, 97, 116, 101, 0, 0, 0, 0, 80, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 115, 124, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 76, 97, 115, 116, 89, 105, 101, 108, 100, 70, 105, 120, 101, 100, 85, 112, 100, 97, 116, 101, 0, 0, 0, 0, 78, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 115, 124, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 76, 97, 115, 116, 89, 105, 101, 108, 100, 80, 114, 101, 85, 112, 100, 97, 116, 101, 0, 0, 0, 0, 75, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 115, 124, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 76, 97, 115, 116, 89, 105, 101, 108, 100, 85, 112, 100, 97, 116, 101, 0, 0, 0, 0, 82, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 115, 124, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 76, 97, 115, 116, 89, 105, 101, 108, 100, 80, 114, 101, 76, 97, 116, 101, 85, 112, 100, 97, 116, 101, 0, 0, 0, 0, 83, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 115, 124, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 76, 97, 115, 116, 89, 105, 101, 108, 100, 80, 111, 115, 116, 76, 97, 116, 101, 85, 112, 100, 97, 116, 101, 0, 0, 0, 0, 70, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 115, 124, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 84, 105, 109, 101, 85, 112, 100, 97, 116, 101, 0, 0, 0, 0, 74, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 115, 124, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 76, 97, 115, 116, 84, 105, 109, 101, 85, 112, 100, 97, 116, 101, 0, 0, 0, 0, 75, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 115, 124, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 89, 105, 101, 108, 100, 84, 105, 109, 101, 85, 112, 100, 97, 116, 101, 0, 0, 0, 0, 79, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 115, 124, 85, 110, 105, 84, 97, 115, 107, 76, 111, 111, 112, 82, 117, 110, 110, 101, 114, 76, 97, 115, 116, 89, 105, 101, 108, 100, 84, 105, 109, 101, 85, 112, 100, 97, 116, 101, 0, 0, 0, 0, 39, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 124, 73, 80, 108, 97, 121, 101, 114, 76, 111, 111, 112, 73, 116, 101, 109, 0, 0, 0, 0, 40, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 124, 80, 108, 97, 121, 101, 114, 76, 111, 111, 112, 72, 101, 108, 112, 101, 114, 0, 0, 0, 0, 39, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 124, 80, 108, 97, 121, 101, 114, 76, 111, 111, 112, 84, 105, 109, 101, 114, 0, 0, 0, 0, 48, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 124, 68, 101, 108, 116, 97, 84, 105, 109, 101, 80, 108, 97, 121, 101, 114, 76, 111, 111, 112, 84, 105, 109, 101, 114, 0, 0, 0, 0, 54, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 124, 73, 103, 110, 111, 114, 101, 84, 105, 109, 101, 83, 99, 97, 108, 101, 80, 108, 97, 121, 101, 114, 76, 111, 111, 112, 84, 105, 109, 101, 114, 0, 0, 0, 0, 47, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 124, 82, 101, 97, 108, 116, 105, 109, 101, 80, 108, 97, 121, 101, 114, 76, 111, 111, 112, 84, 105, 109, 101, 114, 0, 0, 0, 0, 32, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 124, 80, 114, 111, 103, 114, 101, 115, 115, 0, 0, 0, 0, 45, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 80, 114, 111, 103, 114, 101, 115, 115, 124, 78, 117, 108, 108, 80, 114, 111, 103, 114, 101, 115, 115, 0, 0, 0, 0, 50, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 80, 114, 111, 103, 114, 101, 115, 115, 124, 65, 110, 111, 110, 121, 109, 111, 117, 115, 80, 114, 111, 103, 114, 101, 115, 115, 0, 0, 0, 0, 57, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 80, 114, 111, 103, 114, 101, 115, 115, 124, 79, 110, 108, 121, 86, 97, 108, 117, 101, 67, 104, 97, 110, 103, 101, 100, 80, 114, 111, 103, 114, 101, 115, 115, 1, 0, 0, 0, 32, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 124, 84, 97, 115, 107, 80, 111, 111, 108, 0, 0, 0, 0, 37, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 124, 73, 84, 97, 115, 107, 80, 111, 111, 108, 78, 111, 100, 101, 1, 0, 0, 0, 32, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 124, 84, 97, 115, 107, 80, 111, 111, 108, 0, 0, 0, 0, 41, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 124, 84, 105, 109, 101, 111, 117, 116, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 0, 0, 0, 0, 39, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 124, 73, 84, 114, 105, 103, 103, 101, 114, 72, 97, 110, 100, 108, 101, 114, 0, 0, 0, 0, 36, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 124, 84, 114, 105, 103, 103, 101, 114, 69, 118, 101, 110, 116, 1, 0, 0, 0, 55, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 84, 114, 105, 103, 103, 101, 114, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 0, 0, 0, 0, 50, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 65, 119, 97, 107, 101, 84, 114, 105, 103, 103, 101, 114, 1, 0, 0, 0, 55, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 84, 114, 105, 103, 103, 101, 114, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 0, 0, 0, 0, 52, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 68, 101, 115, 116, 114, 111, 121, 84, 114, 105, 103, 103, 101, 114, 0, 0, 0, 0, 65, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 46, 65, 115, 121, 110, 99, 68, 101, 115, 116, 114, 111, 121, 84, 114, 105, 103, 103, 101, 114, 124, 65, 119, 97, 107, 101, 77, 111, 110, 105, 116, 111, 114, 1, 0, 0, 0, 55, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 84, 114, 105, 103, 103, 101, 114, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 0, 0, 0, 0, 50, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 83, 116, 97, 114, 116, 84, 114, 105, 103, 103, 101, 114, 0, 0, 0, 0, 49, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 84, 114, 105, 103, 103, 101, 114, 66, 97, 115, 101, 0, 0, 0, 0, 72, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 46, 65, 115, 121, 110, 99, 84, 114, 105, 103, 103, 101, 114, 66, 97, 115, 101, 124, 65, 115, 121, 110, 99, 84, 114, 105, 103, 103, 101, 114, 69, 110, 117, 109, 101, 114, 97, 116, 111, 114, 0, 0, 0, 0, 62, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 46, 65, 115, 121, 110, 99, 84, 114, 105, 103, 103, 101, 114, 66, 97, 115, 101, 124, 65, 119, 97, 107, 101, 77, 111, 110, 105, 116, 111, 114, 0, 0, 0, 0, 53, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 73, 65, 115, 121, 110, 99, 79, 110, 101, 83, 104, 111, 116, 84, 114, 105, 103, 103, 101, 114, 1, 0, 0, 0, 52, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 84, 114, 105, 103, 103, 101, 114, 72, 97, 110, 100, 108, 101, 114, 1, 0, 0, 0, 52, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 84, 114, 105, 103, 103, 101, 114, 72, 97, 110, 100, 108, 101, 114, 0, 0, 0, 0, 53, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 124, 85, 110, 105, 84, 97, 115, 107, 67, 97, 110, 99, 101, 108, 108, 97, 116, 105, 111, 110, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 1, 0, 0, 0, 55, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 84, 114, 105, 103, 103, 101, 114, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 0, 0, 0, 0, 57, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 73, 65, 115, 121, 110, 99, 70, 105, 120, 101, 100, 85, 112, 100, 97, 116, 101, 72, 97, 110, 100, 108, 101, 114, 1, 0, 0, 0, 52, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 84, 114, 105, 103, 103, 101, 114, 72, 97, 110, 100, 108, 101, 114, 1, 0, 0, 0, 55, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 84, 114, 105, 103, 103, 101, 114, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 0, 0, 0, 0, 56, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 70, 105, 120, 101, 100, 85, 112, 100, 97, 116, 101, 84, 114, 105, 103, 103, 101, 114, 0, 0, 0, 0, 56, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 73, 65, 115, 121, 110, 99, 76, 97, 116, 101, 85, 112, 100, 97, 116, 101, 72, 97, 110, 100, 108, 101, 114, 1, 0, 0, 0, 52, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 84, 114, 105, 103, 103, 101, 114, 72, 97, 110, 100, 108, 101, 114, 1, 0, 0, 0, 55, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 84, 114, 105, 103, 103, 101, 114, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 0, 0, 0, 0, 55, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 76, 97, 116, 101, 85, 112, 100, 97, 116, 101, 84, 114, 105, 103, 103, 101, 114, 0, 0, 0, 0, 58, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 73, 65, 115, 121, 110, 99, 79, 110, 65, 110, 105, 109, 97, 116, 111, 114, 73, 75, 72, 97, 110, 100, 108, 101, 114, 1, 0, 0, 0, 52, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 84, 114, 105, 103, 103, 101, 114, 72, 97, 110, 100, 108, 101, 114, 1, 0, 0, 0, 55, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 84, 114, 105, 103, 103, 101, 114, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 0, 0, 0, 0, 55, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 65, 110, 105, 109, 97, 116, 111, 114, 73, 75, 84, 114, 105, 103, 103, 101, 114, 0, 0, 0, 0, 60, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 73, 65, 115, 121, 110, 99, 79, 110, 65, 110, 105, 109, 97, 116, 111, 114, 77, 111, 118, 101, 72, 97, 110, 100, 108, 101, 114, 1, 0, 0, 0, 52, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 84, 114, 105, 103, 103, 101, 114, 72, 97, 110, 100, 108, 101, 114, 1, 0, 0, 0, 55, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 84, 114, 105, 103, 103, 101, 114, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 0, 0, 0, 0, 57, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 65, 110, 105, 109, 97, 116, 111, 114, 77, 111, 118, 101, 84, 114, 105, 103, 103, 101, 114, 0, 0, 0, 0, 64, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 73, 65, 115, 121, 110, 99, 79, 110, 65, 112, 112, 108, 105, 99, 97, 116, 105, 111, 110, 70, 111, 99, 117, 115, 72, 97, 110, 100, 108, 101, 114, 1, 0, 0, 0, 52, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 84, 114, 105, 103, 103, 101, 114, 72, 97, 110, 100, 108, 101, 114, 1, 0, 0, 0, 55, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 84, 114, 105, 103, 103, 101, 114, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 0, 0, 0, 0, 61, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 65, 112, 112, 108, 105, 99, 97, 116, 105, 111, 110, 70, 111, 99, 117, 115, 84, 114, 105, 103, 103, 101, 114, 0, 0, 0, 0, 64, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 73, 65, 115, 121, 110, 99, 79, 110, 65, 112, 112, 108, 105, 99, 97, 116, 105, 111, 110, 80, 97, 117, 115, 101, 72, 97, 110, 100, 108, 101, 114, 1, 0, 0, 0, 52, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 84, 114, 105, 103, 103, 101, 114, 72, 97, 110, 100, 108, 101, 114, 1, 0, 0, 0, 55, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 84, 114, 105, 103, 103, 101, 114, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 0, 0, 0, 0, 61, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 65, 112, 112, 108, 105, 99, 97, 116, 105, 111, 110, 80, 97, 117, 115, 101, 84, 114, 105, 103, 103, 101, 114, 0, 0, 0, 0, 63, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 73, 65, 115, 121, 110, 99, 79, 110, 65, 112, 112, 108, 105, 99, 97, 116, 105, 111, 110, 81, 117, 105, 116, 72, 97, 110, 100, 108, 101, 114, 1, 0, 0, 0, 52, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 84, 114, 105, 103, 103, 101, 114, 72, 97, 110, 100, 108, 101, 114, 1, 0, 0, 0, 55, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 84, 114, 105, 103, 103, 101, 114, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 0, 0, 0, 0, 60, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 65, 112, 112, 108, 105, 99, 97, 116, 105, 111, 110, 81, 117, 105, 116, 84, 114, 105, 103, 103, 101, 114, 0, 0, 0, 0, 63, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 73, 65, 115, 121, 110, 99, 79, 110, 65, 117, 100, 105, 111, 70, 105, 108, 116, 101, 114, 82, 101, 97, 100, 72, 97, 110, 100, 108, 101, 114, 1, 0, 0, 0, 52, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 84, 114, 105, 103, 103, 101, 114, 72, 97, 110, 100, 108, 101, 114, 1, 0, 0, 0, 55, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 84, 114, 105, 103, 103, 101, 114, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 0, 0, 0, 0, 60, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 65, 117, 100, 105, 111, 70, 105, 108, 116, 101, 114, 82, 101, 97, 100, 84, 114, 105, 103, 103, 101, 114, 0, 0, 0, 0, 63, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 73, 65, 115, 121, 110, 99, 79, 110, 66, 101, 99, 97, 109, 101, 73, 110, 118, 105, 115, 105, 98, 108, 101, 72, 97, 110, 100, 108, 101, 114, 1, 0, 0, 0, 52, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 84, 114, 105, 103, 103, 101, 114, 72, 97, 110, 100, 108, 101, 114, 1, 0, 0, 0, 55, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 84, 114, 105, 103, 103, 101, 114, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 0, 0, 0, 0, 60, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 66, 101, 99, 97, 109, 101, 73, 110, 118, 105, 115, 105, 98, 108, 101, 84, 114, 105, 103, 103, 101, 114, 0, 0, 0, 0, 61, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 73, 65, 115, 121, 110, 99, 79, 110, 66, 101, 99, 97, 109, 101, 86, 105, 115, 105, 98, 108, 101, 72, 97, 110, 100, 108, 101, 114, 1, 0, 0, 0, 52, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 84, 114, 105, 103, 103, 101, 114, 72, 97, 110, 100, 108, 101, 114, 1, 0, 0, 0, 55, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 84, 114, 105, 103, 103, 101, 114, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 0, 0, 0, 0, 58, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 66, 101, 99, 97, 109, 101, 86, 105, 115, 105, 98, 108, 101, 84, 114, 105, 103, 103, 101, 114, 0, 0, 0, 0, 76, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 73, 65, 115, 121, 110, 99, 79, 110, 66, 101, 102, 111, 114, 101, 84, 114, 97, 110, 115, 102, 111, 114, 109, 80, 97, 114, 101, 110, 116, 67, 104, 97, 110, 103, 101, 100, 72, 97, 110, 100, 108, 101, 114, 1, 0, 0, 0, 52, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 84, 114, 105, 103, 103, 101, 114, 72, 97, 110, 100, 108, 101, 114, 1, 0, 0, 0, 55, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 84, 114, 105, 103, 103, 101, 114, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 0, 0, 0, 0, 73, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 66, 101, 102, 111, 114, 101, 84, 114, 97, 110, 115, 102, 111, 114, 109, 80, 97, 114, 101, 110, 116, 67, 104, 97, 110, 103, 101, 100, 84, 114, 105, 103, 103, 101, 114, 0, 0, 0, 0, 66, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 73, 65, 115, 121, 110, 99, 79, 110, 67, 97, 110, 118, 97, 115, 71, 114, 111, 117, 112, 67, 104, 97, 110, 103, 101, 100, 72, 97, 110, 100, 108, 101, 114, 1, 0, 0, 0, 52, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 84, 114, 105, 103, 103, 101, 114, 72, 97, 110, 100, 108, 101, 114, 1, 0, 0, 0, 55, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 84, 114, 105, 103, 103, 101, 114, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 0, 0, 0, 0, 65, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 79, 110, 67, 97, 110, 118, 97, 115, 71, 114, 111, 117, 112, 67, 104, 97, 110, 103, 101, 100, 84, 114, 105, 103, 103, 101, 114, 0, 0, 0, 0, 62, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 73, 65, 115, 121, 110, 99, 79, 110, 67, 111, 108, 108, 105, 115, 105, 111, 110, 69, 110, 116, 101, 114, 72, 97, 110, 100, 108, 101, 114, 1, 0, 0, 0, 52, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 84, 114, 105, 103, 103, 101, 114, 72, 97, 110, 100, 108, 101, 114, 1, 0, 0, 0, 55, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 84, 114, 105, 103, 103, 101, 114, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 0, 0, 0, 0, 59, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 67, 111, 108, 108, 105, 115, 105, 111, 110, 69, 110, 116, 101, 114, 84, 114, 105, 103, 103, 101, 114, 0, 0, 0, 0, 64, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 73, 65, 115, 121, 110, 99, 79, 110, 67, 111, 108, 108, 105, 115, 105, 111, 110, 69, 110, 116, 101, 114, 50, 68, 72, 97, 110, 100, 108, 101, 114, 1, 0, 0, 0, 52, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 84, 114, 105, 103, 103, 101, 114, 72, 97, 110, 100, 108, 101, 114, 1, 0, 0, 0, 55, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 84, 114, 105, 103, 103, 101, 114, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 0, 0, 0, 0, 61, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 67, 111, 108, 108, 105, 115, 105, 111, 110, 69, 110, 116, 101, 114, 50, 68, 84, 114, 105, 103, 103, 101, 114, 0, 0, 0, 0, 61, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 73, 65, 115, 121, 110, 99, 79, 110, 67, 111, 108, 108, 105, 115, 105, 111, 110, 69, 120, 105, 116, 72, 97, 110, 100, 108, 101, 114, 1, 0, 0, 0, 52, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 84, 114, 105, 103, 103, 101, 114, 72, 97, 110, 100, 108, 101, 114, 1, 0, 0, 0, 55, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 84, 114, 105, 103, 103, 101, 114, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 0, 0, 0, 0, 58, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 67, 111, 108, 108, 105, 115, 105, 111, 110, 69, 120, 105, 116, 84, 114, 105, 103, 103, 101, 114, 0, 0, 0, 0, 63, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 73, 65, 115, 121, 110, 99, 79, 110, 67, 111, 108, 108, 105, 115, 105, 111, 110, 69, 120, 105, 116, 50, 68, 72, 97, 110, 100, 108, 101, 114, 1, 0, 0, 0, 52, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 84, 114, 105, 103, 103, 101, 114, 72, 97, 110, 100, 108, 101, 114, 1, 0, 0, 0, 55, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 84, 114, 105, 103, 103, 101, 114, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 0, 0, 0, 0, 60, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 67, 111, 108, 108, 105, 115, 105, 111, 110, 69, 120, 105, 116, 50, 68, 84, 114, 105, 103, 103, 101, 114, 0, 0, 0, 0, 61, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 73, 65, 115, 121, 110, 99, 79, 110, 67, 111, 108, 108, 105, 115, 105, 111, 110, 83, 116, 97, 121, 72, 97, 110, 100, 108, 101, 114, 1, 0, 0, 0, 52, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 84, 114, 105, 103, 103, 101, 114, 72, 97, 110, 100, 108, 101, 114, 1, 0, 0, 0, 55, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 84, 114, 105, 103, 103, 101, 114, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 0, 0, 0, 0, 58, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 67, 111, 108, 108, 105, 115, 105, 111, 110, 83, 116, 97, 121, 84, 114, 105, 103, 103, 101, 114, 0, 0, 0, 0, 63, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 73, 65, 115, 121, 110, 99, 79, 110, 67, 111, 108, 108, 105, 115, 105, 111, 110, 83, 116, 97, 121, 50, 68, 72, 97, 110, 100, 108, 101, 114, 1, 0, 0, 0, 52, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 84, 114, 105, 103, 103, 101, 114, 115, 124, 65, 115, 121, 110, 99, 84, 114, 105, 103, 103, 101, 114, 72, 97, 110, 100, 108, 101, 114
BepInEx/plugins/UniTask.DOTween.dll
Decompiled 3 months agousing System.CodeDom.Compiler; using System.ComponentModel; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyVersion("0.0.0.0")] [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() { MonoScriptData result = default(MonoScriptData); result.FilePathsData = new byte[0]; result.TypesData = new byte[0]; result.TotalFiles = 0; result.TotalTypes = 0; result.IsEditorOnly = false; return result; } }
BepInEx/plugins/UniTask.Linq.dll
Decompiled 3 months ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.CodeDom.Compiler; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.ExceptionServices; using System.Runtime.InteropServices; using System.Threading; using System.Threading.Tasks; using Cysharp.Threading.Tasks.CompilerServices; using Cysharp.Threading.Tasks.Internal; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyVersion("0.0.0.0")] [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() { MonoScriptData result = default(MonoScriptData); result.FilePathsData = new byte[5897] { 0, 0, 0, 2, 0, 0, 0, 73, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 65, 103, 103, 114, 101, 103, 97, 116, 101, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 67, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 65, 108, 108, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 67, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 65, 110, 121, 46, 99, 115, 0, 0, 0, 3, 0, 0, 0, 77, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 65, 112, 112, 101, 110, 100, 80, 114, 101, 112, 101, 110, 100, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 65, 115, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 116, 111, 114, 66, 97, 115, 101, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 71, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 65, 118, 101, 114, 97, 103, 101, 46, 99, 115, 0, 0, 0, 5, 0, 0, 0, 70, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 66, 117, 102, 102, 101, 114, 46, 99, 115, 0, 0, 0, 3, 0, 0, 0, 68, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 67, 97, 115, 116, 46, 99, 115, 0, 0, 0, 29, 0, 0, 0, 77, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 67, 111, 109, 98, 105, 110, 101, 76, 97, 116, 101, 115, 116, 46, 99, 115, 0, 0, 0, 3, 0, 0, 0, 70, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 67, 111, 110, 99, 97, 116, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 72, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 67, 111, 110, 116, 97, 105, 110, 115, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 69, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 67, 111, 117, 110, 116, 46, 99, 115, 0, 0, 0, 5, 0, 0, 0, 70, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 67, 114, 101, 97, 116, 101, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 68, 101, 102, 97, 117, 108, 116, 73, 102, 69, 109, 112, 116, 121, 46, 99, 115, 0, 0, 0, 9, 0, 0, 0, 72, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 68, 105, 115, 116, 105, 110, 99, 116, 46, 99, 115, 0, 0, 0, 9, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 68, 105, 115, 116, 105, 110, 99, 116, 85, 110, 116, 105, 108, 67, 104, 97, 110, 103, 101, 100, 46, 99, 115, 0, 0, 0, 3, 0, 0, 0, 66, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 68, 111, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 73, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 69, 108, 101, 109, 101, 110, 116, 65, 116, 46, 99, 115, 0, 0, 0, 3, 0, 0, 0, 69, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 69, 109, 112, 116, 121, 46, 99, 115, 0, 0, 0, 3, 0, 0, 0, 70, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 69, 120, 99, 101, 112, 116, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 69, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 70, 105, 114, 115, 116, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 71, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 70, 111, 114, 69, 97, 99, 104, 46, 99, 115, 0, 0, 0, 13, 0, 0, 0, 71, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 71, 114, 111, 117, 112, 66, 121, 46, 99, 115, 0, 0, 0, 7, 0, 0, 0, 73, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 71, 114, 111, 117, 112, 74, 111, 105, 110, 46, 99, 115, 0, 0, 0, 3, 0, 0, 0, 73, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 73, 110, 116, 101, 114, 115, 101, 99, 116, 46, 99, 115, 0, 0, 0, 7, 0, 0, 0, 68, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 74, 111, 105, 110, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 68, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 76, 97, 115, 116, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 73, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 76, 111, 110, 103, 67, 111, 117, 110, 116, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 67, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 77, 97, 120, 46, 99, 115, 0, 0, 0, 3, 0, 0, 0, 69, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 77, 101, 114, 103, 101, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 67, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 77, 105, 110, 46, 99, 115, 0, 0, 0, 4, 0, 0, 0, 70, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 77, 105, 110, 77, 97, 120, 46, 99, 115, 0, 0, 0, 3, 0, 0, 0, 69, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 78, 101, 118, 101, 114, 46, 99, 115, 0, 0, 0, 3, 0, 0, 0, 70, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 79, 102, 84, 121, 112, 101, 46, 99, 115, 0, 0, 0, 10, 0, 0, 0, 71, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 79, 114, 100, 101, 114, 66, 121, 46, 99, 115, 0, 0, 0, 3, 0, 0, 0, 72, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 80, 97, 105, 114, 119, 105, 115, 101, 46, 99, 115, 0, 0, 0, 4, 0, 0, 0, 71, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 80, 117, 98, 108, 105, 115, 104, 46, 99, 115, 0, 0, 0, 3, 0, 0, 0, 69, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 81, 117, 101, 117, 101, 46, 99, 115, 0, 0, 0, 3, 0, 0, 0, 69, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 82, 97, 110, 103, 101, 46, 99, 115, 0, 0, 0, 3, 0, 0, 0, 70, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 82, 101, 112, 101, 97, 116, 46, 99, 115, 0, 0, 0, 3, 0, 0, 0, 70, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 82, 101, 116, 117, 114, 110, 46, 99, 115, 0, 0, 0, 3, 0, 0, 0, 71, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 82, 101, 118, 101, 114, 115, 101, 46, 99, 115, 0, 0, 0, 13, 0, 0, 0, 70, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 83, 101, 108, 101, 99, 116, 46, 99, 115, 0, 0, 0, 7, 0, 0, 0, 74, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 83, 101, 108, 101, 99, 116, 77, 97, 110, 121, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 77, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 83, 101, 113, 117, 101, 110, 99, 101, 69, 113, 117, 97, 108, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 70, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 83, 105, 110, 103, 108, 101, 46, 99, 115, 0, 0, 0, 3, 0, 0, 0, 68, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 83, 107, 105, 112, 46, 99, 115, 0, 0, 0, 3, 0, 0, 0, 72, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 83, 107, 105, 112, 76, 97, 115, 116, 46, 99, 115, 0, 0, 0, 3, 0, 0, 0, 73, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 83, 107, 105, 112, 85, 110, 116, 105, 108, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 83, 107, 105, 112, 85, 110, 116, 105, 108, 67, 97, 110, 99, 101, 108, 101, 100, 46, 99, 115, 0, 0, 0, 13, 0, 0, 0, 73, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 83, 107, 105, 112, 87, 104, 105, 108, 101, 46, 99, 115, 0, 0, 0, 3, 0, 0, 0, 73, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 83, 117, 98, 115, 99, 114, 105, 98, 101, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 67, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 83, 117, 109, 46, 99, 115, 0, 0, 0, 3, 0, 0, 0, 68, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 84, 97, 107, 101, 46, 99, 115, 0, 0, 0, 3, 0, 0, 0, 72, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 84, 97, 107, 101, 76, 97, 115, 116, 46, 99, 115, 0, 0, 0, 3, 0, 0, 0, 73, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 84, 97, 107, 101, 85, 110, 116, 105, 108, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 84, 97, 107, 101, 85, 110, 116, 105, 108, 67, 97, 110, 99, 101, 108, 101, 100, 46, 99, 115, 0, 0, 0, 13, 0, 0, 0, 73, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 84, 97, 107, 101, 87, 104, 105, 108, 101, 46, 99, 115, 0, 0, 0, 3, 0, 0, 0, 69, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 84, 104, 114, 111, 119, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 71, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 84, 111, 65, 114, 114, 97, 121, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 76, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 84, 111, 68, 105, 99, 116, 105, 111, 110, 97, 114, 121, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 73, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 84, 111, 72, 97, 115, 104, 83, 101, 116, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 70, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 84, 111, 76, 105, 115, 116, 46, 99, 115, 0, 0, 0, 4, 0, 0, 0, 72, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 84, 111, 76, 111, 111, 107, 117, 112, 46, 99, 115, 0, 0, 0, 3, 0, 0, 0, 76, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 84, 111, 79, 98, 115, 101, 114, 118, 97, 98, 108, 101, 46, 99, 115, 0, 0, 0, 9, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 84, 111, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 69, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 85, 110, 105, 111, 110, 46, 99, 115, 0, 0, 0, 3, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 85, 110, 105, 116, 121, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 92, 69, 118, 101, 114, 121, 85, 112, 100, 97, 116, 101, 46, 99, 115, 0, 0, 0, 5, 0, 0, 0, 97, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 85, 110, 105, 116, 121, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 92, 69, 118, 101, 114, 121, 86, 97, 108, 117, 101, 67, 104, 97, 110, 103, 101, 100, 46, 99, 115, 0, 0, 0, 5, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 85, 110, 105, 116, 121, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 92, 84, 105, 109, 101, 114, 46, 99, 115, 0, 0, 0, 13, 0, 0, 0, 69, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 87, 104, 101, 114, 101, 46, 99, 115, 0, 0, 0, 7, 0, 0, 0, 67, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 105, 110, 113, 92, 90, 105, 112, 46, 99, 115 }; result.TypesData = new byte[17792] { 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 38, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 65, 103, 103, 114, 101, 103, 97, 116, 101, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 32, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 65, 108, 108, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 32, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 65, 110, 121, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 42, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 65, 112, 112, 101, 110, 100, 80, 114, 101, 112, 101, 110, 100, 0, 0, 0, 0, 57, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 65, 112, 112, 101, 110, 100, 80, 114, 101, 112, 101, 110, 100, 124, 95, 65, 112, 112, 101, 110, 100, 80, 114, 101, 112, 101, 110, 100, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 48, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 116, 111, 114, 66, 97, 115, 101, 0, 0, 0, 0, 61, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 116, 111, 114, 65, 119, 97, 105, 116, 83, 101, 108, 101, 99, 116, 111, 114, 66, 97, 115, 101, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 36, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 65, 118, 101, 114, 97, 103, 101, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 35, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 66, 117, 102, 102, 101, 114, 0, 0, 0, 0, 43, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 66, 117, 102, 102, 101, 114, 124, 95, 66, 117, 102, 102, 101, 114, 0, 0, 0, 0, 39, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 66, 117, 102, 102, 101, 114, 83, 107, 105, 112, 0, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 66, 117, 102, 102, 101, 114, 83, 107, 105, 112, 124, 95, 66, 117, 102, 102, 101, 114, 83, 107, 105, 112, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 33, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 67, 97, 115, 116, 0, 0, 0, 0, 39, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 67, 97, 115, 116, 124, 95, 67, 97, 115, 116, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 1, 0, 0, 0, 42, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 67, 111, 109, 98, 105, 110, 101, 76, 97, 116, 101, 115, 116, 1, 0, 0, 0, 57, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 67, 111, 109, 98, 105, 110, 101, 76, 97, 116, 101, 115, 116, 124, 95, 67, 111, 109, 98, 105, 110, 101, 76, 97, 116, 101, 115, 116, 1, 0, 0, 0, 42, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 67, 111, 109, 98, 105, 110, 101, 76, 97, 116, 101, 115, 116, 1, 0, 0, 0, 57, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 67, 111, 109, 98, 105, 110, 101, 76, 97, 116, 101, 115, 116, 124, 95, 67, 111, 109, 98, 105, 110, 101, 76, 97, 116, 101, 115, 116, 1, 0, 0, 0, 42, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 67, 111, 109, 98, 105, 110, 101, 76, 97, 116, 101, 115, 116, 1, 0, 0, 0, 57, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 67, 111, 109, 98, 105, 110, 101, 76, 97, 116, 101, 115, 116, 124, 95, 67, 111, 109, 98, 105, 110, 101, 76, 97, 116, 101, 115, 116, 1, 0, 0, 0, 42, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 67, 111, 109, 98, 105, 110, 101, 76, 97, 116, 101, 115, 116, 1, 0, 0, 0, 57, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 67, 111, 109, 98, 105, 110, 101, 76, 97, 116, 101, 115, 116, 124, 95, 67, 111, 109, 98, 105, 110, 101, 76, 97, 116, 101, 115, 116, 1, 0, 0, 0, 42, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 67, 111, 109, 98, 105, 110, 101, 76, 97, 116, 101, 115, 116, 1, 0, 0, 0, 57, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 67, 111, 109, 98, 105, 110, 101, 76, 97, 116, 101, 115, 116, 124, 95, 67, 111, 109, 98, 105, 110, 101, 76, 97, 116, 101, 115, 116, 1, 0, 0, 0, 42, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 67, 111, 109, 98, 105, 110, 101, 76, 97, 116, 101, 115, 116, 1, 0, 0, 0, 57, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 67, 111, 109, 98, 105, 110, 101, 76, 97, 116, 101, 115, 116, 124, 95, 67, 111, 109, 98, 105, 110, 101, 76, 97, 116, 101, 115, 116, 1, 0, 0, 0, 42, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 67, 111, 109, 98, 105, 110, 101, 76, 97, 116, 101, 115, 116, 1, 0, 0, 0, 57, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 67, 111, 109, 98, 105, 110, 101, 76, 97, 116, 101, 115, 116, 124, 95, 67, 111, 109, 98, 105, 110, 101, 76, 97, 116, 101, 115, 116, 1, 0, 0, 0, 42, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 67, 111, 109, 98, 105, 110, 101, 76, 97, 116, 101, 115, 116, 1, 0, 0, 0, 57, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 67, 111, 109, 98, 105, 110, 101, 76, 97, 116, 101, 115, 116, 124, 95, 67, 111, 109, 98, 105, 110, 101, 76, 97, 116, 101, 115, 116, 1, 0, 0, 0, 42, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 67, 111, 109, 98, 105, 110, 101, 76, 97, 116, 101, 115, 116, 1, 0, 0, 0, 57, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 67, 111, 109, 98, 105, 110, 101, 76, 97, 116, 101, 115, 116, 124, 95, 67, 111, 109, 98, 105, 110, 101, 76, 97, 116, 101, 115, 116, 1, 0, 0, 0, 42, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 67, 111, 109, 98, 105, 110, 101, 76, 97, 116, 101, 115, 116, 1, 0, 0, 0, 57, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 67, 111, 109, 98, 105, 110, 101, 76, 97, 116, 101, 115, 116, 124, 95, 67, 111, 109, 98, 105, 110, 101, 76, 97, 116, 101, 115, 116, 1, 0, 0, 0, 42, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 67, 111, 109, 98, 105, 110, 101, 76, 97, 116, 101, 115, 116, 1, 0, 0, 0, 57, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 67, 111, 109, 98, 105, 110, 101, 76, 97, 116, 101, 115, 116, 124, 95, 67, 111, 109, 98, 105, 110, 101, 76, 97, 116, 101, 115, 116, 1, 0, 0, 0, 42, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 67, 111, 109, 98, 105, 110, 101, 76, 97, 116, 101, 115, 116, 1, 0, 0, 0, 57, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 67, 111, 109, 98, 105, 110, 101, 76, 97, 116, 101, 115, 116, 124, 95, 67, 111, 109, 98, 105, 110, 101, 76, 97, 116, 101, 115, 116, 1, 0, 0, 0, 42, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 67, 111, 109, 98, 105, 110, 101, 76, 97, 116, 101, 115, 116, 1, 0, 0, 0, 57, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 67, 111, 109, 98, 105, 110, 101, 76, 97, 116, 101, 115, 116, 124, 95, 67, 111, 109, 98, 105, 110, 101, 76, 97, 116, 101, 115, 116, 1, 0, 0, 0, 42, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 67, 111, 109, 98, 105, 110, 101, 76, 97, 116, 101, 115, 116, 1, 0, 0, 0, 57, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 67, 111, 109, 98, 105, 110, 101, 76, 97, 116, 101, 115, 116, 124, 95, 67, 111, 109, 98, 105, 110, 101, 76, 97, 116, 101, 115, 116, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 35, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 67, 111, 110, 99, 97, 116, 0, 0, 0, 0, 43, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 67, 111, 110, 99, 97, 116, 124, 95, 67, 111, 110, 99, 97, 116, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 37, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 67, 111, 110, 116, 97, 105, 110, 115, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 34, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 67, 111, 117, 110, 116, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 41, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 73, 65, 115, 121, 110, 99, 87, 114, 105, 116, 101, 114, 0, 0, 0, 0, 35, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 67, 114, 101, 97, 116, 101, 0, 0, 0, 0, 43, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 67, 114, 101, 97, 116, 101, 124, 95, 67, 114, 101, 97, 116, 101, 0, 0, 0, 0, 47, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 67, 114, 101, 97, 116, 101, 124, 65, 115, 121, 110, 99, 87, 114, 105, 116, 101, 114, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 43, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 68, 101, 102, 97, 117, 108, 116, 73, 102, 69, 109, 112, 116, 121, 0, 0, 0, 0, 59, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 68, 101, 102, 97, 117, 108, 116, 73, 102, 69, 109, 112, 116, 121, 124, 95, 68, 101, 102, 97, 117, 108, 116, 73, 102, 69, 109, 112, 116, 121, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 1, 0, 0, 0, 37, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 68, 105, 115, 116, 105, 110, 99, 116, 1, 0, 0, 0, 47, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 68, 105, 115, 116, 105, 110, 99, 116, 124, 95, 68, 105, 115, 116, 105, 110, 99, 116, 1, 0, 0, 0, 37, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 68, 105, 115, 116, 105, 110, 99, 116, 1, 0, 0, 0, 47, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 68, 105, 115, 116, 105, 110, 99, 116, 124, 95, 68, 105, 115, 116, 105, 110, 99, 116, 0, 0, 0, 0, 42, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 68, 105, 115, 116, 105, 110, 99, 116, 65, 119, 97, 105, 116, 0, 0, 0, 0, 57, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 68, 105, 115, 116, 105, 110, 99, 116, 65, 119, 97, 105, 116, 124, 95, 68, 105, 115, 116, 105, 110, 99, 116, 65, 119, 97, 105, 116, 0, 0, 0, 0, 58, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 68, 105, 115, 116, 105, 110, 99, 116, 65, 119, 97, 105, 116, 87, 105, 116, 104, 67, 97, 110, 99, 101, 108, 108, 97, 116, 105, 111, 110, 0, 0, 0, 0, 89, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 68, 105, 115, 116, 105, 110, 99, 116, 65, 119, 97, 105, 116, 87, 105, 116, 104, 67, 97, 110, 99, 101, 108, 108, 97, 116, 105, 111, 110, 124, 95, 68, 105, 115, 116, 105, 110, 99, 116, 65, 119, 97, 105, 116, 87, 105, 116, 104, 67, 97, 110, 99, 101, 108, 108, 97, 116, 105, 111, 110, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 1, 0, 0, 0, 49, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 68, 105, 115, 116, 105, 110, 99, 116, 85, 110, 116, 105, 108, 67, 104, 97, 110, 103, 101, 100, 1, 0, 0, 0, 71, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 68, 105, 115, 116, 105, 110, 99, 116, 85, 110, 116, 105, 108, 67, 104, 97, 110, 103, 101, 100, 124, 95, 68, 105, 115, 116, 105, 110, 99, 116, 85, 110, 116, 105, 108, 67, 104, 97, 110, 103, 101, 100, 1, 0, 0, 0, 49, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 68, 105, 115, 116, 105, 110, 99, 116, 85, 110, 116, 105, 108, 67, 104, 97, 110, 103, 101, 100, 1, 0, 0, 0, 71, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 68, 105, 115, 116, 105, 110, 99, 116, 85, 110, 116, 105, 108, 67, 104, 97, 110, 103, 101, 100, 124, 95, 68, 105, 115, 116, 105, 110, 99, 116, 85, 110, 116, 105, 108, 67, 104, 97, 110, 103, 101, 100, 0, 0, 0, 0, 54, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 68, 105, 115, 116, 105, 110, 99, 116, 85, 110, 116, 105, 108, 67, 104, 97, 110, 103, 101, 100, 65, 119, 97, 105, 116, 0, 0, 0, 0, 81, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 68, 105, 115, 116, 105, 110, 99, 116, 85, 110, 116, 105, 108, 67, 104, 97, 110, 103, 101, 100, 65, 119, 97, 105, 116, 124, 95, 68, 105, 115, 116, 105, 110, 99, 116, 85, 110, 116, 105, 108, 67, 104, 97, 110, 103, 101, 100, 65, 119, 97, 105, 116, 0, 0, 0, 0, 70, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 68, 105, 115, 116, 105, 110, 99, 116, 85, 110, 116, 105, 108, 67, 104, 97, 110, 103, 101, 100, 65, 119, 97, 105, 116, 87, 105, 116, 104, 67, 97, 110, 99, 101, 108, 108, 97, 116, 105, 111, 110, 0, 0, 0, 0, 113, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 68, 105, 115, 116, 105, 110, 99, 116, 85, 110, 116, 105, 108, 67, 104, 97, 110, 103, 101, 100, 65, 119, 97, 105, 116, 87, 105, 116, 104, 67, 97, 110, 99, 101, 108, 108, 97, 116, 105, 111, 110, 124, 95, 68, 105, 115, 116, 105, 110, 99, 116, 85, 110, 116, 105, 108, 67, 104, 97, 110, 103, 101, 100, 65, 119, 97, 105, 116, 87, 105, 116, 104, 67, 97, 110, 99, 101, 108, 108, 97, 116, 105, 111, 110, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 31, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 68, 111, 0, 0, 0, 0, 35, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 68, 111, 124, 95, 68, 111, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 38, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 69, 108, 101, 109, 101, 110, 116, 65, 116, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 34, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 69, 109, 112, 116, 121, 0, 0, 0, 0, 41, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 69, 109, 112, 116, 121, 124, 95, 69, 109, 112, 116, 121, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 35, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 69, 120, 99, 101, 112, 116, 0, 0, 0, 0, 43, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 69, 120, 99, 101, 112, 116, 124, 95, 69, 120, 99, 101, 112, 116, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 34, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 70, 105, 114, 115, 116, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 36, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 70, 111, 114, 69, 97, 99, 104, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 1, 0, 0, 0, 36, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 71, 114, 111, 117, 112, 66, 121, 1, 0, 0, 0, 45, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 71, 114, 111, 117, 112, 66, 121, 124, 95, 71, 114, 111, 117, 112, 66, 121, 1, 0, 0, 0, 36, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 71, 114, 111, 117, 112, 66, 121, 1, 0, 0, 0, 45, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 71, 114, 111, 117, 112, 66, 121, 124, 95, 71, 114, 111, 117, 112, 66, 121, 1, 0, 0, 0, 41, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 71, 114, 111, 117, 112, 66, 121, 65, 119, 97, 105, 116, 1, 0, 0, 0, 55, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 71, 114, 111, 117, 112, 66, 121, 65, 119, 97, 105, 116, 124, 95, 71, 114, 111, 117, 112, 66, 121, 65, 119, 97, 105, 116, 1, 0, 0, 0, 41, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 71, 114, 111, 117, 112, 66, 121, 65, 119, 97, 105, 116, 1, 0, 0, 0, 55, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 71, 114, 111, 117, 112, 66, 121, 65, 119, 97, 105, 116, 124, 95, 71, 114, 111, 117, 112, 66, 121, 65, 119, 97, 105, 116, 1, 0, 0, 0, 57, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 71, 114, 111, 117, 112, 66, 121, 65, 119, 97, 105, 116, 87, 105, 116, 104, 67, 97, 110, 99, 101, 108, 108, 97, 116, 105, 111, 110, 1, 0, 0, 0, 87, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 71, 114, 111, 117, 112, 66, 121, 65, 119, 97, 105, 116, 87, 105, 116, 104, 67, 97, 110, 99, 101, 108, 108, 97, 116, 105, 111, 110, 124, 95, 71, 114, 111, 117, 112, 66, 121, 65, 119, 97, 105, 116, 87, 105, 116, 104, 67, 97, 110, 99, 101, 108, 108, 97, 116, 105, 111, 110, 1, 0, 0, 0, 57, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 71, 114, 111, 117, 112, 66, 121, 65, 119, 97, 105, 116, 87, 105, 116, 104, 67, 97, 110, 99, 101, 108, 108, 97, 116, 105, 111, 110, 1, 0, 0, 0, 87, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 71, 114, 111, 117, 112, 66, 121, 65, 119, 97, 105, 116, 87, 105, 116, 104, 67, 97, 110, 99, 101, 108, 108, 97, 116, 105, 111, 110, 124, 95, 71, 114, 111, 117, 112, 66, 121, 65, 119, 97, 105, 116, 87, 105, 116, 104, 67, 97, 110, 99, 101, 108, 108, 97, 116, 105, 111, 110, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 38, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 71, 114, 111, 117, 112, 74, 111, 105, 110, 0, 0, 0, 0, 49, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 71, 114, 111, 117, 112, 74, 111, 105, 110, 124, 95, 71, 114, 111, 117, 112, 74, 111, 105, 110, 0, 0, 0, 0, 43, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 71, 114, 111, 117, 112, 74, 111, 105, 110, 65, 119, 97, 105, 116, 0, 0, 0, 0, 59, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 71, 114, 111, 117, 112, 74, 111, 105, 110, 65, 119, 97, 105, 116, 124, 95, 71, 114, 111, 117, 112, 74, 111, 105, 110, 65, 119, 97, 105, 116, 0, 0, 0, 0, 59, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 71, 114, 111, 117, 112, 74, 111, 105, 110, 65, 119, 97, 105, 116, 87, 105, 116, 104, 67, 97, 110, 99, 101, 108, 108, 97, 116, 105, 111, 110, 0, 0, 0, 0, 91, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 71, 114, 111, 117, 112, 74, 111, 105, 110, 65, 119, 97, 105, 116, 87, 105, 116, 104, 67, 97, 110, 99, 101, 108, 108, 97, 116, 105, 111, 110, 124, 95, 71, 114, 111, 117, 112, 74, 111, 105, 110, 65, 119, 97, 105, 116, 87, 105, 116, 104, 67, 97, 110, 99, 101, 108, 108, 97, 116, 105, 111, 110, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 38, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 73, 110, 116, 101, 114, 115, 101, 99, 116, 0, 0, 0, 0, 49, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 73, 110, 116, 101, 114, 115, 101, 99, 116, 124, 95, 73, 110, 116, 101, 114, 115, 101, 99, 116, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 33, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 74, 111, 105, 110, 0, 0, 0, 0, 39, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 74, 111, 105, 110, 124, 95, 74, 111, 105, 110, 0, 0, 0, 0, 38, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 74, 111, 105, 110, 65, 119, 97, 105, 116, 0, 0, 0, 0, 49, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 74, 111, 105, 110, 65, 119, 97, 105, 116, 124, 95, 74, 111, 105, 110, 65, 119, 97, 105, 116, 0, 0, 0, 0, 54, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 74, 111, 105, 110, 65, 119, 97, 105, 116, 87, 105, 116, 104, 67, 97, 110, 99, 101, 108, 108, 97, 116, 105, 111, 110, 0, 0, 0, 0, 81, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 74, 111, 105, 110, 65, 119, 97, 105, 116, 87, 105, 116, 104, 67, 97, 110, 99, 101, 108, 108, 97, 116, 105, 111, 110, 124, 95, 74, 111, 105, 110, 65, 119, 97, 105, 116, 87, 105, 116, 104, 67, 97, 110, 99, 101, 108, 108, 97, 116, 105, 111, 110, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 33, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 76, 97, 115, 116, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 38, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 76, 111, 110, 103, 67, 111, 117, 110, 116, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 1, 0, 0, 0, 32, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 77, 97, 120, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 34, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 77, 101, 114, 103, 101, 0, 0, 0, 0, 41, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 77, 101, 114, 103, 101, 124, 95, 77, 101, 114, 103, 101, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 1, 0, 0, 0, 32, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 77, 105, 110, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 1, 0, 0, 0, 32, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 77, 105, 110, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 1, 0, 0, 0, 32, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 77, 97, 120, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 34, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 78, 101, 118, 101, 114, 0, 0, 0, 0, 41, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 78, 101, 118, 101, 114, 124, 95, 78, 101, 118, 101, 114, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 35, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 79, 102, 84, 121, 112, 101, 0, 0, 0, 0, 43, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 79, 102, 84, 121, 112, 101, 124, 95, 79, 102, 84, 121, 112, 101, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 50, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 83, 111, 114, 116, 101, 114, 0, 0, 0, 0, 62, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 83, 121, 110, 99, 83, 101, 108, 101, 99, 116, 111, 114, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 83, 111, 114, 116, 101, 114, 0, 0, 0, 0, 58, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 65, 115, 121, 110, 99, 83, 101, 108, 101, 99, 116, 111, 114, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 83, 111, 114, 116, 101, 114, 0, 0, 0, 0, 74, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 65, 115, 121, 110, 99, 83, 101, 108, 101, 99, 116, 111, 114, 87, 105, 116, 104, 67, 97, 110, 99, 101, 108, 108, 97, 116, 105, 111, 110, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 83, 111, 114, 116, 101, 114, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 79, 114, 100, 101, 114, 101, 100, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 75, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 79, 114, 100, 101, 114, 101, 100, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 124, 95, 79, 114, 100, 101, 114, 101, 100, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 116, 111, 114, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 79, 114, 100, 101, 114, 101, 100, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 56, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 79, 114, 100, 101, 114, 101, 100, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 65, 119, 97, 105, 116, 0, 0, 0, 0, 72, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 79, 114, 100, 101, 114, 101, 100, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 65, 119, 97, 105, 116, 87, 105, 116, 104, 67, 97, 110, 99, 101, 108, 108, 97, 116, 105, 111, 110, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 37, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 80, 97, 105, 114, 119, 105, 115, 101, 0, 0, 0, 0, 47, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 80, 97, 105, 114, 119, 105, 115, 101, 124, 95, 80, 97, 105, 114, 119, 105, 115, 101, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 36, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 80, 117, 98, 108, 105, 115, 104, 0, 0, 0, 0, 54, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 80, 117, 98, 108, 105, 115, 104, 124, 67, 111, 110, 110, 101, 99, 116, 68, 105, 115, 112, 111, 115, 97, 98, 108, 101, 0, 0, 0, 0, 45, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 80, 117, 98, 108, 105, 115, 104, 124, 95, 80, 117, 98, 108, 105, 115, 104, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 42, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 81, 117, 101, 117, 101, 79, 112, 101, 114, 97, 116, 111, 114, 0, 0, 0, 0, 49, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 81, 117, 101, 117, 101, 79, 112, 101, 114, 97, 116, 111, 114, 124, 95, 81, 117, 101, 117, 101, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 34, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 82, 97, 110, 103, 101, 0, 0, 0, 0, 41, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 82, 97, 110, 103, 101, 124, 95, 82, 97, 110, 103, 101, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 35, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 82, 101, 112, 101, 97, 116, 0, 0, 0, 0, 43, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 82, 101, 112, 101, 97, 116, 124, 95, 82, 101, 112, 101, 97, 116, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 35, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 82, 101, 116, 117, 114, 110, 0, 0, 0, 0, 43, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 82, 101, 116, 117, 114, 110, 124, 95, 82, 101, 116, 117, 114, 110, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 36, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 82, 101, 118, 101, 114, 115, 101, 0, 0, 0, 0, 45, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 82, 101, 118, 101, 114, 115, 101, 124, 95, 82, 101, 118, 101, 114, 115, 101, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 35, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 83, 101, 108, 101, 99, 116, 0, 0, 0, 0, 43, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 83, 101, 108, 101, 99, 116, 124, 95, 83, 101, 108, 101, 99, 116, 0, 0, 0, 0, 38, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 83, 101, 108, 101, 99, 116, 73, 110, 116, 0, 0, 0, 0, 46, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 83, 101, 108, 101, 99, 116, 73, 110, 116, 124, 95, 83, 101, 108, 101, 99, 116, 0, 0, 0, 0, 40, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 83, 101, 108, 101, 99, 116, 65, 119, 97, 105, 116, 0, 0, 0, 0, 53, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 83, 101, 108, 101, 99, 116, 65, 119, 97, 105, 116, 124, 95, 83, 101, 108, 101, 99, 116, 65, 119, 97, 105, 116, 0, 0, 0, 0, 43, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 83, 101, 108, 101, 99, 116, 73, 110, 116, 65, 119, 97, 105, 116, 0, 0, 0, 0, 56, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 83, 101, 108, 101, 99, 116, 73, 110, 116, 65, 119, 97, 105, 116, 124, 95, 83, 101, 108, 101, 99, 116, 65, 119, 97, 105, 116, 0, 0, 0, 0, 56, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 83, 101, 108, 101, 99, 116, 65, 119, 97, 105, 116, 87, 105, 116, 104, 67, 97, 110, 99, 101, 108, 108, 97, 116, 105, 111, 110, 0, 0, 0, 0, 85, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 83, 101, 108, 101, 99, 116, 65, 119, 97, 105, 116, 87, 105, 116, 104, 67, 97, 110, 99, 101, 108, 108, 97, 116, 105, 111, 110, 124, 95, 83, 101, 108, 101, 99, 116, 65, 119, 97, 105, 116, 87, 105, 116, 104, 67, 97, 110, 99, 101, 108, 108, 97, 116, 105, 111, 110, 0, 0, 0, 0, 59, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 83, 101, 108, 101, 99, 116, 73, 110, 116, 65, 119, 97, 105, 116, 87, 105, 116, 104, 67, 97, 110, 99, 101, 108, 108, 97, 116, 105, 111, 110, 0, 0, 0, 0, 88, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 83, 101, 108, 101, 99, 116, 73, 110, 116, 65, 119, 97, 105, 116, 87, 105, 116, 104, 67, 97, 110, 99, 101, 108, 108, 97, 116, 105, 111, 110, 124, 95, 83, 101, 108, 101, 99, 116, 65, 119, 97, 105, 116, 87, 105, 116, 104, 67, 97, 110, 99, 101, 108, 108, 97, 116, 105, 111, 110, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 39, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 83, 101, 108, 101, 99, 116, 77, 97, 110, 121, 0, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 83, 101, 108, 101, 99, 116, 77, 97, 110, 121, 124, 95, 83, 101, 108, 101, 99, 116, 77, 97, 110, 121, 0, 0, 0, 0, 44, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 83, 101, 108, 101, 99, 116, 77, 97, 110, 121, 65, 119, 97, 105, 116, 0, 0, 0, 0, 61, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 83, 101, 108, 101, 99, 116, 77, 97, 110, 121, 65, 119, 97, 105, 116, 124, 95, 83, 101, 108, 101, 99, 116, 77, 97, 110, 121, 65, 119, 97, 105, 116, 0, 0, 0, 0, 60, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 83, 101, 108, 101, 99, 116, 77, 97, 110, 121, 65, 119, 97, 105, 116, 87, 105, 116, 104, 67, 97, 110, 99, 101, 108, 108, 97, 116, 105, 111, 110, 0, 0, 0, 0, 93, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 83, 101, 108, 101, 99, 116, 77, 97, 110, 121, 65, 119, 97, 105, 116, 87, 105, 116, 104, 67, 97, 110, 99, 101, 108, 108, 97, 116, 105, 111, 110, 124, 95, 83, 101, 108, 101, 99, 116, 77, 97, 110, 121, 65, 119, 97, 105, 116, 87, 105, 116, 104, 67, 97, 110, 99, 101, 108, 108, 97, 116, 105, 111, 110, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 42, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 83, 101, 113, 117, 101, 110, 99, 101, 69, 113, 117, 97, 108, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 43, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 83, 105, 110, 103, 108, 101, 79, 112, 101, 114, 97, 116, 111, 114, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 33, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 83, 107, 105, 112, 0, 0, 0, 0, 39, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 83, 107, 105, 112, 124, 95, 83, 107, 105, 112, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 37, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 83, 107, 105, 112, 76, 97, 115, 116, 0, 0, 0, 0, 47, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 83, 107, 105, 112, 76, 97, 115, 116, 124, 95, 83, 107, 105, 112, 76, 97, 115, 116, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 38, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 83, 107, 105, 112, 85, 110, 116, 105, 108, 0, 0, 0, 0, 49, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 83, 107, 105, 112, 85, 110, 116, 105, 108, 124, 95, 83, 107, 105, 112, 85, 110, 116, 105, 108, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 46, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 83, 107, 105, 112, 85, 110, 116, 105, 108, 67, 97, 110, 99, 101, 108, 101, 100, 0, 0, 0, 0, 65, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 83, 107, 105, 112, 85, 110, 116, 105, 108, 67, 97, 110, 99, 101, 108, 101, 100, 124, 95, 83, 107, 105, 112, 85, 110, 116, 105, 108, 67, 97, 110, 99, 101, 108, 101, 100, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 38, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 83, 107, 105, 112, 87, 104, 105, 108, 101, 0, 0, 0, 0, 49, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 83, 107, 105, 112, 87, 104, 105, 108, 101, 124, 95, 83, 107, 105, 112, 87, 104, 105, 108, 101, 0, 0, 0, 0, 41, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 83, 107, 105, 112, 87, 104, 105, 108, 101, 73, 110, 116, 0, 0, 0, 0, 55, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 83, 107, 105, 112, 87, 104, 105, 108, 101, 73, 110, 116, 124, 95, 83, 107, 105, 112, 87, 104, 105, 108, 101, 73, 110, 116, 0, 0, 0, 0, 43, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 83, 107, 105, 112, 87, 104, 105, 108, 101, 65, 119, 97, 105, 116, 0, 0, 0, 0, 59, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 83, 107, 105, 112, 87, 104, 105, 108, 101, 65, 119, 97, 105, 116, 124, 95, 83, 107, 105, 112, 87, 104, 105, 108, 101, 65, 119, 97, 105, 116, 0, 0, 0, 0, 46, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 83, 107, 105, 112, 87, 104, 105, 108, 101, 73, 110, 116, 65, 119, 97, 105, 116, 0, 0, 0, 0, 65, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 83, 107, 105, 112, 87, 104, 105, 108, 101, 73, 110, 116, 65, 119, 97, 105, 116, 124, 95, 83, 107, 105, 112, 87, 104, 105, 108, 101, 73, 110, 116, 65, 119, 97, 105, 116, 0, 0, 0, 0, 59, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 83, 107, 105, 112, 87, 104, 105, 108, 101, 65, 119, 97, 105, 116, 87, 105, 116, 104, 67, 97, 110, 99, 101, 108, 108, 97, 116, 105, 111, 110, 0, 0, 0, 0, 91, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 83, 107, 105, 112, 87, 104, 105, 108, 101, 65, 119, 97, 105, 116, 87, 105, 116, 104, 67, 97, 110, 99, 101, 108, 108, 97, 116, 105, 111, 110, 124, 95, 83, 107, 105, 112, 87, 104, 105, 108, 101, 65, 119, 97, 105, 116, 87, 105, 116, 104, 67, 97, 110, 99, 101, 108, 108, 97, 116, 105, 111, 110, 0, 0, 0, 0, 62, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 83, 107, 105, 112, 87, 104, 105, 108, 101, 73, 110, 116, 65, 119, 97, 105, 116, 87, 105, 116, 104, 67, 97, 110, 99, 101, 108, 108, 97, 116, 105, 111, 110, 0, 0, 0, 0, 97, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 83, 107, 105, 112, 87, 104, 105, 108, 101, 73, 110, 116, 65, 119, 97, 105, 116, 87, 105, 116, 104, 67, 97, 110, 99, 101, 108, 108, 97, 116, 105, 111, 110, 124, 95, 83, 107, 105, 112, 87, 104, 105, 108, 101, 73, 110, 116, 65, 119, 97, 105, 116, 87, 105, 116, 104, 67, 97, 110, 99, 101, 108, 108, 97, 116, 105, 111, 110, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 56, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 67, 97, 110, 99, 101, 108, 108, 97, 116, 105, 111, 110, 84, 111, 107, 101, 110, 68, 105, 115, 112, 111, 115, 97, 98, 108, 101, 0, 0, 0, 0, 38, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 83, 117, 98, 115, 99, 114, 105, 98, 101, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 32, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 83, 117, 109, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 33, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 84, 97, 107, 101, 0, 0, 0, 0, 39, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 84, 97, 107, 101, 124, 95, 84, 97, 107, 101, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 37, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 84, 97, 107, 101, 76, 97, 115, 116, 0, 0, 0, 0, 47, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 84, 97, 107, 101, 76, 97, 115, 116, 124, 95, 84, 97, 107, 101, 76, 97, 115, 116, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 38, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 84, 97, 107, 101, 85, 110, 116, 105, 108, 0, 0, 0, 0, 49, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 84, 97, 107, 101, 85, 110, 116, 105, 108, 124, 95, 84, 97, 107, 101, 85, 110, 116, 105, 108, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 46, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 84, 97, 107, 101, 85, 110, 116, 105, 108, 67, 97, 110, 99, 101, 108, 101, 100, 0, 0, 0, 0, 65, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 84, 97, 107, 101, 85, 110, 116, 105, 108, 67, 97, 110, 99, 101, 108, 101, 100, 124, 95, 84, 97, 107, 101, 85, 110, 116, 105, 108, 67, 97, 110, 99, 101, 108, 101, 100, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 38, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 84, 97, 107, 101, 87, 104, 105, 108, 101, 0, 0, 0, 0, 49, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 84, 97, 107, 101, 87, 104, 105, 108, 101, 124, 95, 84, 97, 107, 101, 87, 104, 105, 108, 101, 0, 0, 0, 0, 41, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 84, 97, 107, 101, 87, 104, 105, 108, 101, 73, 110, 116, 0, 0, 0, 0, 55, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 84, 97, 107, 101, 87, 104, 105, 108, 101, 73, 110, 116, 124, 95, 84, 97, 107, 101, 87, 104, 105, 108, 101, 73, 110, 116, 0, 0, 0, 0, 43, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 84, 97, 107, 101, 87, 104, 105, 108, 101, 65, 119, 97, 105, 116, 0, 0, 0, 0, 59, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 84, 97, 107, 101, 87, 104, 105, 108, 101, 65, 119, 97, 105, 116, 124, 95, 84, 97, 107, 101, 87, 104, 105, 108, 101, 65, 119, 97, 105, 116, 0, 0, 0, 0, 46, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 84, 97, 107, 101, 87, 104, 105, 108, 101, 73, 110, 116, 65, 119, 97, 105, 116, 0, 0, 0, 0, 65, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 84, 97, 107, 101, 87, 104, 105, 108, 101, 73, 110, 116, 65, 119, 97, 105, 116, 124, 95, 84, 97, 107, 101, 87, 104, 105, 108, 101, 73, 110, 116, 65, 119, 97, 105, 116, 0, 0, 0, 0, 59, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 84, 97, 107, 101, 87, 104, 105, 108, 101, 65, 119, 97, 105, 116, 87, 105, 116, 104, 67, 97, 110, 99, 101, 108, 108, 97, 116, 105, 111, 110, 0, 0, 0, 0, 91, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 84, 97, 107, 101, 87, 104, 105, 108, 101, 65, 119, 97, 105, 116, 87, 105, 116, 104, 67, 97, 110, 99, 101, 108, 108, 97, 116, 105, 111, 110, 124, 95, 84, 97, 107, 101, 87, 104, 105, 108, 101, 65, 119, 97, 105, 116, 87, 105, 116, 104, 67, 97, 110, 99, 101, 108, 108, 97, 116, 105, 111, 110, 0, 0, 0, 0, 62, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 84, 97, 107, 101, 87, 104, 105, 108, 101, 73, 110, 116, 65, 119, 97, 105, 116, 87, 105, 116, 104, 67, 97, 110, 99, 101, 108, 108, 97, 116, 105, 111, 110, 0, 0, 0, 0, 97, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 84, 97, 107, 101, 87, 104, 105, 108, 101, 73, 110, 116, 65, 119, 97, 105, 116, 87, 105, 116, 104, 67, 97, 110, 99, 101, 108, 108, 97, 116, 105, 111, 110, 124, 95, 84, 97, 107, 101, 87, 104, 105, 108, 101, 73, 110, 116, 65, 119, 97, 105, 116, 87, 105, 116, 104, 67, 97, 110, 99, 101, 108, 108, 97, 116, 105, 111, 110, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 34, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 84, 104, 114, 111, 119, 0, 0, 0, 0, 41, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 84, 104, 114, 111, 119, 124, 95, 84, 104, 114, 111, 119, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 36, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 84, 111, 65, 114, 114, 97, 121, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 41, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 84, 111, 68, 105, 99, 116, 105, 111, 110, 97, 114, 121, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 38, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 84, 111, 72, 97, 115, 104, 83, 101, 116, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 35, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 84, 111, 76, 105, 115, 116, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 37, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 84, 111, 76, 111, 111, 107, 117, 112, 0, 0, 0, 0, 44, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 84, 111, 76, 111, 111, 107, 117, 112, 124, 76, 111, 111, 107, 117, 112, 0, 0, 0, 0, 46, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 84, 111, 76, 111, 111, 107, 117, 112, 124, 71, 114, 111, 117, 112, 105, 110, 103, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105, 84, 97, 115, 107, 65, 115, 121, 110, 99, 69, 110, 117, 109, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 41, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 84, 111, 79, 98, 115, 101, 114, 118, 97, 98, 108, 101, 0, 0, 0, 0, 69, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 46, 84, 111, 79, 98, 115, 101, 114, 118, 97, 98, 108, 101, 124, 67, 97, 110, 99, 101, 108, 108, 97, 116, 105, 111, 110, 84, 111, 107, 101, 110, 68, 105, 115, 112, 111, 115, 97, 98, 108, 101, 1, 0, 0, 0, 51, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 46, 76, 105, 110, 113, 124, 85, 110, 105
BepInEx/plugins/UniTask.TextMeshPro.dll
Decompiled 3 months agousing System; using System.CodeDom.Compiler; using System.ComponentModel; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.ExceptionServices; using System.Runtime.InteropServices; using System.Threading; using Cysharp.Threading.Tasks.CompilerServices; using TMPro; using UnityEngine; using UnityEngine.Events; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyVersion("0.0.0.0")] [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() { MonoScriptData result = default(MonoScriptData); result.FilePathsData = new byte[239] { 0, 0, 0, 1, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 69, 120, 116, 101, 114, 110, 97, 108, 92, 84, 101, 120, 116, 77, 101, 115, 104, 80, 114, 111, 92, 84, 101, 120, 116, 77, 101, 115, 104, 80, 114, 111, 65, 115, 121, 110, 99, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 117, 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, 99, 121, 115, 104, 97, 114, 112, 46, 117, 110, 105, 116, 97, 115, 107, 64, 50, 46, 53, 46, 48, 92, 82, 117, 110, 116, 105, 109, 101, 92, 69, 120, 116, 101, 114, 110, 97, 108, 92, 84, 101, 120, 116, 77, 101, 115, 104, 80, 114, 111, 92, 84, 101, 120, 116, 77, 101, 115, 104, 80, 114, 111, 65, 115, 121, 110, 99, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 46, 73, 110, 112, 117, 116, 70, 105, 101, 108, 100, 46, 99, 115 }; result.TypesData = new byte[110] { 1, 0, 0, 0, 50, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 124, 84, 101, 120, 116, 77, 101, 115, 104, 80, 114, 111, 65, 115, 121, 110, 99, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 1, 0, 0, 0, 50, 67, 121, 115, 104, 97, 114, 112, 46, 84, 104, 114, 101, 97, 100, 105, 110, 103, 46, 84, 97, 115, 107, 115, 124, 84, 101, 120, 116, 77, 101, 115, 104, 80, 114, 111, 65, 115, 121, 110, 99, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115 }; result.TotalFiles = 2; result.TotalTypes = 2; result.IsEditorOnly = false; return result; } } namespace Cysharp.Threading.Tasks; public static class TextMeshProAsyncExtensions { [StructLayout(LayoutKind.Auto)] [CompilerGenerated] private struct <BindToCore>d__2 : IAsyncStateMachine { public int <>1__state; public AsyncUniTaskVoidMethodBuilder <>t__builder; public IUniTaskAsyncEnumerable<string> source; public CancellationToken cancellationToken; public bool rebindOnError; public TMP_Text text; private bool <repeat>5__2; private IUniTaskAsyncEnumerator<string> <e>5__3; private object <>7__wrap3; private int <>7__wrap4; private Awaiter<bool> <>u__1; private Awaiter <>u__2; private void MoveNext() { //IL_011f: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_012d: Unknown result type (might be due to invalid IL or missing references) //IL_015d: Unknown result type (might be due to invalid IL or missing references) //IL_0162: Unknown result type (might be due to invalid IL or missing references) //IL_016a: Unknown result type (might be due to invalid IL or missing references) //IL_0142: Unknown result type (might be due to invalid IL or missing references) //IL_0144: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_0091: 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_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0052: 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_006b: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) int num = <>1__state; try { if (num == 0) { goto IL_003e; } if (num != 1) { <repeat>5__2 = false; goto IL_0018; } Awaiter awaiter = <>u__2; <>u__2 = default(Awaiter); num = (<>1__state = -1); goto IL_0179; IL_0179: ((Awaiter)(ref awaiter)).GetResult(); goto IL_0180; IL_0180: object obj = <>7__wrap3; if (obj != null) { ExceptionDispatchInfo.Capture((obj as Exception) ?? throw obj).Throw(); } switch (<>7__wrap4) { case 1: break; case 2: goto end_IL_0007; default: <>7__wrap3 = null; <e>5__3 = null; goto end_IL_0007; } goto IL_0018; IL_0018: <e>5__3 = source.GetAsyncEnumerator(cancellationToken); <>7__wrap3 = null; <>7__wrap4 = 0; goto IL_003e; IL_003e: try { while (true) { bool result; try { Awaiter<bool> awaiter2; if (num != 0) { awaiter2 = <e>5__3.MoveNextAsync().GetAwaiter(); if (!awaiter2.IsCompleted) { num = (<>1__state = 0); <>u__1 = awaiter2; ((AsyncUniTaskVoidMethodBuilder)(ref <>t__builder)).AwaitUnsafeOnCompleted<Awaiter<bool>, <BindToCore>d__2>(ref awaiter2, ref this); return; } } else { awaiter2 = <>u__1; <>u__1 = default(Awaiter<bool>); num = (<>1__state = -1); } result = awaiter2.GetResult(); <repeat>5__2 = false; } catch (Exception ex) { if (ex is OperationCanceledException) { goto IL_00fc; } if (rebindOnError && !<repeat>5__2) { <repeat>5__2 = true; goto IL_00f3; } throw; } if (result) { text.text = <e>5__3.Current; continue; } goto IL_00fc; IL_00f3: <>7__wrap4 = 1; break; IL_00fc: <>7__wrap4 = 2; break; } } catch (object obj2) { <>7__wrap3 = obj2; } if (<e>5__3 != null) { UniTask val = ((IUniTaskAsyncDisposable)<e>5__3).DisposeAsync(); awaiter = ((UniTask)(ref val)).GetAwaiter(); if (!((Awaiter)(ref awaiter)).IsCompleted) { num = (<>1__state = 1); <>u__2 = awaiter; ((AsyncUniTaskVoidMethodBuilder)(ref <>t__builder)).AwaitUnsafeOnCompleted<Awaiter, <BindToCore>d__2>(ref awaiter, ref this); return; } goto IL_0179; } goto IL_0180; end_IL_0007:; } catch (Exception exception) { <>1__state = -2; <e>5__3 = null; ((AsyncUniTaskVoidMethodBuilder)(ref <>t__builder)).SetException(exception); return; } <>1__state = -2; <e>5__3 = null; ((AsyncUniTaskVoidMethodBuilder)(ref <>t__builder)).SetResult(); } void IAsyncStateMachine.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext this.MoveNext(); } [DebuggerHidden] private void SetStateMachine(IAsyncStateMachine stateMachine) { ((AsyncUniTaskVoidMethodBuilder)(ref <>t__builder)).SetStateMachine(stateMachine); } void IAsyncStateMachine.SetStateMachine(IAsyncStateMachine stateMachine) { //ILSpy generated this explicit interface implementation from .override directive in SetStateMachine this.SetStateMachine(stateMachine); } } [StructLayout(LayoutKind.Auto)] [CompilerGenerated] private struct <BindToCore>d__6<T> : IAsyncStateMachine { public int <>1__state; public AsyncUniTaskVoidMethodBuilder <>t__builder; public IUniTaskAsyncEnumerable<T> source; public CancellationToken cancellationToken; public bool rebindOnError; public TMP_Text text; private bool <repeat>5__2; private IUniTaskAsyncEnumerator<T> <e>5__3; private object <>7__wrap3; private int <>7__wrap4; private Awaiter<bool> <>u__1; private Awaiter <>u__2; private void MoveNext() { //IL_012e: Unknown result type (might be due to invalid IL or missing references) //IL_0133: Unknown result type (might be due to invalid IL or missing references) //IL_0137: Unknown result type (might be due to invalid IL or missing references) //IL_013c: Unknown result type (might be due to invalid IL or missing references) //IL_016c: Unknown result type (might be due to invalid IL or missing references) //IL_0171: Unknown result type (might be due to invalid IL or missing references) //IL_0179: Unknown result type (might be due to invalid IL or missing references) //IL_0151: Unknown result type (might be due to invalid IL or missing references) //IL_0153: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_0091: 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_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0052: 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_006b: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) int num = <>1__state; try { if (num == 0) { goto IL_003e; } if (num != 1) { <repeat>5__2 = false; goto IL_0018; } Awaiter awaiter = <>u__2; <>u__2 = default(Awaiter); num = (<>1__state = -1); goto IL_0188; IL_0188: ((Awaiter)(ref awaiter)).GetResult(); goto IL_018f; IL_018f: object obj = <>7__wrap3; if (obj != null) { ExceptionDispatchInfo.Capture((obj as Exception) ?? throw obj).Throw(); } switch (<>7__wrap4) { case 1: break; case 2: goto end_IL_0007; default: <>7__wrap3 = null; <e>5__3 = null; goto end_IL_0007; } goto IL_0018; IL_0018: <e>5__3 = source.GetAsyncEnumerator(cancellationToken); <>7__wrap3 = null; <>7__wrap4 = 0; goto IL_003e; IL_003e: try { while (true) { bool result; try { Awaiter<bool> awaiter2; if (num != 0) { awaiter2 = <e>5__3.MoveNextAsync().GetAwaiter(); if (!awaiter2.IsCompleted) { num = (<>1__state = 0); <>u__1 = awaiter2; ((AsyncUniTaskVoidMethodBuilder)(ref <>t__builder)).AwaitUnsafeOnCompleted<Awaiter<bool>, <BindToCore>d__6<T>>(ref awaiter2, ref this); return; } } else { awaiter2 = <>u__1; <>u__1 = default(Awaiter<bool>); num = (<>1__state = -1); } result = awaiter2.GetResult(); <repeat>5__2 = false; } catch (Exception ex) { if (ex is OperationCanceledException) { goto IL_010b; } if (rebindOnError && !<repeat>5__2) { <repeat>5__2 = true; goto IL_0102; } throw; } if (result) { text.text = <e>5__3.Current.ToString(); continue; } goto IL_010b; IL_0102: <>7__wrap4 = 1; break; IL_010b: <>7__wrap4 = 2; break; } } catch (object obj2) { <>7__wrap3 = obj2; } if (<e>5__3 != null) { UniTask val = ((IUniTaskAsyncDisposable)<e>5__3).DisposeAsync(); awaiter = ((UniTask)(ref val)).GetAwaiter(); if (!((Awaiter)(ref awaiter)).IsCompleted) { num = (<>1__state = 1); <>u__2 = awaiter; ((AsyncUniTaskVoidMethodBuilder)(ref <>t__builder)).AwaitUnsafeOnCompleted<Awaiter, <BindToCore>d__6<T>>(ref awaiter, ref this); return; } goto IL_0188; } goto IL_018f; end_IL_0007:; } catch (Exception exception) { <>1__state = -2; <e>5__3 = null; ((AsyncUniTaskVoidMethodBuilder)(ref <>t__builder)).SetException(exception); return; } <>1__state = -2; <e>5__3 = null; ((AsyncUniTaskVoidMethodBuilder)(ref <>t__builder)).SetResult(); } void IAsyncStateMachine.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext this.MoveNext(); } [DebuggerHidden] private void SetStateMachine(IAsyncStateMachine stateMachine) { ((AsyncUniTaskVoidMethodBuilder)(ref <>t__builder)).SetStateMachine(stateMachine); } void IAsyncStateMachine.SetStateMachine(IAsyncStateMachine stateMachine) { //ILSpy generated this explicit interface implementation from .override directive in SetStateMachine this.SetStateMachine(stateMachine); } } public static void BindTo(this IUniTaskAsyncEnumerable<string> source, TMP_Text text, bool rebindOnError = true) { //IL_0009: 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) UniTaskVoid val = BindToCore(source, text, UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)text), rebindOnError); ((UniTaskVoid)(ref val)).Forget(); } public static void BindTo(this IUniTaskAsyncEnumerable<string> source, TMP_Text text, CancellationToken cancellationToken, bool rebindOnError = true) { //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) UniTaskVoid val = BindToCore(source, text, cancellationToken, rebindOnError); ((UniTaskVoid)(ref val)).Forget(); } [AsyncStateMachine(typeof(<BindToCore>d__2))] private static UniTaskVoid BindToCore(IUniTaskAsyncEnumerable<string> source, TMP_Text text, CancellationToken cancellationToken, bool rebindOnError) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) <BindToCore>d__2 <BindToCore>d__ = default(<BindToCore>d__2); <BindToCore>d__.<>t__builder = AsyncUniTaskVoidMethodBuilder.Create(); <BindToCore>d__.source = source; <BindToCore>d__.text = text; <BindToCore>d__.cancellationToken = cancellationToken; <BindToCore>d__.rebindOnError = rebindOnError; <BindToCore>d__.<>1__state = -1; ((AsyncUniTaskVoidMethodBuilder)(ref <BindToCore>d__.<>t__builder)).Start<<BindToCore>d__2>(ref <BindToCore>d__); return ((AsyncUniTaskVoidMethodBuilder)(ref <BindToCore>d__.<>t__builder)).Task; } public static void BindTo<T>(this IUniTaskAsyncEnumerable<T> source, TMP_Text text, bool rebindOnError = true) { //IL_0009: 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) UniTaskVoid val = BindToCore<T>(source, text, UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)text), rebindOnError); ((UniTaskVoid)(ref val)).Forget(); } public static void BindTo<T>(this IUniTaskAsyncEnumerable<T> source, TMP_Text text, CancellationToken cancellationToken, bool rebindOnError = true) { //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) UniTaskVoid val = BindToCore<T>(source, text, cancellationToken, rebindOnError); ((UniTaskVoid)(ref val)).Forget(); } public static void BindTo<T>(this AsyncReactiveProperty<T> source, TMP_Text text, bool rebindOnError = true) { //IL_0009: 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) UniTaskVoid val = BindToCore<T>((IUniTaskAsyncEnumerable<T>)(object)source, text, UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)text), rebindOnError); ((UniTaskVoid)(ref val)).Forget(); } [AsyncStateMachine(typeof(<BindToCore>d__6<>))] private static UniTaskVoid BindToCore<T>(IUniTaskAsyncEnumerable<T> source, TMP_Text text, CancellationToken cancellationToken, bool rebindOnError) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) <BindToCore>d__6<T> <BindToCore>d__ = default(<BindToCore>d__6<T>); <BindToCore>d__.<>t__builder = AsyncUniTaskVoidMethodBuilder.Create(); <BindToCore>d__.source = source; <BindToCore>d__.text = text; <BindToCore>d__.cancellationToken = cancellationToken; <BindToCore>d__.rebindOnError = rebindOnError; <BindToCore>d__.<>1__state = -1; ((AsyncUniTaskVoidMethodBuilder)(ref <BindToCore>d__.<>t__builder)).Start<<BindToCore>d__6<T>>(ref <BindToCore>d__); return ((AsyncUniTaskVoidMethodBuilder)(ref <BindToCore>d__.<>t__builder)).Task; } public static IAsyncValueChangedEventHandler<string> GetAsyncValueChangedEventHandler(this TMP_InputField inputField) { return (IAsyncValueChangedEventHandler<string>)(object)new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onValueChanged, UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField), false); } public static IAsyncValueChangedEventHandler<string> GetAsyncValueChangedEventHandler(this TMP_InputField inputField, CancellationToken cancellationToken) { return (IAsyncValueChangedEventHandler<string>)(object)new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onValueChanged, cancellationToken, false); } public static UniTask<string> OnValueChangedAsync(this TMP_InputField inputField) { //IL_0012: Unknown result type (might be due to invalid IL or missing references) return new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onValueChanged, UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField), true).OnInvokeAsync(); } public static UniTask<string> OnValueChangedAsync(this TMP_InputField inputField, CancellationToken cancellationToken) { //IL_000d: Unknown result type (might be due to invalid IL or missing references) return new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onValueChanged, cancellationToken, true).OnInvokeAsync(); } public static IUniTaskAsyncEnumerable<string> OnValueChangedAsAsyncEnumerable(this TMP_InputField inputField) { return (IUniTaskAsyncEnumerable<string>)(object)new UnityEventHandlerAsyncEnumerable<string>((UnityEvent<string>)(object)inputField.onValueChanged, UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField)); } public static IUniTaskAsyncEnumerable<string> OnValueChangedAsAsyncEnumerable(this TMP_InputField inputField, CancellationToken cancellationToken) { return (IUniTaskAsyncEnumerable<string>)(object)new UnityEventHandlerAsyncEnumerable<string>((UnityEvent<string>)(object)inputField.onValueChanged, cancellationToken); } public static IAsyncEndEditEventHandler<string> GetAsyncEndEditEventHandler(this TMP_InputField inputField) { return (IAsyncEndEditEventHandler<string>)(object)new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onEndEdit, UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField), false); } public static IAsyncEndEditEventHandler<string> GetAsyncEndEditEventHandler(this TMP_InputField inputField, CancellationToken cancellationToken) { return (IAsyncEndEditEventHandler<string>)(object)new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onEndEdit, cancellationToken, false); } public static UniTask<string> OnEndEditAsync(this TMP_InputField inputField) { //IL_0012: Unknown result type (might be due to invalid IL or missing references) return new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onEndEdit, UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField), true).OnInvokeAsync(); } public static UniTask<string> OnEndEditAsync(this TMP_InputField inputField, CancellationToken cancellationToken) { //IL_000d: Unknown result type (might be due to invalid IL or missing references) return new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onEndEdit, cancellationToken, true).OnInvokeAsync(); } public static IUniTaskAsyncEnumerable<string> OnEndEditAsAsyncEnumerable(this TMP_InputField inputField) { return (IUniTaskAsyncEnumerable<string>)(object)new UnityEventHandlerAsyncEnumerable<string>((UnityEvent<string>)(object)inputField.onEndEdit, UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField)); } public static IUniTaskAsyncEnumerable<string> OnEndEditAsAsyncEnumerable(this TMP_InputField inputField, CancellationToken cancellationToken) { return (IUniTaskAsyncEnumerable<string>)(object)new UnityEventHandlerAsyncEnumerable<string>((UnityEvent<string>)(object)inputField.onEndEdit, cancellationToken); } public static IAsyncEndTextSelectionEventHandler<(string, int, int)> GetAsyncEndTextSelectionEventHandler(this TMP_InputField inputField) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Expected O, but got Unknown return (IAsyncEndTextSelectionEventHandler<(string, int, int)>)(object)new AsyncUnityEventHandler<(string, int, int)>((UnityEvent<(string, int, int)>)new TextSelectionEventConverter((UnityEvent<string, int, int>)(object)inputField.onEndTextSelection), UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField), false); } public static IAsyncEndTextSelectionEventHandler<(string, int, int)> GetAsyncEndTextSelectionEventHandler(this TMP_InputField inputField, CancellationToken cancellationToken) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown return (IAsyncEndTextSelectionEventHandler<(string, int, int)>)(object)new AsyncUnityEventHandler<(string, int, int)>((UnityEvent<(string, int, int)>)new TextSelectionEventConverter((UnityEvent<string, int, int>)(object)inputField.onEndTextSelection), cancellationToken, false); } public static UniTask<(string, int, int)> OnEndTextSelectionAsync(this TMP_InputField inputField) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Expected O, but got Unknown //IL_0017: Unknown result type (might be due to invalid IL or missing references) return new AsyncUnityEventHandler<(string, int, int)>((UnityEvent<(string, int, int)>)new TextSelectionEventConverter((UnityEvent<string, int, int>)(object)inputField.onEndTextSelection), UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField), true).OnInvokeAsync(); } public static UniTask<(string, int, int)> OnEndTextSelectionAsync(this TMP_InputField inputField, CancellationToken cancellationToken) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_0012: Unknown result type (might be due to invalid IL or missing references) return new AsyncUnityEventHandler<(string, int, int)>((UnityEvent<(string, int, int)>)new TextSelectionEventConverter((UnityEvent<string, int, int>)(object)inputField.onEndTextSelection), cancellationToken, true).OnInvokeAsync(); } public static IUniTaskAsyncEnumerable<(string, int, int)> OnEndTextSelectionAsAsyncEnumerable(this TMP_InputField inputField) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Expected O, but got Unknown return (IUniTaskAsyncEnumerable<(string, int, int)>)(object)new UnityEventHandlerAsyncEnumerable<(string, int, int)>((UnityEvent<(string, int, int)>)new TextSelectionEventConverter((UnityEvent<string, int, int>)(object)inputField.onEndTextSelection), UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField)); } public static IUniTaskAsyncEnumerable<(string, int, int)> OnEndTextSelectionAsAsyncEnumerable(this TMP_InputField inputField, CancellationToken cancellationToken) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Expected O, but got Unknown return (IUniTaskAsyncEnumerable<(string, int, int)>)(object)new UnityEventHandlerAsyncEnumerable<(string, int, int)>((UnityEvent<(string, int, int)>)new TextSelectionEventConverter((UnityEvent<string, int, int>)(object)inputField.onEndTextSelection), cancellationToken); } public static IAsyncTextSelectionEventHandler<(string, int, int)> GetAsyncTextSelectionEventHandler(this TMP_InputField inputField) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Expected O, but got Unknown return (IAsyncTextSelectionEventHandler<(string, int, int)>)(object)new AsyncUnityEventHandler<(string, int, int)>((UnityEvent<(string, int, int)>)new TextSelectionEventConverter((UnityEvent<string, int, int>)(object)inputField.onTextSelection), UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField), false); } public static IAsyncTextSelectionEventHandler<(string, int, int)> GetAsyncTextSelectionEventHandler(this TMP_InputField inputField, CancellationToken cancellationToken) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown return (IAsyncTextSelectionEventHandler<(string, int, int)>)(object)new AsyncUnityEventHandler<(string, int, int)>((UnityEvent<(string, int, int)>)new TextSelectionEventConverter((UnityEvent<string, int, int>)(object)inputField.onTextSelection), cancellationToken, false); } public static UniTask<(string, int, int)> OnTextSelectionAsync(this TMP_InputField inputField) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Expected O, but got Unknown //IL_0017: Unknown result type (might be due to invalid IL or missing references) return new AsyncUnityEventHandler<(string, int, int)>((UnityEvent<(string, int, int)>)new TextSelectionEventConverter((UnityEvent<string, int, int>)(object)inputField.onTextSelection), UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField), true).OnInvokeAsync(); } public static UniTask<(string, int, int)> OnTextSelectionAsync(this TMP_InputField inputField, CancellationToken cancellationToken) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_0012: Unknown result type (might be due to invalid IL or missing references) return new AsyncUnityEventHandler<(string, int, int)>((UnityEvent<(string, int, int)>)new TextSelectionEventConverter((UnityEvent<string, int, int>)(object)inputField.onTextSelection), cancellationToken, true).OnInvokeAsync(); } public static IUniTaskAsyncEnumerable<(string, int, int)> OnTextSelectionAsAsyncEnumerable(this TMP_InputField inputField) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Expected O, but got Unknown return (IUniTaskAsyncEnumerable<(string, int, int)>)(object)new UnityEventHandlerAsyncEnumerable<(string, int, int)>((UnityEvent<(string, int, int)>)new TextSelectionEventConverter((UnityEvent<string, int, int>)(object)inputField.onTextSelection), UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField)); } public static IUniTaskAsyncEnumerable<(string, int, int)> OnTextSelectionAsAsyncEnumerable(this TMP_InputField inputField, CancellationToken cancellationToken) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Expected O, but got Unknown return (IUniTaskAsyncEnumerable<(string, int, int)>)(object)new UnityEventHandlerAsyncEnumerable<(string, int, int)>((UnityEvent<(string, int, int)>)new TextSelectionEventConverter((UnityEvent<string, int, int>)(object)inputField.onTextSelection), cancellationToken); } public static IAsyncDeselectEventHandler<string> GetAsyncDeselectEventHandler(this TMP_InputField inputField) { return (IAsyncDeselectEventHandler<string>)(object)new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onDeselect, UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField), false); } public static IAsyncDeselectEventHandler<string> GetAsyncDeselectEventHandler(this TMP_InputField inputField, CancellationToken cancellationToken) { return (IAsyncDeselectEventHandler<string>)(object)new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onDeselect, cancellationToken, false); } public static UniTask<string> OnDeselectAsync(this TMP_InputField inputField) { //IL_0012: Unknown result type (might be due to invalid IL or missing references) return new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onDeselect, UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField), true).OnInvokeAsync(); } public static UniTask<string> OnDeselectAsync(this TMP_InputField inputField, CancellationToken cancellationToken) { //IL_000d: Unknown result type (might be due to invalid IL or missing references) return new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onDeselect, cancellationToken, true).OnInvokeAsync(); } public static IUniTaskAsyncEnumerable<string> OnDeselectAsAsyncEnumerable(this TMP_InputField inputField) { return (IUniTaskAsyncEnumerable<string>)(object)new UnityEventHandlerAsyncEnumerable<string>((UnityEvent<string>)(object)inputField.onDeselect, UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField)); } public static IUniTaskAsyncEnumerable<string> OnDeselectAsAsyncEnumerable(this TMP_InputField inputField, CancellationToken cancellationToken) { return (IUniTaskAsyncEnumerable<string>)(object)new UnityEventHandlerAsyncEnumerable<string>((UnityEvent<string>)(object)inputField.onDeselect, cancellationToken); } public static IAsyncSelectEventHandler<string> GetAsyncSelectEventHandler(this TMP_InputField inputField) { return (IAsyncSelectEventHandler<string>)(object)new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onSelect, UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField), false); } public static IAsyncSelectEventHandler<string> GetAsyncSelectEventHandler(this TMP_InputField inputField, CancellationToken cancellationToken) { return (IAsyncSelectEventHandler<string>)(object)new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onSelect, cancellationToken, false); } public static UniTask<string> OnSelectAsync(this TMP_InputField inputField) { //IL_0012: Unknown result type (might be due to invalid IL or missing references) return new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onSelect, UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField), true).OnInvokeAsync(); } public static UniTask<string> OnSelectAsync(this TMP_InputField inputField, CancellationToken cancellationToken) { //IL_000d: Unknown result type (might be due to invalid IL or missing references) return new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onSelect, cancellationToken, true).OnInvokeAsync(); } public static IUniTaskAsyncEnumerable<string> OnSelectAsAsyncEnumerable(this TMP_InputField inputField) { return (IUniTaskAsyncEnumerable<string>)(object)new UnityEventHandlerAsyncEnumerable<string>((UnityEvent<string>)(object)inputField.onSelect, UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField)); } public static IUniTaskAsyncEnumerable<string> OnSelectAsAsyncEnumerable(this TMP_InputField inputField, CancellationToken cancellationToken) { return (IUniTaskAsyncEnumerable<string>)(object)new UnityEventHandlerAsyncEnumerable<string>((UnityEvent<string>)(object)inputField.onSelect, cancellationToken); } public static IAsyncSubmitEventHandler<string> GetAsyncSubmitEventHandler(this TMP_InputField inputField) { return (IAsyncSubmitEventHandler<string>)(object)new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onSubmit, UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField), false); } public static IAsyncSubmitEventHandler<string> GetAsyncSubmitEventHandler(this TMP_InputField inputField, CancellationToken cancellationToken) { return (IAsyncSubmitEventHandler<string>)(object)new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onSubmit, cancellationToken, false); } public static UniTask<string> OnSubmitAsync(this TMP_InputField inputField) { //IL_0012: Unknown result type (might be due to invalid IL or missing references) return new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onSubmit, UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField), true).OnInvokeAsync(); } public static UniTask<string> OnSubmitAsync(this TMP_InputField inputField, CancellationToken cancellationToken) { //IL_000d: Unknown result type (might be due to invalid IL or missing references) return new AsyncUnityEventHandler<string>((UnityEvent<string>)(object)inputField.onSubmit, cancellationToken, true).OnInvokeAsync(); } public static IUniTaskAsyncEnumerable<string> OnSubmitAsAsyncEnumerable(this TMP_InputField inputField) { return (IUniTaskAsyncEnumerable<string>)(object)new UnityEventHandlerAsyncEnumerable<string>((UnityEvent<string>)(object)inputField.onSubmit, UniTaskCancellationExtensions.GetCancellationTokenOnDestroy((MonoBehaviour)(object)inputField)); } public static IUniTaskAsyncEnumerable<string> OnSubmitAsAsyncEnumerable(this TMP_InputField inputField, CancellationToken cancellationToken) { return (IUniTaskAsyncEnumerable<string>)(object)new UnityEventHandlerAsyncEnumerable<string>((UnityEvent<string>)(object)inputField.onSubmit, cancellationToken); } }