Decompiled source of MiniMapTweaks v1.4.6

plugins\MiniMapTweaks\MiniMapTweaks.dll

Decompiled 5 days ago
using System;
using System.Collections.Generic;
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 System.Text;
using Assets.Scripts.LevelGeneration;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Core.Logging.Interpolation;
using BepInEx.Logging;
using BepInEx.Unity.IL2CPP;
using HarmonyLib;
using Il2CppInterop.Runtime;
using Il2CppInterop.Runtime.Injection;
using Il2CppInterop.Runtime.InteropTypes;
using Il2CppInterop.Runtime.InteropTypes.Arrays;
using Il2CppSystem;
using Il2CppSystem.Collections.Generic;
using Il2CppSystem.Reflection;
using Microsoft.CodeAnalysis;
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.InputSystem.Controls;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")]
[assembly: AssemblyCompany("MiniMapTweaks")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.4.6.0")]
[assembly: AssemblyInformationalVersion("1.4.6")]
[assembly: AssemblyProduct("MiniMapTweaks")]
[assembly: AssemblyTitle("MiniMapTweaks")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.4.6.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[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 MiniMapTweaks
{
	internal static class Blocks
	{
		private static readonly Dictionary<IntPtr, MineableBlock> Known = new Dictionary<IntPtr, MineableBlock>();

		private static float nextFullSearch;

		private static string lastLog = "";

		private static List<(MineableBlock, ECurrency, Vector3)> cache = new List<(MineableBlock, ECurrency, Vector3)>();

		private static float cacheUntil;

		public static void Added(MineableBlockAddedArgs a)
		{
			MineableBlock val = ((a != null) ? a.MineableBlock : null);
			if ((Object)(object)val != (Object)null)
			{
				Known[((Il2CppObjectBase)val).Pointer] = val;
			}
		}

		public static void Mined(MineableBlock b)
		{
			cacheUntil = Math.Min(cacheUntil, Time.unscaledTime + 0.2f);
			Tracker.RescanSoon();
			Objectives.RescanSoon();
		}

		public static void Clear()
		{
			Known.Clear();
			nextFullSearch = 0f;
			cacheUntil = 0f;
			cache = new List<(MineableBlock, ECurrency, Vector3)>();
		}

		private static bool Alive(MineableBlock b)
		{
			if ((Object)(object)b != (Object)null && !((Il2CppObjectBase)b).WasCollected)
			{
				return Object.op_Implicit((Object)(object)b);
			}
			return false;
		}

		private static bool Mineral(MineableBlock b, out ECurrency c)
		{
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Expected I4, but got Unknown
			//IL_006f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0075: Expected I4, but got Unknown
			//IL_0054: Unknown result type (might be due to invalid IL or missing references)
			//IL_005a: Expected I4, but got Unknown
			c = (ECurrency)(-1);
			if (!b.IsAlive)
			{
				return false;
			}
			RockBlock val = ((Il2CppObjectBase)b).TryCast<RockBlock>();
			if ((Object)(object)val != (Object)null)
			{
				if (!val.HasMaterial)
				{
					return false;
				}
				c = (ECurrency)(int)val.MaterialType;
				return (int)c != -1;
			}
			MaterialBlock val2 = ((Il2CppObjectBase)b).TryCast<MaterialBlock>();
			if ((Object)(object)val2 != (Object)null)
			{
				if (!((MineableBlock)val2).HasMaterial)
				{
					return false;
				}
				c = (ECurrency)(int)val2.MaterialType;
				return (int)c != -1;
			}
			if (!b.HasMaterial)
			{
				return false;
			}
			c = (ECurrency)(int)b.MaterialType;
			return (int)c != -1;
		}

		public static List<(MineableBlock block, ECurrency type, Vector3 pos)> All()
		{
			//IL_0132: Unknown result type (might be due to invalid IL or missing references)
			//IL_0135: 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_005d: 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_0158: 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_0262: Unknown result type (might be due to invalid IL or missing references)
			//IL_0269: Expected O, but got Unknown
			if (Time.unscaledTime >= nextFullSearch)
			{
				nextFullSearch = Time.unscaledTime + 10f;
				try
				{
					foreach (Object item in (Il2CppArrayBase<Object>)(object)Resources.FindObjectsOfTypeAll(Il2CppType.Of<MineableBlock>()))
					{
						MineableBlock val = ((item != null) ? ((Il2CppObjectBase)item).TryCast<MineableBlock>() : null);
						if ((Object)(object)val != (Object)null)
						{
							Scene scene = ((Component)val).gameObject.scene;
							if (((Scene)(ref scene)).IsValid())
							{
								Known[((Il2CppObjectBase)val).Pointer] = val;
							}
						}
					}
				}
				catch (Exception e)
				{
					Tracker.LogOnce(e);
				}
			}
			if (Time.unscaledTime < cacheUntil)
			{
				return cache;
			}
			cacheUntil = Time.unscaledTime + 1f;
			List<(MineableBlock, ECurrency, Vector3)> list = new List<(MineableBlock, ECurrency, Vector3)>();
			List<IntPtr> list2 = new List<IntPtr>();
			Dictionary<ECurrency, int> dictionary = new Dictionary<ECurrency, int>();
			int num = 0;
			foreach (KeyValuePair<IntPtr, MineableBlock> item2 in Known)
			{
				MineableBlock value = item2.Value;
				if (!Alive(value))
				{
					list2.Add(item2.Key);
					continue;
				}
				ECurrency c;
				try
				{
					if (!Mineral(value, out c))
					{
						continue;
					}
				}
				catch
				{
					continue;
				}
				if (((Component)value).gameObject.activeInHierarchy)
				{
					num++;
				}
				dictionary[c] = ((!dictionary.TryGetValue(c, out var value2)) ? 1 : (value2 + 1));
				list.Add((value, c, ((Component)value).transform.position));
			}
			foreach (IntPtr item3 in list2)
			{
				Known.Remove(item3);
			}
			string text = string.Join(", ", dictionary.Keys);
			if (text != lastLog)
			{
				lastLog = text;
				List<string> list3 = new List<string>();
				foreach (KeyValuePair<ECurrency, int> item4 in dictionary)
				{
					list3.Add($"{item4.Key} {item4.Value}");
				}
				ManualLogSource logger = Plugin.Logger;
				bool flag = default(bool);
				BepInExInfoLogInterpolatedStringHandler val2 = new BepInExInfoLogInterpolatedStringHandler(66, 4, ref flag);
				if (flag)
				{
					((BepInExLogInterpolatedStringHandler)val2).AppendLiteral("Blocks with minerals: ");
					((BepInExLogInterpolatedStringHandler)val2).AppendFormatted<int>(list.Count);
					((BepInExLogInterpolatedStringHandler)val2).AppendLiteral(" (");
					((BepInExLogInterpolatedStringHandler)val2).AppendFormatted<int>(num);
					((BepInExLogInterpolatedStringHandler)val2).AppendLiteral(" switched on, ");
					((BepInExLogInterpolatedStringHandler)val2).AppendFormatted<int>(Known.Count);
					((BepInExLogInterpolatedStringHandler)val2).AppendLiteral(" blocks tracked). By type: ");
					((BepInExLogInterpolatedStringHandler)val2).AppendFormatted<string>(string.Join(", ", list3));
					((BepInExLogInterpolatedStringHandler)val2).AppendLiteral(".");
				}
				logger.LogInfo(val2);
			}
			cache = list;
			return list;
		}
	}
	public enum IntelMode
	{
		EnhancedIntel,
		FogOfWar
	}
	internal static class Discovery
	{
		private const float Cell = 2f;

		private static readonly HashSet<long> Seen = new HashSet<long>();

		private static float nextMark;

		private static readonly HashSet<string> AlwaysKnown = new HashSet<string> { "DROP_POD", "SUPPLY_POD", "ACTIVATION_ZONE", "BOBBY", "BOBBY_TNT_ZONE", "EGGHUNT_EGG_COLLECTOR", "LuckyDice", "LOOT_CRATE", "GEAR_DROP" };

		public static bool Active => Plugin.Intel.Value == IntelMode.FogOfWar;

		public static void Reset()
		{
			Seen.Clear();
			nextMark = 0f;
		}

		private static int Fl(float v)
		{
			return (int)Math.Floor(v);
		}

		private static long Key(int x, int z)
		{
			return ((long)x << 32) ^ (uint)z;
		}

		public static bool IsSeen(Vector3 p)
		{
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			return Seen.Contains(Key(Fl(p.x / 2f), Fl(p.z / 2f)));
		}

		public static void Mark(Camera cam)
		{
			//IL_0053: 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_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)
			//IL_007f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0084: Unknown result type (might be due to invalid IL or missing references)
			//IL_0095: Unknown result type (might be due to invalid IL or missing references)
			//IL_009a: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ad: 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_00b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c9: 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_00d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d5: 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_00ea: 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_0105: Unknown result type (might be due to invalid IL or missing references)
			//IL_0107: Unknown result type (might be due to invalid IL or missing references)
			//IL_010b: 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_0115: 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_0126: 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_0142: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d1: 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)
			//IL_01da: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e8: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0204: Unknown result type (might be due to invalid IL or missing references)
			//IL_0212: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)cam == (Object)null || Time.unscaledTime < nextMark)
			{
				return;
			}
			nextMark = Time.unscaledTime + 0.2f;
			float num = float.MaxValue;
			float num2 = float.MinValue;
			float num3 = float.MaxValue;
			float num4 = float.MinValue;
			int num5 = 0;
			Vector3[] array = (Vector3[])(object)new Vector3[4]
			{
				new Vector3(0f, 0f),
				new Vector3(1f, 0f),
				new Vector3(0f, 1f),
				new Vector3(1f, 1f)
			};
			foreach (Vector3 val in array)
			{
				var (val2, val3) = ViewportRay(cam, val.x, val.y);
				if (!(Math.Abs(val3.y) < 1E-05f))
				{
					float num6 = (0f - val2.y) / val3.y;
					if (!(num6 <= 0f))
					{
						Vector3 val4 = val2 + val3 * num6;
						num = Math.Min(num, val4.x);
						num2 = Math.Max(num2, val4.x);
						num3 = Math.Min(num3, val4.z);
						num4 = Math.Max(num4, val4.z);
						num5++;
					}
				}
			}
			if (num5 < 4 || num2 - num > 400f || num4 - num3 > 400f)
			{
				return;
			}
			Vector3 val5 = default(Vector3);
			for (int j = Fl(num / 2f); j <= Fl(num2 / 2f); j++)
			{
				for (int k = Fl(num3 / 2f); k <= Fl(num4 / 2f); k++)
				{
					((Vector3)(ref val5))..ctor(((float)j + 0.5f) * 2f, 0f, ((float)k + 0.5f) * 2f);
					Vector3 val6 = cam.WorldToViewportPoint(val5);
					if (val6.z > 0f && val6.x >= -0.02f && val6.x <= 1.02f && val6.y >= -0.02f && val6.y <= 1.02f)
					{
						Seen.Add(Key(j, k));
					}
				}
			}
		}

		private static (Vector3 origin, Vector3 dir) ViewportRay(Camera cam, float x, float y)
		{
			//IL_00a1: 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_00b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bb: 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_00c9: 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_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_0034: 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_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_0055: 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_0069: Unknown result type (might be due to invalid IL or missing references)
			Transform transform = ((Component)cam).transform;
			float num = 2f * x - 1f;
			float num2 = 2f * y - 1f;
			if (cam.orthographic)
			{
				float orthographicSize = cam.orthographicSize;
				return (origin: transform.position + transform.right * (num * orthographicSize * cam.aspect) + transform.up * (num2 * orthographicSize), dir: transform.forward);
			}
			float num3 = (float)Math.Tan((double)cam.fieldOfView * 0.5 * Math.PI / 180.0);
			Vector3 item = transform.forward + transform.right * (num * num3 * cam.aspect) + transform.up * (num2 * num3);
			return (origin: transform.position, dir: item);
		}

		public static bool Hidden(Vector3 p, string what)
		{
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			if (Active && !AlwaysKnown.Contains(what))
			{
				return !IsSeen(p);
			}
			return false;
		}

		public unsafe static bool Hidden(Vector3 p, EType t)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			return Hidden(p, ((object)(*(EType*)(&t))/*cast due to .constrained prefix*/).ToString());
		}
	}
	[HarmonyPatch]
	internal static class NativeIconFog
	{
		private class Held
		{
			public UIMinimap Ui;

			public WorldObjectArgs Args;
		}

		private static readonly List<Held> HeldIcons = new List<Held>();

		private static bool releasing;

		private static Vector3 Pos(WorldObjectArgs a)
		{
			//IL_0034: 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_003a: Unknown result type (might be due to invalid IL or missing references)
			try
			{
				GameObject worldObject = a.WorldObject;
				if ((Object)(object)worldObject != (Object)null && !((Il2CppObjectBase)worldObject).WasCollected && Object.op_Implicit((Object)(object)worldObject))
				{
					return worldObject.transform.position;
				}
			}
			catch
			{
			}
			return a.WorldPosition;
		}

		private static Held Find(WorldObjectArgs a)
		{
			//IL_0023: 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_0085: 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_0090: Unknown result type (might be due to invalid IL or missing references)
			//IL_0095: Unknown result type (might be due to invalid IL or missing references)
			if (a == null)
			{
				return null;
			}
			foreach (Held heldIcon in HeldIcons)
			{
				if (heldIcon.Args.Type != a.Type)
				{
					continue;
				}
				GameObject worldObject = heldIcon.Args.WorldObject;
				GameObject worldObject2 = a.WorldObject;
				if ((Object)(object)worldObject != (Object)null && (Object)(object)worldObject2 != (Object)null && ((Il2CppObjectBase)worldObject).Pointer == ((Il2CppObjectBase)worldObject2).Pointer)
				{
					return heldIcon;
				}
				if ((Object)(object)worldObject == (Object)null || (Object)(object)worldObject2 == (Object)null)
				{
					Vector3 val = heldIcon.Args.WorldPosition - a.WorldPosition;
					if (((Vector3)(ref val)).sqrMagnitude < 0.25f)
					{
						return heldIcon;
					}
				}
			}
			return null;
		}

		[HarmonyPatch(typeof(UIMinimap), "OnWorldObjectPlaced")]
		[HarmonyPrefix]
		private static bool Placed(UIMinimap __instance, WorldObjectArgs __0)
		{
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			try
			{
				if (releasing || __0 == null || !Discovery.Hidden(Pos(__0), __0.Type))
				{
					return true;
				}
				if (Find(__0) == null)
				{
					HeldIcons.Add(new Held
					{
						Ui = __instance,
						Args = __0
					});
				}
				return false;
			}
			catch (Exception e)
			{
				Tracker.LogOnce(e);
				return true;
			}
		}

		[HarmonyPatch(typeof(UIMinimap), "OnWorldObjectMoved")]
		[HarmonyPrefix]
		private static bool Moved(WorldObjectArgs __0)
		{
			try
			{
				Held held = Find(__0);
				if (held == null)
				{
					return true;
				}
				held.Args = __0;
				return false;
			}
			catch (Exception e)
			{
				Tracker.LogOnce(e);
				return true;
			}
		}

		[HarmonyPatch(typeof(UIMinimap), "OnWorldObjectRemoved")]
		[HarmonyPrefix]
		private static bool Removed(WorldObjectArgs __0)
		{
			try
			{
				Held held = Find(__0);
				if (held == null)
				{
					return true;
				}
				HeldIcons.Remove(held);
				return false;
			}
			catch (Exception e)
			{
				Tracker.LogOnce(e);
				return true;
			}
		}

		public static void Clear()
		{
			HeldIcons.Clear();
		}

		public static void Tick()
		{
			//IL_0030: 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)
			if (HeldIcons.Count == 0)
			{
				return;
			}
			foreach (Held item in HeldIcons.ToList())
			{
				if (Discovery.Hidden(Pos(item.Args), item.Args.Type))
				{
					continue;
				}
				HeldIcons.Remove(item);
				if ((Object)(object)item.Ui == (Object)null || ((Il2CppObjectBase)item.Ui).WasCollected || !Object.op_Implicit((Object)(object)item.Ui))
				{
					continue;
				}
				releasing = true;
				try
				{
					item.Ui.OnWorldObjectPlaced(item.Args);
				}
				catch (Exception e)
				{
					Tracker.LogOnce(e);
				}
				finally
				{
					releasing = false;
				}
			}
		}
	}
	internal static class MinimapDump
	{
		public static void TryHotkey()
		{
			//IL_01c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c7: Expected O, but got Unknown
			//IL_00fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_018b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0192: Expected O, but got Unknown
			Keyboard current = Keyboard.current;
			if (current == null || !((ButtonControl)current.f10Key).wasPressedThisFrame)
			{
				return;
			}
			bool flag = default(bool);
			try
			{
				UIMinimap val = Object.FindObjectOfType<UIMinimap>();
				if ((Object)(object)val == (Object)null)
				{
					Plugin.Logger.LogWarning((object)"Minimap dump: no minimap (start a dive first).");
					return;
				}
				StringBuilder stringBuilder = new StringBuilder();
				StringBuilder stringBuilder2 = stringBuilder;
				StringBuilder stringBuilder3 = stringBuilder2;
				StringBuilder.AppendInterpolatedStringHandler handler = new StringBuilder.AppendInterpolatedStringHandler(23, 3, stringBuilder2);
				handler.AppendLiteral("Minimap dump ");
				handler.AppendFormatted(DateTime.Now);
				handler.AppendLiteral("  Screen ");
				handler.AppendFormatted(Screen.width);
				handler.AppendLiteral("x");
				handler.AppendFormatted(Screen.height);
				stringBuilder3.AppendLine(ref handler);
				stringBuilder2 = stringBuilder;
				StringBuilder stringBuilder4 = stringBuilder2;
				handler = new StringBuilder.AppendInterpolatedStringHandler(32, 3, stringBuilder2);
				handler.AppendLiteral("imgRT = ");
				handler.AppendFormatted(Path((Transform)(object)val.imgRT));
				handler.AppendLiteral("  uvRect = ");
				handler.AppendFormatted(((Object)(object)val.image != (Object)null) ? ((object)val.image.uvRect/*cast due to .constrained prefix*/).ToString() : "?");
				handler.AppendLiteral("  iconSize = ");
				handler.AppendFormatted(val.iconSize);
				stringBuilder4.AppendLine(ref handler);
				Transform t = (((Object)(object)((Component)val).transform.parent != (Object)null) ? ((Component)val).transform.parent : ((Component)val).transform);
				Walk(stringBuilder, t, 0);
				string text = System.IO.Path.Combine(Paths.BepInExRootPath, "MiniMapTweaks_dump.txt");
				File.WriteAllText(text, stringBuilder.ToString());
				ManualLogSource logger = Plugin.Logger;
				BepInExInfoLogInterpolatedStringHandler val2 = new BepInExInfoLogInterpolatedStringHandler(22, 1, ref flag);
				if (flag)
				{
					((BepInExLogInterpolatedStringHandler)val2).AppendLiteral("Minimap dump written: ");
					((BepInExLogInterpolatedStringHandler)val2).AppendFormatted<string>(text);
				}
				logger.LogInfo(val2);
			}
			catch (Exception ex)
			{
				ManualLogSource logger2 = Plugin.Logger;
				BepInExErrorLogInterpolatedStringHandler val3 = new BepInExErrorLogInterpolatedStringHandler(21, 1, ref flag);
				if (flag)
				{
					((BepInExLogInterpolatedStringHandler)val3).AppendLiteral("Minimap dump failed: ");
					((BepInExLogInterpolatedStringHandler)val3).AppendFormatted<Exception>(ex);
				}
				logger2.LogError(val3);
			}
		}

		private static void Walk(StringBuilder sb, Transform t, int depth)
		{
			//IL_006a: 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_009c: 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_00ce: 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_00ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c9: Unknown result type (might be due to invalid IL or missing references)
			RectTransform val = ((Il2CppObjectBase)t).TryCast<RectTransform>();
			sb.Append(new string(' ', depth * 2)).Append(((Component)t).gameObject.activeSelf ? "[+] " : "[-] ").Append(((Object)t).name);
			if ((Object)(object)val != (Object)null)
			{
				StringBuilder stringBuilder = sb;
				StringBuilder stringBuilder2 = stringBuilder;
				StringBuilder.AppendInterpolatedStringHandler handler = new StringBuilder.AppendInterpolatedStringHandler(33, 6, stringBuilder);
				handler.AppendLiteral("  anchors(");
				handler.AppendFormatted<Vector2>(val.anchorMin);
				handler.AppendLiteral("..");
				handler.AppendFormatted<Vector2>(val.anchorMax);
				handler.AppendLiteral(") pivot");
				handler.AppendFormatted<Vector2>(val.pivot);
				handler.AppendLiteral(" pos");
				handler.AppendFormatted<Vector2>(val.anchoredPosition);
				handler.AppendLiteral(" size");
				handler.AppendFormatted<Vector2>(val.sizeDelta);
				handler.AppendLiteral(" rect");
				Rect rect = val.rect;
				handler.AppendFormatted<Vector2>(((Rect)(ref rect)).size);
				stringBuilder2.Append(ref handler);
			}
			sb.AppendLine();
			foreach (Component component in ((Component)t).GetComponents<Component>())
			{
				if ((Object)(object)component == (Object)null)
				{
					continue;
				}
				string fullName = ((Object)component).GetIl2CppType().FullName;
				if (!fullName.EndsWith("Transform"))
				{
					Image val2 = ((Il2CppObjectBase)component).TryCast<Image>();
					sb.Append(new string(' ', depth * 2 + 4)).Append("· ").Append(fullName);
					if ((Object)(object)val2 != (Object)null)
					{
						StringBuilder stringBuilder = sb;
						StringBuilder stringBuilder3 = stringBuilder;
						StringBuilder.AppendInterpolatedStringHandler handler = new StringBuilder.AppendInterpolatedStringHandler(15, 2, stringBuilder);
						handler.AppendLiteral(" sprite=");
						Sprite sprite = val2.sprite;
						handler.AppendFormatted((sprite != null) ? ((Object)sprite).name : null);
						handler.AppendLiteral(" color=");
						handler.AppendFormatted<Color>(((Graphic)val2).color);
						stringBuilder3.Append(ref handler);
					}
					sb.AppendLine();
				}
			}
			for (int i = 0; i < t.childCount; i++)
			{
				if (depth >= 8)
				{
					break;
				}
				Walk(sb, t.GetChild(i), depth + 1);
			}
		}

		private static string Path(Transform t)
		{
			string text = "";
			while ((Object)(object)t != (Object)null)
			{
				text = "/" + ((Object)t).name + text;
				t = t.parent;
			}
			return text;
		}
	}
	public enum ObjectiveIconMode
	{
		Nearest,
		All
	}
	internal static class Objectives
	{
		internal class Target
		{
			public string Key;

			public Tracker.Item Item;
		}

		internal static ConfigEntry<bool> Enabled;

		internal static ConfigEntry<bool> HideWhenComplete;

		internal static ConfigEntry<ObjectiveIconMode> Mode;

		internal static ConfigEntry<int> MaxPerType;

		internal static readonly List<Target> Targets = new List<Target>();

		private static LevelObjectiveTracker tracker;

		private static float nextScan;

		private static string lastSummary = "";

		private static bool lastHadVeins;

		public static int Take
		{
			get
			{
				if (Mode.Value != ObjectiveIconMode.Nearest)
				{
					return Math.Max(1, MaxPerType.Value);
				}
				return 1;
			}
		}

		public static void BindConfig(ConfigFile cfg)
		{
			//IL_0055: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Expected O, but got Unknown
			Enabled = cfg.Bind<bool>("Objectives", "Enabled", true, "Ring icons for secondary objectives: Morkite (and any other 'collect' material), Apoca Blooms, Boolo Caps.");
			Mode = cfg.Bind<ObjectiveIconMode>("Objectives", "Mode", ObjectiveIconMode.All, "Applies to objectives AND minerals. Nearest = one icon per type (the closest). All = an icon for every one (up to MaxIconsPerType).");
			MaxPerType = cfg.Bind<int>("Objectives", "MaxIconsPerType", 10, new ConfigDescription("In All mode, the most icons shown per objective/mineral type (closest first).", (AcceptableValueBase)(object)new AcceptableValueRange<int>(1, 50), Array.Empty<object>()));
			HideWhenComplete = cfg.Bind<bool>("Objectives", "HideWhenComplete", true, "Only point at things for objectives you haven't finished yet.");
		}

		public static void RescanSoon()
		{
			nextScan = Math.Min(nextScan, Time.unscaledTime + 0.25f);
		}

		public unsafe static void Scan(Vector3 playerPos)
		{
			//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_0261: Unknown result type (might be due to invalid IL or missing references)
			//IL_0268: Expected O, but got Unknown
			//IL_02cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d4: Expected O, but got Unknown
			//IL_0376: Unknown result type (might be due to invalid IL or missing references)
			//IL_037b: Unknown result type (might be due to invalid IL or missing references)
			//IL_037d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0382: Unknown result type (might be due to invalid IL or missing references)
			//IL_038c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0390: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0414: Unknown result type (might be due to invalid IL or missing references)
			//IL_041b: Expected O, but got Unknown
			//IL_0512: Unknown result type (might be due to invalid IL or missing references)
			//IL_0518: Invalid comparison between Unknown and I4
			//IL_03cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_051d: 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_052b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0530: Unknown result type (might be due to invalid IL or missing references)
			//IL_054d: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a6: Unknown result type (might be due to invalid IL or missing references)
			if (Time.unscaledTime < nextScan)
			{
				return;
			}
			nextScan = Time.unscaledTime + 1f;
			Targets.Clear();
			if (!Enabled.Value)
			{
				return;
			}
			try
			{
				HashSet<ECurrency> hashSet = new HashSet<ECurrency>();
				HashSet<EType> hashSet2 = new HashSet<EType>();
				bool flag = false;
				if ((Object)(object)tracker == (Object)null || ((Il2CppObjectBase)tracker).WasCollected || !Object.op_Implicit((Object)(object)tracker))
				{
					tracker = Object.FindObjectOfType<LevelObjectiveTracker>();
				}
				LevelObjectiveTracker obj = tracker;
				List<ObjectiveProgress> val = ((obj != null) ? obj.Objectives : null);
				if (val == null || val.Count == 0)
				{
					LevelObjectiveTracker obj2 = tracker;
					val = ((obj2 != null) ? obj2.SecondaryObjectives : null);
				}
				List<string> list = new List<string>();
				int num = 0;
				while (val != null && num < val.Count)
				{
					ObjectiveProgress val2 = val[num];
					if (val2 != null && !((Object)(object)val2.Objective == (Object)null))
					{
						list.Add(((MemberInfo)((Object)val2.Objective).GetIl2CppType()).Name + (val2.IsPrimary ? "(main)" : "") + (val2.IsComplete ? "[done]" : "") + (val2.IsFailed ? "[failed]" : ""));
						if (!HideWhenComplete.Value || (!val2.IsComplete && !val2.IsFailed))
						{
							LevelObjectiveCollect val3 = ((Il2CppObjectBase)val2.Objective).TryCast<LevelObjectiveCollect>();
							if ((Object)(object)val3 != (Object)null)
							{
								hashSet.Add(val3.materialType);
								flag = true;
							}
							else
							{
								LevelObjectiveLevelPickup val4 = ((Il2CppObjectBase)val2.Objective).TryCast<LevelObjectiveLevelPickup>();
								if ((Object)(object)val4 != (Object)null)
								{
									hashSet2.Add(val4.levelPickupType);
									flag = true;
								}
							}
						}
					}
					num++;
				}
				if (!HideWhenComplete.Value)
				{
					hashSet.Add((ECurrency)1);
					hashSet2.Add((EType)1);
					hashSet2.Add((EType)2);
					flag = true;
				}
				string text = string.Join(",", hashSet) + "|" + string.Join(",", hashSet2) + "|" + string.Join(",", list);
				bool flag2 = text != lastSummary;
				bool flag3 = default(bool);
				if (flag2)
				{
					lastSummary = text;
					ManualLogSource logger = Plugin.Logger;
					BepInExInfoLogInterpolatedStringHandler val5 = new BepInExInfoLogInterpolatedStringHandler(19, 1, ref flag3);
					if (flag3)
					{
						((BepInExLogInterpolatedStringHandler)val5).AppendLiteral("Level objectives: ");
						((BepInExLogInterpolatedStringHandler)val5).AppendFormatted<string>((list.Count > 0) ? string.Join(", ", list) : (((Object)(object)tracker == (Object)null) ? "no objective tracker found" : "none"));
						((BepInExLogInterpolatedStringHandler)val5).AppendLiteral(".");
					}
					logger.LogInfo(val5);
					ManualLogSource logger2 = Plugin.Logger;
					val5 = new BepInExInfoLogInterpolatedStringHandler(49, 2, ref flag3);
					if (flag3)
					{
						((BepInExLogInterpolatedStringHandler)val5).AppendLiteral("Objectives on the ring: materials [");
						((BepInExLogInterpolatedStringHandler)val5).AppendFormatted<string>(string.Join(", ", hashSet));
						((BepInExLogInterpolatedStringHandler)val5).AppendLiteral("], pickups [");
						((BepInExLogInterpolatedStringHandler)val5).AppendFormatted<string>(string.Join(", ", hashSet2));
						((BepInExLogInterpolatedStringHandler)val5).AppendLiteral("].");
					}
					logger2.LogInfo(val5);
				}
				if (!flag)
				{
					return;
				}
				Dictionary<string, List<Tracker.Item>> found = new Dictionary<string, List<Tracker.Item>>();
				if (hashSet.Count > 0)
				{
					int num2 = 0;
					int num3 = 0;
					int num4 = 0;
					Dictionary<ECurrency, int> dictionary = new Dictionary<ECurrency, int>();
					foreach (var item4 in Blocks.All())
					{
						MineableBlock item = item4.block;
						ECurrency item2 = item4.type;
						Vector3 item3 = item4.pos;
						num2++;
						dictionary[item2] = ((!dictionary.TryGetValue(item2, out var value)) ? 1 : (value + 1));
						if (hashSet.Contains(item2))
						{
							num3++;
							Add(((object)(*(ECurrency*)(&item2))/*cast due to .constrained prefix*/).ToString(), ((Component)item).gameObject, item3);
						}
					}
					if (flag2 || num3 > 0 != lastHadVeins)
					{
						lastHadVeins = num3 > 0;
						ManualLogSource logger3 = Plugin.Logger;
						BepInExInfoLogInterpolatedStringHandler val5 = new BepInExInfoLogInterpolatedStringHandler(84, 5, ref flag3);
						if (flag3)
						{
							((BepInExLogInterpolatedStringHandler)val5).AppendLiteral("Objective veins: ");
							((BepInExLogInterpolatedStringHandler)val5).AppendFormatted<int>(num2);
							((BepInExLogInterpolatedStringHandler)val5).AppendLiteral(" mineral blocks on the map, ");
							((BepInExLogInterpolatedStringHandler)val5).AppendFormatted<int>(num3);
							((BepInExLogInterpolatedStringHandler)val5).AppendLiteral(" of [");
							((BepInExLogInterpolatedStringHandler)val5).AppendFormatted<string>(string.Join(", ", hashSet));
							((BepInExLogInterpolatedStringHandler)val5).AppendLiteral("] (");
							((BepInExLogInterpolatedStringHandler)val5).AppendFormatted<int>(num4);
							((BepInExLogInterpolatedStringHandler)val5).AppendLiteral(" already mined out). By type: ");
							((BepInExLogInterpolatedStringHandler)val5).AppendFormatted<string>(string.Join(", ", dictionary.Select((KeyValuePair<ECurrency, int> kv) => $"{kv.Key} {kv.Value}")));
							((BepInExLogInterpolatedStringHandler)val5).AppendLiteral(".");
						}
						logger3.LogInfo(val5);
					}
				}
				if (hashSet2.Count > 0)
				{
					foreach (LevelPickup item5 in Object.FindObjectsOfType<LevelPickup>())
					{
						if (!((Object)(object)item5 == (Object)null) && ((Component)item5).gameObject.activeInHierarchy && (int)item5.state == 1 && hashSet2.Contains(item5.type))
						{
							Add(((object)item5.type/*cast due to .constrained prefix*/).ToString(), ((Component)item5).gameObject, ((Component)item5).transform.position);
						}
					}
				}
				int take = Take;
				foreach (KeyValuePair<string, List<Tracker.Item>> item6 in found)
				{
					foreach (Tracker.Item item7 in item6.Value.OrderBy(delegate(Tracker.Item x)
					{
						//IL_0001: 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_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)
						Vector3 val6 = x.Pos - playerPos;
						return ((Vector3)(ref val6)).sqrMagnitude;
					}).Take(take))
					{
						Targets.Add(new Target
						{
							Key = item6.Key,
							Item = item7
						});
					}
				}
				void Add(string key, GameObject go, Vector3 pos)
				{
					//IL_0000: Unknown result type (might be due to invalid IL or missing references)
					//IL_003d: Unknown result type (might be due to invalid IL or missing references)
					//IL_0042: Unknown result type (might be due to invalid IL or missing references)
					//IL_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)
					//IL_0080: 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)
					if (!Discovery.Hidden(pos, key))
					{
						if (!found.TryGetValue(key, out var value2))
						{
							value2 = (found[key] = new List<Tracker.Item>());
						}
						foreach (Tracker.Item item8 in value2)
						{
							Vector3 val6 = item8.Pos - pos;
							if (((Vector3)(ref val6)).sqrMagnitude <= 16f)
							{
								return;
							}
						}
						value2.Add(new Tracker.Item
						{
							Go = go,
							Pos = pos
						});
					}
				}
			}
			catch (Exception e)
			{
				Tracker.LogOnce(e);
			}
		}
	}
	public enum IconMode
	{
		RingOnly,
		Permanent
	}
	[BepInPlugin("tobipolar.drgs.minimaptweaks", "MiniMap Tweaks", "1.4.6")]
	public class Plugin : BasePlugin
	{
		public const string Guid = "tobipolar.drgs.minimaptweaks";

		public const string Name = "MiniMap Tweaks";

		public const string Version = "1.4.6";

		internal static ManualLogSource Logger;

		internal static readonly Dictionary<EType, ConfigEntry<bool>> Show = new Dictionary<EType, ConfigEntry<bool>>();

		internal static ConfigEntry<bool> ShowLuckyDice;

		internal static readonly Dictionary<ECurrency, ConfigEntry<bool>> Minerals = new Dictionary<ECurrency, ConfigEntry<bool>>();

		internal static ConfigEntry<float> IconSize;

		internal const float RadiusScale = 0.82f;

		internal const float OnScreenMargin = 0.03f;

		internal static ConfigEntry<IconMode> Mode;

		internal static ConfigEntry<IntelMode> Intel;

		internal static ConfigEntry<float> MapIconSize;

		internal static ConfigEntry<float> MapEdge;

		internal const string RedSugarIconBase64 = "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";

		internal const string DiceIconBase64 = "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";

		internal static bool ShowMineral(ECurrency c)
		{
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			if (Minerals.TryGetValue(c, out var value))
			{
				return value.Value;
			}
			return false;
		}

		internal static bool AnyMineral()
		{
			foreach (ConfigEntry<bool> value in Minerals.Values)
			{
				if (value.Value)
				{
					return true;
				}
			}
			return false;
		}

		private void MigrateOldConfig(params string[] oldNames)
		{
			//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c0: Expected O, but got Unknown
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0073: Expected O, but got Unknown
			bool flag = default(bool);
			try
			{
				string configFilePath = ((BasePlugin)this).Config.ConfigFilePath;
				if (File.Exists(configFilePath) && new FileInfo(configFilePath).Length != 0)
				{
					return;
				}
				foreach (string text in oldNames)
				{
					string text2 = Path.Combine(Paths.ConfigPath, text);
					if (File.Exists(text2))
					{
						File.Copy(text2, configFilePath, overwrite: true);
						((BasePlugin)this).Config.Reload();
						ManualLogSource log = ((BasePlugin)this).Log;
						BepInExInfoLogInterpolatedStringHandler val = new BepInExInfoLogInterpolatedStringHandler(56, 1, ref flag);
						if (flag)
						{
							((BepInExLogInterpolatedStringHandler)val).AppendLiteral("Settings copied from the old ");
							((BepInExLogInterpolatedStringHandler)val).AppendFormatted<string>(text);
							((BepInExLogInterpolatedStringHandler)val).AppendLiteral(". You can delete that file.");
						}
						log.LogInfo(val);
						break;
					}
				}
			}
			catch (Exception ex)
			{
				ManualLogSource log2 = ((BasePlugin)this).Log;
				BepInExWarningLogInterpolatedStringHandler val2 = new BepInExWarningLogInterpolatedStringHandler(28, 1, ref flag);
				if (flag)
				{
					((BepInExLogInterpolatedStringHandler)val2).AppendLiteral("Couldn't copy old settings: ");
					((BepInExLogInterpolatedStringHandler)val2).AppendFormatted<string>(ex.Message);
				}
				log2.LogWarning(val2);
			}
		}

		public override void Load()
		{
			//IL_032a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0331: Expected O, but got Unknown
			//IL_038b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0392: Expected O, but got Unknown
			//IL_008b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0090: 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)
			//IL_00a2: 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_00b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_01dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_026e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0278: Expected O, but got Unknown
			//IL_02cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d5: Expected O, but got Unknown
			//IL_0308: Unknown result type (might be due to invalid IL or missing references)
			//IL_0312: Expected O, but got Unknown
			Logger = ((BasePlugin)this).Log;
			MigrateOldConfig("toby.drgs.minimaptweaks.cfg", "toby.drgs.minimapcompass.cfg");
			HashSet<EType> hashSet = new HashSet<EType>
			{
				(EType)3,
				(EType)2,
				(EType)5,
				(EType)6,
				(EType)1,
				(EType)4,
				(EType)7,
				(EType)14
			};
			foreach (EType value in Enum.GetValues(typeof(EType)))
			{
				Show[value] = ((BasePlugin)this).Config.Bind<bool>("Show", Pretty(value), hashSet.Contains(value), "Show a ring icon pointing at " + Pretty(value) + ".");
			}
			ShowLuckyDice = ((BasePlugin)this).Config.Bind<bool>("Show", "LuckyDice", true, "Show a ring icon pointing at Lucky Dice drops (needs the Lucky Dice mod).");
			(ECurrency, string)[] array = new(ECurrency, string)[9]
			{
				((ECurrency)10, "Bismor"),
				((ECurrency)11, "Croppa"),
				((ECurrency)12, "EnorPearl"),
				((ECurrency)13, "Jadiz"),
				((ECurrency)14, "Magnite"),
				((ECurrency)15, "Umanite"),
				((ECurrency)0, "Gold"),
				((ECurrency)2, "Nitra"),
				((ECurrency)3, "RedSugar")
			};
			for (int i = 0; i < array.Length; i++)
			{
				var (key, text) = array[i];
				Minerals[key] = ((BasePlugin)this).Config.Bind<bool>("Minerals", text, true, "Show a ring icon pointing at the nearest " + text + " vein.");
			}
			Objectives.BindConfig(((BasePlugin)this).Config);
			Mode = ((BasePlugin)this).Config.Bind<IconMode>("Map", "IconMode", IconMode.Permanent, "RingOnly = icons only on the ring, hidden while the thing is on screen.\nPermanent = icons always shown: inside the minimap when the thing is within its view, otherwise on the ring (even while on screen). Things the game already marks on its minimap (drop pod, supply pods, cocoons...) only get the ring icon.");
			MapIconSize = ((BasePlugin)this).Config.Bind<float>("Map", "MapIconSize", 16f, new ConfigDescription("Size of the icons inside the minimap (UI pixels).", (AcceptableValueBase)(object)new AcceptableValueRange<float>(6f, 60f), Array.Empty<object>()));
			Intel = ((BasePlugin)this).Config.Bind<IntelMode>("Map", "Intel", IntelMode.FogOfWar, "EnhancedIntel = everything is known and shown from the start.\nFogOfWar = minerals, cocoons, objectives, loot crates etc. only appear (on the ring, in the map, and the game's own markers) once you've had them on screen. The drop pod, supply pods, mission markers, Lucky Dice, loot crates and gear drops are always shown.");
			MapEdge = ((BasePlugin)this).Config.Bind<float>("Map", "MapEdge", 0.92f, new ConfigDescription("How close to the ring an in-map icon may sit before it moves onto the ring instead (fraction of the ring radius).", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.5f, 1.2f), Array.Empty<object>()));
			IconSize = ((BasePlugin)this).Config.Bind<float>("Ring", "IconSize", 30f, new ConfigDescription("Ring icon size (UI pixels).", (AcceptableValueBase)(object)new AcceptableValueRange<float>(10f, 80f), Array.Empty<object>()));
			bool flag = default(bool);
			try
			{
				ClassInjector.RegisterTypeInIl2Cpp<CompassRunner>();
			}
			catch (Exception ex)
			{
				ManualLogSource logger = Logger;
				BepInExErrorLogInterpolatedStringHandler val2 = new BepInExErrorLogInterpolatedStringHandler(17, 1, ref flag);
				if (flag)
				{
					((BepInExLogInterpolatedStringHandler)val2).AppendLiteral("Register failed: ");
					((BepInExLogInterpolatedStringHandler)val2).AppendFormatted<Exception>(ex);
				}
				logger.LogError(val2);
			}
			Harmony.CreateAndPatchAll(typeof(Patches), "tobipolar.drgs.minimaptweaks").CreateClassProcessor(typeof(NativeIconFog)).Patch();
			CompassRunner.Create();
			ManualLogSource logger2 = Logger;
			BepInExInfoLogInterpolatedStringHandler val3 = new BepInExInfoLogInterpolatedStringHandler(9, 2, ref flag);
			if (flag)
			{
				((BepInExLogInterpolatedStringHandler)val3).AppendFormatted<string>("MiniMap Tweaks");
				((BepInExLogInterpolatedStringHandler)val3).AppendLiteral(" ");
				((BepInExLogInterpolatedStringHandler)val3).AppendFormatted<string>("1.4.6");
				((BepInExLogInterpolatedStringHandler)val3).AppendLiteral(" loaded.");
			}
			logger2.LogInfo(val3);
		}

		internal unsafe static string Pretty(EType t)
		{
			string[] array = ((object)(*(EType*)(&t))/*cast due to .constrained prefix*/).ToString().ToLowerInvariant().Split('_');
			for (int i = 0; i < array.Length; i++)
			{
				if (array[i].Length > 0)
				{
					array[i] = char.ToUpperInvariant(array[i][0]) + array[i].Substring(1);
				}
			}
			return string.Concat(array);
		}
	}
	internal static class Patches
	{
		[HarmonyPatch(typeof(CoreGameEvents), "TriggerWorldObjectPlaced")]
		[HarmonyPostfix]
		private static void Placed(WorldObjectArgs __0)
		{
			try
			{
				Tracker.Placed(__0);
			}
			catch (Exception e)
			{
				Tracker.LogOnce(e);
			}
		}

		[HarmonyPatch(typeof(CoreGameEvents), "TriggerWorldObjectMoved")]
		[HarmonyPostfix]
		private static void Moved(WorldObjectArgs __0)
		{
			try
			{
				Tracker.Moved(__0);
			}
			catch (Exception e)
			{
				Tracker.LogOnce(e);
			}
		}

		[HarmonyPatch(typeof(CoreGameEvents), "TriggerWorldObjectRemoved")]
		[HarmonyPostfix]
		private static void Removed(WorldObjectArgs __0)
		{
			try
			{
				Tracker.Removed(__0);
			}
			catch (Exception e)
			{
				Tracker.LogOnce(e);
			}
		}

		[HarmonyPatch(typeof(CoreGameEvents), "TriggerMineableBlockAdded")]
		[HarmonyPostfix]
		private static void BlockAdded(MineableBlockAddedArgs __0)
		{
			try
			{
				Blocks.Added(__0);
			}
			catch (Exception e)
			{
				Tracker.LogOnce(e);
			}
		}

		[HarmonyPatch(typeof(CoreGameEvents), "TriggerWorldMinedBlock")]
		[HarmonyPostfix]
		private static void WorldMined(WorldMinedBlockArgs __0)
		{
			try
			{
				Blocks.Mined((__0 != null) ? __0.MineableBlock : null);
			}
			catch (Exception e)
			{
				Tracker.LogOnce(e);
			}
		}

		[HarmonyPatch(typeof(CoreGameEvents), "TriggerPlayerMinedBlock")]
		[HarmonyPostfix]
		private static void PlayerMined(PlayerMinedBlockArgs __0)
		{
			try
			{
				Blocks.Mined((__0 != null) ? __0.MineableBlock : null);
			}
			catch (Exception e)
			{
				Tracker.LogOnce(e);
			}
		}

		[HarmonyPatch(typeof(CoreGameEvents), "TriggerLevelCleanUp")]
		[HarmonyPostfix]
		private static void LevelCleanUp()
		{
			Blocks.Clear();
			Discovery.Reset();
			NativeIconFog.Clear();
		}

		[HarmonyPatch(typeof(CoreGameEvents), "TriggerStageBegin")]
		[HarmonyPostfix]
		private static void StageBegin()
		{
			Tracker.Clear();
		}
	}
	public class CompassRunner : MonoBehaviour
	{
		public CompassRunner(IntPtr ptr)
			: base(ptr)
		{
		}

		internal static void Create()
		{
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Expected O, but got Unknown
			//IL_0010: 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_0031: Expected O, but got Unknown
			try
			{
				GameObject val = new GameObject("MiniMapTweaks.Runner");
				Object.DontDestroyOnLoad((Object)val);
				((Object)val).hideFlags = (HideFlags)61;
				val.AddComponent<CompassRunner>();
			}
			catch (Exception ex)
			{
				ManualLogSource logger = Plugin.Logger;
				bool flag = default(bool);
				BepInExErrorLogInterpolatedStringHandler val2 = new BepInExErrorLogInterpolatedStringHandler(21, 1, ref flag);
				if (flag)
				{
					((BepInExLogInterpolatedStringHandler)val2).AppendLiteral("Runner setup failed: ");
					((BepInExLogInterpolatedStringHandler)val2).AppendFormatted<Exception>(ex);
				}
				logger.LogError(val2);
			}
		}

		private void LateUpdate()
		{
			try
			{
				Ring.Tick();
			}
			catch (Exception e)
			{
				Tracker.LogOnce(e);
			}
			try
			{
				MinimapDump.TryHotkey();
			}
			catch
			{
			}
		}
	}
	internal static class Ring
	{
		private static UIMinimap minimap;

		private static Player player;

		private static readonly List<Image> Pool = new List<Image>();

		private static Sprite diceSprite;

		private static bool diceSpriteTried;

		private static bool loggedSetup;

		private static RectTransform ring;

		private static bool loggedFirstIcon;

		private static CameraController camCtl;

		private static bool loggedCam;

		private static readonly Dictionary<ECurrency, Sprite> MineralSprites = new Dictionary<ECurrency, Sprite>();

		private static bool mineralSearchDone;

		private static readonly Dictionary<string, Sprite> KeywordSprites = new Dictionary<string, Sprite>();

		private static bool FindMinimap()
		{
			//IL_0195: Unknown result type (might be due to invalid IL or missing references)
			//IL_019b: Expected O, but got Unknown
			//IL_01cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d4: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)minimap != (Object)null && !((Il2CppObjectBase)minimap).WasCollected && Object.op_Implicit((Object)(object)minimap) && (Object)(object)ring != (Object)null && !((Il2CppObjectBase)ring).WasCollected && Object.op_Implicit((Object)(object)ring))
			{
				return true;
			}
			minimap = Object.FindObjectOfType<UIMinimap>();
			if ((Object)(object)minimap == (Object)null || (Object)(object)minimap.imgRT == (Object)null)
			{
				ring = null;
				return false;
			}
			Transform obj = ((Component)minimap).transform.Find("Map");
			object obj2;
			if (obj == null)
			{
				obj2 = null;
			}
			else
			{
				Transform obj3 = obj.Find("Frame");
				obj2 = ((obj3 != null) ? ((Component)obj3).GetComponent<RectTransform>() : null);
			}
			ring = (RectTransform)obj2;
			if ((Object)(object)ring == (Object)null)
			{
				Transform val = ((Component)minimap.imgRT).transform;
				while ((Object)(object)val != (Object)null && (Object)(object)val != (Object)(object)((Component)minimap).transform && !((Object)(object)((Component)val).GetComponent<Mask>() != (Object)null))
				{
					val = val.parent;
				}
				ring = ((Component)(((Object)(object)val != (Object)null) ? val : ((Component)minimap).transform)).GetComponent<RectTransform>();
			}
			foreach (Image item in Pool)
			{
				if ((Object)(object)item != (Object)null && !((Il2CppObjectBase)item).WasCollected && Object.op_Implicit((Object)(object)item))
				{
					Object.Destroy((Object)(object)((Component)item).gameObject);
				}
			}
			Pool.Clear();
			if (!loggedSetup)
			{
				loggedSetup = true;
				ManualLogSource logger = Plugin.Logger;
				bool flag = default(bool);
				BepInExInfoLogInterpolatedStringHandler val2 = new BepInExInfoLogInterpolatedStringHandler(29, 2, ref flag);
				if (flag)
				{
					((BepInExLogInterpolatedStringHandler)val2).AppendLiteral("Minimap found: ring '");
					((BepInExLogInterpolatedStringHandler)val2).AppendFormatted<string>(((Object)ring).name);
					((BepInExLogInterpolatedStringHandler)val2).AppendLiteral("' size ");
					Rect rect = ring.rect;
					((BepInExLogInterpolatedStringHandler)val2).AppendFormatted<Vector2>(((Rect)(ref rect)).size);
					((BepInExLogInterpolatedStringHandler)val2).AppendLiteral(".");
				}
				logger.LogInfo(val2);
			}
			return true;
		}

		public static void Tick()
		{
			//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_00af: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bd: 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_00e7: 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_0110: Unknown result type (might be due to invalid IL or missing references)
			//IL_0115: Unknown result type (might be due to invalid IL or missing references)
			//IL_011a: Unknown result type (might be due to invalid IL or missing references)
			//IL_015b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0161: Invalid comparison between Unknown and I4
			//IL_0165: Unknown result type (might be due to invalid IL or missing references)
			//IL_016b: Invalid comparison between Unknown and I4
			//IL_016f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0175: Invalid comparison between Unknown and I4
			//IL_018b: 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_0273: Unknown result type (might be due to invalid IL or missing references)
			//IL_0225: Unknown result type (might be due to invalid IL or missing references)
			//IL_0291: Unknown result type (might be due to invalid IL or missing references)
			//IL_035e: Unknown result type (might be due to invalid IL or missing references)
			//IL_02eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0311: Unknown result type (might be due to invalid IL or missing references)
			Tracker.ScanDice();
			Tracker.ScanSupplyPods();
			Tracker.ScanCocoons();
			if (!FindMinimap() || !((Component)minimap).gameObject.activeInHierarchy)
			{
				HideFrom(0);
				return;
			}
			Tracker.Prune();
			if ((Object)(object)player == (Object)null || ((Il2CppObjectBase)player).WasCollected || !Object.op_Implicit((Object)(object)player))
			{
				player = Object.FindObjectOfType<Player>();
			}
			Camera val = GameCamera();
			Minimap miniMap = minimap.miniMap;
			if ((Object)(object)player == (Object)null || (Object)(object)val == (Object)null || miniMap == null)
			{
				HideFrom(0);
				return;
			}
			if (Discovery.Active)
			{
				Discovery.Mark(val);
			}
			NativeIconFog.Tick();
			Rect rect = ring.rect;
			float width = ((Rect)(ref rect)).width;
			rect = ring.rect;
			float radius = Mathf.Min(width, ((Rect)(ref rect)).height) * 0.5f * 0.82f;
			Tracker.ScanVeins(((Component)player).transform.position);
			Objectives.Scan(((Component)player).transform.position);
			Coord mapCoord = miniMap.GetMapCoord(((Component)player).transform.position);
			int x = ((Coord)(ref mapCoord)).X;
			int y = ((Coord)(ref mapCoord)).Y;
			int used = 0;
			bool flag = Plugin.Mode.Value == IconMode.Permanent;
			foreach (Tracker.Item item in Tracker.Items)
			{
				if ((int)item.Type != 2 && (((int)item.Type != 5 && (int)item.Type != 6) || Tracker.Cocoons.Count <= 0) && Plugin.Show.TryGetValue(item.Type, out var value) && value.Value)
				{
					Place(item, ref used, x, y, miniMap, val, radius, SpriteFor(item.Type), ((object)Unsafe.As<EType, EType>(ref item.Type)/*cast due to .constrained prefix*/).ToString(), flag, native: true);
				}
			}
			if (Plugin.Show[(EType)2].Value)
			{
				foreach (Tracker.Item pod in Tracker.Pods)
				{
					Place(pod, ref used, x, y, miniMap, val, radius, SpriteFor(pod.Type), "SUPPLY_POD", flag, native: true);
				}
			}
			foreach (Tracker.Item cocoon in Tracker.Cocoons)
			{
				if (Plugin.Show[cocoon.Type].Value)
				{
					Place(cocoon, ref used, x, y, miniMap, val, radius, SpriteFor(cocoon.Type), ((object)Unsafe.As<EType, EType>(ref cocoon.Type)/*cast due to .constrained prefix*/).ToString(), flag, native: true);
				}
			}
			if (flag)
			{
				foreach (Tracker.Item allVein in Tracker.AllVeins)
				{
					if (!Discovery.Hidden(allVein.Position, ((object)Unsafe.As<ECurrency, ECurrency>(ref allVein.Currency)/*cast due to .constrained prefix*/).ToString()))
					{
						PlaceOnMap(allVein, ref used, miniMap, radius, MineralSprite(allVein.Currency));
					}
				}
			}
			foreach (Tracker.Item vein in Tracker.Veins)
			{
				Place(vein, ref used, x, y, miniMap, val, radius, MineralSprite(vein.Currency), ((object)Unsafe.As<ECurrency, ECurrency>(ref vein.Currency)/*cast due to .constrained prefix*/).ToString(), flag);
			}
			foreach (Objectives.Target target in Objectives.Targets)
			{
				Place(target.Item, ref used, x, y, miniMap, val, radius, KeywordSprite(target.Key), target.Key, flag);
			}
			foreach (Tracker.Item die in Tracker.Dice)
			{
				Place(die, ref used, x, y, miniMap, val, radius, DiceSprite(), "LuckyDice", flag);
			}
			HideFrom(used);
		}

		private static bool MapPoint(Minimap map, Vector3 wp, out Vector2 p)
		{
			//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_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: 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_0039: 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_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_00e6: 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_0132: 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_0140: 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_0147: Unknown result type (might be due to invalid IL or missing references)
			//IL_014a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0156: Unknown result type (might be due to invalid IL or missing references)
			//IL_015b: 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_016a: 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_017f: 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)
			//IL_018f: Unknown result type (might be due to invalid IL or missing references)
			p = Vector2.zero;
			Coord mapCoord = map.GetMapCoord(wp);
			Rect val = (Rect)(((Object)(object)minimap.image != (Object)null) ? minimap.image.uvRect : new Rect(0f, 0f, 1f, 1f));
			if (Mathf.Abs(((Rect)(ref val)).width) < 1E-05f || Mathf.Abs(((Rect)(ref val)).height) < 1E-05f)
			{
				return false;
			}
			Rect rect = minimap.imgRT.rect;
			float num = ((float)((Coord)(ref mapCoord)).X + 0.5f) / (float)Mathf.Max(1, map.WIDTH);
			float num2 = ((float)((Coord)(ref mapCoord)).Y + 0.5f) / (float)Mathf.Max(1, map.HEIGHT);
			Vector3 val2 = default(Vector3);
			((Vector3)(ref val2))..ctor(((num - ((Rect)(ref val)).x) / ((Rect)(ref val)).width - 0.5f) * ((Rect)(ref rect)).width + ((Rect)(ref rect)).center.x, ((num2 - ((Rect)(ref val)).y) / ((Rect)(ref val)).height - 0.5f) * ((Rect)(ref rect)).height + ((Rect)(ref rect)).center.y, 0f);
			Vector3 val3 = ((Transform)minimap.imgRT).TransformPoint(val2);
			Vector3 val4 = ((Transform)ring).InverseTransformPoint(val3);
			float x = val4.x;
			Rect rect2 = ring.rect;
			float num3 = x - ((Rect)(ref rect2)).center.x;
			float y = val4.y;
			rect2 = ring.rect;
			p = new Vector2(num3, y - ((Rect)(ref rect2)).center.y);
			return true;
		}

		private static bool PlaceOnMap(Tracker.Item it, ref int used, Minimap map, float radius, Sprite sprite)
		{
			//IL_0002: 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_0063: Unknown result type (might be due to invalid IL or missing references)
			//IL_008f: 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)
			if (!MapPoint(map, it.Position, out var p))
			{
				return false;
			}
			float num = radius * Plugin.MapEdge.Value;
			if (((Vector2)(ref p)).sqrMagnitude > num * num)
			{
				return false;
			}
			Image val = Get(used++);
			val.sprite = sprite;
			((Graphic)val).color = (Color)(((Object)(object)sprite != (Object)null) ? Color.white : new Color(1f, 0.69f, 0f, 1f));
			RectTransform rectTransform = ((Graphic)val).rectTransform;
			rectTransform.sizeDelta = new Vector2(Plugin.MapIconSize.Value, Plugin.MapIconSize.Value);
			rectTransform.anchoredPosition = p;
			if (!((Component)val).gameObject.activeSelf)
			{
				((Component)val).gameObject.SetActive(true);
			}
			return true;
		}

		private static bool InMapView(Minimap map, Vector3 wp, float radius)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			if (!MapPoint(map, wp, out var p))
			{
				return false;
			}
			float num = radius * Plugin.MapEdge.Value;
			return ((Vector2)(ref p)).sqrMagnitude <= num * num;
		}

		private static void Place(Tracker.Item it, ref int used, int pcx, int pcy, Minimap map, Camera cam, float radius, Sprite sprite, string what, bool permanent = false, bool native = false)
		{
			//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_0007: 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_0018: 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_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_00b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a8: 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_00ca: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cf: Unknown result type (might be due to invalid IL or missing references)
			//IL_0136: Unknown result type (might be due to invalid IL or missing references)
			//IL_0138: Unknown result type (might be due to invalid IL or missing references)
			//IL_013d: 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_0146: Unknown result type (might be due to invalid IL or missing references)
			//IL_014d: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_01db: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_01eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_0227: Unknown result type (might be due to invalid IL or missing references)
			//IL_022e: Expected O, but got Unknown
			//IL_0257: Unknown result type (might be due to invalid IL or missing references)
			Vector3 position = it.Position;
			if (Discovery.Hidden(position, what))
			{
				return;
			}
			if (permanent)
			{
				if (InMapView(map, position, radius))
				{
					if (!it.IsVein && !native)
					{
						PlaceOnMap(it, ref used, map, radius, sprite);
					}
					return;
				}
			}
			else if (OnScreen(cam, position))
			{
				return;
			}
			Coord mapCoord = map.GetMapCoord(position);
			float num = ((Coord)(ref mapCoord)).X - pcx;
			float num2 = ((Coord)(ref mapCoord)).Y - pcy;
			if (Mathf.Abs(num) < 0.01f && Mathf.Abs(num2) < 0.01f)
			{
				return;
			}
			Rect val = (Rect)(((Object)(object)minimap.image != (Object)null) ? minimap.image.uvRect : new Rect(0f, 0f, 1f, 1f));
			Rect rect = minimap.imgRT.rect;
			Vector3 val2 = default(Vector3);
			((Vector3)(ref val2))..ctor(num / (float)Mathf.Max(1, map.WIDTH) * ((Rect)(ref rect)).width * Mathf.Sign(((Rect)(ref val)).width), num2 / (float)Mathf.Max(1, map.HEIGHT) * ((Rect)(ref rect)).height * Mathf.Sign(((Rect)(ref val)).height), 0f);
			Vector3 val3 = ((Transform)ring).InverseTransformVector(((Transform)minimap.imgRT).TransformVector(val2));
			Vector2 val4 = default(Vector2);
			((Vector2)(ref val4))..ctor(val3.x, val3.y);
			if (((Vector2)(ref val4)).sqrMagnitude < 1E-08f)
			{
				return;
			}
			((Vector2)(ref val4)).Normalize();
			Image val5 = Get(used++);
			val5.sprite = sprite;
			((Graphic)val5).color = (Color)(((Object)(object)sprite != (Object)null) ? Color.white : new Color(1f, 0.69f, 0f, 1f));
			RectTransform rectTransform = ((Graphic)val5).rectTransform;
			rectTransform.sizeDelta = new Vector2(Plugin.IconSize.Value, Plugin.IconSize.Value);
			rectTransform.anchoredPosition = val4 * radius;
			if (!((Component)val5).gameObject.activeSelf)
			{
				((Component)val5).gameObject.SetActive(true);
			}
			if (!loggedFirstIcon)
			{
				loggedFirstIcon = true;
				ManualLogSource logger = Plugin.Logger;
				bool flag = default(bool);
				BepInExInfoLogInterpolatedStringHandler val6 = new BepInExInfoLogInterpolatedStringHandler(37, 3, ref flag);
				if (flag)
				{
					((BepInExLogInterpolatedStringHandler)val6).AppendLiteral("First ring icon: ");
					((BepInExLogInterpolatedStringHandler)val6).AppendFormatted<string>(what);
					((BepInExLogInterpolatedStringHandler)val6).AppendLiteral(" at ");
					((BepInExLogInterpolatedStringHandler)val6).AppendFormatted<Vector2>(rectTransform.anchoredPosition);
					((BepInExLogInterpolatedStringHandler)val6).AppendLiteral(" (ring radius ");
					((BepInExLogInterpolatedStringHandler)val6).AppendFormatted<float>(radius, "0");
					((BepInExLogInterpolatedStringHandler)val6).AppendLiteral(").");
				}
				logger.LogInfo(val6);
			}
		}

		private static Camera GameCamera()
		{
			//IL_006a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0070: Expected O, but got Unknown
			try
			{
				if ((Object)(object)camCtl == (Object)null || ((Il2CppObjectBase)camCtl).WasCollected || !Object.op_Implicit((Object)(object)camCtl))
				{
					camCtl = Object.FindObjectOfType<CameraController>();
				}
				Camera val = (((Object)(object)camCtl != (Object)null) ? camCtl.Camera : null);
				if ((Object)(object)val != (Object)null)
				{
					if (!loggedCam)
					{
						loggedCam = true;
						ManualLogSource logger = Plugin.Logger;
						bool flag = default(bool);
						BepInExInfoLogInterpolatedStringHandler val2 = new BepInExInfoLogInterpolatedStringHandler(45, 2, ref flag);
						if (flag)
						{
							((BepInExLogInterpolatedStringHandler)val2).AppendLiteral("Using gameplay camera '");
							((BepInExLogInterpolatedStringHandler)val2).AppendFormatted<string>(((Object)val).name);
							((BepInExLogInterpolatedStringHandler)val2).AppendLiteral("' (Camera.main is '");
							((BepInExLogInterpolatedStringHandler)val2).AppendFormatted<string>(((Object)(object)Camera.main != (Object)null) ? ((Object)Camera.main).name : "none");
							((BepInExLogInterpolatedStringHandler)val2).AppendLiteral("').");
						}
						logger.LogInfo(val2);
					}
					return val;
				}
			}
			catch
			{
			}
			return Camera.main;
		}

		private static bool OnScreen(Camera cam, Vector3 wp)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Unknown result type (might be due to invalid IL or missing references)
			Vector3 val = cam.WorldToViewportPoint(wp);
			float num = 0.03f;
			if (val.z > 0f && val.x >= num && val.x <= 1f - num && val.y >= num)
			{
				return val.y <= 1f - num;
			}
			return false;
		}

		private static Image Get(int i)
		{
			//IL_0033: 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_0068: 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_006f: 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_0076: Unknown result type (might be due to invalid IL or missing references)
			Vector2 val3 = default(Vector2);
			while (Pool.Count <= i)
			{
				GameObject val = new GameObject($"MiniMapTweaks.Icon{Pool.Count}");
				Image val2 = val.AddComponent<Image>();
				val.transform.SetParent((Transform)(object)ring, false);
				RectTransform rectTransform = ((Graphic)val2).rectTransform;
				((Vector2)(ref val3))..ctor(0.5f, 0.5f);
				rectTransform.pivot = val3;
				Vector2 anchorMin = (rectTransform.anchorMax = val3);
				rectTransform.anchorMin = anchorMin;
				val2.preserveAspect = true;
				((Graphic)val2).raycastTarget = false;
				Pool.Add(val2);
			}
			Image obj = Pool[i];
			((Component)obj).transform.SetAsLastSibling();
			return obj;
		}

		private static void HideFrom(int start)
		{
			for (int i = start; i < Pool.Count; i++)
			{
				if ((Object)(object)Pool[i] != (Object)null && !((Il2CppObjectBase)Pool[i]).WasCollected && Object.op_Implicit((Object)(object)Pool[i]) && ((Component)Pool[i]).gameObject.activeSelf)
				{
					((Component)Pool[i]).gameObject.SetActive(false);
				}
			}
		}

		private static Sprite SpriteFor(EType t)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Expected I4, but got Unknown
			try
			{
				return (Sprite)((int)t switch
				{
					0 => minimap.activationZoneIcon, 
					1 => minimap.magnetIcon, 
					2 => minimap.supplyPodIcon, 
					3 => minimap.dropPodIcon, 
					4 => minimap.lootCrateIcon, 
					5 => minimap.cocoonIcon, 
					6 => minimap.bigCocoonIcon, 
					7 => minimap.interactableRockIcon, 
					8 => minimap.powerCoreIcon, 
					9 => minimap.buffPillarIcon, 
					10 => minimap.magicHoleIcon, 
					11 => minimap.bobbyIcon, 
					12 => minimap.bobbyFuelIcon, 
					13 => minimap.bobbyPartIcon, 
					14 => minimap.gearDropIcon, 
					15 => minimap.heartstoneIcon, 
					16 => minimap.heartstoneCoreIcon, 
					17 => minimap.bobbyTntZoneIcon, 
					18 => minimap.ommoranBeamerIcon, 
					19 => minimap.eggHuntEggIcon, 
					20 => minimap.cargoPodIcon, 
					21 => minimap.broodNexusSproutIcon, 
					_ => null, 
				});
			}
			catch
			{
				return null;
			}
		}

		private static Sprite MineralSprite(ECurrency c)
		{
			//IL_0005: 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_04d1: Expected O, but got Unknown
			//IL_002e: Unknown result type (might be due to invalid IL or missing references)
			//IL_04fd: 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_042b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0432: Expected O, but got Unknown
			//IL_03c0: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c7: Expected O, but got Unknown
			//IL_0446: Unknown result type (might be due to invalid IL or missing references)
			//IL_0465: Unknown result type (might be due to invalid IL or missing references)
			//IL_0485: 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_02e8: Unknown result type (might be due to invalid IL or missing references)
			if (MineralSprites.TryGetValue(c, out var value) && (Object)(object)value != (Object)null && !((Il2CppObjectBase)value).WasCollected)
			{
				return value;
			}
			if (mineralSearchDone && MineralSprites.ContainsKey(c))
			{
				return null;
			}
			mineralSearchDone = true;
			bool flag = default(bool);
			try
			{
				Dictionary<ECurrency, string[]> dictionary = new Dictionary<ECurrency, string[]>();
				dictionary.Add((ECurrency)10, new string[1] { "bismor" });
				dictionary.Add((ECurrency)11, new string[1] { "croppa" });
				dictionary.Add((ECurrency)12, new string[1] { "enor" });
				dictionary.Add((ECurrency)13, new string[1] { "jadiz" });
				dictionary.Add((ECurrency)14, new string[1] { "magnite" });
				dictionary.Add((ECurrency)15, new string[1] { "umanite" });
				dictionary.Add((ECurrency)0, new string[1] { "gold" });
				dictionary.Add((ECurrency)2, new string[1] { "nitra" });
				dictionary.Add((ECurrency)3, new string[3] { "redsugar", "red_sugar", "sugar" });
				Dictionary<ECurrency, string[]> dictionary2 = dictionary;
				foreach (KeyValuePair<ECurrency, string[]> item in dictionary2)
				{
					MineralSprites[item.Key] = null;
				}
				List<Sprite> list = new List<Sprite>();
				foreach (Object item2 in (Il2CppArrayBase<Object>)(object)Resources.FindObjectsOfTypeAll(Il2CppType.Of<Sprite>()))
				{
					Sprite val = ((item2 != null) ? ((Il2CppObjectBase)item2).TryCast<Sprite>() : null);
					if ((Object)(object)val != (Object)null && ((Object)val).name != null)
					{
						list.Add(val);
					}
				}
				string[] array = new string[6] { "icons_craft_", "icons_currency_", "icon_currency_", "icons_", "icon_", "icon" };
				foreach (string value2 in array)
				{
					foreach (Sprite item3 in list)
					{
						string n = ((Object)item3).name.ToLowerInvariant();
						if (!n.StartsWith(value2) || n.Contains("outline") || n.Contains("shadow") || n.Contains("bg"))
						{
							continue;
						}
						foreach (KeyValuePair<ECurrency, string[]> item4 in dictionary2)
						{
							if ((Object)(object)MineralSprites[item4.Key] == (Object)null && item4.Value.Any((string v) => n.Contains(v)))
							{
								MineralSprites[item4.Key] = item3;
							}
						}
					}
				}
				if ((Object)(object)MineralSprites[(ECurrency)3] == (Object)null)
				{
					List<string> list2 = (from s in list
						select ((Object)s).name into text
						where text.ToLowerInvariant().Contains("sugar")
						select text).Distinct().Take(15).ToList();
					if (list2.Count > 0)
					{
						ManualLogSource logger = Plugin.Logger;
						BepInExInfoLogInterpolatedStringHandler val2 = new BepInExInfoLogInterpolatedStringHandler(34, 1, ref flag);
						if (flag)
						{
							((BepInExLogInterpolatedStringHandler)val2).AppendLiteral("Sprites with 'sugar' in the name: ");
							((BepInExLogInterpolatedStringHandler)val2).AppendFormatted<string>(string.Join(", ", list2));
						}
						logger.LogInfo(val2);
					}
					MineralSprites[(ECurrency)3] = LoadSprite("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", "red sugar");
				}
				foreach (KeyValuePair<ECurrency, string[]> item5 in dictionary2)
				{
					ManualLogSource logger2 = Plugin.Logger;
					BepInExInfoLogInterpolatedStringHandler val2 = new BepInExInfoLogInterpolatedStringHandler(19, 2, ref flag);
					if (flag)
					{
						((BepInExLogInterpolatedStringHandler)val2).AppendLiteral("Mineral icon for ");
						((BepInExLogInterpolatedStringHandler)val2).AppendFormatted<ECurrency>(item5.Key);
						((BepInExLogInterpolatedStringHandler)val2).AppendLiteral(": ");
						((BepInExLogInterpolatedStringHandler)val2).AppendFormatted<string>(((Object)(object)MineralSprites[item5.Key] != (Object)null) ? ((Object)MineralSprites[item5.Key]).name : "not found (gold dot)");
					}
					logger2.LogInfo(val2);
				}
			}
			catch (Exception ex)
			{
				ManualLogSource logger3 = Plugin.Logger;
				BepInExWarningLogInterpolatedStringHandler val3 = new BepInExWarningLogInterpolatedStringHandler(28, 1, ref flag);
				if (flag)
				{
					((BepInExLogInterpolatedStringHandler)val3).AppendLiteral("Mineral icon search failed: ");
					((BepInExLogInterpolatedStringHandler)val3).AppendFormatted<string>(ex.Message);
				}
				logger3.LogWarning(val3);
			}
			if (!MineralSprites.TryGetValue(c, out value))
			{
				return null;
			}
			return value;
		}

		private static Sprite KeywordSprite(string key)
		{
			//IL_0116: Unknown result type (might be due to invalid IL or missing references)
			//IL_011d: Expected O, but got Unknown
			if (KeywordSprites.TryGetValue(key, out var value))
			{
				if (!((Object)(object)value != (Object)null) || ((Il2CppObjectBase)value).WasCollected)
				{
					return null;
				}
				return value;
			}
			string value2 = key.ToLowerInvariant().Replace("_", "");
			Sprite val = null;
			int num = -1;
			try
			{
				foreach (Object item in (Il2CppArrayBase<Object>)(object)Resources.FindObjectsOfTypeAll(Il2CppType.Of<Sprite>()))
				{
					Sprite val2 = ((item != null) ? ((Il2CppObjectBase)item).TryCast<Sprite>() : null);
					string text = ((val2 == null) ? null : ((Object)val2).name?.ToLowerInvariant().Replace("_", "").Replace(" ", ""));
					if (text != null && text.Contains(value2))
					{
						int num2 = (text.StartsWith("iconscraft") ? 3 : ((!text.StartsWith("icon")) ? 1 : 2));
						if (num2 > num)
						{
							val = val2;
							num = num2;
						}
					}
				}
			}
			catch
			{
			}
			KeywordSprites[key] = val;
			ManualLogSource logger = Plugin.Logger;
			bool flag = default(bool);
			BepInExInfoLogInterpolatedStringHandler val3 = new BepInExInfoLogInterpolatedStringHandler(21, 2, ref flag);
			if (flag)
			{
				((BepInExLogInterpolatedStringHandler)val3).AppendLiteral("Objective icon for ");
				((BepInExLogInterpolatedStringHandler)val3).AppendFormatted<string>(key);
				((BepInExLogInterpolatedStringHandler)val3).AppendLiteral(": ");
				((BepInExLogInterpolatedStringHandler)val3).AppendFormatted<string>(((Object)(object)val != (Object)null) ? ((Object)val).name : "not found (gold dot)");
			}
			logger.LogInfo(val3);
			return val;
		}

		private static Sprite LoadSprite(string base64, string what)
		{
			//IL_0004: Unknown result type (might be due to invalid IL or missing references)
			//IL_000a: Expected O, but got Unknown
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0086: Unknown result type (might be due to invalid IL or missing references)
			//IL_008c: Expected O, but got Unknown
			try
			{
				Texture2D val = new Texture2D(2, 2, (TextureFormat)4, false);
				ImageConversion.LoadImage(val, Il2CppStructArray<byte>.op_Implicit(Convert.FromBase64String(base64)));
				((Object)val).hideFlags = (HideFlags)32;
				Sprite obj = Sprite.Create(val, new Rect(0f, 0f, (float)((Texture)val).width, (float)((Texture)val).height), new Vector2(0.5f, 0.5f));
				((Object)obj).hideFlags = (HideFlags)32;
				((Object)obj).name = "MiniMapTweaks_" + what.Replace(' ', '_');
				return obj;
			}
			catch (Exception ex)
			{
				ManualLogSource logger = Plugin.Logger;
				bool flag = default(bool);
				BepInExWarningLogInterpolatedStringHandler val2 = new BepInExWarningLogInterpolatedStringHandler(25, 2, ref flag);
				if (flag)
				{
					((BepInExLogInterpolatedStringHandler)val2).AppendLiteral("Couldn't load the ");
					((BepInExLogInterpolatedStringHandler)val2).AppendFormatted<string>(what);
					((BepInExLogInterpolatedStringHandler)val2).AppendLiteral(" icon: ");
					((BepInExLogInterpolatedStringHandler)val2).AppendFormatted<string>(ex.Message);
				}
				logger.LogWarning(val2);
				return null;
			}
		}

		private static Sprite DiceSprite()
		{
			//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ac: 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_006f: 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)
			if ((Object)(object)diceSprite != (Object)null && !((Il2CppObjectBase)diceSprite).WasCollected)
			{
				return diceSprite;
			}
			if (diceSpriteTried)
			{
				return null;
			}
			diceSpriteTried = true;
			try
			{
				Texture2D val = new Texture2D(2, 2, (TextureFormat)4, false);
				ImageConversion.LoadImage(val, Il2CppStructArray<byte>.op_Implicit(Convert.FromBase64String("iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAATgElEQVR42u2beZRdVZX/P/vc4b1Xr8aQqgqZK4EQQwgmkEGmEFAkoRV6QTXSLeIPfmo32EqjrPa3lt1FrXTrr/01beOA0EKjEW3pqEgjMwYLxJiBJEASEipTZa5UUtOrN93h7N8fr6qokCCVUCxbm7PW/ee+e+8533328N377AfvjffGe+O98d74nzvk9zVvE8jmxtL8M5ajzaCUrj/e0dSEaWzEeavfGxtxftfvf7Aa0NSEoRmawQKsvfcc757/fL0hl7HjRDF+Qg7MnFu98wtf35sfWFdjI2b5cuI/aAE0gdnciAwAueXDo+d0duY+Hkb2soTvnlZZ7iVEoDcbhsVivMsx8mxVTeKH9z7T9eLA+/CG4P6QBHDUDt7y4ZoP9HQHt4WRXjVlUoV77ux6pp9ew+hRSRURuroLsrW1mzXr29ne1gvC09UVya/d/eyRXw6YxvLl2HfDR4y4APoXGwN87orRp/d0F/5PvmBvmDwubS65eCIXnTc2SlUnDLEKsZbmd0RxRINMoCtXHzRPPdsmO/dk8D3nofJKd+ndT3VtercEIe8G8KYrq6r3dtpbs/n48zVVfvXFF0xg8WUT44pTUoZCLDYqabRIaXrVEh7jGEg65HuK8VO/3G1WtOyRjiOFvlSZ9+3ydOrObz55sOPNc/3eBdAEhiZobsaqIn95SfX1mb7wy0nfnD77/XVcdUVDPL6h2hDEYkOLiCBvMasCahXjGkg4HNqXiR/+xQ5nzUvt5ApRW3k68dWxC2fd39zcEo2Uf5CR2vXPXFp1cS5nm2xsLz7j9GquXDIlnjWr1iCILcTHALdaugYWYcwbi1EtaYXxHXBEN286bH/+6A7ntdc7MSIrU5V+071Pdz4zEtogJ7vrA8TlhoVVk12Rpmw2uGHM6JQsvmyyvfSi8Tgp12g+OkrVAawtgSXpgGdKNyMLBUscK44ZohGqoCBlLrYY2+df3K+/eHKns789SzrlPRgKf/f9lp5dA8TqZLTBOZmY3txSmuiTF1Te7MCDcRifP3d2Pbd8epY9a069YyIVG1iMkTeBV0yZA6q8tLGHFWu62LAlQ64nYFxtAiftYgM7+E5JawQbWIyITD6jxsw9u85megPa9mbOdo38xdkTE/kNu4urW0CbmjAtLSfmIOWEwTdjP7EgNc5xvbt9Tz7al4u54rJJ8XXXTnewig1ijDn2s9aCSTus3tTLF36a4ZWqqYTjJ4BjcPbt57RDrXx1cYLLF9Rgs3FJS475hmI8A67hP368JX7s6V1OecoliPSxOAo/s+y3+X0DaxxxAfSrvf3kRemzjJqHfdeZ2t0XxnNm1Zrb/2aOaGDBKnI88AqSMLy6PcvC+4p4t95M/dwzMP0orVW6tu7h0Fe+xeNXBXxwXjVxNj7KHAbNwipqBOM7fP2b63T1ukO2utxzgijebsX+6feez746sNbh4DInAv7G81JjxZpHHGOmFiONVNX5wDn1oo5B4+ODHyqAe5/pJPrYnzHhwplEXRmC/ivq7qX2zIlU3XwDd63IlOLBW2yNGIFYUUeY9/46UVWnGGlkjJkq1nns+vNrJjaDbRomNjNcDVi4EDc23n2eaxqCSCMRXFUIQovI8JhJyhOivjxiDDj9br8/BBjXIczmSbrwdh/U/kfCyKIKIrhhpJHnygQj8T0LF+IOF5cZTqhrBtsQVSz2HVkchBoPgHddwwu/3U+ci3B8g7XHX7UR0ILlliWjqX/sp7y+vAU8D7cijVtZDgmftmfXIf++jL9dUl3SprfQAGsVxzdE2YiWlftxXTMohCDU2HdkcUNUsbgZ7HAyy7eV1IwZpb1Q5KahFFRVSfgOW7d1c++/b+TGG2aQLPOw+eiYmG8EtGhpGJvkuc9W86WH7uf5xx+lr24sagxlHQeZZ/fzlRtreP8Z5ehxnOAgN0i5BIWI+7+3iS2t3aSSbomBHfWo3AQ8OrD2k3aC2q+MN81P10ee2WxERimoAdFBcEI2HzF1UiUfv/YMps8cDUHM8ViftWASBlxhX1sf2/YXsKo01CeZ3FBeeiZ/bBQZ9P6eQ+uWTn60fCuvtXZTVuZiUFQhLrkNFUGsaqcb2hn3r8q269sYlPM23s+0tKAzJyVnOSKfRSCOkXwgxFawVohiSCQMXd15Vq5up/tInokTKimrSSKxYq0OietgY0UDpaomweTJ5TRMTFNd6WGLFo30KPC2P6pImUd3Z4HlP21l2Y9f49DhPOUpF1FLV06xqpR5QlRyRxiRVIj87JU9wV7ehhu8nY04bW3YcyYlL/RcuboYENeUq7nukgKNFxRJJyOMKEEg9AUuvqtsae1i9UvtaGiZNLECL+2joUVVBzVCBDRWbGDRwEKsmP77RyVHZR5REPPsit382/c2s35jB57n4DgO+Rha7Bi2zrqAVr8OP3OEKWUBfUWJE64Y4Jcbdhc3DmA4aR/Qbyc11kIqoXzx2hwTxlk++7N6fhXNwDEZLh/XyiK/SMurPp7v0dcX8IOHtvLiqgNctWQK8+aOQRxBCxGq9DNEcOTNdl5SZ5N0QZX1aw/y8GM7eH17NwnfkEj6xFYZPyriPzKTyN96G2MXnUucL7L2Wz/k1HUPMqY8oKfoImjNiIVBcbSuEAjnnRnpxEkxS+6bxD1n3k7wD/+Xnju+xjfSV5Iea/jSX2Spr7HkQ0OqzGPv/gx33fsy//yNdbRu7UISLibpolpS76GXKojvYMo82nb2cNe3N3DntzewY1cPZSmPSB0qkzHXzsuSrok5dOlHOHXxeUS9fRjXUPfp6/hNxVmUpyIVQEXrhoNteBqgoipw3vSQJ1b7PDnho8z+q8spHO4hNbYKufVGvvylrbTe8FuW3tTH06t9nlzt01X0KEsq61/pYONrR1hw7hguWzSBKVOqEc+84ZqklBDtaevl6V/tYeXqg2TzIamkRxAJnhMzf0rAWRMDxpYr92yvp2zBHOJ8ATEGWwhI1VRw8MzZdP92FSlP6S2KjpgAIgueC6dUxHzz1dFUfWQBUb6IWgh681SOq2HHGefywuY1XDI35qMXFVnwvpBHXkzwwkYPcVwcR/nVi/tY9VI700+v4czpoxg7Jo0R2N+eY0trF5u3dNKXDSlLOfi+T2wtM8cHzJ9SpLbCUoiFTAE6pRy/qhyNB3y8IihaM4oCDpWOEtnhcbxhCWDA/l1HaStWkhhdhUYKRhBbmtyOrqXtsI9KnjAn1I2yfOqqPOfNDPlJS4Ite1zSKQ9F2bDxMOte6cB1Sp4viixGhGTSIZ32KIQwribk/NOKNNRGWIV8WFIYz4cqckTZPGKGMhNBe3oZk47I9w0/yR02FVYVXAOVpkicLx71piJIPk91IkIUjAMagS3CmadFfPn6LB9bVIr5cQzpMpfytEci4ZLwDeVpj3RZyTfEVrlwWoFr52VpqI0IIojiEpkCcB04O9VJZu1G3HQSjSLEdQlzRRKbX2FGbUgxEswwE8LhCwDwPGH+qCNkXm3FK0ugQYgYQ1yMSLZu5pwJIYRgKFFZI2ALpVh75aIit12TI+lDEGq/xy85P7VKGCueC1fOznHhtCIAQdQfGgViFVShtyhccVqO+hU/Z9+vN5OorcYpS7LtvkdZHLzE5FFKIeK46fQ7EoARJVMQrp2bo+bZR2jfuJfUqaNIjK5k6w9XcKWuZuIEiANhKJEz/b4uzsFZ0yP++qocrilR26HCNQJLZuWYNiYiF/AGcdJSuKxJKqeUKa5RKpPKv8zYxKh/XsrOO+5m121f4co13+W22Z30BXJMeH3HPmCAz+dDYfzYmIcueYk//4elbJ13KfGhw1x+8AnuajyEDUq7fzy+7ZiSEGa+L+JD5wT8/DcJylMlDSiEwvwpxUHwAwK0CkkX+gLhp1tSdBVdFk3IMaM2YmpNyLK5r7Bh3yaqUsrMcy2xlszxRIZ7Ig87RtE8LJxeZH3dSp7euJbRoy2XXxKWiHjEW2Zxg0lRAJe8P2DFBp+w//kyX5k5PiCMhxRGAd+BjpzD516ezvYLryYx5hS+//hT3NHXwpKGLMYIF02NiS1kA/DdEy9yupxoFdVAXIC6KsvHLy2W6i55BlLS3/2uADHUjbJMqot5bY+DY2BMVUxNmSW2Q+mw4Bll6fpx7P7E53jfNRdhw5C+i2az9AsB06qeo6EmpqcoGPqp9EkUeM3wIoDKMTsZQZQR4pwMFiiGFVIVxIP6Gou1gqpQVWbx3Df8glVIecqWdmHDuPlMXDyffHsnhY4eyk+tQT/yJzy5q5yU119Pkbdf8zujwiLB8XbTNYojJ2h12p9cVNjBhoDyhEWGhHRF8B1o7fKIT5tWOigBxHOJ8gHpMyazNRo1aEJvwV6DERSAbS8VJEbuKM0fYnyuOX6homAN6ntHHwUqiOsS4PIWBSgpmaNtf8cCqKsrzSyGw4UQMnkRzImfTPafbxxzb6hSvBl8pDAhHWAOHEBVSimytRjPEBw6wjh68N2jvyMC+UAkjEtrHorhpAQwY3np5cqkbi8UiTt7jSmR7uEDtyqIW1pcPMz3RJR8CDPHWEZvWk3vjgMkRlViPBfjufQ++TwX1nYPVIGGCkAzBWMKIXHS6PahGE5KAP3HX0yoz+6MLLu273eH3cejCuKCSSpdXYAFJ1XKK36Xe7AqGBGCWChPwufHbaH9a/fQ8eou8r15Nt35EFfsfZyFDQF9QYmgDXEt2t7rqrXsSvvZnUMxnKwP0MZGnNsfJOt7+sjLOzzp6xaVN6neW3n6g70O1yybyJynPsScB8/mv9aX4aaPL0KrpaPCyoRiI6U6oYQxfLAhz9crnmD80ttJffFv+N8vf5umcw8SxkcL2zXQkxdtO+KJ6+gjdz5Dtr8qrCNSFa4tt/ftPezc8ujKhHfdkoLGecQcJ/YrIA705IU/WX4Gm6++lYmXzebQ3k6u+do9PMITLF5QILZyFPiUC7t7HJrX1vG6M57xYTt//b79NFRFXDShwIXjthJEUJ6CTHFwxwfReQ66dmeCjl4pVpXH9w1d+zs6HG1pKR06/tMDQce5DV6444D3oZTR6PSpsRGLWHu0EGIrOGn4zrMVLJv2aWb95RLCnj6qJozCNkxl7UNr+fScDrbuctm400UMTKmNqK6wfGrNDDZ87IukPvUJto2fzVN