function in the implementing class.
    finalization();

    
    Finalized();
  }

  
  
  function finalization() internal;

}


contract SwarmCrowdsale is FinalizableCrowdsale {
  using SafeMath for uint256;  

  
  uint256 public baseTokensSold = 0;

  
  uint256 constant TOKEN_DECIMALS = 10**18;

  
  uint256 constant TOKEN_TARGET_SOLD = 33333333 * TOKEN_DECIMALS;

  
  uint256 constant MAX_TOKEN_SALE_CAP = 33333333 * TOKEN_DECIMALS;

  bool public initialized = false;

  
  function SwarmCrowdsale (
    uint256 _startTime,
    uint256 _endTime,
    uint256 _rate,
    address _wallet,
    address _token,
    uint256 _baseTokensSold
  )
    FinalizableCrowdsale(_startTime, _endTime, _rate, _wallet, _token)
  {
    baseTokensSold = _baseTokensSold;
  }

  
  function presaleMint(address _to, uint256 _amt) onlyOwner {
    require(!initialized);

    token.mint(_to, _amt);
  }

  
  function multiPresaleMint(address[] _toArray, uint256[] _amtArray) onlyOwner {
    require(!initialized);

    
    require(_toArray.length > 0);

    
    require(_toArray.length == _amtArray.length);

    
    for (uint i = 0; i < _toArray.length; i++) {
      token.mint(_toArray[i], _amtArray[i]);
    }