Decompiled source of MysticalBackpack v1.0.0

plugins/RSMind.MysticalBackpack.dll

Decompiled a week ago
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Logging;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using PEAKLib.Core;
using Photon.Pun;
using UnityEngine;
using Zorro.Core;
using Zorro.Core.Serizalization;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: IgnoresAccessChecksTo("Assembly-CSharp")]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("RSMind.MysticalBackpack")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("RSMind.MysticalBackpack")]
[assembly: AssemblyTitle("Mystical_Backpack")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[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]
	[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]
	[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 BepInEx
{
	[AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)]
	[Conditional("CodeGeneration")]
	[Embedded]
	internal sealed class BepInAutoPluginAttribute : Attribute
	{
		public BepInAutoPluginAttribute(string? id = null, string? name = null, string? version = null)
		{
		}
	}
}
namespace BepInEx.Preloader.Core.Patching
{
	[AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)]
	[Conditional("CodeGeneration")]
	[Embedded]
	internal sealed class PatcherAutoPluginAttribute : Attribute
	{
		public PatcherAutoPluginAttribute(string? id = null, string? name = null, string? version = null)
		{
		}
	}
}
namespace Microsoft.CodeAnalysis
{
	[Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace MysticalBackpack
{
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInPlugin("RSMind.MysticalBackpack", "Mystical_Backpack", "1.0.0")]
	public class Plugin : BaseUnityPlugin
	{
		internal static PeakBundle bundle;

		public const string Id = "RSMind.MysticalBackpack";

		internal static ManualLogSource Log { get; private set; }

		public static string Name => "Mystical_Backpack";

		public static string Version => "1.0.0";

		private void Awake()
		{
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Expected O, but got Unknown
			Log = ((BaseUnityPlugin)this).Logger;
			BundleLoader.LoadBundleWithName((BaseUnityPlugin)(object)this, "mysticalbackpack.peakbundle", (Action<PeakBundle>)delegate(PeakBundle peakBundle)
			{
				peakBundle.Mod.RegisterContent();
				bundle = peakBundle;
			});
			Harmony val = new Harmony("com.rsmind.peak.MysticalBackpack");
			val.PatchAll();
			Log.LogInfo((object)("Plugin " + Name + " is loaded!"));
		}
	}
}
namespace MysticalBackpack.Patches
{
	[HarmonyPatch(typeof(AirportCheckInKiosk), "Start")]
	internal class AirportCheckInKioskStartPatch
	{
		private static void Postfix()
		{
			RunSettings.initialized = false;
			RunSettings.Init();
		}
	}
	[HarmonyPatch(typeof(BackpackData))]
	public class BackpackDataPatches
	{
		[HarmonyPatch("Init")]
		[HarmonyPrefix]
		public static void InitPrefix(BackpackData __instance)
		{
			__instance.itemSlots = (ItemSlot[])(object)new ItemSlot[6];
		}

