По-новому организован код, добавлены пометки у комментариев автора треда (tnx @n1313)