Оно работает, хоть и коряво. Тесты напишу потом