Decompiled source of EpicResearch v0.3.8

EpicResearch.dll

Decompiled 7 months ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using HarmonyLib;
using Microsoft.CodeAnalysis;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: AssemblyCompany("EpicResearch")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("EpicResearch")]
[assembly: AssemblyTitle("EpicResearch")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace DysonSphereProgram.Modding.StarterTemplate
{
	public static class Configs
	{
		public static bool AdjustTechUnlocks = true;

		public static bool AdjustTechCosts = true;

		public static double TechCostMultiple = 100.0;

		public static float ResourceMultiple = 1f;
	}
	[BepInPlugin("mrrvlad.epic.research", "EpicResearch", "0.3.8")]
	[BepInProcess("DSPGAME.exe")]
	public class EpicResearchPlugin : BaseUnityPlugin
	{
		public const string GUID = "mrrvlad.epic.research";

		public const string NAME = "EpicResearch";

		public const string VERSION = "0.3.8";

		private Harmony _harmony;

		internal static ManualLogSource Log;

		private static readonly int[,] remove_dependencies_data = new int[3, 2]
		{
			{ 1303, 1312 },
			{ 3901, 1312 },
			{ 3404, 2904 }
		};

		private static readonly int[,] unlocks_move_data = new int[9, 3]
		{
			{ 1705, 1508, 79 },
			{ 1703, 1508, 100 },
			{ 1125, 1417, 29 },
			{ 1502, 1202, 69 },
			{ 1132, 1305, 35 },
			{ 1133, 1203, 62 },
			{ 1403, 1203, 61 },
			{ 1416, 1142, 41 },
			{ 1131, 1304, 32 }
		};

		private static readonly float[,] unlocks_bonus_data = new float[37, 3]
		{
			{ 3403f, 16f, 6f },
			{ 3404f, 16f, 8f },
			{ 3405f, 16f, 10f },
			{ 3503f, 19f, 2f },
			{ 3504f, 19f, 2f },
			{ 3507f, 19f, 0.5f },
			{ 3508f, 19f, 0.5f },
			{ 3601f, 20f, 0.95f },
			{ 3601f, 21f, 2f },
			{ 3602f, 20f, 0.95f },
			{ 3602f, 21f, 2f },
			{ 3603f, 20f, 0.95f },
			{ 3603f, 21f, 2f },
			{ 3101f, 12f, 3f },
			{ 3102f, 12f, 3f },
			{ 3103f, 12f, 2f },
			{ 3104f, 12f, 2f },
			{ 3105f, 12f, 2f },
			{ 3106f, 12f, 2f },
			{ 2101f, 6f, 2f },
			{ 2102f, 6f, 2f },
			{ 2103f, 6f, 2f },
			{ 2104f, 6f, 2f },
			{ 2202f, 3f, 2f },
			{ 2203f, 3f, 2f },
			{ 2204f, 3f, 2f },
			{ 2401f, 1f, 2f },
			{ 2402f, 1f, 2f },
			{ 2403f, 9f, 2f },
			{ 2404f, 1f, 2f },
			{ 2501f, 2f, 2f },
			{ 2502f, 2f, 3f },
			{ 2503f, 2f, 3f },
			{ 2504f, 2f, 3f },
			{ 2602f, 10f, 2f },
			{ 2603f, 10f, 2f },
			{ 2604f, 10f, 2f }
		};

		private static Dictionary<int, int[]> tech_data;

		private string Print(int[] val)
		{
			string text = "(";
			for (int i = 0; i < val.Length; i++)
			{
				if (i > 0)
				{
					text += ",";
				}
				text += val[i];
			}
			return text + ")";
		}

		private string Print(double[] val)
		{
			string text = "(";
			for (int i = 0; i < val.Length; i++)
			{
				if (i > 0)
				{
					text += ",";
				}
				text += val[i];
			}
			return text + ")";
		}

		[HarmonyPrefix]
		[HarmonyPatch(typeof(GameMain), "Begin")]
		public static void GameMain_Begin_Prefix()
		{
			//IL_0174: Unknown result type (might be due to invalid IL or missing references)
			//IL_017a: Invalid comparison between Unknown and I4
			//IL_0265: Unknown result type (might be due to invalid IL or missing references)
			//IL_026b: Invalid comparison between Unknown and I4
			if (GameMain.instance.isMenuDemo)
			{
				return;
			}
			Log.LogInfo((object)("GameMain_Begin_Postfix called at gameTick: " + GameMain.gameTick + " , resource multiple: " + Configs.ResourceMultiple));
			StarData[] stars = GameMain.data.galaxy.stars;
			foreach (StarData obj in stars)
			{
				obj.resourceCoef *= Configs.ResourceMultiple;
				PlanetData[] planets = obj.planets;
				foreach (PlanetData val in planets)
				{
					if (val.gasSpeeds != null)
					{
						for (int k = 0; k < val.gasSpeeds.GetLength(0); k++)
						{
							val.gasSpeeds[k] *= Configs.ResourceMultiple;
						}
						continue;
					}
					if (val.runtimeVeinGroups != null && val.factory == null)
					{
						int length = val.runtimeVeinGroups.GetLength(0);
						for (int l = 0; l < length; l++)
						{
							val.runtimeVeinGroups[l].amount = (long)(Configs.ResourceMultiple * (float)val.runtimeVeinGroups[l].amount);
						}
					}
					if (GameMain.gameTick != 0L)
					{
						continue;
					}
					if (val.factory != null && val.factory.veinPool != null)
					{
						int length2 = val.factory.veinPool.GetLength(0);
						for (int m = 0; m < length2; m++)
						{
							if ((int)val.factory.veinPool[m].type == 7)
							{
								val.factory.veinPool[m].amount = (int)(Math.Sqrt((double)Configs.ResourceMultiple + 1E-08) * (double)val.factory.veinPool[m].amount);
							}
							else
							{
								val.factory.veinPool[m].amount = (int)(Configs.ResourceMultiple * (float)val.factory.veinPool[m].amount);
							}
						}
						val.factory.RecalculateAllVeinGroups();
					}
					if (val.data == null || val.data.veinPool == null)
					{
						continue;
					}
					int length3 = val.data.veinPool.GetLength(0);
					for (int n = 0; n < length3; n++)
					{
						if ((int)val.data.veinPool[n].type == 7)
						{
							val.data.veinPool[n].amount = (int)(Math.Sqrt((double)Configs.ResourceMultiple + 1E-08) * (double)val.data.veinPool[n].amount);
						}
						else
						{
							val.data.veinPool[n].amount = (int)(Configs.ResourceMultiple * (float)val.data.veinPool[n].amount);
						}
					}
				}
			}
		}

		private void Awake()
		{
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Expected O, but got Unknown
			Log = ((BaseUnityPlugin)this).Logger;
			_harmony = new Harmony("mrrvlad.epic.research");
			Harmony.CreateAndPatchAll(typeof(EpicResearchPlugin), (string)null);
			((BaseUnityPlugin)this).Logger.LogInfo((object)"EpicResearch Awake() called");
			ConfigEntry<bool> val = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "AdjustTechUnlocks", true, "Modify tech tree unlocks for rare receips");
			ConfigEntry<bool> obj = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "AdjustTechCosts", true, "Modify type and quantity of materials needed to unlock a tech");
			ConfigEntry<int> val2 = ((BaseUnityPlugin)this).Config.Bind<int>("General", "TechCostMultiple", 100, "Apply this multiple to tech costs. Valid vaules are 1, 5, 20, 50, 100.");
			ConfigEntry<float> val3 = ((BaseUnityPlugin)this).Config.Bind<float>("General", "ResourceMultiple", 1f, "Additional resource multipler for the galaxy. Affects all ore, gas giants, oil. Remote oil seems to be affected as sqrt of this value.");
			Configs.AdjustTechUnlocks = val.Value;
			Configs.AdjustTechCosts = obj.Value;
			if (val2.Value <= 1)
			{
				Configs.TechCostMultiple = 1.0;
			}
			else if (val2.Value <= 5)
			{
				Configs.TechCostMultiple = 5.0;
			}
			else if (val2.Value <= 20)
			{
				Configs.TechCostMultiple = 20.0;
			}
			else if (val2.Value <= 50)
			{
				Configs.TechCostMultiple = 50.0;
			}
			else
			{
				Configs.TechCostMultiple = 100.0;
			}
			Configs.ResourceMultiple = val3.Value;
			if (Configs.AdjustTechUnlocks)
			{
				AdjustUnlocks();
			}
			AdjustTechHashCosts(Configs.AdjustTechCosts, Configs.TechCostMultiple);
		}

		private void AdjustUnlocks()
		{
			int value;
			bool num = ((ProtoSet<TechProto>)(object)LDB.techs).dataIndices.TryGetValue(3404, out value);
			int value2;
			bool flag = ((ProtoSet<TechProto>)(object)LDB.techs).dataIndices.TryGetValue(3406, out value2);
			if (num && flag)
			{
				int num2 = -1;
				for (int i = 0; i < ((ProtoSet<TechProto>)(object)LDB.techs).dataArray[value].UnlockFunctions.Length; i++)
				{
					if (((ProtoSet<TechProto>)(object)LDB.techs).dataArray[value].UnlockFunctions[i] == 17)
					{
						num2 = i;
						break;
					}
				}
				if (num2 != -1)
				{
					((ProtoSet<TechProto>)(object)LDB.techs).dataArray[value2].UnlockFunctions = CollectionExtensions.AddToArray<int>(((ProtoSet<TechProto>)(object)LDB.techs).dataArray[value2].UnlockFunctions, 17);
					((ProtoSet<TechProto>)(object)LDB.techs).dataArray[value2].UnlockValues = CollectionExtensions.AddToArray<double>(((ProtoSet<TechProto>)(object)LDB.techs).dataArray[value2].UnlockValues, 1.0);
					int[] unlockFunctions = ((ProtoSet<TechProto>)(object)LDB.techs).dataArray[value].UnlockFunctions;
					double[] unlockValues = ((ProtoSet<TechProto>)(object)LDB.techs).dataArray[value].UnlockValues;
					((ProtoSet<TechProto>)(object)LDB.techs).dataArray[value].UnlockFunctions = Array.Empty<int>();
					((ProtoSet<TechProto>)(object)LDB.techs).dataArray[value].UnlockValues = Array.Empty<double>();
					for (int j = 0; j < unlockFunctions.Length; j++)
					{
						if (j != num2)
						{
							((ProtoSet<TechProto>)(object)LDB.techs).dataArray[value].UnlockFunctions = CollectionExtensions.AddToArray<int>(((ProtoSet<TechProto>)(object)LDB.techs).dataArray[value].UnlockFunctions, unlockFunctions[j]);
							((ProtoSet<TechProto>)(object)LDB.techs).dataArray[value].UnlockValues = CollectionExtensions.AddToArray<double>(((ProtoSet<TechProto>)(object)LDB.techs).dataArray[value].UnlockValues, unlockValues[j]);
						}
					}
				}
				else
				{
					((BaseUnityPlugin)this).Logger.LogInfo((object)"Failed to move logi warp from l4 to l6 - warp capability not found in l4");
				}
			}
			else
			{
				((BaseUnityPlugin)this).Logger.LogInfo((object)"Failed find logi tech while moving logi warp from l4 to l6");
			}
			int value3;
			bool num3 = ((ProtoSet<TechProto>)(object)LDB.techs).dataIndices.TryGetValue(1704, out value3);
			int value4;
			bool flag2 = ((ProtoSet<TechProto>)(object)LDB.techs).dataIndices.TryGetValue(1523, out value4);
			if (num3 && flag2)
			{
				int num4 = -1;
				for (int k = 0; k < ((ProtoSet<TechProto>)(object)LDB.techs).dataArray[value4].UnlockFunctions.Length; k++)
				{
					if (((ProtoSet<TechProto>)(object)LDB.techs).dataArray[value4].UnlockFunctions[k] == 26)
					{
						num4 = k;
						break;
					}
				}
				if (num4 != -1)
				{
					((ProtoSet<TechProto>)(object)LDB.techs).dataArray[value3].UnlockFunctions = CollectionExtensions.AddToArray<int>(((ProtoSet<TechProto>)(object)LDB.techs).dataArray[value3].UnlockFunctions, 26);
					((ProtoSet<TechProto>)(object)LDB.techs).dataArray[value3].UnlockValues = CollectionExtensions.AddToArray<double>(((ProtoSet<TechProto>)(object)LDB.techs).dataArray[value3].UnlockValues, 6.0);
					int[] unlockFunctions2 = ((ProtoSet<TechProto>)(object)LDB.techs).dataArray[value4].UnlockFunctions;
					double[] unlockValues2 = ((ProtoSet<TechProto>)(object)LDB.techs).dataArray[value4].UnlockValues;
					((ProtoSet<TechProto>)(object)LDB.techs).dataArray[value4].UnlockFunctions = Array.Empty<int>();
					((ProtoSet<TechProto>)(object)LDB.techs).dataArray[value4].UnlockValues = Array.Empty<double>();
					for (int l = 0; l < unlockFunctions2.Length; l++)
					{
						if (l != num4)
						{
							((ProtoSet<TechProto>)(object)LDB.techs).dataArray[value4].UnlockFunctions = CollectionExtensions.AddToArray<int>(((ProtoSet<TechProto>)(object)LDB.techs).dataArray[value4].UnlockFunctions, unlockFunctions2[l]);
							((ProtoSet<TechProto>)(object)LDB.techs).dataArray[value4].UnlockValues = CollectionExtensions.AddToArray<double>(((ProtoSet<TechProto>)(object)LDB.techs).dataArray[value4].UnlockValues, unlockValues2[l]);
						}
					}
					((ProtoSet<TechProto>)(object)LDB.techs).dataArray[value4].UnlockFunctions = CollectionExtensions.AddToArray<int>(((ProtoSet<TechProto>)(object)LDB.techs).dataArray[value4].UnlockFunctions, 26);
					((ProtoSet<TechProto>)(object)LDB.techs).dataArray[value4].UnlockValues = CollectionExtensions.AddToArray<double>(((ProtoSet<TechProto>)(object)LDB.techs).dataArray[value4].UnlockValues, 14.0);
				}
				else
				{
					((BaseUnityPlugin)this).Logger.LogInfo((object)"Failed to move dyson sphere stress capability from tech 1523 to 1704");
				}
			}
			else
			{
				((BaseUnityPlugin)this).Logger.LogInfo((object)"Failed find tech while moving dyson sphere stress capability from 1523 to 1704");
			}
			for (int m = 0; m < remove_dependencies_data.GetLength(0); m++)
			{
				if (((ProtoSet<TechProto>)(object)LDB.techs).dataIndices.TryGetValue(remove_dependencies_data[m, 0], out var value5))
				{
					int[] preTechs = ((ProtoSet<TechProto>)(object)LDB.techs).dataArray[value5].PreTechs;
					((ProtoSet<TechProto>)(object)LDB.techs).dataArray[value5].PreTechs = Array.Empty<int>();
					for (int n = 0; n < preTechs.Length; n++)
					{
						if (preTechs[n] != remove_dependencies_data[m, 1])
						{
							((ProtoSet<TechProto>)(object)LDB.techs).dataArray[value5].PreTechs = CollectionExtensions.AddToArray<int>(((ProtoSet<TechProto>)(object)LDB.techs).dataArray[value5].PreTechs, preTechs[n]);
						}
					}
					preTechs = ((ProtoSet<TechProto>)(object)LDB.techs).dataArray[value5].PreTechsImplicit;
					((ProtoSet<TechProto>)(object)LDB.techs).dataArray[value5].PreTechsImplicit = Array.Empty<int>();
					for (int num5 = 0; num5 < preTechs.Length; num5++)
					{
						if (preTechs[num5] != remove_dependencies_data[m, 1])
						{
							((ProtoSet<TechProto>)(object)LDB.techs).dataArray[value5].PreTechsImplicit = CollectionExtensions.AddToArray<int>(((ProtoSet<TechProto>)(object)LDB.techs).dataArray[value5].PreTechsImplicit, preTechs[num5]);
						}
					}
				}
				else
				{
					((BaseUnityPlugin)this).Logger.LogInfo((object)"Failed find tech to remove the dependency.");
				}
			}
			((BaseUnityPlugin)this).Logger.LogInfo((object)("Adjusting unlock bonus values:" + unlocks_bonus_data.GetLength(0)));
			for (int num6 = 0; num6 < unlocks_bonus_data.GetLength(0); num6++)
			{
				if (((ProtoSet<TechProto>)(object)LDB.techs).dataIndices.TryGetValue((int)unlocks_bonus_data[num6, 0], out var value6))
				{
					int num7 = -1;
					for (int num8 = 0; num8 < ((ProtoSet<TechProto>)(object)LDB.techs).dataArray[value6].UnlockFunctions.Length; num8++)
					{
						if ((float)((ProtoSet<TechProto>)(object)LDB.techs).dataArray[value6].UnlockFunctions[num8] == unlocks_bonus_data[num6, 1])
						{
							num7 = num8;
							break;
						}
					}
					if (num7 != -1)
					{
						((ProtoSet<TechProto>)(object)LDB.techs).dataArray[value6].UnlockValues[num7] *= unlocks_bonus_data[num6, 2];
						continue;
					}
					((BaseUnityPlugin)this).Logger.LogInfo((object)("Failed to find UnlockFunction " + (int)unlocks_bonus_data[num6, 1] + " in tech " + (int)unlocks_bonus_data[num6, 0] + " to adjust"));
				}
				else
				{
					((BaseUnityPlugin)this).Logger.LogInfo((object)("Failed find tech: " + unlocks_bonus_data[num6, 0]));
				}
			}
			((BaseUnityPlugin)this).Logger.LogInfo((object)("Moving techs:" + unlocks_move_data.GetLength(0)));
			for (int num9 = 0; num9 < unlocks_move_data.GetLength(0); num9++)
			{
				int value7;
				bool num10 = ((ProtoSet<TechProto>)(object)LDB.techs).dataIndices.TryGetValue(unlocks_move_data[num9, 0], out value7);
				int value8;
				bool flag3 = ((ProtoSet<TechProto>)(object)LDB.techs).dataIndices.TryGetValue(unlocks_move_data[num9, 1], out value8);
				if (num10 && flag3)
				{
					int num11 = -1;
					for (int num12 = 0; num12 < ((ProtoSet<TechProto>)(object)LDB.techs).dataArray[value7].UnlockRecipes.Length; num12++)
					{
						if (((ProtoSet<TechProto>)(object)LDB.techs).dataArray[value7].UnlockRecipes[num12] == unlocks_move_data[num9, 2])
						{
							num11 = num12;
							break;
						}
					}
					if (num11 != -1)
					{
						((ProtoSet<TechProto>)(object)LDB.techs).dataArray[value8].UnlockRecipes = CollectionExtensions.AddToArray<int>(((ProtoSet<TechProto>)(object)LDB.techs).dataArray[value8].UnlockRecipes, unlocks_move_data[num9, 2]);
						int[] unlockRecipes = ((ProtoSet<TechProto>)(object)LDB.techs).dataArray[value7].UnlockRecipes;
						((ProtoSet<TechProto>)(object)LDB.techs).dataArray[value7].UnlockRecipes = Array.Empty<int>();
						for (int num13 = 0; num13 < unlockRecipes.Length; num13++)
						{
							if (num13 != num11)
							{
								((ProtoSet<TechProto>)(object)LDB.techs).dataArray[value7].UnlockRecipes = CollectionExtensions.AddToArray<int>(((ProtoSet<TechProto>)(object)LDB.techs).dataArray[value7].UnlockRecipes, unlockRecipes[num13]);
							}
						}
					}
					else
					{
						((BaseUnityPlugin)this).Logger.LogInfo((object)("Failed to move receipt " + unlocks_move_data[num9, 2] + " from tech " + unlocks_move_data[num9, 0] + " to " + unlocks_move_data[num9, 1]));
					}
				}
				else
				{
					((BaseUnityPlugin)this).Logger.LogInfo((object)("Failed find tech while moving receipt from" + unlocks_move_data[num9, 0] + " to:" + unlocks_move_data[num9, 1]));
				}
			}
		}

		private void AdjustTechHashCosts(bool adjust_techs = true, double multiple = 100.0)
		{
			if (adjust_techs)
			{
				InitializeDictionary();
			}
			int num = ((ProtoSet<TechProto>)(object)LDB.techs).dataArray.Length;
			for (int i = 0; i < num; i++)
			{
				if (tech_data.TryGetValue(((Proto)((ProtoSet<TechProto>)(object)LDB.techs).dataArray[i]).ID, out var value))
				{
					double num2 = 0.01 * multiple * (double)value[1];
					if (num2 < 1.0)
					{
						num2 = 1.0;
					}
					((ProtoSet<TechProto>)(object)LDB.techs).dataArray[i].HashNeeded = (long)((double)value[0] * num2);
					((ProtoSet<TechProto>)(object)LDB.techs).dataArray[i].ItemPoints = Array.Empty<int>();
					((ProtoSet<TechProto>)(object)LDB.techs).dataArray[i].Items = Array.Empty<int>();
					for (int j = 0; j < 6; j++)
					{
						if (value[j + 2] > 0)
						{
							((ProtoSet<TechProto>)(object)LDB.techs).dataArray[i].ItemPoints = CollectionExtensions.AddToArray<int>(((ProtoSet<TechProto>)(object)LDB.techs).dataArray[i].ItemPoints, value[j + 2]);
							((ProtoSet<TechProto>)(object)LDB.techs).dataArray[i].Items = CollectionExtensions.AddToArray<int>(((ProtoSet<TechProto>)(object)LDB.techs).dataArray[i].Items, value[j + 2 + 6]);
						}
					}
					continue;
				}
				double num3 = multiple;
				if (((ProtoSet<TechProto>)(object)LDB.techs).dataArray[i].LevelCoef1 != 0)
				{
					if (num3 > 50.0)
					{
						num3 = 50.0;
					}
					TechProto obj = ((ProtoSet<TechProto>)(object)LDB.techs).dataArray[i];
					obj.HashNeeded *= (long)num3;
					TechProto obj2 = ((ProtoSet<TechProto>)(object)LDB.techs).dataArray[i];
					obj2.LevelCoef1 *= (int)num3;
					TechProto obj3 = ((ProtoSet<TechProto>)(object)LDB.techs).dataArray[i];
					obj3.LevelCoef2 *= (int)num3;
				}
				else
				{
					TechProto obj4 = ((ProtoSet<TechProto>)(object)LDB.techs).dataArray[i];
					obj4.HashNeeded *= (long)num3;
				}
			}
		}

		private void OnDestroy()
		{
			((BaseUnityPlugin)this).Logger.LogInfo((object)"StarterTemplate OnDestroy() called");
			Harmony harmony = _harmony;
			if (harmony != null)
			{
				harmony.UnpatchSelf();
			}
			Log = null;
		}

		private static void InitializeDictionary()
		{
			tech_data = new Dictionary<int, int[]>();
			tech_data[1001] = new int[14]
			{
				1200, 2, 30, -1, -1, -1, -1, -1, 1202, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1601] = new int[14]
			{
				900, 10, 80, 80, -1, -1, -1, -1, 1301, 1201,
				6003, 6004, 6005, 6006
			};
			tech_data[1401] = new int[14]
			{
				1800, 2, 40, 40, -1, -1, -1, -1, 1202, 1301,
				6003, 6004, 6005, 6006
			};
			tech_data[1002] = new int[14]
			{
				1800, 10, 200, 200, -1, -1, -1, -1, 1202, 1301,
				6003, 6004, 6005, 6006
			};
			tech_data[1201] = new int[14]
			{
				2400, 10, 30, 30, -1, -1, -1, -1, 1101, 1104,
				6003, 6004, 6005, 6006
			};
			tech_data[1120] = new int[14]
			{
				9000, 100, 20, -1, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1101] = new int[14]
			{
				9000, 100, 20, -1, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1701] = new int[14]
			{
				9000, 100, 20, -1, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1602] = new int[14]
			{
				18000, 50, 20, -1, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1411] = new int[14]
			{
				21600, 100, 15, -1, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1402] = new int[14]
			{
				18000, 100, 20, -1, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1412] = new int[14]
			{
				36000, 100, 20, -1, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1102] = new int[14]
			{
				36000, 100, 6, -1, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1151] = new int[14]
			{
				36000, 100, 5, -1, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1415] = new int[14]
			{
				72000, 100, 2, -1, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1403] = new int[14]
			{
				90000, 100, -1, 20, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1501] = new int[14]
			{
				18000, 100, 40, -1, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1311] = new int[14]
			{
				18000, 100, 20, -1, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1134] = new int[14]
			{
				36000, 100, 20, 30, 10, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1121] = new int[14]
			{
				72000, 100, 10, 10, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1111] = new int[14]
			{
				144000, 100, 8, -1, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1702] = new int[14]
			{
				180000, 100, 8, 2, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1603] = new int[14]
			{
				72000, 100, 20, 5, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1608] = new int[14]
			{
				108000, 100, 16, 8, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1413] = new int[14]
			{
				36000, 100, 20, 20, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1511] = new int[14]
			{
				432000, 100, 4, 3, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1502] = new int[14]
			{
				72000, 100, 10, 10, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1513] = new int[14]
			{
				576000, 100, 4, -1, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1302] = new int[14]
			{
				144000, 100, 20, -1, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1131] = new int[14]
			{
				144000, 100, 10, -1, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1122] = new int[14]
			{
				72000, 100, 15, 15, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1103] = new int[14]
			{
				108000, 100, -1, 10, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1112] = new int[14]
			{
				144000, 100, -1, 10, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1711] = new int[14]
			{
				360000, 100, 5, 2, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1604] = new int[14]
			{
				540000, 100, 14, -1, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1607] = new int[14]
			{
				180000, 100, 10, -1, 2, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1503] = new int[14]
			{
				108000, 100, -1, 20, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1202] = new int[14]
			{
				216000, 100, 10, -1, 3, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1123] = new int[14]
			{
				216000, 100, 20, 20, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1113] = new int[14]
			{
				180000, 100, 12, -1, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1152] = new int[14]
			{
				1080000, 100, 3, 2, 1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1703] = new int[14]
			{
				144000, 100, 20, 15, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1104] = new int[14]
			{
				180000, 100, -1, 12, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1414] = new int[14]
			{
				288000, 100, 12, 8, 1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1521] = new int[14]
			{
				360000, 100, 8, -1, 3, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1504] = new int[14]
			{
				108000, 100, 15, 5, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1416] = new int[14]
			{
				1800000, 100, 3, 1, 1, 1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1132] = new int[14]
			{
				540000, 100, 8, 1, 2, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1124] = new int[14]
			{
				720000, 100, 12, 8, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1114] = new int[14]
			{
				288000, 100, -1, 10, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1605] = new int[14]
			{
				1080000, 100, 6, 4, 1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1512] = new int[14]
			{
				216000, 100, 15, 5, 2, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1133] = new int[14]
			{
				720000, 100, 8, 2, 6, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1126] = new int[14]
			{
				360000, 100, 8, 2, 3, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1125] = new int[14]
			{
				360000, 100, 4, 2, 3, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1142] = new int[14]
			{
				360000, 100, 8, 2, 3, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1153] = new int[14]
			{
				2160000, 100, 3, 1, 1, 1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1712] = new int[14]
			{
				360000, 100, 2, 8, 4, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1606] = new int[14]
			{
				432000, 100, 10, 8, 2, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1312] = new int[14]
			{
				1440000, 250, 6, 2, 5, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1141] = new int[14]
			{
				216000, 100, 15, 10, 5, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1143] = new int[14]
			{
				720000, 100, 8, 1, 2, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1522] = new int[14]
			{
				360000, 100, 10, 2, 4, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1303] = new int[14]
			{
				720000, 100, 8, 1, 2, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1417] = new int[14]
			{
				1080000, 100, 14, 2, 4, -1, 6, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1704] = new int[14]
			{
				900000, 100, 6, 2, 2, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1523] = new int[14]
			{
				1800000, 100, 5, 1, 2, 3, 3, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1505] = new int[14]
			{
				3600000, 100, 6, 1, 1, 2, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1203] = new int[14]
			{
				1620000, 100, 5, 2, 2, 2, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1304] = new int[14]
			{
				720000, 100, 15, 2, 4, 6, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1305] = new int[14]
			{
				720000, 100, 12, 2, 4, 8, 5, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1705] = new int[14]
			{
				9000000, 50, 6, 1, 3, 6, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1506] = new int[14]
			{
				1080000, 100, 15, 1, 5, 5, 5, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1145] = new int[14]
			{
				900000, 100, 18, 2, 6, 4, 8, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1144] = new int[14]
			{
				1440000, 100, 10, 1, 4, 4, 4, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1507] = new int[14]
			{
				18000000, 50, 6, 1, 4, 2, 4, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[1508] = new int[14]
			{
				72000000, 50, -1, -1, -1, -1, -1, 1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[4101] = new int[14]
			{
				1800, 10, 20, -1, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[4102] = new int[14]
			{
				36000, 10, 20, -1, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[4103] = new int[14]
			{
				300000, 90, 1, 12, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[4104] = new int[14]
			{
				12000000, 60, 3, -1, -1, 1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[2101] = new int[14]
			{
				900, 20, 80, 80, -1, -1, -1, -1, 1101, 1104,
				6003, 6004, 6005, 6006
			};
			tech_data[2102] = new int[14]
			{
				36000, 50, 1, 10, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[2103] = new int[14]
			{
				108000, 100, 20, 10, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[2104] = new int[14]
			{
				300000, 100, 18, -1, 6, 6, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[2105] = new int[14]
			{
				1440000, 100, 6, -1, -1, -1, 2, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[2201] = new int[14]
			{
				3600, 5, 60, -1, -1, -1, -1, -1, 1203, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[2202] = new int[14]
			{
				36000, 10, 20, 20, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[2203] = new int[14]
			{
				72000, 10, 20, 20, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[2204] = new int[14]
			{
				180000, 100, 12, -1, 6, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[2205] = new int[14]
			{
				240000, 100, 15, -1, 6, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[2206] = new int[14]
			{
				300000, 100, 15, -1, 6, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[2207] = new int[14]
			{
				360000, 100, 16, -1, -1, 6, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[2208] = new int[14]
			{
				1200000, 450, 2, -1, -1, -1, 1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[2301] = new int[14]
			{
				7200, 10, 20, 30, -1, -1, -1, -1, 1103, 1301,
				6003, 6004, 6005, 6006
			};
			tech_data[2302] = new int[14]
			{
				36000, 100, 2, 20, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[2303] = new int[14]
			{
				72000, 100, 20, -1, 20, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[2304] = new int[14]
			{
				180000, 200, 18, -1, -1, -1, 5, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[2305] = new int[14]
			{
				480000, 200, 12, -1, -1, -1, 3, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[2306] = new int[14]
			{
				600000, 200, 12, -1, -1, -1, 3, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[2401] = new int[14]
			{
				9000, 10, 20, -1, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[2402] = new int[14]
			{
				36000, 100, 2, 10, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[2403] = new int[14]
			{
				72000, 1000, -1, 2, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[2404] = new int[14]
			{
				180000, 100, 18, 12, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[2405] = new int[14]
			{
				300000, 100, 18, -1, 9, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[2406] = new int[14]
			{
				1440000, 100, 6, -1, -1, 3, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[2701] = new int[14]
			{
				1800, 2, 100, -1, -1, -1, -1, -1, 1301, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[2702] = new int[14]
			{
				24000, 5, 30, -1, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[2703] = new int[14]
			{
				60000, 100, 3, 30, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[2704] = new int[14]
			{
				192000, 100, 18, 3, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[2705] = new int[14]
			{
				240000, 100, 15, -1, 6, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[2501] = new int[14]
			{
				5400, 10, 20, 40, 40, -1, -1, -1, 1030, 1006,
				1109, 6004, 6005, 6006
			};
			tech_data[2502] = new int[14]
			{
				72000, 50, 2, 20, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[2503] = new int[14]
			{
				216000, 20, 20, 12, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[2504] = new int[14]
			{
				600000, 100, 12, -1, 3, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[2505] = new int[14]
			{
				2700000, 100, 4, -1, -1, -1, 4, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[2601] = new int[14]
			{
				18000, 5, 12, -1, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[2602] = new int[14]
			{
				72000, 10, 6, 16, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[2603] = new int[14]
			{
				144000, 20, 20, 20, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[2604] = new int[14]
			{
				360000, 100, 8, -1, 8, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[2605] = new int[14]
			{
				1440000, 150, 3, 1, 1, 1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[2901] = new int[14]
			{
				10800, 10, 40, 20, -1, -1, -1, -1, 1006, 1202,
				6003, 6004, 6005, 6006
			};
			tech_data[2902] = new int[14]
			{
				36000, 100, 5, 20, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[2903] = new int[14]
			{
				360000, 25, 20, 10, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[2904] = new int[14]
			{
				720000, 200, 4, -1, 2, 2, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[2905] = new int[14]
			{
				1080000, 100, 12, -1, -1, -1, 6, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[3101] = new int[14]
			{
				144000, 200, 10, -1, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[3102] = new int[14]
			{
				144000, 100, 20, -1, 3, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[3103] = new int[14]
			{
				144000, 100, 20, 2, 4, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[3104] = new int[14]
			{
				300000, 100, 12, -1, 3, 3, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[3105] = new int[14]
			{
				480000, 100, 12, 3, 3, 3, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[3106] = new int[14]
			{
				1200000, 100, 6, -1, -1, -1, 3, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[3201] = new int[14]
			{
				54000, 100, 40, 8, 4, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[3202] = new int[14]
			{
				144000, 100, 20, 4, 3, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[3203] = new int[14]
			{
				180000, 100, -1, -1, 6, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[3204] = new int[14]
			{
				360000, 100, -1, 10, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[3205] = new int[14]
			{
				420000, 100, 18, -1, 3, 6, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[3206] = new int[14]
			{
				480000, 100, 24, -1, 3, 3, 6, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[3207] = new int[14]
			{
				1620000, 100, 8, -1, 1, 1, 3, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[3701] = new int[14]
			{
				36000, 100, -1, 30, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[3702] = new int[14]
			{
				108000, 100, -1, 20, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[3703] = new int[14]
			{
				360000, 100, 8, -1, 2, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[3704] = new int[14]
			{
				720000, 100, 6, -1, 2, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[3705] = new int[14]
			{
				900000, 100, 8, -1, 2, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[3706] = new int[14]
			{
				1200000, 100, 9, -1, -1, -1, 3, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[3301] = new int[14]
			{
				108000, 100, 4, 4, 1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[3302] = new int[14]
			{
				300000, 100, 3, -1, 3, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[3303] = new int[14]
			{
				720000, 100, 3, 1, 3, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[3304] = new int[14]
			{
				900000, 100, 3, 1, 3, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[3305] = new int[14]
			{
				1440000, 100, 4, 1, 2, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[4001] = new int[14]
			{
				36000, 100, 20, 20, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[4002] = new int[14]
			{
				300000, 100, 3, 3, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[4003] = new int[14]
			{
				720000, 100, 2, -1, 1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[4004] = new int[14]
			{
				900000, 100, 3, -1, 1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[4005] = new int[14]
			{
				1440000, 100, 3, -1, 1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[3401] = new int[14]
			{
				180000, 100, 10, 5, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[3402] = new int[14]
			{
				300000, 100, 12, 6, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[3403] = new int[14]
			{
				360000, 100, 10, 2, 4, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[3404] = new int[14]
			{
				720000, 100, 10, -1, 3, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[3405] = new int[14]
			{
				900000, 100, 12, -1, 2, 3, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[3406] = new int[14]
			{
				1440000, 50, 16, -1, 3, 4, 4, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[3501] = new int[14]
			{
				108000, 100, 20, 10, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[3502] = new int[14]
			{
				144000, 100, 20, 10, 2, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[3503] = new int[14]
			{
				180000, 100, 20, 10, 5, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[3504] = new int[14]
			{
				300000, 100, 18, 9, 9, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[3505] = new int[14]
			{
				720000, 60, 12, -1, 2, 4, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[3506] = new int[14]
			{
				960000, 120, 6, -1, 1, 2, 2, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[3507] = new int[14]
			{
				3600000, 80, 3, -1, 1, -1, 1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[3508] = new int[14]
			{
				5400000, 60, 3, -1, 1, -1, 1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[3601] = new int[14]
			{
				36000, 100, 20, 60, -1, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[3602] = new int[14]
			{
				180000, 100, 10, 2, 5, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[3603] = new int[14]
			{
				540000, 100, 5, 2, 4, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[3604] = new int[14]
			{
				720000, 100, 8, 2, 3, 4, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[3605] = new int[14]
			{
				1800000, 100, 6, 1, 1, 1, 2, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[3901] = new int[14]
			{
				180000, 100, -1, -1, 12, -1, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[3902] = new int[14]
			{
				300000, 100, -1, -1, -1, 6, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
			tech_data[3903] = new int[14]
			{
				900000, 100, -1, -1, -1, 6, -1, -1, 6001, 6002,
				6003, 6004, 6005, 6006
			};
		}
	}
}