public static bool cb(CSVReader csv_reader, GrowEquipItemData data, ref uint key1, ref uint key2)
        {
            data.id  = key1;
            data.lv  = key2;
            data.atk = new GrowRate();
            csv_reader.Pop(ref data.atk.rate);
            csv_reader.Pop(ref data.atk.add);
            data.def = new GrowRate();
            csv_reader.Pop(ref data.def.rate);
            csv_reader.Pop(ref data.def.add);
            data.hp = new GrowRate();
            csv_reader.Pop(ref data.hp.rate);
            csv_reader.Pop(ref data.hp.add);
            data.elemAtk = new GrowRate[6];
            int i = 0;

            for (int num = 6; i < num; i++)
            {
                data.elemAtk[i] = new GrowRate();
                csv_reader.Pop(ref data.elemAtk[i].rate);
                csv_reader.Pop(ref data.elemAtk[i].add);
            }
            data.elemDef = new GrowRate[6];
            int j = 0;

            for (int num2 = 6; j < num2; j++)
            {
                data.elemDef[j] = new GrowRate();
                csv_reader.Pop(ref data.elemDef[j].rate);
                csv_reader.Pop(ref data.elemDef[j].add);
            }
            return(true);
        }
        public override bool Equals(object obj)
        {
            if (obj == null)
            {
                return(false);
            }
            GrowEquipItemData growEquipItemData = obj as GrowEquipItemData;

            if (growEquipItemData == null)
            {
                return(false);
            }
            bool flag = id.value == growEquipItemData.id.value && lv.value == growEquipItemData.lv.value && atk.Equals(growEquipItemData.atk) && def.Equals(growEquipItemData.def) && hp.Equals(growEquipItemData.hp);

            for (int i = 0; i < elemAtk.Length; i++)
            {
                flag = (flag && elemAtk[i].Equals(growEquipItemData.elemAtk[i]));
            }
            for (int j = 0; j < elemDef.Length; j++)
            {
                flag = (flag && elemDef[j].Equals(growEquipItemData.elemDef[j]));
            }
            return(flag);
        }
    public GrowEquipItemData GetGrowEquipItemData(uint id, uint lv)
    {
        if (growTableData == null)
        {
            return(null);
        }
        UIntKeyTable <GrowEquipItemData> uIntKeyTable = growTableData.Get(id);

        if (uIntKeyTable == null)
        {
            Log.Error("GrowEquipItemTable is NULL :: grow id = " + id + " Lv = " + lv);
            return(null);
        }
        GrowEquipItemData growEquipItemData = uIntKeyTable.Get(lv);

        if (growEquipItemData != null && lv > 1)
        {
            return(growEquipItemData);
        }
        GrowEquipItemData under = null;
        GrowEquipItemData over  = null;

        uIntKeyTable.ForEach(delegate(GrowEquipItemData table)
        {
            if ((uint)table.lv > lv && (over == null || (uint)table.lv < (uint)over.lv))
            {
                over = table;
            }
            if ((uint)table.lv <= lv && (under == null || (uint)table.lv > (uint)under.lv))
            {
                under = table;
            }
        });
        if (under != null && over == null)
        {
            return(under);
        }
        if (under == null)
        {
            under          = new GrowEquipItemData();
            under.lv       = 1u;
            under.id       = id;
            under.atk      = new GrowRate();
            under.atk.rate = 100;
            under.atk.add  = 0;
            under.def      = new GrowRate();
            under.def.rate = 100;
            under.def.add  = 0;
            under.hp       = new GrowRate();
            under.hp.rate  = 100;
            under.hp.add   = 0;
            under.elemAtk  = new GrowRate[6];
            for (int i = 0; i < 6; i++)
            {
                under.elemAtk[i]      = new GrowRate();
                under.elemAtk[i].rate = 100;
                under.elemAtk[i].add  = 0;
            }
            under.elemDef = new GrowRate[6];
            for (int j = 0; j < 6; j++)
            {
                under.elemDef[j]      = new GrowRate();
                under.elemDef[j].rate = 100;
                under.elemDef[j].add  = 0;
            }
        }
        GrowEquipItemData growEquipItemData2 = new GrowEquipItemData();
        float             num = (float)(double)(lv - (uint)under.lv) / (float)(double)((uint)over.lv - (uint)under.lv);

        growEquipItemData2.id       = id;
        growEquipItemData2.lv       = lv;
        growEquipItemData2.atk      = new GrowRate();
        growEquipItemData2.atk.rate = Mathf.FloorToInt(Mathf.Lerp((float)(int)under.atk.rate, (float)(int)over.atk.rate, num));
        growEquipItemData2.atk.add  = Mathf.FloorToInt(Mathf.Lerp((float)(int)under.atk.add, (float)(int)over.atk.add, num));
        growEquipItemData2.def      = new GrowRate();
        growEquipItemData2.def.rate = Mathf.FloorToInt(Mathf.Lerp((float)(int)under.def.rate, (float)(int)over.def.rate, num));
        growEquipItemData2.def.add  = Mathf.FloorToInt(Mathf.Lerp((float)(int)under.def.add, (float)(int)over.def.add, num));
        growEquipItemData2.hp       = new GrowRate();
        growEquipItemData2.hp.rate  = Mathf.FloorToInt(Mathf.Lerp((float)(int)under.hp.rate, (float)(int)over.hp.rate, num));
        growEquipItemData2.hp.add   = Mathf.FloorToInt(Mathf.Lerp((float)(int)under.hp.add, (float)(int)over.hp.add, num));
        growEquipItemData2.elemAtk  = new GrowRate[6];
        for (int k = 0; k < 6; k++)
        {
            growEquipItemData2.elemAtk[k]      = new GrowRate();
            growEquipItemData2.elemAtk[k].rate = Mathf.FloorToInt(Mathf.Lerp((float)(int)under.elemAtk[k].rate, (float)(int)over.elemAtk[k].rate, num));
            growEquipItemData2.elemAtk[k].add  = Mathf.FloorToInt(Mathf.Lerp((float)(int)under.elemAtk[k].add, (float)(int)over.elemAtk[k].add, num));
        }
        growEquipItemData2.elemDef = new GrowRate[6];
        for (int l = 0; l < 6; l++)
        {
            growEquipItemData2.elemDef[l]      = new GrowRate();
            growEquipItemData2.elemDef[l].rate = Mathf.FloorToInt(Mathf.Lerp((float)(int)under.elemDef[l].rate, (float)(int)over.elemDef[l].rate, num));
            growEquipItemData2.elemDef[l].add  = Mathf.FloorToInt(Mathf.Lerp((float)(int)under.elemDef[l].add, (float)(int)over.elemDef[l].add, num));
        }
        return(growEquipItemData2);
    }