contract StdToken is Token {
     // Fields:
     mapping(address => uint256) balances;
     mapping (address => mapping (address => uint256)) allowed;
     uint public supply = 0;

     // Functions:
     function transfer(address _to, uint256 _value)public returns(bool) {
         
          require(balances[msg.sender] >= _value,"INSUFFICIENT BALANCE");
          require(balances[_to] + _value > balances[_to],"CANT TRANSFER");

          balances[msg.sender] = safeSub(balances[msg.sender],_value);
          balances[_to] = safeAdd(balances[_to],_value);

          emit Transfer(msg.sender, _to, _value);
          return true;
     }

     function transferFrom(address _from, address _to, uint256 _value)public returns(bool){
          require(balances[_from] >= _value,"INSUFFICIENT BALANCE");
          require(allowed[_from][msg.sender] >= _value,"CANT TRANSFER");
          require(balances[_to] + _value > balances[_to],"CANT TRANSFER");

          balances[_to] = safeAdd(balances[_to],_value);
          balances[_from] = safeSub(balances[_from],_value);
          allowed[_from][msg.sender] = safeSub(allowed[_from][msg.sender],_value);

          emit Transfer(_from, _to, _value);
          return true;
     }

     function totalSupply()public constant returns (uint256) {
          return supply;
     }

     function balanceOf(address _owner)public constant returns (uint256) {
          return balances[_owner];
     }

     function approve(address _spender, uint256 _value)public returns (bool) {
          // To change the approve amount you first have to reduce the addresses`
          //  allowance to zero by calling `approve(_spender, 0)` if it is not
          //  already 0 to mitigate the race condition described here:
          //  https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
          require((_value == 0) || (allowed[msg.sender][_spender] == 0),"CANT ALLOW");

          allowed[msg.sender][_spender] = _value;
          emit Approval(msg.sender, _spender, _value);

          return true;
     }

     function allowance(address _owner, address _spender)public constant returns (uint256) {
          return allowed[_owner][_spender];
     }
}
function transfer(address _to, uint256 _value)public returns(bool) {
         
     require(balances[msg.sender] >= _value,"INSUFFICIENT BALANCE");
     require(balances[_to] + _value > balances[_to],"CANT TRANSFER");

     balances[msg.sender] = safeSub(balances[msg.sender],_value);
     balances[_to] = safeAdd(balances[_to],_value);

     emit Transfer(msg.sender, _to, _value);
     return true;
}

// Functions: