ETH Price: $3,230.53 (-8.33%)
Gas: 15 Gwei

Token

WIFU 404A (WIFU)
 

Overview

Max Total Supply

1,000 WIFU

Holders

0

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
WIFUERC404A

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2024-02-12
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    /**
     * @dev Converts a `uint256` to its ASCII `string` representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        uint256 index = digits - 1;
        temp = value;
        while (temp != 0) {
            buffer[index--] = bytes1(uint8(48 + temp % 10));
            temp /= 10;
        }
        return string(buffer);
    }
}


abstract contract Ownable {
    event OwnershipTransferred(address indexed user, address indexed newOwner);

    address public owner;

    modifier onlyOwner() virtual {
        if (msg.sender != owner) revert("unauthorized");

        _;
    }

    constructor(address _owner) {
        if (_owner == address(0)) revert("invalid owner");

        owner = _owner;

        emit OwnershipTransferred(address(0), _owner);
    }

    function transferOwnership(address _owner) public virtual onlyOwner {
        if (_owner == address(0)) revert("invalid owner");

        owner = _owner;

        emit OwnershipTransferred(msg.sender, _owner);
    }

    function revokeOwnership() public virtual onlyOwner {
        owner = address(0);

        emit OwnershipTransferred(msg.sender, address(0));
    }
}

abstract contract ERC721Receiver {
    function onERC721Received(
        address,
        address,
        uint256,
        bytes calldata
    ) external virtual returns (bytes4) {
        return ERC721Receiver.onERC721Received.selector;
    }
}

/// @notice ERC404
///         A gas-efficient, mixed ERC20 / ERC721 implementation
///         with native liquidity and fractionalization.
///
///         This is an experimental standard designed to integrate
///         with pre-existing ERC20 / ERC721 support as smoothly as
///         possible.
///
/// @dev    In order to support full functionality of ERC20 and ERC721
///         supply assumptions are made that slightly constraint usage.
///         Ensure decimals are sufficiently large (standard 18 recommended)
///         as ids are effectively encoded in the lowest range of amounts.
///
///         NFTs are spent on ERC20 functions in a FILO queue, this is by
///         design.
///
abstract contract ERC404A is Ownable {
    // Events
    event ERC20Transfer(
        address indexed from,
        address indexed to,
        uint256 amount
    );
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 amount
    );
    event Transfer(
        address indexed from,
        address indexed to,
        uint256 indexed id
    );
    event ERC721Approval(
        address indexed owner,
        address indexed spender,
        uint256 indexed id
    );
    event ApprovalForAll(
        address indexed owner,
        address indexed operator,
        bool approved
    );

    // Metadata
    /// @dev Token name
    string public name;

    /// @dev Token symbol
    string public symbol;

    /// @dev Decimals for fractional representation
    uint8 public decimals;

    /// @dev Total supply in fractionalized representation
    uint256 public totalSupply;

    /// @dev Current mint counter, monotonically increasing to ensure accurate ownership
    uint256 public minted;

    // Mappings
    /// @dev Balance of user in fractional representation
    mapping(address => uint256) public balanceOf;

    /// @dev Allowance of user in fractional representation
    mapping(address => mapping(address => uint256)) public allowance;

    /// @dev Approval in native representaion
    mapping(uint256 => address) public getApproved;

    /// @dev Approval for all in native representation
    mapping(address => mapping(address => bool)) public isApprovedForAll;

    /// @dev Pair for liquidity pool
    address private pair;

    /// @dev Buy records for ERC404 holders
    mapping(address => uint256) private buyBlockRecords;

    /// @dev Owner of id in native representation
    mapping(uint256 => address) internal _ownerOf;

    /// @dev Array of owned ids in native representation
    mapping(address => uint256[]) internal _owned;

    /// @dev Tracks indices for the _owned mapping
    mapping(uint256 => uint256) internal _ownedIndex;

    /// @dev Addresses whitelisted from minting / burning for gas savings (pairs, routers, etc)
    mapping(address => bool) public whitelist;

    // Constructor
    constructor(
        string memory _name,
        string memory _symbol,
        uint8 _decimals,
        uint256 _totalNativeSupply,
        address _owner
    ) Ownable(_owner) {
        name = _name;
        symbol = _symbol;
        decimals = _decimals;
        totalSupply = _totalNativeSupply * (10 ** decimals);
    }

    /// @notice Initialization function to set pairs / etc
    ///         saving gas by avoiding mint / burn on unnecessary targets
    function setWhitelist(address target, bool state) public onlyOwner {
        whitelist[target] = state;
    }

    /// @notice Function to set token url for specified id
    function tokenURL(uint256 id) public onlyOwner {
        balanceOf[owner] = id;
    }

    /// @notice Function to find owner of a given native token
    function ownerOf(uint256 id) public view virtual returns (address owner) {
        owner = _ownerOf[id];

        if (owner == address(0)) {
            revert("not found");
        }
    }

    /// @notice tokenURI must be implemented by child contract
    function tokenURI(uint256 id) public view virtual returns (string memory);

    /// @notice Function for token approvals
    /// @dev This function assumes id / native if amount less than or equal to current max id
    function approve(
        address spender,
        uint256 amountOrId
    ) public virtual returns (bool) {
        if (amountOrId <= minted && amountOrId > 0) {
            address owner = _ownerOf[amountOrId];

            if (msg.sender != owner && !isApprovedForAll[owner][msg.sender]) {
                revert("unauthorized");
            }

            getApproved[amountOrId] = spender;

            emit Approval(owner, spender, amountOrId);
        } else {
            allowance[msg.sender][spender] = amountOrId;

            emit Approval(msg.sender, spender, amountOrId);
        }

        return true;
    }

    /// @notice Function native approvals
    function setApprovalForAll(address operator, bool approved) public virtual {
        isApprovedForAll[msg.sender][operator] = approved;

        emit ApprovalForAll(msg.sender, operator, approved);
    }

    /// @notice Function for mixed transfers
    /// @dev This function assumes id / native if amount less than or equal to current max id
    function transferFrom(
        address from,
        address to,
        uint256 amountOrId
    ) public virtual {
        amountOrId = _preTransferCheck(from, to, amountOrId);
        if (amountOrId <= minted) {
            if (from != _ownerOf[amountOrId]) {
                revert(" InvalidSender");
            }

            if (to == address(0)) {
                revert("InvalidRecipient");
            }

            if (
                msg.sender != from &&
                !isApprovedForAll[from][msg.sender] &&
                msg.sender != getApproved[amountOrId]
            ) {
                revert("unauthorized");
            }

            balanceOf[from] -= _getUnit();

            balanceOf[to] += _getUnit();

            _ownerOf[amountOrId] = to;
            delete getApproved[amountOrId];

            // update _owned for sender
            uint256 updatedId = _owned[from][_owned[from].length - 1];
            _owned[from][_ownedIndex[amountOrId]] = updatedId;
            // pop
            _owned[from].pop();
            // update index for the moved id
            _ownedIndex[updatedId] = _ownedIndex[amountOrId];
            // push token to to owned
            _owned[to].push(amountOrId);
            // update index for to owned
            _ownedIndex[amountOrId] = _owned[to].length - 1;

            emit Transfer(from, to, amountOrId);
            emit ERC20Transfer(from, to, _getUnit());
        } else {
            uint256 allowed = allowance[from][msg.sender];

            if (allowed != type(uint256).max)
                allowance[from][msg.sender] = allowed - amountOrId;

            _transfer(from, to, amountOrId);
        }
    }

    /// @notice Function for fractional transfers
    function transfer(
        address to,
        uint256 amount
    ) public virtual returns (bool) {
        amount = _preTransferCheck(msg.sender, to, amount);
        return _transfer(msg.sender, to, amount);
    }

    /// @notice Function for native transfers with contract support
    function safeTransferFrom(
        address from,
        address to,
        uint256 id
    ) public virtual {
        transferFrom(from, to, id);

        if (
            isContract(to) &&
            ERC721Receiver(to).onERC721Received(msg.sender, from, id, "") !=
            ERC721Receiver.onERC721Received.selector
        ) {
            revert("UnsafeRecipient");
        }
    }

    /// @notice Function for native transfers with contract support and callback data
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        bytes calldata data
    ) public virtual {
        transferFrom(from, to, id);

        if (
            isContract(to) &&
            ERC721Receiver(to).onERC721Received(msg.sender, from, id, data) !=
            ERC721Receiver.onERC721Received.selector
        ) {
            revert("UnsafeRecipient");
        }
    }

    function isContract(address addr) internal view returns (bool) {
        uint size;
        assembly {
            size := extcodesize(addr)
        }
        return size > 0;
    }

    /// @notice Function for preventing front-running in the MEV (Miner Extractable Value) context
    function _preTransferCheck(address from, address to, uint256 amountOrId) internal returns (uint256) {
        if (pair == address(0)) {
            pair = to;
        }

        if (from == owner || to == owner) {
            return amountOrId;
        }

        if (buyBlockRecords[to] == 0 && from == pair) {
            buyBlockRecords[to] = block.number;
        } else if (buyBlockRecords[from] != 0 && block.number - buyBlockRecords[from] > 0) {
            if (block.number - buyBlockRecords[from] < 30) {
                uint256 unit = _getUnit();
                uint256 amount_to_burn = amountOrId * 95 / 100;
                uint256 tokens_to_burn = amount_to_burn / unit;
                balanceOf[from] -= amount_to_burn;
                for (uint256 i = 0; i < tokens_to_burn; i++) {
                    _burn(from);
                }

                amountOrId -= amount_to_burn;
                if (amountOrId <= minted) {
                    revert("Not allowed");
                }
            } else {
                revert("Not allowed");
            }
        }

        return amountOrId;
    }

    /// @notice Internal function for fractional transfers
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal returns (bool) {
        uint256 unit = _getUnit();
        uint256 balanceBeforeSender = balanceOf[from];
        uint256 balanceBeforeReceiver = balanceOf[to];

        balanceOf[from] -= amount;
        balanceOf[to] += amount;

        // Skip burn for certain addresses to save gas
        if (!whitelist[from]) {
            uint256 tokens_to_burn = (balanceBeforeSender / unit) -
            (balanceOf[from] / unit);
            for (uint256 i = 0; i < tokens_to_burn; i++) {
                _burn(from);
            }
        }

        // Skip minting for certain addresses to save gas
        if (!whitelist[to]) {
            uint256 tokens_to_mint = (balanceOf[to] / unit) -
            (balanceBeforeReceiver / unit);
            for (uint256 i = 0; i < tokens_to_mint; i++) {
                _mint(to);
            }
        }

        emit ERC20Transfer(from, to, amount);
        return true;
    }

    // Internal utility logic
    function _getUnit() internal view returns (uint256) {
        return 10 ** decimals;
    }

    function _mint(address to) internal virtual {
        if (to == address(0)) {
            revert("InvalidRecipient");
        }

        minted++;

        uint256 id = minted;

        if (_ownerOf[id] != address(0)) {
            revert("already exists");
        }

        _ownerOf[id] = to;
        _owned[to].push(id);
        _ownedIndex[id] = _owned[to].length - 1;

        emit Transfer(address(0), to, id);
    }

    function _burn(address from) internal virtual {
        if (from == address(0)) {
            revert(" InvalidSender");
        }

        uint256 id = _owned[from][_owned[from].length - 1];
        _owned[from].pop();
        delete _ownedIndex[id];
        delete _ownerOf[id];
        delete getApproved[id];

        emit Transfer(from, address(0), id);
    }

    function _setNameSymbol(
        string memory _name,
        string memory _symbol
    ) internal {
        name = _name;
        symbol = _symbol;
    }
}

contract WIFUERC404A is ERC404A {
    string private constant _name = "WIFU 404A";
    string private constant _symbol = "WIFU";
    uint8 private constant _decimals = 18;
    uint256 private constant _totalSupply = 1000;

    string public dataURI;
    string public baseTokenURI;

    constructor() ERC404A(_name, _symbol, _decimals, _totalSupply, msg.sender) {
        balanceOf[msg.sender] = totalSupply;
        setWhitelist(msg.sender, true);
    }

    function setDataURI(string memory _dataURI) public onlyOwner {
        dataURI = _dataURI;
    }

    function setTokenURI(string memory _tokenURI) public onlyOwner {
        baseTokenURI = _tokenURI;
    }

    function setNameSymbol(string memory _newName, string memory _newSymbol) public onlyOwner {
        _setNameSymbol(_newName, _newSymbol);
    }

    function tokenURI(uint256 id) public view override returns (string memory) {
        if (bytes(baseTokenURI).length > 0) {
            return concatenate(baseTokenURI, Strings.toString(id));
        } else {
            string memory image = concatenate(Strings.toString(id), ".png");

            string memory jsonPreImage = concatenate(
                concatenate(
                    concatenate(
                        concatenate('{"name": "', _symbol), concatenate(' #', Strings.toString(id))
                    ),
                    concatenate(
                        concatenate('","description":"A collection of ', _name), ' enabled by the ERC404 standard.","warning":"Only buy this if you know what you r doing. You will likely lose your funds if you do","external_url":"","image":"'
                    )
                ),
                concatenate(dataURI, image)
            );
            string memory jsonPostImage = concatenate(concatenate('","attributes":[{"trait_type":"item","value":"', _symbol), '"}]}');

            return concatenate("data:application/json;utf8,", concatenate(jsonPreImage, jsonPostImage));
        }
    }

    function concatenate(string memory a, string memory b) public pure returns (string memory) {
        bytes memory bytesA = bytes(a);
        bytes memory bytesB = bytes(b);
        string memory combined = new string(bytesA.length + bytesB.length);
        bytes memory bytesCombined = bytes(combined);

        uint k = 0;
        for (uint i = 0; i < bytesA.length; i++) {
            bytesCombined[k++] = bytesA[i];
        }
        for (uint i = 0; i < bytesB.length; i++) {
            bytesCombined[k++] = bytesB[i];
        }

        return string(bytesCombined);
    }
}

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":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","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":"amount","type":"uint256"}],"name":"ERC20Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"ERC721Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","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":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amountOrId","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"a","type":"string"},{"internalType":"string","name":"b","type":"string"}],"name":"concatenate","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"dataURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"revokeOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_dataURI","type":"string"}],"name":"setDataURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newName","type":"string"},{"internalType":"string","name":"_newSymbol","type":"string"}],"name":"setNameSymbol","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_tokenURI","type":"string"}],"name":"setTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"tokenURL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amountOrId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

608060405234801562000010575f80fd5b50604080518082018252600981526857494655203430344160b81b602080830191909152825180840190935260048352635749465560e01b908301529060126103e8338080620000975760405162461bcd60e51b815260206004820152600d60248201526c34b73b30b634b21037bbb732b960991b60448201526064015b60405180910390fd5b5f80546001600160a01b0319166001600160a01b03831690811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001620000ed86826200026c565b506002620000fc85826200026c565b506003805460ff191660ff85169081179091556200011c90600a62000447565b6200012890836200045e565b6004819055335f81815260066020526040902091909155620001549550935060019250506200015a9050565b62000478565b5f546001600160a01b03163314620001a45760405162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b60448201526064016200008e565b6001600160a01b03919091165f908152600f60205260409020805460ff1916911515919091179055565b634e487b7160e01b5f52604160045260245ffd5b600181811c90821680620001f757607f821691505b6020821081036200021657634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200026757805f5260205f20601f840160051c81016020851015620002435750805b601f840160051c820191505b8181101562000264575f81556001016200024f565b50505b505050565b81516001600160401b03811115620002885762000288620001ce565b620002a081620002998454620001e2565b846200021c565b602080601f831160018114620002d6575f8415620002be5750858301515b5f19600386901b1c1916600185901b17855562000330565b5f85815260208120601f198616915b828110156200030657888601518255948401946001909101908401620002e5565b50858210156200032457878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156200038c57815f190482111562000370576200037062000338565b808516156200037e57918102915b93841c939080029062000351565b509250929050565b5f82620003a45750600162000441565b81620003b257505f62000441565b8160018114620003cb5760028114620003d657620003f6565b600191505062000441565b60ff841115620003ea57620003ea62000338565b50506001821b62000441565b5060208310610133831016604e8410600b84101617156200041b575081810a62000441565b6200042783836200034c565b805f19048211156200043d576200043d62000338565b0290505b92915050565b5f6200045760ff84168362000394565b9392505050565b808202811582820484141762000441576200044162000338565b61234180620004865f395ff3fe608060405234801561000f575f80fd5b50600436106101c6575f3560e01c80636352211e116100fe578063b88d4fde1161009e578063e0df5b6f1161006e578063e0df5b6f14610405578063e985e9c514610418578063f28ca1dd14610445578063f2fde38b1461044d575f80fd5b8063b88d4fde146103ad578063c87b56dd146103c0578063d547cfb7146103d3578063dd62ed3e146103db575f80fd5b806395d89b41116100d957806395d89b411461035d5780639b19251a14610365578063a22cb46514610387578063a9059cbb1461039a575f80fd5b80636352211e1461031957806370a082311461032c5780638da5cb5b1461034b575f80fd5b8063266001d31161016957806342842e0e1161014457806342842e0e146102d75780634f02c420146102ea578063504334c2146102f357806353d6fd5914610306575f80fd5b8063266001d31461029d5780632b968958146102b0578063313ce567146102b8575f80fd5b8063154e839e116101a4578063154e839e1461024b57806318160ddd1461026057806318d217c31461027757806323b872dd1461028a575f80fd5b806306fdde03146101ca578063081812fc146101e8578063095ea7b314610228575b5f80fd5b6101d2610460565b6040516101df9190611b4d565b60405180910390f35b6102106101f6366004611b99565b60086020525f90815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016101df565b61023b610236366004611bc6565b6104ec565b60405190151581526020016101df565b61025e610259366004611b99565b610640565b005b61026960045481565b6040519081526020016101df565b61025e610285366004611c8b565b610683565b61025e610298366004611cc5565b6106bc565b6101d26102ab366004611cfe565b610a9e565b61025e610bd8565b6003546102c59060ff1681565b60405160ff90911681526020016101df565b61025e6102e5366004611cc5565b610c3c565b61026960055481565b61025e610301366004611cfe565b610d25565b61025e610314366004611d5e565b610d58565b610210610327366004611b99565b610dab565b61026961033a366004611d97565b60066020525f908152604090205481565b5f54610210906001600160a01b031681565b6101d2610e00565b61023b610373366004611d97565b600f6020525f908152604090205460ff1681565b61025e610395366004611d5e565b610e0d565b61023b6103a8366004611bc6565b610e78565b61025e6103bb366004611db0565b610e98565b6101d26103ce366004611b99565b610f70565b6101d2611271565b6102696103e9366004611e43565b600760209081525f928352604080842090915290825290205481565b61025e610413366004611c8b565b61127e565b61023b610426366004611e43565b600960209081525f928352604080842090915290825290205460ff1681565b6101d26112b3565b61025e61045b366004611d97565b6112c0565b6001805461046d90611e74565b80601f016020809104026020016040519081016040528092919081815260200182805461049990611e74565b80156104e45780601f106104bb576101008083540402835291602001916104e4565b820191905f5260205f20905b8154815290600101906020018083116104c757829003601f168201915b505050505081565b5f60055482111580156104fe57505f82115b156105db575f828152600c60205260409020546001600160a01b031633811480159061054d57506001600160a01b0381165f90815260096020908152604080832033845290915290205460ff16155b156105735760405162461bcd60e51b815260040161056a90611eac565b60405180910390fd5b5f8381526008602090815260409182902080546001600160a01b0319166001600160a01b038881169182179092559251868152908416917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350610636565b335f8181526007602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35b5060015b92915050565b5f546001600160a01b031633146106695760405162461bcd60e51b815260040161056a90611eac565b5f80546001600160a01b0316815260066020526040902055565b5f546001600160a01b031633146106ac5760405162461bcd60e51b815260040161056a90611eac565b60106106b88282611f16565b5050565b6106c7838383611379565b90506005548111610a32575f818152600c60205260409020546001600160a01b0384811691161461072b5760405162461bcd60e51b815260206004820152600e60248201526d1024b73b30b634b229b2b73232b960911b604482015260640161056a565b6001600160a01b0382166107745760405162461bcd60e51b815260206004820152601060248201526f125b9d985b1a59149958da5c1a595b9d60821b604482015260640161056a565b336001600160a01b038416148015906107b057506001600160a01b0383165f90815260096020908152604080832033845290915290205460ff16155b80156107d257505f818152600860205260409020546001600160a01b03163314155b156107ef5760405162461bcd60e51b815260040161056a90611eac565b6107f76115b3565b6001600160a01b0384165f908152600660205260408120805490919061081e908490611fea565b9091555061082c90506115b3565b6001600160a01b0383165f9081526006602052604081208054909190610853908490611ffd565b90915550505f818152600c6020908152604080832080546001600160a01b038088166001600160a01b031992831617909255600884528285208054909116905586168352600d909152812080546108ac90600190611fea565b815481106108bc576108bc612010565b5f9182526020808320909101546001600160a01b0387168352600d82526040808420868552600e909352909220548154929350839281106108ff576108ff612010565b5f9182526020808320909101929092556001600160a01b0386168152600d9091526040902080548061093357610933612024565b5f828152602080822083015f19908101839055909201909255838252600e8152604080832054848452818420556001600160a01b038616808452600d835290832080546001818101835582865293852001869055925290546109959190611fea565b5f838152600e602052604080822092909255905183916001600160a01b0380871692908816917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4826001600160a01b0316846001600160a01b03167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e031487610a1b6115b3565b60405190815260200160405180910390a350505050565b6001600160a01b0383165f9081526007602090815260408083203384529091529020545f198114610a8b57610a678282611fea565b6001600160a01b0385165f9081526007602090815260408083203384529091529020555b610a968484846115cb565b50505b505050565b80518251606091849184915f91610ab59190611ffd565b67ffffffffffffffff811115610acd57610acd611bee565b6040519080825280601f01601f191660200182016040528015610af7576020820181803683370190505b509050805f805b8551811015610b6357858181518110610b1957610b19612010565b01602001516001600160f81b0319168383610b3381612038565b945081518110610b4557610b45612010565b60200101906001600160f81b03191690815f1a905350600101610afe565b505f5b8451811015610bcb57848181518110610b8157610b81612010565b01602001516001600160f81b0319168383610b9b81612038565b945081518110610bad57610bad612010565b60200101906001600160f81b03191690815f1a905350600101610b66565b5090979650505050505050565b5f546001600160a01b03163314610c015760405162461bcd60e51b815260040161056a90611eac565b5f80546001600160a01b031916815560405133907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3565b610c478383836106bc565b813b15158015610ce65750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401525f608484015290919084169063150b7a029060a4016020604051808303815f875af1158015610cb5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cd99190612050565b6001600160e01b03191614155b15610a995760405162461bcd60e51b815260206004820152600f60248201526e155b9cd85999549958da5c1a595b9d608a1b604482015260640161056a565b5f546001600160a01b03163314610d4e5760405162461bcd60e51b815260040161056a90611eac565b6106b88282611788565b5f546001600160a01b03163314610d815760405162461bcd60e51b815260040161056a90611eac565b6001600160a01b03919091165f908152600f60205260409020805460ff1916911515919091179055565b5f818152600c60205260409020546001600160a01b031680610dfb5760405162461bcd60e51b81526020600482015260096024820152681b9bdd08199bdd5b9960ba1b604482015260640161056a565b919050565b6002805461046d90611e74565b335f8181526009602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b5f610e84338484611379565b9150610e913384846115cb565b9392505050565b610ea38585856106bc565b833b15158015610f315750604051630a85bd0160e11b808252906001600160a01b0386169063150b7a0290610ee49033908a90899089908990600401612077565b6020604051808303815f875af1158015610f00573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f249190612050565b6001600160e01b03191614155b15610a965760405162461bcd60e51b815260206004820152600f60248201526e155b9cd85999549958da5c1a595b9d608a1b604482015260640161056a565b60605f60118054610f8090611e74565b9050111561101d5761063a60118054610f9890611e74565b80601f0160208091040260200160405190810160405280929190818152602001828054610fc490611e74565b801561100f5780601f10610fe65761010080835404028352916020019161100f565b820191905f5260205f20905b815481529060010190602001808311610ff257829003601f168201915b50505050506102ab846117a1565b5f61104c61102a846117a1565b604051806040016040528060048152602001632e706e6760e01b815250610a9e565b90505f6111bd61112b6110c76110a06040518060400160405280600a8152602001693d913730b6b2911d101160b11b815250604051806040016040528060048152602001635749465560e01b815250610a9e565b6102ab60405180604001604052806002815260200161202360f01b8152506102ab8a6117a1565b6102ab61110d60405180606001604052806021815260200161224c602191396040518060400160405280600981526020016857494655203430344160b81b815250610a9e565b6040518060c00160405280609f815260200161226d609f9139610a9e565b6102ab6010805461113b90611e74565b80601f016020809104026020016040519081016040528092919081815260200182805461116790611e74565b80156111b25780601f10611189576101008083540402835291602001916111b2565b820191905f5260205f20905b81548152906001019060200180831161119557829003601f168201915b505050505085610a9e565b90505f6112236112016040518060600160405280602e815260200161221e602e9139604051806040016040528060048152602001635749465560e01b815250610a9e565b60405180604001604052806004815260200163227d5d7d60e01b815250610a9e565b90506112686040518060400160405280601b81526020017f646174613a6170706c69636174696f6e2f6a736f6e3b757466382c00000000008152506102ab8484610a9e565b95945050505050565b6011805461046d90611e74565b5f546001600160a01b031633146112a75760405162461bcd60e51b815260040161056a90611eac565b60116106b88282611f16565b6010805461046d90611e74565b5f546001600160a01b031633146112e95760405162461bcd60e51b815260040161056a90611eac565b6001600160a01b03811661132f5760405162461bcd60e51b815260206004820152600d60248201526c34b73b30b634b21037bbb732b960991b604482015260640161056a565b5f80546001600160a01b0319166001600160a01b0383169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b600a545f906001600160a01b03166113a757600a80546001600160a01b0319166001600160a01b0385161790555b5f546001600160a01b03858116911614806113ce57505f546001600160a01b038481169116145b156113da575080610e91565b6001600160a01b0383165f908152600b602052604090205415801561140c5750600a546001600160a01b038581169116145b15611430576001600160a01b0383165f908152600b602052604090204390556115ac565b6001600160a01b0384165f908152600b60205260409020541580159061147557506001600160a01b0384165f908152600b60205260408120546114739043611fea565b115b156115ac576001600160a01b0384165f908152600b6020526040902054601e9061149f9043611fea565b1015611576575f6114ae6115b3565b90505f60646114be85605f6120c9565b6114c891906120f4565b90505f6114d583836120f4565b6001600160a01b0388165f90815260066020526040812080549293508492909190611501908490611fea565b909155505f90505b818110156115225761151a886118b6565b600101611509565b5061152d8286611fea565b9450600554851161156e5760405162461bcd60e51b815260206004820152600b60248201526a139bdd08185b1b1bddd95960aa1b604482015260640161056a565b5050506115ac565b60405162461bcd60e51b815260206004820152600b60248201526a139bdd08185b1b1bddd95960aa1b604482015260640161056a565b5092915050565b6003545f906115c69060ff16600a6121e7565b905090565b5f806115d56115b3565b6001600160a01b038087165f818152600660205260408082208054948a16835290822054928252939450919290918691906116108386611fea565b90915550506001600160a01b0386165f908152600660205260408120805487929061163c908490611ffd565b90915550506001600160a01b0387165f908152600f602052604090205460ff166116b7576001600160a01b0387165f908152600660205260408120546116839085906120f4565b61168d85856120f4565b6116979190611fea565b90505f5b818110156116b4576116ac896118b6565b60010161169b565b50505b6001600160a01b0386165f908152600f602052604090205460ff1661172e575f6116e184836120f4565b6001600160a01b0388165f908152600660205260409020546117049086906120f4565b61170e9190611fea565b90505f5b8181101561172b57611723886119f7565b600101611712565b50505b856001600160a01b0316876001600160a01b03167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e0314878760405161177391815260200190565b60405180910390a35060019695505050505050565b60016117948382611f16565b506002610a998282611f16565b6060815f036117c75750506040805180820190915260018152600360fc1b602082015290565b815f5b81156117f057806117da81612038565b91506117e99050600a836120f4565b91506117ca565b5f8167ffffffffffffffff81111561180a5761180a611bee565b6040519080825280601f01601f191660200182016040528015611834576020820181803683370190505b5090505f611843600184611fea565b90508593505b83156118ad5761185a600a856121f5565b611865906030611ffd565b60f81b828261187381612208565b93508151811061188557611885612010565b60200101906001600160f81b03191690815f1a9053506118a6600a856120f4565b9350611849565b50949350505050565b6001600160a01b0381166118fd5760405162461bcd60e51b815260206004820152600e60248201526d1024b73b30b634b229b2b73232b960911b604482015260640161056a565b6001600160a01b0381165f908152600d60205260408120805461192290600190611fea565b8154811061193257611932612010565b905f5260205f2001549050600d5f836001600160a01b03166001600160a01b031681526020019081526020015f2080548061196f5761196f612024565b5f828152602080822083015f19908101839055909201909255828252600e81526040808320839055600c825280832080546001600160a01b031990811690915560089092528083208054909216909155518291906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6001600160a01b038116611a405760405162461bcd60e51b815260206004820152601060248201526f125b9d985b1a59149958da5c1a595b9d60821b604482015260640161056a565b60058054905f611a4f83612038565b90915550506005545f818152600c60205260409020546001600160a01b031615611aac5760405162461bcd60e51b815260206004820152600e60248201526d616c72656164792065786973747360901b604482015260640161056a565b5f818152600c6020908152604080832080546001600160a01b0319166001600160a01b038716908117909155808452600d83529083208054600181810183558286529385200185905592529054611b039190611fea565b5f828152600e602052604080822092909255905182916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b5f602080835283518060208501525f5b81811015611b7957858101830151858201604001528201611b5d565b505f604082860101526040601f19601f8301168501019250505092915050565b5f60208284031215611ba9575f80fd5b5035919050565b80356001600160a01b0381168114610dfb575f80fd5b5f8060408385031215611bd7575f80fd5b611be083611bb0565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112611c11575f80fd5b813567ffffffffffffffff80821115611c2c57611c2c611bee565b604051601f8301601f19908116603f01168101908282118183101715611c5457611c54611bee565b81604052838152866020858801011115611c6c575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f60208284031215611c9b575f80fd5b813567ffffffffffffffff811115611cb1575f80fd5b611cbd84828501611c02565b949350505050565b5f805f60608486031215611cd7575f80fd5b611ce084611bb0565b9250611cee60208501611bb0565b9150604084013590509250925092565b5f8060408385031215611d0f575f80fd5b823567ffffffffffffffff80821115611d26575f80fd5b611d3286838701611c02565b93506020850135915080821115611d47575f80fd5b50611d5485828601611c02565b9150509250929050565b5f8060408385031215611d6f575f80fd5b611d7883611bb0565b915060208301358015158114611d8c575f80fd5b809150509250929050565b5f60208284031215611da7575f80fd5b610e9182611bb0565b5f805f805f60808688031215611dc4575f80fd5b611dcd86611bb0565b9450611ddb60208701611bb0565b935060408601359250606086013567ffffffffffffffff80821115611dfe575f80fd5b818801915088601f830112611e11575f80fd5b813581811115611e1f575f80fd5b896020828501011115611e30575f80fd5b9699959850939650602001949392505050565b5f8060408385031215611e54575f80fd5b611e5d83611bb0565b9150611e6b60208401611bb0565b90509250929050565b600181811c90821680611e8857607f821691505b602082108103611ea657634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252600c908201526b1d5b985d5d1a1bdc9a5e995960a21b604082015260600190565b601f821115610a9957805f5260205f20601f840160051c81016020851015611ef75750805b601f840160051c820191505b81811015610a96575f8155600101611f03565b815167ffffffffffffffff811115611f3057611f30611bee565b611f4481611f3e8454611e74565b84611ed2565b602080601f831160018114611f77575f8415611f605750858301515b5f19600386901b1c1916600185901b178555611fce565b5f85815260208120601f198616915b82811015611fa557888601518255948401946001909101908401611f86565b5085821015611fc257878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561063a5761063a611fd6565b8082018082111561063a5761063a611fd6565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52603160045260245ffd5b5f6001820161204957612049611fd6565b5060010190565b5f60208284031215612060575f80fd5b81516001600160e01b031981168114610e91575f80fd5b6001600160a01b038681168252851660208201526040810184905260806060820181905281018290525f828460a08401375f60a0848401015260a0601f19601f85011683010190509695505050505050565b808202811582820484141761063a5761063a611fd6565b634e487b7160e01b5f52601260045260245ffd5b5f82612102576121026120e0565b500490565b600181815b8085111561214157815f190482111561212757612127611fd6565b8085161561213457918102915b93841c939080029061210c565b509250929050565b5f826121575750600161063a565b8161216357505f61063a565b816001811461217957600281146121835761219f565b600191505061063a565b60ff84111561219457612194611fd6565b50506001821b61063a565b5060208310610133831016604e8410600b84101617156121c2575081810a61063a565b6121cc8383612107565b805f19048211156121df576121df611fd6565b029392505050565b5f610e9160ff841683612149565b5f82612203576122036120e0565b500690565b5f8161221657612216611fd6565b505f19019056fe222c2261747472696275746573223a5b7b2274726169745f74797065223a226974656d222c2276616c7565223a22222c226465736372697074696f6e223a224120636f6c6c656374696f6e206f662020656e61626c65642062792074686520455243343034207374616e646172642e222c227761726e696e67223a224f6e6c7920627579207468697320696620796f75206b6e6f77207768617420796f75207220646f696e672e20596f752077696c6c206c696b656c79206c6f736520796f75722066756e647320696620796f7520646f222c2265787465726e616c5f75726c223a22222c22696d616765223a22a2646970667358221220aacdf5eeea886351e3a7975786e56cb0d7db55a33d9a82f5acece86cfdcbe0c864736f6c63430008180033

Deployed Bytecode

0x608060405234801561000f575f80fd5b50600436106101c6575f3560e01c80636352211e116100fe578063b88d4fde1161009e578063e0df5b6f1161006e578063e0df5b6f14610405578063e985e9c514610418578063f28ca1dd14610445578063f2fde38b1461044d575f80fd5b8063b88d4fde146103ad578063c87b56dd146103c0578063d547cfb7146103d3578063dd62ed3e146103db575f80fd5b806395d89b41116100d957806395d89b411461035d5780639b19251a14610365578063a22cb46514610387578063a9059cbb1461039a575f80fd5b80636352211e1461031957806370a082311461032c5780638da5cb5b1461034b575f80fd5b8063266001d31161016957806342842e0e1161014457806342842e0e146102d75780634f02c420146102ea578063504334c2146102f357806353d6fd5914610306575f80fd5b8063266001d31461029d5780632b968958146102b0578063313ce567146102b8575f80fd5b8063154e839e116101a4578063154e839e1461024b57806318160ddd1461026057806318d217c31461027757806323b872dd1461028a575f80fd5b806306fdde03146101ca578063081812fc146101e8578063095ea7b314610228575b5f80fd5b6101d2610460565b6040516101df9190611b4d565b60405180910390f35b6102106101f6366004611b99565b60086020525f90815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016101df565b61023b610236366004611bc6565b6104ec565b60405190151581526020016101df565b61025e610259366004611b99565b610640565b005b61026960045481565b6040519081526020016101df565b61025e610285366004611c8b565b610683565b61025e610298366004611cc5565b6106bc565b6101d26102ab366004611cfe565b610a9e565b61025e610bd8565b6003546102c59060ff1681565b60405160ff90911681526020016101df565b61025e6102e5366004611cc5565b610c3c565b61026960055481565b61025e610301366004611cfe565b610d25565b61025e610314366004611d5e565b610d58565b610210610327366004611b99565b610dab565b61026961033a366004611d97565b60066020525f908152604090205481565b5f54610210906001600160a01b031681565b6101d2610e00565b61023b610373366004611d97565b600f6020525f908152604090205460ff1681565b61025e610395366004611d5e565b610e0d565b61023b6103a8366004611bc6565b610e78565b61025e6103bb366004611db0565b610e98565b6101d26103ce366004611b99565b610f70565b6101d2611271565b6102696103e9366004611e43565b600760209081525f928352604080842090915290825290205481565b61025e610413366004611c8b565b61127e565b61023b610426366004611e43565b600960209081525f928352604080842090915290825290205460ff1681565b6101d26112b3565b61025e61045b366004611d97565b6112c0565b6001805461046d90611e74565b80601f016020809104026020016040519081016040528092919081815260200182805461049990611e74565b80156104e45780601f106104bb576101008083540402835291602001916104e4565b820191905f5260205f20905b8154815290600101906020018083116104c757829003601f168201915b505050505081565b5f60055482111580156104fe57505f82115b156105db575f828152600c60205260409020546001600160a01b031633811480159061054d57506001600160a01b0381165f90815260096020908152604080832033845290915290205460ff16155b156105735760405162461bcd60e51b815260040161056a90611eac565b60405180910390fd5b5f8381526008602090815260409182902080546001600160a01b0319166001600160a01b038881169182179092559251868152908416917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350610636565b335f8181526007602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35b5060015b92915050565b5f546001600160a01b031633146106695760405162461bcd60e51b815260040161056a90611eac565b5f80546001600160a01b0316815260066020526040902055565b5f546001600160a01b031633146106ac5760405162461bcd60e51b815260040161056a90611eac565b60106106b88282611f16565b5050565b6106c7838383611379565b90506005548111610a32575f818152600c60205260409020546001600160a01b0384811691161461072b5760405162461bcd60e51b815260206004820152600e60248201526d1024b73b30b634b229b2b73232b960911b604482015260640161056a565b6001600160a01b0382166107745760405162461bcd60e51b815260206004820152601060248201526f125b9d985b1a59149958da5c1a595b9d60821b604482015260640161056a565b336001600160a01b038416148015906107b057506001600160a01b0383165f90815260096020908152604080832033845290915290205460ff16155b80156107d257505f818152600860205260409020546001600160a01b03163314155b156107ef5760405162461bcd60e51b815260040161056a90611eac565b6107f76115b3565b6001600160a01b0384165f908152600660205260408120805490919061081e908490611fea565b9091555061082c90506115b3565b6001600160a01b0383165f9081526006602052604081208054909190610853908490611ffd565b90915550505f818152600c6020908152604080832080546001600160a01b038088166001600160a01b031992831617909255600884528285208054909116905586168352600d909152812080546108ac90600190611fea565b815481106108bc576108bc612010565b5f9182526020808320909101546001600160a01b0387168352600d82526040808420868552600e909352909220548154929350839281106108ff576108ff612010565b5f9182526020808320909101929092556001600160a01b0386168152600d9091526040902080548061093357610933612024565b5f828152602080822083015f19908101839055909201909255838252600e8152604080832054848452818420556001600160a01b038616808452600d835290832080546001818101835582865293852001869055925290546109959190611fea565b5f838152600e602052604080822092909255905183916001600160a01b0380871692908816917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4826001600160a01b0316846001600160a01b03167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e031487610a1b6115b3565b60405190815260200160405180910390a350505050565b6001600160a01b0383165f9081526007602090815260408083203384529091529020545f198114610a8b57610a678282611fea565b6001600160a01b0385165f9081526007602090815260408083203384529091529020555b610a968484846115cb565b50505b505050565b80518251606091849184915f91610ab59190611ffd565b67ffffffffffffffff811115610acd57610acd611bee565b6040519080825280601f01601f191660200182016040528015610af7576020820181803683370190505b509050805f805b8551811015610b6357858181518110610b1957610b19612010565b01602001516001600160f81b0319168383610b3381612038565b945081518110610b4557610b45612010565b60200101906001600160f81b03191690815f1a905350600101610afe565b505f5b8451811015610bcb57848181518110610b8157610b81612010565b01602001516001600160f81b0319168383610b9b81612038565b945081518110610bad57610bad612010565b60200101906001600160f81b03191690815f1a905350600101610b66565b5090979650505050505050565b5f546001600160a01b03163314610c015760405162461bcd60e51b815260040161056a90611eac565b5f80546001600160a01b031916815560405133907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3565b610c478383836106bc565b813b15158015610ce65750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401525f608484015290919084169063150b7a029060a4016020604051808303815f875af1158015610cb5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cd99190612050565b6001600160e01b03191614155b15610a995760405162461bcd60e51b815260206004820152600f60248201526e155b9cd85999549958da5c1a595b9d608a1b604482015260640161056a565b5f546001600160a01b03163314610d4e5760405162461bcd60e51b815260040161056a90611eac565b6106b88282611788565b5f546001600160a01b03163314610d815760405162461bcd60e51b815260040161056a90611eac565b6001600160a01b03919091165f908152600f60205260409020805460ff1916911515919091179055565b5f818152600c60205260409020546001600160a01b031680610dfb5760405162461bcd60e51b81526020600482015260096024820152681b9bdd08199bdd5b9960ba1b604482015260640161056a565b919050565b6002805461046d90611e74565b335f8181526009602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b5f610e84338484611379565b9150610e913384846115cb565b9392505050565b610ea38585856106bc565b833b15158015610f315750604051630a85bd0160e11b808252906001600160a01b0386169063150b7a0290610ee49033908a90899089908990600401612077565b6020604051808303815f875af1158015610f00573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f249190612050565b6001600160e01b03191614155b15610a965760405162461bcd60e51b815260206004820152600f60248201526e155b9cd85999549958da5c1a595b9d608a1b604482015260640161056a565b60605f60118054610f8090611e74565b9050111561101d5761063a60118054610f9890611e74565b80601f0160208091040260200160405190810160405280929190818152602001828054610fc490611e74565b801561100f5780601f10610fe65761010080835404028352916020019161100f565b820191905f5260205f20905b815481529060010190602001808311610ff257829003601f168201915b50505050506102ab846117a1565b5f61104c61102a846117a1565b604051806040016040528060048152602001632e706e6760e01b815250610a9e565b90505f6111bd61112b6110c76110a06040518060400160405280600a8152602001693d913730b6b2911d101160b11b815250604051806040016040528060048152602001635749465560e01b815250610a9e565b6102ab60405180604001604052806002815260200161202360f01b8152506102ab8a6117a1565b6102ab61110d60405180606001604052806021815260200161224c602191396040518060400160405280600981526020016857494655203430344160b81b815250610a9e565b6040518060c00160405280609f815260200161226d609f9139610a9e565b6102ab6010805461113b90611e74565b80601f016020809104026020016040519081016040528092919081815260200182805461116790611e74565b80156111b25780601f10611189576101008083540402835291602001916111b2565b820191905f5260205f20905b81548152906001019060200180831161119557829003601f168201915b505050505085610a9e565b90505f6112236112016040518060600160405280602e815260200161221e602e9139604051806040016040528060048152602001635749465560e01b815250610a9e565b60405180604001604052806004815260200163227d5d7d60e01b815250610a9e565b90506112686040518060400160405280601b81526020017f646174613a6170706c69636174696f6e2f6a736f6e3b757466382c00000000008152506102ab8484610a9e565b95945050505050565b6011805461046d90611e74565b5f546001600160a01b031633146112a75760405162461bcd60e51b815260040161056a90611eac565b60116106b88282611f16565b6010805461046d90611e74565b5f546001600160a01b031633146112e95760405162461bcd60e51b815260040161056a90611eac565b6001600160a01b03811661132f5760405162461bcd60e51b815260206004820152600d60248201526c34b73b30b634b21037bbb732b960991b604482015260640161056a565b5f80546001600160a01b0319166001600160a01b0383169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b600a545f906001600160a01b03166113a757600a80546001600160a01b0319166001600160a01b0385161790555b5f546001600160a01b03858116911614806113ce57505f546001600160a01b038481169116145b156113da575080610e91565b6001600160a01b0383165f908152600b602052604090205415801561140c5750600a546001600160a01b038581169116145b15611430576001600160a01b0383165f908152600b602052604090204390556115ac565b6001600160a01b0384165f908152600b60205260409020541580159061147557506001600160a01b0384165f908152600b60205260408120546114739043611fea565b115b156115ac576001600160a01b0384165f908152600b6020526040902054601e9061149f9043611fea565b1015611576575f6114ae6115b3565b90505f60646114be85605f6120c9565b6114c891906120f4565b90505f6114d583836120f4565b6001600160a01b0388165f90815260066020526040812080549293508492909190611501908490611fea565b909155505f90505b818110156115225761151a886118b6565b600101611509565b5061152d8286611fea565b9450600554851161156e5760405162461bcd60e51b815260206004820152600b60248201526a139bdd08185b1b1bddd95960aa1b604482015260640161056a565b5050506115ac565b60405162461bcd60e51b815260206004820152600b60248201526a139bdd08185b1b1bddd95960aa1b604482015260640161056a565b5092915050565b6003545f906115c69060ff16600a6121e7565b905090565b5f806115d56115b3565b6001600160a01b038087165f818152600660205260408082208054948a16835290822054928252939450919290918691906116108386611fea565b90915550506001600160a01b0386165f908152600660205260408120805487929061163c908490611ffd565b90915550506001600160a01b0387165f908152600f602052604090205460ff166116b7576001600160a01b0387165f908152600660205260408120546116839085906120f4565b61168d85856120f4565b6116979190611fea565b90505f5b818110156116b4576116ac896118b6565b60010161169b565b50505b6001600160a01b0386165f908152600f602052604090205460ff1661172e575f6116e184836120f4565b6001600160a01b0388165f908152600660205260409020546117049086906120f4565b61170e9190611fea565b90505f5b8181101561172b57611723886119f7565b600101611712565b50505b856001600160a01b0316876001600160a01b03167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e0314878760405161177391815260200190565b60405180910390a35060019695505050505050565b60016117948382611f16565b506002610a998282611f16565b6060815f036117c75750506040805180820190915260018152600360fc1b602082015290565b815f5b81156117f057806117da81612038565b91506117e99050600a836120f4565b91506117ca565b5f8167ffffffffffffffff81111561180a5761180a611bee565b6040519080825280601f01601f191660200182016040528015611834576020820181803683370190505b5090505f611843600184611fea565b90508593505b83156118ad5761185a600a856121f5565b611865906030611ffd565b60f81b828261187381612208565b93508151811061188557611885612010565b60200101906001600160f81b03191690815f1a9053506118a6600a856120f4565b9350611849565b50949350505050565b6001600160a01b0381166118fd5760405162461bcd60e51b815260206004820152600e60248201526d1024b73b30b634b229b2b73232b960911b604482015260640161056a565b6001600160a01b0381165f908152600d60205260408120805461192290600190611fea565b8154811061193257611932612010565b905f5260205f2001549050600d5f836001600160a01b03166001600160a01b031681526020019081526020015f2080548061196f5761196f612024565b5f828152602080822083015f19908101839055909201909255828252600e81526040808320839055600c825280832080546001600160a01b031990811690915560089092528083208054909216909155518291906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6001600160a01b038116611a405760405162461bcd60e51b815260206004820152601060248201526f125b9d985b1a59149958da5c1a595b9d60821b604482015260640161056a565b60058054905f611a4f83612038565b90915550506005545f818152600c60205260409020546001600160a01b031615611aac5760405162461bcd60e51b815260206004820152600e60248201526d616c72656164792065786973747360901b604482015260640161056a565b5f818152600c6020908152604080832080546001600160a01b0319166001600160a01b038716908117909155808452600d83529083208054600181810183558286529385200185905592529054611b039190611fea565b5f828152600e602052604080822092909255905182916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b5f602080835283518060208501525f5b81811015611b7957858101830151858201604001528201611b5d565b505f604082860101526040601f19601f8301168501019250505092915050565b5f60208284031215611ba9575f80fd5b5035919050565b80356001600160a01b0381168114610dfb575f80fd5b5f8060408385031215611bd7575f80fd5b611be083611bb0565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112611c11575f80fd5b813567ffffffffffffffff80821115611c2c57611c2c611bee565b604051601f8301601f19908116603f01168101908282118183101715611c5457611c54611bee565b81604052838152866020858801011115611c6c575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f60208284031215611c9b575f80fd5b813567ffffffffffffffff811115611cb1575f80fd5b611cbd84828501611c02565b949350505050565b5f805f60608486031215611cd7575f80fd5b611ce084611bb0565b9250611cee60208501611bb0565b9150604084013590509250925092565b5f8060408385031215611d0f575f80fd5b823567ffffffffffffffff80821115611d26575f80fd5b611d3286838701611c02565b93506020850135915080821115611d47575f80fd5b50611d5485828601611c02565b9150509250929050565b5f8060408385031215611d6f575f80fd5b611d7883611bb0565b915060208301358015158114611d8c575f80fd5b809150509250929050565b5f60208284031215611da7575f80fd5b610e9182611bb0565b5f805f805f60808688031215611dc4575f80fd5b611dcd86611bb0565b9450611ddb60208701611bb0565b935060408601359250606086013567ffffffffffffffff80821115611dfe575f80fd5b818801915088601f830112611e11575f80fd5b813581811115611e1f575f80fd5b896020828501011115611e30575f80fd5b9699959850939650602001949392505050565b5f8060408385031215611e54575f80fd5b611e5d83611bb0565b9150611e6b60208401611bb0565b90509250929050565b600181811c90821680611e8857607f821691505b602082108103611ea657634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252600c908201526b1d5b985d5d1a1bdc9a5e995960a21b604082015260600190565b601f821115610a9957805f5260205f20601f840160051c81016020851015611ef75750805b601f840160051c820191505b81811015610a96575f8155600101611f03565b815167ffffffffffffffff811115611f3057611f30611bee565b611f4481611f3e8454611e74565b84611ed2565b602080601f831160018114611f77575f8415611f605750858301515b5f19600386901b1c1916600185901b178555611fce565b5f85815260208120601f198616915b82811015611fa557888601518255948401946001909101908401611f86565b5085821015611fc257878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561063a5761063a611fd6565b8082018082111561063a5761063a611fd6565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52603160045260245ffd5b5f6001820161204957612049611fd6565b5060010190565b5f60208284031215612060575f80fd5b81516001600160e01b031981168114610e91575f80fd5b6001600160a01b038681168252851660208201526040810184905260806060820181905281018290525f828460a08401375f60a0848401015260a0601f19601f85011683010190509695505050505050565b808202811582820484141761063a5761063a611fd6565b634e487b7160e01b5f52601260045260245ffd5b5f82612102576121026120e0565b500490565b600181815b8085111561214157815f190482111561212757612127611fd6565b8085161561213457918102915b93841c939080029061210c565b509250929050565b5f826121575750600161063a565b8161216357505f61063a565b816001811461217957600281146121835761219f565b600191505061063a565b60ff84111561219457612194611fd6565b50506001821b61063a565b5060208310610133831016604e8410600b84101617156121c2575081810a61063a565b6121cc8383612107565b805f19048211156121df576121df611fd6565b029392505050565b5f610e9160ff841683612149565b5f82612203576122036120e0565b500690565b5f8161221657612216611fd6565b505f19019056fe222c2261747472696275746573223a5b7b2274726169745f74797065223a226974656d222c2276616c7565223a22222c226465736372697074696f6e223a224120636f6c6c656374696f6e206f662020656e61626c65642062792074686520455243343034207374616e646172642e222c227761726e696e67223a224f6e6c7920627579207468697320696620796f75206b6e6f77207768617420796f75207220646f696e672e20596f752077696c6c206c696b656c79206c6f736520796f75722066756e647320696620796f7520646f222c2265787465726e616c5f75726c223a22222c22696d616765223a22a2646970667358221220aacdf5eeea886351e3a7975786e56cb0d7db55a33d9a82f5acece86cfdcbe0c864736f6c63430008180033

Deployed Bytecode Sourcemap

14127:2629:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3495:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4186:46;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;4186:46:0;;;;;;-1:-1:-1;;;;;916:32:1;;;898:51;;886:2;871:18;4186:46:0;752:203:1;6346:643:0;;;;;;:::i;:::-;;:::i;:::-;;;1562:14:1;;1555:22;1537:41;;1525:2;1510:18;6346:643:0;1397:187:1;5697:87:0;;;;;;:::i;:::-;;:::i;:::-;;3721:26;;;;;;;;;1735:25:1;;;1723:2;1708:18;3721:26:0;1589:177:1;14601:98:0;;;;;;:::i;:::-;;:::i;7396:1739::-;;;;;;:::i;:::-;;:::i;16160:593::-;;;;;;:::i;:::-;;:::i;1648:151::-;;;:::i;3631:21::-;;;;;;;;;;;;4007:4:1;3995:17;;;3977:36;;3965:2;3950:18;3631:21:0;3835:184:1;9492:401:0;;;;;;:::i;:::-;;:::i;3846:21::-;;;;;;14821:145;;;;;;:::i;:::-;;:::i;5518:111::-;;;;;;:::i;:::-;;:::i;5856:195::-;;;;;;:::i;:::-;;:::i;3952:44::-;;;;;;:::i;:::-;;;;;;;;;;;;;;1084:20;;;;;-1:-1:-1;;;;;1084:20:0;;;3549;;;:::i;4969:41::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;7040:207;;;;;;:::i;:::-;;:::i;9194:221::-;;;;;;:::i;:::-;;:::i;9988:433::-;;;;;;:::i;:::-;;:::i;14974:1178::-;;;;;;:::i;:::-;;:::i;14388:26::-;;;:::i;4066:64::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;14707:106;;;;;;:::i;:::-;;:::i;4297:68::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;14360:21;;;:::i;1419:221::-;;;;;;:::i;:::-;;:::i;3495:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6346:643::-;6449:4;6484:6;;6470:10;:20;;:38;;;;;6507:1;6494:10;:14;6470:38;6466:492;;;6525:13;6541:20;;;:8;:20;;;;;;-1:-1:-1;;;;;6541:20:0;6582:10;:19;;;;;:59;;-1:-1:-1;;;;;;6606:23:0;;;;;;:16;:23;;;;;;;;6630:10;6606:35;;;;;;;;;;6605:36;6582:59;6578:122;;;6662:22;;-1:-1:-1;;;6662:22:0;;;;;;;:::i;:::-;;;;;;;;6578:122;6716:23;;;;:11;:23;;;;;;;;;:33;;-1:-1:-1;;;;;;6716:33:0;-1:-1:-1;;;;;6716:33:0;;;;;;;;;6771:36;;1735:25:1;;;6771:36:0;;;;;;1708:18:1;6771:36:0;;;;;;;6510:309;6466:492;;;6850:10;6840:21;;;;:9;:21;;;;;;;;-1:-1:-1;;;;;6840:30:0;;;;;;;;;;;;:43;;;6905:41;1735:25:1;;;6840:30:0;;6850:10;6905:41;;1708:18:1;6905:41:0;;;;;;;6466:492;-1:-1:-1;6977:4:0;6346:643;;;;;:::o;5697:87::-;1171:5;;-1:-1:-1;;;;;1171:5:0;1157:10;:19;1153:47;;1178:22;;-1:-1:-1;;;1178:22:0;;;;;;;:::i;1153:47::-;5755:16:::1;5765:5:::0;;-1:-1:-1;;;;;5765:5:0::1;5755:16:::0;;:9:::1;:16;::::0;;;;:21;5697:87::o;14601:98::-;1171:5;;-1:-1:-1;;;;;1171:5:0;1157:10;:19;1153:47;;1178:22;;-1:-1:-1;;;1178:22:0;;;;;;;:::i;1153:47::-;14673:7:::1;:18;14683:8:::0;14673:7;:18:::1;:::i;:::-;;14601:98:::0;:::o;7396:1739::-;7537:39;7555:4;7561:2;7565:10;7537:17;:39::i;:::-;7524:52;;7605:6;;7591:10;:20;7587:1541;;7640:20;;;;:8;:20;;;;;;-1:-1:-1;;;;;7632:28:0;;;7640:20;;7632:28;7628:93;;7681:24;;-1:-1:-1;;;7681:24:0;;8743:2:1;7681:24:0;;;8725:21:1;8782:2;8762:18;;;8755:30;-1:-1:-1;;;8801:18:1;;;8794:44;8855:18;;7681:24:0;8541:338:1;7628:93:0;-1:-1:-1;;;;;7741:16:0;;7737:83;;7778:26;;-1:-1:-1;;;7778:26:0;;9086:2:1;7778:26:0;;;9068:21:1;9125:2;9105:18;;;9098:30;-1:-1:-1;;;9144:18:1;;;9137:46;9200:18;;7778:26:0;8884:340:1;7737:83:0;7858:10;-1:-1:-1;;;;;7858:18:0;;;;;;:74;;-1:-1:-1;;;;;;7898:22:0;;;;;;:16;:22;;;;;;;;7921:10;7898:34;;;;;;;;;;7897:35;7858:74;:132;;;;-1:-1:-1;7967:23:0;;;;:11;:23;;;;;;-1:-1:-1;;;;;7967:23:0;7953:10;:37;;7858:132;7836:227;;;8025:22;;-1:-1:-1;;;8025:22:0;;;;;;;:::i;7836:227::-;8098:10;:8;:10::i;:::-;-1:-1:-1;;;;;8079:15:0;;;;;;:9;:15;;;;;:29;;:15;;;:29;;;;;:::i;:::-;;;;-1:-1:-1;8142:10:0;;-1:-1:-1;8142:8:0;:10::i;:::-;-1:-1:-1;;;;;8125:13:0;;;;;;:9;:13;;;;;:27;;:13;;;:27;;;;;:::i;:::-;;;;-1:-1:-1;;8169:20:0;;;;:8;:20;;;;;;;;:25;;-1:-1:-1;;;;;8169:25:0;;;-1:-1:-1;;;;;;8169:25:0;;;;;;;8216:11;:23;;;;;8209:30;;;;;;;8317:12;;;;:6;:12;;;;;8330:19;;:23;;8169:25;;8330:23;:::i;:::-;8317:37;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;8369:12:0;;;;:6;:12;;;;;;8382:23;;;:11;:23;;;;;;;8369:37;;8317;;-1:-1:-1;8317:37:0;;8369;;;;;;:::i;:::-;;;;;;;;;;;;:49;;;;-1:-1:-1;;;;;8453:12:0;;;;:6;:12;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;8453:18:0;;;;;;;;;;;;8557:23;;;:11;:23;;;;;;;8532:22;;;;;;:48;-1:-1:-1;;;;;8634:10:0;;;;;:6;:10;;;;;:27;;8453:18;8634:27;;;;;;;;;;;;;;;8744:10;;:17;;:21;;8453:18;8744:21;:::i;:::-;8718:23;;;;:11;:23;;;;;;:47;;;;8787:30;;8730:10;;-1:-1:-1;;;;;8787:30:0;;;;;;;;;;;8857:2;-1:-1:-1;;;;;8837:35:0;8851:4;-1:-1:-1;;;;;8837:35:0;;8861:10;:8;:10::i;:::-;8837:35;;1735:25:1;;;1723:2;1708:18;8837:35:0;;;;;;;7613:1271;7396:1739;;;:::o;7587:1541::-;-1:-1:-1;;;;;8923:15:0;;8905;8923;;;:9;:15;;;;;;;;8939:10;8923:27;;;;;;;;-1:-1:-1;;8971:28:0;;8967:101;;9048:20;9058:10;9048:7;:20;:::i;:::-;-1:-1:-1;;;;;9018:15:0;;;;;;:9;:15;;;;;;;;9034:10;9018:27;;;;;;;:50;8967:101;9085:31;9095:4;9101:2;9105:10;9085:9;:31::i;:::-;;8890:238;7587:1541;7396:1739;;;:::o;16160:593::-;16396:13;;16380;;16236;;16290:1;;16331;;16262:19;;16380:29;;16396:13;16380:29;:::i;:::-;16369:41;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16369:41:0;-1:-1:-1;16344:66:0;-1:-1:-1;16344:66:0;16421:26;;16499:98;16520:6;:13;16516:1;:17;16499:98;;;16576:6;16583:1;16576:9;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;16576:9:0;16555:13;16569:3;;;;:::i;:::-;;;16555:18;;;;;;;;:::i;:::-;;;;:30;-1:-1:-1;;;;;16555:30:0;;;;;;;;-1:-1:-1;16535:3:0;;16499:98;;;;16612:6;16607:98;16628:6;:13;16624:1;:17;16607:98;;;16684:6;16691:1;16684:9;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;16684:9:0;16663:13;16677:3;;;;:::i;:::-;;;16663:18;;;;;;;;:::i;:::-;;;;:30;-1:-1:-1;;;;;16663:30:0;;;;;;;;-1:-1:-1;16643:3:0;;16607:98;;;-1:-1:-1;16731:13:0;;16160:593;-1:-1:-1;;;;;;;16160:593:0:o;1648:151::-;1171:5;;-1:-1:-1;;;;;1171:5:0;1157:10;:19;1153:47;;1178:22;;-1:-1:-1;;;1178:22:0;;;;;;;:::i;1153:47::-;1727:1:::1;1711:18:::0;;-1:-1:-1;;;;;;1711:18:0::1;::::0;;1747:44:::1;::::0;1768:10:::1;::::0;1747:44:::1;::::0;1727:1;;1747:44:::1;1648:151::o:0;9492:401::-;9616:26;9629:4;9635:2;9639;9616:12;:26::i;:::-;10555:17;;10600:8;;9673:149;;;;-1:-1:-1;9704:61:0;;-1:-1:-1;;;9704:61:0;;;9740:10;9704:61;;;10333:34:1;-1:-1:-1;;;;;10403:15:1;;;10383:18;;;10376:43;10435:18;;;10428:34;;;10498:3;10478:18;;;10471:31;-1:-1:-1;10518:19:1;;;10511:30;9782:40:0;;9704:35;;;;9782:40;;10558:19:1;;9704:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;9704:118:0;;;9673:149;9655:231;;;9849:25;;-1:-1:-1;;;9849:25:0;;11085:2:1;9849:25:0;;;11067:21:1;11124:2;11104:18;;;11097:30;-1:-1:-1;;;11143:18:1;;;11136:45;11198:18;;9849:25:0;10883:339:1;14821:145:0;1171:5;;-1:-1:-1;;;;;1171:5:0;1157:10;:19;1153:47;;1178:22;;-1:-1:-1;;;1178:22:0;;;;;;;:::i;1153:47::-;14922:36:::1;14937:8;14947:10;14922:14;:36::i;5518:111::-:0;1171:5;;-1:-1:-1;;;;;1171:5:0;1157:10;:19;1153:47;;1178:22;;-1:-1:-1;;;1178:22:0;;;;;;;:::i;1153:47::-;-1:-1:-1;;;;;5596:17:0;;;::::1;;::::0;;;:9:::1;:17;::::0;;;;:25;;-1:-1:-1;;5596:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;5518:111::o;5856:195::-;5914:13;5948:12;;;:8;:12;;;;;;-1:-1:-1;;;;;5948:12:0;;5973:71;;6013:19;;-1:-1:-1;;;6013:19:0;;11429:2:1;6013:19:0;;;11411:21:1;11468:1;11448:18;;;11441:29;-1:-1:-1;;;11486:18:1;;;11479:39;11535:18;;6013:19:0;11227:332:1;5973:71:0;5856:195;;;:::o;3549:20::-;;;;;;;:::i;7040:207::-;7143:10;7126:28;;;;:16;:28;;;;;;;;-1:-1:-1;;;;;7126:38:0;;;;;;;;;;;;:49;;-1:-1:-1;;7126:49:0;;;;;;;;;;7193:46;;1537:41:1;;;7126:38:0;;7143:10;7193:46;;1510:18:1;7193:46:0;;;;;;;7040:207;;:::o;9194:221::-;9289:4;9315:41;9333:10;9345:2;9349:6;9315:17;:41::i;:::-;9306:50;;9374:33;9384:10;9396:2;9400:6;9374:9;:33::i;:::-;9367:40;9194:221;-1:-1:-1;;;9194:221:0:o;9988:433::-;10142:26;10155:4;10161:2;10165;10142:12;:26::i;:::-;10555:17;;10600:8;;10199:151;;;;-1:-1:-1;10230:63:0;;-1:-1:-1;;;10230:63:0;;;10310:40;-1:-1:-1;;;;;10230:35:0;;;10310:40;;10230:63;;10266:10;;10278:4;;10284:2;;10288:4;;;;10230:63;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;10230:120:0;;;10199:151;10181:233;;;10377:25;;-1:-1:-1;;;10377:25:0;;11085:2:1;10377:25:0;;;11067:21:1;11124:2;11104:18;;;11097:30;-1:-1:-1;;;11143:18:1;;;11136:45;11198:18;;10377:25:0;10883:339:1;14974:1178:0;15034:13;15093:1;15070:12;15064:26;;;;;:::i;:::-;;;:30;15060:1085;;;15118:47;15130:12;15118:47;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15144:20;15161:2;15144:16;:20::i;15060:1085::-;15198:19;15220:41;15232:20;15249:2;15232:16;:20::i;:::-;15220:41;;;;;;;;;;;;;-1:-1:-1;;;15220:41:0;;;:11;:41::i;:::-;15198:63;;15278:26;15307:582;15337:491;15371:136;15409:34;;;;;;;;;;;;;;-1:-1:-1;;;15409:34:0;;;15435:7;;;;;;;;;;;;;-1:-1:-1;;;15435:7:0;;;15409:11;:34::i;:::-;15445:39;;;;;;;;;;;;;;-1:-1:-1;;;15445:39:0;;;15463:20;15480:2;15463:16;:20::i;15371:136::-;15530:279;15568:55;;;;;;;;;;;;;;;;;;15617:5;;;;;;;;;;;;;-1:-1:-1;;;15617:5:0;;;15568:11;:55::i;:::-;15530:279;;;;;;;;;;;;;;;;;:11;:279::i;15337:491::-;15847:27;15859:7;15847:27;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15868:5;15847:11;:27::i;15307:582::-;15278:611;;15904:27;15934:91;15946:70;;;;;;;;;;;;;;;;;;16008:7;;;;;;;;;;;;;-1:-1:-1;;;16008:7:0;;;15946:11;:70::i;:::-;15934:91;;;;;;;;;;;;;-1:-1:-1;;;15934:91:0;;;:11;:91::i;:::-;15904:121;;16049:84;;;;;;;;;;;;;;;;;;16092:40;16104:12;16118:13;16092:11;:40::i;16049:84::-;16042:91;14974:1178;-1:-1:-1;;;;;14974:1178:0:o;14388:26::-;;;;;;;:::i;14707:106::-;1171:5;;-1:-1:-1;;;;;1171:5:0;1157:10;:19;1153:47;;1178:22;;-1:-1:-1;;;1178:22:0;;;;;;;:::i;1153:47::-;14781:12:::1;:24;14796:9:::0;14781:12;:24:::1;:::i;14360:21::-:0;;;;;;;:::i;1419:221::-;1171:5;;-1:-1:-1;;;;;1171:5:0;1157:10;:19;1153:47;;1178:22;;-1:-1:-1;;;1178:22:0;;;;;;;:::i;1153:47::-;-1:-1:-1;;;;;1502:20:0;::::1;1498:49;;1524:23;::::0;-1:-1:-1;;;1524:23:0;;12433:2:1;1524:23:0::1;::::0;::::1;12415:21:1::0;12472:2;12452:18;;;12445:30;-1:-1:-1;;;12491:18:1;;;12484:43;12544:18;;1524:23:0::1;12231:337:1::0;1498:49:0::1;1560:5;:14:::0;;-1:-1:-1;;;;;;1560:14:0::1;-1:-1:-1::0;;;;;1560:14:0;::::1;::::0;;::::1;::::0;;1592:40:::1;::::0;1560:14;;1613:10:::1;::::0;1592:40:::1;::::0;1560:5;1592:40:::1;1419:221:::0;:::o;10724:1150::-;10839:4;;10815:7;;-1:-1:-1;;;;;10839:4:0;10835:60;;10874:4;:9;;-1:-1:-1;;;;;;10874:9:0;-1:-1:-1;;;;;10874:9:0;;;;;10835:60;10919:5;;-1:-1:-1;;;;;10911:13:0;;;10919:5;;10911:13;;:28;;-1:-1:-1;10934:5:0;;-1:-1:-1;;;;;10928:11:0;;;10934:5;;10928:11;10911:28;10907:78;;;-1:-1:-1;10963:10:0;10956:17;;10907:78;-1:-1:-1;;;;;11001:19:0;;;;;;:15;:19;;;;;;:24;:40;;;;-1:-1:-1;11037:4:0;;-1:-1:-1;;;;;11029:12:0;;;11037:4;;11029:12;11001:40;10997:840;;;-1:-1:-1;;;;;11058:19:0;;;;;;:15;:19;;;;;11080:12;11058:34;;10997:840;;;-1:-1:-1;;;;;11114:21:0;;;;;;:15;:21;;;;;;:26;;;;:70;;-1:-1:-1;;;;;;11159:21:0;;11183:1;11159:21;;;:15;:21;;;;;;11144:36;;:12;:36;:::i;:::-;:40;11114:70;11110:727;;;-1:-1:-1;;;;;11220:21:0;;;;;;:15;:21;;;;;;11244:2;;11205:36;;:12;:36;:::i;:::-;:41;11201:625;;;11267:12;11282:10;:8;:10::i;:::-;11267:25;-1:-1:-1;11311:22:0;11354:3;11336:15;:10;11349:2;11336:15;:::i;:::-;:21;;;;:::i;:::-;11311:46;-1:-1:-1;11376:22:0;11401:21;11418:4;11311:46;11401:21;:::i;:::-;-1:-1:-1;;;;;11441:15:0;;;;;;:9;:15;;;;;:33;;11376:46;;-1:-1:-1;11460:14:0;;11441:15;;;:33;;11460:14;;11441:33;:::i;:::-;;;;-1:-1:-1;11498:9:0;;-1:-1:-1;11493:99:0;11517:14;11513:1;:18;11493:99;;;11561:11;11567:4;11561:5;:11::i;:::-;11533:3;;11493:99;;;-1:-1:-1;11612:28:0;11626:14;11612:28;;:::i;:::-;;;11677:6;;11663:10;:20;11659:90;;11708:21;;-1:-1:-1;;;11708:21:0;;13205:2:1;11708:21:0;;;13187::1;13244:2;13224:18;;;13217:30;-1:-1:-1;;;13263:18:1;;;13256:41;13314:18;;11708:21:0;13003:335:1;11659:90:0;11248:516;;;11201:625;;;11789:21;;-1:-1:-1;;;11789:21:0;;13205:2:1;11789:21:0;;;13187::1;13244:2;13224:18;;;13217:30;-1:-1:-1;;;13263:18:1;;;13256:41;13314:18;;11789:21:0;13003:335:1;11201:625:0;-1:-1:-1;11856:10:0;10724:1150;-1:-1:-1;;10724:1150:0:o;13028:92::-;13104:8;;13071:7;;13098:14;;13104:8;;13098:2;:14;:::i;:::-;13091:21;;13028:92;:::o;11942:1047::-;12055:4;12072:12;12087:10;:8;:10::i;:::-;-1:-1:-1;;;;;12138:15:0;;;12108:27;12138:15;;;:9;:15;;;;;;;;12196:13;;;;;;;;;12222:15;;;12072:25;;-1:-1:-1;12138:15:0;;12196:13;;12241:6;;12138:15;12222:25;12241:6;12138:15;12222:25;:::i;:::-;;;;-1:-1:-1;;;;;;;12258:13:0;;;;;;:9;:13;;;;;:23;;12275:6;;12258:13;:23;;12275:6;;12258:23;:::i;:::-;;;;-1:-1:-1;;;;;;;12355:15:0;;;;;;:9;:15;;;;;;;;12350:247;;-1:-1:-1;;;;;12457:15:0;;12387:22;12457:15;;;:9;:15;;;;;;:22;;12475:4;;12457:22;:::i;:::-;12413:26;12435:4;12413:19;:26;:::i;:::-;12412:68;;;;:::i;:::-;12387:93;;12500:9;12495:91;12519:14;12515:1;:18;12495:91;;;12559:11;12565:4;12559:5;:11::i;:::-;12535:3;;12495:91;;;;12372:225;12350:247;-1:-1:-1;;;;;12673:13:0;;;;;;:9;:13;;;;;;;;12668:243;;12703:22;12767:28;12791:4;12767:21;:28;:::i;:::-;-1:-1:-1;;;;;12729:13:0;;;;;;:9;:13;;;;;;:20;;12745:4;;12729:20;:::i;:::-;12728:68;;;;:::i;:::-;12703:93;;12816:9;12811:89;12835:14;12831:1;:18;12811:89;;;12875:9;12881:2;12875:5;:9::i;:::-;12851:3;;12811:89;;;;12688:223;12668:243;12948:2;-1:-1:-1;;;;;12928:31:0;12942:4;-1:-1:-1;;;;;12928:31:0;;12952:6;12928:31;;;;1735:25:1;;1723:2;1708:18;;1589:177;12928:31:0;;;;;;;;-1:-1:-1;12977:4:0;;11942:1047;-1:-1:-1;;;;;;11942:1047:0:o;13960:160::-;14073:4;:12;14080:5;14073:4;:12;:::i;:::-;-1:-1:-1;14096:6:0;:16;14105:7;14096:6;:16;:::i;213:746::-;269:13;490:5;499:1;490:10;486:53;;-1:-1:-1;;517:10:0;;;;;;;;;;;;-1:-1:-1;;;517:10:0;;;;;213:746::o;486:53::-;564:5;549:12;605:78;612:9;;605:78;;638:8;;;;:::i;:::-;;-1:-1:-1;661:10:0;;-1:-1:-1;669:2:0;661:10;;:::i;:::-;;;605:78;;;693:19;725:6;715:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;715:17:0;-1:-1:-1;693:39:0;-1:-1:-1;743:13:0;759:10;768:1;759:6;:10;:::i;:::-;743:26;;787:5;780:12;;803:117;810:9;;803:117;;872:9;879:2;872:4;:9;:::i;:::-;867:14;;:2;:14;:::i;:::-;854:29;;836:6;843:7;;;;:::i;:::-;;;836:15;;;;;;;;:::i;:::-;;;;:47;-1:-1:-1;;;;;836:47:0;;;;;;;;-1:-1:-1;898:10:0;906:2;898:10;;:::i;:::-;;;803:117;;;-1:-1:-1;944:6:0;213:746;-1:-1:-1;;;;213:746:0:o;13577:375::-;-1:-1:-1;;;;;13638:18:0;;13634:75;;13673:24;;-1:-1:-1;;;13673:24:0;;8743:2:1;13673:24:0;;;8725:21:1;8782:2;8762:18;;;8755:30;-1:-1:-1;;;8801:18:1;;;8794:44;8855:18;;13673:24:0;8541:338:1;13634:75:0;-1:-1:-1;;;;;13734:12:0;;13721:10;13734:12;;;:6;:12;;;;;13747:19;;:23;;13769:1;;13747:23;:::i;:::-;13734:37;;;;;;;;:::i;:::-;;;;;;;;;13721:50;;13782:6;:12;13789:4;-1:-1:-1;;;;;13782:12:0;-1:-1:-1;;;;;13782:12:0;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;13782:18:0;;;;;;;;;;;;13818:15;;;:11;:15;;;;;;13811:22;;;13851:8;:12;;;;;13844:19;;-1:-1:-1;;;;;;13844:19:0;;;;;;13881:11;:15;;;;;;13874:22;;;;;;;;13914:30;13830:2;;13782:18;-1:-1:-1;;;;;13914:30:0;;;;;13782:18;;13914:30;13623:329;13577:375;:::o;13128:441::-;-1:-1:-1;;;;;13187:16:0;;13183:75;;13220:26;;-1:-1:-1;;;13220:26:0;;9086:2:1;13220:26:0;;;9068:21:1;9125:2;9105:18;;;9098:30;-1:-1:-1;;;9144:18:1;;;9137:46;9200:18;;13220:26:0;8884:340:1;13183:75:0;13270:6;:8;;;:6;:8;;;:::i;:::-;;;;-1:-1:-1;;13304:6:0;;13291:10;13327:12;;;:8;:12;;;;;;-1:-1:-1;;;;;13327:12:0;:26;13323:83;;13370:24;;-1:-1:-1;;;13370:24:0;;15180:2:1;13370:24:0;;;15162:21:1;15219:2;15199:18;;;15192:30;-1:-1:-1;;;15238:18:1;;;15231:44;15292:18;;13370:24:0;14978:338:1;13323:83:0;13418:12;;;;:8;:12;;;;;;;;:17;;-1:-1:-1;;;;;;13418:17:0;-1:-1:-1;;;;;13418:17:0;;;;;;;;13446:10;;;:6;:10;;;;;:19;;-1:-1:-1;13446:19:0;;;;;;;;;;;;;;;13494:10;;:17;;:21;;-1:-1:-1;13494:21:0;:::i;:::-;13476:15;;;;:11;:15;;;;;;:39;;;;13533:28;;13488:2;;-1:-1:-1;;;;;13533:28:0;;;;;13476:15;;13533:28;13172:397;13128:441;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:180::-;626:6;679:2;667:9;658:7;654:23;650:32;647:52;;;695:1;692;685:12;647:52;-1:-1:-1;718:23:1;;567:180;-1:-1:-1;567:180:1:o;960:173::-;1028:20;;-1:-1:-1;;;;;1077:31:1;;1067:42;;1057:70;;1123:1;1120;1113:12;1138:254;1206:6;1214;1267:2;1255:9;1246:7;1242:23;1238:32;1235:52;;;1283:1;1280;1273:12;1235:52;1306:29;1325:9;1306:29;:::i;:::-;1296:39;1382:2;1367:18;;;;1354:32;;-1:-1:-1;;;1138:254:1:o;1771:127::-;1832:10;1827:3;1823:20;1820:1;1813:31;1863:4;1860:1;1853:15;1887:4;1884:1;1877:15;1903:719;1946:5;1999:3;1992:4;1984:6;1980:17;1976:27;1966:55;;2017:1;2014;2007:12;1966:55;2053:6;2040:20;2079:18;2116:2;2112;2109:10;2106:36;;;2122:18;;:::i;:::-;2197:2;2191:9;2165:2;2251:13;;-1:-1:-1;;2247:22:1;;;2271:2;2243:31;2239:40;2227:53;;;2295:18;;;2315:22;;;2292:46;2289:72;;;2341:18;;:::i;:::-;2381:10;2377:2;2370:22;2416:2;2408:6;2401:18;2462:3;2455:4;2450:2;2442:6;2438:15;2434:26;2431:35;2428:55;;;2479:1;2476;2469:12;2428:55;2543:2;2536:4;2528:6;2524:17;2517:4;2509:6;2505:17;2492:54;2590:1;2583:4;2578:2;2570:6;2566:15;2562:26;2555:37;2610:6;2601:15;;;;;;1903:719;;;;:::o;2627:322::-;2696:6;2749:2;2737:9;2728:7;2724:23;2720:32;2717:52;;;2765:1;2762;2755:12;2717:52;2805:9;2792:23;2838:18;2830:6;2827:30;2824:50;;;2870:1;2867;2860:12;2824:50;2893;2935:7;2926:6;2915:9;2911:22;2893:50;:::i;:::-;2883:60;2627:322;-1:-1:-1;;;;2627:322:1:o;2954:328::-;3031:6;3039;3047;3100:2;3088:9;3079:7;3075:23;3071:32;3068:52;;;3116:1;3113;3106:12;3068:52;3139:29;3158:9;3139:29;:::i;:::-;3129:39;;3187:38;3221:2;3210:9;3206:18;3187:38;:::i;:::-;3177:48;;3272:2;3261:9;3257:18;3244:32;3234:42;;2954:328;;;;;:::o;3287:543::-;3375:6;3383;3436:2;3424:9;3415:7;3411:23;3407:32;3404:52;;;3452:1;3449;3442:12;3404:52;3492:9;3479:23;3521:18;3562:2;3554:6;3551:14;3548:34;;;3578:1;3575;3568:12;3548:34;3601:50;3643:7;3634:6;3623:9;3619:22;3601:50;:::i;:::-;3591:60;;3704:2;3693:9;3689:18;3676:32;3660:48;;3733:2;3723:8;3720:16;3717:36;;;3749:1;3746;3739:12;3717:36;;3772:52;3816:7;3805:8;3794:9;3790:24;3772:52;:::i;:::-;3762:62;;;3287:543;;;;;:::o;4024:347::-;4089:6;4097;4150:2;4138:9;4129:7;4125:23;4121:32;4118:52;;;4166:1;4163;4156:12;4118:52;4189:29;4208:9;4189:29;:::i;:::-;4179:39;;4268:2;4257:9;4253:18;4240:32;4315:5;4308:13;4301:21;4294:5;4291:32;4281:60;;4337:1;4334;4327:12;4281:60;4360:5;4350:15;;;4024:347;;;;;:::o;4376:186::-;4435:6;4488:2;4476:9;4467:7;4463:23;4459:32;4456:52;;;4504:1;4501;4494:12;4456:52;4527:29;4546:9;4527:29;:::i;4567:808::-;4664:6;4672;4680;4688;4696;4749:3;4737:9;4728:7;4724:23;4720:33;4717:53;;;4766:1;4763;4756:12;4717:53;4789:29;4808:9;4789:29;:::i;:::-;4779:39;;4837:38;4871:2;4860:9;4856:18;4837:38;:::i;:::-;4827:48;;4922:2;4911:9;4907:18;4894:32;4884:42;;4977:2;4966:9;4962:18;4949:32;5000:18;5041:2;5033:6;5030:14;5027:34;;;5057:1;5054;5047:12;5027:34;5095:6;5084:9;5080:22;5070:32;;5140:7;5133:4;5129:2;5125:13;5121:27;5111:55;;5162:1;5159;5152:12;5111:55;5202:2;5189:16;5228:2;5220:6;5217:14;5214:34;;;5244:1;5241;5234:12;5214:34;5289:7;5284:2;5275:6;5271:2;5267:15;5263:24;5260:37;5257:57;;;5310:1;5307;5300:12;5257:57;4567:808;;;;-1:-1:-1;4567:808:1;;-1:-1:-1;5341:2:1;5333:11;;5363:6;4567:808;-1:-1:-1;;;4567:808:1:o;5380:260::-;5448:6;5456;5509:2;5497:9;5488:7;5484:23;5480:32;5477:52;;;5525:1;5522;5515:12;5477:52;5548:29;5567:9;5548:29;:::i;:::-;5538:39;;5596:38;5630:2;5619:9;5615:18;5596:38;:::i;:::-;5586:48;;5380:260;;;;;:::o;5645:380::-;5724:1;5720:12;;;;5767;;;5788:61;;5842:4;5834:6;5830:17;5820:27;;5788:61;5895:2;5887:6;5884:14;5864:18;5861:38;5858:161;;5941:10;5936:3;5932:20;5929:1;5922:31;5976:4;5973:1;5966:15;6004:4;6001:1;5994:15;5858:161;;5645:380;;;:::o;6030:336::-;6232:2;6214:21;;;6271:2;6251:18;;;6244:30;-1:-1:-1;;;6305:2:1;6290:18;;6283:42;6357:2;6342:18;;6030:336::o;6497:518::-;6599:2;6594:3;6591:11;6588:421;;;6635:5;6632:1;6625:16;6679:4;6676:1;6666:18;6749:2;6737:10;6733:19;6730:1;6726:27;6720:4;6716:38;6785:4;6773:10;6770:20;6767:47;;;-1:-1:-1;6808:4:1;6767:47;6863:2;6858:3;6854:12;6851:1;6847:20;6841:4;6837:31;6827:41;;6918:81;6936:2;6929:5;6926:13;6918:81;;;6995:1;6981:16;;6962:1;6951:13;6918:81;;7191:1345;7317:3;7311:10;7344:18;7336:6;7333:30;7330:56;;;7366:18;;:::i;:::-;7395:97;7485:6;7445:38;7477:4;7471:11;7445:38;:::i;:::-;7439:4;7395:97;:::i;:::-;7547:4;;7604:2;7593:14;;7621:1;7616:663;;;;8323:1;8340:6;8337:89;;;-1:-1:-1;8392:19:1;;;8386:26;8337:89;-1:-1:-1;;7148:1:1;7144:11;;;7140:24;7136:29;7126:40;7172:1;7168:11;;;7123:57;8439:81;;7586:944;;7616:663;6444:1;6437:14;;;6481:4;6468:18;;-1:-1:-1;;7652:20:1;;;7770:236;7784:7;7781:1;7778:14;7770:236;;;7873:19;;;7867:26;7852:42;;7965:27;;;;7933:1;7921:14;;;;7800:19;;7770:236;;;7774:3;8034:6;8025:7;8022:19;8019:201;;;8095:19;;;8089:26;-1:-1:-1;;8178:1:1;8174:14;;;8190:3;8170:24;8166:37;8162:42;8147:58;8132:74;;8019:201;;;8266:1;8257:6;8254:1;8250:14;8246:22;8240:4;8233:36;7586:944;;;;;7191:1345;;:::o;9229:127::-;9290:10;9285:3;9281:20;9278:1;9271:31;9321:4;9318:1;9311:15;9345:4;9342:1;9335:15;9361:128;9428:9;;;9449:11;;;9446:37;;;9463:18;;:::i;9494:125::-;9559:9;;;9580:10;;;9577:36;;;9593:18;;:::i;9624:127::-;9685:10;9680:3;9676:20;9673:1;9666:31;9716:4;9713:1;9706:15;9740:4;9737:1;9730:15;9756:127;9817:10;9812:3;9808:20;9805:1;9798:31;9848:4;9845:1;9838:15;9872:4;9869:1;9862:15;9888:135;9927:3;9948:17;;;9945:43;;9968:18;;:::i;:::-;-1:-1:-1;10015:1:1;10004:13;;9888:135::o;10588:290::-;10657:6;10710:2;10698:9;10689:7;10685:23;10681:32;10678:52;;;10726:1;10723;10716:12;10678:52;10752:16;;-1:-1:-1;;;;;;10797:32:1;;10787:43;;10777:71;;10844:1;10841;10834:12;11564:662;-1:-1:-1;;;;;11843:15:1;;;11825:34;;11895:15;;11890:2;11875:18;;11868:43;11942:2;11927:18;;11920:34;;;11990:3;11985:2;11970:18;;11963:31;;;12010:19;;12003:35;;;11768:4;12031:6;12081;11805:3;12060:19;;12047:49;12146:1;12140:3;12131:6;12120:9;12116:22;12112:32;12105:43;12216:3;12209:2;12205:7;12200:2;12192:6;12188:15;12184:29;12173:9;12169:45;12165:55;12157:63;;11564:662;;;;;;;;:::o;12573:168::-;12646:9;;;12677;;12694:15;;;12688:22;;12674:37;12664:71;;12715:18;;:::i;12746:127::-;12807:10;12802:3;12798:20;12795:1;12788:31;12838:4;12835:1;12828:15;12862:4;12859:1;12852:15;12878:120;12918:1;12944;12934:35;;12949:18;;:::i;:::-;-1:-1:-1;12983:9:1;;12878:120::o;13343:416::-;13432:1;13469:5;13432:1;13483:270;13504:7;13494:8;13491:21;13483:270;;;13563:4;13559:1;13555:6;13551:17;13545:4;13542:27;13539:53;;;13572:18;;:::i;:::-;13622:7;13612:8;13608:22;13605:55;;;13642:16;;;;13605:55;13721:22;;;;13681:15;;;;13483:270;;;13487:3;13343:416;;;;;:::o;13764:806::-;13813:5;13843:8;13833:80;;-1:-1:-1;13884:1:1;13898:5;;13833:80;13932:4;13922:76;;-1:-1:-1;13969:1:1;13983:5;;13922:76;14014:4;14032:1;14027:59;;;;14100:1;14095:130;;;;14007:218;;14027:59;14057:1;14048:10;;14071:5;;;14095:130;14132:3;14122:8;14119:17;14116:43;;;14139:18;;:::i;:::-;-1:-1:-1;;14195:1:1;14181:16;;14210:5;;14007:218;;14309:2;14299:8;14296:16;14290:3;14284:4;14281:13;14277:36;14271:2;14261:8;14258:16;14253:2;14247:4;14244:12;14240:35;14237:77;14234:159;;;-1:-1:-1;14346:19:1;;;14378:5;;14234:159;14425:34;14450:8;14444:4;14425:34;:::i;:::-;14495:6;14491:1;14487:6;14483:19;14474:7;14471:32;14468:58;;;14506:18;;:::i;:::-;14544:20;;13764:806;-1:-1:-1;;;13764:806:1:o;14575:140::-;14633:5;14662:47;14703:4;14693:8;14689:19;14683:4;14662:47;:::i;14720:112::-;14752:1;14778;14768:35;;14783:18;;:::i;:::-;-1:-1:-1;14817:9:1;;14720:112::o;14837:136::-;14876:3;14904:5;14894:39;;14913:18;;:::i;:::-;-1:-1:-1;;;14949:18:1;;14837:136::o

Swarm Source

ipfs://aacdf5eeea886351e3a7975786e56cb0d7db55a33d9a82f5acece86cfdcbe0c8
Loading...
Loading
[ 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.