		[HarmonyPatch("DeserializeValue")]
		[HarmonyPrefix]
		public static bool DesserializeValuePrefix(BackpackData __instance, BinaryDeserializer deserializer)
		{
			//IL_0002: 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_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Expected O, but got Unknown
			//IL_0054: Unknown result type (might be due to invalid IL or missing references)
			InventorySyncData val = default(InventorySyncData);
			((InventorySyncData)(ref val)).Deserialize(deserializer);
			Item val2 = null;
			for (byte b = 0; b < __instance.itemSlots.Length; b++)
			{
				if (__instance.itemSlots[b] == null)
				{
					__instance.itemSlots[b] = new ItemSlot(b);
				}
				__instance.itemSlots[b].SetItem(ItemDatabase.TryGetItem(val.slots[b].ItemID, ref val2) ? val2 : null, val.slots[b].Data);
				Debug.Log((object)$"Sync Back Inventory is setting slot: {b} to {__instance.itemSlots[b]}");
			}
			return false;
		}
	}
	[HarmonyPatch(typeof(BackpackSlot), "GetPrefabName")]
	internal class BackpackSlotGetPrefabNamePatch
	{
		private static void Postfix(BackpackSlot __instance, ref string __result)
		{
			if (((Object)((ItemSlot)__instance)._prefab).name.Contains("AntiPack"))
			{
				__result = "RSMind.MysticalBackpack:AntiPack";
			}
		}
	}
	[HarmonyPatch(typeof(BackpackVisuals))]
	public class BackpackVisualsPatches
	{
		[HarmonyPrefix]
		[HarmonyPatch("RefreshVisuals")]
		public static bool RefreshVisualsPrefix(BackpackVisuals __instance)
		{
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_001a: Invalid comparison between Unknown and I4
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0028: Invalid comparison between Unknown and I4
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: Invalid comparison between Unknown and I4
			//IL_00fe: 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_0103: 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_0116: 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_012b: 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_01d3: 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)
			if ((Object)(object)__instance.backpack != (Object)null && (int)__instance.backpack.backpackType != 1 && (int)__instance.backpack.backpackType != 2 && (int)__instance.backpack.backpackType != 3)
			{
				return true;
			}
			BackpackData backpackData = __instance.GetBackpackData();
			if (backpackData == null)
			{
				Debug.LogWarning((object)"BackpackData is null, cannot refresh visuals.");
				return true;
			}
			int num = backpackData.itemSlots.Length;
			if (__instance.backpackSlots.Length < num)
			{
				int num2 = Mathf.Max(__instance.backpackSlots.Length, num);
				Transform[] backpackSlots = __instance.backpackSlots;
				Transform[] array = (Transform[])(object)new Transform[num2];
				for (int i = 0; i < backpackSlots.Length; i++)
				{
					array[i] = backpackSlots[i];
				}
				for (int j = backpackSlots.Length; j < num2; j++)
				{
					array[j] = array[j % 4];
				}
				__instance.backpackSlots = array;
			}
			for (byte b = 0; b < num; b++)
			{
				try
				{
					ItemSlot val = backpackData.itemSlots[b];
					Optionable<ushort> val2 = (((Object)(object)val.prefab == (Object)null) ? Optionable<ushort>.None : Optionable<ushort>.Some(val.prefab.itemID));
					(GameObject, ushort) value;
					Optionable<ushort> val3 = (__instance.visualItems.TryGetValue(b, out value) ? Optionable<ushort>.Some(value.Item2) : Optionable<ushort>.None);
					if (val2 != val3)
					{
						if (val2.IsSome && val3.IsSome)
						{
							ManualLogSource log = Plugin.Log;
							if (log != null)
							{
								log.LogError((object)$"Item Visuals Mismatch at slot {b}!");
							}
						}
						else if (val2.IsSome && val3.IsNone)
						{
							Debug.Log((object)$"Spawning Backpack Visual for slot {b}, itemID {val2.Value}");
							GameObject val4 = null;
							try
							{
								val4 = PhotonNetwork.Instantiate("0_Items/" + val.GetPrefabName(), new Vector3(0f, -500f, 0f), Quaternion.identity, (byte)0, (object[])null);
								__instance.PutItemInBackpack(val4, b);
								val4.GetComponent<PhotonView>().RPC("SetItemInstanceDataRPC", (RpcTarget)0, new object[1] { val.data });
								__instance.visualItems.Add(b, (val4, val2.Value));
							}
							catch (Exception arg)
							{
								ManualLogSource log2 = Plugin.Log;
								if (log2 != null)
								{
									log2.LogError((object)$"Failed to spawn visual for slot {b}: {arg}");
								}
							}
						}
						else if (val2.IsNone && val3.IsSome)
						{
							Debug.Log((object)$"Removing backpack visual for slot {b}, itemID {val3.Value}");
							if (__instance.visualItems.TryGetValue(b, out (GameObject, ushort) value2) && (Object)(object)value2.Item1 != (Object)null)
							{
								try
								{
									PhotonNetwork.Destroy(value2.Item1.GetComponent<PhotonView>());
								}
								catch (Exception arg2)
								{
									ManualLogSource log3 = Plugin.Log;
									if (log3 != null)
									{
										log3.LogError((object)$"Failed to destroy visual for slot {b}: {arg2}");
									}
								}
								__instance.visualItems.Remove(b);
							}
							else
							{
								Debug.LogWarning((object)$"No valid visual object to remove for slot {b}");
							}
						}
					}
					else if (val2.IsNone)
					{
						Debug.Log((object)$"Slot {b} is empty, no visual to spawn.");
					}
				}
				catch (Exception arg3)
				{
					ManualLogSource log4 = Plugin.Log;
					if (log4 != null)
					{
						log4.LogError((object)$"Exception refreshing slot {b}: {arg3}");
					}
				}
			}
			return false;
		}
	}
	[HarmonyPatch(typeof(BackpackWheel))]
	public class BackpackWheelPatches
	{
		[HarmonyPatch("InitWheel")]
		[HarmonyPrefix]
		private static void InitWheelPrefix(BackpackWheel __instance, ref BackpackReference bp, ref int slotCount, BackpackType backpackType)
		{
			//IL_019a: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0217: 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_025a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0108: Unknown result type (might be due to invalid IL or missing references)
			//IL_010e: Expected O, but got Unknown
			int num = 6;
			int num2 = num + 1;
			int num3 = __instance.slices.Length;
			ItemSlot[] itemSlots = ((BackpackReference)(ref bp)).GetData().itemSlots;
			if (num3 < num2)
			{
				BackpackWheelSlice val = __instance.slices[1];
				BackpackWheelSlice[] slices = __instance.slices;
				List<BackpackWheelSlice> list = new List<BackpackWheelSlice>(slices.Length);
				list.AddRange(slices);
				while (list.Count < num2)
				{
					BackpackWheelSlice item = Object.Instantiate<BackpackWheelSlice>(val, ((Component)val).transform.parent);
					list.Add(item);
				}
				__instance.slices = list.ToArray();
			}
			else if (num3 > num2)
			{
				for (int i = num2; i < num3; i++)
				{
					Object.Destroy((Object)(object)((Component)__instance.slices[i]).gameObject);
				}
				List<BackpackWheelSlice> list2 = new List<BackpackWheelSlice>();
				list2.AddRange(__instance.slices.Take(num2));
				__instance.slices = list2.ToArray();
			}
			if (itemSlots.Length < num)
			{
				ItemSlot[] array = (ItemSlot[])(object)new ItemSlot[num];
				for (int j = 0; j < itemSlots.Length; j++)
				{
					array[j] = itemSlots[j];
				}
				for (int k = itemSlots.Length; k < num; k++)
				{
					array[k] = new ItemSlot((byte)k);
				}
				((BackpackReference)(ref bp)).GetData().itemSlots = array;
			}
			else if (itemSlots.Length > num)
			{
				BackpackData data = ((BackpackReference)(ref bp)).GetData();
				List<ItemSlot> list3 = new List<ItemSlot>();
				list3.AddRange(itemSlots.Take(num));
				data.itemSlots = list3.ToArray();
			}
			num3 = slotCount + 1;
			float num4 = (num3 - 4) * 36;
			Transform parent = ((Component)__instance.slices[0]).transform.parent;
			parent.position = new Vector3((float)Screen.width / 2f, (float)Screen.height / 2f, 0f);
			parent.rotation = Quaternion.Euler(0f, 0f, 0f);
			for (int l = 0; l < num3; l++)
			{
				BackpackWheelSlice val2 = __instance.slices[l];
				Transform transform = ((Component)val2.image).transform;
				float num5 = 360f / (float)num3 * (float)l + 158f;
				float num6 = (num5 + 112f) * (MathF.PI / 180f);
				((Component)val2).transform.localRotation = Quaternion.Euler(0f, 0f, num5);
				transform.localRotation = Quaternion.Euler(0f, 0f, 0f - num5);
				((Component)val2).transform.localPosition = new Vector3(Mathf.Cos(num6) * num4, Mathf.Sin(num6) * num4, 0f);
			}
		}
	}
	[HarmonyPatch(typeof(BackpackWheelSlice), "SharedInit")]
	internal class BackpackWheelSliceSharedInitPatch
	{
		private static void Postfix(BackpackWheelSlice __instance, BackpackReference bpRef, BackpackWheel wheel)
		{
			//IL_0000: 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_0018: Unknown result type (might be due to invalid IL or missing references)
			if (((Object)bpRef.view).name.Contains("AntiPack") && (int)bpRef.type == 0)
			{
				Backpack component = Plugin.bundle.LoadAsset<GameObject>("AntiPack").GetComponent<Backpack>();
				if (__instance.backpackSlot == byte.MaxValue)
				{
					((Component)__instance).gameObject.SetActive(true);
				}
				__instance.SetItemIcon((Item)(object)component, (ItemInstanceData)null);
			}
		}
	}
	[HarmonyPatch(typeof(CharacterBackpackHandler))]
	internal class CharacterBackpackHandlerPatches
	{
		[HarmonyPatch("Awake")]
		[HarmonyPostfix]
		private static void awakePatch(CharacterBackpackHandler __instance)
		{
			Transform parent = ((Component)__instance.backpackVisuals).transform.parent;
			Object.Instantiate<GameObject>(Plugin.bundle.LoadAsset<GameObject>("OnBack_AntiPack"), parent);
		}

