MATIC Price: $0.360839 (-20.24%)
Gas: 167 GWei
 

Overview

Max Total Supply

636,245.1 P808

Holders

229

Market

Price

$0.00 @ 0.000000 MATIC

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 8 Decimals)

Balance
1 P808

Value
$0.00
0x802b65b5d9016621e66003aed0b16615093f328b
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
P808

Compiler Version
v0.8.2+commit.661d1103

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2022-03-04
*/

/**
New808token ERC20 contract
Name          : New808token
Symbol        : P808
Decimals      : 8
Blockchain    : Polygon
Owner Account : 0x9BDD969B35b0BA80014A9Ba771a3842883Eac1bA
(c) by Didar Metu  2022. MIT Licence.
*/

pragma solidity ^0.8.0;

interface IERC721Receiver {

    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

contract ERC721Holder is IERC721Receiver {
    function onERC721Received(
        address,
        address,
        uint256,
        bytes memory
    ) public virtual override returns (bytes4) {
        return this.onERC721Received.selector;
    }
}

interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

interface IERC721 is IERC165 {
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
    function balanceOf(address owner) external view returns (uint256 balance);
    function ownerOf(uint256 tokenId) external view returns (address owner);
    function safeTransferFrom(address from, address to, uint256 tokenId) external;
    function transferFrom(address from, address to, uint256 tokenId) external;
    function approve(address to, uint256 tokenId) external;
    function getApproved(uint256 tokenId) external view returns (address operator);
    function setApprovalForAll(address operator, bool _approved) external;
    function isApprovedForAll(address owner, address operator) external view returns (bool);
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;
}

abstract contract ERC165 is IERC165 {
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

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

    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

interface IAccessControl {

    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);
    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);
    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);
    function hasRole(bytes32 role, address account) external view returns (bool);
    function getRoleAdmin(bytes32 role) external view returns (bytes32);
    function grantRole(bytes32 role, address account) external;
    function revokeRole(bytes32 role, address account) external;
    function renounceRole(bytes32 role, address account) external;
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

abstract contract AccessControl is Context, IAccessControl, ERC165 {
    struct RoleData {
        mapping(address => bool) members;
        bytes32 adminRole;
    }
    mapping(bytes32 => RoleData) private _roles;
    bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;
    modifier onlyRole(bytes32 role) {
        _checkRole(role, _msgSender());
        _;
    }
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);
    }
    function hasRole(bytes32 role, address account) public view override returns (bool) {
        return _roles[role].members[account];
    }
    function _checkRole(bytes32 role, address account) internal view {
        if (!hasRole(role, account)) {
            revert(
                string(
                    abi.encodePacked(
                        "AccessControl: account ",
                        Strings.toHexString(uint160(account), 20),
                        " is missing role ",
                        Strings.toHexString(uint256(role), 32)
                    )
                )
            );
        }
    }
    function getRoleAdmin(bytes32 role) public view override returns (bytes32) {
        return _roles[role].adminRole;
    }
    function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {
        _grantRole(role, account);
    }
    function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {
        _revokeRole(role, account);
    }
    function renounceRole(bytes32 role, address account) public virtual override {
        require(account == _msgSender(), "AccessControl: can only renounce roles for self");
        _revokeRole(role, account);
    }
    function _setupRole(bytes32 role, address account) internal virtual {
        _grantRole(role, account);
    }
    function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
        bytes32 previousAdminRole = getRoleAdmin(role);
        _roles[role].adminRole = adminRole;
        emit RoleAdminChanged(role, previousAdminRole, adminRole);
    }
    function _grantRole(bytes32 role, address account) internal virtual {
        if (!hasRole(role, account)) {
            _roles[role].members[account] = true;
            emit RoleGranted(role, account, _msgSender());
        }
    }
    function _revokeRole(bytes32 role, address account) internal virtual {
        if (hasRole(role, account)) {
            _roles[role].members[account] = false;
            emit RoleRevoked(role, account, _msgSender());
        }
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

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;
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }
    function name() public view virtual override returns (string memory) {
        return _name;
    }
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
    function decimals() public view virtual override returns (uint8) {
        return 8;
    }
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
    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;
    }
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }
    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;
    }
    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);
    }
    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);
    }
    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);
    }

    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);
    }
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

