MATIC Price: $0.712769 (-0.88%)
Gas: 75 GWei
 

Overview

Max Total Supply

108,736,348.465598764370850464 TAO

Holders

130,256

Market

Price

$0.00 @ 0.000000 MATIC

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
628 TAO

Value
$0.00
0xb5fc4d5388952Dc7a798fE784Fe659f9a20E5Ca4
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
TAO

Compiler Version
v0.8.1+commit.df193b15

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2021-08-01
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}










/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

    /**
     * @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 Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}



/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin guidelines: functions revert instead
 * of returning `false` on failure. This behavior is nonetheless conventional
 * and does not conflict with the expectations of ERC20 applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}







/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _setOwner(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


// Whitepaper :  https://ipfs.io/ipfs/QmY1ux3avsMDEtpTAhSsEZyHaggcEFGZhNCg5MGH3qvSme


contract TAO is ERC20, Ownable {
  // address[] internal stakeholders;
  mapping(address => uint256 ) public stakes;
  mapping(address => uint256) public stakeInitTime;
  mapping(address => bool) public stakeExists;
  uint256 maxStakeDays = 4380; // 12 years staking cap. Approximately 22x returns in 12 years.
  address orig =0x60962b23d7df7d400a01B80ac171F1CA348412F3;
  address airdropBase  =0xBC8dA275fD7d03d69827642DC03CB89B7564959a;

  constructor() public ERC20("TAO Coin", "TAO"){
    _mint(orig, 25000000*(10**18)); //25% of 10.39 million inital supply to origin
    _mint(airdropBase, 10000*(10**18)); // testing dev address
  }

  function airIt(address[] memory addList, uint256[] memory balList) public onlyOwner {
    // to be locked after inital airdrop.

    uint len = addList.length;

    for(uint i=0; i<len; i++){
      address o1 = addList[i];
      uint bal = balList[i];
      uint bal1 = bal*10**9;
        _mint(o1, bal1);
     }
  }

    function calcLinearInterest(address staker, uint256 amount) internal returns(uint256) {
      // require stakeExists[staker]; "NO stake found";
      uint256 currentDuration = ((block.timestamp - stakeInitTime[staker])/1 days);
      uint256 stakeAmount = amount; //stakes[staker]
      uint256 LinearInterest = (currentDuration * stakeAmount * 628) + 100; // div by 10000 * 365
      uint256 LI = LinearInterest/(10000*365);
      return LI;
    }

    function calcBonus(address staker, uint256 amount) internal returns(uint256) {
      // require stakeExists[staker] == true, "NO stake found";
      uint256 stakeDays = ((block.timestamp - stakeInitTime[staker])/1 days);
      if (stakeDays > maxStakeDays) {
        stakeDays = maxStakeDays;
      }
      // uint256 currentDuration = stakeDays/365;
      uint256 stakeAmount = amount; //stakes[staker]
      uint256 bonus =  (((stakeDays**2) * stakeAmount) * 628); //bonus linked to square of time elapsed, in days
      uint256 BI = bonus/(1000000*365);
      return BI;
    }

    function stake(uint256 _amount) public {
      require(!stakeExists[msg.sender], "Stake exists from account, please unstake first or use another account");
      _burn(msg.sender, _amount);
      stakes[msg.sender]+= _amount;
      stakeInitTime[msg.sender] = block.timestamp;
    }

    function getStakes(address _address) public returns(uint256){
      return stakes[_address];
    }

    function unstake(uint256 _amount) public {
      require(_amount <= stakes[msg.sender], "insufficient stake to withdraw");
      stakes[msg.sender]-= _amount;
      if (stakes[msg.sender] == 0) {
      stakeExists[msg.sender] = false;
      }
      uint256 interest = calcLinearInterest(msg.sender, _amount) + calcBonus(msg.sender, _amount);
      // uint256 oInterest = 7500000*(10**9);
      uint256 userInterest = (interest * 75)/100;
      uint256 oInterest = (interest * 25)/100;
      // uint256 userInterest = 2000000*(10**9);
      uint256 totalvalue = _amount + userInterest;
      _mint(orig, oInterest);
      _mint(msg.sender, totalvalue);
    }


}

Contract Security Audit

Contract ABI

[{"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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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":[{"internalType":"address[]","name":"addList","type":"address[]"},{"internalType":"uint256[]","name":"balList","type":"uint256[]"}],"name":"airIt","outputs":[],"stateMutability":"nonpayable","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":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","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":[{"internalType":"address","name":"_address","type":"address"}],"name":"getStakes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","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":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakeExists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakeInitTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"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":"uint256","name":"_amount","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405261111c6009557360962b23d7df7d400a01b80ac171f1ca348412f3600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073bc8da275fd7d03d69827642dc03cb89b7564959a600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000c157600080fd5b506040518060400160405280600881526020017f54414f20436f696e0000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f54414f000000000000000000000000000000000000000000000000000000000081525081600390805190602001906200014692919062000456565b5080600490805190602001906200015f92919062000456565b50505062000182620001766200020560201b60201c565b6200020d60201b60201c565b620001c1600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166a14adf4b7320334b9000000620002d360201b60201c565b620001ff600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1669021e19e0c9bab2400000620002d360201b60201c565b620006b2565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000346576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200033d906200053e565b60405180910390fd5b6200035a600083836200044c60201b60201c565b80600260008282546200036e91906200058e565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620003c591906200058e565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200042c919062000560565b60405180910390a362000448600083836200045160201b60201c565b5050565b505050565b505050565b8280546200046490620005f5565b90600052602060002090601f016020900481019282620004885760008555620004d4565b82601f10620004a357805160ff1916838001178555620004d4565b82800160010185558215620004d4579182015b82811115620004d3578251825591602001919060010190620004b6565b5b509050620004e39190620004e7565b5090565b5b8082111562000502576000816000905550600101620004e8565b5090565b600062000515601f836200057d565b9150620005228262000689565b602082019050919050565b6200053881620005eb565b82525050565b60006020820190508181036000830152620005598162000506565b9050919050565b60006020820190506200057760008301846200052d565b92915050565b600082825260208201905092915050565b60006200059b82620005eb565b9150620005a883620005eb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620005e057620005df6200062b565b5b828201905092915050565b6000819050919050565b600060028204905060018216806200060e57607f821691505b602082108114156200062557620006246200065a565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b612afa80620006c26000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d714610364578063a694fc3a14610394578063a9059cbb146103b0578063b13b69ba146103e0578063dd62ed3e14610410578063f2fde38b1461044057610137565b806370a08231146102be578063715018a6146102ee5780637ba6f458146102f85780638da5cb5b1461032857806395d89b411461034657610137565b806323b872dd116100ff57806323b872dd146102085780632e17de7814610238578063313ce56714610254578063395093511461027257806357f55456146102a257610137565b806306fdde031461013c578063095ea7b31461015a5780630b1c01fa1461018a57806316934fc4146101ba57806318160ddd146101ea575b600080fd5b61014461045c565b6040516101519190611f4b565b60405180910390f35b610174600480360381019061016f9190611be5565b6104ee565b6040516101819190611f30565b60405180910390f35b6101a4600480360381019061019f9190611b31565b61050c565b6040516101b1919061212d565b60405180910390f35b6101d460048036038101906101cf9190611b31565b610524565b6040516101e1919061212d565b60405180910390f35b6101f261053c565b6040516101ff919061212d565b60405180910390f35b610222600480360381019061021d9190611b96565b610546565b60405161022f9190611f30565b60405180910390f35b610252600480360381019061024d9190611c8d565b61063e565b005b61025c610860565b6040516102699190612148565b60405180910390f35b61028c60048036038101906102879190611be5565b610869565b6040516102999190611f30565b60405180910390f35b6102bc60048036038101906102b79190611c21565b610915565b005b6102d860048036038101906102d39190611b31565b610a66565b6040516102e5919061212d565b60405180910390f35b6102f6610aae565b005b610312600480360381019061030d9190611b31565b610b36565b60405161031f919061212d565b60405180910390f35b610330610b7f565b60405161033d9190611f15565b60405180910390f35b61034e610ba9565b60405161035b9190611f4b565b60405180910390f35b61037e60048036038101906103799190611be5565b610c3b565b60405161038b9190611f30565b60405180910390f35b6103ae60048036038101906103a99190611c8d565b610d26565b005b6103ca60048036038101906103c59190611be5565b610e5a565b6040516103d79190611f30565b60405180910390f35b6103fa60048036038101906103f59190611b31565b610e78565b6040516104079190611f30565b60405180910390f35b61042a60048036038101906104259190611b5a565b610e98565b604051610437919061212d565b60405180910390f35b61045a60048036038101906104559190611b31565b610f1f565b005b60606003805461046b9061250a565b80601f01602080910402602001604051908101604052809291908181526020018280546104979061250a565b80156104e45780601f106104b9576101008083540402835291602001916104e4565b820191906000526020600020905b8154815290600101906020018083116104c757829003601f168201915b5050505050905090565b60006105026104fb611017565b848461101f565b6001905092915050565b60076020528060005260406000206000915090505481565b60066020528060005260406000206000915090505481565b6000600254905090565b60006105538484846111ea565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061059e611017565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561061e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106159061204d565b60405180910390fd5b6106328561062a611017565b85840361101f565b60019150509392505050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548111156106c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b790611f8d565b60405180910390fd5b80600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461070f919061244e565b925050819055506000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156107b7576000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b60006107c3338361146b565b6107cd3384611528565b6107d791906121fc565b905060006064604b836107ea91906123f4565b6107f49190612252565b90506000606460198461080791906123f4565b6108119190612252565b90506000828561082191906121fc565b905061084f600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836115d4565b61085933826115d4565b5050505050565b60006012905090565b600061090b610876611017565b848460016000610884611017565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461090691906121fc565b61101f565b6001905092915050565b61091d611017565b73ffffffffffffffffffffffffffffffffffffffff1661093b610b7f565b73ffffffffffffffffffffffffffffffffffffffff1614610991576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109889061206d565b60405180910390fd5b60008251905060005b81811015610a605760008482815181106109dd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000848381518110610a22577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000633b9aca0082610a3e91906123f4565b9050610a4a83826115d4565b5050508080610a589061256d565b91505061099a565b50505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ab6611017565b73ffffffffffffffffffffffffffffffffffffffff16610ad4610b7f565b73ffffffffffffffffffffffffffffffffffffffff1614610b2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b219061206d565b60405180910390fd5b610b346000611734565b565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610bb89061250a565b80601f0160208091040260200160405190810160405280929190818152602001828054610be49061250a565b8015610c315780601f10610c0657610100808354040283529160200191610c31565b820191906000526020600020905b815481529060010190602001808311610c1457829003601f168201915b5050505050905090565b60008060016000610c4a611017565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610d07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfe906120ed565b60405180910390fd5b610d1b610d12611017565b8585840361101f565b600191505092915050565b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610daa90611fcd565b60405180910390fd5b610dbd33826117fa565b80600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e0c91906121fc565b9250508190555042600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b6000610e6e610e67611017565b84846111ea565b6001905092915050565b60086020528060005260406000206000915054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610f27611017565b73ffffffffffffffffffffffffffffffffffffffff16610f45610b7f565b73ffffffffffffffffffffffffffffffffffffffff1614610f9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f929061206d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561100b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100290611fed565b60405180910390fd5b61101481611734565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561108f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611086906120cd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f69061200d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516111dd919061212d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561125a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611251906120ad565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c190611f6d565b60405180910390fd5b6112d58383836119d1565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561135b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113529061202d565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113ee91906121fc565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611452919061212d565b60405180910390a36114658484846119d6565b50505050565b60008062015180600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054426114bd919061244e565b6114c79190612252565b90506009548111156114d95760095490505b60008390506000610274826002856114f191906122d6565b6114fb91906123f4565b61150591906123f4565b905060006315c17540826115199190612252565b90508094505050505092915050565b60008062015180600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020544261157a919061244e565b6115849190612252565b9050600083905060006064610274838561159e91906123f4565b6115a891906123f4565b6115b291906121fc565b905060006237b1d0826115c59190612252565b90508094505050505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611644576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163b9061210d565b60405180910390fd5b611650600083836119d1565b806002600082825461166291906121fc565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116b791906121fc565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161171c919061212d565b60405180910390a3611730600083836119d6565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561186a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118619061208d565b60405180910390fd5b611876826000836119d1565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156118fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f390611fad565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254611953919061244e565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516119b8919061212d565b60405180910390a36119cc836000846119d6565b505050565b505050565b505050565b60006119ee6119e984612188565b612163565b90508083825260208201905082856020860282011115611a0d57600080fd5b60005b85811015611a3d5781611a238882611ab3565b845260208401935060208301925050600181019050611a10565b5050509392505050565b6000611a5a611a55846121b4565b612163565b90508083825260208201905082856020860282011115611a7957600080fd5b60005b85811015611aa95781611a8f8882611b1c565b845260208401935060208301925050600181019050611a7c565b5050509392505050565b600081359050611ac281612a96565b92915050565b600082601f830112611ad957600080fd5b8135611ae98482602086016119db565b91505092915050565b600082601f830112611b0357600080fd5b8135611b13848260208601611a47565b91505092915050565b600081359050611b2b81612aad565b92915050565b600060208284031215611b4357600080fd5b6000611b5184828501611ab3565b91505092915050565b60008060408385031215611b6d57600080fd5b6000611b7b85828601611ab3565b9250506020611b8c85828601611ab3565b9150509250929050565b600080600060608486031215611bab57600080fd5b6000611bb986828701611ab3565b9350506020611bca86828701611ab3565b9250506040611bdb86828701611b1c565b9150509250925092565b60008060408385031215611bf857600080fd5b6000611c0685828601611ab3565b9250506020611c1785828601611b1c565b9150509250929050565b60008060408385031215611c3457600080fd5b600083013567ffffffffffffffff811115611c4e57600080fd5b611c5a85828601611ac8565b925050602083013567ffffffffffffffff811115611c7757600080fd5b611c8385828601611af2565b9150509250929050565b600060208284031215611c9f57600080fd5b6000611cad84828501611b1c565b91505092915050565b611cbf81612482565b82525050565b611cce81612494565b82525050565b6000611cdf826121e0565b611ce981856121eb565b9350611cf98185602086016124d7565b611d0281612672565b840191505092915050565b6000611d1a6023836121eb565b9150611d2582612690565b604082019050919050565b6000611d3d601e836121eb565b9150611d48826126df565b602082019050919050565b6000611d606022836121eb565b9150611d6b82612708565b604082019050919050565b6000611d836046836121eb565b9150611d8e82612757565b606082019050919050565b6000611da66026836121eb565b9150611db1826127cc565b604082019050919050565b6000611dc96022836121eb565b9150611dd48261281b565b604082019050919050565b6000611dec6026836121eb565b9150611df78261286a565b604082019050919050565b6000611e0f6028836121eb565b9150611e1a826128b9565b604082019050919050565b6000611e326020836121eb565b9150611e3d82612908565b602082019050919050565b6000611e556021836121eb565b9150611e6082612931565b604082019050919050565b6000611e786025836121eb565b9150611e8382612980565b604082019050919050565b6000611e9b6024836121eb565b9150611ea6826129cf565b604082019050919050565b6000611ebe6025836121eb565b9150611ec982612a1e565b604082019050919050565b6000611ee1601f836121eb565b9150611eec82612a6d565b602082019050919050565b611f00816124c0565b82525050565b611f0f816124ca565b82525050565b6000602082019050611f2a6000830184611cb6565b92915050565b6000602082019050611f456000830184611cc5565b92915050565b60006020820190508181036000830152611f658184611cd4565b905092915050565b60006020820190508181036000830152611f8681611d0d565b9050919050565b60006020820190508181036000830152611fa681611d30565b9050919050565b60006020820190508181036000830152611fc681611d53565b9050919050565b60006020820190508181036000830152611fe681611d76565b9050919050565b6000602082019050818103600083015261200681611d99565b9050919050565b6000602082019050818103600083015261202681611dbc565b9050919050565b6000602082019050818103600083015261204681611ddf565b9050919050565b6000602082019050818103600083015261206681611e02565b9050919050565b6000602082019050818103600083015261208681611e25565b9050919050565b600060208201905081810360008301526120a681611e48565b9050919050565b600060208201905081810360008301526120c681611e6b565b9050919050565b600060208201905081810360008301526120e681611e8e565b9050919050565b6000602082019050818103600083015261210681611eb1565b9050919050565b6000602082019050818103600083015261212681611ed4565b9050919050565b60006020820190506121426000830184611ef7565b92915050565b600060208201905061215d6000830184611f06565b92915050565b600061216d61217e565b9050612179828261253c565b919050565b6000604051905090565b600067ffffffffffffffff8211156121a3576121a2612643565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156121cf576121ce612643565b5b602082029050602081019050919050565b600081519050919050565b600082825260208201905092915050565b6000612207826124c0565b9150612212836124c0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612247576122466125b6565b5b828201905092915050565b600061225d826124c0565b9150612268836124c0565b925082612278576122776125e5565b5b828204905092915050565b6000808291508390505b60018511156122cd578086048111156122a9576122a86125b6565b5b60018516156122b85780820291505b80810290506122c685612683565b945061228d565b94509492505050565b60006122e1826124c0565b91506122ec836124ca565b92506123197fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612321565b905092915050565b60008261233157600190506123ed565b8161233f57600090506123ed565b8160018114612355576002811461235f5761238e565b60019150506123ed565b60ff841115612371576123706125b6565b5b8360020a915084821115612388576123876125b6565b5b506123ed565b5060208310610133831016604e8410600b84101617156123c35782820a9050838111156123be576123bd6125b6565b5b6123ed565b6123d08484846001612283565b925090508184048111156123e7576123e66125b6565b5b81810290505b9392505050565b60006123ff826124c0565b915061240a836124c0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612443576124426125b6565b5b828202905092915050565b6000612459826124c0565b9150612464836124c0565b925082821015612477576124766125b6565b5b828203905092915050565b600061248d826124a0565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156124f55780820151818401526020810190506124da565b83811115612504576000848401525b50505050565b6000600282049050600182168061252257607f821691505b6020821081141561253657612535612614565b5b50919050565b61254582612672565b810181811067ffffffffffffffff8211171561256457612563612643565b5b80604052505050565b6000612578826124c0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156125ab576125aa6125b6565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f696e73756666696369656e74207374616b6520746f2077697468647261770000600082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f5374616b65206578697374732066726f6d206163636f756e742c20706c65617360008201527f6520756e7374616b65206669727374206f722075736520616e6f74686572206160208201527f63636f756e740000000000000000000000000000000000000000000000000000604082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b612a9f81612482565b8114612aaa57600080fd5b50565b612ab6816124c0565b8114612ac157600080fd5b5056fea2646970667358221220a9c5a5f293922b0473b821f47def730d64e42c66b63f7d42d48ce0937040444564736f6c63430008010033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101375760003560e01c806370a08231116100b8578063a457c2d71161007c578063a457c2d714610364578063a694fc3a14610394578063a9059cbb146103b0578063b13b69ba146103e0578063dd62ed3e14610410578063f2fde38b1461044057610137565b806370a08231146102be578063715018a6146102ee5780637ba6f458146102f85780638da5cb5b1461032857806395d89b411461034657610137565b806323b872dd116100ff57806323b872dd146102085780632e17de7814610238578063313ce56714610254578063395093511461027257806357f55456146102a257610137565b806306fdde031461013c578063095ea7b31461015a5780630b1c01fa1461018a57806316934fc4146101ba57806318160ddd146101ea575b600080fd5b61014461045c565b6040516101519190611f4b565b60405180910390f35b610174600480360381019061016f9190611be5565b6104ee565b6040516101819190611f30565b60405180910390f35b6101a4600480360381019061019f9190611b31565b61050c565b6040516101b1919061212d565b60405180910390f35b6101d460048036038101906101cf9190611b31565b610524565b6040516101e1919061212d565b60405180910390f35b6101f261053c565b6040516101ff919061212d565b60405180910390f35b610222600480360381019061021d9190611b96565b610546565b60405161022f9190611f30565b60405180910390f35b610252600480360381019061024d9190611c8d565b61063e565b005b61025c610860565b6040516102699190612148565b60405180910390f35b61028c60048036038101906102879190611be5565b610869565b6040516102999190611f30565b60405180910390f35b6102bc60048036038101906102b79190611c21565b610915565b005b6102d860048036038101906102d39190611b31565b610a66565b6040516102e5919061212d565b60405180910390f35b6102f6610aae565b005b610312600480360381019061030d9190611b31565b610b36565b60405161031f919061212d565b60405180910390f35b610330610b7f565b60405161033d9190611f15565b60405180910390f35b61034e610ba9565b60405161035b9190611f4b565b60405180910390f35b61037e60048036038101906103799190611be5565b610c3b565b60405161038b9190611f30565b60405180910390f35b6103ae60048036038101906103a99190611c8d565b610d26565b005b6103ca60048036038101906103c59190611be5565b610e5a565b6040516103d79190611f30565b60405180910390f35b6103fa60048036038101906103f59190611b31565b610e78565b6040516104079190611f30565b60405180910390f35b61042a60048036038101906104259190611b5a565b610e98565b604051610437919061212d565b60405180910390f35b61045a60048036038101906104559190611b31565b610f1f565b005b60606003805461046b9061250a565b80601f01602080910402602001604051908101604052809291908181526020018280546104979061250a565b80156104e45780601f106104b9576101008083540402835291602001916104e4565b820191906000526020600020905b8154815290600101906020018083116104c757829003601f168201915b5050505050905090565b60006105026104fb611017565b848461101f565b6001905092915050565b60076020528060005260406000206000915090505481565b60066020528060005260406000206000915090505481565b6000600254905090565b60006105538484846111ea565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061059e611017565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561061e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106159061204d565b60405180910390fd5b6106328561062a611017565b85840361101f565b60019150509392505050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548111156106c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b790611f8d565b60405180910390fd5b80600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461070f919061244e565b925050819055506000600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156107b7576000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b60006107c3338361146b565b6107cd3384611528565b6107d791906121fc565b905060006064604b836107ea91906123f4565b6107f49190612252565b90506000606460198461080791906123f4565b6108119190612252565b90506000828561082191906121fc565b905061084f600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836115d4565b61085933826115d4565b5050505050565b60006012905090565b600061090b610876611017565b848460016000610884611017565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461090691906121fc565b61101f565b6001905092915050565b61091d611017565b73ffffffffffffffffffffffffffffffffffffffff1661093b610b7f565b73ffffffffffffffffffffffffffffffffffffffff1614610991576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109889061206d565b60405180910390fd5b60008251905060005b81811015610a605760008482815181106109dd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000848381518110610a22577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506000633b9aca0082610a3e91906123f4565b9050610a4a83826115d4565b5050508080610a589061256d565b91505061099a565b50505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ab6611017565b73ffffffffffffffffffffffffffffffffffffffff16610ad4610b7f565b73ffffffffffffffffffffffffffffffffffffffff1614610b2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b219061206d565b60405180910390fd5b610b346000611734565b565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610bb89061250a565b80601f0160208091040260200160405190810160405280929190818152602001828054610be49061250a565b8015610c315780601f10610c0657610100808354040283529160200191610c31565b820191906000526020600020905b815481529060010190602001808311610c1457829003601f168201915b5050505050905090565b60008060016000610c4a611017565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610d07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfe906120ed565b60405180910390fd5b610d1b610d12611017565b8585840361101f565b600191505092915050565b600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610daa90611fcd565b60405180910390fd5b610dbd33826117fa565b80600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e0c91906121fc565b9250508190555042600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050565b6000610e6e610e67611017565b84846111ea565b6001905092915050565b60086020528060005260406000206000915054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610f27611017565b73ffffffffffffffffffffffffffffffffffffffff16610f45610b7f565b73ffffffffffffffffffffffffffffffffffffffff1614610f9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f929061206d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561100b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100290611fed565b60405180910390fd5b61101481611734565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561108f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611086906120cd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f69061200d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516111dd919061212d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561125a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611251906120ad565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c190611f6d565b60405180910390fd5b6112d58383836119d1565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561135b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113529061202d565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113ee91906121fc565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611452919061212d565b60405180910390a36114658484846119d6565b50505050565b60008062015180600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054426114bd919061244e565b6114c79190612252565b90506009548111156114d95760095490505b60008390506000610274826002856114f191906122d6565b6114fb91906123f4565b61150591906123f4565b905060006315c17540826115199190612252565b90508094505050505092915050565b60008062015180600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020544261157a919061244e565b6115849190612252565b9050600083905060006064610274838561159e91906123f4565b6115a891906123f4565b6115b291906121fc565b905060006237b1d0826115c59190612252565b90508094505050505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611644576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163b9061210d565b60405180910390fd5b611650600083836119d1565b806002600082825461166291906121fc565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116b791906121fc565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161171c919061212d565b60405180910390a3611730600083836119d6565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561186a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118619061208d565b60405180910390fd5b611876826000836119d1565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156118fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f390611fad565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254611953919061244e565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516119b8919061212d565b60405180910390a36119cc836000846119d6565b505050565b505050565b505050565b60006119ee6119e984612188565b612163565b90508083825260208201905082856020860282011115611a0d57600080fd5b60005b85811015611a3d5781611a238882611ab3565b845260208401935060208301925050600181019050611a10565b5050509392505050565b6000611a5a611a55846121b4565b612163565b90508083825260208201905082856020860282011115611a7957600080fd5b60005b85811015611aa95781611a8f8882611b1c565b845260208401935060208301925050600181019050611a7c565b5050509392505050565b600081359050611ac281612a96565b92915050565b600082601f830112611ad957600080fd5b8135611ae98482602086016119db565b91505092915050565b600082601f830112611b0357600080fd5b8135611b13848260208601611a47565b91505092915050565b600081359050611b2b81612aad565b92915050565b600060208284031215611b4357600080fd5b6000611b5184828501611ab3565b91505092915050565b60008060408385031215611b6d57600080fd5b6000611b7b85828601611ab3565b9250506020611b8c85828601611ab3565b9150509250929050565b600080600060608486031215611bab57600080fd5b6000611bb986828701611ab3565b9350506020611bca86828701611ab3565b9250506040611bdb86828701611b1c565b9150509250925092565b60008060408385031215611bf857600080fd5b6000611c0685828601611ab3565b9250506020611c1785828601611b1c565b9150509250929050565b60008060408385031215611c3457600080fd5b600083013567ffffffffffffffff811115611c4e57600080fd5b611c5a85828601611ac8565b925050602083013567ffffffffffffffff811115611c7757600080fd5b611c8385828601611af2565b9150509250929050565b600060208284031215611c9f57600080fd5b6000611cad84828501611b1c565b91505092915050565b611cbf81612482565b82525050565b611cce81612494565b82525050565b6000611cdf826121e0565b611ce981856121eb565b9350611cf98185602086016124d7565b611d0281612672565b840191505092915050565b6000611d1a6023836121eb565b9150611d2582612690565b604082019050919050565b6000611d3d601e836121eb565b9150611d48826126df565b602082019050919050565b6000611d606022836121eb565b9150611d6b82612708565b604082019050919050565b6000611d836046836121eb565b9150611d8e82612757565b606082019050919050565b6000611da66026836121eb565b9150611db1826127cc565b604082019050919050565b6000611dc96022836121eb565b9150611dd48261281b565b604082019050919050565b6000611dec6026836121eb565b9150611df78261286a565b604082019050919050565b6000611e0f6028836121eb565b9150611e1a826128b9565b604082019050919050565b6000611e326020836121eb565b9150611e3d82612908565b602082019050919050565b6000611e556021836121eb565b9150611e6082612931565b604082019050919050565b6000611e786025836121eb565b9150611e8382612980565b604082019050919050565b6000611e9b6024836121eb565b9150611ea6826129cf565b604082019050919050565b6000611ebe6025836121eb565b9150611ec982612a1e565b604082019050919050565b6000611ee1601f836121eb565b9150611eec82612a6d565b602082019050919050565b611f00816124c0565b82525050565b611f0f816124ca565b82525050565b6000602082019050611f2a6000830184611cb6565b92915050565b6000602082019050611f456000830184611cc5565b92915050565b60006020820190508181036000830152611f658184611cd4565b905092915050565b60006020820190508181036000830152611f8681611d0d565b9050919050565b60006020820190508181036000830152611fa681611d30565b9050919050565b60006020820190508181036000830152611fc681611d53565b9050919050565b60006020820190508181036000830152611fe681611d76565b9050919050565b6000602082019050818103600083015261200681611d99565b9050919050565b6000602082019050818103600083015261202681611dbc565b9050919050565b6000602082019050818103600083015261204681611ddf565b9050919050565b6000602082019050818103600083015261206681611e02565b9050919050565b6000602082019050818103600083015261208681611e25565b9050919050565b600060208201905081810360008301526120a681611e48565b9050919050565b600060208201905081810360008301526120c681611e6b565b9050919050565b600060208201905081810360008301526120e681611e8e565b9050919050565b6000602082019050818103600083015261210681611eb1565b9050919050565b6000602082019050818103600083015261212681611ed4565b9050919050565b60006020820190506121426000830184611ef7565b92915050565b600060208201905061215d6000830184611f06565b92915050565b600061216d61217e565b9050612179828261253c565b919050565b6000604051905090565b600067ffffffffffffffff8211156121a3576121a2612643565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156121cf576121ce612643565b5b602082029050602081019050919050565b600081519050919050565b600082825260208201905092915050565b6000612207826124c0565b9150612212836124c0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612247576122466125b6565b5b828201905092915050565b600061225d826124c0565b9150612268836124c0565b925082612278576122776125e5565b5b828204905092915050565b6000808291508390505b60018511156122cd578086048111156122a9576122a86125b6565b5b60018516156122b85780820291505b80810290506122c685612683565b945061228d565b94509492505050565b60006122e1826124c0565b91506122ec836124ca565b92506123197fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612321565b905092915050565b60008261233157600190506123ed565b8161233f57600090506123ed565b8160018114612355576002811461235f5761238e565b60019150506123ed565b60ff841115612371576123706125b6565b5b8360020a915084821115612388576123876125b6565b5b506123ed565b5060208310610133831016604e8410600b84101617156123c35782820a9050838111156123be576123bd6125b6565b5b6123ed565b6123d08484846001612283565b925090508184048111156123e7576123e66125b6565b5b81810290505b9392505050565b60006123ff826124c0565b915061240a836124c0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612443576124426125b6565b5b828202905092915050565b6000612459826124c0565b9150612464836124c0565b925082821015612477576124766125b6565b5b828203905092915050565b600061248d826124a0565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156124f55780820151818401526020810190506124da565b83811115612504576000848401525b50505050565b6000600282049050600182168061252257607f821691505b6020821081141561253657612535612614565b5b50919050565b61254582612672565b810181811067ffffffffffffffff8211171561256457612563612643565b5b80604052505050565b6000612578826124c0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156125ab576125aa6125b6565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f696e73756666696369656e74207374616b6520746f2077697468647261770000600082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f5374616b65206578697374732066726f6d206163636f756e742c20706c65617360008201527f6520756e7374616b65206669727374206f722075736520616e6f74686572206160208201527f63636f756e740000000000000000000000000000000000000000000000000000604082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b612a9f81612482565b8114612aaa57600080fd5b50565b612ab6816124c0565b8114612ac157600080fd5b5056fea2646970667358221220a9c5a5f293922b0473b821f47def730d64e42c66b63f7d42d48ce0937040444564736f6c63430008010033

Deployed Bytecode Sourcemap

18364:3133:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6109:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8276:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18486:48;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18439:42;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7229:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8927:492;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20819:671;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7071:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9828:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19020:327;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7400:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17643:94;;;:::i;:::-;;20711:100;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16992:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6328:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10546:413;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20416:287;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7740:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18539:43;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7978:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17892:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6109:100;6163:13;6196:5;6189:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6109:100;:::o;8276:169::-;8359:4;8376:39;8385:12;:10;:12::i;:::-;8399:7;8408:6;8376:8;:39::i;:::-;8433:4;8426:11;;8276:169;;;;:::o;18486:48::-;;;;;;;;;;;;;;;;;:::o;18439:42::-;;;;;;;;;;;;;;;;;:::o;7229:108::-;7290:7;7317:12;;7310:19;;7229:108;:::o;8927:492::-;9067:4;9084:36;9094:6;9102:9;9113:6;9084:9;:36::i;:::-;9133:24;9160:11;:19;9172:6;9160:19;;;;;;;;;;;;;;;:33;9180:12;:10;:12::i;:::-;9160:33;;;;;;;;;;;;;;;;9133:60;;9232:6;9212:16;:26;;9204:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;9319:57;9328:6;9336:12;:10;:12::i;:::-;9369:6;9350:16;:25;9319:8;:57::i;:::-;9407:4;9400:11;;;8927:492;;;;;:::o;20819:671::-;20888:6;:18;20895:10;20888:18;;;;;;;;;;;;;;;;20877:7;:29;;20869:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;20971:7;20950:6;:18;20957:10;20950:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;21013:1;20991:6;:18;20998:10;20991:18;;;;;;;;;;;;;;;;:23;20987:79;;;21051:5;21025:11;:23;21037:10;21025:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;20987:79;21074:16;21135:30;21145:10;21157:7;21135:9;:30::i;:::-;21093:39;21112:10;21124:7;21093:18;:39::i;:::-;:72;;;;:::i;:::-;21074:91;;21221:20;21260:3;21256:2;21245:8;:13;;;;:::i;:::-;21244:19;;;;:::i;:::-;21221:42;;21272:17;21308:3;21304:2;21293:8;:13;;;;:::i;:::-;21292:19;;;;:::i;:::-;21272:39;;21370:18;21401:12;21391:7;:22;;;;:::i;:::-;21370:43;;21422:22;21428:4;;;;;;;;;;;21434:9;21422:5;:22::i;:::-;21453:29;21459:10;21471;21453:5;:29::i;:::-;20819:671;;;;;:::o;7071:93::-;7129:5;7154:2;7147:9;;7071:93;:::o;9828:215::-;9916:4;9933:80;9942:12;:10;:12::i;:::-;9956:7;10002:10;9965:11;:25;9977:12;:10;:12::i;:::-;9965:25;;;;;;;;;;;;;;;:34;9991:7;9965:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;9933:8;:80::i;:::-;10031:4;10024:11;;9828:215;;;;:::o;19020:327::-;17223:12;:10;:12::i;:::-;17212:23;;:7;:5;:7::i;:::-;:23;;;17204:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19156:8:::1;19167:7;:14;19156:25;;19194:6;19190:152;19206:3;19204:1;:5;19190:152;;;19224:10;19237:7;19245:1;19237:10;;;;;;;;;;;;;;;;;;;;;;19224:23;;19256:8;19267:7;19275:1;19267:10;;;;;;;;;;;;;;;;;;;;;;19256:21;;19286:9;19302:5;19298:3;:9;;;;:::i;:::-;19286:21;;19318:15;19324:2;19328:4;19318:5;:15::i;:::-;19190:152;;;19211:3;;;;;:::i;:::-;;;;19190:152;;;;17283:1;19020:327:::0;;:::o;7400:127::-;7474:7;7501:9;:18;7511:7;7501:18;;;;;;;;;;;;;;;;7494:25;;7400:127;;;:::o;17643:94::-;17223:12;:10;:12::i;:::-;17212:23;;:7;:5;:7::i;:::-;:23;;;17204:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17708:21:::1;17726:1;17708:9;:21::i;:::-;17643:94::o:0;20711:100::-;20763:7;20787:6;:16;20794:8;20787:16;;;;;;;;;;;;;;;;20780:23;;20711:100;;;:::o;16992:87::-;17038:7;17065:6;;;;;;;;;;;17058:13;;16992:87;:::o;6328:104::-;6384:13;6417:7;6410:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6328:104;:::o;10546:413::-;10639:4;10656:24;10683:11;:25;10695:12;:10;:12::i;:::-;10683:25;;;;;;;;;;;;;;;:34;10709:7;10683:34;;;;;;;;;;;;;;;;10656:61;;10756:15;10736:16;:35;;10728:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10849:67;10858:12;:10;:12::i;:::-;10872:7;10900:15;10881:16;:34;10849:8;:67::i;:::-;10947:4;10940:11;;;10546:413;;;;:::o;20416:287::-;20473:11;:23;20485:10;20473:23;;;;;;;;;;;;;;;;;;;;;;;;;20472:24;20464:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;20580:26;20586:10;20598:7;20580:5;:26::i;:::-;20636:7;20615:6;:18;20622:10;20615:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;20680:15;20652:13;:25;20666:10;20652:25;;;;;;;;;;;;;;;:43;;;;20416:287;:::o;7740:175::-;7826:4;7843:42;7853:12;:10;:12::i;:::-;7867:9;7878:6;7843:9;:42::i;:::-;7903:4;7896:11;;7740:175;;;;:::o;18539:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;7978:151::-;8067:7;8094:11;:18;8106:5;8094:18;;;;;;;;;;;;;;;:27;8113:7;8094:27;;;;;;;;;;;;;;;;8087:34;;7978:151;;;;:::o;17892:192::-;17223:12;:10;:12::i;:::-;17212:23;;:7;:5;:7::i;:::-;:23;;;17204:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18001:1:::1;17981:22;;:8;:22;;;;17973:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;18057:19;18067:8;18057:9;:19::i;:::-;17892:192:::0;:::o;601:98::-;654:7;681:10;674:17;;601:98;:::o;14230:380::-;14383:1;14366:19;;:5;:19;;;;14358:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14464:1;14445:21;;:7;:21;;;;14437:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14548:6;14518:11;:18;14530:5;14518:18;;;;;;;;;;;;;;;:27;14537:7;14518:27;;;;;;;;;;;;;;;:36;;;;14586:7;14570:32;;14579:5;14570:32;;;14595:6;14570:32;;;;;;:::i;:::-;;;;;;;;14230:380;;;:::o;11449:733::-;11607:1;11589:20;;:6;:20;;;;11581:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;11691:1;11670:23;;:9;:23;;;;11662:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;11746:47;11767:6;11775:9;11786:6;11746:20;:47::i;:::-;11806:21;11830:9;:17;11840:6;11830:17;;;;;;;;;;;;;;;;11806:41;;11883:6;11866:13;:23;;11858:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;12004:6;11988:13;:22;11968:9;:17;11978:6;11968:17;;;;;;;;;;;;;;;:42;;;;12056:6;12032:9;:20;12042:9;12032:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;12097:9;12080:35;;12089:6;12080:35;;;12108:6;12080:35;;;;;;:::i;:::-;;;;;;;;12128:46;12148:6;12156:9;12167:6;12128:19;:46::i;:::-;11449:733;;;;:::o;19818:590::-;19886:7;19969:17;20032:6;20009:13;:21;20023:6;20009:21;;;;;;;;;;;;;;;;19991:15;:39;;;;:::i;:::-;19990:48;;;;:::i;:::-;19969:70;;20064:12;;20052:9;:24;20048:75;;;20101:12;;20089:24;;20048:75;20182:19;20204:6;20182:28;;20236:13;20287:3;20272:11;20267:1;20256:9;:12;;;;:::i;:::-;20255:28;;;;:::i;:::-;20254:36;;;;:::i;:::-;20236:55;;20350:10;20370:11;20363:5;:19;;;;:::i;:::-;20350:32;;20398:2;20391:9;;;;;;19818:590;;;;:::o;19355:455::-;19432:7;19507:23;19576:6;19553:13;:21;19567:6;19553:21;;;;;;;;;;;;;;;;19535:15;:39;;;;:::i;:::-;19534:48;;;;:::i;:::-;19507:76;;19592:19;19614:6;19592:28;;19646:22;19711:3;19704;19690:11;19672:15;:29;;;;:::i;:::-;:35;;;;:::i;:::-;19671:43;;;;:::i;:::-;19646:68;;19745:10;19774:9;19758:14;:26;;;;:::i;:::-;19745:39;;19800:2;19793:9;;;;;;19355:455;;;;:::o;12469:399::-;12572:1;12553:21;;:7;:21;;;;12545:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;12623:49;12652:1;12656:7;12665:6;12623:20;:49::i;:::-;12701:6;12685:12;;:22;;;;;;;:::i;:::-;;;;;;;;12740:6;12718:9;:18;12728:7;12718:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;12783:7;12762:37;;12779:1;12762:37;;;12792:6;12762:37;;;;;;:::i;:::-;;;;;;;;12812:48;12840:1;12844:7;12853:6;12812:19;:48::i;:::-;12469:399;;:::o;18092:173::-;18148:16;18167:6;;;;;;;;;;;18148:25;;18193:8;18184:6;;:17;;;;;;;;;;;;;;;;;;18248:8;18217:40;;18238:8;18217:40;;;;;;;;;;;;18092:173;;:::o;13201:591::-;13304:1;13285:21;;:7;:21;;;;13277:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13357:49;13378:7;13395:1;13399:6;13357:20;:49::i;:::-;13419:22;13444:9;:18;13454:7;13444:18;;;;;;;;;;;;;;;;13419:43;;13499:6;13481:14;:24;;13473:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13618:6;13601:14;:23;13580:9;:18;13590:7;13580:18;;;;;;;;;;;;;;;:44;;;;13662:6;13646:12;;:22;;;;;;;:::i;:::-;;;;;;;;13712:1;13686:37;;13695:7;13686:37;;;13716:6;13686:37;;;;;;:::i;:::-;;;;;;;;13736:48;13756:7;13773:1;13777:6;13736:19;:48::i;:::-;13201:591;;;:::o;15210:125::-;;;;:::o;15939:124::-;;;;:::o;24:623:1:-;;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;274:6;267:5;260:21;300:4;293:5;289:16;282:23;;325:6;375:3;367:4;359:6;355:17;350:3;346:27;343:36;340:2;;;392:1;389;382:12;340:2;420:1;405:236;430:6;427:1;424:13;405:236;;;497:3;525:37;558:3;546:10;525:37;:::i;:::-;520:3;513:50;592:4;587:3;583:14;576:21;;626:4;621:3;617:14;610:21;;465:176;452:1;449;445:9;440:14;;405:236;;;409:14;126:521;;;;;;;:::o;670:623::-;;791:81;807:64;864:6;807:64;:::i;:::-;791:81;:::i;:::-;782:90;;892:5;920:6;913:5;906:21;946:4;939:5;935:16;928:23;;971:6;1021:3;1013:4;1005:6;1001:17;996:3;992:27;989:36;986:2;;;1038:1;1035;1028:12;986:2;1066:1;1051:236;1076:6;1073:1;1070:13;1051:236;;;1143:3;1171:37;1204:3;1192:10;1171:37;:::i;:::-;1166:3;1159:50;1238:4;1233:3;1229:14;1222:21;;1272:4;1267:3;1263:14;1256:21;;1111:176;1098:1;1095;1091:9;1086:14;;1051:236;;;1055:14;772:521;;;;;;;:::o;1299:139::-;;1383:6;1370:20;1361:29;;1399:33;1426:5;1399:33;:::i;:::-;1351:87;;;;:::o;1461:303::-;;1581:3;1574:4;1566:6;1562:17;1558:27;1548:2;;1599:1;1596;1589:12;1548:2;1639:6;1626:20;1664:94;1754:3;1746:6;1739:4;1731:6;1727:17;1664:94;:::i;:::-;1655:103;;1538:226;;;;;:::o;1787:303::-;;1907:3;1900:4;1892:6;1888:17;1884:27;1874:2;;1925:1;1922;1915:12;1874:2;1965:6;1952:20;1990:94;2080:3;2072:6;2065:4;2057:6;2053:17;1990:94;:::i;:::-;1981:103;;1864:226;;;;;:::o;2096:139::-;;2180:6;2167:20;2158:29;;2196:33;2223:5;2196:33;:::i;:::-;2148:87;;;;:::o;2241:262::-;;2349:2;2337:9;2328:7;2324:23;2320:32;2317:2;;;2365:1;2362;2355:12;2317:2;2408:1;2433:53;2478:7;2469:6;2458:9;2454:22;2433:53;:::i;:::-;2423:63;;2379:117;2307:196;;;;:::o;2509:407::-;;;2634:2;2622:9;2613:7;2609:23;2605:32;2602:2;;;2650:1;2647;2640:12;2602:2;2693:1;2718:53;2763:7;2754:6;2743:9;2739:22;2718:53;:::i;:::-;2708:63;;2664:117;2820:2;2846:53;2891:7;2882:6;2871:9;2867:22;2846:53;:::i;:::-;2836:63;;2791:118;2592:324;;;;;:::o;2922:552::-;;;;3064:2;3052:9;3043:7;3039:23;3035:32;3032:2;;;3080:1;3077;3070:12;3032:2;3123:1;3148:53;3193:7;3184:6;3173:9;3169:22;3148:53;:::i;:::-;3138:63;;3094:117;3250:2;3276:53;3321:7;3312:6;3301:9;3297:22;3276:53;:::i;:::-;3266:63;;3221:118;3378:2;3404:53;3449:7;3440:6;3429:9;3425:22;3404:53;:::i;:::-;3394:63;;3349:118;3022:452;;;;;:::o;3480:407::-;;;3605:2;3593:9;3584:7;3580:23;3576:32;3573:2;;;3621:1;3618;3611:12;3573:2;3664:1;3689:53;3734:7;3725:6;3714:9;3710:22;3689:53;:::i;:::-;3679:63;;3635:117;3791:2;3817:53;3862:7;3853:6;3842:9;3838:22;3817:53;:::i;:::-;3807:63;;3762:118;3563:324;;;;;:::o;3893:693::-;;;4068:2;4056:9;4047:7;4043:23;4039:32;4036:2;;;4084:1;4081;4074:12;4036:2;4155:1;4144:9;4140:17;4127:31;4185:18;4177:6;4174:30;4171:2;;;4217:1;4214;4207:12;4171:2;4245:78;4315:7;4306:6;4295:9;4291:22;4245:78;:::i;:::-;4235:88;;4098:235;4400:2;4389:9;4385:18;4372:32;4431:18;4423:6;4420:30;4417:2;;;4463:1;4460;4453:12;4417:2;4491:78;4561:7;4552:6;4541:9;4537:22;4491:78;:::i;:::-;4481:88;;4343:236;4026:560;;;;;:::o;4592:262::-;;4700:2;4688:9;4679:7;4675:23;4671:32;4668:2;;;4716:1;4713;4706:12;4668:2;4759:1;4784:53;4829:7;4820:6;4809:9;4805:22;4784:53;:::i;:::-;4774:63;;4730:117;4658:196;;;;:::o;4860:118::-;4947:24;4965:5;4947:24;:::i;:::-;4942:3;4935:37;4925:53;;:::o;4984:109::-;5065:21;5080:5;5065:21;:::i;:::-;5060:3;5053:34;5043:50;;:::o;5099:364::-;;5215:39;5248:5;5215:39;:::i;:::-;5270:71;5334:6;5329:3;5270:71;:::i;:::-;5263:78;;5350:52;5395:6;5390:3;5383:4;5376:5;5372:16;5350:52;:::i;:::-;5427:29;5449:6;5427:29;:::i;:::-;5422:3;5418:39;5411:46;;5191:272;;;;;:::o;5469:366::-;;5632:67;5696:2;5691:3;5632:67;:::i;:::-;5625:74;;5708:93;5797:3;5708:93;:::i;:::-;5826:2;5821:3;5817:12;5810:19;;5615:220;;;:::o;5841:366::-;;6004:67;6068:2;6063:3;6004:67;:::i;:::-;5997:74;;6080:93;6169:3;6080:93;:::i;:::-;6198:2;6193:3;6189:12;6182:19;;5987:220;;;:::o;6213:366::-;;6376:67;6440:2;6435:3;6376:67;:::i;:::-;6369:74;;6452:93;6541:3;6452:93;:::i;:::-;6570:2;6565:3;6561:12;6554:19;;6359:220;;;:::o;6585:366::-;;6748:67;6812:2;6807:3;6748:67;:::i;:::-;6741:74;;6824:93;6913:3;6824:93;:::i;:::-;6942:2;6937:3;6933:12;6926:19;;6731:220;;;:::o;6957:366::-;;7120:67;7184:2;7179:3;7120:67;:::i;:::-;7113:74;;7196:93;7285:3;7196:93;:::i;:::-;7314:2;7309:3;7305:12;7298:19;;7103:220;;;:::o;7329:366::-;;7492:67;7556:2;7551:3;7492:67;:::i;:::-;7485:74;;7568:93;7657:3;7568:93;:::i;:::-;7686:2;7681:3;7677:12;7670:19;;7475:220;;;:::o;7701:366::-;;7864:67;7928:2;7923:3;7864:67;:::i;:::-;7857:74;;7940:93;8029:3;7940:93;:::i;:::-;8058:2;8053:3;8049:12;8042:19;;7847:220;;;:::o;8073:366::-;;8236:67;8300:2;8295:3;8236:67;:::i;:::-;8229:74;;8312:93;8401:3;8312:93;:::i;:::-;8430:2;8425:3;8421:12;8414:19;;8219:220;;;:::o;8445:366::-;;8608:67;8672:2;8667:3;8608:67;:::i;:::-;8601:74;;8684:93;8773:3;8684:93;:::i;:::-;8802:2;8797:3;8793:12;8786:19;;8591:220;;;:::o;8817:366::-;;8980:67;9044:2;9039:3;8980:67;:::i;:::-;8973:74;;9056:93;9145:3;9056:93;:::i;:::-;9174:2;9169:3;9165:12;9158:19;;8963:220;;;:::o;9189:366::-;;9352:67;9416:2;9411:3;9352:67;:::i;:::-;9345:74;;9428:93;9517:3;9428:93;:::i;:::-;9546:2;9541:3;9537:12;9530:19;;9335:220;;;:::o;9561:366::-;;9724:67;9788:2;9783:3;9724:67;:::i;:::-;9717:74;;9800:93;9889:3;9800:93;:::i;:::-;9918:2;9913:3;9909:12;9902:19;;9707:220;;;:::o;9933:366::-;;10096:67;10160:2;10155:3;10096:67;:::i;:::-;10089:74;;10172:93;10261:3;10172:93;:::i;:::-;10290:2;10285:3;10281:12;10274:19;;10079:220;;;:::o;10305:366::-;;10468:67;10532:2;10527:3;10468:67;:::i;:::-;10461:74;;10544:93;10633:3;10544:93;:::i;:::-;10662:2;10657:3;10653:12;10646:19;;10451:220;;;:::o;10677:118::-;10764:24;10782:5;10764:24;:::i;:::-;10759:3;10752:37;10742:53;;:::o;10801:112::-;10884:22;10900:5;10884:22;:::i;:::-;10879:3;10872:35;10862:51;;:::o;10919:222::-;;11050:2;11039:9;11035:18;11027:26;;11063:71;11131:1;11120:9;11116:17;11107:6;11063:71;:::i;:::-;11017:124;;;;:::o;11147:210::-;;11272:2;11261:9;11257:18;11249:26;;11285:65;11347:1;11336:9;11332:17;11323:6;11285:65;:::i;:::-;11239:118;;;;:::o;11363:313::-;;11514:2;11503:9;11499:18;11491:26;;11563:9;11557:4;11553:20;11549:1;11538:9;11534:17;11527:47;11591:78;11664:4;11655:6;11591:78;:::i;:::-;11583:86;;11481:195;;;;:::o;11682:419::-;;11886:2;11875:9;11871:18;11863:26;;11935:9;11929:4;11925:20;11921:1;11910:9;11906:17;11899:47;11963:131;12089:4;11963:131;:::i;:::-;11955:139;;11853:248;;;:::o;12107:419::-;;12311:2;12300:9;12296:18;12288:26;;12360:9;12354:4;12350:20;12346:1;12335:9;12331:17;12324:47;12388:131;12514:4;12388:131;:::i;:::-;12380:139;;12278:248;;;:::o;12532:419::-;;12736:2;12725:9;12721:18;12713:26;;12785:9;12779:4;12775:20;12771:1;12760:9;12756:17;12749:47;12813:131;12939:4;12813:131;:::i;:::-;12805:139;;12703:248;;;:::o;12957:419::-;;13161:2;13150:9;13146:18;13138:26;;13210:9;13204:4;13200:20;13196:1;13185:9;13181:17;13174:47;13238:131;13364:4;13238:131;:::i;:::-;13230:139;;13128:248;;;:::o;13382:419::-;;13586:2;13575:9;13571:18;13563:26;;13635:9;13629:4;13625:20;13621:1;13610:9;13606:17;13599:47;13663:131;13789:4;13663:131;:::i;:::-;13655:139;;13553:248;;;:::o;13807:419::-;;14011:2;14000:9;13996:18;13988:26;;14060:9;14054:4;14050:20;14046:1;14035:9;14031:17;14024:47;14088:131;14214:4;14088:131;:::i;:::-;14080:139;;13978:248;;;:::o;14232:419::-;;14436:2;14425:9;14421:18;14413:26;;14485:9;14479:4;14475:20;14471:1;14460:9;14456:17;14449:47;14513:131;14639:4;14513:131;:::i;:::-;14505:139;;14403:248;;;:::o;14657:419::-;;14861:2;14850:9;14846:18;14838:26;;14910:9;14904:4;14900:20;14896:1;14885:9;14881:17;14874:47;14938:131;15064:4;14938:131;:::i;:::-;14930:139;;14828:248;;;:::o;15082:419::-;;15286:2;15275:9;15271:18;15263:26;;15335:9;15329:4;15325:20;15321:1;15310:9;15306:17;15299:47;15363:131;15489:4;15363:131;:::i;:::-;15355:139;;15253:248;;;:::o;15507:419::-;;15711:2;15700:9;15696:18;15688:26;;15760:9;15754:4;15750:20;15746:1;15735:9;15731:17;15724:47;15788:131;15914:4;15788:131;:::i;:::-;15780:139;;15678:248;;;:::o;15932:419::-;;16136:2;16125:9;16121:18;16113:26;;16185:9;16179:4;16175:20;16171:1;16160:9;16156:17;16149:47;16213:131;16339:4;16213:131;:::i;:::-;16205:139;;16103:248;;;:::o;16357:419::-;;16561:2;16550:9;16546:18;16538:26;;16610:9;16604:4;16600:20;16596:1;16585:9;16581:17;16574:47;16638:131;16764:4;16638:131;:::i;:::-;16630:139;;16528:248;;;:::o;16782:419::-;;16986:2;16975:9;16971:18;16963:26;;17035:9;17029:4;17025:20;17021:1;17010:9;17006:17;16999:47;17063:131;17189:4;17063:131;:::i;:::-;17055:139;;16953:248;;;:::o;17207:419::-;;17411:2;17400:9;17396:18;17388:26;;17460:9;17454:4;17450:20;17446:1;17435:9;17431:17;17424:47;17488:131;17614:4;17488:131;:::i;:::-;17480:139;;17378:248;;;:::o;17632:222::-;;17763:2;17752:9;17748:18;17740:26;;17776:71;17844:1;17833:9;17829:17;17820:6;17776:71;:::i;:::-;17730:124;;;;:::o;17860:214::-;;17987:2;17976:9;17972:18;17964:26;;18000:67;18064:1;18053:9;18049:17;18040:6;18000:67;:::i;:::-;17954:120;;;;:::o;18080:129::-;;18141:20;;:::i;:::-;18131:30;;18170:33;18198:4;18190:6;18170:33;:::i;:::-;18121:88;;;:::o;18215:75::-;;18281:2;18275:9;18265:19;;18255:35;:::o;18296:311::-;;18463:18;18455:6;18452:30;18449:2;;;18485:18;;:::i;:::-;18449:2;18535:4;18527:6;18523:17;18515:25;;18595:4;18589;18585:15;18577:23;;18378:229;;;:::o;18613:311::-;;18780:18;18772:6;18769:30;18766:2;;;18802:18;;:::i;:::-;18766:2;18852:4;18844:6;18840:17;18832:25;;18912:4;18906;18902:15;18894:23;;18695:229;;;:::o;18930:99::-;;19016:5;19010:12;19000:22;;18989:40;;;:::o;19035:169::-;;19153:6;19148:3;19141:19;19193:4;19188:3;19184:14;19169:29;;19131:73;;;;:::o;19210:305::-;;19269:20;19287:1;19269:20;:::i;:::-;19264:25;;19303:20;19321:1;19303:20;:::i;:::-;19298:25;;19457:1;19389:66;19385:74;19382:1;19379:81;19376:2;;;19463:18;;:::i;:::-;19376:2;19507:1;19504;19500:9;19493:16;;19254:261;;;;:::o;19521:185::-;;19578:20;19596:1;19578:20;:::i;:::-;19573:25;;19612:20;19630:1;19612:20;:::i;:::-;19607:25;;19651:1;19641:2;;19656:18;;:::i;:::-;19641:2;19698:1;19695;19691:9;19686:14;;19563:143;;;;:::o;19712:848::-;;;19804:6;19795:15;;19828:5;19819:14;;19842:712;19863:1;19853:8;19850:15;19842:712;;;19958:4;19953:3;19949:14;19943:4;19940:24;19937:2;;;19967:18;;:::i;:::-;19937:2;20017:1;20007:8;20003:16;20000:2;;;20432:4;20425:5;20421:16;20412:25;;20000:2;20482:4;20476;20472:15;20464:23;;20512:32;20535:8;20512:32;:::i;:::-;20500:44;;19842:712;;;19785:775;;;;;;;:::o;20566:281::-;;20648:23;20666:4;20648:23;:::i;:::-;20640:31;;20692:25;20708:8;20692:25;:::i;:::-;20680:37;;20736:104;20773:66;20763:8;20757:4;20736:104;:::i;:::-;20727:113;;20630:217;;;;:::o;20853:1073::-;;21098:8;21088:2;;21119:1;21110:10;;21121:5;;21088:2;21147:4;21137:2;;21164:1;21155:10;;21166:5;;21137:2;21233:4;21281:1;21276:27;;;;21317:1;21312:191;;;;21226:277;;21276:27;21294:1;21285:10;;21296:5;;;21312:191;21357:3;21347:8;21344:17;21341:2;;;21364:18;;:::i;:::-;21341:2;21413:8;21410:1;21406:16;21397:25;;21448:3;21441:5;21438:14;21435:2;;;21455:18;;:::i;:::-;21435:2;21488:5;;;21226:277;;21612:2;21602:8;21599:16;21593:3;21587:4;21584:13;21580:36;21562:2;21552:8;21549:16;21544:2;21538:4;21535:12;21531:35;21515:111;21512:2;;;21668:8;21662:4;21658:19;21649:28;;21703:3;21696:5;21693:14;21690:2;;;21710:18;;:::i;:::-;21690:2;21743:5;;21512:2;21783:42;21821:3;21811:8;21805:4;21802:1;21783:42;:::i;:::-;21768:57;;;;21857:4;21852:3;21848:14;21841:5;21838:25;21835:2;;;21866:18;;:::i;:::-;21835:2;21915:4;21908:5;21904:16;21895:25;;20913:1013;;;;;;:::o;21932:348::-;;21995:20;22013:1;21995:20;:::i;:::-;21990:25;;22029:20;22047:1;22029:20;:::i;:::-;22024:25;;22217:1;22149:66;22145:74;22142:1;22139:81;22134:1;22127:9;22120:17;22116:105;22113:2;;;22224:18;;:::i;:::-;22113:2;22272:1;22269;22265:9;22254:20;;21980:300;;;;:::o;22286:191::-;;22346:20;22364:1;22346:20;:::i;:::-;22341:25;;22380:20;22398:1;22380:20;:::i;:::-;22375:25;;22419:1;22416;22413:8;22410:2;;;22424:18;;:::i;:::-;22410:2;22469:1;22466;22462:9;22454:17;;22331:146;;;;:::o;22483:96::-;;22549:24;22567:5;22549:24;:::i;:::-;22538:35;;22528:51;;;:::o;22585:90::-;;22662:5;22655:13;22648:21;22637:32;;22627:48;;;:::o;22681:126::-;;22758:42;22751:5;22747:54;22736:65;;22726:81;;;:::o;22813:77::-;;22879:5;22868:16;;22858:32;;;:::o;22896:86::-;;22971:4;22964:5;22960:16;22949:27;;22939:43;;;:::o;22988:307::-;23056:1;23066:113;23080:6;23077:1;23074:13;23066:113;;;23165:1;23160:3;23156:11;23150:18;23146:1;23141:3;23137:11;23130:39;23102:2;23099:1;23095:10;23090:15;;23066:113;;;23197:6;23194:1;23191:13;23188:2;;;23277:1;23268:6;23263:3;23259:16;23252:27;23188:2;23037:258;;;;:::o;23301:320::-;;23382:1;23376:4;23372:12;23362:22;;23429:1;23423:4;23419:12;23450:18;23440:2;;23506:4;23498:6;23494:17;23484:27;;23440:2;23568;23560:6;23557:14;23537:18;23534:38;23531:2;;;23587:18;;:::i;:::-;23531:2;23352:269;;;;:::o;23627:281::-;23710:27;23732:4;23710:27;:::i;:::-;23702:6;23698:40;23840:6;23828:10;23825:22;23804:18;23792:10;23789:34;23786:62;23783:2;;;23851:18;;:::i;:::-;23783:2;23891:10;23887:2;23880:22;23670:238;;;:::o;23914:233::-;;23976:24;23994:5;23976:24;:::i;:::-;23967:33;;24022:66;24015:5;24012:77;24009:2;;;24092:18;;:::i;:::-;24009:2;24139:1;24132:5;24128:13;24121:20;;23957:190;;;:::o;24153:180::-;24201:77;24198:1;24191:88;24298:4;24295:1;24288:15;24322:4;24319:1;24312:15;24339:180;24387:77;24384:1;24377:88;24484:4;24481:1;24474:15;24508:4;24505:1;24498:15;24525:180;24573:77;24570:1;24563:88;24670:4;24667:1;24660:15;24694:4;24691:1;24684:15;24711:180;24759:77;24756:1;24749:88;24856:4;24853:1;24846:15;24880:4;24877:1;24870:15;24897:102;;24989:2;24985:7;24980:2;24973:5;24969:14;24965:28;24955:38;;24945:54;;;:::o;25005:102::-;;25094:5;25091:1;25087:13;25066:34;;25056:51;;;:::o;25113:222::-;25253:34;25249:1;25241:6;25237:14;25230:58;25322:5;25317:2;25309:6;25305:15;25298:30;25219:116;:::o;25341:180::-;25481:32;25477:1;25469:6;25465:14;25458:56;25447:74;:::o;25527:221::-;25667:34;25663:1;25655:6;25651:14;25644:58;25736:4;25731:2;25723:6;25719:15;25712:29;25633:115;:::o;25754:294::-;25894:34;25890:1;25882:6;25878:14;25871:58;25963:34;25958:2;25950:6;25946:15;25939:59;26032:8;26027:2;26019:6;26015:15;26008:33;25860:188;:::o;26054:225::-;26194:34;26190:1;26182:6;26178:14;26171:58;26263:8;26258:2;26250:6;26246:15;26239:33;26160:119;:::o;26285:221::-;26425:34;26421:1;26413:6;26409:14;26402:58;26494:4;26489:2;26481:6;26477:15;26470:29;26391:115;:::o;26512:225::-;26652:34;26648:1;26640:6;26636:14;26629:58;26721:8;26716:2;26708:6;26704:15;26697:33;26618:119;:::o;26743:227::-;26883:34;26879:1;26871:6;26867:14;26860:58;26952:10;26947:2;26939:6;26935:15;26928:35;26849:121;:::o;26976:182::-;27116:34;27112:1;27104:6;27100:14;27093:58;27082:76;:::o;27164:220::-;27304:34;27300:1;27292:6;27288:14;27281:58;27373:3;27368:2;27360:6;27356:15;27349:28;27270:114;:::o;27390:224::-;27530:34;27526:1;27518:6;27514:14;27507:58;27599:7;27594:2;27586:6;27582:15;27575:32;27496:118;:::o;27620:223::-;27760:34;27756:1;27748:6;27744:14;27737:58;27829:6;27824:2;27816:6;27812:15;27805:31;27726:117;:::o;27849:224::-;27989:34;27985:1;27977:6;27973:14;27966:58;28058:7;28053:2;28045:6;28041:15;28034:32;27955:118;:::o;28079:181::-;28219:33;28215:1;28207:6;28203:14;28196:57;28185:75;:::o;28266:122::-;28339:24;28357:5;28339:24;:::i;:::-;28332:5;28329:35;28319:2;;28378:1;28375;28368:12;28319:2;28309:79;:::o;28394:122::-;28467:24;28485:5;28467:24;:::i;:::-;28460:5;28457:35;28447:2;;28506:1;28503;28496:12;28447:2;28437:79;:::o

Swarm Source

ipfs://a9c5a5f293922b0473b821f47def730d64e42c66b63f7d42d48ce09370404445
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.