time = (distance / flatSpeed) + (ascent/100)×(climbPenalty/60) + (descent/100)×(descentPenalty/60), then × terrain factor, then + rest.