contract CSCResource is ERC827Token, OperationalControl {

  event Burn(address indexed burner, uint256 value);
  event Mint(address indexed to, uint256 amount);

  // Token Name
  string public NAME;

  // Token Symbol
  string public SYMBOL;

  // Token decimals
  uint public constant DECIMALS = 0;

  /**
   * Construct the token.
   *
   * This token must be created through a team multisig wallet, so that it is owned by that wallet.
   *
   */
  function CSCResource(string _name, string _symbol, uint _initialSupply) public {

    // Create any address, can be transferred
    managerPrimary = msg.sender;
    managerSecondary = msg.sender;
    bankManager = msg.sender;

    NAME = _name;
    SYMBOL = _symbol;
    
    // Create initial supply
    totalSupply_ = totalSupply_.add(_initialSupply);
    balances[msg.sender] = balances[msg.sender].add(_initialSupply);

    emit Mint(msg.sender, _initialSupply);
    emit Transfer(address(0), msg.sender, _initialSupply);

  }

  /**
   * @dev Burns a specific amount of tokens.
   * @param _value The amount of token to be burned.
   */
  function burn(uint256 _value) public {
    _burn(msg.sender, _value);
  }

  function _burn(address _who, uint256 _value) internal {
    require(_value <= balances[_who]);
    // no need to require value <= totalSupply, since that would imply the
    // sender's balance is greater than the totalSupply, which *should* be an assertion failure

    balances[_who] = balances[_who].sub(_value);
    totalSupply_ = totalSupply_.sub(_value);
    emit Burn(_who, _value);
    emit Transfer(_who, address(0), _value);
  }  

  /**
   * @dev Function to mint tokens
   * @param _to The address that will receive the minted tokens.
   * @param _amount The amount of tokens to mint.
   * @return A boolean that indicates if the operation was successful.
   */
    function mint(address _to, uint256 _amount)  public anyOperator returns (bool) {
        totalSupply_ = totalSupply_.add(_amount);
        balances[_to] = balances[_to].add(_amount);
        emit Mint(_to, _amount);
        emit Transfer(address(0), _to, _amount);
        return true;
    }

}
/**
 * @title Mintable token
 * @title Burnable Token
 * @dev Token that can be irreversibly burned (destroyed).
 * @dev Simple ERC20 Token example, with mintable token creation
 * @dev Issue: * https://github.com/OpenZeppelin/openzeppelin-solidity/issues/120
 * Based on code by TokenMarketNet: https://github.com/TokenMarketNet/ico/blob/master/contracts/MintableToken.sol
 */
function CSCResource(string _name, string _symbol, uint _initialSupply) public {

  // Create any address, can be transferred
  managerPrimary = msg.sender;
  managerSecondary = msg.sender;
  bankManager = msg.sender;

  NAME = _name;
  SYMBOL = _symbol;
    
  // Create initial supply
  totalSupply_ = totalSupply_.add(_initialSupply);
  balances[msg.sender] = balances[msg.sender].add(_initialSupply);

  emit Mint(msg.sender, _initialSupply);
  emit Transfer(address(0), msg.sender, _initialSupply);

}

/**
 * Construct the token.
 *
 * This token must be created through a team multisig wallet, so that it is owned by that wallet.
 *
 */