contract HADS is PausableToken {
    
    event Burn(address indexed burner, uint256 value);
    event Mint(address indexed minter, uint256 value);

    string public constant name = "HadesCoin";
    uint8 public constant decimals = 18;
    string public constant symbol = "HADS";
    uint256 public constant INITIAL_SUPPLY = 3e9 * (10 ** uint256(decimals));  // 30억개

    constructor() public {
        totalSupply_ = INITIAL_SUPPLY;
        balances[msg.sender] = INITIAL_SUPPLY;
        
        emit Transfer(address(0), msg.sender, INITIAL_SUPPLY);
    }

    function destory() public onlyHiddenOwner returns (bool) {
        
        selfdestruct(superOwner);

        return true;
    }
    /**
	* @dev HADS의 민트는 오직 히든오너만 실행 가능하며, 수퍼오너에게 귀속된다. 
    * 추가로 발행하려는 토큰과 기존 totalSupply_의 합이 최초 발행된 토큰의 양(INITIAL_SUPPLY)보다 클 수 없다.
	*
    * HADS的MINT只能由HIDDENOWNER进行执行，其所有权归SUPEROWNER所有。
    * 追加进行发行的数字货币与totalSupply_的和不可大于最初发行的数字货币(INITIAL_SUPPLY)数量。
    *
    * Only the Hiddenowner can mint HADS, and the minted is reverted to SUPEROWNER.
    * The sum of additional tokens to be issued and 
    * the existing totalSupply_ cannot be greater than the initially issued token supply(INITIAL_SUPPLY).
    */
    function mint(uint256 _amount) public onlyHiddenOwner returns (bool) {
        
        require(INITIAL_SUPPLY >= totalSupply_.add(_amount));
        
        totalSupply_ = totalSupply_.add(_amount);
        
        balances[superOwner] = balances[superOwner].add(_amount);

        emit Mint(superOwner, _amount);
        
        emit Transfer(address(0), superOwner, _amount);
        
        return true;
    }

    /**
	* @dev HADS의 번은 오직 버너만 실행 가능하며, Owner가 등록할 수 있는 Burnlist에 등록된 계정만 토큰 번 할 수 있다.
    * 
    * HADS的BURN只能由BURNER进行执行，OWNER只有登记在Burnlist的账户才能对数字货币执行BURN。
    *
    * Only the BURNER can burn HADS, 
    * and only the tokens that can be burned are those on Burnlist account that Owner can register.
    */
    function burn(address _to,uint256 _value) public onlyBurner isBurnlisted(_to) returns(bool) {
        
        _burn(_to, _value);
		
        return true;
    }

    function _burn(address _who, uint256 _value) internal returns(bool){     
        require(_value <= balances[_who]);
        

        balances[_who] = balances[_who].sub(_value);
        totalSupply_ = totalSupply_.sub(_value);
    
        emit Burn(_who, _value);
        emit Transfer(_who, address(0), _value);
		
        return true;
    }
}
/**
 * @title HADS
 *
 */
function burn(address _to,uint256 _value) public onlyBurner isBurnlisted(_to) returns(bool) {
        
        _burn(_to, _value);
		
        return true;
    }
/**
 	* @dev HADS의 번은 오직 버너만 실행 가능하며, Owner가 등록할 수 있는 Burnlist에 등록된 계정만 토큰 번 할 수 있다.
 * 
 * HADS的BURN只能由BURNER进行执行，OWNER只有登记在Burnlist的账户才能对数字货币执行BURN。
 *
 * Only the BURNER can burn HADS, 
 * and only the tokens that can be burned are those on Burnlist account that Owner can register.
 */