added Machine abstract class