public static sbyte[] loadData(string arg0, int arg1, sbyte[] arg2, sbyte[] arg3)
        {
            //return org.moparscape.msc.client.DataOperations.loadData(objName, objData, arg2, arg3);
            // Debug.Log(arg0);

            int i = (arg2[0] & 0xff) * 256 + (arg2[1] & 0xff);
            int j = 0;

            arg0 = arg0.ToUpper();
            for (int k = 0; k < arg0.Length; k++)
            {
                j = (j * 61 + arg0[k]) - 32;
            }

            int l = 2 + i * 10;

            for (int i1 = 0; i1 < i; i1++)
            {
                int j1 = (arg2[i1 * 10 + 2] & 0xff) * 0x1000000 + (arg2[i1 * 10 + 3] & 0xff) * 0x10000 + (arg2[i1 * 10 + 4] & 0xff) * 256 + (arg2[i1 * 10 + 5] & 0xff);
                int k1 = (arg2[i1 * 10 + 6] & 0xff) * 0x10000 + (arg2[i1 * 10 + 7] & 0xff) * 256 + (arg2[i1 * 10 + 8] & 0xff);
                int l1 = (arg2[i1 * 10 + 9] & 0xff) * 0x10000 + (arg2[i1 * 10 + 10] & 0xff) * 256 + (arg2[i1 * 10 + 11] & 0xff);
                if (j1 == j)
                {
                    if (arg3 == null)
                    {
                        arg3 = new sbyte[k1 + arg1];
                    }
                    if (k1 != l1)
                    {
                        DataFileDecrypter.unpackData(arg3, k1, arg2, l1, l);
                    }
                    else
                    {
                        for (long i2 = 0; i2 < k1; i2++)
                        {
                            arg3[i2] = arg2[l + i2];
                        }
                    }
                    return(arg3);
                }
                l += l1;
            }

            return(null);
        }
		public static sbyte[] UnpackData(String arg0, String arg1, int arg2)
		{
			sbyte[] abyte0 = link.getFile(arg0);
			if (abyte0 != null)
			{
				//	Debug.Log(arg0 + " loaded");

				int l = ((abyte0[0] & 0xff) << 16) + ((abyte0[1] & 0xff) << 8) + (abyte0[2] & 0xff);
				int i1 = ((abyte0[3] & 0xff) << 16) + ((abyte0[4] & 0xff) << 8) + (abyte0[5] & 0xff);

				sbyte[] abyte1 = new sbyte[abyte0.Length - 6];
				for (int j1 = 0; j1 < abyte0.Length - 6; j1++)
					abyte1[j1] = abyte0[j1 + 6];

				//	drawLoadingBarText(arg2, "Unpacking " + arg1);
				if (i1 != l)
				{
					sbyte[] abyte2 = new sbyte[l];
					DataFileDecrypter.unpackData(abyte2, l, abyte1, i1, 0);
					//if (OnContentLoaded != null)
					//{
					//	OnContentLoaded(this, new ContentLoadedEventArgs("Unpacking " + arg1, arg2));
					//}
					return abyte2;
				}
				else
				{
					//if (OnContentLoaded != null)
					//{
					//	OnContentLoaded(this, new ContentLoadedEventArgs("Unpacking " + arg1, arg2));
					//}
					return abyte1;
				}
			}
			else
			{
				//if (OnContentLoaded != null)
				//{
				//	OnContentLoaded(this, new ContentLoadedEventArgs("Unpacking " + arg1, arg2));
				//}
				return UnpackDataBase(arg0, arg1, arg2);
			}
		}
        public static byte[] loadData(string arg0, int arg1, byte[] arg2, byte[] arg3)
        {
            int i = (arg2[0] & 0xff) * 256 + (arg2[1] & 0xff);
            int j = 0;

            arg0 = arg0.ToUpper();
            for (int k = 0; k < arg0.Length; k++)
            {
                j = (j * 61 + arg0[k]) - 32;
            }

            int l = 2 + i * 10;

            for (int i1 = 0; i1 < i; i1++)
            {
                int j1 = (arg2[i1 * 10 + 2] & 0xff) * 0x1000000 + (arg2[i1 * 10 + 3] & 0xff) * 0x10000 + (arg2[i1 * 10 + 4] & 0xff) * 256 + (arg2[i1 * 10 + 5] & 0xff);
                int k1 = (arg2[i1 * 10 + 6] & 0xff) * 0x10000 + (arg2[i1 * 10 + 7] & 0xff) * 256 + (arg2[i1 * 10 + 8] & 0xff);
                int l1 = (arg2[i1 * 10 + 9] & 0xff) * 0x10000 + (arg2[i1 * 10 + 10] & 0xff) * 256 + (arg2[i1 * 10 + 11] & 0xff);
                if (j1 == j)
                {
                    if (arg3 == null)
                    {
                        arg3 = new byte[k1 + arg1];
                    }
                    if (k1 != l1)
                    {
                        DataFileDecrypter.unpackData(arg3, k1, arg2, l1, l);
                    }
                    else
                    {
                        for (long i2 = 0; i2 < k1; i2++)
                        {
                            arg3[i2] = arg2[l + i2];
                        }
                    }
                    return(arg3);
                }
                l += l1;
            }

            return(null);
        }
		public static sbyte[] UnpackDataBase(String filename, String fileTitle, int startPercentage)
		{

			Debug.Log("Using default load");
			int i = 0;
			int k = 0;
			sbyte[] abyte0 = link.getFile(filename);
			if (abyte0 == null)
			{
				try
				{
					Debug.Log("Loading " + fileTitle + " - 0%");
					// drawLoadingBarText(startPercentage, "Loading " + fileTitle + " - 0%");
					var inputstream = new BinaryReader(DataOperations.openInputStream(filename));
					//DataInputStream datainputstream = new DataInputStream(inputstream);
					sbyte[] abyte2 = new sbyte[6] {
                        inputstream.ReadSByte(),inputstream.ReadSByte(),inputstream.ReadSByte(),
                        inputstream.ReadSByte(),inputstream.ReadSByte(),inputstream.ReadSByte()
                    };

					//inputstream.Read(abyte2, 0, 6);
					i = ((abyte2[0] & 0xff) << 16) + ((abyte2[1] & 0xff) << 8) + (abyte2[2] & 0xff);
					k = ((abyte2[3] & 0xff) << 16) + ((abyte2[4] & 0xff) << 8) + (abyte2[5] & 0xff);



					Debug.Log("Loading " + fileTitle + " - 5%");
					// drawLoadingBarText(startPercentage, "Loading " + fileTitle + " - 5%");

					// int l = 0;
					int l = 6;
					abyte0 = new sbyte[k];
					while (l < k)
					{
						int i1 = k - l;
						if (i1 > 1000)
							i1 = 1000;

						for (int t = 0; t < i1; t++)
							abyte0[l + t] = inputstream.ReadSByte();

						// inputstream.Read(abyte0, l, i1);

						l += i1;
						Debug.Log("Loading " + fileTitle + " - " + (5 + (l * 95) / k) + "%");
						//	drawLoadingBarText(startPercentage, "Loading " + fileTitle + " - " + (5 + (l * 95) / k) + "%");
					}

					inputstream.Close();
				}
				catch (IOException _ex) { }
			}

			Debug.Log("Unpacking " + fileTitle);
			//drawLoadingBarText(startPercentage, "Unpacking " + fileTitle);
			if (k != i)
			{
				sbyte[] abyte1 = new sbyte[i];
				DataFileDecrypter.unpackData(abyte1, i, abyte0, k, 0);
				return abyte1;
			}
			else
			{
				//  return unpackData(filename, fileTitle, startPercentage); // abyte0;
				return abyte0;
			}
		}