first release!!! Warning! this code so hard :)