		[HarmonyPatch(/*Could not decode attribute arguments.*/)]
		[HarmonyPostfix]
		private static void activeBackpackVisualsGetterPatch(CharacterBackpackHandler __instance, ref BackpackOnBackVisuals __result)
		{
			if (!((Object)(object)((ItemSlot)__instance.character.player.backpackSlot)._prefab == (Object)null) && ((Object)((ItemSlot)__instance.character.player.backpackSlot)._prefab).name.Contains("AntiPack"))
			{
				__result = ((Component)((Component)__instance.backpackVisuals).transform.parent.Find("OnBack_AntiPack(Clone)")).GetComponent<BackpackOnBackVisuals>();
			}
		}

		[HarmonyPatch("LateUpdate")]
		[HarmonyPostfix]
		private static void lateUpdatePatch(CharacterBackpackHandler __instance)
		{
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Invalid comparison between Unknown and I4
			bool flag = (int)__instance.character.player.backpackSlot.backpackType > 0;
			bool flag2 = __instance.characterItems.currentSelectedSlot.IsSome && __instance.characterItems.currentSelectedSlot.Value == 3;
			if (!flag || flag2 || (((MonoBehaviourPun)__instance.character).photonView.IsMine && !MainCameraMovement.IsSpectating))
			{
				((Component)((Component)__instance.backpackVisuals).transform.parent.Find("OnBack_AntiPack(Clone)")).GetComponent<BackpackOnBackVisuals>().SetViewActive(false);
			}
		}
	}
}
namespace System.Diagnostics.CodeAnalysis
{
	[AttributeUsage(AttributeTargets.Parameter, Inherited = false)]
	[ExcludeFromCodeCoverage]
	internal sealed class ConstantExpectedAttribute : Attribute
	{
		public object? Min { get; set; }

