public static T GetGroupValueWithAdd <T>(string group, string key, T defaultValue)
    {
        if (!INISetting.groups.ContainsKey(group))
        {
            string str = "";
            foreach (KeyValuePair <string, INISetting.INI_Values> group1 in INISetting.groups)
            {
                str += string.Format("[{0}]\r\n", (object)group1.Key);
                foreach (KeyValuePair <string, INISetting.ValueResult> keyValuePair in (Dictionary <string, INISetting.ValueResult>)group1.Value)
                {
                    str += string.Format("{0}={1}\r\n", (object)keyValuePair.Key, (object)keyValuePair.Value.ToString());
                }
            }
            File.WriteAllText("settings.ini", str + string.Format("[{0}]\r\n", (object)group) + string.Format("{0}={1}\r\n", (object)key, (object)defaultValue), Encoding.UTF8);
            T obj = defaultValue;
            INISetting.INI_Values iniValues = new INISetting.INI_Values();
            iniValues.Add(key, new INISetting.ValueResult(defaultValue.ToString()));
            INISetting.groups.Add(group, iniValues);
            return(obj);
        }
        INISetting.INI_Values group2 = INISetting.groups[group];
        T obj1;

        if (!group2.ContainsKey(key) || group2[key].IsEmpty)
        {
            obj1 = defaultValue;
            string contents = "";
            bool   flag     = group2.ContainsKey(key);
            if (flag && group2[key].IsEmpty)
            {
                group2[key] = new INISetting.ValueResult(defaultValue.ToString());
            }
            else if (!flag)
            {
                group2.Add(key, new INISetting.ValueResult(defaultValue.ToString()));
            }
            foreach (KeyValuePair <string, INISetting.INI_Values> group1 in INISetting.groups)
            {
                contents += string.Format("[{0}]\r\n", (object)group1.Key);
                foreach (KeyValuePair <string, INISetting.ValueResult> keyValuePair in (Dictionary <string, INISetting.ValueResult>)group1.Value)
                {
                    contents += string.Format("{0}={1}\r\n", (object)keyValuePair.Key, (object)keyValuePair.Value.ToString());
                }
            }
            File.WriteAllText("settings.ini", contents, Encoding.UTF8);
        }
        else
        {
            obj1 = group2[key].GetValue <T>();
        }
        return(obj1);
    }
    static INISetting()
    {
        if (!File.Exists("settings.ini"))
        {
            return;
        }
        string[] strArray1 = File.ReadAllLines("settings.ini");
        string   key1      = INISetting.defaultGroup;

        for (int index = 0; index < strArray1.Length; ++index)
        {
            if (!string.IsNullOrEmpty(strArray1[index]) && !strArray1[index].TrimStart().StartsWith("#"))
            {
                if (strArray1[index].TrimStart().StartsWith("[") && strArray1[index].Contains("]"))
                {
                    int startIndex = strArray1[index].IndexOf("[") + 1;
                    int num        = strArray1[index].IndexOf("]");
                    key1 = strArray1[index].Substring(startIndex, num - startIndex);
                    if (!INISetting.groups.ContainsKey(key1))
                    {
                        INISetting.groups.Add(key1, new INISetting.INI_Values());
                    }
                }
                else
                {
                    string[] strArray2 = strArray1[index].Split(new char[1]
                    {
                        '='
                    }, StringSplitOptions.RemoveEmptyEntries);
                    string key2 = strArray2[0].Trim().Replace("&equal;", "=");
                    INISetting.ValueResult valueResult = strArray2.Length != 2 ? new INISetting.ValueResult("") : new INISetting.ValueResult(strArray2[1].Trim().Replace("&equal;", "="));
                    if (!INISetting.groups.ContainsKey(key1))
                    {
                        INISetting.groups.Add(key1, new INISetting.INI_Values());
                    }
                    INISetting.groups[key1][key2] = valueResult;
                }
            }
        }
    }