过分--
过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过分过