		public object? Max { get; set; }
	}
	[AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Module | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum | AttributeTargets.Constructor | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Interface | AttributeTargets.Delegate, Inherited = false)]
	[ExcludeFromCodeCoverage]
	internal sealed class ExperimentalAttribute : Attribute
	{
		public string DiagnosticId { get; }

		public string? UrlFormat { get; set; }

		public ExperimentalAttribute(string diagnosticId)
		{
			DiagnosticId = diagnosticId;
		}
	}
	[AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = true)]
	[ExcludeFromCodeCoverage]
	internal sealed class MemberNotNullAttribute : Attribute
	{
		public string[] Members { get; }

		public MemberNotNullAttribute(string member)
		{
			Members = new string[1] { member };
		}

		public MemberNotNullAttribute(params string[] members)
		{
			Members = members;
		}
	}
	[AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, Inherited = false, AllowMultiple = true)]
	[ExcludeFromCodeCoverage]
	internal sealed class MemberNotNullWhenAttribute : Attribute
	{
		public bool ReturnValue { get; }

		public string[] Members { get; }

		public MemberNotNullWhenAttribute(bool returnValue, string member)
		{
			ReturnValue = returnValue;
			Members = new string[1] { member };
		}

		public MemberNotNullWhenAttribute(bool returnValue, params string[] members)
		{
			ReturnValue = returnValue;
			Members = members;
		}
	}
	[AttributeUsage(AttributeTargets.Constructor, AllowMultiple = false, Inherited = false)]
	[ExcludeFromCodeCoverage]
	internal sealed class SetsRequiredMembersAttribute : Attribute
	{
	}
	[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)]
	[ExcludeFromCodeCoverage]
	internal sealed class StringSyntaxAttribute : Attribute
	{
		public const string CompositeFormat = "CompositeFormat";

		public const string DateOnlyFormat = "DateOnlyFormat";

		public const string DateTimeFormat = "DateTimeFormat";

		public const string EnumFormat = "EnumFormat";

		public const string GuidFormat = "GuidFormat";

		public const string Json = "Json";

		public const string NumericFormat = "NumericFormat";

		public const string Regex = "Regex";

		public const string TimeOnlyFormat = "TimeOnlyFormat";

		public const string TimeSpanFormat = "TimeSpanFormat";

		public const string Uri = "Uri";

		public const string Xml = "Xml";

		public string Syntax { get; }

		public object?[] Arguments { get; }

		public StringSyntaxAttribute(string syntax)
		{
			Syntax = syntax;
			Arguments = new object[0];
		}

		public StringSyntaxAttribute(string syntax, params object?[] arguments)
		{
			Syntax = syntax;
			Arguments = arguments;
		}
	}
	[AttributeUsage(AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)]
	[ExcludeFromCodeCoverage]
	internal sealed class UnscopedRefAttribute : Attribute
	{
	}
}
namespace System.Runtime.Versioning
{
	[AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Module | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum | AttributeTargets.Constructor | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Interface | AttributeTargets.Delegate, Inherited = false)]
	[ExcludeFromCodeCoverage]
	internal sealed class RequiresPreviewFeaturesAttribute : Attribute
	{
		public string? Message { get; }

		public string? Url { get; set; }

		public RequiresPreviewFeaturesAttribute()
		{
		}

		public RequiresPreviewFeaturesAttribute(string? message)
		{
			Message = message;
		}
	}
}
namespace System.Runtime.CompilerServices
{
	[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
	internal sealed class IgnoresAccessChecksToAttribute : Attribute
	{
		public IgnoresAccessChecksToAttribute(string assemblyName)
		{
		}
	}
	[AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)]
	[ExcludeFromCodeCoverage]
	internal sealed class CallerArgumentExpressionAttribute : Attribute
	{
		public string ParameterName { get; }

