ETH Price: $2,173.26 (-6.68%)

Token

EDMA (EDM)
 

Overview

Max Total Supply

500,000,000 EDM

Holders

17,079 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
200 EDM

Value
$0.00
0x38fdb7eaeb420e58d80b6c0fa3680098e8e3a1ca
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Edma (EDM) is a blockchain-powered platform that enables 25M+ solar households to monetize their energy production and use EDM tokens for real-time payments like EV charging. With AI-driven ESG compliance and strategic partnerships, Edma is building a decentralized, sustainable energy economy.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
EDMA

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)

pragma solidity 0.8.20;

/**
 * @dev Interface of the ERC-20 standard as defined in the ERC.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the value of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the value of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves a `value` amount of tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 value) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets a `value` amount of tokens as the allowance of `spender` over the
     * caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 value) external returns (bool);

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to` using the
     * allowance mechanism. `value` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address from, address to, uint256 value) external returns (bool);
}

// File: Mainnet/EDMANew.sol

abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return payable(msg.sender);
    }
}

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    constructor() {
        _owner = _msgSender();
        emit OwnershipTransferred(address(0), _owner);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = payable(address(0));
    }

    function transferOwnership(address newOwner) public onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: zero address"
        );
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

contract EDMA is IERC20, Ownable {
    struct VestingSchedule {
        uint256 totalLocked;
        uint256 totalReleased;
        bool isFirstReleased;
    }
    uint256 public constant VESTING_INTERVAL = 90 days;  // 7776000;

    string private constant _NAME = "EDMA";
    string private constant _SYMBOL = "EDM";
    uint8 private constant _DECIMALS = 18;
    uint256 private _totalSupply = 500_000_000 * 10 ** _DECIMALS;

    bool public  presaleActive = true;
    uint256 public  presaleEndTime;
    address public presaleAddress;

    modifier onlyPresale() {
        require(presaleAddress == _msgSender(), "EDMA: caller is not the presale");
        _;
    }

    modifier activePresale() {
        require(presaleActive, "EDMA: presale already ended.");
        _;
    }

    modifier validAddress(address addressToCheck) {
        require(addressToCheck != address(0), "EDMA: Address must not be zero");
        _;
    }


    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => VestingSchedule) public vesting;
    mapping(address => bool) public excludedFromVesting;
    
    
    

    event Burned(address indexed from, uint256 amount);
    event TokensRecovered(address token, address recipient, uint256 amount);
    event ETHRecovered(address recipient, uint256 amount);
    event TokensVested(address indexed beneficiary, uint256 amount);
    event Received(address sender, uint256 value);
    event PresaleAddressUpdated(address oldAddress, address newAddress);
    event PresaleEnded(uint256 presaleEndTime);
    event ExclusionFromVestingUpdated(address addr, bool value);
    

    constructor() {
        _balances[_msgSender()] = _totalSupply;
        emit Transfer(address(0), _msgSender(), _totalSupply);
    }

    // Fallback to receive ETH
    receive() external payable {
        emit Received(msg.sender, msg.value);
    }

    // Token Information
    function name() public pure returns (string memory) {
        return _NAME;
    }

    function symbol() public pure returns (string memory) {
        return _SYMBOL;
    }

    function decimals() public pure returns (uint8) {
        return _DECIMALS;
    }

    function totalSupply() public view override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }

    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }

    function burn(uint256 amount) external {
        require(amount > 0 && _balances[msg.sender] >= amount, "Invalid token amount");
        checkIfCanSpend(msg.sender, amount);
        _balances[msg.sender] -= amount;
        _totalSupply -= amount;
        emit Burned(msg.sender, amount);
    }

    function transferAndVest(address recipient, uint256 amount) external onlyPresale activePresale validAddress(recipient) returns (bool) {
        require(balanceOf(msg.sender) >= amount, "Insufficient balance");
        if(vesting[recipient].totalLocked == 0) {
            vesting[recipient] = VestingSchedule(amount, 0, false);
        } else {
            vesting[recipient].totalLocked =  vesting[recipient].totalLocked + amount;
        }
        emit TokensVested(recipient, amount);
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function calculateUnlockableAmount(address sender) public view  returns (uint256 toUnlockAmount) {
        // presale active so no tokens unlockable
        if(presaleActive) {
            return  0;
        }

        // if presale ended, check vesting details
        VestingSchedule storage vs = vesting[sender];
        if(vs.totalLocked == 0 || vs.totalLocked <= vs.totalReleased) {
            return 0;
        }
        if(vs.isFirstReleased && block.timestamp < presaleEndTime + VESTING_INTERVAL) {
            return  0;
        }
        uint256 intervalPassed = ((block.timestamp - presaleEndTime) / VESTING_INTERVAL);

        if(!vs.isFirstReleased && intervalPassed == 0) {
            intervalPassed = 1; // released 20% with presale end date even if 90day didn't passed.
        } else if(intervalPassed >= 1) {
            intervalPassed = intervalPassed+1; // considering intial release for 1st interval.
        }
        if(intervalPassed > 5) { intervalPassed = 5; }  // max 5 (5x20% = 100%)

        // total amount that must have release by now from presale end time.
        uint256 totalReleasable  = (vs.totalLocked * (intervalPassed * 20)) / 100;
        uint256 currentReleasable = totalReleasable - vs.totalReleased;
        if(currentReleasable == 0) {
            return 0;
        }
        if(currentReleasable > vs.totalLocked - vs.totalReleased) {
            return vs.totalLocked - vs.totalReleased;
        }
        return currentReleasable;
    }

    // set Presale address control
    function setPresale(address newPresaleAddress) external onlyOwner activePresale validAddress(newPresaleAddress) {
        emit PresaleAddressUpdated(presaleAddress, newPresaleAddress);
        presaleAddress = newPresaleAddress;
    }

    // mark presale end
    function endPresale() external onlyOwner activePresale returns (bool){
        presaleActive = false;
        presaleEndTime = block.timestamp;
        emit PresaleEnded(presaleEndTime);
        return true;
    }

    // Method to setVesting exlusion
    function setExcludedFromVesting(address addr, bool excluded) external onlyOwner {
        excludedFromVesting[addr] = excluded;
        emit ExclusionFromVestingUpdated(addr, excluded);
    }

    // ERC20 functions
    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - amount);
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender] - subtractedValue
        );
        return true;
    }

    // Utility functions
    function recoverStuckTokens(address token, address recipient, uint256 amount) external onlyOwner validAddress(recipient) {
        require(IERC20(token).transfer(recipient, amount), "EDMA: Token recovery failed");
        emit TokensRecovered(token, recipient, amount);
    }

    function recoverStuckETH(address recipient) external onlyOwner validAddress(recipient) {
        uint256 balnce = address(this).balance;
        require(balnce > 0, "EDMA: No ETH to recover");
        payable(recipient).transfer(balnce);
        emit ETHRecovered(recipient, balnce);
    }

    function checkIfCanSpend(address sender, uint256 amount) internal {
        uint256 toRelease = calculateUnlockableAmount(sender);
        if (toRelease > 0) {
            vesting[sender].totalReleased = vesting[sender].totalReleased + toRelease;
        }
        
        uint256 lockedBalance = vesting[sender].totalLocked - vesting[sender].totalReleased;
        if(lockedBalance > 0) {
            require(amount <= balanceOf(sender) - lockedBalance, "Amount exceeds unlocked balance");
            if(!vesting[sender].isFirstReleased && !presaleActive) {
                vesting[sender].isFirstReleased = true;
            }
        }
    }

    // Internal functions
    function _transfer(address sender, address recipient, uint256 amount) internal validAddress(recipient) validAddress(sender) {
        uint256 totalVestingPeriod = (5 * VESTING_INTERVAL) + 60 ; //1 minute extra for precaution; 

        // only check locked balance if presale active or the vesting period is ongoing.
        if(presaleActive || block.timestamp <=  totalVestingPeriod + presaleEndTime) {
            if(amount > 0 && !excludedFromVesting[sender]) {
                checkIfCanSpend(sender, amount);
            }
        }

        _balances[sender] -= amount;
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

    function _approve(address owner, address spender, uint256 amount) internal validAddress(owner) validAddress(spender) {
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
}

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

Contract Security Audit

Contract ABI

API
[{"inputs":[],"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":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Burned","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ETHRecovered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"bool","name":"value","type":"bool"}],"name":"ExclusionFromVestingUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":false,"internalType":"address","name":"newAddress","type":"address"}],"name":"PresaleAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"presaleEndTime","type":"uint256"}],"name":"PresaleEnded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Received","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokensRecovered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beneficiary","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokensVested","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"},{"inputs":[],"name":"VESTING_INTERVAL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","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":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"calculateUnlockableAmount","outputs":[{"internalType":"uint256","name":"toUnlockAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endPresale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromVesting","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleEndTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"name":"recoverStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"recoverStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludedFromVesting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPresaleAddress","type":"address"}],"name":"setPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferAndVest","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","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":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"vesting","outputs":[{"internalType":"uint256","name":"totalLocked","type":"uint256"},{"internalType":"uint256","name":"totalReleased","type":"uint256"},{"internalType":"bool","name":"isFirstReleased","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526012600a62000014919062000380565b631dcd6500620000259190620003d0565b600155600160025f6101000a81548160ff0219169083151502179055503480156200004e575f80fd5b506200005f620001e760201b60201c565b5f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360015460055f6200012c620001e760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555062000179620001e760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600154604051620001d991906200042b565b60405180910390a362000446565b5f33905090565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115620002785780860481111562000250576200024f620001ee565b5b6001851615620002605780820291505b808102905062000270856200021b565b945062000230565b94509492505050565b5f8262000292576001905062000364565b81620002a1575f905062000364565b8160018114620002ba5760028114620002c557620002fb565b600191505062000364565b60ff841115620002da57620002d9620001ee565b5b8360020a915084821115620002f457620002f3620001ee565b5b5062000364565b5060208310610133831016604e8410600b8410161715620003355782820a9050838111156200032f576200032e620001ee565b5b62000364565b62000344848484600162000227565b925090508184048111156200035e576200035d620001ee565b5b81810290505b9392505050565b5f819050919050565b5f60ff82169050919050565b5f6200038c826200036b565b9150620003998362000374565b9250620003c87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000281565b905092915050565b5f620003dc826200036b565b9150620003e9836200036b565b9250828202620003f9816200036b565b91508282048414831517620004135762000412620001ee565b5b5092915050565b62000425816200036b565b82525050565b5f602082019050620004405f8301846200041a565b92915050565b612e1580620004545f395ff3fe6080604052600436106101ba575f3560e01c80638da5cb5b116100eb578063bfa883ab11610089578063e1a7cc7a11610063578063e1a7cc7a14610660578063e388c4231461069c578063f2fde38b146106da578063f78dcd3d14610702576101fa565b8063bfa883ab146105d4578063d5fcc7b6146105fc578063dd62ed3e14610624576101fa565b8063a43be57b116100c5578063a43be57b14610508578063a457c2d714610532578063a5ca2afa1461056e578063a9059cbb14610598576101fa565b80638da5cb5b1461048c578063934cefef146104b657806395d89b41146104de576101fa565b8063395093511161015857806353135ca01161013257806353135ca0146103e85780636899cb701461041257806370a082311461043a578063715018a614610476576101fa565b8063395093511461034857806342966c68146103845780634abc4a3c146103ac576101fa565b806318160ddd1161019457806318160ddd1461028e57806323b872dd146102b8578063249b7c19146102f4578063313ce5671461031e576101fa565b806306fdde03146101fe578063095ea7b314610228578063122fe68514610264576101fa565b366101fa577f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587433346040516101f092919061245b565b60405180910390a1005b5f80fd5b348015610209575f80fd5b5061021261073e565b60405161021f919061250c565b60405180910390f35b348015610233575f80fd5b5061024e60048036038101906102499190612584565b61077b565b60405161025b91906125dc565b60405180910390f35b34801561026f575f80fd5b50610278610798565b60405161028591906125f5565b60405180910390f35b348015610299575f80fd5b506102a26107bd565b6040516102af919061260e565b60405180910390f35b3480156102c3575f80fd5b506102de60048036038101906102d99190612627565b6107c6565b6040516102eb91906125dc565b60405180910390f35b3480156102ff575f80fd5b50610308610879565b604051610315919061260e565b60405180910390f35b348015610329575f80fd5b5061033261087f565b60405161033f9190612692565b60405180910390f35b348015610353575f80fd5b5061036e60048036038101906103699190612584565b610887565b60405161037b91906125dc565b60405180910390f35b34801561038f575f80fd5b506103aa60048036038101906103a591906126ab565b61092e565b005b3480156103b7575f80fd5b506103d260048036038101906103cd91906126d6565b610a7f565b6040516103df91906125dc565b60405180910390f35b3480156103f3575f80fd5b506103fc610a9c565b60405161040991906125dc565b60405180910390f35b34801561041d575f80fd5b50610438600480360381019061043391906126d6565b610aae565b005b348015610445575f80fd5b50610460600480360381019061045b91906126d6565b610c79565b60405161046d919061260e565b60405180910390f35b348015610481575f80fd5b5061048a610cbf565b005b348015610497575f80fd5b506104a0610e0d565b6040516104ad91906125f5565b60405180910390f35b3480156104c1575f80fd5b506104dc60048036038101906104d7919061272b565b610e34565b005b3480156104e9575f80fd5b506104f2610f59565b6040516104ff919061250c565b60405180910390f35b348015610513575f80fd5b5061051c610f96565b60405161052991906125dc565b60405180910390f35b34801561053d575f80fd5b5061055860048036038101906105539190612584565b6110d9565b60405161056591906125dc565b60405180910390f35b348015610579575f80fd5b50610582611180565b60405161058f919061260e565b60405180910390f35b3480156105a3575f80fd5b506105be60048036038101906105b99190612584565b611187565b6040516105cb91906125dc565b60405180910390f35b3480156105df575f80fd5b506105fa60048036038101906105f59190612627565b6111a4565b005b348015610607575f80fd5b50610622600480360381019061061d91906126d6565b6113a2565b005b34801561062f575f80fd5b5061064a60048036038101906106459190612769565b611591565b604051610657919061260e565b60405180910390f35b34801561066b575f80fd5b5061068660048036038101906106819190612584565b611613565b60405161069391906125dc565b60405180910390f35b3480156106a7575f80fd5b506106c260048036038101906106bd91906126d6565b611985565b6040516106d1939291906127a7565b60405180910390f35b3480156106e5575f80fd5b5061070060048036038101906106fb91906126d6565b6119b7565b005b34801561070d575f80fd5b50610728600480360381019061072391906126d6565b611b74565b604051610735919061260e565b60405180910390f35b60606040518060400160405280600481526020017f45444d4100000000000000000000000000000000000000000000000000000000815250905090565b5f61078e610787611d37565b8484611d3e565b6001905092915050565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600154905090565b5f6107d2848484611f05565b61086e846107de611d37565b8460065f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610825611d37565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546108699190612809565b611d3e565b600190509392505050565b60035481565b5f6012905090565b5f610924610893611d37565b848460065f6108a0611d37565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461091f919061283c565b611d3e565b6001905092915050565b5f8111801561097a57508060055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410155b6109b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b0906128b9565b60405180910390fd5b6109c333826121a8565b8060055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610a0f9190612809565b925050819055508060015f828254610a279190612809565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167f696de425f79f4a40bc6d2122ca50507f0efbeabbff86a84871b7196ab8ea8df782604051610a74919061260e565b60405180910390a250565b6008602052805f5260405f205f915054906101000a900460ff1681565b60025f9054906101000a900460ff1681565b610ab6611d37565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3990612921565b60405180910390fd5b805f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610bb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba890612989565b60405180910390fd5b5f4790505f8111610bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bee906129f1565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015610c3a573d5f803e3d5ffd5b507f05af21d7340bf49fde03a32c3bcc785015c94acd83531fc6dfbfb93a24c364ca8382604051610c6c92919061245b565b60405180910390a1505050565b5f60055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610cc7611d37565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4a90612921565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610e3c611d37565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ec8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebf90612921565b60405180910390fd5b8060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507fed17b735383cdd87b5ed1cfda23d9795c9c88e9fc11998f45d522e40a3d6c28e8282604051610f4d929190612a0f565b60405180910390a15050565b60606040518060400160405280600381526020017f45444d0000000000000000000000000000000000000000000000000000000000815250905090565b5f610f9f611d37565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461102b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102290612921565b60405180910390fd5b60025f9054906101000a900460ff16611079576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107090612a80565b60405180910390fd5b5f60025f6101000a81548160ff021916908315150217905550426003819055507fae0c5c85af4072968cc258641c5f1dcbcb9c78e621b47c76ccf3e64a6449860a6003546040516110ca919061260e565b60405180910390a16001905090565b5f6111766110e5611d37565b848460065f6110f2611d37565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546111719190612809565b611d3e565b6001905092915050565b6276a70081565b5f61119a611193611d37565b8484611f05565b6001905092915050565b6111ac611d37565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611238576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122f90612921565b60405180910390fd5b815f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036112a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129e90612989565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b81526004016112e292919061245b565b6020604051808303815f875af11580156112fe573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113229190612ab2565b611361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135890612b27565b60405180910390fd5b7f401f439d865a766757ec78675925bd67198d5e78805aa41691b34b5d6a6cbbe684848460405161139493929190612b45565b60405180910390a150505050565b6113aa611d37565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142d90612921565b60405180910390fd5b60025f9054906101000a900460ff16611484576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147b90612a80565b60405180910390fd5b805f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ea90612989565b60405180910390fd5b7f7fd810ab02d561ffc4f35f3ffbba4bb8a95faf3038286804e27d6fa6b2d3ae5d60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683604051611545929190612b7a565b60405180910390a18160045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b5f60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f61161c611d37565b73ffffffffffffffffffffffffffffffffffffffff1660045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a190612beb565b60405180910390fd5b60025f9054906101000a900460ff166116f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ef90612a80565b60405180910390fd5b825f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175e90612989565b60405180910390fd5b8261177133610c79565b10156117b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a990612c53565b60405180910390fd5b5f60075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f01540361188b5760405180606001604052808481526020015f81526020015f151581525060075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f820151815f0155602082015181600101556040820151816002015f6101000a81548160ff02191690831515021790555090505061191a565b8260075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f01546118d6919061283c565b60075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f01819055505b8373ffffffffffffffffffffffffffffffffffffffff167fd4691cc79b8fc72aac1e8c0d15a2ca06d71a386c983f815266f0fce713dc5ea784604051611960919061260e565b60405180910390a261197a611973611d37565b8585611f05565b600191505092915050565b6007602052805f5260405f205f91509050805f015490806001015490806002015f9054906101000a900460ff16905083565b6119bf611d37565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4290612921565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ab9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab090612cbb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60025f9054906101000a900460ff1615611b91575f9050611d32565b5f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f815f01541480611be957508060010154815f015411155b15611bf7575f915050611d32565b806002015f9054906101000a900460ff168015611c2357506276a700600354611c20919061283c565b42105b15611c31575f915050611d32565b5f6276a70060035442611c449190612809565b611c4e9190612d06565b9050816002015f9054906101000a900460ff16158015611c6d57505f81145b15611c7b5760019050611c94565b60018110611c9357600181611c90919061283c565b90505b5b6005811115611ca257600590505b5f6064601483611cb29190612d36565b845f0154611cc09190612d36565b611cca9190612d06565b90505f836001015482611cdd9190612809565b90505f8103611cf2575f945050505050611d32565b8360010154845f0154611d059190612809565b811115611d2a578360010154845f0154611d1f9190612809565b945050505050611d32565b809450505050505b919050565b5f33905090565b825f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611dad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da490612989565b60405180910390fd5b825f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1390612989565b60405180910390fd5b8260065f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051611ef6919061260e565b60405180910390a35050505050565b815f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6b90612989565b60405180910390fd5b835f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611fe3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fda90612989565b60405180910390fd5b5f603c6276a7006005611ff69190612d36565b612000919061283c565b905060025f9054906101000a900460ff1680612029575060035481612025919061283c565b4211155b15612095575f84118015612084575060085f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156120945761209386856121a8565b5b5b8360055f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546120e19190612809565b925050819055508360055f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612134919061283c565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612198919061260e565b60405180910390a3505050505050565b5f6121b283611b74565b90505f81111561224d578060075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2060010154612208919061283c565b60075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600101819055505b5f60075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206001015460075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f01546122d99190612809565b90505f8111156123fe57806122ed85610c79565b6122f79190612809565b831115612339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233090612dc1565b60405180910390fd5b60075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206002015f9054906101000a900460ff1615801561239f575060025f9054906101000a900460ff16155b156123fd57600160075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206002015f6101000a81548160ff0219169083151502179055505b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61242d82612404565b9050919050565b61243d81612423565b82525050565b5f819050919050565b61245581612443565b82525050565b5f60408201905061246e5f830185612434565b61247b602083018461244c565b9392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156124b957808201518184015260208101905061249e565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6124de82612482565b6124e8818561248c565b93506124f881856020860161249c565b612501816124c4565b840191505092915050565b5f6020820190508181035f83015261252481846124d4565b905092915050565b5f80fd5b61253981612423565b8114612543575f80fd5b50565b5f8135905061255481612530565b92915050565b61256381612443565b811461256d575f80fd5b50565b5f8135905061257e8161255a565b92915050565b5f806040838503121561259a5761259961252c565b5b5f6125a785828601612546565b92505060206125b885828601612570565b9150509250929050565b5f8115159050919050565b6125d6816125c2565b82525050565b5f6020820190506125ef5f8301846125cd565b92915050565b5f6020820190506126085f830184612434565b92915050565b5f6020820190506126215f83018461244c565b92915050565b5f805f6060848603121561263e5761263d61252c565b5b5f61264b86828701612546565b935050602061265c86828701612546565b925050604061266d86828701612570565b9150509250925092565b5f60ff82169050919050565b61268c81612677565b82525050565b5f6020820190506126a55f830184612683565b92915050565b5f602082840312156126c0576126bf61252c565b5b5f6126cd84828501612570565b91505092915050565b5f602082840312156126eb576126ea61252c565b5b5f6126f884828501612546565b91505092915050565b61270a816125c2565b8114612714575f80fd5b50565b5f8135905061272581612701565b92915050565b5f80604083850312156127415761274061252c565b5b5f61274e85828601612546565b925050602061275f85828601612717565b9150509250929050565b5f806040838503121561277f5761277e61252c565b5b5f61278c85828601612546565b925050602061279d85828601612546565b9150509250929050565b5f6060820190506127ba5f83018661244c565b6127c7602083018561244c565b6127d460408301846125cd565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61281382612443565b915061281e83612443565b9250828203905081811115612836576128356127dc565b5b92915050565b5f61284682612443565b915061285183612443565b9250828201905080821115612869576128686127dc565b5b92915050565b7f496e76616c696420746f6b656e20616d6f756e740000000000000000000000005f82015250565b5f6128a360148361248c565b91506128ae8261286f565b602082019050919050565b5f6020820190508181035f8301526128d081612897565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61290b60208361248c565b9150612916826128d7565b602082019050919050565b5f6020820190508181035f830152612938816128ff565b9050919050565b7f45444d413a2041646472657373206d757374206e6f74206265207a65726f00005f82015250565b5f612973601e8361248c565b915061297e8261293f565b602082019050919050565b5f6020820190508181035f8301526129a081612967565b9050919050565b7f45444d413a204e6f2045544820746f207265636f7665720000000000000000005f82015250565b5f6129db60178361248c565b91506129e6826129a7565b602082019050919050565b5f6020820190508181035f830152612a08816129cf565b9050919050565b5f604082019050612a225f830185612434565b612a2f60208301846125cd565b9392505050565b7f45444d413a2070726573616c6520616c726561647920656e6465642e000000005f82015250565b5f612a6a601c8361248c565b9150612a7582612a36565b602082019050919050565b5f6020820190508181035f830152612a9781612a5e565b9050919050565b5f81519050612aac81612701565b92915050565b5f60208284031215612ac757612ac661252c565b5b5f612ad484828501612a9e565b91505092915050565b7f45444d413a20546f6b656e207265636f76657279206661696c656400000000005f82015250565b5f612b11601b8361248c565b9150612b1c82612add565b602082019050919050565b5f6020820190508181035f830152612b3e81612b05565b9050919050565b5f606082019050612b585f830186612434565b612b656020830185612434565b612b72604083018461244c565b949350505050565b5f604082019050612b8d5f830185612434565b612b9a6020830184612434565b9392505050565b7f45444d413a2063616c6c6572206973206e6f74207468652070726573616c65005f82015250565b5f612bd5601f8361248c565b9150612be082612ba1565b602082019050919050565b5f6020820190508181035f830152612c0281612bc9565b9050919050565b7f496e73756666696369656e742062616c616e63650000000000000000000000005f82015250565b5f612c3d60148361248c565b9150612c4882612c09565b602082019050919050565b5f6020820190508181035f830152612c6a81612c31565b9050919050565b7f4f776e61626c653a207a65726f206164647265737300000000000000000000005f82015250565b5f612ca560158361248c565b9150612cb082612c71565b602082019050919050565b5f6020820190508181035f830152612cd281612c99565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612d1082612443565b9150612d1b83612443565b925082612d2b57612d2a612cd9565b5b828204905092915050565b5f612d4082612443565b9150612d4b83612443565b9250828202612d5981612443565b91508282048414831517612d7057612d6f6127dc565b5b5092915050565b7f416d6f756e74206578636565647320756e6c6f636b65642062616c616e6365005f82015250565b5f612dab601f8361248c565b9150612db682612d77565b602082019050919050565b5f6020820190508181035f830152612dd881612d9f565b905091905056fea264697066735822122016d2027019b9afd948c562b881eadbc70ede2a611006dcef529e7f1ca731253f64736f6c63430008140033

Deployed Bytecode

0x6080604052600436106101ba575f3560e01c80638da5cb5b116100eb578063bfa883ab11610089578063e1a7cc7a11610063578063e1a7cc7a14610660578063e388c4231461069c578063f2fde38b146106da578063f78dcd3d14610702576101fa565b8063bfa883ab146105d4578063d5fcc7b6146105fc578063dd62ed3e14610624576101fa565b8063a43be57b116100c5578063a43be57b14610508578063a457c2d714610532578063a5ca2afa1461056e578063a9059cbb14610598576101fa565b80638da5cb5b1461048c578063934cefef146104b657806395d89b41146104de576101fa565b8063395093511161015857806353135ca01161013257806353135ca0146103e85780636899cb701461041257806370a082311461043a578063715018a614610476576101fa565b8063395093511461034857806342966c68146103845780634abc4a3c146103ac576101fa565b806318160ddd1161019457806318160ddd1461028e57806323b872dd146102b8578063249b7c19146102f4578063313ce5671461031e576101fa565b806306fdde03146101fe578063095ea7b314610228578063122fe68514610264576101fa565b366101fa577f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587433346040516101f092919061245b565b60405180910390a1005b5f80fd5b348015610209575f80fd5b5061021261073e565b60405161021f919061250c565b60405180910390f35b348015610233575f80fd5b5061024e60048036038101906102499190612584565b61077b565b60405161025b91906125dc565b60405180910390f35b34801561026f575f80fd5b50610278610798565b60405161028591906125f5565b60405180910390f35b348015610299575f80fd5b506102a26107bd565b6040516102af919061260e565b60405180910390f35b3480156102c3575f80fd5b506102de60048036038101906102d99190612627565b6107c6565b6040516102eb91906125dc565b60405180910390f35b3480156102ff575f80fd5b50610308610879565b604051610315919061260e565b60405180910390f35b348015610329575f80fd5b5061033261087f565b60405161033f9190612692565b60405180910390f35b348015610353575f80fd5b5061036e60048036038101906103699190612584565b610887565b60405161037b91906125dc565b60405180910390f35b34801561038f575f80fd5b506103aa60048036038101906103a591906126ab565b61092e565b005b3480156103b7575f80fd5b506103d260048036038101906103cd91906126d6565b610a7f565b6040516103df91906125dc565b60405180910390f35b3480156103f3575f80fd5b506103fc610a9c565b60405161040991906125dc565b60405180910390f35b34801561041d575f80fd5b50610438600480360381019061043391906126d6565b610aae565b005b348015610445575f80fd5b50610460600480360381019061045b91906126d6565b610c79565b60405161046d919061260e565b60405180910390f35b348015610481575f80fd5b5061048a610cbf565b005b348015610497575f80fd5b506104a0610e0d565b6040516104ad91906125f5565b60405180910390f35b3480156104c1575f80fd5b506104dc60048036038101906104d7919061272b565b610e34565b005b3480156104e9575f80fd5b506104f2610f59565b6040516104ff919061250c565b60405180910390f35b348015610513575f80fd5b5061051c610f96565b60405161052991906125dc565b60405180910390f35b34801561053d575f80fd5b5061055860048036038101906105539190612584565b6110d9565b60405161056591906125dc565b60405180910390f35b348015610579575f80fd5b50610582611180565b60405161058f919061260e565b60405180910390f35b3480156105a3575f80fd5b506105be60048036038101906105b99190612584565b611187565b6040516105cb91906125dc565b60405180910390f35b3480156105df575f80fd5b506105fa60048036038101906105f59190612627565b6111a4565b005b348015610607575f80fd5b50610622600480360381019061061d91906126d6565b6113a2565b005b34801561062f575f80fd5b5061064a60048036038101906106459190612769565b611591565b604051610657919061260e565b60405180910390f35b34801561066b575f80fd5b5061068660048036038101906106819190612584565b611613565b60405161069391906125dc565b60405180910390f35b3480156106a7575f80fd5b506106c260048036038101906106bd91906126d6565b611985565b6040516106d1939291906127a7565b60405180910390f35b3480156106e5575f80fd5b5061070060048036038101906106fb91906126d6565b6119b7565b005b34801561070d575f80fd5b50610728600480360381019061072391906126d6565b611b74565b604051610735919061260e565b60405180910390f35b60606040518060400160405280600481526020017f45444d4100000000000000000000000000000000000000000000000000000000815250905090565b5f61078e610787611d37565b8484611d3e565b6001905092915050565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600154905090565b5f6107d2848484611f05565b61086e846107de611d37565b8460065f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610825611d37565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546108699190612809565b611d3e565b600190509392505050565b60035481565b5f6012905090565b5f610924610893611d37565b848460065f6108a0611d37565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461091f919061283c565b611d3e565b6001905092915050565b5f8111801561097a57508060055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410155b6109b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b0906128b9565b60405180910390fd5b6109c333826121a8565b8060055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610a0f9190612809565b925050819055508060015f828254610a279190612809565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167f696de425f79f4a40bc6d2122ca50507f0efbeabbff86a84871b7196ab8ea8df782604051610a74919061260e565b60405180910390a250565b6008602052805f5260405f205f915054906101000a900460ff1681565b60025f9054906101000a900460ff1681565b610ab6611d37565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3990612921565b60405180910390fd5b805f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610bb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba890612989565b60405180910390fd5b5f4790505f8111610bf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bee906129f1565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015610c3a573d5f803e3d5ffd5b507f05af21d7340bf49fde03a32c3bcc785015c94acd83531fc6dfbfb93a24c364ca8382604051610c6c92919061245b565b60405180910390a1505050565b5f60055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610cc7611d37565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4a90612921565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610e3c611d37565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ec8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebf90612921565b60405180910390fd5b8060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507fed17b735383cdd87b5ed1cfda23d9795c9c88e9fc11998f45d522e40a3d6c28e8282604051610f4d929190612a0f565b60405180910390a15050565b60606040518060400160405280600381526020017f45444d0000000000000000000000000000000000000000000000000000000000815250905090565b5f610f9f611d37565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461102b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102290612921565b60405180910390fd5b60025f9054906101000a900460ff16611079576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107090612a80565b60405180910390fd5b5f60025f6101000a81548160ff021916908315150217905550426003819055507fae0c5c85af4072968cc258641c5f1dcbcb9c78e621b47c76ccf3e64a6449860a6003546040516110ca919061260e565b60405180910390a16001905090565b5f6111766110e5611d37565b848460065f6110f2611d37565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546111719190612809565b611d3e565b6001905092915050565b6276a70081565b5f61119a611193611d37565b8484611f05565b6001905092915050565b6111ac611d37565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611238576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122f90612921565b60405180910390fd5b815f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036112a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129e90612989565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b81526004016112e292919061245b565b6020604051808303815f875af11580156112fe573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113229190612ab2565b611361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135890612b27565b60405180910390fd5b7f401f439d865a766757ec78675925bd67198d5e78805aa41691b34b5d6a6cbbe684848460405161139493929190612b45565b60405180910390a150505050565b6113aa611d37565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142d90612921565b60405180910390fd5b60025f9054906101000a900460ff16611484576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147b90612a80565b60405180910390fd5b805f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ea90612989565b60405180910390fd5b7f7fd810ab02d561ffc4f35f3ffbba4bb8a95faf3038286804e27d6fa6b2d3ae5d60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683604051611545929190612b7a565b60405180910390a18160045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b5f60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f61161c611d37565b73ffffffffffffffffffffffffffffffffffffffff1660045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a190612beb565b60405180910390fd5b60025f9054906101000a900460ff166116f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ef90612a80565b60405180910390fd5b825f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175e90612989565b60405180910390fd5b8261177133610c79565b10156117b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a990612c53565b60405180910390fd5b5f60075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f01540361188b5760405180606001604052808481526020015f81526020015f151581525060075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f820151815f0155602082015181600101556040820151816002015f6101000a81548160ff02191690831515021790555090505061191a565b8260075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f01546118d6919061283c565b60075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f01819055505b8373ffffffffffffffffffffffffffffffffffffffff167fd4691cc79b8fc72aac1e8c0d15a2ca06d71a386c983f815266f0fce713dc5ea784604051611960919061260e565b60405180910390a261197a611973611d37565b8585611f05565b600191505092915050565b6007602052805f5260405f205f91509050805f015490806001015490806002015f9054906101000a900460ff16905083565b6119bf611d37565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4290612921565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ab9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab090612cbb565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f60025f9054906101000a900460ff1615611b91575f9050611d32565b5f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f815f01541480611be957508060010154815f015411155b15611bf7575f915050611d32565b806002015f9054906101000a900460ff168015611c2357506276a700600354611c20919061283c565b42105b15611c31575f915050611d32565b5f6276a70060035442611c449190612809565b611c4e9190612d06565b9050816002015f9054906101000a900460ff16158015611c6d57505f81145b15611c7b5760019050611c94565b60018110611c9357600181611c90919061283c565b90505b5b6005811115611ca257600590505b5f6064601483611cb29190612d36565b845f0154611cc09190612d36565b611cca9190612d06565b90505f836001015482611cdd9190612809565b90505f8103611cf2575f945050505050611d32565b8360010154845f0154611d059190612809565b811115611d2a578360010154845f0154611d1f9190612809565b945050505050611d32565b809450505050505b919050565b5f33905090565b825f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611dad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da490612989565b60405180910390fd5b825f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1390612989565b60405180910390fd5b8260065f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051611ef6919061260e565b60405180910390a35050505050565b815f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6b90612989565b60405180910390fd5b835f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611fe3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fda90612989565b60405180910390fd5b5f603c6276a7006005611ff69190612d36565b612000919061283c565b905060025f9054906101000a900460ff1680612029575060035481612025919061283c565b4211155b15612095575f84118015612084575060085f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156120945761209386856121a8565b5b5b8360055f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546120e19190612809565b925050819055508360055f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612134919061283c565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612198919061260e565b60405180910390a3505050505050565b5f6121b283611b74565b90505f81111561224d578060075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2060010154612208919061283c565b60075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600101819055505b5f60075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206001015460075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f01546122d99190612809565b90505f8111156123fe57806122ed85610c79565b6122f79190612809565b831115612339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233090612dc1565b60405180910390fd5b60075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206002015f9054906101000a900460ff1615801561239f575060025f9054906101000a900460ff16155b156123fd57600160075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206002015f6101000a81548160ff0219169083151502179055505b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61242d82612404565b9050919050565b61243d81612423565b82525050565b5f819050919050565b61245581612443565b82525050565b5f60408201905061246e5f830185612434565b61247b602083018461244c565b9392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156124b957808201518184015260208101905061249e565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6124de82612482565b6124e8818561248c565b93506124f881856020860161249c565b612501816124c4565b840191505092915050565b5f6020820190508181035f83015261252481846124d4565b905092915050565b5f80fd5b61253981612423565b8114612543575f80fd5b50565b5f8135905061255481612530565b92915050565b61256381612443565b811461256d575f80fd5b50565b5f8135905061257e8161255a565b92915050565b5f806040838503121561259a5761259961252c565b5b5f6125a785828601612546565b92505060206125b885828601612570565b9150509250929050565b5f8115159050919050565b6125d6816125c2565b82525050565b5f6020820190506125ef5f8301846125cd565b92915050565b5f6020820190506126085f830184612434565b92915050565b5f6020820190506126215f83018461244c565b92915050565b5f805f6060848603121561263e5761263d61252c565b5b5f61264b86828701612546565b935050602061265c86828701612546565b925050604061266d86828701612570565b9150509250925092565b5f60ff82169050919050565b61268c81612677565b82525050565b5f6020820190506126a55f830184612683565b92915050565b5f602082840312156126c0576126bf61252c565b5b5f6126cd84828501612570565b91505092915050565b5f602082840312156126eb576126ea61252c565b5b5f6126f884828501612546565b91505092915050565b61270a816125c2565b8114612714575f80fd5b50565b5f8135905061272581612701565b92915050565b5f80604083850312156127415761274061252c565b5b5f61274e85828601612546565b925050602061275f85828601612717565b9150509250929050565b5f806040838503121561277f5761277e61252c565b5b5f61278c85828601612546565b925050602061279d85828601612546565b9150509250929050565b5f6060820190506127ba5f83018661244c565b6127c7602083018561244c565b6127d460408301846125cd565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61281382612443565b915061281e83612443565b9250828203905081811115612836576128356127dc565b5b92915050565b5f61284682612443565b915061285183612443565b9250828201905080821115612869576128686127dc565b5b92915050565b7f496e76616c696420746f6b656e20616d6f756e740000000000000000000000005f82015250565b5f6128a360148361248c565b91506128ae8261286f565b602082019050919050565b5f6020820190508181035f8301526128d081612897565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61290b60208361248c565b9150612916826128d7565b602082019050919050565b5f6020820190508181035f830152612938816128ff565b9050919050565b7f45444d413a2041646472657373206d757374206e6f74206265207a65726f00005f82015250565b5f612973601e8361248c565b915061297e8261293f565b602082019050919050565b5f6020820190508181035f8301526129a081612967565b9050919050565b7f45444d413a204e6f2045544820746f207265636f7665720000000000000000005f82015250565b5f6129db60178361248c565b91506129e6826129a7565b602082019050919050565b5f6020820190508181035f830152612a08816129cf565b9050919050565b5f604082019050612a225f830185612434565b612a2f60208301846125cd565b9392505050565b7f45444d413a2070726573616c6520616c726561647920656e6465642e000000005f82015250565b5f612a6a601c8361248c565b9150612a7582612a36565b602082019050919050565b5f6020820190508181035f830152612a9781612a5e565b9050919050565b5f81519050612aac81612701565b92915050565b5f60208284031215612ac757612ac661252c565b5b5f612ad484828501612a9e565b91505092915050565b7f45444d413a20546f6b656e207265636f76657279206661696c656400000000005f82015250565b5f612b11601b8361248c565b9150612b1c82612add565b602082019050919050565b5f6020820190508181035f830152612b3e81612b05565b9050919050565b5f606082019050612b585f830186612434565b612b656020830185612434565b612b72604083018461244c565b949350505050565b5f604082019050612b8d5f830185612434565b612b9a6020830184612434565b9392505050565b7f45444d413a2063616c6c6572206973206e6f74207468652070726573616c65005f82015250565b5f612bd5601f8361248c565b9150612be082612ba1565b602082019050919050565b5f6020820190508181035f830152612c0281612bc9565b9050919050565b7f496e73756666696369656e742062616c616e63650000000000000000000000005f82015250565b5f612c3d60148361248c565b9150612c4882612c09565b602082019050919050565b5f6020820190508181035f830152612c6a81612c31565b9050919050565b7f4f776e61626c653a207a65726f206164647265737300000000000000000000005f82015250565b5f612ca560158361248c565b9150612cb082612c71565b602082019050919050565b5f6020820190508181035f830152612cd281612c99565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612d1082612443565b9150612d1b83612443565b925082612d2b57612d2a612cd9565b5b828204905092915050565b5f612d4082612443565b9150612d4b83612443565b9250828202612d5981612443565b91508282048414831517612d7057612d6f6127dc565b5b5092915050565b7f416d6f756e74206578636565647320756e6c6f636b65642062616c616e6365005f82015250565b5f612dab601f8361248c565b9150612db682612d77565b602082019050919050565b5f6020820190508181035f830152612dd881612d9f565b905091905056fea264697066735822122016d2027019b9afd948c562b881eadbc70ede2a611006dcef529e7f1ca731253f64736f6c63430008140033

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.