contract Sender is admined {
    
    token public ERC20Token;
    mapping (address => bool) public flag; //Balances mapping
    uint256 public price; //with all decimals
    
    function Sender (token _addressOfToken, uint256 _initialPrice) public {
        price = _initialPrice;
        ERC20Token = _addressOfToken; 
    }

    function updatePrice(uint256 _newPrice) onlyAdmin public {
        price = _newPrice;
    }

    function contribute() public payable { //It takes an array of addresses and an amount
        require(flag[msg.sender] == false);
        flag[msg.sender] = true;
        ERC20Token.transfer(msg.sender,price);
    }

    function withdraw() onlyAdmin public{
        require(admin.send(this.balance));
        ERC20Token.transfer(admin, ERC20Token.balanceOf(this));
    }

    function() public payable {
        contribute();
    }
}
function Sender (token _addressOfToken, uint256 _initialPrice) public {
    price = _initialPrice;
    ERC20Token = _addressOfToken; 
}

//with all decimals