func: function init(
          uint256 _startTime,
          uint256 _endTime,
          address _whitelist,
          address _starToken,
          address _companyToken,
          uint256 _rate,
          uint256 _starRate,
          address _wallet,
          uint256 _crowdsaleCap,
          bool    _isWeiAccepted
      )
          external
      {
          require(
              whitelist == address(0) &&
              starToken == address(0) &&
              rate == 0 &&
              starRate == 0 &&
              tokenOnSale == address(0) &&
              crowdsaleCap == 0,
              "Global variables should not have been set before!"
          );
  
          require(
              _whitelist != address(0) &&
              _starToken != address(0) &&
              !(_rate == 0 && _starRate == 0) &&
              _companyToken != address(0) &&
              _crowdsaleCap != 0,
              "Parameter variables cannot be empty!"
          );
  
          initCrowdsale(_startTime, _endTime, _rate, _wallet);
          tokenOnSale = CompanyToken(_companyToken);
          whitelist = Whitelist(_whitelist);
          starToken = StandardToken(_starToken);
          starRate = _starRate;
          isWeiAccepted = _isWeiAccepted;
          owner = tx.origin;
  
          initialTokenOwner = CompanyToken(tokenOnSale).owner();
          uint256 tokenDecimals = CompanyToken(tokenOnSale).decimals();
          crowdsaleCap = _crowdsaleCap.mul(10 ** tokenDecimals);
  
          require(CompanyToken(tokenOnSale).paused(), "Company token must be paused upon initialization!");
      }