UPD: немного доработал и ускорил =)