// contract-P808
pragma solidity ^0.8.2;
contract P808 is ERC20, AccessControl, ERC721Holder {
    bytes32 public constant CONTRACT_ADMIN_ROLE = keccak256("CONTRACT_ADMIN_ROLE");
    address public owner;
    bool public paused = false;
    uint256 public maxSupply = 21000000 * 10 ** 8;
    address public collectionAddressC1;
    address public collectionAddressC2;
    address public collectionAddressC3;

    uint256 public numberOfBlocksPerRewardUnitC1;
    uint256 public numberOfBlocksPerRewardUnitC2;
    uint256 public numberOfBlocksPerRewardUnitC3;

    uint256 public coinAmountPerRewardUnitC1;
    uint256 public coinAmountPerRewardUnitC2;
    uint256 public coinAmountPerRewardUnitC3;

    uint256 public amountOfStakersC1;
    uint256 public amountOfStakersC2;
    uint256 public amountOfStakersC3;

    uint256 public tokensStakedC1;
    uint256 public tokensStakedC2;
    uint256 public tokensStakedC3;

    uint256 public stakingStartBlockC1;
    uint256 public stakingStartBlockC2;
    uint256 public stakingStartBlockC3;

    struct StakeInfoC1 {
        uint256 stakedAtBlock;
        uint256 lastHarvestBlock;
        bool currentlyStaked;
    }
    struct StakeInfoC2 {
        uint256 stakedAtBlock;
        uint256 lastHarvestBlock;
        bool currentlyStaked;
    }
    struct StakeInfoC3 {
        uint256 stakedAtBlock;
        uint256 lastHarvestBlock;
        bool currentlyStaked;
    }
    mapping (address => mapping(uint256 => StakeInfoC1)) public stakeLogC1;
    mapping (address => mapping(uint256 => StakeInfoC2)) public stakeLogC2;
    mapping (address => mapping(uint256 => StakeInfoC3)) public stakeLogC3;

    mapping (address => uint256) public tokensStakedByUserC1;
    mapping (address => uint256) public tokensStakedByUserC2;
    mapping (address => uint256) public tokensStakedByUserC3;

    mapping (address => uint256[]) public stakePortfolioByUserC1;
    mapping (address => uint256[]) public stakePortfolioByUserC2;
    mapping (address => uint256[]) public stakePortfolioByUserC3;

    mapping(uint256 => uint256) public indexOfTokenIdInStakePortfolioC1;
    mapping(uint256 => uint256) public indexOfTokenIdInStakePortfolioC2;
    mapping(uint256 => uint256) public indexOfTokenIdInStakePortfolioC3;

    event RewardsHarvestedC1 (address owner, uint256 amount);
    event RewardsHarvestedC2 (address owner, uint256 amount);
    event RewardsHarvestedC3 (address owner, uint256 amount);

    event NFTStakedC1 (address owner, uint256 tokenId);
    event NFTStakedC2 (address owner, uint256 tokenId);
    event NFTStakedC3 (address owner, uint256 tokenId);

    event NFTUnstakedC1 (address owner, uint256 tokenId);
    event NFTUnstakedC2 (address owner, uint256 tokenId);
    event NFTUnstakedC3 (address owner, uint256 tokenId);

    constructor() ERC20("New808token", "P808")AccessControl(){
        owner = 0x9BDD969B35b0BA80014A9Ba771a3842883Eac1bA;
        collectionAddressC1 = 0x0000000000000000000000000000000000000000;
        collectionAddressC2 = 0x0000000000000000000000000000000000000000;
        collectionAddressC3 = 0x0000000000000000000000000000000000000000;
        _mint(owner, 1000000 * 10 ** 8);
        _setupRole(DEFAULT_ADMIN_ROLE, owner);
        _setupRole(CONTRACT_ADMIN_ROLE, owner);
        stakingStartBlockC1 = block.number;
        stakingStartBlockC2 = block.number;
        stakingStartBlockC3 = block.number;
        coinAmountPerRewardUnitC1 = 5 * 10 ** 8;
        coinAmountPerRewardUnitC2 = 5 * 10 ** 8;
        coinAmountPerRewardUnitC3 = 5 * 10 ** 8;
        numberOfBlocksPerRewardUnitC1 = 24240; //808 minutes
        numberOfBlocksPerRewardUnitC2 = 24240;
        numberOfBlocksPerRewardUnitC3 = 24240;
    }

    function stakedNFTSByUserC1(address owner) external view returns (uint256[] memory){
        return stakePortfolioByUserC1[owner];
    }

    function stakedNFTSByUserC2(address owner) external view returns (uint256[] memory){
        return stakePortfolioByUserC2[owner];
    }

    function stakedNFTSByUserC3(address owner) external view returns (uint256[] memory){
        return stakePortfolioByUserC3[owner];
    }

    function burn(uint256 amount) public returns (bool success) {
        super._burn(_msgSender(), amount);
        return true;
    }

    function pendingRewardsC1(address owner, uint256 tokenId) public view returns (uint256){
        StakeInfoC1 memory infoC1 = stakeLogC1[owner][tokenId];

        if(infoC1.lastHarvestBlock < stakingStartBlockC1 || infoC1.currentlyStaked == false) {
            return 0;
        }
        uint256 blocksPassedSinceLastHarvest = block.number - infoC1.lastHarvestBlock;
        if (blocksPassedSinceLastHarvest < numberOfBlocksPerRewardUnitC1 * 2) {
            return 0;
        }
        uint256 rewardAmount = blocksPassedSinceLastHarvest / numberOfBlocksPerRewardUnitC1 - 1;
        return rewardAmount * coinAmountPerRewardUnitC1;
    }
    function pendingRewardsC2(address owner, uint256 tokenId) public view returns (uint256){
        StakeInfoC2 memory infoC2 = stakeLogC2[owner][tokenId];

        if(infoC2.lastHarvestBlock < stakingStartBlockC2 || infoC2.currentlyStaked == false) {
            return 0;
        }
        uint256 blocksPassedSinceLastHarvest = block.number - infoC2.lastHarvestBlock;
        if (blocksPassedSinceLastHarvest < numberOfBlocksPerRewardUnitC2 * 2) {
            return 0;
        }
        uint256 rewardAmount = blocksPassedSinceLastHarvest / numberOfBlocksPerRewardUnitC2 - 1;
        return rewardAmount * coinAmountPerRewardUnitC2;
    }
    function pendingRewardsC3(address owner, uint256 tokenId) public view returns (uint256){
        StakeInfoC3 memory infoC3 = stakeLogC3[owner][tokenId];

        if(infoC3.lastHarvestBlock < stakingStartBlockC3 || infoC3.currentlyStaked == false) {
            return 0;
        }
        uint256 blocksPassedSinceLastHarvest = block.number - infoC3.lastHarvestBlock;
        if (blocksPassedSinceLastHarvest < numberOfBlocksPerRewardUnitC3 * 2) {
            return 0;
        }
        uint256 rewardAmount = blocksPassedSinceLastHarvest / numberOfBlocksPerRewardUnitC3 - 1;
        return rewardAmount * coinAmountPerRewardUnitC3;
    }

    function stakeC1(uint256 tokenId) public {
        require(!paused, "The contract is paused");
        IERC721(collectionAddressC1).safeTransferFrom(_msgSender(), address(this), tokenId);
        require(IERC721(collectionAddressC1).ownerOf(tokenId) == address(this), "Error while transferring NFT");
        StakeInfoC1 storage infoC1 = stakeLogC1[_msgSender()][tokenId];
        infoC1.stakedAtBlock = block.number;
        infoC1.lastHarvestBlock = block.number;
        infoC1.currentlyStaked = true;
        if(tokensStakedByUserC1[_msgSender()] == 0){
            amountOfStakersC1 += 1;
        }
        tokensStakedByUserC1[_msgSender()] += 1;
        tokensStakedC1 += 1;
        stakePortfolioByUserC1[_msgSender()].push(tokenId);
        uint256 indexOfNewElementC1 = stakePortfolioByUserC1[_msgSender()].length - 1;
        indexOfTokenIdInStakePortfolioC1[tokenId] = indexOfNewElementC1;
        emit NFTStakedC1(_msgSender(), tokenId);
    }

    function stakeC2(uint256 tokenId) public {
        require(!paused, "The contract is paused");
        IERC721(collectionAddressC2).safeTransferFrom(_msgSender(), address(this), tokenId);
        require(IERC721(collectionAddressC2).ownerOf(tokenId) == address(this), "Error while transferring NFT");
        StakeInfoC2 storage infoC2 = stakeLogC2[_msgSender()][tokenId];
        infoC2.stakedAtBlock = block.number;
        infoC2.lastHarvestBlock = block.number;
        infoC2.currentlyStaked = true;
        if(tokensStakedByUserC2[_msgSender()] == 0){
            amountOfStakersC2 += 1;
        }
        tokensStakedByUserC2[_msgSender()] += 1;
        tokensStakedC2 += 1;
        stakePortfolioByUserC2[_msgSender()].push(tokenId);
        uint256 indexOfNewElementC2 = stakePortfolioByUserC2[_msgSender()].length - 1;
        indexOfTokenIdInStakePortfolioC2[tokenId] = indexOfNewElementC2;
        emit NFTStakedC2(_msgSender(), tokenId);
    }

    function stakeC3(uint256 tokenId) public {
        require(!paused, "The contract is paused");
        IERC721(collectionAddressC3).safeTransferFrom(_msgSender(), address(this), tokenId);
        require(IERC721(collectionAddressC3).ownerOf(tokenId) == address(this), "Error while transferring NFT");
        StakeInfoC3 storage infoC3 = stakeLogC3[_msgSender()][tokenId];
        infoC3.stakedAtBlock = block.number;
        infoC3.lastHarvestBlock = block.number;
        infoC3.currentlyStaked = true;
        if(tokensStakedByUserC3[_msgSender()] == 0){
            amountOfStakersC3 += 1;
        }
        tokensStakedByUserC3[_msgSender()] += 1;
        tokensStakedC3 += 1;
        stakePortfolioByUserC3[_msgSender()].push(tokenId);
        uint256 indexOfNewElementC3 = stakePortfolioByUserC3[_msgSender()].length - 1;
        indexOfTokenIdInStakePortfolioC3[tokenId] = indexOfNewElementC3;
        emit NFTStakedC3(_msgSender(), tokenId);
    }

    function stakeBatchC1(uint256[] memory tokenIds) external {
        for(uint currentId = 0; currentId < tokenIds.length; currentId++) {
            if(tokenIds[currentId] == 0) {
                continue;
            }
            stakeC1(tokenIds[currentId]);
        }
    }

    function stakeBatchC2(uint256[] memory tokenIds) external {
        for(uint currentId = 0; currentId < tokenIds.length; currentId++) {
            if(tokenIds[currentId] == 0) {
                continue;
            }
            stakeC2(tokenIds[currentId]);
        }
    }

    function stakeBatchC3(uint256[] memory tokenIds) external {
        for(uint currentId = 0; currentId < tokenIds.length; currentId++) {
            if(tokenIds[currentId] == 0) {
                continue;
            }
            stakeC3(tokenIds[currentId]);
        }
    }

    function harvestC1(uint256 tokenId) public {
        require(!paused, "The contract is paused");
        StakeInfoC1 storage infoC1 = stakeLogC1[_msgSender()][tokenId];
        uint256 rewardAmountInP808 = pendingRewardsC1(_msgSender(), tokenId);
        uint256 supply = totalSupply();
        require(rewardAmountInP808 > 0, "Reward amount is zero" );
        if(rewardAmountInP808 > 0) {
            require(supply + rewardAmountInP808 <= maxSupply, "Maximum Supply limit exceeded");
            infoC1.lastHarvestBlock = block.number;
            _mint(_msgSender(), rewardAmountInP808);
            emit RewardsHarvestedC1(_msgSender(), rewardAmountInP808);
        }
    }
    function harvestC2(uint256 tokenId) public {
        require(!paused, "The contract is paused");
        StakeInfoC2 storage infoC2 = stakeLogC2[_msgSender()][tokenId];
        uint256 rewardAmountInP808 = pendingRewardsC2(_msgSender(), tokenId);
        uint256 supply = totalSupply();
        require(rewardAmountInP808 > 0, "Reward amount is zero");
        if(rewardAmountInP808 > 0) {
            require(supply + rewardAmountInP808 <= maxSupply, "Maximum Supply limit exceeded");
            infoC2.lastHarvestBlock = block.number;
            _mint(_msgSender(), rewardAmountInP808);
            emit RewardsHarvestedC2(_msgSender(), rewardAmountInP808);
        }
    }
    function harvestC3(uint256 tokenId) public {
        require(!paused, "The contract is paused");
        StakeInfoC3 storage infoC3 = stakeLogC3[_msgSender()][tokenId];
        uint256 rewardAmountInP808 = pendingRewardsC3(_msgSender(), tokenId);
        uint256 supply = totalSupply();
        require(rewardAmountInP808 > 0, "Reward amount is zero" );
        if(rewardAmountInP808 > 0) {
            require(supply + rewardAmountInP808 <= maxSupply, "Maximum Supply limit exceeded");
            infoC3.lastHarvestBlock = block.number;
            _mint(_msgSender(), rewardAmountInP808);
            emit RewardsHarvestedC3(_msgSender(), rewardAmountInP808);
        }
    }

    function harvestBatchC1(address user) external{
        uint256[] memory tokenIds = stakePortfolioByUserC1[user];

        for(uint currentId = 0; currentId < tokenIds.length; currentId++) {
            if(tokenIds[currentId] == 0) {
                continue;
            }
            harvestC1(tokenIds[currentId]);
        }
    }
    function harvestBatchC2(address user) external{
        uint256[] memory tokenIds = stakePortfolioByUserC2[user];

        for(uint currentId = 0; currentId < tokenIds.length; currentId++) {
            if(tokenIds[currentId] == 0) {
                continue;
            }
            harvestC2(tokenIds[currentId]);
        }
    }
    function harvestBatchC3(address user) external{
        uint256[] memory tokenIds = stakePortfolioByUserC3[user];

        for(uint currentId = 0; currentId < tokenIds.length; currentId++) {
            if(tokenIds[currentId] == 0) {
                continue;
            }
            harvestC3(tokenIds[currentId]);
        }
    }

    function unstakeC1(uint256 tokenId) public {
        if(pendingRewardsC1(_msgSender(), tokenId) > 0){
            harvestC1(tokenId);
        }
        StakeInfoC1 storage infoC1 = stakeLogC1[_msgSender()][tokenId];
        infoC1.currentlyStaked = false;
        IERC721(collectionAddressC1).safeTransferFrom(address(this), _msgSender(), tokenId);
        require(IERC721(collectionAddressC1).ownerOf(tokenId) == _msgSender(), "Error while transferring NFT");
        if(tokensStakedByUserC1[_msgSender()] == 1){
            amountOfStakersC1 -= 1;
        }
        tokensStakedByUserC1[_msgSender()] -= 1;
        tokensStakedC1 -= 1;
        stakePortfolioByUserC1[_msgSender()][indexOfTokenIdInStakePortfolioC1[tokenId]] = 0;
        emit NFTUnstakedC1(_msgSender(), tokenId);
    }

    function unstakeC2(uint256 tokenId) public {
        if(pendingRewardsC2(_msgSender(), tokenId) > 0){
            harvestC2(tokenId);
        }
        StakeInfoC2 storage infoC2 = stakeLogC2[_msgSender()][tokenId];
        infoC2.currentlyStaked = false;
        IERC721(collectionAddressC2).safeTransferFrom(address(this), _msgSender(), tokenId);
        require(IERC721(collectionAddressC2).ownerOf(tokenId) == _msgSender(), "Error while transferring NFT");
        if(tokensStakedByUserC2[_msgSender()] == 1){
            amountOfStakersC2 -= 1;
        }
        tokensStakedByUserC2[_msgSender()] -= 1;
        tokensStakedC2 -= 1;
        stakePortfolioByUserC2[_msgSender()][indexOfTokenIdInStakePortfolioC2[tokenId]] = 0;
        emit NFTUnstakedC2(_msgSender(), tokenId);
    }

    function unstakeC3(uint256 tokenId) public {
        if(pendingRewardsC3(_msgSender(), tokenId) > 0){
            harvestC3(tokenId);
        }
        StakeInfoC3 storage infoC3 = stakeLogC3[_msgSender()][tokenId];
        infoC3.currentlyStaked = false ;
        IERC721(collectionAddressC3).safeTransferFrom(address(this), _msgSender(), tokenId);
        require(IERC721(collectionAddressC3).ownerOf(tokenId) == _msgSender(), "Error while transferring NFT");
        if(tokensStakedByUserC3[_msgSender()] == 1){
            amountOfStakersC3 -= 1;
        }
        tokensStakedByUserC3[_msgSender()] -= 1;
        tokensStakedC3 -= 1;
        stakePortfolioByUserC3[_msgSender()][indexOfTokenIdInStakePortfolioC3[tokenId]] = 0;
        emit NFTUnstakedC3(_msgSender(), tokenId);
    }

    function unstakeBatchC1(uint256[] memory tokenIds) external {
        for(uint currentId = 0; currentId < tokenIds.length; currentId++) {
            if(tokenIds[currentId] == 0) {
                continue;
            }
            unstakeC1(tokenIds[currentId]);
        }
    }
    function unstakeBatchC2(uint256[] memory tokenIds) external {
        for(uint currentId = 0; currentId < tokenIds.length; currentId++) {
            if(tokenIds[currentId] == 0) {
                continue;
            }
            unstakeC2(tokenIds[currentId]);
        }
    }
    function unstakeBatchC3(uint256[] memory tokenIds) external {
        for(uint currentId = 0; currentId < tokenIds.length; currentId++) {
            if(tokenIds[currentId] == 0) {
                continue;
            }
            unstakeC3(tokenIds[currentId]);
        }
    }

    function setNumberOfBlocksPerRewardUnitC1(uint256 numberOfBlocksC1) external onlyRole(CONTRACT_ADMIN_ROLE){
        numberOfBlocksPerRewardUnitC1 = numberOfBlocksC1;
    }
    function setNumberOfBlocksPerRewardUnitC2(uint256 numberOfBlocksC2) external onlyRole(CONTRACT_ADMIN_ROLE){
        numberOfBlocksPerRewardUnitC2 = numberOfBlocksC2;
    }
    function setNumberOfBlocksPerRewardUnitC3(uint256 numberOfBlocksC3) external onlyRole(CONTRACT_ADMIN_ROLE){
        numberOfBlocksPerRewardUnitC3 = numberOfBlocksC3;
    }

    function setCoinAmountPerRewardUnitC1(uint256 coinAmountC1) external onlyRole(CONTRACT_ADMIN_ROLE){
        coinAmountPerRewardUnitC1 = coinAmountC1;
    }
    function setCoinAmountPerRewardUnitC2(uint256 coinAmountC2) external onlyRole(CONTRACT_ADMIN_ROLE){
        coinAmountPerRewardUnitC2 = coinAmountC2;
    }
    function setCoinAmountPerRewardUnitC3(uint256 coinAmountC3) external onlyRole(CONTRACT_ADMIN_ROLE){
        coinAmountPerRewardUnitC3 = coinAmountC3;
    }

    function setCollectionAddressC1(address newAddressC1) external onlyRole(CONTRACT_ADMIN_ROLE){
        require (newAddressC1 != address(0), "Update to zero address not possible");
        collectionAddressC1 = newAddressC1;
    }

    function setCollectionAddressC2(address newAddressC2) external onlyRole(CONTRACT_ADMIN_ROLE){
        require (newAddressC2 != address(0), "Update to zero address not possible");
        collectionAddressC2 = newAddressC2;
    }

    function setCollectionAddressC3(address newAddressC3) external onlyRole(CONTRACT_ADMIN_ROLE){
        require (newAddressC3 != address(0), "Update to zero address not possible");
        collectionAddressC3 = newAddressC3;
    }
    function pause(bool _state) external onlyRole(CONTRACT_ADMIN_ROLE) {
        paused = _state;
    }
    function setStakingStartBlockC1(uint256 newStakingStartBlockC1) external onlyRole(CONTRACT_ADMIN_ROLE){
        stakingStartBlockC1 = newStakingStartBlockC1;
    }
    function setStakingStartBlockC2(uint256 newStakingStartBlockC2) external onlyRole(CONTRACT_ADMIN_ROLE){
        stakingStartBlockC2 = newStakingStartBlockC2;
    }
    function setStakingStartBlockC3(uint256 newStakingStartBlockC3) external onlyRole(CONTRACT_ADMIN_ROLE){
        stakingStartBlockC3 = newStakingStartBlockC3;
    }
}

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":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"NFTStakedC1","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"NFTStakedC2","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"NFTStakedC3","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"NFTUnstakedC1","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"NFTUnstakedC2","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"NFTUnstakedC3","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardsHarvestedC1","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardsHarvestedC2","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardsHarvestedC3","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"CONTRACT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"amountOfStakersC1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"amountOfStakersC2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"amountOfStakersC3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"coinAmountPerRewardUnitC1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"coinAmountPerRewardUnitC2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"coinAmountPerRewardUnitC3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"collectionAddressC1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"collectionAddressC2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"collectionAddressC3","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"harvestBatchC1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"harvestBatchC2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"harvestBatchC3","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"harvestC1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"harvestC2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"harvestC3","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"indexOfTokenIdInStakePortfolioC1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"indexOfTokenIdInStakePortfolioC2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"indexOfTokenIdInStakePortfolioC3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","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":"numberOfBlocksPerRewardUnitC1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numberOfBlocksPerRewardUnitC2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numberOfBlocksPerRewardUnitC3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"pendingRewardsC1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"pendingRewardsC2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"pendingRewardsC3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"coinAmountC1","type":"uint256"}],"name":"setCoinAmountPerRewardUnitC1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"coinAmountC2","type":"uint256"}],"name":"setCoinAmountPerRewardUnitC2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"coinAmountC3","type":"uint256"}],"name":"setCoinAmountPerRewardUnitC3","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddressC1","type":"address"}],"name":"setCollectionAddressC1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddressC2","type":"address"}],"name":"setCollectionAddressC2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddressC3","type":"address"}],"name":"setCollectionAddressC3","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfBlocksC1","type":"uint256"}],"name":"setNumberOfBlocksPerRewardUnitC1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfBlocksC2","type":"uint256"}],"name":"setNumberOfBlocksPerRewardUnitC2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfBlocksC3","type":"uint256"}],"name":"setNumberOfBlocksPerRewardUnitC3","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newStakingStartBlockC1","type":"uint256"}],"name":"setStakingStartBlockC1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newStakingStartBlockC2","type":"uint256"}],"name":"setStakingStartBlockC2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newStakingStartBlockC3","type":"uint256"}],"name":"setStakingStartBlockC3","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"stakeBatchC1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"stakeBatchC2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"stakeBatchC3","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"stakeC1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"stakeC2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"stakeC3","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakeLogC1","outputs":[{"internalType":"uint256","name":"stakedAtBlock","type":"uint256"},{"internalType":"uint256","name":"lastHarvestBlock","type":"uint256"},{"internalType":"bool","name":"currentlyStaked","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakeLogC2","outputs":[{"internalType":"uint256","name":"stakedAtBlock","type":"uint256"},{"internalType":"uint256","name":"lastHarvestBlock","type":"uint256"},{"internalType":"bool","name":"currentlyStaked","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakeLogC3","outputs":[{"internalType":"uint256","name":"stakedAtBlock","type":"uint256"},{"internalType":"uint256","name":"lastHarvestBlock","type":"uint256"},{"internalType":"bool","name":"currentlyStaked","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakePortfolioByUserC1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakePortfolioByUserC2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakePortfolioByUserC3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"stakedNFTSByUserC1","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"stakedNFTSByUserC2","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"stakedNFTSByUserC3","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingStartBlockC1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingStartBlockC2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingStartBlockC3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokensStakedByUserC1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokensStakedByUserC2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokensStakedByUserC3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensStakedC1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensStakedC2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensStakedC3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"unstakeBatchC1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"unstakeBatchC2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"unstakeBatchC3","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"unstakeC1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"unstakeC2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"unstakeC3","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526006805460ff60a01b19169055660775f05a0740006007553480156200002957600080fd5b50604080518082018252600b81526a2732bb9c181c3a37b5b2b760a91b6020808301918252835180850190945260048452630a07060760e31b90840152815191929162000079916003916200030c565b5080516200008f9060049060208401906200030c565b5050600680546001600160a01b0319908116739bdd969b35b0ba80014a9ba771a3842883eac1ba179182905560088054821690556009805482169055600a80549091169055620000f091506001600160a01b0316655af3107a400062000179565b6006546200010a906000906001600160a01b031662000262565b60065462000143907f2ce8d04a9c35987429af538825cd2438cc5c5bb5dc427955f84daaa3ea105016906001600160a01b031662000262565b4360178190556018819055601955631dcd6500600e819055600f819055601055615eb0600b819055600c819055600d5562000414565b6001600160a01b038216620001d45760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060026000828254620001e89190620003b2565b90915550506001600160a01b0382166000908152602081905260408120805483929062000217908490620003b2565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050565b6200025e828260008281526005602090815260408083206001600160a01b038516845290915290205460ff166200025e5760008281526005602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620002c83390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b8280546200031a90620003d7565b90600052602060002090601f0160209004810192826200033e576000855562000389565b82601f106200035957805160ff191683800117855562000389565b8280016001018555821562000389579182015b82811115620003895782518255916020019190600101906200036c565b50620003979291506200039b565b5090565b5b808211156200039757600081556001016200039c565b60008219821115620003d257634e487b7160e01b81526011600452602481fd5b500190565b600281046001821680620003ec57607f821691505b602082108114156200040e57634e487b7160e01b600052602260045260246000fd5b50919050565b613c0680620004246000396000f3fe608060405234801561001057600080fd5b50600436106104f95760003560e01c806381eba4d211610299578063c2a461dd11610167578063d9ec1734116100d9578063e8607a3411610092578063e8607a3414610c2d578063ea176bb114610c40578063eb663bf514610c53578063fb9dd19314610c5c578063fba188c114610c6f578063fca1971514610c8f576104f9565b8063d9ec173414610ba9578063dd62ed3e14610bbc578063dd9e289214610bf5578063dfd2446c14610bfe578063e29bab5b14610c07578063e80f7d8714610c1a576104f9565b8063d24d8a6b1161012b578063d24d8a6b14610b3e578063d547741f14610b47578063d5abeb0114610b5a578063d5ef2f2814610b63578063d6ec0eaa14610b76578063d707c98614610b96576104f9565b8063c2a461dd14610af3578063c503d5b914610afc578063c809fd5f14610b0f578063cc3f15c114610b22578063d1a8ba4f14610b2b576104f9565b80639cefe21e1161020b578063a6f062b3116101c4578063a6f062b314610a7e578063a9059cbb14610a87578063ae75dd4614610a9a578063b1c768cf14610aad578063b22f20d614610acd578063b64e416214610ae0576104f9565b80639cefe21e14610a2b578063a06444f914610a3e578063a09d9bf114610a47578063a217fddf14610a5a578063a25591e214610a62578063a457c2d714610a6b576104f9565b806390a1ec261161025d57806390a1ec26146109ce57806391b6be4e146109e157806391d14854146109ea57806395d89b41146109fd57806397d441bb14610a055780639b029fbe14610a18576104f9565b806381eba4d214610962578063847269a3146109755780638814c967146109955780638da5cb5b146109a85780638f88b384146109bb576104f9565b806327d5b828116103d65780634cf81fb6116103485780636864fac2116103015780636864fac2146108ba57806369a539bb146108cd57806370a082311461090a57806374622bd0146109335780637c1d36cc146109465780637fd738d11461094f576104f9565b80634cf81fb61461084e57806355f8cf8d1461086157806359b829e3146108815780635c975abb1461088a578063627011fd1461089e5780636593e897146108b1576104f9565b8063350fa92d1161039a578063350fa92d146107e657806336568abe146107f9578063395093511461080c57806341bb3ed61461081f57806342966c6814610832578063433a0cc014610845576104f9565b806327d5b8281461077e5780632f2ff15d146107915780632f9cfdd1146107a4578063313ce567146107b7578063337a516e146107c6576104f9565b8063150b7a021161046f5780631da03312116104335780631da0331214610704578063214d4de214610719578063226352981461072c57806323b872dd1461073f57806323bc1ab914610752578063248a9ca31461075b576104f9565b8063150b7a0214610662578063170b29ff1461069957806318160ddd146106d65780631b544d74146106de5780631bb937b1146106f1576104f9565b806306fdde03116104c157806306fdde03146105a7578063095ea7b3146105bc5780630f5b101b146105cf5780630fbbc62814610629578063101c9cd11461063c57806312440e741461064f576104f9565b806301ffc9a7146104fe57806302329a291461052657806302f5c24f1461053b5780630523fb6e1461054e57806305a5fd0814610579575b600080fd5b61051161050c3660046137ec565b610ca2565b60405190151581526020015b60405180910390f35b610539610534366004613790565b610cd9565b005b6105396105493660046137b0565b610d12565b600a54610561906001600160a01b031681565b6040516001600160a01b03909116815260200161051d565b6105996105873660046137b0565b60256020526000908152604090205481565b60405190815260200161051d565b6105af610f78565b60405161051d91906138f1565b6105116105ca3660046136be565b61100a565b61060c6105dd3660046136be565b601b60209081526000928352604080842090915290825290208054600182015460029092015490919060ff1683565b60408051938452602084019290925215159082015260600161051d565b6105396106373660046137b0565b611020565b61053961064a366004613552565b61103f565b61053961065d3660046137b0565b6110a1565b610680610670366004613602565b630a85bd0160e11b949350505050565b6040516001600160e01b0319909116815260200161051d565b61060c6106a73660046136be565b601a60209081526000928352604080842090915290825290208054600182015460029092015490919060ff1683565b600254610599565b6105396106ec366004613552565b6112de565b6105396106ff3660046137b0565b6113cb565b610599600080516020613bb183398151915281565b6105996107273660046136be565b6113ea565b61053961073a3660046137b0565b61141b565b61051161074d3660046135c2565b61166f565b61059960195481565b6105996107693660046137b0565b60009081526005602052604090206001015490565b61053961078c366004613552565b611719565b61053961079f3660046137c8565b61177b565b6105996107b23660046136be565b6117a1565b6040516008815260200161051d565b6107d96107d4366004613552565b61187a565b60405161051d91906138ad565b6105396107f43660046136e9565b6118e4565b6105396108073660046137c8565b61196b565b61051161081a3660046136be565b6119e5565b61053961082d3660046136e9565b611a21565b6105116108403660046137b0565b611aa4565b610599600f5481565b600854610561906001600160a01b031681565b61059961086f366004613552565b601d6020526000908152604090205481565b61059960185481565b60065461051190600160a01b900460ff1681565b6105396108ac3660046137b0565b611ab8565b61059960145481565b6105396108c83660046136e9565b611cf5565b61060c6108db3660046136be565b601c60209081526000928352604080842090915290825290208054600182015460029092015490919060ff1683565b610599610918366004613552565b6001600160a01b031660009081526020819052604090205490565b6105396109413660046137b0565b611d78565b610599600e5481565b61053961095d3660046137b0565b611d97565b6105396109703660046137b0565b611fca565b610599610983366004613552565b601e6020526000908152604090205481565b6105396109a3366004613552565b611fe9565b600654610561906001600160a01b031681565b6105396109c9366004613552565b6120d3565b600954610561906001600160a01b031681565b61059960115481565b6105116109f83660046137c8565b6121bd565b6105af6121e8565b6107d9610a13366004613552565b6121f7565b610539610a263660046137b0565b612261565b610539610a393660046137b0565b612280565b61059960155481565b610539610a553660046136e9565b61238b565b610599600081565b61059960135481565b610511610a793660046136be565b61240e565b610599600c5481565b610511610a953660046136be565b6124a7565b610539610aa83660046137b0565b6124b4565b610599610abb366004613552565b601f6020526000908152604090205481565b610599610adb3660046136be565b6124d3565b610599610aee3660046136be565b6124ef565b61059960125481565b6107d9610b0a366004613552565b6125be565b610599610b1d3660046136be565b612628565b61059960105481565b610539610b393660046137b0565b612643565b61059960165481565b610539610b553660046137c8565b612728565b61059960075481565b610599610b713660046136be565b61274e565b610599610b843660046137b0565b60236020526000908152604090205481565b610539610ba4366004613552565b61281d565b610539610bb73660046137b0565b61287f565b610599610bca36600461358a565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61059960175481565b610599600d5481565b610539610c153660046137b0565b61289e565b610539610c283660046137b0565b612acf565b610539610c3b3660046136e9565b612bb4565b610539610c4e3660046136e9565b612c37565b610599600b5481565b610539610c6a3660046137b0565b612cba565b610599610c7d3660046137b0565b60246020526000908152604090205481565b610539610c9d3660046137b0565b612cd9565b60006001600160e01b03198216637965db0b60e01b1480610cd357506301ffc9a760e01b6001600160e01b03198316145b92915050565b600080516020613bb1833981519152610cf381335b612cf8565b5060068054911515600160a01b0260ff60a01b19909216919091179055565b600654600160a01b900460ff1615610d455760405162461bcd60e51b8152600401610d3c90613924565b60405180910390fd5b6008546001600160a01b03166342842e0e3330846040518463ffffffff1660e01b8152600401610d7793929190613889565b600060405180830381600087803b158015610d9157600080fd5b505af1158015610da5573d6000803e3d6000fd5b50506008546040516331a9108f60e11b8152600481018590523093506001600160a01b039091169150636352211e9060240160206040518083038186803b158015610def57600080fd5b505afa158015610e03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e27919061356e565b6001600160a01b031614610e4d5760405162461bcd60e51b8152600401610d3c90613997565b336000818152601a6020908152604080832085845282528083204380825560018083019190915560028201805460ff19169091179055938352601d909152902054610eab57600160116000828254610ea59190613a65565b90915550505b336000908152601d60205260408120805460019290610ecb908490613a65565b92505081905550600160146000828254610ee59190613a65565b90915550503360008181526020808052604082208054600180820183558285529284200186905592825291549091610f1c91613abc565b600084815260236020526040902081905590507fa51cbc60e7bd75c33775dfb912a4cb4964d7906137dea03133b39f5f577f7023335b604080516001600160a01b039092168252602082018690520160405180910390a1505050565b606060038054610f8790613b16565b80601f0160208091040260200160405190810160405280929190818152602001828054610fb390613b16565b80156110005780601f10610fd557610100808354040283529160200191611000565b820191906000526020600020905b815481529060010190602001808311610fe357829003601f168201915b5050505050905090565b6000611017338484612d5c565b50600192915050565b600080516020613bb18339815191526110398133610cee565b50600e55565b600080516020613bb18339815191526110588133610cee565b6001600160a01b03821661107e5760405162461bcd60e51b8152600401610d3c90613954565b50600a80546001600160a01b0319166001600160a01b0392909216919091179055565b600654600160a01b900460ff16156110cb5760405162461bcd60e51b8152600401610d3c90613924565b6009546001600160a01b03166342842e0e3330846040518463ffffffff1660e01b81526004016110fd93929190613889565b600060405180830381600087803b15801561111757600080fd5b505af115801561112b573d6000803e3d6000fd5b50506009546040516331a9108f60e11b8152600481018590523093506001600160a01b039091169150636352211e9060240160206040518083038186803b15801561117557600080fd5b505afa158015611189573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ad919061356e565b6001600160a01b0316146111d35760405162461bcd60e51b8152600401610d3c90613997565b336000818152601b6020908152604080832085845282528083204380825560018083019190915560028201805460ff19169091179055938352601e9091529020546112315760016012600082825461122b9190613a65565b90915550505b336000908152601e60205260408120805460019290611251908490613a65565b9250508190555060016015600082825461126b9190613a65565b9091555050336000818152602160209081526040822080546001808201835582855292842001869055928252915490916112a491613abc565b600084815260246020526040902081905590507f5ec2265e39d526d44b521782c496015630ec0b92bed5dfa39835caec8976085c33610f52565b6001600160a01b0381166000908152602080805260408083208054825181850281018501909352808352919290919083018282801561133c57602002820191906000526020600020905b815481526020019060010190808311611328575b5050505050905060005b81518110156113c65781818151811061136f57634e487b7160e01b600052603260045260246000fd5b602002602001015160001415611384576113b4565b6113b48282815181106113a757634e487b7160e01b600052603260045260246000fd5b6020026020010151612280565b806113be81613b51565b915050611346565b505050565b600080516020613bb18339815191526113e48133610cee565b50601855565b6022602052816000526040600020818154811061140657600080fd5b90600052602060002001600091509150505481565b6000611427338361274e565b11156114365761143681612acf565b336000818152601c602090815260408083208584529091529081902060028101805460ff19169055600a549151632142170760e11b815290926001600160a01b03909216916342842e0e916114919130918790600401613889565b600060405180830381600087803b1580156114ab57600080fd5b505af11580156114bf573d6000803e3d6000fd5b505050506114ca3390565b600a546040516331a9108f60e11b8152600481018590526001600160a01b039283169290911690636352211e9060240160206040518083038186803b15801561151257600080fd5b505afa158015611526573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154a919061356e565b6001600160a01b0316146115705760405162461bcd60e51b8152600401610d3c90613997565b336000908152601f6020526040902054600114156115a15760016013600082825461159b9190613abc565b90915550505b336000908152601f602052604081208054600192906115c1908490613abc565b925050819055506001601660008282546115db9190613abc565b909155505033600090815260226020908152604080832085845260259092528220548154811061161b57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001557f4d3fd09e511b7ddffcae477ad99338d84021f67d3ea8cfe91ea66c2e25650fe9335b604080516001600160a01b039092168252602082018590520160405180910390a15050565b600061167c848484612e80565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156117015760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610d3c565b61170e8533858403612d5c565b506001949350505050565b600080516020613bb18339815191526117328133610cee565b6001600160a01b0382166117585760405162461bcd60e51b8152600401610d3c90613954565b50600980546001600160a01b0319166001600160a01b0392909216919091179055565b6000828152600560205260409020600101546117978133610cee565b6113c6838361304e565b6001600160a01b0382166000908152601b602090815260408083208484528252808320815160608101835281548152600182015493810184905260029091015460ff161515918101919091526018549091108061180057506040810151155b1561180f576000915050610cd3565b60008160200151436118219190613abc565b9050600c5460026118329190613a9d565b81101561184457600092505050610cd3565b60006001600c54836118569190613a7d565b6118609190613abc565b9050600f54816118709190613a9d565b9695505050505050565b6001600160a01b038116600090815260208080526040918290208054835181840281018401909452808452606093928301828280156118d857602002820191906000526020600020905b8154815260200190600101908083116118c4575b50505050509050919050565b60005b81518110156119675781818151811061191057634e487b7160e01b600052603260045260246000fd5b60200260200101516000141561192557611955565b61195582828151811061194857634e487b7160e01b600052603260045260246000fd5b60200260200101516110a1565b8061195f81613b51565b9150506118e7565b5050565b6001600160a01b03811633146119db5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610d3c565b61196782826130d4565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091611017918590611a1c908690613a65565b612d5c565b60005b815181101561196757818181518110611a4d57634e487b7160e01b600052603260045260246000fd5b602002602001015160001415611a6257611a92565b611a92828281518110611a8557634e487b7160e01b600052603260045260246000fd5b6020026020010151610d12565b80611a9c81613b51565b915050611a24565b6000611ab0338361313b565b506001919050565b600654600160a01b900460ff1615611ae25760405162461bcd60e51b8152600401610d3c90613924565b600a546001600160a01b03166342842e0e3330846040518463ffffffff1660e01b8152600401611b1493929190613889565b600060405180830381600087803b158015611b2e57600080fd5b505af1158015611b42573d6000803e3d6000fd5b5050600a546040516331a9108f60e11b8152600481018590523093506001600160a01b039091169150636352211e9060240160206040518083038186803b158015611b8c57600080fd5b505afa158015611ba0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc4919061356e565b6001600160a01b031614611bea5760405162461bcd60e51b8152600401610d3c90613997565b336000818152601c6020908152604080832085845282528083204380825560018083019190915560028201805460ff19169091179055938352601f909152902054611c4857600160136000828254611c429190613a65565b90915550505b336000908152601f60205260408120805460019290611c68908490613a65565b92505081905550600160166000828254611c829190613a65565b909155505033600081815260226020908152604082208054600180820183558285529284200186905592825291549091611cbb91613abc565b600084815260256020526040902081905590507f3343f9235219deae3ff15cbb32f3eb3d0de03566c60be0f745c71b750565c35533610f52565b60005b815181101561196757818181518110611d2157634e487b7160e01b600052603260045260246000fd5b602002602001015160001415611d3657611d66565b611d66828281518110611d5957634e487b7160e01b600052603260045260246000fd5b6020026020010151611ab8565b80611d7081613b51565b915050611cf8565b600080516020613bb1833981519152611d918133610cee565b50600c55565b6000611da333836117a1565b1115611db257611db281612643565b336000818152601b602090815260408083208584529091529081902060028101805460ff191690556009549151632142170760e11b815290926001600160a01b03909216916342842e0e91611e0d9130918790600401613889565b600060405180830381600087803b158015611e2757600080fd5b505af1158015611e3b573d6000803e3d6000fd5b50505050611e463390565b6009546040516331a9108f60e11b8152600481018590526001600160a01b039283169290911690636352211e9060240160206040518083038186803b158015611e8e57600080fd5b505afa158015611ea2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec6919061356e565b6001600160a01b031614611eec5760405162461bcd60e51b8152600401610d3c90613997565b336000908152601e602052604090205460011415611f1d57600160126000828254611f179190613abc565b90915550505b336000908152601e60205260408120805460019290611f3d908490613abc565b92505081905550600160156000828254611f579190613abc565b9091555050336000908152602160209081526040808320858452602490925282205481548110611f9757634e487b7160e01b600052603260045260246000fd5b6000918252602090912001557f7567c2cc6f0f34edc69350f058c9587fa539ff0405edcf4c51257bde5a879a873361164a565b600080516020613bb1833981519152611fe38133610cee565b50600b55565b6001600160a01b03811660009081526022602090815260408083208054825181850281018501909352808352919290919083018282801561204957602002820191906000526020600020905b815481526020019060010190808311612035575b5050505050905060005b81518110156113c65781818151811061207c57634e487b7160e01b600052603260045260246000fd5b602002602001015160001415612091576120c1565b6120c18282815181106120b457634e487b7160e01b600052603260045260246000fd5b6020026020010151612acf565b806120cb81613b51565b915050612053565b6001600160a01b03811660009081526021602090815260408083208054825181850281018501909352808352919290919083018282801561213357602002820191906000526020600020905b81548152602001906001019080831161211f575b5050505050905060005b81518110156113c65781818151811061216657634e487b7160e01b600052603260045260246000fd5b60200260200101516000141561217b576121ab565b6121ab82828151811061219e57634e487b7160e01b600052603260045260246000fd5b6020026020010151612643565b806121b581613b51565b91505061213d565b60009182526005602090815260408084206001600160a01b0393909316845291905290205460ff1690565b606060048054610f8790613b16565b6001600160a01b0381166000908152602260209081526040918290208054835181840281018401909452808452606093928301828280156118d857602002820191906000526020600020908154815260200190600101908083116118c45750505050509050919050565b600080516020613bb183398151915261227a8133610cee565b50600d55565b600654600160a01b900460ff16156122aa5760405162461bcd60e51b8152600401610d3c90613924565b336000818152601a602090815260408083208584529091528120916122cf90846124ef565b905060006122dc60025490565b9050600082116122fe5760405162461bcd60e51b8152600401610d3c906139ce565b8115612385576007546123118383613a65565b111561232f5760405162461bcd60e51b8152600401610d3c906139fd565b436001840155612340335b83613289565b7f0b9e4928168a78f498558b2f054c0d2d3fb52a464f1f9fd49a9d5fed18d39223335b604080516001600160a01b039092168252602082018590520160405180910390a15b50505050565b60005b8151811015611967578181815181106123b757634e487b7160e01b600052603260045260246000fd5b6020026020010151600014156123cc576123fc565b6123fc8282815181106123ef57634e487b7160e01b600052603260045260246000fd5b6020026020010151611d97565b8061240681613b51565b91505061238e565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156124905760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610d3c565b61249d3385858403612d5c565b5060019392505050565b6000611017338484612e80565b600080516020613bb18339815191526124cd8133610cee565b50600f55565b6021602052816000526040600020818154811061140657600080fd5b6001600160a01b0382166000908152601a602090815260408083208484528252808320815160608101835281548152600182015493810184905260029091015460ff161515918101919091526017549091108061254e57506040810151155b1561255d576000915050610cd3565b600081602001514361256f9190613abc565b9050600b5460026125809190613a9d565b81101561259257600092505050610cd3565b60006001600b54836125a49190613a7d565b6125ae9190613abc565b9050600e54816118709190613a9d565b6001600160a01b0381166000908152602160209081526040918290208054835181840281018401909452808452606093928301828280156118d857602002820191906000526020600020908154815260200190600101908083116118c45750505050509050919050565b60208052816000526040600020818154811061140657600080fd5b600654600160a01b900460ff161561266d5760405162461bcd60e51b8152600401610d3c90613924565b336000818152601b6020908152604080832085845290915281209161269290846117a1565b9050600061269f60025490565b9050600082116126c15760405162461bcd60e51b8152600401610d3c906139ce565b8115612385576007546126d48383613a65565b11156126f25760405162461bcd60e51b8152600401610d3c906139fd565b4360018401556127013361233a565b7f99fe22a5c23e2319d171f6bb76ec5447fa5dd1cc66a49cd7372a2a6e8a8e6c1b33612363565b6000828152600560205260409020600101546127448133610cee565b6113c683836130d4565b6001600160a01b0382166000908152601c602090815260408083208484528252808320815160608101835281548152600182015493810184905260029091015460ff16151591810191909152601954909110806127ad57506040810151155b156127bc576000915050610cd3565b60008160200151436127ce9190613abc565b9050600d5460026127df9190613a9d565b8110156127f157600092505050610cd3565b60006001600d54836128039190613a7d565b61280d9190613abc565b9050601054816118709190613a9d565b600080516020613bb18339815191526128368133610cee565b6001600160a01b03821661285c5760405162461bcd60e51b8152600401610d3c90613954565b50600880546001600160a01b0319166001600160a01b0392909216919091179055565b600080516020613bb18339815191526128988133610cee565b50601755565b60006128aa33836124ef565b11156128b9576128b981612280565b336000818152601a602090815260408083208584529091529081902060028101805460ff191690556008549151632142170760e11b815290926001600160a01b03909216916342842e0e916129149130918790600401613889565b600060405180830381600087803b15801561292e57600080fd5b505af1158015612942573d6000803e3d6000fd5b5050505061294d3390565b6008546040516331a9108f60e11b8152600481018590526001600160a01b039283169290911690636352211e9060240160206040518083038186803b15801561299557600080fd5b505afa1580156129a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129cd919061356e565b6001600160a01b0316146129f35760405162461bcd60e51b8152600401610d3c90613997565b336000908152601d602052604090205460011415612a2457600160116000828254612a1e9190613abc565b90915550505b336000908152601d60205260408120805460019290612a44908490613abc565b92505081905550600160146000828254612a5e9190613abc565b909155505033600090815260208080526040808320858452602390925282205481548110612a9c57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001557fc508d263e86bc81354cff1108a2b718d8d1f675c4fe45fe250d43d7d0e4104e93361164a565b600654600160a01b900460ff1615612af95760405162461bcd60e51b8152600401610d3c90613924565b336000818152601c60209081526040808320858452909152812091612b1e908461274e565b90506000612b2b60025490565b905060008211612b4d5760405162461bcd60e51b8152600401610d3c906139ce565b811561238557600754612b608383613a65565b1115612b7e5760405162461bcd60e51b8152600401610d3c906139fd565b436001840155612b8d3361233a565b7f3378e900ea00116cfa9820f02be375a4dddfbf0e02aefe03282970c38f78495233612363565b60005b815181101561196757818181518110612be057634e487b7160e01b600052603260045260246000fd5b602002602001015160001415612bf557612c25565b612c25828281518110612c1857634e487b7160e01b600052603260045260246000fd5b602002602001015161141b565b80612c2f81613b51565b915050612bb7565b60005b815181101561196757818181518110612c6357634e487b7160e01b600052603260045260246000fd5b602002602001015160001415612c7857612ca8565b612ca8828281518110612c9b57634e487b7160e01b600052603260045260246000fd5b602002602001015161289e565b80612cb281613b51565b915050612c3a565b600080516020613bb1833981519152612cd38133610cee565b50601955565b600080516020613bb1833981519152612cf28133610cee565b50601055565b612d0282826121bd565b61196757612d1a816001600160a01b03166014613369565b612d25836020613369565b604051602001612d36929190613814565b60408051601f198184030181529082905262461bcd60e51b8252610d3c916004016138f1565b6001600160a01b038316612dbe5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d3c565b6001600160a01b038216612e1f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d3c565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316612ee45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610d3c565b6001600160a01b038216612f465760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610d3c565b6001600160a01b03831660009081526020819052604090205481811015612fbe5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610d3c565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612ff5908490613a65565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161304191815260200190565b60405180910390a3612385565b61305882826121bd565b6119675760008281526005602090815260408083206001600160a01b03851684529091529020805460ff191660011790556130903390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6130de82826121bd565b156119675760008281526005602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b03821661319b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610d3c565b6001600160a01b0382166000908152602081905260409020548181101561320f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610d3c565b6001600160a01b038316600090815260208190526040812083830390556002805484929061323e908490613abc565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36113c6565b6001600160a01b0382166132df5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610d3c565b80600260008282546132f19190613a65565b90915550506001600160a01b0382166000908152602081905260408120805483929061331e908490613a65565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3611967565b60606000613378836002613a9d565b613383906002613a65565b67ffffffffffffffff8111156133a957634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156133d3576020820181803683370190505b509050600360fc1b816000815181106133fc57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061343957634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600061345d846002613a9d565b613468906001613a65565b90505b60018111156134fc576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106134aa57634e487b7160e01b600052603260045260246000fd5b1a60f81b8282815181106134ce57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c936134f581613aff565b905061346b565b50831561354b5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610d3c565b9392505050565b600060208284031215613563578081fd5b813561354b81613b98565b60006020828403121561357f578081fd5b815161354b81613b98565b6000806040838503121561359c578081fd5b82356135a781613b98565b915060208301356135b781613b98565b809150509250929050565b6000806000606084860312156135d6578081fd5b83356135e181613b98565b925060208401356135f181613b98565b929592945050506040919091013590565b60008060008060808587031215613617578081fd5b843561362281613b98565b935060208581013561363381613b98565b935060408601359250606086013567ffffffffffffffff80821115613656578384fd5b818801915088601f830112613669578384fd5b81358181111561367b5761367b613b82565b61368d601f8201601f19168501613a34565b915080825289848285010111156136a2578485fd5b8084840185840137810190920192909252939692955090935050565b600080604083850312156136d0578182fd5b82356136db81613b98565b946020939093013593505050565b600060208083850312156136fb578182fd5b823567ffffffffffffffff80821115613712578384fd5b818501915085601f830112613725578384fd5b81358181111561373757613737613b82565b8381029150613747848301613a34565b8181528481019084860184860187018a1015613761578788fd5b8795505b83861015613783578035835260019590950194918601918601613765565b5098975050505050505050565b6000602082840312156137a1578081fd5b8135801515811461354b578182fd5b6000602082840312156137c1578081fd5b5035919050565b600080604083850312156137da578182fd5b8235915060208301356135b781613b98565b6000602082840312156137fd578081fd5b81356001600160e01b03198116811461354b578182fd5b60007f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008252835161384c816017850160208801613ad3565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161387d816028840160208801613ad3565b01602801949350505050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6020808252825182820181905260009190848201906040850190845b818110156138e5578351835292840192918401916001016138c9565b50909695505050505050565b6000602082528251806020840152613910816040850160208701613ad3565b601f01601f19169190910160400192915050565b602080825260169082015275151a194818dbdb9d1c9858dd081a5cc81c185d5cd95960521b604082015260600190565b60208082526023908201527f55706461746520746f207a65726f2061646472657373206e6f7420706f737369604082015262626c6560e81b606082015260800190565b6020808252601c908201527f4572726f72207768696c65207472616e7366657272696e67204e465400000000604082015260600190565b60208082526015908201527452657761726420616d6f756e74206973207a65726f60581b604082015260600190565b6020808252601d908201527f4d6178696d756d20537570706c79206c696d6974206578636565646564000000604082015260600190565b604051601f8201601f1916810167ffffffffffffffff81118282101715613a5d57613a5d613b82565b604052919050565b60008219821115613a7857613a78613b6c565b500190565b600082613a9857634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615613ab757613ab7613b6c565b500290565b600082821015613ace57613ace613b6c565b500390565b60005b83811015613aee578181015183820152602001613ad6565b838111156123855750506000910152565b600081613b0e57613b0e613b6c565b506000190190565b600281046001821680613b2a57607f821691505b60208210811415613b4b57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613b6557613b65613b6c565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114613bad57600080fd5b5056fe2ce8d04a9c35987429af538825cd2438cc5c5bb5dc427955f84daaa3ea105016a26469706673582212202b4ed2400b80be4babcc60f95c5d76cc88b4b82dc779b8264ef43d3b847630af64736f6c63430008020033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106104f95760003560e01c806381eba4d211610299578063c2a461dd11610167578063d9ec1734116100d9578063e8607a3411610092578063e8607a3414610c2d578063ea176bb114610c40578063eb663bf514610c53578063fb9dd19314610c5c578063fba188c114610c6f578063fca1971514610c8f576104f9565b8063d9ec173414610ba9578063dd62ed3e14610bbc578063dd9e289214610bf5578063dfd2446c14610bfe578063e29bab5b14610c07578063e80f7d8714610c1a576104f9565b8063d24d8a6b1161012b578063d24d8a6b14610b3e578063d547741f14610b47578063d5abeb0114610b5a578063d5ef2f2814610b63578063d6ec0eaa14610b76578063d707c98614610b96576104f9565b8063c2a461dd14610af3578063c503d5b914610afc578063c809fd5f14610b0f578063cc3f15c114610b22578063d1a8ba4f14610b2b576104f9565b80639cefe21e1161020b578063a6f062b3116101c4578063a6f062b314610a7e578063a9059cbb14610a87578063ae75dd4614610a9a578063b1c768cf14610aad578063b22f20d614610acd578063b64e416214610ae0576104f9565b80639cefe21e14610a2b578063a06444f914610a3e578063a09d9bf114610a47578063a217fddf14610a5a578063a25591e214610a62578063a457c2d714610a6b576104f9565b806390a1ec261161025d57806390a1ec26146109ce57806391b6be4e146109e157806391d14854146109ea57806395d89b41146109fd57806397d441bb14610a055780639b029fbe14610a18576104f9565b806381eba4d214610962578063847269a3146109755780638814c967146109955780638da5cb5b146109a85780638f88b384146109bb576104f9565b806327d5b828116103d65780634cf81fb6116103485780636864fac2116103015780636864fac2146108ba57806369a539bb146108cd57806370a082311461090a57806374622bd0146109335780637c1d36cc146109465780637fd738d11461094f576104f9565b80634cf81fb61461084e57806355f8cf8d1461086157806359b829e3146108815780635c975abb1461088a578063627011fd1461089e5780636593e897146108b1576104f9565b8063350fa92d1161039a578063350fa92d146107e657806336568abe146107f9578063395093511461080c57806341bb3ed61461081f57806342966c6814610832578063433a0cc014610845576104f9565b806327d5b8281461077e5780632f2ff15d146107915780632f9cfdd1146107a4578063313ce567146107b7578063337a516e146107c6576104f9565b8063150b7a021161046f5780631da03312116104335780631da0331214610704578063214d4de214610719578063226352981461072c57806323b872dd1461073f57806323bc1ab914610752578063248a9ca31461075b576104f9565b8063150b7a0214610662578063170b29ff1461069957806318160ddd146106d65780631b544d74146106de5780631bb937b1146106f1576104f9565b806306fdde03116104c157806306fdde03146105a7578063095ea7b3146105bc5780630f5b101b146105cf5780630fbbc62814610629578063101c9cd11461063c57806312440e741461064f576104f9565b806301ffc9a7146104fe57806302329a291461052657806302f5c24f1461053b5780630523fb6e1461054e57806305a5fd0814610579575b600080fd5b61051161050c3660046137ec565b610ca2565b60405190151581526020015b60405180910390f35b610539610534366004613790565b610cd9565b005b6105396105493660046137b0565b610d12565b600a54610561906001600160a01b031681565b6040516001600160a01b03909116815260200161051d565b6105996105873660046137b0565b60256020526000908152604090205481565b60405190815260200161051d565b6105af610f78565b60405161051d91906138f1565b6105116105ca3660046136be565b61100a565b61060c6105dd3660046136be565b601b60209081526000928352604080842090915290825290208054600182015460029092015490919060ff1683565b60408051938452602084019290925215159082015260600161051d565b6105396106373660046137b0565b611020565b61053961064a366004613552565b61103f565b61053961065d3660046137b0565b6110a1565b610680610670366004613602565b630a85bd0160e11b949350505050565b6040516001600160e01b0319909116815260200161051d565b61060c6106a73660046136be565b601a60209081526000928352604080842090915290825290208054600182015460029092015490919060ff1683565b600254610599565b6105396106ec366004613552565b6112de565b6105396106ff3660046137b0565b6113cb565b610599600080516020613bb183398151915281565b6105996107273660046136be565b6113ea565b61053961073a3660046137b0565b61141b565b61051161074d3660046135c2565b61166f565b61059960195481565b6105996107693660046137b0565b60009081526005602052604090206001015490565b61053961078c366004613552565b611719565b61053961079f3660046137c8565b61177b565b6105996107b23660046136be565b6117a1565b6040516008815260200161051d565b6107d96107d4366004613552565b61187a565b60405161051d91906138ad565b6105396107f43660046136e9565b6118e4565b6105396108073660046137c8565b61196b565b61051161081a3660046136be565b6119e5565b61053961082d3660046136e9565b611a21565b6105116108403660046137b0565b611aa4565b610599600f5481565b600854610561906001600160a01b031681565b61059961086f366004613552565b601d6020526000908152604090205481565b61059960185481565b60065461051190600160a01b900460ff1681565b6105396108ac3660046137b0565b611ab8565b61059960145481565b6105396108c83660046136e9565b611cf5565b61060c6108db3660046136be565b601c60209081526000928352604080842090915290825290208054600182015460029092015490919060ff1683565b610599610918366004613552565b6001600160a01b031660009081526020819052604090205490565b6105396109413660046137b0565b611d78565b610599600e5481565b61053961095d3660046137b0565b611d97565b6105396109703660046137b0565b611fca565b610599610983366004613552565b601e6020526000908152604090205481565b6105396109a3366004613552565b611fe9565b600654610561906001600160a01b031681565b6105396109c9366004613552565b6120d3565b600954610561906001600160a01b031681565b61059960115481565b6105116109f83660046137c8565b6121bd565b6105af6121e8565b6107d9610a13366004613552565b6121f7565b610539610a263660046137b0565b612261565b610539610a393660046137b0565b612280565b61059960155481565b610539610a553660046136e9565b61238b565b610599600081565b61059960135481565b610511610a793660046136be565b61240e565b610599600c5481565b610511610a953660046136be565b6124a7565b610539610aa83660046137b0565b6124b4565b610599610abb366004613552565b601f6020526000908152604090205481565b610599610adb3660046136be565b6124d3565b610599610aee3660046136be565b6124ef565b61059960125481565b6107d9610b0a366004613552565b6125be565b610599610b1d3660046136be565b612628565b61059960105481565b610539610b393660046137b0565b612643565b61059960165481565b610539610b553660046137c8565b612728565b61059960075481565b610599610b713660046136be565b61274e565b610599610b843660046137b0565b60236020526000908152604090205481565b610539610ba4366004613552565b61281d565b610539610bb73660046137b0565b61287f565b610599610bca36600461358a565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61059960175481565b610599600d5481565b610539610c153660046137b0565b61289e565b610539610c283660046137b0565b612acf565b610539610c3b3660046136e9565b612bb4565b610539610c4e3660046136e9565b612c37565b610599600b5481565b610539610c6a3660046137b0565b612cba565b610599610c7d3660046137b0565b60246020526000908152604090205481565b610539610c9d3660046137b0565b612cd9565b60006001600160e01b03198216637965db0b60e01b1480610cd357506301ffc9a760e01b6001600160e01b03198316145b92915050565b600080516020613bb1833981519152610cf381335b612cf8565b5060068054911515600160a01b0260ff60a01b19909216919091179055565b600654600160a01b900460ff1615610d455760405162461bcd60e51b8152600401610d3c90613924565b60405180910390fd5b6008546001600160a01b03166342842e0e3330846040518463ffffffff1660e01b8152600401610d7793929190613889565b600060405180830381600087803b158015610d9157600080fd5b505af1158015610da5573d6000803e3d6000fd5b50506008546040516331a9108f60e11b8152600481018590523093506001600160a01b039091169150636352211e9060240160206040518083038186803b158015610def57600080fd5b505afa158015610e03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e27919061356e565b6001600160a01b031614610e4d5760405162461bcd60e51b8152600401610d3c90613997565b336000818152601a6020908152604080832085845282528083204380825560018083019190915560028201805460ff19169091179055938352601d909152902054610eab57600160116000828254610ea59190613a65565b90915550505b336000908152601d60205260408120805460019290610ecb908490613a65565b92505081905550600160146000828254610ee59190613a65565b90915550503360008181526020808052604082208054600180820183558285529284200186905592825291549091610f1c91613abc565b600084815260236020526040902081905590507fa51cbc60e7bd75c33775dfb912a4cb4964d7906137dea03133b39f5f577f7023335b604080516001600160a01b039092168252602082018690520160405180910390a1505050565b606060038054610f8790613b16565b80601f0160208091040260200160405190810160405280929190818152602001828054610fb390613b16565b80156110005780601f10610fd557610100808354040283529160200191611000565b820191906000526020600020905b815481529060010190602001808311610fe357829003601f168201915b5050505050905090565b6000611017338484612d5c565b50600192915050565b600080516020613bb18339815191526110398133610cee565b50600e55565b600080516020613bb18339815191526110588133610cee565b6001600160a01b03821661107e5760405162461bcd60e51b8152600401610d3c90613954565b50600a80546001600160a01b0319166001600160a01b0392909216919091179055565b600654600160a01b900460ff16156110cb5760405162461bcd60e51b8152600401610d3c90613924565b6009546001600160a01b03166342842e0e3330846040518463ffffffff1660e01b81526004016110fd93929190613889565b600060405180830381600087803b15801561111757600080fd5b505af115801561112b573d6000803e3d6000fd5b50506009546040516331a9108f60e11b8152600481018590523093506001600160a01b039091169150636352211e9060240160206040518083038186803b15801561117557600080fd5b505afa158015611189573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ad919061356e565b6001600160a01b0316146111d35760405162461bcd60e51b8152600401610d3c90613997565b336000818152601b6020908152604080832085845282528083204380825560018083019190915560028201805460ff19169091179055938352601e9091529020546112315760016012600082825461122b9190613a65565b90915550505b336000908152601e60205260408120805460019290611251908490613a65565b9250508190555060016015600082825461126b9190613a65565b9091555050336000818152602160209081526040822080546001808201835582855292842001869055928252915490916112a491613abc565b600084815260246020526040902081905590507f5ec2265e39d526d44b521782c496015630ec0b92bed5dfa39835caec8976085c33610f52565b6001600160a01b0381166000908152602080805260408083208054825181850281018501909352808352919290919083018282801561133c57602002820191906000526020600020905b815481526020019060010190808311611328575b5050505050905060005b81518110156113c65781818151811061136f57634e487b7160e01b600052603260045260246000fd5b602002602001015160001415611384576113b4565b6113b48282815181106113a757634e487b7160e01b600052603260045260246000fd5b6020026020010151612280565b806113be81613b51565b915050611346565b505050565b600080516020613bb18339815191526113e48133610cee565b50601855565b6022602052816000526040600020818154811061140657600080fd5b90600052602060002001600091509150505481565b6000611427338361274e565b11156114365761143681612acf565b336000818152601c602090815260408083208584529091529081902060028101805460ff19169055600a549151632142170760e11b815290926001600160a01b03909216916342842e0e916114919130918790600401613889565b600060405180830381600087803b1580156114ab57600080fd5b505af11580156114bf573d6000803e3d6000fd5b505050506114ca3390565b600a546040516331a9108f60e11b8152600481018590526001600160a01b039283169290911690636352211e9060240160206040518083038186803b15801561151257600080fd5b505afa158015611526573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154a919061356e565b6001600160a01b0316146115705760405162461bcd60e51b8152600401610d3c90613997565b336000908152601f6020526040902054600114156115a15760016013600082825461159b9190613abc565b90915550505b336000908152601f602052604081208054600192906115c1908490613abc565b925050819055506001601660008282546115db9190613abc565b909155505033600090815260226020908152604080832085845260259092528220548154811061161b57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001557f4d3fd09e511b7ddffcae477ad99338d84021f67d3ea8cfe91ea66c2e25650fe9335b604080516001600160a01b039092168252602082018590520160405180910390a15050565b600061167c848484612e80565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156117015760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610d3c565b61170e8533858403612d5c565b506001949350505050565b600080516020613bb18339815191526117328133610cee565b6001600160a01b0382166117585760405162461bcd60e51b8152600401610d3c90613954565b50600980546001600160a01b0319166001600160a01b0392909216919091179055565b6000828152600560205260409020600101546117978133610cee565b6113c6838361304e565b6001600160a01b0382166000908152601b602090815260408083208484528252808320815160608101835281548152600182015493810184905260029091015460ff161515918101919091526018549091108061180057506040810151155b1561180f576000915050610cd3565b60008160200151436118219190613abc565b9050600c5460026118329190613a9d565b81101561184457600092505050610cd3565b60006001600c54836118569190613a7d565b6118609190613abc565b9050600f54816118709190613a9d565b9695505050505050565b6001600160a01b038116600090815260208080526040918290208054835181840281018401909452808452606093928301828280156118d857602002820191906000526020600020905b8154815260200190600101908083116118c4575b50505050509050919050565b60005b81518110156119675781818151811061191057634e487b7160e01b600052603260045260246000fd5b60200260200101516000141561192557611955565b61195582828151811061194857634e487b7160e01b600052603260045260246000fd5b60200260200101516110a1565b8061195f81613b51565b9150506118e7565b5050565b6001600160a01b03811633146119db5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610d3c565b61196782826130d4565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091611017918590611a1c908690613a65565b612d5c565b60005b815181101561196757818181518110611a4d57634e487b7160e01b600052603260045260246000fd5b602002602001015160001415611a6257611a92565b611a92828281518110611a8557634e487b7160e01b600052603260045260246000fd5b6020026020010151610d12565b80611a9c81613b51565b915050611a24565b6000611ab0338361313b565b506001919050565b600654600160a01b900460ff1615611ae25760405162461bcd60e51b8152600401610d3c90613924565b600a546001600160a01b03166342842e0e3330846040518463ffffffff1660e01b8152600401611b1493929190613889565b600060405180830381600087803b158015611b2e57600080fd5b505af1158015611b42573d6000803e3d6000fd5b5050600a546040516331a9108f60e11b8152600481018590523093506001600160a01b039091169150636352211e9060240160206040518083038186803b158015611b8c57600080fd5b505afa158015611ba0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc4919061356e565b6001600160a01b031614611bea5760405162461bcd60e51b8152600401610d3c90613997565b336000818152601c6020908152604080832085845282528083204380825560018083019190915560028201805460ff19169091179055938352601f909152902054611c4857600160136000828254611c429190613a65565b90915550505b336000908152601f60205260408120805460019290611c68908490613a65565b92505081905550600160166000828254611c829190613a65565b909155505033600081815260226020908152604082208054600180820183558285529284200186905592825291549091611cbb91613abc565b600084815260256020526040902081905590507f3343f9235219deae3ff15cbb32f3eb3d0de03566c60be0f745c71b750565c35533610f52565b60005b815181101561196757818181518110611d2157634e487b7160e01b600052603260045260246000fd5b602002602001015160001415611d3657611d66565b611d66828281518110611d5957634e487b7160e01b600052603260045260246000fd5b6020026020010151611ab8565b80611d7081613b51565b915050611cf8565b600080516020613bb1833981519152611d918133610cee565b50600c55565b6000611da333836117a1565b1115611db257611db281612643565b336000818152601b602090815260408083208584529091529081902060028101805460ff191690556009549151632142170760e11b815290926001600160a01b03909216916342842e0e91611e0d9130918790600401613889565b600060405180830381600087803b158015611e2757600080fd5b505af1158015611e3b573d6000803e3d6000fd5b50505050611e463390565b6009546040516331a9108f60e11b8152600481018590526001600160a01b039283169290911690636352211e9060240160206040518083038186803b158015611e8e57600080fd5b505afa158015611ea2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec6919061356e565b6001600160a01b031614611eec5760405162461bcd60e51b8152600401610d3c90613997565b336000908152601e602052604090205460011415611f1d57600160126000828254611f179190613abc565b90915550505b336000908152601e60205260408120805460019290611f3d908490613abc565b92505081905550600160156000828254611f579190613abc565b9091555050336000908152602160209081526040808320858452602490925282205481548110611f9757634e487b7160e01b600052603260045260246000fd5b6000918252602090912001557f7567c2cc6f0f34edc69350f058c9587fa539ff0405edcf4c51257bde5a879a873361164a565b600080516020613bb1833981519152611fe38133610cee565b50600b55565b6001600160a01b03811660009081526022602090815260408083208054825181850281018501909352808352919290919083018282801561204957602002820191906000526020600020905b815481526020019060010190808311612035575b5050505050905060005b81518110156113c65781818151811061207c57634e487b7160e01b600052603260045260246000fd5b602002602001015160001415612091576120c1565b6120c18282815181106120b457634e487b7160e01b600052603260045260246000fd5b6020026020010151612acf565b806120cb81613b51565b915050612053565b6001600160a01b03811660009081526021602090815260408083208054825181850281018501909352808352919290919083018282801561213357602002820191906000526020600020905b81548152602001906001019080831161211f575b5050505050905060005b81518110156113c65781818151811061216657634e487b7160e01b600052603260045260246000fd5b60200260200101516000141561217b576121ab565b6121ab82828151811061219e57634e487b7160e01b600052603260045260246000fd5b6020026020010151612643565b806121b581613b51565b91505061213d565b60009182526005602090815260408084206001600160a01b0393909316845291905290205460ff1690565b606060048054610f8790613b16565b6001600160a01b0381166000908152602260209081526040918290208054835181840281018401909452808452606093928301828280156118d857602002820191906000526020600020908154815260200190600101908083116118c45750505050509050919050565b600080516020613bb183398151915261227a8133610cee565b50600d55565b600654600160a01b900460ff16156122aa5760405162461bcd60e51b8152600401610d3c90613924565b336000818152601a602090815260408083208584529091528120916122cf90846124ef565b905060006122dc60025490565b9050600082116122fe5760405162461bcd60e51b8152600401610d3c906139ce565b8115612385576007546123118383613a65565b111561232f5760405162461bcd60e51b8152600401610d3c906139fd565b436001840155612340335b83613289565b7f0b9e4928168a78f498558b2f054c0d2d3fb52a464f1f9fd49a9d5fed18d39223335b604080516001600160a01b039092168252602082018590520160405180910390a15b50505050565b60005b8151811015611967578181815181106123b757634e487b7160e01b600052603260045260246000fd5b6020026020010151600014156123cc576123fc565b6123fc8282815181106123ef57634e487b7160e01b600052603260045260246000fd5b6020026020010151611d97565b8061240681613b51565b91505061238e565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156124905760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610d3c565b61249d3385858403612d5c565b5060019392505050565b6000611017338484612e80565b600080516020613bb18339815191526124cd8133610cee565b50600f55565b6021602052816000526040600020818154811061140657600080fd5b6001600160a01b0382166000908152601a602090815260408083208484528252808320815160608101835281548152600182015493810184905260029091015460ff161515918101919091526017549091108061254e57506040810151155b1561255d576000915050610cd3565b600081602001514361256f9190613abc565b9050600b5460026125809190613a9d565b81101561259257600092505050610cd3565b60006001600b54836125a49190613a7d565b6125ae9190613abc565b9050600e54816118709190613a9d565b6001600160a01b0381166000908152602160209081526040918290208054835181840281018401909452808452606093928301828280156118d857602002820191906000526020600020908154815260200190600101908083116118c45750505050509050919050565b60208052816000526040600020818154811061140657600080fd5b600654600160a01b900460ff161561266d5760405162461bcd60e51b8152600401610d3c90613924565b336000818152601b6020908152604080832085845290915281209161269290846117a1565b9050600061269f60025490565b9050600082116126c15760405162461bcd60e51b8152600401610d3c906139ce565b8115612385576007546126d48383613a65565b11156126f25760405162461bcd60e51b8152600401610d3c906139fd565b4360018401556127013361233a565b7f99fe22a5c23e2319d171f6bb76ec5447fa5dd1cc66a49cd7372a2a6e8a8e6c1b33612363565b6000828152600560205260409020600101546127448133610cee565b6113c683836130d4565b6001600160a01b0382166000908152601c602090815260408083208484528252808320815160608101835281548152600182015493810184905260029091015460ff16151591810191909152601954909110806127ad57506040810151155b156127bc576000915050610cd3565b60008160200151436127ce9190613abc565b9050600d5460026127df9190613a9d565b8110156127f157600092505050610cd3565b60006001600d54836128039190613a7d565b61280d9190613abc565b9050601054816118709190613a9d565b600080516020613bb18339815191526128368133610cee565b6001600160a01b03821661285c5760405162461bcd60e51b8152600401610d3c90613954565b50600880546001600160a01b0319166001600160a01b0392909216919091179055565b600080516020613bb18339815191526128988133610cee565b50601755565b60006128aa33836124ef565b11156128b9576128b981612280565b336000818152601a602090815260408083208584529091529081902060028101805460ff191690556008549151632142170760e11b815290926001600160a01b03909216916342842e0e916129149130918790600401613889565b600060405180830381600087803b15801561292e57600080fd5b505af1158015612942573d6000803e3d6000fd5b5050505061294d3390565b6008546040516331a9108f60e11b8152600481018590526001600160a01b039283169290911690636352211e9060240160206040518083038186803b15801561299557600080fd5b505afa1580156129a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129cd919061356e565b6001600160a01b0316146129f35760405162461bcd60e51b8152600401610d3c90613997565b336000908152601d602052604090205460011415612a2457600160116000828254612a1e9190613abc565b90915550505b336000908152601d60205260408120805460019290612a44908490613abc565b92505081905550600160146000828254612a5e9190613abc565b909155505033600090815260208080526040808320858452602390925282205481548110612a9c57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001557fc508d263e86bc81354cff1108a2b718d8d1f675c4fe45fe250d43d7d0e4104e93361164a565b600654600160a01b900460ff1615612af95760405162461bcd60e51b8152600401610d3c90613924565b336000818152601c60209081526040808320858452909152812091612b1e908461274e565b90506000612b2b60025490565b905060008211612b4d5760405162461bcd60e51b8152600401610d3c906139ce565b811561238557600754612b608383613a65565b1115612b7e5760405162461bcd60e51b8152600401610d3c906139fd565b436001840155612b8d3361233a565b7f3378e900ea00116cfa9820f02be375a4dddfbf0e02aefe03282970c38f78495233612363565b60005b815181101561196757818181518110612be057634e487b7160e01b600052603260045260246000fd5b602002602001015160001415612bf557612c25565b612c25828281518110612c1857634e487b7160e01b600052603260045260246000fd5b602002602001015161141b565b80612c2f81613b51565b915050612bb7565b60005b815181101561196757818181518110612c6357634e487b7160e01b600052603260045260246000fd5b602002602001015160001415612c7857612ca8565b612ca8828281518110612c9b57634e487b7160e01b600052603260045260246000fd5b602002602001015161289e565b80612cb281613b51565b915050612c3a565b600080516020613bb1833981519152612cd38133610cee565b50601955565b600080516020613bb1833981519152612cf28133610cee565b50601055565b612d0282826121bd565b61196757612d1a816001600160a01b03166014613369565b612d25836020613369565b604051602001612d36929190613814565b60408051601f198184030181529082905262461bcd60e51b8252610d3c916004016138f1565b6001600160a01b038316612dbe5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d3c565b6001600160a01b038216612e1f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d3c565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316612ee45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610d3c565b6001600160a01b038216612f465760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610d3c565b6001600160a01b03831660009081526020819052604090205481811015612fbe5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610d3c565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612ff5908490613a65565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161304191815260200190565b60405180910390a3612385565b61305882826121bd565b6119675760008281526005602090815260408083206001600160a01b03851684529091529020805460ff191660011790556130903390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6130de82826121bd565b156119675760008281526005602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b03821661319b5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610d3c565b6001600160a01b0382166000908152602081905260409020548181101561320f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610d3c565b6001600160a01b038316600090815260208190526040812083830390556002805484929061323e908490613abc565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36113c6565b6001600160a01b0382166132df5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610d3c565b80600260008282546132f19190613a65565b90915550506001600160a01b0382166000908152602081905260408120805483929061331e908490613a65565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3611967565b60606000613378836002613a9d565b613383906002613a65565b67ffffffffffffffff8111156133a957634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156133d3576020820181803683370190505b509050600360fc1b816000815181106133fc57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061343957634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350600061345d846002613a9d565b613468906001613a65565b90505b60018111156134fc576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106134aa57634e487b7160e01b600052603260045260246000fd5b1a60f81b8282815181106134ce57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535060049490941c936134f581613aff565b905061346b565b50831561354b5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610d3c565b9392505050565b600060208284031215613563578081fd5b813561354b81613b98565b60006020828403121561357f578081fd5b815161354b81613b98565b6000806040838503121561359c578081fd5b82356135a781613b98565b915060208301356135b781613b98565b809150509250929050565b6000806000606084860312156135d6578081fd5b83356135e181613b98565b925060208401356135f181613b98565b929592945050506040919091013590565b60008060008060808587031215613617578081fd5b843561362281613b98565b935060208581013561363381613b98565b935060408601359250606086013567ffffffffffffffff80821115613656578384fd5b818801915088601f830112613669578384fd5b81358181111561367b5761367b613b82565b61368d601f8201601f19168501613a34565b915080825289848285010111156136a2578485fd5b8084840185840137810190920192909252939692955090935050565b600080604083850312156136d0578182fd5b82356136db81613b98565b946020939093013593505050565b600060208083850312156136fb578182fd5b823567ffffffffffffffff80821115613712578384fd5b818501915085601f830112613725578384fd5b81358181111561373757613737613b82565b8381029150613747848301613a34565b8181528481019084860184860187018a1015613761578788fd5b8795505b83861015613783578035835260019590950194918601918601613765565b5098975050505050505050565b6000602082840312156137a1578081fd5b8135801515811461354b578182fd5b6000602082840312156137c1578081fd5b5035919050565b600080604083850312156137da578182fd5b8235915060208301356135b781613b98565b6000602082840312156137fd578081fd5b81356001600160e01b03198116811461354b578182fd5b60007f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008252835161384c816017850160208801613ad3565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161387d816028840160208801613ad3565b01602801949350505050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6020808252825182820181905260009190848201906040850190845b818110156138e5578351835292840192918401916001016138c9565b50909695505050505050565b6000602082528251806020840152613910816040850160208701613ad3565b601f01601f19169190910160400192915050565b602080825260169082015275151a194818dbdb9d1c9858dd081a5cc81c185d5cd95960521b604082015260600190565b60208082526023908201527f55706461746520746f207a65726f2061646472657373206e6f7420706f737369604082015262626c6560e81b606082015260800190565b6020808252601c908201527f4572726f72207768696c65207472616e7366657272696e67204e465400000000604082015260600190565b60208082526015908201527452657761726420616d6f756e74206973207a65726f60581b604082015260600190565b6020808252601d908201527f4d6178696d756d20537570706c79206c696d6974206578636565646564000000604082015260600190565b604051601f8201601f1916810167ffffffffffffffff81118282101715613a5d57613a5d613b82565b604052919050565b60008219821115613a7857613a78613b6c565b500190565b600082613a9857634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615613ab757613ab7613b6c565b500290565b600082821015613ace57613ace613b6c565b500390565b60005b83811015613aee578181015183820152602001613ad6565b838111156123855750506000910152565b600081613b0e57613b0e613b6c565b506000190190565b600281046001821680613b2a57607f821691505b60208210811415613b4b57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613b6557613b65613b6c565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114613bad57600080fd5b5056fe2ce8d04a9c35987429af538825cd2438cc5c5bb5dc427955f84daaa3ea105016a26469706673582212202b4ed2400b80be4babcc60f95c5d76cc88b4b82dc779b8264ef43d3b847630af64736f6c63430008020033

