private static void LoadAndParseWhitelist()
        {
            whitelistPath = ACTkEditorGlobalStuff.ResolveInjectionUserWhitelistPath();
            if (string.IsNullOrEmpty(whitelistPath) || !File.Exists(whitelistPath))
            {
                return;
            }

            string[] separator = { ACTkEditorGlobalStuff.InjectionDataSeparator };

            var fs = new FileStream(whitelistPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
            var br = new BinaryReader(fs);

            var count = br.ReadInt32();

            for (var i = 0; i < count; i++)
            {
                var line = br.ReadString();
                line = ObscuredString.EncryptDecrypt(line, "Elina");
                var strArr       = line.Split(separator, StringSplitOptions.RemoveEmptyEntries);
                var stringsCount = strArr.Length;
                if (stringsCount > 1)
                {
                    var assemblyName = strArr[0];

                    var hashes = new int[stringsCount - 1];
                    for (var j = 1; j < stringsCount; j++)
                    {
                        var parseResult = 0;
                        var success     = int.TryParse(strArr[j], out parseResult);
                        if (success)
                        {
                            hashes[j - 1] = parseResult;
                        }
                        else
                        {
                            Debug.LogError("Could not parse value: " + strArr[j] + ", line:\n" + line);
                        }
                    }

                    whitelist.Add(new AllowedAssembly(assemblyName, hashes));
                }
                else
                {
                    Debug.LogWarning("Error parsing whitelist file line! Please report to " + ACTkEditorGlobalStuff.ReportEmail);
                }
            }

            br.Close();
            fs.Close();
        }