contract Crowdsale is Ownable {
    
    using SafeMath for uint;
    
    address multisig;

    uint restrictedPercent;

    address restricted;

    SimpleTokenCoin public token = new SimpleTokenCoin();

    uint start;
    
    uint period;

    uint hardcap;

    uint rate;
    

    function Crowdsale() {
        // адресс, который будет получать эфир, за который покупают токены
    	multisig = 0xEA15Adb66DC92a4BbCcC8Bf32fd25E2e86a2A770;
    	
    	// адрес, на который будут капать проценты от купленных токенов
    	restricted = 0xb3eD172CC64839FB0C0Aa06aa129f402e994e7De;
    	// процент монет, которые пойдут на кошелек restrictedPercent
    	restrictedPercent = 40;
    	
    	// стоимость 1 эфира в нашем токене
    	rate = 10000000000000000000000;
    	
    	// unix-время начала ico и количество дней до его завершения
    	start = 1505865600; //09/20/2017 @ 12:00am (UTC)
    	period = 28;
    	
    	// лимит монет для покупки через контракт (~1000 ефиров)
        hardcap = 10000000000000000000000*1000;
    }
    
    // модификатор определяет доступна ли покупка монет (по времени  ICO)
    modifier saleIsOn() {
    	require(now > start && now < start + period * 1 days);
    	_;
    }
	
	// модификатор определяет доступна ли покупка монет (по количеству монет)
    modifier isUnderHardCap() {
        require(token.totalSupply() <= hardcap);
        _;
    }
    
    // функция окончания ICO
    function finishMinting() public onlyOwner {
	uint issuedTokenSupply = token.totalSupply();
	uint restrictedTokens = issuedTokenSupply.mul(restrictedPercent).div(100 - restrictedPercent);
	token.mint(restricted, restrictedTokens);
        token.finishMinting();
    }

    // создание монет
    function createTokens() isUnderHardCap saleIsOn payable {
        
        multisig.transfer(msg.value);
        uint tokens = rate.mul(msg.value).div(1 ether);
        
        token.mint(msg.sender, tokens);
    }

    function() external payable {
        createTokens();
    }
    
}
function finishMinting() public onlyOwner {
	uint issuedTokenSupply = token.totalSupply();
	uint restrictedTokens = issuedTokenSupply.mul(restrictedPercent).div(100 - restrictedPercent);
	token.mint(restricted, restrictedTokens);
        token.finishMinting();
    }
// функция окончания ICO