649 lines
25 KiB
C#
649 lines
25 KiB
C#
|
using System;
|
|||
|
using System.Diagnostics;
|
|||
|
using System.IO;
|
|||
|
using System.Reflection;
|
|||
|
using System.Runtime.CompilerServices;
|
|||
|
using System.Runtime.InteropServices;
|
|||
|
using System.Text;
|
|||
|
using forms_cil;
|
|||
|
|
|||
|
// Token: 0x0200003D RID: 61
|
|||
|
namespace UnitTestProject.RefVm
|
|||
|
{
|
|||
|
public static class StringDecryptor // \u0006\u2009
|
|||
|
{
|
|||
|
private static BinStreamReader _binStreamReader; // \u0003
|
|||
|
private static readonly DecryptedStrings DecryptedStringsGlobal; // \u0002
|
|||
|
private static byte[] _commonKey; // \u0005
|
|||
|
private static short _keyLength; // \u0008
|
|||
|
private static readonly Enum1 Enum1Dummy; // \u0003\u2000
|
|||
|
private static int _int1Dummy; // \u0002\u2000
|
|||
|
private static int _int2Dummy; // \u000F
|
|||
|
private static int _int3Dummy; // \u0006
|
|||
|
private static byte[] _pkt; // \u000E
|
|||
|
|
|||
|
// Token: 0x060002CE RID: 718 RVA: 0x00013060 File Offset: 0x00011260
|
|||
|
[MethodImpl(MethodImplOptions.NoInlining)]
|
|||
|
static StringDecryptor()
|
|||
|
{
|
|||
|
var num = -42518532;
|
|||
|
var num2 = num ^ 1885636661;
|
|||
|
DecryptedStringsGlobal = new DecryptedStrings(1970604170 + num + num2 /*9*/);
|
|||
|
|
|||
|
var num3 = 2;
|
|||
|
var stackTrace = new StackTrace(num3, false);
|
|||
|
num3 -= 2;
|
|||
|
var frame = stackTrace.GetFrame(num3);
|
|||
|
var index = num3;
|
|||
|
if (frame == null)
|
|||
|
{
|
|||
|
stackTrace = new StackTrace();
|
|||
|
index = 1;
|
|||
|
frame = stackTrace.GetFrame(index);
|
|||
|
}
|
|||
|
var num4 = ~- -~~-~-~(1341405001 ^ num ^ num2) ^ -~~- -~-~~(2095196650 + num - num2);
|
|||
|
var methodBase = frame?.GetMethod();
|
|||
|
if (frame != null)
|
|||
|
{
|
|||
|
num4 ^= ~- -~~-~-~(num ^ -1658751032 ^ num2);
|
|||
|
}
|
|||
|
var type = methodBase?.DeclaringType;
|
|||
|
if (type == typeof(RuntimeMethodHandle))
|
|||
|
{
|
|||
|
Enum1Dummy = (Enum1)(4 | (int)Enum1Dummy);
|
|||
|
num4 ^= 1970604898 + num + num2 + num3;
|
|||
|
}
|
|||
|
else if (type == null)
|
|||
|
{
|
|||
|
if (CheckStack(stackTrace, index))
|
|||
|
{
|
|||
|
num4 ^= ~-~- -~~-~(-1970628130 - num - num2) - num3;
|
|||
|
Enum1Dummy = (Enum1)(16 | (int)Enum1Dummy);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
num4 ^= ~- -~~-~-~(num ^ -1885608078 ^ num2);
|
|||
|
Enum1Dummy = (Enum1)(1 | (int)Enum1Dummy);
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
num4 ^= ~-~- -~~-~(1885542988 - num + num2) - num3;
|
|||
|
Enum1Dummy = (Enum1)(16 | (int)Enum1Dummy);
|
|||
|
}
|
|||
|
_int1Dummy += num4;
|
|||
|
}
|
|||
|
|
|||
|
// Token: 0x060002CF RID: 719 RVA: 0x000131D4 File Offset: 0x000113D4
|
|||
|
public static string GetString(int id) // \u0002
|
|||
|
{
|
|||
|
lock (DecryptedStringsGlobal)
|
|||
|
{
|
|||
|
return DecryptedStringsGlobal[id] ?? DecryptString(id, true);
|
|||
|
}
|
|||
|
}
|
|||
|
public static void SetString(int id, string val) // for unit tests
|
|||
|
{
|
|||
|
lock (DecryptedStringsGlobal)
|
|||
|
{
|
|||
|
DecryptedStringsGlobal[id] = val;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// Token: 0x060002D0 RID: 720 RVA: 0x00013224 File Offset: 0x00011424
|
|||
|
[MethodImpl(MethodImplOptions.NoInlining)]
|
|||
|
private static string DecryptString(int id, bool dummy) // \u0002
|
|||
|
{
|
|||
|
var num = 1500675437;
|
|||
|
var num2 = 1065028357 - num;
|
|||
|
byte[] key;
|
|||
|
string str;
|
|||
|
int num6;
|
|||
|
if (_binStreamReader == null)
|
|||
|
{
|
|||
|
var executingAssembly = Assembly.GetExecutingAssembly();
|
|||
|
_int3Dummy |= num ^ -1084071305 ^ num2;
|
|||
|
var stringBuilder = new StringBuilder();
|
|||
|
var num3 = -1821765671 - num + num2;
|
|||
|
stringBuilder.Append((char)(num3 >> 16)).Append((char)num3);
|
|||
|
num3 = 1822175277 + num ^ num2;
|
|||
|
stringBuilder.Append((char)(num3 >> 16)).Append((char)num3);
|
|||
|
num3 = (1619914499 ^ num) + num2;
|
|||
|
stringBuilder.Append((char)num3).Append((char)(num3 >> 16));
|
|||
|
num3 = 1602104074 - num - num2;
|
|||
|
stringBuilder.Append((char)num3).Append((char)(num3 >> 16));
|
|||
|
num3 = (num ^ 1619980037) + num2;
|
|||
|
stringBuilder.Append((char)num3).Append((char)(num3 >> 16));
|
|||
|
num3 = num + -1398984659 - num2;
|
|||
|
stringBuilder.Append((char)num3).Append((char)(num3 >> 16));
|
|||
|
var manifestResourceStream = executingAssembly.GetManifestResourceStream(/* added by ursoft */ "forms_cil." +
|
|||
|
stringBuilder.ToString()
|
|||
|
/* added by ursoft */.GetHashCode().ToString());
|
|||
|
var num4 = 2;
|
|||
|
var stackTrace = new StackTrace(num4, false);
|
|||
|
_int3Dummy ^= (1082521283 ^ num) + num2 | num4;
|
|||
|
num4 -= 2;
|
|||
|
var frame = stackTrace.GetFrame(num4);
|
|||
|
var index = num4;
|
|||
|
if (frame == null)
|
|||
|
{
|
|||
|
stackTrace = new StackTrace();
|
|||
|
index = 1;
|
|||
|
frame = stackTrace.GetFrame(index);
|
|||
|
}
|
|||
|
var methodBase = frame?.GetMethod();
|
|||
|
_int3Dummy ^= num4 + (num + -1936322645 ^ num2);
|
|||
|
var type = methodBase?.DeclaringType;
|
|||
|
if (frame == null)
|
|||
|
{
|
|||
|
_int3Dummy ^= 1065247672 - num - num2;
|
|||
|
}
|
|||
|
var flag = type == typeof(RuntimeMethodHandle);
|
|||
|
_int3Dummy ^= (num ^ 1082461797) + num2;
|
|||
|
if (!flag)
|
|||
|
{
|
|||
|
flag = type == null;
|
|||
|
if (flag)
|
|||
|
{
|
|||
|
if (CheckStack(stackTrace, index))
|
|||
|
{
|
|||
|
flag = false;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
_int3Dummy ^= 1065247640 - num - num2;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
if (flag)
|
|||
|
{
|
|||
|
_int3Dummy ^= 32;
|
|||
|
}
|
|||
|
_int3Dummy ^= (num ^ 1082521251) + num2 | num4 + 1;
|
|||
|
_binStreamReader = new BinStreamReader(manifestResourceStream);
|
|||
|
var commonKeyLength = (short)(_binStreamReader.ReadHeaderInt16() ^ ~(short)-(short)-(short)~(short)~(short)-(short)~(short)-(short)~(short)-(short)~(short)(-1065050389 + num ^ num2));
|
|||
|
if (commonKeyLength == 0)
|
|||
|
{
|
|||
|
_keyLength = (short)(_binStreamReader.ReadHeaderInt16() ^ -(short)~(short)~(short)-(short)-(short)~(short)~(short)-(short)-(short)~(short)~(short)((-1082482306 ^ num) - num2));
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
_commonKey = _binStreamReader.Read(commonKeyLength);
|
|||
|
}
|
|||
|
var assembly = executingAssembly;
|
|||
|
var assemblyName = SafeAssemblyName(assembly);
|
|||
|
_pkt = SafeAssemblyPkt(assemblyName);
|
|||
|
num6 = _int1Dummy;
|
|||
|
_int1Dummy = 0;
|
|||
|
var num7 = SdMetadataTokens.GetLong();
|
|||
|
num6 ^= (int)(uint)num7;
|
|||
|
num6 ^= -888987382 - num + num2;
|
|||
|
var num8 = num6;
|
|||
|
var num9 = num8;
|
|||
|
var num10 = 0;
|
|||
|
var num11 = num9 ^ -1693408934 + num - num2;
|
|||
|
var num12 = num11 * (1936327810 - num + num2) % ((num ^ -1092770072) - num2);
|
|||
|
var num13 = num12;
|
|||
|
var obj = ((I2<int>)new SdTemplateStuff.C(-1065028359 + num | num2)
|
|||
|
{
|
|||
|
I6 = num13
|
|||
|
}).I2M();
|
|||
|
try
|
|||
|
{
|
|||
|
while (obj.I4M())
|
|||
|
{
|
|||
|
var num14 = obj.I1M();
|
|||
|
num12 ^= num10 - num14 << 2;
|
|||
|
num10 += num12 >> 3;
|
|||
|
}
|
|||
|
}
|
|||
|
finally
|
|||
|
{
|
|||
|
obj?.I5M();
|
|||
|
}
|
|||
|
num6 ^= ~- -~-~~- -~~(num ^ 1140387705 ^ num2);
|
|||
|
var num15 = num12;
|
|||
|
num6 = num15 + num6;
|
|||
|
_int2Dummy = num6;
|
|||
|
_int3Dummy = (_int3Dummy & -1667887203 + num - num2) ^ (num ^ 1082519937) + num2;
|
|||
|
if ((Enum1Dummy & (Enum1)(-~~- -~-~~(1936322518 - num ^ num2))) == 0)
|
|||
|
{
|
|||
|
_int3Dummy = (-1082440641 ^ num) - num2;
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
num6 = _int2Dummy;
|
|||
|
}
|
|||
|
if (_int3Dummy == 1936366479 - num + num2)
|
|||
|
{
|
|||
|
return new string(new[] { (char)((-1082462051 ^ num) - num2), '0', (char)(num + -1065028269 + num2) });
|
|||
|
}
|
|||
|
var num16 = id ^ -1010833342 ^ num ^ num2 ^ num6;
|
|||
|
num16 ^= -1459130838 - num + num2;
|
|||
|
_binStreamReader.GetStream().Position = num16;
|
|||
|
if (_commonKey != null)
|
|||
|
{
|
|||
|
key = _commonKey;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
short keyLength;
|
|||
|
if (_keyLength == -1)
|
|||
|
{
|
|||
|
keyLength = (short)(_binStreamReader.ReadHeaderInt32() ^ num + -1936293566 - num2 ^ num16);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
keyLength = _keyLength;
|
|||
|
}
|
|||
|
if (keyLength == 0)
|
|||
|
{
|
|||
|
key = null;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
key = _binStreamReader.Read(keyLength);
|
|||
|
for (var i = 0; i != key.Length; i = 1 + i)
|
|||
|
{
|
|||
|
key[i] ^= (byte)(_int2Dummy >> ((3 & i) << 3));
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
var stringHeader = _binStreamReader.ReadHeaderInt32() ^ num16 ^ -~~-~-~-~((num ^ -1882046960) + num2) ^ num6;
|
|||
|
if (stringHeader != (1936322515 - num | num2))
|
|||
|
{
|
|||
|
var flagAnsi = (stringHeader & 211161131 + num - num2) != 0;
|
|||
|
var flagCompressed = (stringHeader & (-8713467 - num ^ num2)) != 0;
|
|||
|
var flagSecure = (stringHeader & (1619332869 ^ num) + num2) != 0;
|
|||
|
stringHeader &= num + -1870334726 ^ num2;
|
|||
|
var packedStringBuf = _binStreamReader.Read(stringHeader);
|
|||
|
// ReSharper disable once PossibleNullReferenceException
|
|||
|
var key1 = key[1];
|
|||
|
var length = packedStringBuf.Length;
|
|||
|
var key1XorLen = (byte)(11 + length ^ 7 + key1);
|
|||
|
var keysXorLen = (uint)((key[0] | key[2] << 8) + (key1XorLen << 3));
|
|||
|
ushort keysXorLenLowWord = 0;
|
|||
|
for (var index = 0; index < length; ++index)
|
|||
|
{
|
|||
|
if ((index & 1) == 0)
|
|||
|
{
|
|||
|
keysXorLen = keysXorLen * (uint)((num ^ -1082544904) - num2) + (uint)(num + -1933863442 ^ num2);
|
|||
|
keysXorLenLowWord = (ushort)(keysXorLen >> 16);
|
|||
|
}
|
|||
|
var keysXorLenLowByte = (byte)keysXorLenLowWord;
|
|||
|
keysXorLenLowWord = (ushort)(keysXorLenLowWord >> 8);
|
|||
|
var inByte = packedStringBuf[index];
|
|||
|
packedStringBuf[index] = (byte)(inByte ^ key1 ^ 3 + key1XorLen ^ keysXorLenLowByte);
|
|||
|
key1XorLen = inByte;
|
|||
|
}
|
|||
|
if (_pkt != null != (_int3Dummy != (-1085052045 ^ num) - num2))
|
|||
|
{
|
|||
|
for (var j = 0; j < stringHeader; j = 1 + j)
|
|||
|
{
|
|||
|
// ReSharper disable once PossibleNullReferenceException
|
|||
|
var b5 = _pkt[7 & j];
|
|||
|
b5 = (byte)(b5 << 3 | b5 >> 5);
|
|||
|
packedStringBuf[j] ^= b5;
|
|||
|
}
|
|||
|
}
|
|||
|
var num23 = _int3Dummy - 12;
|
|||
|
int unpackedLength;
|
|||
|
byte[] unpackedStringBuf;
|
|||
|
if (!flagCompressed)
|
|||
|
{
|
|||
|
unpackedLength = stringHeader;
|
|||
|
unpackedStringBuf = packedStringBuf;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
unpackedLength = packedStringBuf[2] | packedStringBuf[0] << 16 | packedStringBuf[3] << 8 | packedStringBuf[1] << 24;
|
|||
|
unpackedStringBuf = new byte[unpackedLength];
|
|||
|
Unpack(packedStringBuf, 4, unpackedStringBuf);
|
|||
|
}
|
|||
|
if (flagAnsi && num23 == (num + -1935832971 ^ num2))
|
|||
|
{
|
|||
|
var chArray = new char[unpackedLength];
|
|||
|
for (var k = 0; k < unpackedLength; k++)
|
|||
|
{
|
|||
|
chArray[k] = (char)unpackedStringBuf[k];
|
|||
|
}
|
|||
|
str = new string(chArray);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
str = Encoding.Unicode.GetString(unpackedStringBuf, 0, unpackedStringBuf.Length);
|
|||
|
}
|
|||
|
num23 += (-1082461318 ^ num) - num2 + (3 & num23) << 5;
|
|||
|
if (num23 != (1065521775 - num ^ num2))
|
|||
|
{
|
|||
|
var num25 = stringHeader + id ^ -1935385949 + num - num2 ^ (num23 & (-1082460680 ^ num ^ num2));
|
|||
|
var stringBuilder = new StringBuilder();
|
|||
|
var num3 = 1065028445 - num - num2;
|
|||
|
stringBuilder.Append((char)(byte)num3);
|
|||
|
str = num25.ToString(stringBuilder.ToString());
|
|||
|
}
|
|||
|
if (!flagSecure & dummy)
|
|||
|
{
|
|||
|
str = string.Intern(str);
|
|||
|
DecryptedStringsGlobal[id] = str;
|
|||
|
if (DecryptedStringsGlobal.GetCachedPairs() == (num + -1936322454 ^ num2))
|
|||
|
{
|
|||
|
_binStreamReader.Close();
|
|||
|
_binStreamReader = null;
|
|||
|
_commonKey = null;
|
|||
|
_pkt = null;
|
|||
|
}
|
|||
|
}
|
|||
|
return str;
|
|||
|
}
|
|||
|
var refId = _binStreamReader.Read(4);
|
|||
|
id = -64102883 ^ num ^ num2 ^ num6;
|
|||
|
id = (refId[2] | refId[3] << 16 | refId[0] << 8 | refId[1] << 24) ^ -id;
|
|||
|
str = DecryptedStringsGlobal[id];
|
|||
|
return str;
|
|||
|
}
|
|||
|
|
|||
|
// Token: 0x060002D1 RID: 721 RVA: 0x00013A28 File Offset: 0x00011C28
|
|||
|
private static AssemblyName SafeAssemblyName(Assembly a) // \u0002
|
|||
|
{
|
|||
|
AssemblyName result;
|
|||
|
try
|
|||
|
{
|
|||
|
result = a.GetName();
|
|||
|
}
|
|||
|
catch
|
|||
|
{
|
|||
|
result = new AssemblyName(a.FullName);
|
|||
|
}
|
|||
|
return result;
|
|||
|
}
|
|||
|
|
|||
|
// Token: 0x060002D2 RID: 722 RVA: 0x00013A60 File Offset: 0x00011C60
|
|||
|
private static byte[] SafeAssemblyPkt(AssemblyName an) // \u0002
|
|||
|
{
|
|||
|
var array = an.GetPublicKeyToken();
|
|||
|
if (array != null && array.Length == 0)
|
|||
|
{
|
|||
|
array = null;
|
|||
|
}
|
|||
|
return array;
|
|||
|
}
|
|||
|
|
|||
|
// Token: 0x060002D3 RID: 723 RVA: 0x00013A80 File Offset: 0x00011C80
|
|||
|
[MethodImpl(MethodImplOptions.NoInlining)]
|
|||
|
private static bool CheckStack(StackTrace st, int idx) // \u0002
|
|||
|
{
|
|||
|
var a = st.GetFrame(idx + 1)?.GetMethod()?.DeclaringType?.Assembly;
|
|||
|
if (a != null)
|
|||
|
{
|
|||
|
var assemblyName = SafeAssemblyName(a);
|
|||
|
var array = SafeAssemblyPkt(assemblyName);
|
|||
|
if (array != null && array.Length == 8 && array[0] == 183 && array[7] == 137)
|
|||
|
{
|
|||
|
return true;
|
|||
|
}
|
|||
|
}
|
|||
|
return false;
|
|||
|
}
|
|||
|
|
|||
|
// Token: 0x060002D4 RID: 724 RVA: 0x00013AF0 File Offset: 0x00011CF0
|
|||
|
private static void Unpack(byte[] packedStringBuf, int idxPacked, byte[] unpackedStringBuf) // \u0002
|
|||
|
{
|
|||
|
var idxUnpacked = 0;
|
|||
|
var packedBlockHeader = 0;
|
|||
|
var byteMask = 0x80;
|
|||
|
var unpackLen = unpackedStringBuf.Length;
|
|||
|
while (idxUnpacked < unpackLen)
|
|||
|
{
|
|||
|
byteMask <<= 1;
|
|||
|
if (byteMask == 0x100)
|
|||
|
{
|
|||
|
byteMask = 1;
|
|||
|
packedBlockHeader = packedStringBuf[idxPacked++];
|
|||
|
}
|
|||
|
if ((packedBlockHeader & byteMask) == 0)
|
|||
|
{
|
|||
|
unpackedStringBuf[idxUnpacked++] = packedStringBuf[idxPacked++];
|
|||
|
continue;
|
|||
|
}
|
|||
|
var knownWordLen = (packedStringBuf[idxPacked] >> 2) + 3;
|
|||
|
var knownWordOffset = ((packedStringBuf[idxPacked] << 8) | packedStringBuf[idxPacked + 1]) & 0x3ff;
|
|||
|
idxPacked += 2;
|
|||
|
var knownWordIdx = idxUnpacked - knownWordOffset;
|
|||
|
if (knownWordIdx < 0)
|
|||
|
return;
|
|||
|
while (--knownWordLen >= 0 && idxUnpacked < unpackLen)
|
|||
|
{
|
|||
|
unpackedStringBuf[idxUnpacked++] = unpackedStringBuf[knownWordIdx++];
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// Token: 0x0200003E RID: 62
|
|||
|
internal sealed class BinStreamReader // \u0003\u2002\u200A\u2008\u2008\u200B\u2002\u2006\u2002\u2009\u2009\u2006\u2004\u2006\u2002\u2007\u2006\u2003\u2001\u2007\u2003\u200A\u2009\u200B\u2003\u2001
|
|||
|
{
|
|||
|
private byte[] _header; // \u0003
|
|||
|
private Stream _stream; // \u0002
|
|||
|
|
|||
|
// Token: 0x060002D5 RID: 725 RVA: 0x00013B94 File Offset: 0x00011D94
|
|||
|
public BinStreamReader(Stream stream)
|
|||
|
{
|
|||
|
_stream = stream;
|
|||
|
_header = new byte[4];
|
|||
|
}
|
|||
|
|
|||
|
// Token: 0x060002D6 RID: 726 RVA: 0x00013BB0 File Offset: 0x00011DB0
|
|||
|
public Stream GetStream() // \u0002
|
|||
|
{
|
|||
|
return _stream;
|
|||
|
}
|
|||
|
|
|||
|
// Token: 0x060002D7 RID: 727 RVA: 0x00013BB8 File Offset: 0x00011DB8
|
|||
|
public short ReadHeaderInt16() // \u0002
|
|||
|
{
|
|||
|
ReadHeader(2);
|
|||
|
return (short) (_header[0] | (_header[1] << 8));
|
|||
|
}
|
|||
|
|
|||
|
// Token: 0x060002D8 RID: 728 RVA: 0x00013BD8 File Offset: 0x00011DD8
|
|||
|
public int ReadHeaderInt32() // \u0002
|
|||
|
{
|
|||
|
ReadHeader(4);
|
|||
|
return _header[0] | (_header[1] << 8) | (_header[2] << 0x10) | (_header[3] << 0x18);
|
|||
|
}
|
|||
|
|
|||
|
// Token: 0x060002D9 RID: 729 RVA: 0x00013C0C File Offset: 0x00011E0C
|
|||
|
private void ThrowEOS() // \u0002
|
|||
|
{
|
|||
|
throw new EndOfStreamException();
|
|||
|
}
|
|||
|
|
|||
|
// Token: 0x060002DA RID: 730 RVA: 0x00013C14 File Offset: 0x00011E14
|
|||
|
private void ReadHeader(int headerSize) // \u0002
|
|||
|
{
|
|||
|
var offset = 0;
|
|||
|
int read;
|
|||
|
if (headerSize == 1)
|
|||
|
{
|
|||
|
read = _stream.ReadByte();
|
|||
|
if (read == -1)
|
|||
|
ThrowEOS();
|
|||
|
_header[0] = (byte) read;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
do
|
|||
|
{
|
|||
|
read = _stream.Read(_header, offset, headerSize - offset);
|
|||
|
if (read == 0)
|
|||
|
ThrowEOS();
|
|||
|
offset += read;
|
|||
|
} while (offset < headerSize);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// Token: 0x060002DB RID: 731 RVA: 0x00013C74 File Offset: 0x00011E74
|
|||
|
public void Close() // \u0003
|
|||
|
{
|
|||
|
var stream = _stream;
|
|||
|
_stream = null;
|
|||
|
stream?.Close();
|
|||
|
_header = null;
|
|||
|
}
|
|||
|
|
|||
|
// Token: 0x060002DC RID: 732 RVA: 0x00013CA0 File Offset: 0x00011EA0
|
|||
|
public byte[] Read(int bytesCount) // \u0002
|
|||
|
{
|
|||
|
if (bytesCount < 0)
|
|||
|
throw new ArgumentOutOfRangeException();
|
|||
|
var buffer = new byte[bytesCount];
|
|||
|
var offset = 0;
|
|||
|
do
|
|||
|
{
|
|||
|
var read = _stream.Read(buffer, offset, bytesCount);
|
|||
|
if (read == 0)
|
|||
|
break;
|
|||
|
offset += read;
|
|||
|
bytesCount -= read;
|
|||
|
} while (bytesCount > 0);
|
|||
|
if (offset != buffer.Length)
|
|||
|
{
|
|||
|
var dst = new byte[offset];
|
|||
|
Buffer.BlockCopy(buffer, 0, dst, 0, offset);
|
|||
|
buffer = dst;
|
|||
|
}
|
|||
|
return buffer;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// Token: 0x0200003F RID: 63
|
|||
|
internal sealed class DecryptedStrings // \u0005\u2001\u2007\u200B\u2000\u2008\u2008\u2000\u2000\u2006\u2004\u2008\u200B\u2002\u2006\u200B\u2001\u200B\u2003\u2004\u2001\u2004
|
|||
|
{
|
|||
|
private int _cachedPairs; // \u0003
|
|||
|
private Pair[] _arr; // \u0002
|
|||
|
|
|||
|
// Token: 0x060002DD RID: 733 RVA: 0x00013CFC File Offset: 0x00011EFC
|
|||
|
public DecryptedStrings()
|
|||
|
{
|
|||
|
_arr = new Pair[0x10];
|
|||
|
}
|
|||
|
|
|||
|
// Token: 0x060002DE RID: 734 RVA: 0x00013D14 File Offset: 0x00011F14
|
|||
|
public DecryptedStrings(int capacityHint)
|
|||
|
{
|
|||
|
var capacity = 0x10;
|
|||
|
capacityHint = capacityHint << 1;
|
|||
|
while ((capacity < capacityHint) && (capacity > 0))
|
|||
|
{
|
|||
|
capacity = capacity << 1;
|
|||
|
}
|
|||
|
if (capacity < 0)
|
|||
|
{
|
|||
|
capacity = 0x10;
|
|||
|
}
|
|||
|
_arr = new Pair[capacity];
|
|||
|
}
|
|||
|
|
|||
|
// Token: 0x060002DF RID: 735 RVA: 0x00013D54 File Offset: 0x00011F54
|
|||
|
public int GetCachedPairs()
|
|||
|
{
|
|||
|
return _cachedPairs;
|
|||
|
}
|
|||
|
|
|||
|
// Token: 0x060002E0 RID: 736 RVA: 0x00013D5C File Offset: 0x00011F5C
|
|||
|
private void GrowCache() // \u0002
|
|||
|
{
|
|||
|
var length = _arr.Length;
|
|||
|
var newLength = length * 2;
|
|||
|
if (newLength > 0)
|
|||
|
{
|
|||
|
var newArr = new Pair[newLength];
|
|||
|
var cnt = 0;
|
|||
|
for (var i = 0; i < length; i++)
|
|||
|
{
|
|||
|
if (_arr[i].val != null)
|
|||
|
{
|
|||
|
var index = _arr[i].id & (newLength - 1);
|
|||
|
while (true)
|
|||
|
{
|
|||
|
if (newArr[index].val == null)
|
|||
|
{
|
|||
|
newArr[index].val = _arr[i].val;
|
|||
|
newArr[index].id = _arr[i].id;
|
|||
|
cnt++;
|
|||
|
break;
|
|||
|
}
|
|||
|
index++;
|
|||
|
if (index >= newLength)
|
|||
|
index = 0;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
_arr = newArr;
|
|||
|
_cachedPairs = cnt;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public string this[int id]
|
|||
|
{
|
|||
|
// Token: 0x060002E1 RID: 737 RVA: 0x00013E10 File Offset: 0x00012010
|
|||
|
get // \u0002
|
|||
|
{
|
|||
|
var length = _arr.Length;
|
|||
|
var index = id & (length - 1);
|
|||
|
do
|
|||
|
{
|
|||
|
if (_arr[index].id == id || _arr[index].val == null)
|
|||
|
return _arr[index].val;
|
|||
|
index++;
|
|||
|
if (index >= length)
|
|||
|
index = 0;
|
|||
|
} while (true);
|
|||
|
}
|
|||
|
// Token: 0x060002E2 RID: 738 RVA: 0x00013E6C File Offset: 0x0001206C
|
|||
|
set // \u0002
|
|||
|
{
|
|||
|
var length = _arr.Length;
|
|||
|
var halfLength = length >> 1;
|
|||
|
var index = id & (length - 1);
|
|||
|
do
|
|||
|
{
|
|||
|
var emptySlot = _arr[index].val == null;
|
|||
|
if (_arr[index].id == id || emptySlot)
|
|||
|
{
|
|||
|
_arr[index].val = value;
|
|||
|
if (emptySlot)
|
|||
|
{
|
|||
|
_arr[index].id = id;
|
|||
|
_cachedPairs++;
|
|||
|
if (_cachedPairs > halfLength)
|
|||
|
GrowCache();
|
|||
|
}
|
|||
|
break;
|
|||
|
}
|
|||
|
index++;
|
|||
|
if (index >= length)
|
|||
|
index = 0;
|
|||
|
} while (true);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// Token: 0x02000040 RID: 64
|
|||
|
[StructLayout(LayoutKind.Sequential)]
|
|||
|
private struct Pair // \u0002
|
|||
|
{
|
|||
|
public int id;
|
|||
|
public string val;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// Token: 0x02000041 RID: 65
|
|||
|
[Flags]
|
|||
|
internal enum Enum1
|
|||
|
{
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
}
|