Deployed Bytecode Sourcemap

13114:18939:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4856:204;;;;;;:::i;:::-;;:::i;:::-;;;7704:14:1;;7697:22;7679:41;;7667:2;7652:18;4856:204:0;;;;;;;;31436:101;;;;;;:::i;:::-;;:::i;:::-;;19428:973;;;;;;:::i;:::-;;:::i;13452:34::-;;;;;-1:-1:-1;;;;;13452:34:0;;;;;;-1:-1:-1;;;;;6196:32:1;;;6178:51;;6166:2;6151:18;13452:34:0;6133:102:1;15315:67:0;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;7877:25:1;;;7865:2;7850:18;15315:67:0;7832:76:1;8532:100:0;;;:::i;:::-;;;;;;;:::i;9431:169::-;;;;;;:::i;:::-;;:::i;14617:70::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15488:25:1;;;15544:2;15529:18;;15522:34;;;;15599:14;15592:22;15572:18;;;15565:50;15476:2;15461:18;14617:70:0;15443:178:1;30230:157:0;;;;;;:::i;:::-;;:::i;31199:231::-;;;;;;:::i;:::-;;:::i;20409:973::-;;;;;;:::i;:::-;;:::i;515:207::-;;;;;;:::i;:::-;-1:-1:-1;;;515:207:0;;;;;;;;;;-1:-1:-1;;;;;;8075:33:1;;;8057:52;;8045:2;8030:18;515:207:0;8012:103:1;14540:70:0;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8846:108;8934:12;;8846:108;;25333:342;;;;;;:::i;:::-;;:::i;31714:165::-;;;;;;:::i;:::-;;:::i;13173:78::-;;-1:-1:-1;;;;;;;;;;;13173:78:0;;15098:60;;;;;;:::i;:::-;;:::i;27999:803::-;;;;;;:::i;:::-;;:::i;9606:454::-;;;;;;:::i;:::-;;:::i;14104:34::-;;;;;;5714:123;;;;;;:::i;:::-;5780:7;5807:12;;;:6;:12;;;;;:22;;;;5714:123;30960:231;;;;;;:::i;:::-;;:::i;5843:147::-;;;;;;:::i;:::-;;:::i;18112:651::-;;;;;;:::i;:::-;;:::i;8748:92::-;;;8831:1;15768:36:1;;15756:2;15741:18;8748:92:0;15723:87:1;16875:138:0;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;22662:283::-;;;;;;:::i;:::-;;:::i;6151:216::-;;;;;;:::i;:::-;;:::i;10066:215::-;;;;;;:::i;:::-;;:::i;22371:283::-;;;;;;:::i;:::-;;:::i;17313:134::-;;;;;;:::i;:::-;;:::i;13697:40::-;;;;;;13370:34;;;;;-1:-1:-1;;;;;13370:34:0;;;14773:56;;;;;;:::i;:::-;;;;;;;;;;;;;;14063:34;;;;;;13285:26;;;;;-1:-1:-1;;;13285:26:0;;;;;;21390:973;;;;;;:::i;:::-;;:::i;13912:29::-;;;;;;22953:283;;;;;;:::i;:::-;;:::i;14694:70::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8960:127;;;;;;:::i;:::-;-1:-1:-1;;;;;9061:18:0;9034:7;9061:18;;;;;;;;;;;;8960:127;29870:173;;;;;;:::i;:::-;;:::i;13650:40::-;;;;;;27189:802;;;;;;:::i;:::-;;:::i;29691:173::-;;;;;;:::i;:::-;;:::i;14836:56::-;;;;;;:::i;:::-;;;;;;;;;;;;;;26029:342;;;;;;:::i;:::-;;:::i;13258:20::-;;;;;-1:-1:-1;;;;;13258:20:0;;;25681:342;;;;;;:::i;:::-;;:::i;13411:34::-;;;;;-1:-1:-1;;;;;13411:34:0;;;13793:32;;;;;;5066:139;;;;;;:::i;:::-;;:::i;8638:104::-;;;:::i;17167:138::-;;;;;;:::i;:::-;;:::i;30049:173::-;;;;;;:::i;:::-;;:::i;23244:690::-;;;;;;:::i;:::-;;:::i;13948:29::-;;;;;;29103:287;;;;;;:::i;:::-;;:::i;4701:49::-;;4746:4;4701:49;;13871:32;;;;;;10287:411;;;;;;:::i;:::-;;:::i;13546:44::-;;;;;;9093:175;;;;;;:::i;:::-;;:::i;30393:157::-;;;;;;:::i;:::-;;:::i;14899:56::-;;;;;;:::i;:::-;;;;;;;;;;;;;;15031:60;;;;;;:::i;:::-;;:::i;17455:651::-;;;;;;:::i;:::-;;:::i;13832:32::-;;;;;;17021:138;;;;;;:::i;:::-;;:::i;14964:60::-;;;;;;:::i;:::-;;:::i;13744:40::-;;;;;;23940:689;;;;;;:::i;:::-;;:::i;13984:29::-;;;;;;5996:149;;;;;;:::i;:::-;;:::i;13318:45::-;;;;;;18769:651;;;;;;:::i;:::-;;:::i;15167:67::-;;;;;;:::i;:::-;;;;;;;;;;;;;;30721:231;;;;;;:::i;:::-;;:::i;31543:165::-;;;;;;:::i;:::-;;:::i;9274:151::-;;;;;;:::i;:::-;-1:-1:-1;;;;;9390:18:0;;;9363:7;9390:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9274:151;14022:34;;;;;;13597:44;;;;;;26379:802;;;;;;:::i;:::-;;:::i;24635:690::-;;;;;;:::i;:::-;;:::i;29396:287::-;;;;;;:::i;:::-;;:::i;28810:::-;;;;;;:::i;:::-;;:::i;13495:44::-;;;;;;31885:165;;;;;;:::i;:::-;;:::i;15241:67::-;;;;;;:::i;:::-;;;;;;;;;;;;;;30556:157;;;;;;:::i;:::-;;:::i;4856:204::-;4941:4;-1:-1:-1;;;;;;4965:47:0;;-1:-1:-1;;;4965:47:0;;:87;;-1:-1:-1;;;;;;;;;;2043:40:0;;;5016:36;4958:94;4856:204;-1:-1:-1;;4856:204:0:o;31436:101::-;-1:-1:-1;;;;;;;;;;;4800:30:0;13219:32;4344:10;4817:12;4800:10;:30::i;:::-;-1:-1:-1;31514:6:0::1;:15:::0;;;::::1;;-1:-1:-1::0;;;31514:15:0::1;-1:-1:-1::0;;;;31514:15:0;;::::1;::::0;;;::::1;::::0;;31436:101::o;19428:973::-;19489:6;;-1:-1:-1;;;19489:6:0;;;;19488:7;19480:42;;;;-1:-1:-1;;;19480:42:0;;;;;;;:::i;:::-;;;;;;;;;19541:19;;-1:-1:-1;;;;;19541:19:0;19533:45;4344:10;19601:4;19608:7;19533:83;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19643:19:0;;19635:45;;-1:-1:-1;;;19635:45:0;;;;;7877:25:1;;;19692:4:0;;-1:-1:-1;;;;;;19643:19:0;;;;-1:-1:-1;19635:36:0;;7850:18:1;;19635:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;19635:62:0;;19627:103;;;;-1:-1:-1;;;19627:103:0;;;;;;;:::i;:::-;4344:10;19741:26;19770:24;;;:10;:24;;;;;;;;:33;;;;;;;;19837:12;19814:35;;;19860:23;;;;:38;;;;19909:22;;;:29;;-1:-1:-1;;19909:29:0;;;;;;19952:34;;;:20;:34;;;;;;19949:92;;20028:1;20007:17;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;19949:92:0;4344:10;20051:34;;;;:20;:34;;;;;:39;;20089:1;;20051:34;:39;;20089:1;;20051:39;:::i;:::-;;;;;;;;20119:1;20101:14;;:19;;;;;;;:::i;:::-;;;;-1:-1:-1;;4344:10:0;20131:36;;;;:22;:36;;;;;;:50;;;;;;;;;;;;;;;;;;20222:36;;;:43;;20131:36;;20222:47;;;:::i;:::-;20280:41;;;;:32;:41;;;;;:63;;;;-1:-1:-1;20359:34:0;4344:10;20371:12;20359:34;;;-1:-1:-1;;;;;6812:32:1;;;6794:51;;6876:2;6861:18;;6854:34;;;6767:18;20359:34:0;;;;;;;19428:973;;;:::o;8532:100::-;8586:13;8619:5;8612:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8532:100;:::o;9431:169::-;9514:4;9531:39;4344:10;9554:7;9563:6;9531:8;:39::i;:::-;-1:-1:-1;9588:4:0;9431:169;;;;:::o;30230:157::-;-1:-1:-1;;;;;;;;;;;4800:30:0;13219:32;4344:10;4817:12;4264:98;4800:30;-1:-1:-1;30339:25:0::1;:40:::0;30230:157::o;31199:231::-;-1:-1:-1;;;;;;;;;;;4800:30:0;13219:32;4344:10;4817:12;4264:98;4800:30;-1:-1:-1;;;;;31311:26:0;::::1;31302:75;;;;-1:-1:-1::0;;;31302:75:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;31388:19:0::1;:34:::0;;-1:-1:-1;;;;;;31388:34:0::1;-1:-1:-1::0;;;;;31388:34:0;;;::::1;::::0;;;::::1;::::0;;31199:231::o;20409:973::-;20470:6;;-1:-1:-1;;;20470:6:0;;;;20469:7;20461:42;;;;-1:-1:-1;;;20461:42:0;;;;;;;:::i;:::-;20522:19;;-1:-1:-1;;;;;20522:19:0;20514:45;4344:10;20582:4;20589:7;20514:83;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20624:19:0;;20616:45;;-1:-1:-1;;;20616:45:0;;;;;7877:25:1;;;20673:4:0;;-1:-1:-1;;;;;;20624:19:0;;;;-1:-1:-1;20616:36:0;;7850:18:1;;20616:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;20616:62:0;;20608:103;;;;-1:-1:-1;;;20608:103:0;;;;;;;:::i;:::-;4344:10;20722:26;20751:24;;;:10;:24;;;;;;;;:33;;;;;;;;20818:12;20795:35;;;20841:23;;;;:38;;;;20890:22;;;:29;;-1:-1:-1;;20890:29:0;;;;;;20933:34;;;:20;:34;;;;;;20930:92;;21009:1;20988:17;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;20930:92:0;4344:10;21032:34;;;;:20;:34;;;;;:39;;21070:1;;21032:34;:39;;21070:1;;21032:39;:::i;:::-;;;;;;;;21100:1;21082:14;;:19;;;;;;;:::i;:::-;;;;-1:-1:-1;;4344:10:0;21112:36;;;;:22;:36;;;;;;;:50;;;;;;;;;;;;;;;;;;21203:36;;;:43;;21112:36;;21203:47;;;:::i;:::-;21261:41;;;;:32;:41;;;;;:63;;;;-1:-1:-1;21340:34:0;4344:10;21352:12;4264:98;25333:342;-1:-1:-1;;;;;25418:28:0;;25390:25;25418:28;;;:22;:28;;;;;;;25390:56;;;;;;;;;;;;;;;;;;;25418:28;;25390:56;;;25418:28;25390:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25463:14;25459:209;25495:8;:15;25483:9;:27;25459:209;;;25543:8;25552:9;25543:19;;;;;;-1:-1:-1;;;25543:19:0;;;;;;;;;;;;;;;25566:1;25543:24;25540:72;;;25588:8;;25540:72;25626:30;25636:8;25645:9;25636:19;;;;;;-1:-1:-1;;;25636:19:0;;;;;;;;;;;;;;;25626:9;:30::i;:::-;25512:11;;;;:::i;:::-;;;;25459:209;;;;25333:342;;:::o;31714:165::-;-1:-1:-1;;;;;;;;;;;4800:30:0;13219:32;4344:10;4817:12;4264:98;4800:30;-1:-1:-1;31827:19:0::1;:44:::0;31714:165::o;15098:60::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27999:803::-;28098:1;28056:39;4344:10;28087:7;28056:16;:39::i;:::-;:43;28053:92;;;28115:18;28125:7;28115:9;:18::i;:::-;4344:10;28155:26;28184:24;;;:10;:24;;;;;;;;:33;;;;;;;;;;28228:22;;;:30;;-1:-1:-1;;28228:30:0;;;28278:19;;28270:83;;-1:-1:-1;;;28270:83:0;;28184:33;;-1:-1:-1;;;;;28278:19:0;;;;28270:45;;:83;;28324:4;;28184:33;;28270:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28421:12;4344:10;4264:98;;28421:12;28380:19;;28372:45;;-1:-1:-1;;;28372:45:0;;;;;7877:25:1;;;-1:-1:-1;;;;;28372:61:0;;;;28380:19;;;;28372:36;;7850:18:1;;28372:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28372:61:0;;28364:102;;;;-1:-1:-1;;;28364:102:0;;;;;;;:::i;:::-;4344:10;28480:34;;;;:20;:34;;;;;;28518:1;28480:39;28477:92;;;28556:1;28535:17;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;28477:92:0;4344:10;28579:34;;;;:20;:34;;;;;:39;;28617:1;;28579:34;:39;;28617:1;;28579:39;:::i;:::-;;;;;;;;28647:1;28629:14;;:19;;;;;;;:::i;:::-;;;;-1:-1:-1;;4344:10:0;28741:1;28659:36;;;:22;:36;;;;;;;;28696:41;;;:32;:41;;;;;;28659:79;;;;;;-1:-1:-1;;;28659:79:0;;;;;;;;;;;;;;;;;;:83;28758:36;4344:10;28772:12;28758:36;;;-1:-1:-1;;;;;6812:32:1;;;6794:51;;6876:2;6861:18;;6854:34;;;6767:18;28758:36:0;;;;;;;27999:803;;:::o;9606:454::-;9712:4;9729:36;9739:6;9747:9;9758:6;9729:9;:36::i;:::-;-1:-1:-1;;;;;9803:19:0;;9776:24;9803:19;;;:11;:19;;;;;;;;4344:10;9803:33;;;;;;;;9855:26;;;;9847:79;;;;-1:-1:-1;;;9847:79:0;;12508:2:1;9847:79:0;;;12490:21:1;12547:2;12527:18;;;12520:30;12586:34;12566:18;;;12559:62;-1:-1:-1;;;12637:18:1;;;12630:38;12685:19;;9847:79:0;12480:230:1;9847:79:0;9962:57;9971:6;4344:10;10012:6;9993:16;:25;9962:8;:57::i;:::-;-1:-1:-1;10048:4:0;;9606:454;-1:-1:-1;;;;9606:454:0:o;30960:231::-;-1:-1:-1;;;;;;;;;;;4800:30:0;13219:32;4344:10;4817:12;4264:98;4800:30;-1:-1:-1;;;;;31072:26:0;::::1;31063:75;;;;-1:-1:-1::0;;;31063:75:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;31149:19:0::1;:34:::0;;-1:-1:-1;;;;;;31149:34:0::1;-1:-1:-1::0;;;;;31149:34:0;;;::::1;::::0;;;::::1;::::0;;30960:231::o;5843:147::-;5780:7;5807:12;;;:6;:12;;;;;:22;;;4800:30;4811:4;4344:10;4817:12;4264:98;4800:30;5957:25:::1;5968:4;5974:7;5957:10;:25::i;18112:651::-:0;-1:-1:-1;;;;;18238:17:0;;18191:7;18238:17;;;:10;:17;;;;;;;;:26;;;;;;;;18210:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18306:19;;18210:54;;18280:45;;:80;;-1:-1:-1;18329:22:0;;;;:31;18280:80;18277:120;;;18384:1;18377:8;;;;;18277:120;18407:36;18461:6;:23;;;18446:12;:38;;;;:::i;:::-;18407:77;;18530:29;;18562:1;18530:33;;;;:::i;:::-;18499:28;:64;18495:105;;;18587:1;18580:8;;;;;;18495:105;18610:20;18696:1;18664:29;;18633:28;:60;;;;:::i;:::-;:64;;;;:::i;:::-;18610:87;;18730:25;;18715:12;:40;;;;:::i;:::-;18708:47;18112:651;-1:-1:-1;;;;;;18112:651:0:o;16875:138::-;-1:-1:-1;;;;;16976:29:0;;;;;;:22;:29;;;;;;;;16969:36;;;;;;;;;;;;;;;;;16941:16;;16969:36;;;16976:29;16969:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16875:138;;;:::o;22662:283::-;22735:14;22731:207;22767:8;:15;22755:9;:27;22731:207;;;22815:8;22824:9;22815:19;;;;;;-1:-1:-1;;;22815:19:0;;;;;;;;;;;;;;;22838:1;22815:24;22812:72;;;22860:8;;22812:72;22898:28;22906:8;22915:9;22906:19;;;;;;-1:-1:-1;;;22906:19:0;;;;;;;;;;;;;;;22898:7;:28::i;:::-;22784:11;;;;:::i;:::-;;;;22731:207;;;;22662:283;:::o;6151:216::-;-1:-1:-1;;;;;6247:23:0;;4344:10;6247:23;6239:83;;;;-1:-1:-1;;;6239:83:0;;14536:2:1;6239:83:0;;;14518:21:1;14575:2;14555:18;;;14548:30;14614:34;14594:18;;;14587:62;-1:-1:-1;;;14665:18:1;;;14658:45;14720:19;;6239:83:0;14508:237:1;6239:83:0;6333:26;6345:4;6351:7;6333:11;:26::i;10066:215::-;4344:10;10154:4;10203:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;10203:34:0;;;;;;;;;;10154:4;;10171:80;;10194:7;;10203:47;;10240:10;;10203:47;:::i;:::-;10171:8;:80::i;22371:283::-;22444:14;22440:207;22476:8;:15;22464:9;:27;22440:207;;;22524:8;22533:9;22524:19;;;;;;-1:-1:-1;;;22524:19:0;;;;;;;;;;;;;;;22547:1;22524:24;22521:72;;;22569:8;;22521:72;22607:28;22615:8;22624:9;22615:19;;;;;;-1:-1:-1;;;22615:19:0;;;;;;;;;;;;;;;22607:7;:28::i;:::-;22493:11;;;;:::i;:::-;;;;22440:207;;17313:134;17359:12;17384:33;4344:10;17410:6;17384:11;:33::i;:::-;-1:-1:-1;17435:4:0;17313:134;;;:::o;21390:973::-;21451:6;;-1:-1:-1;;;21451:6:0;;;;21450:7;21442:42;;;;-1:-1:-1;;;21442:42:0;;;;;;;:::i;:::-;21503:19;;-1:-1:-1;;;;;21503:19:0;21495:45;4344:10;21563:4;21570:7;21495:83;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21605:19:0;;21597:45;;-1:-1:-1;;;21597:45:0;;;;;7877:25:1;;;21654:4:0;;-1:-1:-1;;;;;;21605:19:0;;;;-1:-1:-1;21597:36:0;;7850:18:1;;21597:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21597:62:0;;21589:103;;;;-1:-1:-1;;;21589:103:0;;;;;;;:::i;:::-;4344:10;21703:26;21732:24;;;:10;:24;;;;;;;;:33;;;;;;;;21799:12;21776:35;;;21822:23;;;;:38;;;;21871:22;;;:29;;-1:-1:-1;;21871:29:0;;;;;;21914:34;;;:20;:34;;;;;;21911:92;;21990:1;21969:17;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;21911:92:0;4344:10;22013:34;;;;:20;:34;;;;;:39;;22051:1;;22013:34;:39;;22051:1;;22013:39;:::i;:::-;;;;;;;;22081:1;22063:14;;:19;;;;;;;:::i;:::-;;;;-1:-1:-1;;4344:10:0;22093:36;;;;:22;:36;;;;;;;:50;;;;;;;;;;;;;;;;;;22184:36;;;:43;;22093:36;;22184:47;;;:::i;:::-;22242:41;;;;:32;:41;;;;;:63;;;;-1:-1:-1;22321:34:0;4344:10;22333:12;4264:98;22953:283;23026:14;23022:207;23058:8;:15;23046:9;:27;23022:207;;;23106:8;23115:9;23106:19;;;;;;-1:-1:-1;;;23106:19:0;;;;;;;;;;;;;;;23129:1;23106:24;23103:72;;;23151:8;;23103:72;23189:28;23197:8;23206:9;23197:19;;;;;;-1:-1:-1;;;23197:19:0;;;;;;;;;;;;;;;23189:7;:28::i;:::-;23075:11;;;;:::i;:::-;;;;23022:207;;29870:173;-1:-1:-1;;;;;;;;;;;4800:30:0;13219:32;4344:10;4817:12;4264:98;4800:30;-1:-1:-1;29987:29:0::1;:48:::0;29870:173::o;27189:802::-;27288:1;27246:39;4344:10;27277:7;27246:16;:39::i;:::-;:43;27243:92;;;27305:18;27315:7;27305:9;:18::i;:::-;4344:10;27345:26;27374:24;;;:10;:24;;;;;;;;:33;;;;;;;;;;27418:22;;;:30;;-1:-1:-1;;27418:30:0;;;27467:19;;27459:83;;-1:-1:-1;;;27459:83:0;;27374:33;;-1:-1:-1;;;;;27467:19:0;;;;27459:45;;:83;;27513:4;;27374:33;;27459:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27610:12;4344:10;4264:98;;27610:12;27569:19;;27561:45;;-1:-1:-1;;;27561:45:0;;;;;7877:25:1;;;-1:-1:-1;;;;;27561:61:0;;;;27569:19;;;;27561:36;;7850:18:1;;27561:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27561:61:0;;27553:102;;;;-1:-1:-1;;;27553:102:0;;;;;;;:::i;:::-;4344:10;27669:34;;;;:20;:34;;;;;;27707:1;27669:39;27666:92;;;27745:1;27724:17;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;27666:92:0;4344:10;27768:34;;;;:20;:34;;;;;:39;;27806:1;;27768:34;:39;;27806:1;;27768:39;:::i;:::-;;;;;;;;27836:1;27818:14;;:19;;;;;;;:::i;:::-;;;;-1:-1:-1;;4344:10:0;27930:1;27848:36;;;:22;:36;;;;;;;;27885:41;;;:32;:41;;;;;;27848:79;;;;;;-1:-1:-1;;;27848:79:0;;;;;;;;;;;;;;;;;;:83;27947:36;4344:10;27961:12;4264:98;29691:173;-1:-1:-1;;;;;;;;;;;4800:30:0;13219:32;4344:10;4817:12;4264:98;4800:30;-1:-1:-1;29808:29:0::1;:48:::0;29691:173::o;26029:342::-;-1:-1:-1;;;;;26114:28:0;;26086:25;26114:28;;;:22;:28;;;;;;;;26086:56;;;;;;;;;;;;;;;;;;;26114:28;;26086:56;;;26114:28;26086:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26159:14;26155:209;26191:8;:15;26179:9;:27;26155:209;;;26239:8;26248:9;26239:19;;;;;;-1:-1:-1;;;26239:19:0;;;;;;;;;;;;;;;26262:1;26239:24;26236:72;;;26284:8;;26236:72;26322:30;26332:8;26341:9;26332:19;;;;;;-1:-1:-1;;;26332:19:0;;;;;;;;;;;;;;;26322:9;:30::i;:::-;26208:11;;;;:::i;:::-;;;;26155:209;;25681:342;-1:-1:-1;;;;;25766:28:0;;25738:25;25766:28;;;:22;:28;;;;;;;;25738:56;;;;;;;;;;;;;;;;;;;25766:28;;25738:56;;;25766:28;25738:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25811:14;25807:209;25843:8;:15;25831:9;:27;25807:209;;;25891:8;25900:9;25891:19;;;;;;-1:-1:-1;;;25891:19:0;;;;;;;;;;;;;;;25914:1;25891:24;25888:72;;;25936:8;;25888:72;25974:30;25984:8;25993:9;25984:19;;;;;;-1:-1:-1;;;25984:19:0;;;;;;;;;;;;;;;25974:9;:30::i;:::-;25860:11;;;;:::i;:::-;;;;25807:209;;5066:139;5144:4;5168:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;5168:29:0;;;;;;;;;;;;;;;5066:139::o;8638:104::-;8694:13;8727:7;8720:14;;;;;:::i;17167:138::-;-1:-1:-1;;;;;17268:29:0;;;;;;:22;:29;;;;;;;;;17261:36;;;;;;;;;;;;;;;;;17233:16;;17261:36;;;17268:29;17261:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17167:138;;;:::o;30049:173::-;-1:-1:-1;;;;;;;;;;;4800:30:0;13219:32;4344:10;4817:12;4264:98;4800:30;-1:-1:-1;30166:29:0::1;:48:::0;30049:173::o;23244:690::-;23307:6;;-1:-1:-1;;;23307:6:0;;;;23306:7;23298:42;;;;-1:-1:-1;;;23298:42:0;;;;;;;:::i;:::-;4344:10;23351:26;23380:24;;;:10;:24;;;;;;;;:33;;;;;;;;;23453:39;;23380:33;23453:16;:39::i;:::-;23424:68;;23503:14;23520:13;8934:12;;8846:108;;23520:13;23503:30;;23573:1;23552:18;:22;23544:57;;;;-1:-1:-1;;;23544:57:0;;;;;;;:::i;:::-;23615:22;;23612:315;;23693:9;;23662:27;23671:18;23662:6;:27;:::i;:::-;:40;;23654:82;;;;-1:-1:-1;;;23654:82:0;;;;;;;:::i;:::-;23777:12;23751:23;;;:38;23804:39;4344:10;23810:12;23824:18;23804:5;:39::i;:::-;23863:52;4344:10;23882:12;23863:52;;;-1:-1:-1;;;;;6812:32:1;;;6794:51;;6876:2;6861:18;;6854:34;;;6767:18;23863:52:0;;;;;;;23612:315;23244:690;;;;:::o;29103:287::-;29178:14;29174:209;29210:8;:15;29198:9;:27;29174:209;;;29258:8;29267:9;29258:19;;;;;;-1:-1:-1;;;29258:19:0;;;;;;;;;;;;;;;29281:1;29258:24;29255:72;;;29303:8;;29255:72;29341:30;29351:8;29360:9;29351:19;;;;;;-1:-1:-1;;;29351:19:0;;;;;;;;;;;;;;;29341:9;:30::i;:::-;29227:11;;;;:::i;:::-;;;;29174:209;;10287:411;4344:10;10380:4;10424:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;10424:34:0;;;;;;;;;;10477:35;;;;10469:85;;;;-1:-1:-1;;;10469:85:0;;14130:2:1;10469:85:0;;;14112:21:1;14169:2;14149:18;;;14142:30;14208:34;14188:18;;;14181:62;-1:-1:-1;;;14259:18:1;;;14252:35;14304:19;;10469:85:0;14102:227:1;10469:85:0;10590:67;4344:10;10613:7;10641:15;10622:16;:34;10590:8;:67::i;:::-;-1:-1:-1;10686:4:0;;10287:411;-1:-1:-1;;;10287:411:0:o;9093:175::-;9179:4;9196:42;4344:10;9220:9;9231:6;9196:9;:42::i;30393:157::-;-1:-1:-1;;;;;;;;;;;4800:30:0;13219:32;4344:10;4817:12;4264:98;4800:30;-1:-1:-1;30502:25:0::1;:40:::0;30393:157::o;15031:60::-;;;;;;;;;;;;;;;;;;;;17455:651;-1:-1:-1;;;;;17581:17:0;;17534:7;17581:17;;;:10;:17;;;;;;;;:26;;;;;;;;17553:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17649:19;;17553:54;;17623:45;;:80;;-1:-1:-1;17672:22:0;;;;:31;17623:80;17620:120;;;17727:1;17720:8;;;;;17620:120;17750:36;17804:6;:23;;;17789:12;:38;;;;:::i;:::-;17750:77;;17873:29;;17905:1;17873:33;;;;:::i;:::-;17842:28;:64;17838:105;;;17930:1;17923:8;;;;;;17838:105;17953:20;18039:1;18007:29;;17976:28;:60;;;;:::i;:::-;:64;;;;:::i;:::-;17953:87;;18073:25;;18058:12;:40;;;;:::i;17021:138::-;-1:-1:-1;;;;;17122:29:0;;;;;;:22;:29;;;;;;;;;17115:36;;;;;;;;;;;;;;;;;17087:16;;17115:36;;;17122:29;17115:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17021:138;;;:::o;14964:60::-;;;;;;;;;;;;;;;;;;;;23940:689;24003:6;;-1:-1:-1;;;24003:6:0;;;;24002:7;23994:42;;;;-1:-1:-1;;;23994:42:0;;;;;;;:::i;:::-;4344:10;24047:26;24076:24;;;:10;:24;;;;;;;;:33;;;;;;;;;24149:39;;24076:33;24149:16;:39::i;:::-;24120:68;;24199:14;24216:13;8934:12;;8846:108;;24216:13;24199:30;;24269:1;24248:18;:22;24240:56;;;;-1:-1:-1;;;24240:56:0;;;;;;;:::i;:::-;24310:22;;24307:315;;24388:9;;24357:27;24366:18;24357:6;:27;:::i;:::-;:40;;24349:82;;;;-1:-1:-1;;;24349:82:0;;;;;;;:::i;:::-;24472:12;24446:23;;;:38;24499:39;4344:10;24505:12;4264:98;24499:39;24558:52;4344:10;24577:12;4264:98;5996:149;5780:7;5807:12;;;:6;:12;;;;;:22;;;4800:30;4811:4;4344:10;4817:12;4264:98;4800:30;6111:26:::1;6123:4;6129:7;6111:11;:26::i;18769:651::-:0;-1:-1:-1;;;;;18895:17:0;;18848:7;18895:17;;;:10;:17;;;;;;;;:26;;;;;;;;18867:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18963:19;;18867:54;;18937:45;;:80;;-1:-1:-1;18986:22:0;;;;:31;18937:80;18934:120;;;19041:1;19034:8;;;;;18934:120;19064:36;19118:6;:23;;;19103:12;:38;;;;:::i;:::-;19064:77;;19187:29;;19219:1;19187:33;;;;:::i;:::-;19156:28;:64;19152:105;;;19244:1;19237:8;;;;;;19152:105;19267:20;19353:1;19321:29;;19290:28;:60;;;;:::i;:::-;:64;;;;:::i;:::-;19267:87;;19387:25;;19372:12;:40;;;;:::i;30721:231::-;-1:-1:-1;;;;;;;;;;;4800:30:0;13219:32;4344:10;4817:12;4264:98;4800:30;-1:-1:-1;;;;;30833:26:0;::::1;30824:75;;;;-1:-1:-1::0;;;30824:75:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;30910:19:0::1;:34:::0;;-1:-1:-1;;;;;;30910:34:0::1;-1:-1:-1::0;;;;;30910:34:0;;;::::1;::::0;;;::::1;::::0;;30721:231::o;31543:165::-;-1:-1:-1;;;;;;;;;;;4800:30:0;13219:32;4344:10;4817:12;4264:98;4800:30;-1:-1:-1;31656:19:0::1;:44:::0;31543:165::o;26379:802::-;26478:1;26436:39;4344:10;26467:7;26436:16;:39::i;:::-;:43;26433:92;;;26495:18;26505:7;26495:9;:18::i;:::-;4344:10;26535:26;26564:24;;;:10;:24;;;;;;;;:33;;;;;;;;;;26608:22;;;:30;;-1:-1:-1;;26608:30:0;;;26657:19;;26649:83;;-1:-1:-1;;;26649:83:0;;26564:33;;-1:-1:-1;;;;;26657:19:0;;;;26649:45;;:83;;26703:4;;26564:33;;26649:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26800:12;4344:10;4264:98;;26800:12;26759:19;;26751:45;;-1:-1:-1;;;26751:45:0;;;;;7877:25:1;;;-1:-1:-1;;;;;26751:61:0;;;;26759:19;;;;26751:36;;7850:18:1;;26751:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26751:61:0;;26743:102;;;;-1:-1:-1;;;26743:102:0;;;;;;;:::i;:::-;4344:10;26859:34;;;;:20;:34;;;;;;26897:1;26859:39;26856:92;;;26935:1;26914:17;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;26856:92:0;4344:10;26958:34;;;;:20;:34;;;;;:39;;26996:1;;26958:34;:39;;26996:1;;26958:39;:::i;:::-;;;;;;;;27026:1;27008:14;;:19;;;;;;;:::i;:::-;;;;-1:-1:-1;;4344:10:0;27120:1;27038:36;;;:22;:36;;;;;;;27075:41;;;:32;:41;;;;;;27038:79;;;;;;-1:-1:-1;;;27038:79:0;;;;;;;;;;;;;;;;;;:83;27137:36;4344:10;27151:12;4264:98;24635:690;24698:6;;-1:-1:-1;;;24698:6:0;;;;24697:7;24689:42;;;;-1:-1:-1;;;24689:42:0;;;;;;;:::i;:::-;4344:10;24742:26;24771:24;;;:10;:24;;;;;;;;:33;;;;;;;;;24844:39;;24771:33;24844:16;:39::i;:::-;24815:68;;24894:14;24911:13;8934:12;;8846:108;;24911:13;24894:30;;24964:1;24943:18;:22;24935:57;;;;-1:-1:-1;;;24935:57:0;;;;;;;:::i;:::-;25006:22;;25003:315;;25084:9;;25053:27;25062:18;25053:6;:27;:::i;:::-;:40;;25045:82;;;;-1:-1:-1;;;25045:82:0;;;;;;;:::i;:::-;25168:12;25142:23;;;:38;25195:39;4344:10;25201:12;4264:98;25195:39;25254:52;4344:10;25273:12;4264:98;29396:287;29471:14;29467:209;29503:8;:15;29491:9;:27;29467:209;;;29551:8;29560:9;29551:19;;;;;;-1:-1:-1;;;29551:19:0;;;;;;;;;;;;;;;29574:1;29551:24;29548:72;;;29596:8;;29548:72;29634:30;29644:8;29653:9;29644:19;;;;;;-1:-1:-1;;;29644:19:0;;;;;;;;;;;;;;;29634:9;:30::i;:::-;29520:11;;;;:::i;:::-;;;;29467:209;;28810:287;28885:14;28881:209;28917:8;:15;28905:9;:27;28881:209;;;28965:8;28974:9;28965:19;;;;;;-1:-1:-1;;;28965:19:0;;;;;;;;;;;;;;;28988:1;28965:24;28962:72;;;29010:8;;28962:72;29048:30;29058:8;29067:9;29058:19;;;;;;-1:-1:-1;;;29058:19:0;;;;;;;;;;;;;;;29048:9;:30::i;:::-;28934:11;;;;:::i;:::-;;;;28881:209;;31885:165;-1:-1:-1;;;;;;;;;;;4800:30:0;13219:32;4344:10;4817:12;4264:98;4800:30;-1:-1:-1;31998:19:0::1;:44:::0;31885:165::o;30556:157::-;-1:-1:-1;;;;;;;;;;;4800:30:0;13219:32;4344:10;4817:12;4264:98;4800:30;-1:-1:-1;30665:25:0::1;:40:::0;30556:157::o;5211:497::-;5292:22;5300:4;5306:7;5292;:22::i;:::-;5287:414;;5480:41;5508:7;-1:-1:-1;;;;;5480:41:0;5518:2;5480:19;:41::i;:::-;5594:38;5622:4;5629:2;5594:19;:38::i;:::-;5385:270;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;5385:270:0;;;;;;;;;;-1:-1:-1;;;5331:358:0;;;;;;;:::i;12425:378::-;-1:-1:-1;;;;;12561:19:0;;12553:68;;;;-1:-1:-1;;;12553:68:0;;13725:2:1;12553:68:0;;;13707:21:1;13764:2;13744:18;;;13737:30;13803:34;13783:18;;;13776:62;-1:-1:-1;;;13854:18:1;;;13847:34;13898:19;;12553:68:0;13697:226:1;12553:68:0;-1:-1:-1;;;;;12640:21:0;;12632:68;;;;-1:-1:-1;;;12632:68:0;;10229:2:1;12632:68:0;;;10211:21:1;10268:2;10248:18;;;10241:30;10307:34;10287:18;;;10280:62;-1:-1:-1;;;10358:18:1;;;10351:32;10400:19;;12632:68:0;10201:224:1;12632:68:0;-1:-1:-1;;;;;12711:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;12763:32;;7877:25:1;;;12763:32:0;;7850:18:1;12763:32:0;;;;;;;12425:378;;;:::o;10704:725::-;-1:-1:-1;;;;;10844:20:0;;10836:70;;;;-1:-1:-1;;;10836:70:0;;13319:2:1;10836:70:0;;;13301:21:1;13358:2;13338:18;;;13331:30;13397:34;13377:18;;;13370:62;-1:-1:-1;;;13448:18:1;;;13441:35;13493:19;;10836:70:0;13291:227:1;10836:70:0;-1:-1:-1;;;;;10925:23:0;;10917:71;;;;-1:-1:-1;;;10917:71:0;;9071:2:1;10917:71:0;;;9053:21:1;9110:2;9090:18;;;9083:30;9149:34;9129:18;;;9122:62;-1:-1:-1;;;9200:18:1;;;9193:33;9243:19;;10917:71:0;9043:225:1;10917:71:0;-1:-1:-1;;;;;11081:17:0;;11057:21;11081:17;;;;;;;;;;;11117:23;;;;11109:74;;;;-1:-1:-1;;;11109:74:0;;11393:2:1;11109:74:0;;;11375:21:1;11432:2;11412:18;;;11405:30;11471:34;11451:18;;;11444:62;-1:-1:-1;;;11522:18:1;;;11515:36;11568:19;;11109:74:0;11365:228:1;11109:74:0;-1:-1:-1;;;;;11219:17:0;;;:9;:17;;;;;;;;;;;11239:22;;;11219:42;;11283:20;;;;;;;;:30;;11255:6;;11219:9;11283:30;;11255:6;;11283:30;:::i;:::-;;;;;;;;11346:9;-1:-1:-1;;;;;11329:35:0;11338:6;-1:-1:-1;;;;;11329:35:0;;11357:6;11329:35;;;;7877:25:1;;7865:2;7850:18;;7832:76;11329:35:0;;;;;;;;11375:46;25333:342;6748:238;6832:22;6840:4;6846:7;6832;:22::i;:::-;6827:152;;6871:12;;;;:6;:12;;;;;;;;-1:-1:-1;;;;;6871:29:0;;;;;;;;;:36;;-1:-1:-1;;6871:36:0;6903:4;6871:36;;;6954:12;4344:10;4264:98;;6954:12;-1:-1:-1;;;;;6927:40:0;6945:7;-1:-1:-1;;;;;6927:40:0;6939:4;6927:40;;;;;;;;;;6748:238;;:::o;6992:239::-;7076:22;7084:4;7090:7;7076;:22::i;:::-;7072:152;;;7147:5;7115:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;7115:29:0;;;;;;;;;;:37;;-1:-1:-1;;7115:37:0;;;7172:40;4344:10;;7115:12;;7172:40;;7147:5;7172:40;6992:239;;:::o;11834:583::-;-1:-1:-1;;;;;11918:21:0;;11910:67;;;;-1:-1:-1;;;11910:67:0;;12917:2:1;11910:67:0;;;12899:21:1;12956:2;12936:18;;;12929:30;12995:34;12975:18;;;12968:62;-1:-1:-1;;;13046:18:1;;;13039:31;13087:19;;11910:67:0;12889:223:1;11910:67:0;-1:-1:-1;;;;;12073:18:0;;12048:22;12073:18;;;;;;;;;;;12110:24;;;;12102:71;;;;-1:-1:-1;;;12102:71:0;;9475:2:1;12102:71:0;;;9457:21:1;9514:2;9494:18;;;9487:30;9553:34;9533:18;;;9526:62;-1:-1:-1;;;9604:18:1;;;9597:32;9646:19;;12102:71:0;9447:224:1;12102:71:0;-1:-1:-1;;;;;12209:18:0;;:9;:18;;;;;;;;;;12230:23;;;12209:44;;12275:12;:22;;12247:6;;12209:9;12275:22;;12247:6;;12275:22;:::i;:::-;;;;-1:-1:-1;;12313:37:0;;7877:25:1;;;12339:1:0;;-1:-1:-1;;;;;12313:37:0;;;;;7865:2:1;7850:18;12313:37:0;;;;;;;12361:48;25333:342;11435:393;-1:-1:-1;;;;;11519:21:0;;11511:65;;;;-1:-1:-1;;;11511:65:0;;14952:2:1;11511:65:0;;;14934:21:1;14991:2;14971:18;;;14964:30;15030:33;15010:18;;;15003:61;15081:18;;11511:65:0;14924:181:1;11511:65:0;11663:6;11647:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;11680:18:0;;:9;:18;;;;;;;;;;:28;;11702:6;;11680:9;:28;;11702:6;;11680:28;:::i;:::-;;;;-1:-1:-1;;11724:37:0;;7877:25:1;;;-1:-1:-1;;;;;11724:37:0;;;11741:1;;11724:37;;7865:2:1;7850:18;11724:37:0;;;;;;;11772:48;25333:342;3076:451;3151:13;3177:19;3209:10;3213:6;3209:1;:10;:::i;:::-;:14;;3222:1;3209:14;:::i;:::-;3199:25;;;;;;-1:-1:-1;;;3199:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3199:25:0;;3177:47;;-1:-1:-1;;;3235:6:0;3242:1;3235:9;;;;;;-1:-1:-1;;;3235:9:0;;;;;;;;;;;;:15;-1:-1:-1;;;;;3235:15:0;;;;;;;;;-1:-1:-1;;;3261:6:0;3268:1;3261:9;;;;;;-1:-1:-1;;;3261:9:0;;;;;;;;;;;;:15;-1:-1:-1;;;;;3261:15:0;;;;;;;;-1:-1:-1;3292:9:0;3304:10;3308:6;3304:1;:10;:::i;:::-;:14;;3317:1;3304:14;:::i;:::-;3292:26;;3287:135;3324:1;3320;:5;3287:135;;;-1:-1:-1;;;3372:5:0;3380:3;3372:11;3359:25;;;;;-1:-1:-1;;;3359:25:0;;;;;;;;;;;;3347:6;3354:1;3347:9;;;;;;-1:-1:-1;;;3347:9:0;;;;;;;;;;;;:37;-1:-1:-1;;;;;3347:37:0;;;;;;;;-1:-1:-1;3409:1:0;3399:11;;;;;3327:3;;;:::i;:::-;;;3287:135;;;-1:-1:-1;3440:10:0;;3432:55;;;;-1:-1:-1;;;3432:55:0;;8710:2:1;3432:55:0;;;8692:21:1;;;8729:18;;;8722:30;8788:34;8768:18;;;8761:62;8840:18;;3432:55:0;8682:182:1;3432:55:0;3512:6;3076:451;-1:-1:-1;;;3076:451:0:o;14:257:1:-;;126:2;114:9;105:7;101:23;97:32;94:2;;;147:6;139;132:22;94:2;191:9;178:23;210:31;235:5;210:31;:::i;276:261::-;;399:2;387:9;378:7;374:23;370:32;367:2;;;420:6;412;405:22;367:2;457:9;451:16;476:31;501:5;476:31;:::i;542:398::-;;;671:2;659:9;650:7;646:23;642:32;639:2;;;692:6;684;677:22;639:2;736:9;723:23;755:31;780:5;755:31;:::i;:::-;805:5;-1:-1:-1;862:2:1;847:18;;834:32;875:33;834:32;875:33;:::i;:::-;927:7;917:17;;;629:311;;;;;:::o;945:466::-;;;;1091:2;1079:9;1070:7;1066:23;1062:32;1059:2;;;1112:6;1104;1097:22;1059:2;1156:9;1143:23;1175:31;1200:5;1175:31;:::i;:::-;1225:5;-1:-1:-1;1282:2:1;1267:18;;1254:32;1295:33;1254:32;1295:33;:::i;:::-;1049:362;;1347:7;;-1:-1:-1;;;1401:2:1;1386:18;;;;1373:32;;1049:362::o;1416:1153::-;;;;;1588:3;1576:9;1567:7;1563:23;1559:33;1556:2;;;1610:6;1602;1595:22;1556:2;1654:9;1641:23;1673:31;1698:5;1673:31;:::i;:::-;1723:5;-1:-1:-1;1747:2:1;1786:18;;;1773:32;1814:33;1773:32;1814:33;:::i;:::-;1866:7;-1:-1:-1;1920:2:1;1905:18;;1892:32;;-1:-1:-1;1975:2:1;1960:18;;1947:32;1998:18;2028:14;;;2025:2;;;2060:6;2052;2045:22;2025:2;2103:6;2092:9;2088:22;2078:32;;2148:7;2141:4;2137:2;2133:13;2129:27;2119:2;;2175:6;2167;2160:22;2119:2;2216;2203:16;2238:2;2234;2231:10;2228:2;;;2244:18;;:::i;:::-;2286:53;2329:2;2310:13;;-1:-1:-1;;2306:27:1;2302:36;;2286:53;:::i;:::-;2273:66;;2362:2;2355:5;2348:17;2402:7;2397:2;2392;2388;2384:11;2380:20;2377:33;2374:2;;;2428:6;2420;2413:22;2374:2;2488;2483;2479;2475:11;2470:2;2463:5;2459:14;2446:45;2511:14;;2507:23;;;2500:39;;;;1546:1023;;;;-1:-1:-1;1546:1023:1;;-1:-1:-1;;1546:1023:1:o;2574:325::-;;;2703:2;2691:9;2682:7;2678:23;2674:32;2671:2;;;2724:6;2716;2709:22;2671:2;2768:9;2755:23;2787:31;2812:5;2787:31;:::i;:::-;2837:5;2889:2;2874:18;;;;2861:32;;-1:-1:-1;;;2661:238:1:o;2904:1003::-;;3019:2;3062;3050:9;3041:7;3037:23;3033:32;3030:2;;;3083:6;3075;3068:22;3030:2;3128:9;3115:23;3157:18;3198:2;3190:6;3187:14;3184:2;;;3219:6;3211;3204:22;3184:2;3262:6;3251:9;3247:22;3237:32;;3307:7;3300:4;3296:2;3292:13;3288:27;3278:2;;3334:6;3326;3319:22;3278:2;3375;3362:16;3397:2;3393;3390:10;3387:2;;;3403:18;;:::i;:::-;3450:2;3446;3442:11;3432:21;;3473:28;3497:2;3493;3489:11;3473:28;:::i;:::-;3535:15;;;3566:12;;;;3598:11;;;3628;;;3624:20;;3621:33;-1:-1:-1;3618:2:1;;;3672:6;3664;3657:22;3618:2;3699:6;3690:15;;3714:163;3728:2;3725:1;3722:9;3714:163;;;3785:17;;3773:30;;3746:1;3739:9;;;;;3823:12;;;;3855;;3714:163;;;-1:-1:-1;3896:5:1;2999:908;-1:-1:-1;;;;;;;;2999:908:1:o;3912:293::-;;4021:2;4009:9;4000:7;3996:23;3992:32;3989:2;;;4042:6;4034;4027:22;3989:2;4086:9;4073:23;4139:5;4132:13;4125:21;4118:5;4115:32;4105:2;;4166:6;4158;4151:22;4210:190;;4322:2;4310:9;4301:7;4297:23;4293:32;4290:2;;;4343:6;4335;4328:22;4290:2;-1:-1:-1;4371:23:1;;4280:120;-1:-1:-1;4280:120:1:o;4405:325::-;;;4534:2;4522:9;4513:7;4509:23;4505:32;4502:2;;;4555:6;4547;4540:22;4502:2;4596:9;4583:23;4573:33;;4656:2;4645:9;4641:18;4628:32;4669:31;4694:5;4669:31;:::i;4735:306::-;;4846:2;4834:9;4825:7;4821:23;4817:32;4814:2;;;4867:6;4859;4852:22;4814:2;4898:23;;-1:-1:-1;;;;;;4950:32:1;;4940:43;;4930:2;;5002:6;4994;4987:22;5241:786;;5652:25;5647:3;5640:38;5707:6;5701:13;5723:62;5778:6;5773:2;5768:3;5764:12;5757:4;5749:6;5745:17;5723:62;:::i;:::-;-1:-1:-1;;;5844:2:1;5804:16;;;5836:11;;;5829:40;5894:13;;5916:63;5894:13;5965:2;5957:11;;5950:4;5938:17;;5916:63;:::i;:::-;5999:17;6018:2;5995:26;;5630:397;-1:-1:-1;;;;5630:397:1:o;6240:375::-;-1:-1:-1;;;;;6498:15:1;;;6480:34;;6550:15;;;;6545:2;6530:18;;6523:43;6597:2;6582:18;;6575:34;;;;6430:2;6415:18;;6397:218::o;6899:635::-;7070:2;7122:21;;;7192:13;;7095:18;;;7214:22;;;6899:635;;7070:2;7293:15;;;;7267:2;7252:18;;;6899:635;7339:169;7353:6;7350:1;7347:13;7339:169;;;7414:13;;7402:26;;7483:15;;;;7448:12;;;;7375:1;7368:9;7339:169;;;-1:-1:-1;7525:3:1;;7050:484;-1:-1:-1;;;;;;7050:484:1:o;8120:383::-;;8269:2;8258:9;8251:21;8301:6;8295:13;8344:6;8339:2;8328:9;8324:18;8317:34;8360:66;8419:6;8414:2;8403:9;8399:18;8394:2;8386:6;8382:15;8360:66;:::i;:::-;8487:2;8466:15;-1:-1:-1;;8462:29:1;8447:45;;;;8494:2;8443:54;;8241:262;-1:-1:-1;;8241:262:1:o;9676:346::-;9878:2;9860:21;;;9917:2;9897:18;;;9890:30;-1:-1:-1;;;9951:2:1;9936:18;;9929:52;10013:2;9998:18;;9850:172::o;10430:399::-;10632:2;10614:21;;;10671:2;10651:18;;;10644:30;10710:34;10705:2;10690:18;;10683:62;-1:-1:-1;;;10776:2:1;10761:18;;10754:33;10819:3;10804:19;;10604:225::o;10834:352::-;11036:2;11018:21;;;11075:2;11055:18;;;11048:30;11114;11109:2;11094:18;;11087:58;11177:2;11162:18;;11008:178::o;11598:345::-;11800:2;11782:21;;;11839:2;11819:18;;;11812:30;-1:-1:-1;;;11873:2:1;11858:18;;11851:51;11934:2;11919:18;;11772:171::o;11948:353::-;12150:2;12132:21;;;12189:2;12169:18;;;12162:30;12228:31;12223:2;12208:18;;12201:59;12292:2;12277:18;;12122:179::o;15815:275::-;15886:2;15880:9;15951:2;15932:13;;-1:-1:-1;;15928:27:1;15916:40;;15986:18;15971:34;;16007:22;;;15968:62;15965:2;;;16033:18;;:::i;:::-;16069:2;16062:22;15860:230;;-1:-1:-1;15860:230:1:o;16095:128::-;;16166:1;16162:6;16159:1;16156:13;16153:2;;;16172:18;;:::i;:::-;-1:-1:-1;16208:9:1;;16143:80::o;16228:217::-;;16294:1;16284:2;;-1:-1:-1;;;16319:31:1;;16373:4;16370:1;16363:15;16401:4;16326:1;16391:15;16284:2;-1:-1:-1;16430:9:1;;16274:171::o;16450:168::-;;16556:1;16552;16548:6;16544:14;16541:1;16538:21;16533:1;16526:9;16519:17;16515:45;16512:2;;;16563:18;;:::i;:::-;-1:-1:-1;16603:9:1;;16502:116::o;16623:125::-;;16691:1;16688;16685:8;16682:2;;;16696:18;;:::i;:::-;-1:-1:-1;16733:9:1;;16672:76::o;16753:258::-;16825:1;16835:113;16849:6;16846:1;16843:13;16835:113;;;16925:11;;;16919:18;16906:11;;;16899:39;16871:2;16864:10;16835:113;;;16966:6;16963:1;16960:13;16957:2;;;-1:-1:-1;;17001:1:1;16983:16;;16976:27;16806:205::o;17016:136::-;;17083:5;17073:2;;17092:18;;:::i;:::-;-1:-1:-1;;;17128:18:1;;17063:89::o;17157:380::-;17242:1;17232:12;;17289:1;17279:12;;;17300:2;;17354:4;17346:6;17342:17;17332:27;;17300:2;17407;17399:6;17396:14;17376:18;17373:38;17370:2;;;17453:10;17448:3;17444:20;17441:1;17434:31;17488:4;17485:1;17478:15;17516:4;17513:1;17506:15;17370:2;;17212:325;;;:::o;17542:135::-;;-1:-1:-1;;17602:17:1;;17599:2;;;17622:18;;:::i;:::-;-1:-1:-1;17669:1:1;17658:13;;17589:88::o;17682:127::-;17743:10;17738:3;17734:20;17731:1;17724:31;17774:4;17771:1;17764:15;17798:4;17795:1;17788:15;17814:127;17875:10;17870:3;17866:20;17863:1;17856:31;17906:4;17903:1;17896:15;17930:4;17927:1;17920:15;17946:131;-1:-1:-1;;;;;18021:31:1;;18011:42;;18001:2;;18067:1;18064;18057:12;18001:2;17991:86;:::o

Swarm Source

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