ETH Price: $3,542.08 (-7.89%)

Token

ERC-20: KEYS MAXI (LKEYS)
 

Overview

Max Total Supply

59,200,302.063839517 LKEYS

Holders

452

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
11,142.573793407 LKEYS

Value
$0.00
0x446fca5d20acf27be30c983ebcc97caf56b635b3
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
LockedKeys

Compiler Version
v0.8.14+commit.80d49f37

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 1 : LockedKEYS.sol
//SPDX-License-Identifier: MIT
pragma solidity 0.8.14;

interface IERC20 {

    function totalSupply() external view returns (uint256);
    
    function symbol() external view returns(string memory);
    
    function name() external view returns(string memory);

    function balanceOf(address account) external view returns (uint256);
    
    function decimals() external view returns (uint8);

    function transfer(address recipient, uint256 amount) external returns (bool);

    function allowance(address owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);
}

library SafeMath {

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

/**
 * @title Owner
 * @dev Set & change owner
 */
contract Ownable {

    address private owner;
    
    // event for EVM logging
    event OwnerSet(address indexed oldOwner, address indexed newOwner);
    
    // modifier to check if caller is owner
    modifier onlyOwner() {
        // If the first argument of 'require' evaluates to 'false', execution terminates and all
        // changes to the state and to Ether balances are reverted.
        // This used to consume all gas in old EVM versions, but not anymore.
        // It is often a good idea to use 'require' to check if functions are called correctly.
        // As a second argument, you can also provide an explanation about what went wrong.
        require(msg.sender == owner, "Caller is not owner");
        _;
    }
    
    /**
     * @dev Set contract deployer as owner
     */
    constructor() {
        owner = msg.sender; // 'msg.sender' is sender of current call, contract deployer for a constructor
        emit OwnerSet(address(0), owner);
    }

    /**
     * @dev Change owner
     * @param newOwner address of new owner
     */
    function changeOwner(address newOwner) public onlyOwner {
        emit OwnerSet(owner, newOwner);
        owner = newOwner;
    }

    /**
     * @dev Return owner address 
     * @return address of owner
     */
    function getOwner() external view returns (address) {
        return owner;
    }
}
/**
    Locked KEYS Contract
    Auto Compounding Staking Protocol
 */
contract LockedKeys is Ownable, IERC20 {

    using SafeMath for uint256;

    // Staking Token
    IERC20 public immutable token;

    // Staking Protocol Token Info
    string private _name;
    string private _symbol;
    uint8 private immutable _decimals;

    // Trackable User Info
    struct UserInfo {
        uint256 balance;
        uint256 unlockBlock;
        uint256 totalStaked;
        uint256 totalWithdrawn;
    }
    // User -> UserInfo
    mapping ( address => UserInfo ) public userInfo;

    // Unstake Early Fee
    uint256 public leaveEarlyFee;

    // Timer For Leave Early Fee
    uint256 public leaveEarlyFeeTimer;

    // total supply of MAXI
    uint256 private _totalShares;

    // Swapper To Purchase Token From ETH
    address public tokenSwapper;

    // precision factor
    uint256 private constant precision = 10**18;

    // Reentrancy Guard
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;
    uint256 private _status;
    modifier nonReentrant() {
        require(_status != _ENTERED, "Reentrancy Guard call");
        _status = _ENTERED;
        _;
        _status = _NOT_ENTERED;
    }

    // Events
    event PriceChange(uint256 previous, uint256 current, uint256 totalMAXISupply);
    event Deposit(address depositor, uint256 amountToken);
    event Withdraw(address withdrawer, uint256 amountToken);
    event FeeTaken(uint256 fee);

    constructor(
        string memory name_, 
        string memory symbol_,
        address token_,
        address tokenSwapper_,
        uint256 leaveEarlyFee_,
        uint256 leaveEarlyFeeTimer_
    ) {

        require(token_ != address(0), 'Zero Address');
        require(tokenSwapper_ != address(0), 'Zero Address');
        require(leaveEarlyFee_ <= 100, 'Fee Too High');
        require(leaveEarlyFeeTimer_ <= 10**7, 'Fee Timer Too Long');

        // pair token data
        _name = name_;
        _symbol = symbol_;
        _decimals = IERC20(token_).decimals();

        // staking data
        leaveEarlyFee = leaveEarlyFee_;
        leaveEarlyFeeTimer = leaveEarlyFeeTimer_;
        tokenSwapper = tokenSwapper_;

        // pair staking token
        token = IERC20(token_);

        // set reentrancy
        _status = _NOT_ENTERED;
        
        // emit transfer so bscscan registers contract as token
        emit Transfer(address(0), msg.sender, 0);
    }

    function name() external view override returns (string memory) {
        return _name;
    }
    function symbol() external view override returns (string memory) {
        return _symbol;
    }
    function decimals() external view override returns (uint8) {
        return _decimals;
    }
    function totalSupply() external view override returns (uint256) {
        return token.balanceOf(address(this));
    }

    /** Shows The Value Of Users' Staked Token */
    function balanceOf(address account) public view override returns (uint256) {
        return ReflectionsFromContractBalance(userInfo[account].balance);
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        if (recipient == msg.sender) {
            withdraw(amount);
        }
        return true;
    }
    function transferFrom(address, address recipient, uint256 amount) external override returns (bool) {
        if (recipient == msg.sender) {
            withdraw(amount);
        }        
        return true;
    }

    function setLeaveEarlyFee(uint256 newLeaveEarlyFee) external onlyOwner {
        require(
            newLeaveEarlyFee <= 100,
            'Early Fee Too High'
        );
        leaveEarlyFee = newLeaveEarlyFee;
    }
    function setLeaveEarlyFeeTimer(uint256 newLeaveEarlyFeeTimer) external onlyOwner {
        require(
            newLeaveEarlyFeeTimer <= 10**7,
            'Fee Timer Too High'
        );
        leaveEarlyFeeTimer = newLeaveEarlyFeeTimer;
    }
    function setTokenSwapper(address newTokenSwapper) external onlyOwner {
        require(
            newTokenSwapper != address(0),
            'Zero Address'
        );
        tokenSwapper = newTokenSwapper;
    }

    function withdrawETH() external onlyOwner {
        (bool s,) = payable(msg.sender).call{value: address(this).balance}("");
        require(s, 'Error On ETH Withdrawal');
    }

    function recoverForeignToken(IERC20 _token) external onlyOwner {
        require(
            address(_token) != address(token),
            'Cannot Withdraw Staking Tokens'
        );
        require(
            _token.transfer(msg.sender, _token.balanceOf(address(this))),
            'Error Withdrawing Foreign Token'
        );
    }

    /** 
        ETH Sent To Contract Will Buy And Stake Token
     */
    receive() external payable {
        _deposit(msg.value, true);
    }

    /**
        Transfers in `amount` of Token From Sender
        And Locks In Contract, Minting MAXI Tokens
     */
    function deposit(uint256 amount) external {
        _deposit(amount, false);
    }

    /**
        Redeems `amount` of Underlying Tokens, As Seen From BalanceOf()
     */
    function withdraw(uint256 amount) public nonReentrant returns (uint256) {

        // Token Amount Into Contract Balance Amount
        uint MAXI_Amount = amount == balanceOf(msg.sender) ? userInfo[msg.sender].balance : TokenToContractBalance(amount);

        require(
            userInfo[msg.sender].balance > 0 &&
            userInfo[msg.sender].balance >= MAXI_Amount &&
            balanceOf(msg.sender) >= amount &&
            amount > 0 &&
            MAXI_Amount > 0,
            'Insufficient Funds'
        );

        // burn MAXI Tokens From Sender
        _burn(msg.sender, MAXI_Amount, amount);

        // increment total withdrawn
        userInfo[msg.sender].totalWithdrawn += amount;

        // Take Fee If Withdrawn Before Timer
        uint fee = remainingLockTime(msg.sender) == 0 ? 100 : amount.mul(leaveEarlyFee).div(1000);

        // send amount less fee
        uint256 sendAmount = amount.sub(fee);

        // ensure round off protection
        uint256 bal = token.balanceOf(address(this));
        if (sendAmount > bal) {
            sendAmount = bal;
        }

        // transfer amount to sender
        require(
            token.transfer(msg.sender, sendAmount),
            'Error On Token Transfer'
        );

        // emit event
        emit Withdraw(msg.sender, sendAmount);
        return sendAmount;
    }

    function donate() external payable nonReentrant {
        // buy staking token
        _buyToken(address(this).balance);
    }

    /**
        Handles Deposits Internally
     */
    function _deposit(uint256 amount, bool wETH) internal nonReentrant {

        // Ensure Positive Transfer Amount
        require(
            amount > 0,
            'Zero Amount'
        );

        // Track Balance Before Deposit
        uint previousBalance = token.balanceOf(address(this));

        // fetch keys token
        uint received = wETH ? _buyToken(amount) : _transferIn(amount);

        if (_totalShares == 0 || previousBalance == 0) {
            // mint first batch to holders
            _registerFirstPurchase(received);
        } else {

            // mints correct token amount to sender given data
            _mintTo(msg.sender, received, previousBalance);
        }
    }

    /**
        Registers the First Stake
     */
    function _registerFirstPurchase(uint received) internal {
        
        // increment total staked
        userInfo[msg.sender].totalStaked += received;

        // mint MAXI Tokens To Sender
        _mint(msg.sender, received, received);

        emit Deposit(msg.sender, received);
    }

    function _mintTo(address sender, uint256 received, uint256 previousBalance) internal {
        // Number Of Maxi Tokens To Mint
        uint nToMint = (_totalShares.mul(received).div(previousBalance)).sub(100);
        require(
            nToMint > 0,
            'Zero To Mint'
        );

        // increment total staked
        userInfo[sender].totalStaked += received;

        // mint MAXI Tokens To Sender
        _mint(sender, nToMint, received);

        emit Deposit(sender, received);
    }

    function _buyToken(uint amount) internal returns (uint256) {
        require(
            amount > 0,
            'Zero Amount'
        );
        uint before = token.balanceOf(address(this));
        (bool s,) = payable(tokenSwapper).call{value: amount}("");
        require(s, 'Failure On Token Purchase');
        uint received = token.balanceOf(address(this)).sub(before);
        require(received > 0, 'Zero Received');
        return received;
    }

    function _transferIn(uint256 amount) internal returns (uint256) {
        uint before = token.balanceOf(address(this));
        require(
            token.transferFrom(msg.sender, address(this), amount),
            'Failure On TransferFrom'
        );
        uint received = token.balanceOf(address(this)).sub(before);
        require(
            received <= amount && received > 0,
            'Error On Transfer In'
        );
        return received;
    }

    /**
     * Burns `amount` of Contract Balance Token
     */
    function _burn(address from, uint256 amount, uint256 amountToken) private {
        userInfo[from].balance = userInfo[from].balance.sub(amount);
        _totalShares = _totalShares.sub(amount);
        emit Transfer(from, address(0), amountToken);
    }

    /**
     * Mints `amount` of Contract Balance Token
     */
    function _mint(address to, uint256 amount, uint256 underlyingValue) private {
        // allocate
        userInfo[to].balance = userInfo[to].balance.add(amount);
        _totalShares = _totalShares.add(amount);
        // update locker info
        userInfo[msg.sender].unlockBlock = block.number + leaveEarlyFeeTimer;
        emit Transfer(address(0), to, underlyingValue);
    }


    /**
        Converts A Staking Token Amount Into A MAXI Amount
     */
    function TokenToContractBalance(uint256 amount) public view returns (uint256) {
        return amount.mul(precision).div(_calculatePrice());
    }

    /**
        Converts A MAXI Amount Into A Token Amount
     */
    function ReflectionsFromContractBalance(uint256 amount) public view returns (uint256) {
        return amount.mul(_calculatePrice()).div(precision);
    }

    /** Conversion Ratio For MAXI -> Token */
    function calculatePrice() external view returns (uint256) {
        return _calculatePrice();
    }

    /**
        Lock Time Remaining For Stakers
     */
    function remainingLockTime(address user) public view returns (uint256) {
        return userInfo[user].unlockBlock < block.number ? 0 : userInfo[user].unlockBlock - block.number;
    }

    /** Returns Total Profit for User In Token From MAXI */
    function getTotalProfits(address user) external view returns (uint256) {
        uint top = balanceOf(user) + userInfo[user].totalWithdrawn;
        return top <= userInfo[user].totalStaked ? 0 : top - userInfo[user].totalStaked;
    }
    
    /** Conversion Ratio For MAXI -> Token */
    function _calculatePrice() internal view returns (uint256) {
        uint256 backingValue = token.balanceOf(address(this));
        return (backingValue.mul(precision)).div(_totalShares);
    }

    /** function has no use in contract */
    function allowance(address, address) external pure override returns (uint256) { 
        return 0;
    }
    /** function has no use in contract */
    function approve(address spender, uint256) public override returns (bool) {
        emit Approval(msg.sender, spender, 0);
        return true;
    }
}

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"address","name":"token_","type":"address"},{"internalType":"address","name":"tokenSwapper_","type":"address"},{"internalType":"uint256","name":"leaveEarlyFee_","type":"uint256"},{"internalType":"uint256","name":"leaveEarlyFeeTimer_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"depositor","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountToken","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"}],"name":"FeeTaken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"previous","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"current","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalMAXISupply","type":"uint256"}],"name":"PriceChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"withdrawer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountToken","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ReflectionsFromContractBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokenToContractBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"calculatePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"changeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"donate","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getTotalProfits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"leaveEarlyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"leaveEarlyFeeTimer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"}],"name":"recoverForeignToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"remainingLockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLeaveEarlyFee","type":"uint256"}],"name":"setLeaveEarlyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLeaveEarlyFeeTimer","type":"uint256"}],"name":"setLeaveEarlyFeeTimer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newTokenSwapper","type":"address"}],"name":"setTokenSwapper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenSwapper","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"unlockBlock","type":"uint256"},{"internalType":"uint256","name":"totalStaked","type":"uint256"},{"internalType":"uint256","name":"totalWithdrawn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040523480156200001157600080fd5b50604051620042e7380380620042e7833981810160405281019062000037919062000704565b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f342827c97908e5e2f71151c08502a66d44b6f758e3ac2f1de95f02eb95f0a73560405160405180910390a3600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160362000164576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200015b906200083f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620001d6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001cd906200083f565b60405180910390fd5b60648211156200021d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200021490620008b1565b60405180910390fd5b6298968081111562000266576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200025d9062000923565b60405180910390fd5b85600190805190602001906200027e92919062000417565b5084600290805190602001906200029792919062000417565b508373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030a919062000983565b60ff1660a08160ff1681525050816004819055508060058190555082600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508373ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060016008819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600060405162000403919062000a02565b60405180910390a350505050505062000a83565b828054620004259062000a4e565b90600052602060002090601f01602090048101928262000449576000855562000495565b82601f106200046457805160ff191683800117855562000495565b8280016001018555821562000495579182015b828111156200049457825182559160200191906001019062000477565b5b509050620004a49190620004a8565b5090565b5b80821115620004c3576000816000905550600101620004a9565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200053082620004e5565b810181811067ffffffffffffffff82111715620005525762000551620004f6565b5b80604052505050565b600062000567620004c7565b905062000575828262000525565b919050565b600067ffffffffffffffff821115620005985762000597620004f6565b5b620005a382620004e5565b9050602081019050919050565b60005b83811015620005d0578082015181840152602081019050620005b3565b83811115620005e0576000848401525b50505050565b6000620005fd620005f7846200057a565b6200055b565b9050828152602081018484840111156200061c576200061b620004e0565b5b62000629848285620005b0565b509392505050565b600082601f830112620006495762000648620004db565b5b81516200065b848260208601620005e6565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620006918262000664565b9050919050565b620006a38162000684565b8114620006af57600080fd5b50565b600081519050620006c38162000698565b92915050565b6000819050919050565b620006de81620006c9565b8114620006ea57600080fd5b50565b600081519050620006fe81620006d3565b92915050565b60008060008060008060c08789031215620007245762000723620004d1565b5b600087015167ffffffffffffffff811115620007455762000744620004d6565b5b6200075389828a0162000631565b965050602087015167ffffffffffffffff811115620007775762000776620004d6565b5b6200078589828a0162000631565b95505060406200079889828a01620006b2565b9450506060620007ab89828a01620006b2565b9350506080620007be89828a01620006ed565b92505060a0620007d189828a01620006ed565b9150509295509295509295565b600082825260208201905092915050565b7f5a65726f20416464726573730000000000000000000000000000000000000000600082015250565b600062000827600c83620007de565b91506200083482620007ef565b602082019050919050565b600060208201905081810360008301526200085a8162000818565b9050919050565b7f46656520546f6f20486967680000000000000000000000000000000000000000600082015250565b600062000899600c83620007de565b9150620008a68262000861565b602082019050919050565b60006020820190508181036000830152620008cc816200088a565b9050919050565b7f4665652054696d657220546f6f204c6f6e670000000000000000000000000000600082015250565b60006200090b601283620007de565b91506200091882620008d3565b602082019050919050565b600060208201905081810360008301526200093e81620008fc565b9050919050565b600060ff82169050919050565b6200095d8162000945565b81146200096957600080fd5b50565b6000815190506200097d8162000952565b92915050565b6000602082840312156200099c576200099b620004d1565b5b6000620009ac848285016200096c565b91505092915050565b6000819050919050565b6000819050919050565b6000620009ea620009e4620009de84620009b5565b620009bf565b620006c9565b9050919050565b620009fc81620009c9565b82525050565b600060208201905062000a196000830184620009f1565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000a6757607f821691505b60208210810362000a7d5762000a7c62000a1f565b5b50919050565b60805160a0516137f162000af6600039600061115f0152600081816107d801528181610a1601528181610f8b015281816110330152818161190a01528181611b6f01528181611b9601528181611c3201528181611d1701528181611e6001528181611fd0015261228f01526137f16000f3fe6080604052600436106101c65760003560e01c806378c84798116100f7578063d348b40911610095578063ec5bfc8c11610064578063ec5bfc8c146106a9578063ed88c68e146106d2578063f0c112c6146106dc578063fc0c546a14610719576101d8565b8063d348b409146105ed578063dd62ed3e14610618578063e086e5ec14610655578063e0a4c2ff1461066c576101d8565b806395d89b41116100d157806395d89b4114610533578063a6f9dae11461055e578063a9059cbb14610587578063b6b55f25146105c4576101d8565b806378c84798146104b4578063893d20e8146104df5780638beceeea1461050a576101d8565b80631fee624811610164578063313ce5671161013e578063313ce567146103f8578063491dd70a1461042357806358d9e6851461044c57806370a0823114610477576101d8565b80631fee62481461035357806323b872dd1461037e5780632e1a7d4d146103bb576101d8565b806318160ddd116101a057806318160ddd146102825780631959a002146102ad5780631ab733a3146102ed5780631fe1bd741461032a576101d8565b806306fdde03146101dd578063095ea7b314610208578063098729db14610245576101d8565b366101d8576101d6346001610744565b005b600080fd5b3480156101e957600080fd5b506101f26108d1565b6040516101ff91906128c0565b60405180910390f35b34801561021457600080fd5b5061022f600480360381019061022a919061297b565b610963565b60405161023c91906129d6565b60405180910390f35b34801561025157600080fd5b5061026c600480360381019061026791906129f1565b6109d5565b6040516102799190612a2d565b60405180910390f35b34801561028e57600080fd5b50610297610a12565b6040516102a49190612a2d565b60405180910390f35b3480156102b957600080fd5b506102d460048036038101906102cf9190612a48565b610ab3565b6040516102e49493929190612a75565b60405180910390f35b3480156102f957600080fd5b50610314600480360381019061030f9190612a48565b610ae3565b6040516103219190612a2d565b60405180910390f35b34801561033657600080fd5b50610351600480360381019061034c91906129f1565b610be6565b005b34801561035f57600080fd5b50610368610cc4565b6040516103759190612a2d565b60405180910390f35b34801561038a57600080fd5b506103a560048036038101906103a09190612aba565b610cca565b6040516103b291906129d6565b60405180910390f35b3480156103c757600080fd5b506103e260048036038101906103dd91906129f1565b610d15565b6040516103ef9190612a2d565b60405180910390f35b34801561040457600080fd5b5061040d61115b565b60405161041a9190612b29565b60405180910390f35b34801561042f57600080fd5b5061044a60048036038101906104459190612a48565b611183565b005b34801561045857600080fd5b506104616112c4565b60405161046e9190612a2d565b60405180910390f35b34801561048357600080fd5b5061049e60048036038101906104999190612a48565b6112ca565b6040516104ab9190612a2d565b60405180910390f35b3480156104c057600080fd5b506104c961131e565b6040516104d69190612b53565b60405180910390f35b3480156104eb57600080fd5b506104f4611344565b6040516105019190612b53565b60405180910390f35b34801561051657600080fd5b50610531600480360381019061052c91906129f1565b61136d565b005b34801561053f57600080fd5b50610548611449565b60405161055591906128c0565b60405180910390f35b34801561056a57600080fd5b5061058560048036038101906105809190612a48565b6114db565b005b34801561059357600080fd5b506105ae60048036038101906105a9919061297b565b611626565b6040516105bb91906129d6565b60405180910390f35b3480156105d057600080fd5b506105eb60048036038101906105e691906129f1565b611670565b005b3480156105f957600080fd5b5061060261167e565b60405161060f9190612a2d565b60405180910390f35b34801561062457600080fd5b5061063f600480360381019061063a9190612b6e565b61168d565b60405161064c9190612a2d565b60405180910390f35b34801561066157600080fd5b5061066a611695565b005b34801561067857600080fd5b50610693600480360381019061068e9190612a48565b6117d2565b6040516106a09190612a2d565b60405180910390f35b3480156106b557600080fd5b506106d060048036038101906106cb9190612bec565b61187a565b005b6106da611acf565b005b3480156106e857600080fd5b5061070360048036038101906106fe91906129f1565b611b30565b6040516107109190612a2d565b60405180910390f35b34801561072557600080fd5b5061072e611b6d565b60405161073b9190612c78565b60405180910390f35b600260085403610789576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078090612cdf565b60405180910390fd5b6002600881905550600082116107d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107cb90612d4b565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161082f9190612b53565b602060405180830381865afa15801561084c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108709190612d80565b90506000826108875761088284611b91565b610891565b61089084611e18565b5b9050600060065414806108a45750600082145b156108b7576108b2816120c6565b6108c3565b6108c2338284612166565b5b505060016008819055505050565b6060600180546108e090612ddc565b80601f016020809104026020016040519081016040528092919081815260200182805461090c90612ddc565b80156109595780601f1061092e57610100808354040283529160200191610959565b820191906000526020600020905b81548152906001019060200180831161093c57829003601f168201915b5050505050905090565b60008273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560006040516109c39190612e48565b60405180910390a36001905092915050565b6000610a0b670de0b6b3a76400006109fd6109ee61228a565b8561235e90919063ffffffff16565b6123d890919063ffffffff16565b9050919050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a6d9190612b53565b602060405180830381865afa158015610a8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aae9190612d80565b905090565b60036020528060005260406000206000915090508060000154908060010154908060020154908060030154905084565b600080600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154610b32846112ca565b610b3c9190612e92565b9050600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154811115610bdb57600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015481610bd69190612ee8565b610bde565b60005b915050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6b90612f68565b60405180910390fd5b62989680811115610cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb190612fd4565b60405180910390fd5b8060058190555050565b60055481565b60003373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d0a57610d0882610d15565b505b600190509392505050565b6000600260085403610d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5390612cdf565b60405180910390fd5b60026008819055506000610d6f336112ca565b8314610d8357610d7e83611b30565b610dc7565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001545b90506000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154118015610e5d575080600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015410155b8015610e71575082610e6e336112ca565b10155b8015610e7d5750600083115b8015610e895750600081115b610ec8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebf90613040565b60405180910390fd5b610ed3338285612422565b82600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003016000828254610f259190612e92565b92505081905550600080610f38336117d2565b14610f6b57610f666103e8610f586004548761235e90919063ffffffff16565b6123d890919063ffffffff16565b610f6e565b60645b90506000610f85828661254390919063ffffffff16565b905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610fe29190612b53565b602060405180830381865afa158015610fff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110239190612d80565b905080821115611031578091505b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b815260040161108c929190613060565b6020604051808303816000875af11580156110ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cf91906130b5565b61110e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111059061312e565b60405180910390fd5b7f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364338360405161113f929190613060565b60405180910390a1819450505050506001600881905550919050565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611211576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120890612f68565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611280576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112779061319a565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60045481565b6000611317600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546109d5565b9050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f290612f68565b60405180910390fd5b606481111561143f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143690613206565b60405180910390fd5b8060048190555050565b60606002805461145890612ddc565b80601f016020809104026020016040519081016040528092919081815260200182805461148490612ddc565b80156114d15780601f106114a6576101008083540402835291602001916114d1565b820191906000526020600020905b8154815290600101906020018083116114b457829003601f168201915b5050505050905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611569576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156090612f68565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f342827c97908e5e2f71151c08502a66d44b6f758e3ac2f1de95f02eb95f0a73560405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60003373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036116665761166482610d15565b505b6001905092915050565b61167b816000610744565b50565b600061168861228a565b905090565b600092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611723576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171a90612f68565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff164760405161174990613257565b60006040518083038185875af1925050503d8060008114611786576040519150601f19603f3d011682016040523d82523d6000602084013e61178b565b606091505b50509050806117cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c6906132b8565b60405180910390fd5b50565b600043600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154106118705743600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015461186b9190612ee8565b611873565b60005b9050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ff90612f68565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198d90613324565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016119ec9190612b53565b602060405180830381865afa158015611a09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a2d9190612d80565b6040518363ffffffff1660e01b8152600401611a4a929190613060565b6020604051808303816000875af1158015611a69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a8d91906130b5565b611acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac390613390565b60405180910390fd5b50565b600260085403611b14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0b90612cdf565b60405180910390fd5b6002600881905550611b2547611e18565b506001600881905550565b6000611b66611b3d61228a565b611b58670de0b6b3a76400008561235e90919063ffffffff16565b6123d890919063ffffffff16565b9050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611bed9190612b53565b602060405180830381865afa158015611c0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2e9190612d80565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b8152600401611c8d939291906133b0565b6020604051808303816000875af1158015611cac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cd091906130b5565b611d0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0690613433565b60405180910390fd5b6000611dbd827f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611d6e9190612b53565b602060405180830381865afa158015611d8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611daf9190612d80565b61254390919063ffffffff16565b9050838111158015611dcf5750600081115b611e0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e059061349f565b60405180910390fd5b8092505050919050565b6000808211611e5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5390612d4b565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611eb79190612b53565b602060405180830381865afa158015611ed4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef89190612d80565b90506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1684604051611f4290613257565b60006040518083038185875af1925050503d8060008114611f7f576040519150601f19603f3d011682016040523d82523d6000602084013e611f84565b606091505b5050905080611fc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbf9061350b565b60405180910390fd5b6000612076837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016120279190612b53565b602060405180830381865afa158015612044573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120689190612d80565b61254390919063ffffffff16565b9050600081116120bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b290613577565b60405180910390fd5b809350505050919050565b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008282546121189190612e92565b9250508190555061212a33828361258d565b7fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c338260405161215b929190613060565b60405180910390a150565b60006121a26064612194846121868760065461235e90919063ffffffff16565b6123d890919063ffffffff16565b61254390919063ffffffff16565b9050600081116121e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121de906135e3565b60405180910390fd5b82600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008282546122399190612e92565b9250508190555061224b84828561258d565b7fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c848460405161227c929190613060565b60405180910390a150505050565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016122e69190612b53565b602060405180830381865afa158015612303573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123279190612d80565b905061235860065461234a670de0b6b3a76400008461235e90919063ffffffff16565b6123d890919063ffffffff16565b91505090565b600080830361237057600090506123d2565b6000828461237e9190613603565b905082848261238d919061368c565b146123cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c49061372f565b60405180910390fd5b809150505b92915050565b600061241a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612702565b905092915050565b61247782600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461254390919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506124d28260065461254390919063ffffffff16565b600681905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516125369190612a2d565b60405180910390a3505050565b600061258583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612765565b905092915050565b6125e282600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546127c990919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555061263d826006546127c990919063ffffffff16565b600681905550600554436126519190612e92565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055508273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516126f59190612a2d565b60405180910390a3505050565b60008083118290612749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274091906128c0565b60405180910390fd5b5060008385612758919061368c565b9050809150509392505050565b60008383111582906127ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a491906128c0565b60405180910390fd5b50600083856127bc9190612ee8565b9050809150509392505050565b60008082846127d89190612e92565b90508381101561281d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128149061379b565b60405180910390fd5b8091505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612861578082015181840152602081019050612846565b83811115612870576000848401525b50505050565b6000601f19601f8301169050919050565b600061289282612827565b61289c8185612832565b93506128ac818560208601612843565b6128b581612876565b840191505092915050565b600060208201905081810360008301526128da8184612887565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612912826128e7565b9050919050565b61292281612907565b811461292d57600080fd5b50565b60008135905061293f81612919565b92915050565b6000819050919050565b61295881612945565b811461296357600080fd5b50565b6000813590506129758161294f565b92915050565b60008060408385031215612992576129916128e2565b5b60006129a085828601612930565b92505060206129b185828601612966565b9150509250929050565b60008115159050919050565b6129d0816129bb565b82525050565b60006020820190506129eb60008301846129c7565b92915050565b600060208284031215612a0757612a066128e2565b5b6000612a1584828501612966565b91505092915050565b612a2781612945565b82525050565b6000602082019050612a426000830184612a1e565b92915050565b600060208284031215612a5e57612a5d6128e2565b5b6000612a6c84828501612930565b91505092915050565b6000608082019050612a8a6000830187612a1e565b612a976020830186612a1e565b612aa46040830185612a1e565b612ab16060830184612a1e565b95945050505050565b600080600060608486031215612ad357612ad26128e2565b5b6000612ae186828701612930565b9350506020612af286828701612930565b9250506040612b0386828701612966565b9150509250925092565b600060ff82169050919050565b612b2381612b0d565b82525050565b6000602082019050612b3e6000830184612b1a565b92915050565b612b4d81612907565b82525050565b6000602082019050612b686000830184612b44565b92915050565b60008060408385031215612b8557612b846128e2565b5b6000612b9385828601612930565b9250506020612ba485828601612930565b9150509250929050565b6000612bb982612907565b9050919050565b612bc981612bae565b8114612bd457600080fd5b50565b600081359050612be681612bc0565b92915050565b600060208284031215612c0257612c016128e2565b5b6000612c1084828501612bd7565b91505092915050565b6000819050919050565b6000612c3e612c39612c34846128e7565b612c19565b6128e7565b9050919050565b6000612c5082612c23565b9050919050565b6000612c6282612c45565b9050919050565b612c7281612c57565b82525050565b6000602082019050612c8d6000830184612c69565b92915050565b7f5265656e7472616e63792047756172642063616c6c0000000000000000000000600082015250565b6000612cc9601583612832565b9150612cd482612c93565b602082019050919050565b60006020820190508181036000830152612cf881612cbc565b9050919050565b7f5a65726f20416d6f756e74000000000000000000000000000000000000000000600082015250565b6000612d35600b83612832565b9150612d4082612cff565b602082019050919050565b60006020820190508181036000830152612d6481612d28565b9050919050565b600081519050612d7a8161294f565b92915050565b600060208284031215612d9657612d956128e2565b5b6000612da484828501612d6b565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612df457607f821691505b602082108103612e0757612e06612dad565b5b50919050565b6000819050919050565b6000612e32612e2d612e2884612e0d565b612c19565b612945565b9050919050565b612e4281612e17565b82525050565b6000602082019050612e5d6000830184612e39565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612e9d82612945565b9150612ea883612945565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612edd57612edc612e63565b5b828201905092915050565b6000612ef382612945565b9150612efe83612945565b925082821015612f1157612f10612e63565b5b828203905092915050565b7f43616c6c6572206973206e6f74206f776e657200000000000000000000000000600082015250565b6000612f52601383612832565b9150612f5d82612f1c565b602082019050919050565b60006020820190508181036000830152612f8181612f45565b9050919050565b7f4665652054696d657220546f6f20486967680000000000000000000000000000600082015250565b6000612fbe601283612832565b9150612fc982612f88565b602082019050919050565b60006020820190508181036000830152612fed81612fb1565b9050919050565b7f496e73756666696369656e742046756e64730000000000000000000000000000600082015250565b600061302a601283612832565b915061303582612ff4565b602082019050919050565b600060208201905081810360008301526130598161301d565b9050919050565b60006040820190506130756000830185612b44565b6130826020830184612a1e565b9392505050565b613092816129bb565b811461309d57600080fd5b50565b6000815190506130af81613089565b92915050565b6000602082840312156130cb576130ca6128e2565b5b60006130d9848285016130a0565b91505092915050565b7f4572726f72204f6e20546f6b656e205472616e73666572000000000000000000600082015250565b6000613118601783612832565b9150613123826130e2565b602082019050919050565b600060208201905081810360008301526131478161310b565b9050919050565b7f5a65726f20416464726573730000000000000000000000000000000000000000600082015250565b6000613184600c83612832565b915061318f8261314e565b602082019050919050565b600060208201905081810360008301526131b381613177565b9050919050565b7f4561726c792046656520546f6f20486967680000000000000000000000000000600082015250565b60006131f0601283612832565b91506131fb826131ba565b602082019050919050565b6000602082019050818103600083015261321f816131e3565b9050919050565b600081905092915050565b50565b6000613241600083613226565b915061324c82613231565b600082019050919050565b600061326282613234565b9150819050919050565b7f4572726f72204f6e20455448205769746864726177616c000000000000000000600082015250565b60006132a2601783612832565b91506132ad8261326c565b602082019050919050565b600060208201905081810360008301526132d181613295565b9050919050565b7f43616e6e6f74205769746864726177205374616b696e6720546f6b656e730000600082015250565b600061330e601e83612832565b9150613319826132d8565b602082019050919050565b6000602082019050818103600083015261333d81613301565b9050919050565b7f4572726f72205769746864726177696e6720466f726569676e20546f6b656e00600082015250565b600061337a601f83612832565b915061338582613344565b602082019050919050565b600060208201905081810360008301526133a98161336d565b9050919050565b60006060820190506133c56000830186612b44565b6133d26020830185612b44565b6133df6040830184612a1e565b949350505050565b7f4661696c757265204f6e205472616e7366657246726f6d000000000000000000600082015250565b600061341d601783612832565b9150613428826133e7565b602082019050919050565b6000602082019050818103600083015261344c81613410565b9050919050565b7f4572726f72204f6e205472616e7366657220496e000000000000000000000000600082015250565b6000613489601483612832565b915061349482613453565b602082019050919050565b600060208201905081810360008301526134b88161347c565b9050919050565b7f4661696c757265204f6e20546f6b656e20507572636861736500000000000000600082015250565b60006134f5601983612832565b9150613500826134bf565b602082019050919050565b60006020820190508181036000830152613524816134e8565b9050919050565b7f5a65726f20526563656976656400000000000000000000000000000000000000600082015250565b6000613561600d83612832565b915061356c8261352b565b602082019050919050565b6000602082019050818103600083015261359081613554565b9050919050565b7f5a65726f20546f204d696e740000000000000000000000000000000000000000600082015250565b60006135cd600c83612832565b91506135d882613597565b602082019050919050565b600060208201905081810360008301526135fc816135c0565b9050919050565b600061360e82612945565b915061361983612945565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561365257613651612e63565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061369782612945565b91506136a283612945565b9250826136b2576136b161365d565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613719602183612832565b9150613724826136bd565b604082019050919050565b600060208201905081810360008301526137488161370c565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613785601b83612832565b91506137908261374f565b602082019050919050565b600060208201905081810360008301526137b481613778565b905091905056fea26469706673582212209ef0e1e029d4e03037672ec74df308ca5e71e2edc81b04712757637ecab2ef8e64736f6c634300080e003300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000e0a189c975e4928222978a74517442239a0b86ff000000000000000000000000e0a189c975e4928222978a74517442239a0b86ff000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000b40000000000000000000000000000000000000000000000000000000000000000094b455953204d415849000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054c4b455953000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101c65760003560e01c806378c84798116100f7578063d348b40911610095578063ec5bfc8c11610064578063ec5bfc8c146106a9578063ed88c68e146106d2578063f0c112c6146106dc578063fc0c546a14610719576101d8565b8063d348b409146105ed578063dd62ed3e14610618578063e086e5ec14610655578063e0a4c2ff1461066c576101d8565b806395d89b41116100d157806395d89b4114610533578063a6f9dae11461055e578063a9059cbb14610587578063b6b55f25146105c4576101d8565b806378c84798146104b4578063893d20e8146104df5780638beceeea1461050a576101d8565b80631fee624811610164578063313ce5671161013e578063313ce567146103f8578063491dd70a1461042357806358d9e6851461044c57806370a0823114610477576101d8565b80631fee62481461035357806323b872dd1461037e5780632e1a7d4d146103bb576101d8565b806318160ddd116101a057806318160ddd146102825780631959a002146102ad5780631ab733a3146102ed5780631fe1bd741461032a576101d8565b806306fdde03146101dd578063095ea7b314610208578063098729db14610245576101d8565b366101d8576101d6346001610744565b005b600080fd5b3480156101e957600080fd5b506101f26108d1565b6040516101ff91906128c0565b60405180910390f35b34801561021457600080fd5b5061022f600480360381019061022a919061297b565b610963565b60405161023c91906129d6565b60405180910390f35b34801561025157600080fd5b5061026c600480360381019061026791906129f1565b6109d5565b6040516102799190612a2d565b60405180910390f35b34801561028e57600080fd5b50610297610a12565b6040516102a49190612a2d565b60405180910390f35b3480156102b957600080fd5b506102d460048036038101906102cf9190612a48565b610ab3565b6040516102e49493929190612a75565b60405180910390f35b3480156102f957600080fd5b50610314600480360381019061030f9190612a48565b610ae3565b6040516103219190612a2d565b60405180910390f35b34801561033657600080fd5b50610351600480360381019061034c91906129f1565b610be6565b005b34801561035f57600080fd5b50610368610cc4565b6040516103759190612a2d565b60405180910390f35b34801561038a57600080fd5b506103a560048036038101906103a09190612aba565b610cca565b6040516103b291906129d6565b60405180910390f35b3480156103c757600080fd5b506103e260048036038101906103dd91906129f1565b610d15565b6040516103ef9190612a2d565b60405180910390f35b34801561040457600080fd5b5061040d61115b565b60405161041a9190612b29565b60405180910390f35b34801561042f57600080fd5b5061044a60048036038101906104459190612a48565b611183565b005b34801561045857600080fd5b506104616112c4565b60405161046e9190612a2d565b60405180910390f35b34801561048357600080fd5b5061049e60048036038101906104999190612a48565b6112ca565b6040516104ab9190612a2d565b60405180910390f35b3480156104c057600080fd5b506104c961131e565b6040516104d69190612b53565b60405180910390f35b3480156104eb57600080fd5b506104f4611344565b6040516105019190612b53565b60405180910390f35b34801561051657600080fd5b50610531600480360381019061052c91906129f1565b61136d565b005b34801561053f57600080fd5b50610548611449565b60405161055591906128c0565b60405180910390f35b34801561056a57600080fd5b5061058560048036038101906105809190612a48565b6114db565b005b34801561059357600080fd5b506105ae60048036038101906105a9919061297b565b611626565b6040516105bb91906129d6565b60405180910390f35b3480156105d057600080fd5b506105eb60048036038101906105e691906129f1565b611670565b005b3480156105f957600080fd5b5061060261167e565b60405161060f9190612a2d565b60405180910390f35b34801561062457600080fd5b5061063f600480360381019061063a9190612b6e565b61168d565b60405161064c9190612a2d565b60405180910390f35b34801561066157600080fd5b5061066a611695565b005b34801561067857600080fd5b50610693600480360381019061068e9190612a48565b6117d2565b6040516106a09190612a2d565b60405180910390f35b3480156106b557600080fd5b506106d060048036038101906106cb9190612bec565b61187a565b005b6106da611acf565b005b3480156106e857600080fd5b5061070360048036038101906106fe91906129f1565b611b30565b6040516107109190612a2d565b60405180910390f35b34801561072557600080fd5b5061072e611b6d565b60405161073b9190612c78565b60405180910390f35b600260085403610789576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078090612cdf565b60405180910390fd5b6002600881905550600082116107d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107cb90612d4b565b60405180910390fd5b60007f000000000000000000000000e0a189c975e4928222978a74517442239a0b86ff73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161082f9190612b53565b602060405180830381865afa15801561084c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108709190612d80565b90506000826108875761088284611b91565b610891565b61089084611e18565b5b9050600060065414806108a45750600082145b156108b7576108b2816120c6565b6108c3565b6108c2338284612166565b5b505060016008819055505050565b6060600180546108e090612ddc565b80601f016020809104026020016040519081016040528092919081815260200182805461090c90612ddc565b80156109595780601f1061092e57610100808354040283529160200191610959565b820191906000526020600020905b81548152906001019060200180831161093c57829003601f168201915b5050505050905090565b60008273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560006040516109c39190612e48565b60405180910390a36001905092915050565b6000610a0b670de0b6b3a76400006109fd6109ee61228a565b8561235e90919063ffffffff16565b6123d890919063ffffffff16565b9050919050565b60007f000000000000000000000000e0a189c975e4928222978a74517442239a0b86ff73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a6d9190612b53565b602060405180830381865afa158015610a8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aae9190612d80565b905090565b60036020528060005260406000206000915090508060000154908060010154908060020154908060030154905084565b600080600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154610b32846112ca565b610b3c9190612e92565b9050600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154811115610bdb57600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015481610bd69190612ee8565b610bde565b60005b915050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6b90612f68565b60405180910390fd5b62989680811115610cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb190612fd4565b60405180910390fd5b8060058190555050565b60055481565b60003373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d0a57610d0882610d15565b505b600190509392505050565b6000600260085403610d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5390612cdf565b60405180910390fd5b60026008819055506000610d6f336112ca565b8314610d8357610d7e83611b30565b610dc7565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001545b90506000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154118015610e5d575080600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015410155b8015610e71575082610e6e336112ca565b10155b8015610e7d5750600083115b8015610e895750600081115b610ec8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebf90613040565b60405180910390fd5b610ed3338285612422565b82600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003016000828254610f259190612e92565b92505081905550600080610f38336117d2565b14610f6b57610f666103e8610f586004548761235e90919063ffffffff16565b6123d890919063ffffffff16565b610f6e565b60645b90506000610f85828661254390919063ffffffff16565b905060007f000000000000000000000000e0a189c975e4928222978a74517442239a0b86ff73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610fe29190612b53565b602060405180830381865afa158015610fff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110239190612d80565b905080821115611031578091505b7f000000000000000000000000e0a189c975e4928222978a74517442239a0b86ff73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b815260040161108c929190613060565b6020604051808303816000875af11580156110ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cf91906130b5565b61110e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111059061312e565b60405180910390fd5b7f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364338360405161113f929190613060565b60405180910390a1819450505050506001600881905550919050565b60007f0000000000000000000000000000000000000000000000000000000000000009905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611211576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120890612f68565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611280576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112779061319a565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60045481565b6000611317600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546109d5565b9050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146113fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f290612f68565b60405180910390fd5b606481111561143f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143690613206565b60405180910390fd5b8060048190555050565b60606002805461145890612ddc565b80601f016020809104026020016040519081016040528092919081815260200182805461148490612ddc565b80156114d15780601f106114a6576101008083540402835291602001916114d1565b820191906000526020600020905b8154815290600101906020018083116114b457829003601f168201915b5050505050905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611569576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156090612f68565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f342827c97908e5e2f71151c08502a66d44b6f758e3ac2f1de95f02eb95f0a73560405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60003373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036116665761166482610d15565b505b6001905092915050565b61167b816000610744565b50565b600061168861228a565b905090565b600092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611723576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171a90612f68565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff164760405161174990613257565b60006040518083038185875af1925050503d8060008114611786576040519150601f19603f3d011682016040523d82523d6000602084013e61178b565b606091505b50509050806117cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c6906132b8565b60405180910390fd5b50565b600043600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154106118705743600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015461186b9190612ee8565b611873565b60005b9050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ff90612f68565b60405180910390fd5b7f000000000000000000000000e0a189c975e4928222978a74517442239a0b86ff73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198d90613324565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016119ec9190612b53565b602060405180830381865afa158015611a09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a2d9190612d80565b6040518363ffffffff1660e01b8152600401611a4a929190613060565b6020604051808303816000875af1158015611a69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a8d91906130b5565b611acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac390613390565b60405180910390fd5b50565b600260085403611b14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0b90612cdf565b60405180910390fd5b6002600881905550611b2547611e18565b506001600881905550565b6000611b66611b3d61228a565b611b58670de0b6b3a76400008561235e90919063ffffffff16565b6123d890919063ffffffff16565b9050919050565b7f000000000000000000000000e0a189c975e4928222978a74517442239a0b86ff81565b6000807f000000000000000000000000e0a189c975e4928222978a74517442239a0b86ff73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611bed9190612b53565b602060405180830381865afa158015611c0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2e9190612d80565b90507f000000000000000000000000e0a189c975e4928222978a74517442239a0b86ff73ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b8152600401611c8d939291906133b0565b6020604051808303816000875af1158015611cac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cd091906130b5565b611d0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0690613433565b60405180910390fd5b6000611dbd827f000000000000000000000000e0a189c975e4928222978a74517442239a0b86ff73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611d6e9190612b53565b602060405180830381865afa158015611d8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611daf9190612d80565b61254390919063ffffffff16565b9050838111158015611dcf5750600081115b611e0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e059061349f565b60405180910390fd5b8092505050919050565b6000808211611e5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5390612d4b565b60405180910390fd5b60007f000000000000000000000000e0a189c975e4928222978a74517442239a0b86ff73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611eb79190612b53565b602060405180830381865afa158015611ed4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef89190612d80565b90506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1684604051611f4290613257565b60006040518083038185875af1925050503d8060008114611f7f576040519150601f19603f3d011682016040523d82523d6000602084013e611f84565b606091505b5050905080611fc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbf9061350b565b60405180910390fd5b6000612076837f000000000000000000000000e0a189c975e4928222978a74517442239a0b86ff73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016120279190612b53565b602060405180830381865afa158015612044573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120689190612d80565b61254390919063ffffffff16565b9050600081116120bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b290613577565b60405180910390fd5b809350505050919050565b80600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008282546121189190612e92565b9250508190555061212a33828361258d565b7fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c338260405161215b929190613060565b60405180910390a150565b60006121a26064612194846121868760065461235e90919063ffffffff16565b6123d890919063ffffffff16565b61254390919063ffffffff16565b9050600081116121e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121de906135e3565b60405180910390fd5b82600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160008282546122399190612e92565b9250508190555061224b84828561258d565b7fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c848460405161227c929190613060565b60405180910390a150505050565b6000807f000000000000000000000000e0a189c975e4928222978a74517442239a0b86ff73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016122e69190612b53565b602060405180830381865afa158015612303573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123279190612d80565b905061235860065461234a670de0b6b3a76400008461235e90919063ffffffff16565b6123d890919063ffffffff16565b91505090565b600080830361237057600090506123d2565b6000828461237e9190613603565b905082848261238d919061368c565b146123cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c49061372f565b60405180910390fd5b809150505b92915050565b600061241a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612702565b905092915050565b61247782600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461254390919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506124d28260065461254390919063ffffffff16565b600681905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516125369190612a2d565b60405180910390a3505050565b600061258583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612765565b905092915050565b6125e282600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546127c990919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555061263d826006546127c990919063ffffffff16565b600681905550600554436126519190612e92565b600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055508273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516126f59190612a2d565b60405180910390a3505050565b60008083118290612749576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274091906128c0565b60405180910390fd5b5060008385612758919061368c565b9050809150509392505050565b60008383111582906127ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a491906128c0565b60405180910390fd5b50600083856127bc9190612ee8565b9050809150509392505050565b60008082846127d89190612e92565b90508381101561281d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128149061379b565b60405180910390fd5b8091505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612861578082015181840152602081019050612846565b83811115612870576000848401525b50505050565b6000601f19601f8301169050919050565b600061289282612827565b61289c8185612832565b93506128ac818560208601612843565b6128b581612876565b840191505092915050565b600060208201905081810360008301526128da8184612887565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612912826128e7565b9050919050565b61292281612907565b811461292d57600080fd5b50565b60008135905061293f81612919565b92915050565b6000819050919050565b61295881612945565b811461296357600080fd5b50565b6000813590506129758161294f565b92915050565b60008060408385031215612992576129916128e2565b5b60006129a085828601612930565b92505060206129b185828601612966565b9150509250929050565b60008115159050919050565b6129d0816129bb565b82525050565b60006020820190506129eb60008301846129c7565b92915050565b600060208284031215612a0757612a066128e2565b5b6000612a1584828501612966565b91505092915050565b612a2781612945565b82525050565b6000602082019050612a426000830184612a1e565b92915050565b600060208284031215612a5e57612a5d6128e2565b5b6000612a6c84828501612930565b91505092915050565b6000608082019050612a8a6000830187612a1e565b612a976020830186612a1e565b612aa46040830185612a1e565b612ab16060830184612a1e565b95945050505050565b600080600060608486031215612ad357612ad26128e2565b5b6000612ae186828701612930565b9350506020612af286828701612930565b9250506040612b0386828701612966565b9150509250925092565b600060ff82169050919050565b612b2381612b0d565b82525050565b6000602082019050612b3e6000830184612b1a565b92915050565b612b4d81612907565b82525050565b6000602082019050612b686000830184612b44565b92915050565b60008060408385031215612b8557612b846128e2565b5b6000612b9385828601612930565b9250506020612ba485828601612930565b9150509250929050565b6000612bb982612907565b9050919050565b612bc981612bae565b8114612bd457600080fd5b50565b600081359050612be681612bc0565b92915050565b600060208284031215612c0257612c016128e2565b5b6000612c1084828501612bd7565b91505092915050565b6000819050919050565b6000612c3e612c39612c34846128e7565b612c19565b6128e7565b9050919050565b6000612c5082612c23565b9050919050565b6000612c6282612c45565b9050919050565b612c7281612c57565b82525050565b6000602082019050612c8d6000830184612c69565b92915050565b7f5265656e7472616e63792047756172642063616c6c0000000000000000000000600082015250565b6000612cc9601583612832565b9150612cd482612c93565b602082019050919050565b60006020820190508181036000830152612cf881612cbc565b9050919050565b7f5a65726f20416d6f756e74000000000000000000000000000000000000000000600082015250565b6000612d35600b83612832565b9150612d4082612cff565b602082019050919050565b60006020820190508181036000830152612d6481612d28565b9050919050565b600081519050612d7a8161294f565b92915050565b600060208284031215612d9657612d956128e2565b5b6000612da484828501612d6b565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612df457607f821691505b602082108103612e0757612e06612dad565b5b50919050565b6000819050919050565b6000612e32612e2d612e2884612e0d565b612c19565b612945565b9050919050565b612e4281612e17565b82525050565b6000602082019050612e5d6000830184612e39565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612e9d82612945565b9150612ea883612945565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612edd57612edc612e63565b5b828201905092915050565b6000612ef382612945565b9150612efe83612945565b925082821015612f1157612f10612e63565b5b828203905092915050565b7f43616c6c6572206973206e6f74206f776e657200000000000000000000000000600082015250565b6000612f52601383612832565b9150612f5d82612f1c565b602082019050919050565b60006020820190508181036000830152612f8181612f45565b9050919050565b7f4665652054696d657220546f6f20486967680000000000000000000000000000600082015250565b6000612fbe601283612832565b9150612fc982612f88565b602082019050919050565b60006020820190508181036000830152612fed81612fb1565b9050919050565b7f496e73756666696369656e742046756e64730000000000000000000000000000600082015250565b600061302a601283612832565b915061303582612ff4565b602082019050919050565b600060208201905081810360008301526130598161301d565b9050919050565b60006040820190506130756000830185612b44565b6130826020830184612a1e565b9392505050565b613092816129bb565b811461309d57600080fd5b50565b6000815190506130af81613089565b92915050565b6000602082840312156130cb576130ca6128e2565b5b60006130d9848285016130a0565b91505092915050565b7f4572726f72204f6e20546f6b656e205472616e73666572000000000000000000600082015250565b6000613118601783612832565b9150613123826130e2565b602082019050919050565b600060208201905081810360008301526131478161310b565b9050919050565b7f5a65726f20416464726573730000000000000000000000000000000000000000600082015250565b6000613184600c83612832565b915061318f8261314e565b602082019050919050565b600060208201905081810360008301526131b381613177565b9050919050565b7f4561726c792046656520546f6f20486967680000000000000000000000000000600082015250565b60006131f0601283612832565b91506131fb826131ba565b602082019050919050565b6000602082019050818103600083015261321f816131e3565b9050919050565b600081905092915050565b50565b6000613241600083613226565b915061324c82613231565b600082019050919050565b600061326282613234565b9150819050919050565b7f4572726f72204f6e20455448205769746864726177616c000000000000000000600082015250565b60006132a2601783612832565b91506132ad8261326c565b602082019050919050565b600060208201905081810360008301526132d181613295565b9050919050565b7f43616e6e6f74205769746864726177205374616b696e6720546f6b656e730000600082015250565b600061330e601e83612832565b9150613319826132d8565b602082019050919050565b6000602082019050818103600083015261333d81613301565b9050919050565b7f4572726f72205769746864726177696e6720466f726569676e20546f6b656e00600082015250565b600061337a601f83612832565b915061338582613344565b602082019050919050565b600060208201905081810360008301526133a98161336d565b9050919050565b60006060820190506133c56000830186612b44565b6133d26020830185612b44565b6133df6040830184612a1e565b949350505050565b7f4661696c757265204f6e205472616e7366657246726f6d000000000000000000600082015250565b600061341d601783612832565b9150613428826133e7565b602082019050919050565b6000602082019050818103600083015261344c81613410565b9050919050565b7f4572726f72204f6e205472616e7366657220496e000000000000000000000000600082015250565b6000613489601483612832565b915061349482613453565b602082019050919050565b600060208201905081810360008301526134b88161347c565b9050919050565b7f4661696c757265204f6e20546f6b656e20507572636861736500000000000000600082015250565b60006134f5601983612832565b9150613500826134bf565b602082019050919050565b60006020820190508181036000830152613524816134e8565b9050919050565b7f5a65726f20526563656976656400000000000000000000000000000000000000600082015250565b6000613561600d83612832565b915061356c8261352b565b602082019050919050565b6000602082019050818103600083015261359081613554565b9050919050565b7f5a65726f20546f204d696e740000000000000000000000000000000000000000600082015250565b60006135cd600c83612832565b91506135d882613597565b602082019050919050565b600060208201905081810360008301526135fc816135c0565b9050919050565b600061360e82612945565b915061361983612945565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561365257613651612e63565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061369782612945565b91506136a283612945565b9250826136b2576136b161365d565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613719602183612832565b9150613724826136bd565b604082019050919050565b600060208201905081810360008301526137488161370c565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613785601b83612832565b91506137908261374f565b602082019050919050565b600060208201905081810360008301526137b481613778565b905091905056fea26469706673582212209ef0e1e029d4e03037672ec74df308ca5e71e2edc81b04712757637ecab2ef8e64736f6c634300080e0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000e0a189c975e4928222978a74517442239a0b86ff000000000000000000000000e0a189c975e4928222978a74517442239a0b86ff000000000000000000000000000000000000000000000000000000000000002c000000000000000000000000000000000000000000000000000000000000b40000000000000000000000000000000000000000000000000000000000000000094b455953204d415849000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054c4b455953000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name_ (string): KEYS MAXI
Arg [1] : symbol_ (string): LKEYS
Arg [2] : token_ (address): 0xe0a189C975e4928222978A74517442239a0b86ff
Arg [3] : tokenSwapper_ (address): 0xe0a189C975e4928222978A74517442239a0b86ff
Arg [4] : leaveEarlyFee_ (uint256): 44
Arg [5] : leaveEarlyFeeTimer_ (uint256): 46080

-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [2] : 000000000000000000000000e0a189c975e4928222978a74517442239a0b86ff
Arg [3] : 000000000000000000000000e0a189c975e4928222978a74517442239a0b86ff
Arg [4] : 000000000000000000000000000000000000000000000000000000000000002c
Arg [5] : 000000000000000000000000000000000000000000000000000000000000b400
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [7] : 4b455953204d4158490000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [9] : 4c4b455953000000000000000000000000000000000000000000000000000000


Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.