Contract Address (999) - 0xC0DBbAd4aDF1728f2c90Dd7Cdb9536600a6337d9

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
contract CustomToken is ERC20, Ownable {
    constructor(
        string memory name,
        string memory symbol,
        uint256 initialSupply,
        address initialOwner
    ) ERC20(name, symbol) Ownable(initialOwner) {
        _mint(initialOwner, initialSupply * 10**decimals());
    }
}
contract TokenDeployer {
    event TokenDeployed(address tokenAddress, address owner, string name, string symbol, uint256 supply);
    function deployToken(
        string memory name,
        string memory symbol,
        uint256 initialSupply
    ) external returns (address) {
        CustomToken token = new CustomToken(name, symbol, initialSupply, msg.sender);
        emit TokenDeployed(address(token), msg.sender, name, symbol, initialSupply);
        return address(token);
    }
}