		public CallerArgumentExpressionAttribute(string parameterName)
		{
			ParameterName = parameterName;
		}
	}
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Interface, Inherited = false)]
	[ExcludeFromCodeCoverage]
	internal sealed class CollectionBuilderAttribute : Attribute
	{
		public Type BuilderType { get; }

		public string MethodName { get; }

		public CollectionBuilderAttribute(Type builderType, string methodName)
		{
			BuilderType = builderType;
			MethodName = methodName;
		}
	}
	[AttributeUsage(AttributeTargets.All, AllowMultiple = true, Inherited = false)]
	[ExcludeFromCodeCoverage]
	internal sealed class CompilerFeatureRequiredAttribute : Attribute
	{
		public const string RefStructs = "RefStructs";

		public const string RequiredMembers = "RequiredMembers";

		public string FeatureName { get; }

		public bool IsOptional { get; set; }

		public CompilerFeatureRequiredAttribute(string featureName)
		{
			FeatureName = featureName;
		}
	}
	[AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)]
	[ExcludeFromCodeCoverage]
	internal sealed class InterpolatedStringHandlerArgumentAttribute : Attribute
	{
		public string[] Arguments { get; }

		public InterpolatedStringHandlerArgumentAttribute(string argument)
		{
			Arguments = new string[1] { argument };
		}

		public InterpolatedStringHandlerArgumentAttribute(params string[] arguments)
		{
			Arguments = arguments;
		}
	}
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct, AllowMultiple = false, Inherited = false)]
	[ExcludeFromCodeCoverage]
	internal sealed class InterpolatedStringHandlerAttribute : Attribute
	{
	}
	[EditorBrowsable(EditorBrowsableState.Never)]
	[ExcludeFromCodeCoverage]
	internal static class IsExternalInit
	{
	}
	[AttributeUsage(AttributeTargets.Method, Inherited = false)]
	[ExcludeFromCodeCoverage]
	internal sealed class ModuleInitializerAttribute : Attribute
	{
	}
	[AttributeUsage(AttributeTargets.Constructor | AttributeTargets.Method | AttributeTargets.Property, AllowMultiple = false, Inherited = false)]
	[ExcludeFromCodeCoverage]
	internal sealed class OverloadResolutionPriorityAttribute : Attribute
	{
		public int Priority { get; }

		public OverloadResolutionPriorityAttribute(int priority)
		{
			Priority = priority;
		}
	}
	[AttributeUsage(AttributeTargets.Parameter, Inherited = true, AllowMultiple = false)]
	[ExcludeFromCodeCoverage]
	internal sealed class ParamCollectionAttribute : Attribute
	{
	}
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false, Inherited = false)]
	[ExcludeFromCodeCoverage]
	internal sealed class RequiredMemberAttribute : Attribute
	{
	}
	[AttributeUsage(AttributeTargets.Parameter, Inherited = false)]
	[EditorBrowsable(EditorBrowsableState.Never)]
	[ExcludeFromCodeCoverage]
	internal sealed class RequiresLocationAttribute : Attribute
	{
	}
	[AttributeUsage(AttributeTargets.Module | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Constructor | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Event | AttributeTargets.Interface, Inherited = false)]
	[ExcludeFromCodeCoverage]
	internal sealed class SkipLocalsInitAttribute : Attribute
	{
	}
}