private Tech AIBaseSelectNextTech(
            StrategicAI ai,
            List <PlayerTechInfo> desiredTech      = null,
            Dictionary <string, int> familyWeights = null)
        {
            Tech tech            = (((Tech)null ?? this.AISelectPartialTech(ai)) ?? AIResearchFramework.AISelectBinaryResponseTech(ai)) ?? this.AISelectDefaultTech(ai, desiredTech, familyWeights);
            Tech researchingTech = AIResearchFramework.AIGetResearchingTech(ai);

            if (tech != null && tech != researchingTech)
            {
                if (this._log != null)
                {
                    if (researchingTech != null)
                    {
                        this._log.Print(string.Format("\n          >>> {0} (replacing {1})\n", (object)tech.Id, (object)researchingTech.Id));
                    }
                    else
                    {
                        this._log.Print(string.Format("\n          >>> {0}\n", (object)tech.Id));
                    }
                }
                return(tech);
            }
            if (this._log != null)
            {
                this._log.ClearRecord();
            }
            return((Tech)null);
        }