S Price: $0.066521 (-1.48%)
Gas: 55 Gwei

Contract

0x9De967DDaD2dB8191ED094e7C19C55805EC65E3B

Overview

S Balance

Sonic LogoSonic LogoSonic Logo0 S

S Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Block
From
To
Withdraw443457112025-08-24 16:22:11155 days ago1756052531IN
0x9De967DD...05EC65E3B
0 S0.0040455.02
Withdraw Gas443452942025-08-24 16:18:06155 days ago1756052286IN
0x9De967DD...05EC65E3B
0 S0.0019786855.02
Set State443229712025-08-24 11:51:38155 days ago1756036298IN
0x9De967DD...05EC65E3B
0 S0.0028219955
Set State443229462025-08-24 11:51:19155 days ago1756036279IN
0x9De967DD...05EC65E3B
0 S0.0028219955
Close Position443229342025-08-24 11:51:14155 days ago1756036274IN
0x9De967DD...05EC65E3B
0 S0.1590328855
Set State443083252025-08-24 7:34:40156 days ago1756020880IN
0x9De967DD...05EC65E3B
0 S0.0028206755
Open Position443083212025-08-24 7:34:27156 days ago1756020867IN
0x9De967DD...05EC65E3B
0 S0.0326998655
Swap443083172025-08-24 7:34:13156 days ago1756020853IN
0x9De967DD...05EC65E3B
0 S0.0120685955
Set State443082912025-08-24 7:33:50156 days ago1756020830IN
0x9De967DD...05EC65E3B
0 S0.0028219955
Close Position443082832025-08-24 7:33:45156 days ago1756020825IN
0x9De967DD...05EC65E3B
0 S0.1580941455
Set State442294592025-08-23 12:32:12156 days ago1755952332IN
0x9De967DD...05EC65E3B
0 S0.0028206755
Increase Positio...442294542025-08-23 12:32:07156 days ago1755952327IN
0x9De967DD...05EC65E3B
0 S0.0154777755
Swap442294442025-08-23 12:32:03156 days ago1755952323IN
0x9De967DD...05EC65E3B
0 S0.0120674455
Open Position442294382025-08-23 12:31:58156 days ago1755952318IN
0x9De967DD...05EC65E3B
0 S0.0283253855
Swap442294352025-08-23 12:31:53156 days ago1755952313IN
0x9De967DD...05EC65E3B
0 S0.0120710155
Set State442294052025-08-23 12:31:34156 days ago1755952294IN
0x9De967DD...05EC65E3B
0 S0.0028219955
Close Position442293972025-08-23 12:31:30156 days ago1755952290IN
0x9De967DD...05EC65E3B
0 S0.1590328855
Set State441733402025-08-23 2:35:01157 days ago1755916501IN
0x9De967DD...05EC65E3B
0 S0.0028206755
Open Position441733292025-08-23 2:34:56157 days ago1755916496IN
0x9De967DD...05EC65E3B
0 S0.0335303655
Swap441733162025-08-23 2:34:51157 days ago1755916491IN
0x9De967DD...05EC65E3B
0 S0.0128493255
Set State441732672025-08-23 2:34:32157 days ago1755916472IN
0x9De967DD...05EC65E3B
0 S0.0028219955
Close Position441732582025-08-23 2:34:28157 days ago1755916468IN
0x9De967DD...05EC65E3B
0 S0.157149955
Set State441508822025-08-22 22:21:16157 days ago1755901276IN
0x9De967DD...05EC65E3B
0 S0.0028206755
Increase Positio...441508692025-08-22 22:21:11157 days ago1755901271IN
0x9De967DD...05EC65E3B
0 S0.0154777755
Swap441508572025-08-22 22:21:06157 days ago1755901266IN
0x9De967DD...05EC65E3B
0 S0.012064855
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
443452942025-08-24 16:18:06155 days ago1756052286
0x9De967DD...05EC65E3B
0.9862377 S
443229712025-08-24 11:51:38155 days ago1756036298
0x9De967DD...05EC65E3B
0.00227221 S
443229462025-08-24 11:51:19155 days ago1756036279
0x9De967DD...05EC65E3B
0.00227221 S
443229342025-08-24 11:51:14155 days ago1756036274
0x9De967DD...05EC65E3B
0.16406351 S
443083252025-08-24 7:34:40156 days ago1756020880
0x9De967DD...05EC65E3B
0.00227221 S
443083212025-08-24 7:34:27156 days ago1756020867
0x9De967DD...05EC65E3B
0.03563257 S
443083172025-08-24 7:34:13156 days ago1756020853
0x9De967DD...05EC65E3B
0.01453584 S
443082912025-08-24 7:33:50156 days ago1756020830
0x9De967DD...05EC65E3B
0.00227221 S
443082832025-08-24 7:33:45156 days ago1756020825
0x9De967DD...05EC65E3B
0.16312477 S
442294592025-08-23 12:32:12156 days ago1755952332
0x9De967DD...05EC65E3B
0.00227221 S
442294542025-08-23 12:32:07156 days ago1755952327
0x9De967DD...05EC65E3B
0.01848715 S
442294442025-08-23 12:32:03156 days ago1755952323
0x9De967DD...05EC65E3B
0.01453435 S
442294382025-08-23 12:31:58156 days ago1755952318
0x9De967DD...05EC65E3B
0.03125809 S
442294352025-08-23 12:31:53156 days ago1755952313
0x9De967DD...05EC65E3B
0.01453886 S
442294052025-08-23 12:31:34156 days ago1755952294
0x9De967DD...05EC65E3B
0.00227221 S
442293972025-08-23 12:31:30156 days ago1755952290
0x9De967DD...05EC65E3B
0.16406351 S
441733402025-08-23 2:35:01157 days ago1755916501
0x9De967DD...05EC65E3B
0.00227221 S
441733292025-08-23 2:34:56157 days ago1755916496
0x9De967DD...05EC65E3B
0.03563257 S
441733162025-08-23 2:34:51157 days ago1755916491
0x9De967DD...05EC65E3B
0.01551176 S
441732672025-08-23 2:34:32157 days ago1755916472
0x9De967DD...05EC65E3B
0.00227221 S
441732582025-08-23 2:34:28157 days ago1755916468
0x9De967DD...05EC65E3B
0.16218053 S
441508822025-08-22 22:21:16157 days ago1755901276
0x9De967DD...05EC65E3B
0.00227221 S
441508692025-08-22 22:21:11157 days ago1755901271
0x9De967DD...05EC65E3B
0.01848715 S
441508572025-08-22 22:21:06157 days ago1755901266
0x9De967DD...05EC65E3B
0.01453105 S
441508502025-08-22 22:21:01157 days ago1755901261
0x9De967DD...05EC65E3B
0.03563609 S
View All Internal Transactions
Cross-Chain Transactions
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x421297F3...ce437d860
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
SdemoniakMagicAgentShadowSmartVault

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 666 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 1 : SdemoniakMagicAgentShadowSmartVault.sol
// File: contracts\ILK\core\interfaces\IDexTools.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;
/**
Interface de base 
 */
interface IDex {
    struct TokenAmount {
        address token;
        uint256 amount;
    }
    function registered(address pool) external view returns (bool);
    function getPath(address tokenA, address tokenB) external view returns (bytes memory path);
    function swap(TokenAmount calldata tokenA, address tokenB, address to) external returns (uint256);
    function openPosition(address pool, TokenAmount memory token0, TokenAmount memory token1, int24 tickLow, int24 tickUp) external returns (uint256 positionID, uint128 liquidity, uint256 amount0, uint256 amount1);
    function increasePosition(uint256 positionID, TokenAmount memory token0, TokenAmount memory token1) external returns (uint128 liquidity, uint256 amount0, uint256 amount1);
    
    //after use SetApproval(address IDex, true).
    function decreasePosition(uint256 positionID, uint128 liquidity) external returns (uint256 amount0, uint256 amount1);
    function closePosition(uint256 positionID) external;
    function showRewards(address pair, uint256 tokenId) external view returns (TokenAmount[] memory tokens);
    function claimRewards(uint256 tokenId, address pair, bool exit) external returns (TokenAmount[] memory tokens);
    function stakeFrom(address pool, uint256 positionID, TokenAmount memory tokenToStake) external returns (uint128);
    function nfpManager() external view returns (address);
}
// File: contracts\openzeppelin\contracts\token\ERC20\IERC20.sol
pragma solidity ^0.8.19;
interface IERC20 {
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, uint256 value) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 value) external returns (bool);
    function transferFrom(address from, address to, uint256 value) external returns (bool);
}
// File: contracts\openzeppelin\contracts\utils\introspection\IERC165.sol
pragma solidity ^0.8.19;
/**
 * @dev Interface of the ERC-165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[ERC].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
// File: contracts\openzeppelin\contracts\token\ERC721\IERC721.sol
pragma solidity ^0.8.19;
/**
 * @dev Required interface of an ERC-721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);
    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);
    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon
     *   a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;
    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC-721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or
     *   {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon
     *   a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(address from, address to, uint256 tokenId) external;
    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC-721
     * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must
     * understand this adds an external call which potentially creates a reentrancy vulnerability.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address from, address to, uint256 tokenId) external;
    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;
    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the address zero.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool approved) external;
    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);
    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);
}
// File: contracts\openzeppelin\contracts\token\ERC721\extensions\IERC721Enumerable.sol
pragma solidity ^0.8.19;
/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);
    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256);
    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}
// File: contracts\openzeppelin\contracts\token\ERC721\IERC721Receiver.sol
pragma solidity ^0.8.19;
/**
 * @title ERC-721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC-721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be
     * reverted.
     *
     * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}
// File: contracts\sdaemon0x\tools\SdemoniakMagicInterfaces.sol
pragma solidity ^0.8.19;
interface IPair {
    function token0() external view returns (address);
    function token1() external view returns (address);
    function tickSpacing() external view returns (int24);
    function slot0() external view returns (uint160 sqrtPriceX96, int24 tick, uint16 observationIndex, uint16 observationCardinality, uint16 observationCardinalityNext, uint8 feeProtocol, bool unlocked);
}
interface IVault {
    function controller() external view returns (address);
    function run() external view returns (bool);
    function setRun(bool go) external;
}
interface IMissionFarmer {
    enum Direction {
        BOTH,
        UP,
        DOWN
    }
    struct Mission {
        uint24      ranges;               
        bool        useTickLimitLow;
        int24       tickLimitLow;
        int24       tickLimitLowOpen;
        bool        useTickLimitHigh;
        int24       tickLimitHigh;
        int24       tickLimitHighOpen;
        Direction   direction;
        bool        autoClaim;
        bool        autoCompound;
    }
    struct Data {
        IPair       pair;
        address     token0;
        address     token1;
        int24       tickSpacing;
    }
    function getMission(uint256 tokenID) external view returns (Mission calldata mission);
    function setMission(uint256 tokenID, Mission calldata mission) external;
    function setRanges(uint256 tokenID, uint24 range) external;
    function setTickLimitLow(uint256 tokenID, bool useTickLimitLow, int24 tickLimitLow, int24 tickLimitLowOpen) external;
    function setTickLimitHigh(uint256 tokenID, bool useTickLimitHigh, int24 tickLimitHigh, int24  tickLimitHighOpen) external;
    function setDirection(uint256 tokenID, Direction dir) external;
    function setAutoClaim(uint256 tokenID, bool toggle) external;
    function setAutoCompound(uint256 tokenID, bool toggle) external;
    
    function setPair(uint256 tokenID, address _pair) external;
    function getData(uint256 tokenID) external view returns (Data calldata data);
    function clone(uint256 from, uint256 to) external;
    function start(uint256 tokenID) external;
    function stop(uint256 tokenID) external;
    function nfpManager(uint256 tokenID) external view returns (address);
    function setDex(uint256 tokenID, IDex newDex) external;
    function getDex(uint256 tokenID) external view returns (IDex);
    function setState(uint256 tokenID, string memory state, bool error_) external; 
}
// File: contracts/sdaemon0x/tools/SdemoniakMagicAgentShadowSmartVault.sol
pragma solidity ^0.8.19;
/**
    Sdemoniak Magic Smart Vault
    Author: Amadeos
    Comment: The core of the sdemoniak agent protocols!
    This contract is the main contract of sdemoniak
    It's a vault available for the NFT holder "Sdemoniak Magic Agent" symbol "Magic"
    This vault contains the bool run settables by the ownerOf ("holder") YOU, IF YOU ARE SMART via the mission.
    Like this, We can check if data is coherent before launch bot.
    This state prevent to manipulate in bad time and to share 'control' with more right to the owner. This last delegate the vault contents to be work by an IA Agent off chain when the state run is on.
        - run off if false:
    In this state, the ownerOf ("holder") of the nft is the only accessors to withdraw ERC20 and NFT.
        - run on is true:
    In this state, the controller (IA Agent off chain) can request to swap, mint, increase, decrease, close position. 
    Only the contract holds always ERC20 and TokenID for position. 
    Token A and token B or Token ID is always in contract.
    In swap, the IA Agent need to mark the rebalance and memoruze to use direction behavior.
    When the position is close, 1 options (auto-claim) the tokenId for the position is sent to the ownerOf ("holder") of the nft
    The owner of the NFT is always able to stop delgation by set state to false.
            .... in 
            function stop(uint256 tokenID) external onlyNftOwner(tokenID) {
                IVault sv = IVault(magicAgent.SmartVaults(tokenID));
                sv.setRun(false);
            }
            ....
*/
interface ISdemoniakMagicFV is IERC721Enumerable {
    function computeDevFee(uint256 amount) external view returns (address dev_, uint256 fee, uint256 rest);
    function computeReferralFee(uint256 tokenId, uint256 amount) external view returns (address ref1, uint256 fee1, address ref2, uint256 fee2, uint256 rest);
    function computeFees(uint256 tokenId, uint256 amount) external view returns (address dev_, uint256 feeDev, address ref1, uint256 fee1, address ref2, uint256 fee2, uint256 rest);
    function addRewards(uint256 tokenId, IDex.TokenAmount[] calldata rewards) external;
}
interface IVaultGas {
    function depositGas() external payable;
}
contract SdemoniakMagicAgentShadowSmartVault is IVault, IVaultGas, IERC165, IERC721Receiver {
    function thanksSonic() external {
        (bool _success,) = address(0xDC2B0D2Dd2b7759D97D50db4eabDC36973110830).call(abi.encodeWithSignature("selfRegister(uint256)", 170));
        require(_success);
    }
    function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165) returns (bool) {
        return interfaceId == type(IERC721Receiver).interfaceId || interfaceId == type(IERC165).interfaceId;
    }
    IMissionFarmer      public constant im = IMissionFarmer(0xDc3F37aC18c5d5Fc9928D70E2D5c00d055B99Cd3);
    address             public constant shadow = 0x3333b97138D4b086720b5aE8A7844b1345a33333;
    ISdemoniakMagicFV   public immutable agentNFT; 
    uint256             public immutable nftId; //the immutable key to link forever to SdemoniakMagicAgent 
    
    address             public controller; //SdeamoniaK wallet controller
    bool                public run = false; 
    IERC721             public nfpManager;
    IDex                public dex;
    IPair               public pair;
    uint256             public positionID;
    int24               public mark_tick;  
    constructor(address parent, uint256 _nftId, address _controller) {
        agentNFT = ISdemoniakMagicFV(parent);
        nftId = _nftId;
        controller = _controller;
    }
    function onERC721Received(address, address from_, uint256 tokenId_, bytes calldata) external returns (bytes4) {
        if (from_ == agentNFT.ownerOf(nftId)) {
            if (msg.sender == im.nfpManager(nftId)) {
                require(!run && positionID == 0);
                positionID = tokenId_;
            }
        }
        return IERC721Receiver.onERC721Received.selector;
    }
    modifier onlyTheOwner() {
        require(msg.sender == agentNFT.ownerOf(nftId));
        _;
    }
    // only via mission.
    function setRun(bool go) external {
        require(msg.sender == address(im)); //only via the mission to run (mission check if base data seems correct)
        if (go) {
            IMissionFarmer.Data memory m = im.getData(nftId);
            dex = im.getDex(nftId);
            nfpManager = IERC721(dex.nfpManager());
            pair = m.pair;
            IERC20 token0 = IERC20(m.token0);
            IERC20 token1 = IERC20(m.token1);
            address d = address(dex);
            token0.approve(d, type(uint256).max);
            token1.approve(d, type(uint256).max);
            nfpManager.setApprovalForAll(d, true);
            uint256 bal0 = token0.balanceOf(address(this));
            uint256 bal1 = token1.balanceOf(address(this));
            require (bal0 + bal1 + positionID > 0);
        }
        run = go;
        if (!run && positionID != 0) {
            if (nfpManager.ownerOf(positionID) == address(this)) {
                _closePosition(false, false);
            }
        }
    }
   
    function _wdERC20(address to, IERC20 token) internal {
        uint256 bal = token.balanceOf(address(this));    
        _wdERC20b(token, to, bal);
    }
    function _wdERC20b(IERC20 token, address to, uint256 amount) internal {
        if (amount > 0 && address(token) != address(0)) token.transfer(to, amount);
    }
    
    function claimCurrentReward(bool autoCompound) external onlyTheOwner {
        _claimCurrentReward(msg.sender, autoCompound);
    }
    function _claimCurrentReward(address to, bool autoCompound) internal {
        require(positionID != 0 && nfpManager.ownerOf(positionID) == address(this));
        IMissionFarmer.Data memory m = im.getData(nftId);
        
        IERC20 token0 = IERC20(m.token0);
        IERC20 token1 = IERC20(m.token1);
        uint256 bal0 = token0.balanceOf(address(this));
        uint256 bal1 = token1.balanceOf(address(this));
        IDex.TokenAmount[] memory tokens = dex.claimRewards(positionID, address(pair), true);
        agentNFT.addRewards(nftId, tokens);
        
        if (!autoCompound) {
            uint256 bal0_b = token0.balanceOf(address(this));
            uint256 bal1_b = token1.balanceOf(address(this));
            if (bal0_b > bal0) token0.transfer(to, bal0_b - bal0);
            if (bal1_b > bal1) token1.transfer(to, bal1_b - bal1);
            _wdERC20(to, IERC20(shadow));
        }
    }
    function depositGas() external payable {
        require(msg.value > 0);
    }
    function withdrawGas() external onlyTheOwner {
        uint256 bal = address(this).balance;
        (bool ok,) = payable(msg.sender).call{value: bal}("");
        require(ok);
    }
    function withdraw() external onlyTheOwner {
        require(!run);
        IMissionFarmer.Data memory m = im.getData(nftId);
        _wdERC20(msg.sender, IERC20(m.token0));
        _wdERC20(msg.sender, IERC20(m.token1));
        _wdERC20(msg.sender, IERC20(shadow));
    }
    function withdrawERC721(IERC721 nft, uint256 id) external onlyTheOwner {
        require(!run);
        require(nft.ownerOf(id) == address(this));
        nft.safeTransferFrom(address(this), msg.sender, id);
        if (nfpManager == nft) {
            if (id == positionID) {
                positionID = 0;
            }
        }
    }
    function recoverERC20(IERC20 token) external onlyTheOwner {
        require(!run);
        _wdERC20(msg.sender, token);
    }
    
    function setControler(address _controller) external {
        require(msg.sender == controller);
        controller = _controller;
    }
    event onGasController(uint256 price);
    modifier onlyTheController() {
        uint256 g = gasleft();
        require(run);
        require(msg.sender == controller);
        _;
        uint256 p = ((g - gasleft()) + 21000) * tx.gasprice;
        (bool ok,) = payable(msg.sender).call{value: p}("");
        require(ok);
        emit onGasController(p);
    }
    function setState(string memory state, bool err) onlyTheController external {
        im.setState(nftId, state, err);
    }
    function swap(address tokenSrc, uint256 amountIn, address token_dst, bool mark) onlyTheController external returns (uint256) {
        if (mark) {
           (,mark_tick,,,,,) = pair.slot0();
        }
        
        IERC20 t = IERC20(tokenSrc);
        (address devl, uint256 fee0, address ref1, uint256 fee1, address ref2, uint256 fee2, uint256 rest) = agentNFT.computeFees(nftId, amountIn);
        _wdERC20b(t, devl, fee0);
        _wdERC20b(t, ref1, fee1);
        _wdERC20b(t, ref2, fee2);
        IDex.TokenAmount memory tam = IDex.TokenAmount(address(t), rest);
        return dex.swap(tam, token_dst, address(this));
    }
    function openPosition(address pool, address token0_addr, address token1_addr, int24 tickLow, int24 tickUp, uint256 amount0, uint256 amount1) onlyTheController external returns (uint256) {
        require(positionID == 0);
        (positionID,,,) = dex.openPosition(pool, IDex.TokenAmount(token0_addr, amount0), IDex.TokenAmount(token1_addr, amount1), tickLow, tickUp);
        return positionID;
    }   
   function increasePosition(IERC20 token0, IERC20 token1) external onlyTheController {
        require(positionID != 0 && nfpManager.ownerOf(positionID) == address(this));
        dex.increasePosition(positionID, IDex.TokenAmount(address(token0), token0.balanceOf(address(this))), IDex.TokenAmount(address(token1), token1.balanceOf(address(this))) );
    }
    function closePosition(bool claimReward, bool autoCompound) external onlyTheController {
        _closePosition(claimReward, autoCompound);
    }
    function _closePosition(bool claimReward, bool autoCompound) internal  {
        require(positionID != 0 && nfpManager.ownerOf(positionID) == address(this));
        //manage reward
        address owner = agentNFT.ownerOf(nftId);
        if (claimReward) {
            _claimCurrentReward(owner, autoCompound);
        }
        else {
            IDex.TokenAmount[] memory tokens = dex.showRewards(address(pair), positionID);
            agentNFT.addRewards(nftId, tokens);
        }
        
        dex.closePosition(positionID);
        nfpManager.safeTransferFrom(address(this), owner, positionID);
        positionID = 0;
    }
}

Settings
{
  "metadata": {
    "appendCBOR": true,
    "bytecodeHash": "ipfs",
    "useLiteralContent": false
  },
  "optimizer": {
    "enabled": true,
    "runs": 666
  },
  "viaIR": true,
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"parent","type":"address"},{"internalType":"uint256","name":"_nftId","type":"uint256"},{"internalType":"address","name":"_controller","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"onGasController","type":"event"},{"inputs":[],"name":"agentNFT","outputs":[{"internalType":"contract ISdemoniakMagicFV","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"autoCompound","type":"bool"}],"name":"claimCurrentReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"claimReward","type":"bool"},{"internalType":"bool","name":"autoCompound","type":"bool"}],"name":"closePosition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"controller","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"depositGas","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"dex","outputs":[{"internalType":"contract IDex","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"im","outputs":[{"internalType":"contract IMissionFarmer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token0","type":"address"},{"internalType":"contract IERC20","name":"token1","type":"address"}],"name":"increasePosition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mark_tick","outputs":[{"internalType":"int24","name":"","type":"int24"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nfpManager","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"from_","type":"address"},{"internalType":"uint256","name":"tokenId_","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"token0_addr","type":"address"},{"internalType":"address","name":"token1_addr","type":"address"},{"internalType":"int24","name":"tickLow","type":"int24"},{"internalType":"int24","name":"tickUp","type":"int24"},{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","type":"uint256"}],"name":"openPosition","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"contract IPair","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"positionID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"recoverERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"run","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_controller","type":"address"}],"name":"setControler","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"go","type":"bool"}],"name":"setRun","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"state","type":"string"},{"internalType":"bool","name":"err","type":"bool"}],"name":"setState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shadow","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenSrc","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address","name":"token_dst","type":"address"},{"internalType":"bool","name":"mark","type":"bool"}],"name":"swap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"thanksSonic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC721","name":"nft","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"withdrawERC721","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawGas","outputs":[],"stateMutability":"nonpayable","type":"function"}]

0x60c0346200014557601f62002db138819003918201601f19168301916001600160401b038311848410176200014a5780849260609460405283398101031262000145576200004d8162000160565b6200006060406020840151930162000160565b600080546001600160a01b0393841660805260a0949094526001600160a81b03199093169116179055604051612c3b908162000176823960805181818161041601528181610b46015281816113160152818161165e0152818161177501528181611c1d01528181611cba01528181611d3601528181611eec015281816120850152612587015260a0518181816103e80152818161065d01528181610a2a01528181610b6901528181610e65015281816112e3015281816116290152818161179701528181611be801528181611cff01528181611eb40152818161205001526124780152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b0382168203620001455756fe608060408181526004918236101561001657600080fd5b60009260e08435811c92836301ffc9a714612107575082631261795d1461202e578263150b7a0214611e4c5782633ccfd60b14611cde5782633fd773e914611c995782634b91c03314611bbc5782635943409814611b325782635f5f62f914611af1578263692058c214611ac85782636c6603141461171b57826398bbc3c7146116f25782639e8c708e146115fd578263a7c1c38b14611276578263a8aa1b311461124d578263ac600a3c1461121d578263ae9bb69214611208578263c0406226146111e2578263c17d504b14610a70578263c52ac0bd14610a4d578263c6bc518214610a11578263ce05f8c7146109f2578263cfd454d314610767578263eef9203a1461059d57848363f3e414f8146103ae57508263f484bec2146101a85750508063f77c4791146101835763fb0ea8351461015257600080fd5b3461017f578160031936011261017f576020905173dc3f37ac18c5d5fc9928d70e2d5c00d055b99cd38152f35b5080fd5b503461017f578160031936011261017f576001600160a01b0360209254169051908152f35b90929150346103aa573660031901126103a6576101c361215b565b916101cc612171565b926101d5612187565b93606435918260020b8093036103a157608435918260020b8093036103a15787925a9484549860ff8a60a01c161561039d576001600160a01b03809a16330361039d57875461039d578960025416938a8a5191610231836121bb565b16815260a43560208201528a8a5192610249846121bb565b16825260c435602083015289519a8b9663ba90a46960e01b885216898701526024860161028891602080916001600160a01b0381511684520151910152565b80516001600160a01b0316606486015260200151608485015260a484015260c4830152815a9360e492608095f193841561039357859461034a575b506102d2908483555a90612444565b90615208820180921161033757506102eb903a90612bc6565b928080808087335af16102fc61223f565b501561033457507fc207673734d386144a4d4247552812844f5d7005d9e3e8f7d80d674b16465fe6602080948351908152a151908152f35b80fd5b634e487b7160e01b855260119052602484fd5b9093506080813d821161038b575b8161036560809383612201565b81010312610387578061037f60206102d293519201612be8565b5093906102c3565b8480fd5b3d9150610358565b83513d87823e3d90fd5b8580fd5b600080fd5b8280fd5b8380fd5b8083863461059957806003193601126105995781356001600160a01b03808216809203610387576024359280516331a9108f60e11b8082527f0000000000000000000000000000000000000000000000000000000000000000878301526020918281602481887f0000000000000000000000000000000000000000000000000000000000000000165afa90811561058f579085918a91610553575b5016330361054f5760ff885460a01c1661054f57825190815285878201528181602481885afa91821561054557889261050b575b5050823091160361039d57823b1561039d578051632142170760e11b81523086820190815233602082015260408101869052909190879083908190606001038183885af190811561050257509086916104ee575b505060015416146104e0575050f35b8154146104ea5750f35b5580f35b6104f7906121ed565b6103875784876104d1565b513d88823e3d90fd5b90809250813d831161053e575b6105228183612201565b8101031261053a576105339061226f565b888061047d565b8680fd5b503d610518565b83513d8a823e3d90fd5b8780fd5b809250848092503d8311610588575b61056c8183612201565b810103126105845761057e859161226f565b8b610449565b8880fd5b503d610562565b84513d8b823e3d90fd5b5050fd5b5083833461017f578060031936011261017f5782359267ffffffffffffffff84116103a657366023850112156103a65783810135936105db85612223565b946105e884519687612201565b80865236602482840101116103875760249291818692602095869301838a0137870101526106146121ac565b5a90855460ff8160a01c161561053a576001600160a01b0316330361039d5773dc3f37ac18c5d5fc9928d70e2d5c00d055b99cd3803b1561053a5785516363adb18760e11b81527f000000000000000000000000000000000000000000000000000000000000000085820152606060248201528851606482018190529092885b8281106107535750928092818a6084828683998484819a8501015215156044830152601f801991011681010301925af1801561074957610735575b50506106dc905a90612444565b90615208820180921161033757506106f5903a90612bc6565b8380808084335af161070561223f565b50156103aa577fc207673734d386144a4d4247552812844f5d7005d9e3e8f7d80d674b16465fe69251908152a180f35b61073e906121ed565b6103875784866106cf565b86513d84823e3d90fd5b8a8101880151858201608401528701610694565b509050346103a657816003193601126103a65761078261215b565b9061078b612171565b5a85549360ff8560a01c161561053a576001600160a01b03809516330361053a57835480151580610976575b1561054f57878680600254169316928851976370a0823160e01b96878a5230898b01526020998a816024818a5afa90811561096c57859161093b575b508b5196610800886121bb565b87528a87015216958951908152308882015288816024818a5afa9081156109315783916108f5575b5091606094939161089861087d9860a4958d5191610845836121bb565b82528c8201528c51998a978896639f71e76160e01b88528d8801526024870190602080916001600160a01b0381511684520151910152565b80516001600160a01b03166064860152602001516084850152565b5af180156108eb576108b1575b6106dc91505a90612444565b6060823d82116108e3575b816108c960609383612201565b8101031261039d576108dd6106dc92612be8565b506108a5565b3d91506108bc565b85513d88823e3d90fd5b80935089809250959492953d831161092a575b6109128183612201565b810103126103a1579051919290918991906060610828565b503d610908565b8a513d85823e3d90fd5b8095508b8092503d8311610965575b6109548183612201565b810103126103a1578b9351386107f3565b503d61094a565b8c513d87823e3d90fd5b506024602087600154168951928380926331a9108f60e11b8252868b8301525afa9081156109e85789916109af575b50861630146107b7565b90506020813d82116109e0575b816109c960209383612201565b81010312610584576109da9061226f565b386109a5565b3d91506109bc565b88513d8b823e3d90fd5b509050346103a657826003193601126103a65760209250549051908152f35b5050503461017f578160031936011261017f57602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b5050503461017f578160031936011261017f5760209060055460020b9051908152f35b509050346103a657602091826003193601126103aa57610a8e61219d565b73dc3f37ac18c5d5fc9928d70e2d5c00d055b99cd380330361039d5781610e63575b5060ff9060ff60a01b865491151560a01b169060ff60a01b19161780865560a01c161580610e59575b610ae1578380f35b6001600160a01b039283600154169383549483516331a9108f60e11b9081815287878201528481602481865afa908115610e4f578991610e1a575b5083163014610b2e575b505050508380f35b600091848815159182610dad575b50501561017f57827f000000000000000000000000000000000000000000000000000000000000000016917f000000000000000000000000000000000000000000000000000000000000000091865190815282888201528581602481875afa958615610da3578296610d67575b50506000610bed9198856002541686600354168a8a5195869485938493630c67cbcb60e01b85528401602090939291936001600160a01b0360408201951681520152565b03915afa908115610d5c57600091610d3b575b50823b156103a157610c2a92600092838851809681958294630bfc87c360e11b84528d84016123dd565b03925af18015610d3057610d1c575b5080600254168454813b1561053a578691602483928751948593849263a126d60160e01b84528b8401525af18015610d1257908691610cfe575b505060015416835491813b1561039d578351632142170760e11b8152308682019081526001600160a01b03909216602083015260408201939093529192918591849182908490829060600103925af1908115610cf55750908391610ce1575b50505538808080808080610b26565b610cea906121ed565b61017f578138610cd2565b513d85823e3d90fd5b610d07906121ed565b610387578438610c73565b84513d88823e3d90fd5b610d279195506121ed565b60009338610c39565b84513d6000823e3d90fd5b610d56913d8091833e610d4e8183612201565b810190612335565b38610c00565b86513d6000823e3d90fd5b9080929650813d8311610d9c575b610d7f8183612201565b81010312610387576000610d95610bed9261226f565b9591610ba9565b503d610d75565b87513d84823e3d90fd5b602492508751928380928682528c8c8301525afa908115610e10578391610ddb575b50831630148438610b3c565b90508481813d8311610e09575b610df28183612201565b810103126103a657610e039061226f565b38610dcf565b503d610de8565b86513d85823e3d90fd5b90508481813d8311610e48575b610e318183612201565b8101031261058457610e429061226f565b38610b1c565b503d610e27565b86513d8b823e3d90fd5b5081541515610ad9565b7f0000000000000000000000000000000000000000000000000000000000000000908351630178fe3f60e01b815282868201526024926080828581865afa918215610e4f579088918a936111b2575b508487518095819363b5f0f1b760e01b83528b8301525afa9182156111a8578892611169575b50876001600160a01b038093166001600160a01b03198181600254161760025587516398bbc3c760e01b81528a818b81865afa9081156110e9579086918591611131575b5016816001541617600155848451169060035416176003558387818b860151169401511693875163095ea7b360e01b90818152838b8201526000199081898201528c81604481898b5af18015611127576110f3575b508951918252838b830152878201528a81604481878a5af180156110e9576110b5575b5060015416803b156103a657604483928951948593849263a22cb46560e01b84528d84015260018a8401525af18015610e4f576110a2575b50845192878482816370a0823160e01b95868252308c8301525afa938415610e4f57908892918a95611071575b508651809481938252308a8301525afa908115611067578791611038575b506110259061102d92612312565b845490612312565b156103875738610ab0565b90508581813d8311611060575b61104f8183612201565b810103126103a1575161102d611017565b503d611045565b84513d89823e3d90fd5b8381949296503d831161109b575b6110898183612201565b810103126103a1578791519338610ff9565b503d61107f565b6110ae909891986121ed565b9638610fcc565b8a81813d83116110e2575b6110ca8183612201565b810103126103aa576110db90612305565b5038610f94565b503d6110c0565b89513d86823e3d90fd5b8c81813d8311611120575b6111088183612201565b8101031261039d5761111990612305565b5038610f71565b503d6110fe565b8b513d88823e3d90fd5b8092508c8092503d8311611162575b61114a8183612201565b810103126103aa5761115c869161226f565b38610f1c565b503d611140565b9091508681813d83116111a1575b6111818183612201565b8101031261054f57516001600160a01b038116810361054f579038610ed8565b503d611177565b85513d8a823e3d90fd5b6111d491935060803d81116111db575b6111cc8183612201565b810190612291565b9138610eb2565b503d6111c2565b5050503461017f578160031936011261017f5760ff6020925460a01c1690519015158152f35b84806003193601126103345734156103345780f35b5050503461017f578160031936011261017f5760209051733333b97138d4b086720b5ae8a7844b1345a333338152f35b5050503461017f578160031936011261017f576020906001600160a01b03600354169051908152f35b908385346103345760803660031901126103345761129261215b565b9261129b612187565b936064359586151587036103aa575a9184549760ff8960a01c161561039d576001600160a01b03809916330361039d5790889161152e575b1685519163ae9c5d0960e01b83527f000000000000000000000000000000000000000000000000000000000000000085840152602435602484015280836044818c7f0000000000000000000000000000000000000000000000000000000000000000165afa928315611524578687889089928a948b968c9961149a575b5050611379936084969361136d899794611373946113c49b612b2a565b86612b2a565b83612b2a565b875190611385826121bb565b81528660209a8b95868401528060025416908a519b8c968795639d9d3a0d60e01b87528b870190602080916001600160a01b0381511684520151910152565b1660448401523060648401525af194851561149057839561145f575b506113ec905a90612444565b90615208820180921161144c5750611405903a90612bc6565b908080808085335af161141661223f565b50156103345750837fc207673734d386144a4d4247552812844f5d7005d9e3e8f7d80d674b16465fe6918351908152a151908152f35b634e487b7160e01b835260119052602482fd5b9094508581813d8311611489575b6114778183612201565b810103126103a65751936113ec6113e0565b503d61146d565b84513d85823e3d90fd5b96509750505050505082813d831161151d575b6114b78183612201565b810103126103875760846113c4916113796114d18561226f565b6020860151956113736114e58c830161226f565b606083015161136d6114f96080860161226f565b9260c060a0870151960151969b90929395969b945094979950509396819550611350565b503d6114ad565b87513d88823e3d90fd5b9082859160035416885192838092633850c7bd60e01b82525afa90811561152457908992918791611573575b5062ffffff19600554169062ffffff16176005556112d3565b80929350848092503d83116115f6575b61158d8183612201565b8101031261039d5780518981160361039d576115ab60208201612283565b906115b7888201612bd9565b506115c460608201612bd9565b506115d160808201612bd9565b5060a081015160ff81160361053a57906115ef60c08b949301612305565b508a61155a565b503d611583565b509050346103a65760203660031901126103a65761161961215b565b918051916331a9108f60e11b83527f0000000000000000000000000000000000000000000000000000000000000000908301526001600160a01b0391602081602481867f0000000000000000000000000000000000000000000000000000000000000000165afa9182156116e9575084916116b0575b5016330361017f5760ff825460a01c1661017f576116ad9033612ab0565b80f35b90506020813d82116116e1575b816116ca60209383612201565b810103126103aa576116db9061226f565b3861168f565b3d91506116bd565b513d86823e3d90fd5b5050503461017f578160031936011261017f576020906001600160a01b03600154169051908152f35b509050346103a657816003193601126103a65761173661219d565b61173e6121ac565b5a91855460ff8160a01c161561053a576001600160a01b03809116330361053a578454879381151580611a48575b156105845788837f0000000000000000000000000000000000000000000000000000000000000000167f0000000000000000000000000000000000000000000000000000000000000000938a51966331a9108f60e11b8852858b890152602088602481865afa978815611a3e578498611a03575b501561193e575050506117f4915083612451565b80600254168554813b15610387578491602483928a51948593849263a126d60160e01b84528c8401525af1801561193457908491611920575b505060015416845491813b156103aa578651632142170760e11b8152308782019081526001600160a01b03909216602083015260408201939093528391839182908490829060600103925af1801561191657611902575b508255611892905a90612444565b9061520882018092116118ef57506118ab903a90612bc6565b908280808085335af16118bc61223f565b50156103a6577fc207673734d386144a4d4247552812844f5d7005d9e3e8f7d80d674b16465fe69160209151908152a180f35b634e487b7160e01b845260119052602483fd5b61190c82916121ed565b6103345738611884565b85513d84823e3d90fd5b611929906121ed565b6103a657823861182d565b87513d86823e3d90fd5b6002546003548c51630c67cbcb60e01b81529088166001600160a01b03168c82019081526020810193909352939450849184918816908290819060400103915afa9182156109315783926119e7575b50803b156103a6576119b593838a8c5196879586948593630bfc87c360e11b855284016123dd565b03925af180156119dd576119ca575b506117f4565b6119d59193506121ed565b8591386119c4565b87513d8a823e3d90fd5b6119fc9192503d8085833e610d4e8183612201565b903861198d565b9097506020813d8211611a36575b81611a1e60209383612201565b810103126103aa57611a2f9061226f565b96386117e0565b3d9150611a11565b8c513d86823e3d90fd5b506024602084600154168a51928380926331a9108f60e11b8252878d8301525afa908115611abe578a91611a81575b508316301461176c565b90506020813d8211611ab6575b81611a9b60209383612201565b81010312611ab257611aac9061226f565b38611a77565b8980fd5b3d9150611a8e565b89513d8c823e3d90fd5b5050503461017f578160031936011261017f576020906001600160a01b03600254169051908152f35b843461033457602036600319011261033457611b0b61215b565b8154906001600160a01b039081831633036103aa5716906001600160a01b03191617815580f35b5083833461017f578160031936011261017f57805160208101916307983f4560e21b835260aa602483015260248252606082019082821067ffffffffffffffff831117611ba957525182918291908273dc2b0d2dd2b7759d97d50db4eabdc369731108305af1611ba061223f565b50156103345780f35b634e487b7160e01b855260418652602485fd5b509050346103a65760203660031901126103a657611bd861219d565b918051916331a9108f60e11b83527f0000000000000000000000000000000000000000000000000000000000000000908301526001600160a01b0391602081602481867f0000000000000000000000000000000000000000000000000000000000000000165afa9182156116e957508491611c60575b5016330361017f576116ad9033612451565b90506020813d8211611c91575b81611c7a60209383612201565b810103126103aa57611c8b9061226f565b38611c4e565b3d9150611c6d565b5050503461017f578160031936011261017f57602090516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b848285346103a657826003193601126103a65780516331a9108f60e11b81527f00000000000000000000000000000000000000000000000000000000000000008382018190526001600160a01b0392916020816024817f000000000000000000000000000000000000000000000000000000000000000088165afa908115611e42579084918791611e07575b501633036103875760ff855460a01c16610387578151630178fe3f60e01b81529384015260808360248173dc3f37ac18c5d5fc9928d70e2d5c00d055b99cd35afa8015611dfd57611dd6938591611ddf575b50611dcd8360208301511633612ab0565b01511633612ab0565b6116ad3361299f565b611df7915060803d81116111db576111cc8183612201565b85611dbc565b81513d86823e3d90fd5b9150506020813d8211611e3a575b81611e2260209383612201565b8101031261039d57611e34849161226f565b87611d6a565b3d9150611e15565b83513d88823e3d90fd5b509050346103a65760803660031901126103a657611e6861215b565b50611e71612171565b9260643567ffffffffffffffff8082116103a657366023830112156103a657818401359081116103a657369101602401116103345782516331a9108f60e11b81527f00000000000000000000000000000000000000000000000000000000000000008382018190526020956001600160a01b039287816024817f000000000000000000000000000000000000000000000000000000000000000088165afa80156120245784908690611fee575b81925016911614611f3a575b8451630a85bd0160e11b81528690f35b845190631ca84c6960e31b825284820152858160248173dc3f37ac18c5d5fc9928d70e2d5c00d055b99cd35afa908115611fe4578391611faf575b50163314611f85575b8080611f2a565b60ff815460a01c161580611fa6575b15610334575060443590553880611f7e565b50815415611f94565b90508581813d8311611fdd575b611fc68183612201565b810103126103a657611fd79061226f565b38611f75565b503d611fbc565b85513d85823e3d90fd5b50508781813d831161201d575b6120058183612201565b810103126103875783612018819261226f565b611f1e565b503d611ffb565b87513d87823e3d90fd5b848285346103a657826003193601126103a6578051916331a9108f60e11b83527f0000000000000000000000000000000000000000000000000000000000000000908301526001600160a01b0391602081602481867f0000000000000000000000000000000000000000000000000000000000000000165afa918215610cf5575083916120ce575b50163303610334578080808047335af1611ba061223f565b90506020813d82116120ff575b816120e860209383612201565b810103126103a6576120f99061226f565b836120b6565b3d91506120db565b859083346103a65760203660031901126103a6573563ffffffff60e01b81168091036103a65760209250630a85bd0160e11b811490811561214a575b5015158152f35b6301ffc9a760e01b14905083612143565b600435906001600160a01b03821682036103a157565b602435906001600160a01b03821682036103a157565b604435906001600160a01b03821682036103a157565b6004359081151582036103a157565b6024359081151582036103a157565b6040810190811067ffffffffffffffff8211176121d757604052565b634e487b7160e01b600052604160045260246000fd5b67ffffffffffffffff81116121d757604052565b90601f8019910116810190811067ffffffffffffffff8211176121d757604052565b67ffffffffffffffff81116121d757601f01601f191660200190565b3d1561226a573d9061225082612223565b9161225e6040519384612201565b82523d6000602084013e565b606090565b51906001600160a01b03821682036103a157565b51908160020b82036103a157565b908160809103126103a157604051906080820182811067ffffffffffffffff8211176121d75760405280516001600160a01b03811681036103a1576122fd9160609184526122e16020820161226f565b60208501526122f26040820161226f565b604085015201612283565b606082015290565b519081151582036103a157565b9190820180921161231f57565b634e487b7160e01b600052601160045260246000fd5b602080828403126103a157815167ffffffffffffffff928382116103a157019083601f830112156103a15781519283116121d75760409283519461237e838360051b0187612201565b818652828087019260061b850101938185116103a1578301915b8483106123a85750505050505090565b85838303126103a15783869182516123bf816121bb565b6123c88661226f565b81528286015183820152815201920191612398565b906060604092838101928152602091818584809401528651809552019401926000905b83821061240f57505050505090565b90919293948382826124376001948a51602080916001600160a01b0381511684520151910152565b0196019493920190612400565b9190820391821161231f57565b60049182549060009180151580612918575b156103a65760408051630178fe3f60e01b81527f00000000000000000000000000000000000000000000000000000000000000008782018190529192602491608081848173dc3f37ac18c5d5fc9928d70e2d5c00d055b99cd35afa9081156127a05787916128fa575b506001600160a01b03916020968387818a8601511694015116958751946370a0823160e01b938487528d30908801528a878981895afa9687156128f057908e98979695949392918d976128ac575b508a5198858a5230908a01528b8989818d5afa98891561285e57908f8c8f93849c612868575b5083929185946064928d9897600254169087600354169051998a96879563463c7ab360e11b8752860152840152600160448401525af192831561285e578d93612841575b507f00000000000000000000000000000000000000000000000000000000000000001690813b1561283d57918c918f93836125d3958e5196879586948593630bfc87c360e11b855284016123dd565b03925af1801561283357612820575b50156125f6575b5050505050505050505050565b865190808252308c83015288828681865afa918215612816579089918b936127e5575b50885195869182528d309083015281895afa9384156127db57908892918a956127aa575b50838111612714575b50505050818111612672575b505050505050612662915061299f565b38808080808080808080806125e9565b9186866126856126b6999a948896612444565b865163a9059cbb60e01b81526001600160a01b03909316948301948552602085015290978893849291839160400190565b03925af190811561270b57506126d1575b8080808695612652565b82813d8311612704575b6126e58183612201565b810103126103345750906126fb61266292612305565b509038806126c7565b503d6126db565b513d84823e3d90fd5b6127559361272191612444565b908a8a8d8a519687958694859363a9059cbb60e01b85528401602090939291936001600160a01b0360408201951681520152565b03925af180156127a05761276c575b858180612646565b8581813d8311612799575b6127818183612201565b8101031261053a5761279290612305565b5038612764565b503d612777565b85513d89823e3d90fd5b8381949296503d83116127d4575b6127c28183612201565b810103126103a157879151933861263d565b503d6127b8565b87513d8b823e3d90fd5b8281939294503d831161280f575b6127fd8183612201565b810103126103a1578890519138612619565b503d6127f3565b88513d8c823e3d90fd5b61282c909a919a6121ed565b98386125e2565b89513d8d823e3d90fd5b8c80fd5b6128579193508d3d8091833e610d4e8183612201565b9138612584565b8b513d8f823e3d90fd5b935050509192939495969798508b81813d83116128a5575b61288a8183612201565b8101031261283d575197969594939291908c908f8c8a612540565b503d612880565b8c8092999a5081939495969798503d83116128e9575b6128cc8183612201565b810103126128e557908d9796959493929151953861251a565b8b80fd5b503d6128c2565b8a513d8e823e3d90fd5b612912915060803d81116111db576111cc8183612201565b386124cc565b5060246001600160a01b0360208160015416604051938480926331a9108f60e11b8252878c8301525afa918215612994578592612959575b50163014612463565b9091506020813d821161298c575b8161297460209383612201565b81010312610387576129859061226f565b9038612950565b3d9150612967565b6040513d87823e3d90fd5b6040516370a0823160e01b8152306004820152733333b97138d4b086720b5ae8a7844b1345a33333916020918281602481875afa908115612a6f57600091612a83575b5080151580612a7b575b6129f7575b50505050565b60405163a9059cbb60e01b81526001600160a01b039290921660048301526024820152918190839060449082906000905af18015612a6f57612a3b575b80806129f1565b81813d8311612a68575b612a4f8183612201565b810103126103a157612a6090612305565b503880612a34565b503d612a45565b6040513d6000823e3d90fd5b5060016129ec565b908382813d8311612aa9575b612a998183612201565b81010312610334575051386129e2565b503d612a8f565b6040516370a0823160e01b81523060048201529291906020846024816001600160a01b0386165afa918215612a6f57600092612af4575b612af2939450612b2a565b565b91936020813d8211612b22575b81612b0e60209383612201565b810103126103875751929350839291612ae7565b3d9150612b01565b9180151580612bb4575b612b3d57505050565b60405163a9059cbb60e01b81526001600160a01b03928316600482015260248101919091529160209183916044918391600091165af18015612a6f57612b805750565b6020813d8211612bac575b81612b9860209383612201565b810103126103a157612ba990612305565b50565b3d9150612b8b565b506001600160a01b0383161515612b34565b8181029291811591840414171561231f57565b519061ffff821682036103a157565b51906fffffffffffffffffffffffffffffffff821682036103a15756fea264697066735822122016534d47faa73e46d6c96a77ae74bba3fbc64a194fb7a655b06160ff0b87843d64736f6c63430008130033000000000000000000000000677a4cf9f9d0ec0dad50268667086926d143502700000000000000000000000000000000000000000000000000000000000000010000000000000000000000005df6dd0a53fda7ec70809b591905efe14fe5d1fe

Deployed Bytecode

0x608060408181526004918236101561001657600080fd5b60009260e08435811c92836301ffc9a714612107575082631261795d1461202e578263150b7a0214611e4c5782633ccfd60b14611cde5782633fd773e914611c995782634b91c03314611bbc5782635943409814611b325782635f5f62f914611af1578263692058c214611ac85782636c6603141461171b57826398bbc3c7146116f25782639e8c708e146115fd578263a7c1c38b14611276578263a8aa1b311461124d578263ac600a3c1461121d578263ae9bb69214611208578263c0406226146111e2578263c17d504b14610a70578263c52ac0bd14610a4d578263c6bc518214610a11578263ce05f8c7146109f2578263cfd454d314610767578263eef9203a1461059d57848363f3e414f8146103ae57508263f484bec2146101a85750508063f77c4791146101835763fb0ea8351461015257600080fd5b3461017f578160031936011261017f576020905173dc3f37ac18c5d5fc9928d70e2d5c00d055b99cd38152f35b5080fd5b503461017f578160031936011261017f576001600160a01b0360209254169051908152f35b90929150346103aa573660031901126103a6576101c361215b565b916101cc612171565b926101d5612187565b93606435918260020b8093036103a157608435918260020b8093036103a15787925a9484549860ff8a60a01c161561039d576001600160a01b03809a16330361039d57875461039d578960025416938a8a5191610231836121bb565b16815260a43560208201528a8a5192610249846121bb565b16825260c435602083015289519a8b9663ba90a46960e01b885216898701526024860161028891602080916001600160a01b0381511684520151910152565b80516001600160a01b0316606486015260200151608485015260a484015260c4830152815a9360e492608095f193841561039357859461034a575b506102d2908483555a90612444565b90615208820180921161033757506102eb903a90612bc6565b928080808087335af16102fc61223f565b501561033457507fc207673734d386144a4d4247552812844f5d7005d9e3e8f7d80d674b16465fe6602080948351908152a151908152f35b80fd5b634e487b7160e01b855260119052602484fd5b9093506080813d821161038b575b8161036560809383612201565b81010312610387578061037f60206102d293519201612be8565b5093906102c3565b8480fd5b3d9150610358565b83513d87823e3d90fd5b8580fd5b600080fd5b8280fd5b8380fd5b8083863461059957806003193601126105995781356001600160a01b03808216809203610387576024359280516331a9108f60e11b8082527f0000000000000000000000000000000000000000000000000000000000000001878301526020918281602481887f000000000000000000000000677a4cf9f9d0ec0dad50268667086926d1435027165afa90811561058f579085918a91610553575b5016330361054f5760ff885460a01c1661054f57825190815285878201528181602481885afa91821561054557889261050b575b5050823091160361039d57823b1561039d578051632142170760e11b81523086820190815233602082015260408101869052909190879083908190606001038183885af190811561050257509086916104ee575b505060015416146104e0575050f35b8154146104ea5750f35b5580f35b6104f7906121ed565b6103875784876104d1565b513d88823e3d90fd5b90809250813d831161053e575b6105228183612201565b8101031261053a576105339061226f565b888061047d565b8680fd5b503d610518565b83513d8a823e3d90fd5b8780fd5b809250848092503d8311610588575b61056c8183612201565b810103126105845761057e859161226f565b8b610449565b8880fd5b503d610562565b84513d8b823e3d90fd5b5050fd5b5083833461017f578060031936011261017f5782359267ffffffffffffffff84116103a657366023850112156103a65783810135936105db85612223565b946105e884519687612201565b80865236602482840101116103875760249291818692602095869301838a0137870101526106146121ac565b5a90855460ff8160a01c161561053a576001600160a01b0316330361039d5773dc3f37ac18c5d5fc9928d70e2d5c00d055b99cd3803b1561053a5785516363adb18760e11b81527f000000000000000000000000000000000000000000000000000000000000000185820152606060248201528851606482018190529092885b8281106107535750928092818a6084828683998484819a8501015215156044830152601f801991011681010301925af1801561074957610735575b50506106dc905a90612444565b90615208820180921161033757506106f5903a90612bc6565b8380808084335af161070561223f565b50156103aa577fc207673734d386144a4d4247552812844f5d7005d9e3e8f7d80d674b16465fe69251908152a180f35b61073e906121ed565b6103875784866106cf565b86513d84823e3d90fd5b8a8101880151858201608401528701610694565b509050346103a657816003193601126103a65761078261215b565b9061078b612171565b5a85549360ff8560a01c161561053a576001600160a01b03809516330361053a57835480151580610976575b1561054f57878680600254169316928851976370a0823160e01b96878a5230898b01526020998a816024818a5afa90811561096c57859161093b575b508b5196610800886121bb565b87528a87015216958951908152308882015288816024818a5afa9081156109315783916108f5575b5091606094939161089861087d9860a4958d5191610845836121bb565b82528c8201528c51998a978896639f71e76160e01b88528d8801526024870190602080916001600160a01b0381511684520151910152565b80516001600160a01b03166064860152602001516084850152565b5af180156108eb576108b1575b6106dc91505a90612444565b6060823d82116108e3575b816108c960609383612201565b8101031261039d576108dd6106dc92612be8565b506108a5565b3d91506108bc565b85513d88823e3d90fd5b80935089809250959492953d831161092a575b6109128183612201565b810103126103a1579051919290918991906060610828565b503d610908565b8a513d85823e3d90fd5b8095508b8092503d8311610965575b6109548183612201565b810103126103a1578b9351386107f3565b503d61094a565b8c513d87823e3d90fd5b506024602087600154168951928380926331a9108f60e11b8252868b8301525afa9081156109e85789916109af575b50861630146107b7565b90506020813d82116109e0575b816109c960209383612201565b81010312610584576109da9061226f565b386109a5565b3d91506109bc565b88513d8b823e3d90fd5b509050346103a657826003193601126103a65760209250549051908152f35b5050503461017f578160031936011261017f57602090517f00000000000000000000000000000000000000000000000000000000000000018152f35b5050503461017f578160031936011261017f5760209060055460020b9051908152f35b509050346103a657602091826003193601126103aa57610a8e61219d565b73dc3f37ac18c5d5fc9928d70e2d5c00d055b99cd380330361039d5781610e63575b5060ff9060ff60a01b865491151560a01b169060ff60a01b19161780865560a01c161580610e59575b610ae1578380f35b6001600160a01b039283600154169383549483516331a9108f60e11b9081815287878201528481602481865afa908115610e4f578991610e1a575b5083163014610b2e575b505050508380f35b600091848815159182610dad575b50501561017f57827f000000000000000000000000677a4cf9f9d0ec0dad50268667086926d143502716917f000000000000000000000000000000000000000000000000000000000000000191865190815282888201528581602481875afa958615610da3578296610d67575b50506000610bed9198856002541686600354168a8a5195869485938493630c67cbcb60e01b85528401602090939291936001600160a01b0360408201951681520152565b03915afa908115610d5c57600091610d3b575b50823b156103a157610c2a92600092838851809681958294630bfc87c360e11b84528d84016123dd565b03925af18015610d3057610d1c575b5080600254168454813b1561053a578691602483928751948593849263a126d60160e01b84528b8401525af18015610d1257908691610cfe575b505060015416835491813b1561039d578351632142170760e11b8152308682019081526001600160a01b03909216602083015260408201939093529192918591849182908490829060600103925af1908115610cf55750908391610ce1575b50505538808080808080610b26565b610cea906121ed565b61017f578138610cd2565b513d85823e3d90fd5b610d07906121ed565b610387578438610c73565b84513d88823e3d90fd5b610d279195506121ed565b60009338610c39565b84513d6000823e3d90fd5b610d56913d8091833e610d4e8183612201565b810190612335565b38610c00565b86513d6000823e3d90fd5b9080929650813d8311610d9c575b610d7f8183612201565b81010312610387576000610d95610bed9261226f565b9591610ba9565b503d610d75565b87513d84823e3d90fd5b602492508751928380928682528c8c8301525afa908115610e10578391610ddb575b50831630148438610b3c565b90508481813d8311610e09575b610df28183612201565b810103126103a657610e039061226f565b38610dcf565b503d610de8565b86513d85823e3d90fd5b90508481813d8311610e48575b610e318183612201565b8101031261058457610e429061226f565b38610b1c565b503d610e27565b86513d8b823e3d90fd5b5081541515610ad9565b7f0000000000000000000000000000000000000000000000000000000000000001908351630178fe3f60e01b815282868201526024926080828581865afa918215610e4f579088918a936111b2575b508487518095819363b5f0f1b760e01b83528b8301525afa9182156111a8578892611169575b50876001600160a01b038093166001600160a01b03198181600254161760025587516398bbc3c760e01b81528a818b81865afa9081156110e9579086918591611131575b5016816001541617600155848451169060035416176003558387818b860151169401511693875163095ea7b360e01b90818152838b8201526000199081898201528c81604481898b5af18015611127576110f3575b508951918252838b830152878201528a81604481878a5af180156110e9576110b5575b5060015416803b156103a657604483928951948593849263a22cb46560e01b84528d84015260018a8401525af18015610e4f576110a2575b50845192878482816370a0823160e01b95868252308c8301525afa938415610e4f57908892918a95611071575b508651809481938252308a8301525afa908115611067578791611038575b506110259061102d92612312565b845490612312565b156103875738610ab0565b90508581813d8311611060575b61104f8183612201565b810103126103a1575161102d611017565b503d611045565b84513d89823e3d90fd5b8381949296503d831161109b575b6110898183612201565b810103126103a1578791519338610ff9565b503d61107f565b6110ae909891986121ed565b9638610fcc565b8a81813d83116110e2575b6110ca8183612201565b810103126103aa576110db90612305565b5038610f94565b503d6110c0565b89513d86823e3d90fd5b8c81813d8311611120575b6111088183612201565b8101031261039d5761111990612305565b5038610f71565b503d6110fe565b8b513d88823e3d90fd5b8092508c8092503d8311611162575b61114a8183612201565b810103126103aa5761115c869161226f565b38610f1c565b503d611140565b9091508681813d83116111a1575b6111818183612201565b8101031261054f57516001600160a01b038116810361054f579038610ed8565b503d611177565b85513d8a823e3d90fd5b6111d491935060803d81116111db575b6111cc8183612201565b810190612291565b9138610eb2565b503d6111c2565b5050503461017f578160031936011261017f5760ff6020925460a01c1690519015158152f35b84806003193601126103345734156103345780f35b5050503461017f578160031936011261017f5760209051733333b97138d4b086720b5ae8a7844b1345a333338152f35b5050503461017f578160031936011261017f576020906001600160a01b03600354169051908152f35b908385346103345760803660031901126103345761129261215b565b9261129b612187565b936064359586151587036103aa575a9184549760ff8960a01c161561039d576001600160a01b03809916330361039d5790889161152e575b1685519163ae9c5d0960e01b83527f000000000000000000000000000000000000000000000000000000000000000185840152602435602484015280836044818c7f000000000000000000000000677a4cf9f9d0ec0dad50268667086926d1435027165afa928315611524578687889089928a948b968c9961149a575b5050611379936084969361136d899794611373946113c49b612b2a565b86612b2a565b83612b2a565b875190611385826121bb565b81528660209a8b95868401528060025416908a519b8c968795639d9d3a0d60e01b87528b870190602080916001600160a01b0381511684520151910152565b1660448401523060648401525af194851561149057839561145f575b506113ec905a90612444565b90615208820180921161144c5750611405903a90612bc6565b908080808085335af161141661223f565b50156103345750837fc207673734d386144a4d4247552812844f5d7005d9e3e8f7d80d674b16465fe6918351908152a151908152f35b634e487b7160e01b835260119052602482fd5b9094508581813d8311611489575b6114778183612201565b810103126103a65751936113ec6113e0565b503d61146d565b84513d85823e3d90fd5b96509750505050505082813d831161151d575b6114b78183612201565b810103126103875760846113c4916113796114d18561226f565b6020860151956113736114e58c830161226f565b606083015161136d6114f96080860161226f565b9260c060a0870151960151969b90929395969b945094979950509396819550611350565b503d6114ad565b87513d88823e3d90fd5b9082859160035416885192838092633850c7bd60e01b82525afa90811561152457908992918791611573575b5062ffffff19600554169062ffffff16176005556112d3565b80929350848092503d83116115f6575b61158d8183612201565b8101031261039d5780518981160361039d576115ab60208201612283565b906115b7888201612bd9565b506115c460608201612bd9565b506115d160808201612bd9565b5060a081015160ff81160361053a57906115ef60c08b949301612305565b508a61155a565b503d611583565b509050346103a65760203660031901126103a65761161961215b565b918051916331a9108f60e11b83527f0000000000000000000000000000000000000000000000000000000000000001908301526001600160a01b0391602081602481867f000000000000000000000000677a4cf9f9d0ec0dad50268667086926d1435027165afa9182156116e9575084916116b0575b5016330361017f5760ff825460a01c1661017f576116ad9033612ab0565b80f35b90506020813d82116116e1575b816116ca60209383612201565b810103126103aa576116db9061226f565b3861168f565b3d91506116bd565b513d86823e3d90fd5b5050503461017f578160031936011261017f576020906001600160a01b03600154169051908152f35b509050346103a657816003193601126103a65761173661219d565b61173e6121ac565b5a91855460ff8160a01c161561053a576001600160a01b03809116330361053a578454879381151580611a48575b156105845788837f000000000000000000000000677a4cf9f9d0ec0dad50268667086926d1435027167f0000000000000000000000000000000000000000000000000000000000000001938a51966331a9108f60e11b8852858b890152602088602481865afa978815611a3e578498611a03575b501561193e575050506117f4915083612451565b80600254168554813b15610387578491602483928a51948593849263a126d60160e01b84528c8401525af1801561193457908491611920575b505060015416845491813b156103aa578651632142170760e11b8152308782019081526001600160a01b03909216602083015260408201939093528391839182908490829060600103925af1801561191657611902575b508255611892905a90612444565b9061520882018092116118ef57506118ab903a90612bc6565b908280808085335af16118bc61223f565b50156103a6577fc207673734d386144a4d4247552812844f5d7005d9e3e8f7d80d674b16465fe69160209151908152a180f35b634e487b7160e01b845260119052602483fd5b61190c82916121ed565b6103345738611884565b85513d84823e3d90fd5b611929906121ed565b6103a657823861182d565b87513d86823e3d90fd5b6002546003548c51630c67cbcb60e01b81529088166001600160a01b03168c82019081526020810193909352939450849184918816908290819060400103915afa9182156109315783926119e7575b50803b156103a6576119b593838a8c5196879586948593630bfc87c360e11b855284016123dd565b03925af180156119dd576119ca575b506117f4565b6119d59193506121ed565b8591386119c4565b87513d8a823e3d90fd5b6119fc9192503d8085833e610d4e8183612201565b903861198d565b9097506020813d8211611a36575b81611a1e60209383612201565b810103126103aa57611a2f9061226f565b96386117e0565b3d9150611a11565b8c513d86823e3d90fd5b506024602084600154168a51928380926331a9108f60e11b8252878d8301525afa908115611abe578a91611a81575b508316301461176c565b90506020813d8211611ab6575b81611a9b60209383612201565b81010312611ab257611aac9061226f565b38611a77565b8980fd5b3d9150611a8e565b89513d8c823e3d90fd5b5050503461017f578160031936011261017f576020906001600160a01b03600254169051908152f35b843461033457602036600319011261033457611b0b61215b565b8154906001600160a01b039081831633036103aa5716906001600160a01b03191617815580f35b5083833461017f578160031936011261017f57805160208101916307983f4560e21b835260aa602483015260248252606082019082821067ffffffffffffffff831117611ba957525182918291908273dc2b0d2dd2b7759d97d50db4eabdc369731108305af1611ba061223f565b50156103345780f35b634e487b7160e01b855260418652602485fd5b509050346103a65760203660031901126103a657611bd861219d565b918051916331a9108f60e11b83527f0000000000000000000000000000000000000000000000000000000000000001908301526001600160a01b0391602081602481867f000000000000000000000000677a4cf9f9d0ec0dad50268667086926d1435027165afa9182156116e957508491611c60575b5016330361017f576116ad9033612451565b90506020813d8211611c91575b81611c7a60209383612201565b810103126103aa57611c8b9061226f565b38611c4e565b3d9150611c6d565b5050503461017f578160031936011261017f57602090516001600160a01b037f000000000000000000000000677a4cf9f9d0ec0dad50268667086926d1435027168152f35b848285346103a657826003193601126103a65780516331a9108f60e11b81527f00000000000000000000000000000000000000000000000000000000000000018382018190526001600160a01b0392916020816024817f000000000000000000000000677a4cf9f9d0ec0dad50268667086926d143502788165afa908115611e42579084918791611e07575b501633036103875760ff855460a01c16610387578151630178fe3f60e01b81529384015260808360248173dc3f37ac18c5d5fc9928d70e2d5c00d055b99cd35afa8015611dfd57611dd6938591611ddf575b50611dcd8360208301511633612ab0565b01511633612ab0565b6116ad3361299f565b611df7915060803d81116111db576111cc8183612201565b85611dbc565b81513d86823e3d90fd5b9150506020813d8211611e3a575b81611e2260209383612201565b8101031261039d57611e34849161226f565b87611d6a565b3d9150611e15565b83513d88823e3d90fd5b509050346103a65760803660031901126103a657611e6861215b565b50611e71612171565b9260643567ffffffffffffffff8082116103a657366023830112156103a657818401359081116103a657369101602401116103345782516331a9108f60e11b81527f00000000000000000000000000000000000000000000000000000000000000018382018190526020956001600160a01b039287816024817f000000000000000000000000677a4cf9f9d0ec0dad50268667086926d143502788165afa80156120245784908690611fee575b81925016911614611f3a575b8451630a85bd0160e11b81528690f35b845190631ca84c6960e31b825284820152858160248173dc3f37ac18c5d5fc9928d70e2d5c00d055b99cd35afa908115611fe4578391611faf575b50163314611f85575b8080611f2a565b60ff815460a01c161580611fa6575b15610334575060443590553880611f7e565b50815415611f94565b90508581813d8311611fdd575b611fc68183612201565b810103126103a657611fd79061226f565b38611f75565b503d611fbc565b85513d85823e3d90fd5b50508781813d831161201d575b6120058183612201565b810103126103875783612018819261226f565b611f1e565b503d611ffb565b87513d87823e3d90fd5b848285346103a657826003193601126103a6578051916331a9108f60e11b83527f0000000000000000000000000000000000000000000000000000000000000001908301526001600160a01b0391602081602481867f000000000000000000000000677a4cf9f9d0ec0dad50268667086926d1435027165afa918215610cf5575083916120ce575b50163303610334578080808047335af1611ba061223f565b90506020813d82116120ff575b816120e860209383612201565b810103126103a6576120f99061226f565b836120b6565b3d91506120db565b859083346103a65760203660031901126103a6573563ffffffff60e01b81168091036103a65760209250630a85bd0160e11b811490811561214a575b5015158152f35b6301ffc9a760e01b14905083612143565b600435906001600160a01b03821682036103a157565b602435906001600160a01b03821682036103a157565b604435906001600160a01b03821682036103a157565b6004359081151582036103a157565b6024359081151582036103a157565b6040810190811067ffffffffffffffff8211176121d757604052565b634e487b7160e01b600052604160045260246000fd5b67ffffffffffffffff81116121d757604052565b90601f8019910116810190811067ffffffffffffffff8211176121d757604052565b67ffffffffffffffff81116121d757601f01601f191660200190565b3d1561226a573d9061225082612223565b9161225e6040519384612201565b82523d6000602084013e565b606090565b51906001600160a01b03821682036103a157565b51908160020b82036103a157565b908160809103126103a157604051906080820182811067ffffffffffffffff8211176121d75760405280516001600160a01b03811681036103a1576122fd9160609184526122e16020820161226f565b60208501526122f26040820161226f565b604085015201612283565b606082015290565b519081151582036103a157565b9190820180921161231f57565b634e487b7160e01b600052601160045260246000fd5b602080828403126103a157815167ffffffffffffffff928382116103a157019083601f830112156103a15781519283116121d75760409283519461237e838360051b0187612201565b818652828087019260061b850101938185116103a1578301915b8483106123a85750505050505090565b85838303126103a15783869182516123bf816121bb565b6123c88661226f565b81528286015183820152815201920191612398565b906060604092838101928152602091818584809401528651809552019401926000905b83821061240f57505050505090565b90919293948382826124376001948a51602080916001600160a01b0381511684520151910152565b0196019493920190612400565b9190820391821161231f57565b60049182549060009180151580612918575b156103a65760408051630178fe3f60e01b81527f00000000000000000000000000000000000000000000000000000000000000018782018190529192602491608081848173dc3f37ac18c5d5fc9928d70e2d5c00d055b99cd35afa9081156127a05787916128fa575b506001600160a01b03916020968387818a8601511694015116958751946370a0823160e01b938487528d30908801528a878981895afa9687156128f057908e98979695949392918d976128ac575b508a5198858a5230908a01528b8989818d5afa98891561285e57908f8c8f93849c612868575b5083929185946064928d9897600254169087600354169051998a96879563463c7ab360e11b8752860152840152600160448401525af192831561285e578d93612841575b507f000000000000000000000000677a4cf9f9d0ec0dad50268667086926d14350271690813b1561283d57918c918f93836125d3958e5196879586948593630bfc87c360e11b855284016123dd565b03925af1801561283357612820575b50156125f6575b5050505050505050505050565b865190808252308c83015288828681865afa918215612816579089918b936127e5575b50885195869182528d309083015281895afa9384156127db57908892918a956127aa575b50838111612714575b50505050818111612672575b505050505050612662915061299f565b38808080808080808080806125e9565b9186866126856126b6999a948896612444565b865163a9059cbb60e01b81526001600160a01b03909316948301948552602085015290978893849291839160400190565b03925af190811561270b57506126d1575b8080808695612652565b82813d8311612704575b6126e58183612201565b810103126103345750906126fb61266292612305565b509038806126c7565b503d6126db565b513d84823e3d90fd5b6127559361272191612444565b908a8a8d8a519687958694859363a9059cbb60e01b85528401602090939291936001600160a01b0360408201951681520152565b03925af180156127a05761276c575b858180612646565b8581813d8311612799575b6127818183612201565b8101031261053a5761279290612305565b5038612764565b503d612777565b85513d89823e3d90fd5b8381949296503d83116127d4575b6127c28183612201565b810103126103a157879151933861263d565b503d6127b8565b87513d8b823e3d90fd5b8281939294503d831161280f575b6127fd8183612201565b810103126103a1578890519138612619565b503d6127f3565b88513d8c823e3d90fd5b61282c909a919a6121ed565b98386125e2565b89513d8d823e3d90fd5b8c80fd5b6128579193508d3d8091833e610d4e8183612201565b9138612584565b8b513d8f823e3d90fd5b935050509192939495969798508b81813d83116128a5575b61288a8183612201565b8101031261283d575197969594939291908c908f8c8a612540565b503d612880565b8c8092999a5081939495969798503d83116128e9575b6128cc8183612201565b810103126128e557908d9796959493929151953861251a565b8b80fd5b503d6128c2565b8a513d8e823e3d90fd5b612912915060803d81116111db576111cc8183612201565b386124cc565b5060246001600160a01b0360208160015416604051938480926331a9108f60e11b8252878c8301525afa918215612994578592612959575b50163014612463565b9091506020813d821161298c575b8161297460209383612201565b81010312610387576129859061226f565b9038612950565b3d9150612967565b6040513d87823e3d90fd5b6040516370a0823160e01b8152306004820152733333b97138d4b086720b5ae8a7844b1345a33333916020918281602481875afa908115612a6f57600091612a83575b5080151580612a7b575b6129f7575b50505050565b60405163a9059cbb60e01b81526001600160a01b039290921660048301526024820152918190839060449082906000905af18015612a6f57612a3b575b80806129f1565b81813d8311612a68575b612a4f8183612201565b810103126103a157612a6090612305565b503880612a34565b503d612a45565b6040513d6000823e3d90fd5b5060016129ec565b908382813d8311612aa9575b612a998183612201565b81010312610334575051386129e2565b503d612a8f565b6040516370a0823160e01b81523060048201529291906020846024816001600160a01b0386165afa918215612a6f57600092612af4575b612af2939450612b2a565b565b91936020813d8211612b22575b81612b0e60209383612201565b810103126103875751929350839291612ae7565b3d9150612b01565b9180151580612bb4575b612b3d57505050565b60405163a9059cbb60e01b81526001600160a01b03928316600482015260248101919091529160209183916044918391600091165af18015612a6f57612b805750565b6020813d8211612bac575b81612b9860209383612201565b810103126103a157612ba990612305565b50565b3d9150612b8b565b506001600160a01b0383161515612b34565b8181029291811591840414171561231f57565b519061ffff821682036103a157565b51906fffffffffffffffffffffffffffffffff821682036103a15756fea264697066735822122016534d47faa73e46d6c96a77ae74bba3fbc64a194fb7a655b06160ff0b87843d64736f6c63430008130033

Deployed Bytecode Sourcemap

14992:8351:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15586:42;14992:8351;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14992:8351:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14992:8351:0;;;;;;:::i;:::-;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;20698:9;;;14992:8351;;;;;;;;;;;;-1:-1:-1;;;;;14992:8351:0;;;20749:10;:24;14992:8351;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;22035:38;;14992:8351;;;;;;;;:::i;:::-;;;;;;;22075:38;;14992:8351;;;;;;;;;22012:119;;14992:8351;22012:119;;;14992:8351;;;;;;;;;-1:-1:-1;;;;;14992:8351:0;;;;;;;;;;;;;;-1:-1:-1;;;;;14992:8351:0;;;;;;;;;;;;;;;;;;;;22012:119;;;14992:8351;22012:119;14992:8351;22012:119;;;;;;;;;;;14992:8351;;20811:13;14992:8351;;;;20815:9;20811:13;;:::i;:::-;14992:8351;20828:5;14992:8351;;;;;;;20837:11;20809:39;20837:11;;20809:39;;:::i;:::-;20749:10;;;;;;;20872:38;;;;:::i;:::-;;14992:8351;;;;20948:18;14992:8351;;;;;;;;20948:18;14992:8351;;;;;;;;;-1:-1:-1;;;14992:8351:0;;;;;;;;22012:119;;;;14992:8351;22012:119;;;;;;;;;14992:8351;22012:119;;;:::i;:::-;;;14992:8351;;;;;;;20811:13;14992:8351;;;;;:::i;:::-;;22012:119;;;;14992:8351;;;;22012:119;;;-1:-1:-1;22012:119:0;;;14992:8351;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14992:8351:0;;;;;;;;;;;;;;;;16874:23;;;16891:5;16874:23;;;14992:8351;;16874:8;;;14992:8351;16874:8;;;14992:8351;16874:23;;;;;;;;;;;;;;14992:8351;;;16860:10;:37;14992:8351;;;;;;;;;;;;20079:15;;;;;;;14992:8351;20079:15;;14992:8351;20079:15;;;;;;;;;;;;;14992:8351;20106:4;;;;14992:8351;;20079:32;14992:8351;;20123:51;;;;;14992:8351;;-1:-1:-1;;;20123:51:0;;20106:4;20123:51;;;14992:8351;;;16860:10;14992:8351;;;;;;;;;;;;;16860:10;;14992:8351;;;;;;20123:51;;;;;;;;;;;;;;;;;14992:8351;;;;;;20189:17;20185:120;;14992:8351;;;20185:120;14992:8351;;20227:16;20223:71;;14992:8351;;20223:71;14992:8351;20223:71;14992:8351;20123:51;;;;:::i;:::-;14992:8351;;20123:51;;;;;14992:8351;;;;;;;;20079:15;;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;;:::i;:::-;20079:15;;;;14992:8351;;;;20079:15;;;;;;14992:8351;;;;;;;;;;;;;16874:23;;;;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;;;:::i;:::-;16874:23;;;14992:8351;;;;16874:23;;;;;;14992:8351;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20698:9;14992:8351;;;;;;;;;;;-1:-1:-1;;;;;14992:8351:0;20749:10;:24;14992:8351;;15586:42;21067:30;;;;;14992:8351;;-1:-1:-1;;;21067:30:0;;21079:5;21067:30;;;14992:8351;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21067:30;;;;;;;;;;;14992:8351;20815:9;;20811:13;20815:9;;20811:13;;:::i;:::-;14992:8351;20828:5;14992:8351;;;;;;;20837:11;20809:39;20837:11;;20809:39;;:::i;:::-;20749:10;;;;;;20872:38;;;;:::i;:::-;;14992:8351;;;20948:18;14992:8351;;;;;20948:18;14992:8351;;21067:30;;;;:::i;:::-;14992:8351;;21067:30;;;;;14992:8351;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;20698:9;14992:8351;;;;;;;;;;;-1:-1:-1;;;;;14992:8351:0;;;20749:10;:24;14992:8351;;;;22277:15;;;:66;;;14992:8351;;;;;;;22355:3;14992:8351;;;;;;;;;;;22422:31;;;;22447:4;22422:31;;;14992:8351;;22422:31;;;14992:8351;22422:31;;;;;;;;;;;;;14992:8351;;;;;;;;:::i;:::-;;;22388:66;;;14992:8351;;;;;22490:31;;;22447:4;22490:31;;;14992:8351;22490:31;;14992:8351;22490:31;;;;;;;;;;;;;14992:8351;;;22355:169;14992:8351;;;;;;;;;;;;;;:::i;:::-;;;22456:66;;;14992:8351;;;;;;;;;;;22355:169;;;;;14992:8351;;;;;;;;-1:-1:-1;;;;;14992:8351:0;;;;;;;;;;;;;;-1:-1:-1;;;;;14992:8351:0;;;;;;;;;;;;;;22355:169;;;;;;;;14992:8351;20811:13;20815:9;;;20811:13;;:::i;22355:169::-;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;20811:13;14992:8351;;:::i;:::-;;22355:169;;;;;-1:-1:-1;22355:169:0;;;14992:8351;;;;;;;;;22490:31;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;22490:31;;;;14992:8351;;;22355:169;22490:31;;;;;;;;14992:8351;;;;;;;;;22422:31;;;;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;;22422:31;;;;;;;;;14992:8351;;;;;;;;;22277:66;14992:8351;;;;22296:10;14992:8351;;;;;;;;;;;22296:30;;;;;;14992:8351;22296:30;;;;;;;;;;;22277:66;-1:-1:-1;14992:8351:0;;22338:4;22296:47;22277:66;;22296:30;;;14992:8351;22296:30;;;;;;;;;14992:8351;22296:30;;;:::i;:::-;;;14992:8351;;;;;;;:::i;:::-;22296:30;;;;;;-1:-1:-1;22296:30:0;;;14992:8351;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15783:42;14992:8351;;;;;;;;;;;;;;;;;;;;16182:36;14992:8351;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15586:42;17003:10;;:25;14992:8351;;17113:663;;;14992:8351;;;;-1:-1:-1;;;14992:8351:0;;;;;;;;;-1:-1:-1;;;14992:8351:0;;;;;;;;;17809:4;:23;;;14992:8351;17805:171;;14992:8351;;;17805:171;-1:-1:-1;;;;;14992:8351:0;;17853:10;14992:8351;;;;;;;;;;;17853:30;;;;;;;;14992:8351;17853:30;;14992:8351;17853:30;;;;;;;;;;;;;17805:171;-1:-1:-1;14992:8351:0;;17895:4;17853:47;17849:116;;17805:171;;;;;14992:8351;;;17849:116;14992:8351;22781:15;;;;;:66;;;;17849:116;14992:8351;;;;;22900:8;;14992:8351;22917:5;;14992:8351;;;22900:23;;;;;;;14992:8351;22900:23;;14992:8351;22900:23;;;;;;;;;;;;;17849:116;22934:252;;14992:8351;23083:42;22934:252;14992:8351;;23083:3;14992:8351;;;;;;;;;;;;;;;;;;;23083:42;;;;14992:8351;;;;;;-1:-1:-1;;;;;14992:8351:0;;;;;;;;;;23083:42;;;;;;;;;;14992:8351;23083:42;;;17849:116;23140:34;;;;;;;14992:8351;;;;;;;;;;;;;;;23140:34;;;;;;:::i;:::-;;;;;;;;;;;17849:116;14992:8351;;23083:3;14992:8351;;;;23206:29;;;;;14992:8351;;;;;;;;;;;;;;;23206:29;;;;;14992:8351;23206:29;;;;;;;;;;;17849:116;14992:8351;;17853:10;14992:8351;;;;23246:61;;;;;;14992:8351;;-1:-1:-1;;;23246:61:0;;17895:4;23246:61;;;14992:8351;;;-1:-1:-1;;;;;14992:8351:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23246:61;;;;;;;;;;;;;;;17849:116;14992:8351;;;17849:116;;;;;;;;;23246:61;;;;:::i;:::-;14992:8351;;23246:61;;;;;14992:8351;;;;;;;;23206:29;;;;:::i;:::-;14992:8351;;23206:29;;;;;14992:8351;;;;;;;;;23140:34;;;;;;:::i;:::-;14992:8351;23140:34;;;;;14992:8351;;;;;;;;;23083:42;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;14992:8351;;;;;;;;;22900:23;;;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;23083:42;14992:8351;;:::i;:::-;22900:23;;;;;;;;;;14992:8351;;;;;;;;;22781:66;14992:8351;;;;;22800:30;;;;;;;;;;;14992:8351;22800:30;;;;;;;;;;;22781:66;-1:-1:-1;14992:8351:0;;17895:4;22800:47;22781:66;;;;22800:30;;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;;:::i;:::-;22800:30;;;;;;;;;14992:8351;;;;;;;;;17853:30;;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;;:::i;:::-;17853:30;;;;;;;;;14992:8351;;;;;;;;;17809:23;14992:8351;;;17817:15;;17809:23;;17113:663;17178:5;14992:8351;;;;;;17167:17;;;;;;14992:8351;;17167:17;;;;;;;;;;;;;;;;;;;;17113:663;14992:8351;;;;;;;;;;;17205:16;;;;;14992:8351;17205:16;;;;;;;;;;;17113:663;14992:8351;;-1:-1:-1;;;;;14992:8351:0;;;-1:-1:-1;;;;;14992:8351:0;;;17199:22;14992:8351;;;17199:22;14992:8351;;;;;;17257:16;;;;;;;;;;;;;;;;;;;;;17113:663;14992:8351;;;17236:38;14992:8351;;;17236:38;14992:8351;;;;;;;;;;;;17340:8;;;;;;14992:8351;;17387:8;;14992:8351;;;;;;;;17450:36;;;;;;;;14992:8351;17468:17;;14992:8351;;;;;;17450:36;;14992:8351;17450:36;;;;;;;;;;;17113:663;14992:8351;;;17501:36;;;;;;;14992:8351;;;;;17501:36;;14992:8351;17501:36;;;;;;;;;;;17113:663;14992:8351;17236:38;14992:8351;;17552:37;;;;;14992:8351;;;;;;;;;;;;;17552:37;;;;;14992:8351;17236:38;14992:8351;;;;17552:37;;;;;;;;17113:663;14992:8351;;;;;;;;;;;17619:31;;;;17644:4;17619:31;;;14992:8351;17619:31;;;;;;;;;;;;;;;17113:663;14992:8351;;;17680:31;;;;;;17644:4;17680:31;;;14992:8351;17680:31;;;;;;;;;;;17113:663;17735:11;;;:24;:11;;:::i;:::-;14992:8351;;17735:24;;:::i;:::-;:28;14992:8351;;17113:663;;;17680:31;;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;17735:24;17680:31;;;;;;;;14992:8351;;;;;;;;;17619:31;;;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;;17619:31;;;;;;;;;17552:37;;;;;;;:::i;:::-;;;;;17501:36;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;;:::i;:::-;;17501:36;;;;;;;;;14992:8351;;;;;;;;;17450:36;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;;:::i;:::-;;17450:36;;;;;;;;;14992:8351;;;;;;;;;17257:16;;;;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;;;:::i;:::-;17257:16;;;;;;;;17205;;;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;-1:-1:-1;;;;;14992:8351:0;;;;;;17205:16;;;;;;;;;;14992:8351;;;;;;;;;17167:17;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;14992:8351;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19462:9;:13;14992:8351;;;;;;;;;;;;;;;;;;;;;;15681:42;14992:8351;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14992:8351:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;14992:8351:0;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;20698:9;14992:8351;;;;;;;;;;;;-1:-1:-1;;;;;14992:8351:0;;;20749:10;:24;14992:8351;;21247:68;;;;;14992:8351;;;;;;;;21474:37;;21495:5;21474:37;;;14992:8351;;;;;;;21474:8;;14992:8351;21474:8;;;14992:8351;21474:37;;;;;;;;14992:8351;;;;;;;;;;21474:37;;;14992:8351;21541:4;;21611;21541;14992:8351;21541:4;;;;;;21576;21541;14992:8351;21541:4;;:::i;:::-;21576;;:::i;:::-;21611;;:::i;:::-;14992:8351;;;;;;:::i;:::-;;;;;21657:34;;;;;;14992:8351;;21709:3;14992:8351;;;;;;;;;;;;;21709:39;;;;;14992:8351;;;;-1:-1:-1;;;;;14992:8351:0;;;;;;;;;;;;;;;;;21742:4;14992:8351;;;;21709:39;;;;;;;;;;;14992:8351;20815:9;20811:13;20815:9;;20811:13;;:::i;:::-;14992:8351;20828:5;14992:8351;;;;;;;20837:11;20809:39;20837:11;;20809:39;;:::i;:::-;20749:10;;;;;;;20872:38;;;;:::i;:::-;;14992:8351;;;;;20948:18;14992:8351;;;;;;20948:18;14992:8351;;;;;;-1:-1:-1;;;14992:8351:0;;;;;;;;21709:39;;;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;20811:13;21709:39;;;;;;;;14992:8351;;;;;;;;;21474:37;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;;21611:4;14992:8351;;;:::i;:::-;;;;;;21576:4;14992:8351;;;;;:::i;:::-;;;;;21541:4;14992:8351;;;;;:::i;:::-;;;;;;;;;;21474:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;14992:8351;;;;;;;;;21247:68;14992:8351;;;;;;;;;;;;;;;;21291:12;;;;;;;;;14992:8351;;;;;21291:12;;;21247:68;14992:8351;;;21271:32;14992:8351;;;;;;21271:32;14992:8351;21247:68;;21291:12;;;;;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21291:12;;;;;;;;14992:8351;;;;;;;;;-1:-1:-1;;14992:8351:0;;;;;;:::i;:::-;;;;;;;;16874:23;;16891:5;16874:23;;;14992:8351;-1:-1:-1;;;;;16874:8:0;14992:8351;16874:8;14992:8351;16874:8;;;14992:8351;16874:23;;;;;;;;;;;;14992:8351;;;16860:10;:37;14992:8351;;;;;;;;;;20432:5;16860:10;;20432:5;:::i;:::-;14992:8351;;16874:23;;;14992:8351;16874:23;;;;;;;;;14992:8351;16874:23;;;:::i;:::-;;;14992:8351;;;;;;;:::i;:::-;16874:23;;;;;;-1:-1:-1;16874:23:0;;;14992:8351;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16019:37:0;14992:8351;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;20698:9;14992:8351;;;;;;;;;;;-1:-1:-1;;;;;14992:8351:0;;;20749:10;:24;14992:8351;;;;;22781:15;;;;:66;;;14992:8351;;;;22900:8;;;14992:8351;22917:5;14992:8351;;;;;;;22900:23;;;;;;14992:8351;22900:23;;14992:8351;22900:23;;;;;;;;;;;;;14992:8351;-1:-1:-1;22934:252:0;;;22993:12;;;;;;;;:::i;:::-;14992:8351;23206:3;14992:8351;;;;23206:29;;;;;14992:8351;;;;;;;;;;;;;;;23206:29;;;;;14992:8351;23206:29;;;;;;;;;;;22934:252;14992:8351;;23246:10;14992:8351;;;;23246:61;;;;;;14992:8351;;-1:-1:-1;;;23246:61:0;;23282:4;23246:61;;;14992:8351;;;-1:-1:-1;;;;;14992:8351:0;;;;;;;;;;;;;;;;;;;;;;;;;;23246:61;;;;;;;;;;22934:252;-1:-1:-1;14992:8351:0;;20811:13;;20815:9;20811:13;;:::i;:::-;14992:8351;20828:5;14992:8351;;;;;;;20837:11;20809:39;20837:11;;20809:39;;:::i;:::-;20749:10;;;;;;;20872:38;;;;:::i;:::-;;14992:8351;;;20948:18;14992:8351;22900:23;14992:8351;;;;;20948:18;14992:8351;;;-1:-1:-1;;;14992:8351:0;;;;;;;;23246:61;;;;;:::i;:::-;14992:8351;;23246:61;;;;14992:8351;;;;;;;;;23206:29;;;;:::i;:::-;14992:8351;;23206:29;;;;;14992:8351;;;;;;;;;22934:252;23083:3;14992:8351;;;;;-1:-1:-1;;;23083:42:0;;14992:8351;;;-1:-1:-1;;;;;14992:8351:0;23083:42;;;14992:8351;;;;;;;;;;;;-1:-1:-1;14992:8351:0;;;;;;;;;;;;;23083:42;;;;;;;;;;;;;22934:252;23140:34;;;;;;;14992:8351;;;;;;;;;;;;;;;23140:34;;;;;:::i;:::-;;;;;;;;;;;22934:252;;;;23140:34;;;;;;:::i;:::-;14992:8351;23140:34;;;;;14992:8351;;;;;;;;;23083:42;;;;;;;;;;;;;;:::i;:::-;;;;;22900:23;;;;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;;:::i;:::-;22900:23;;;;;;;-1:-1:-1;22900:23:0;;;14992:8351;;;;;;;;;22781:66;14992:8351;;22800:30;14992:8351;22800:10;14992:8351;;;;;;;;;;;22800:30;;;;;;14992:8351;22800:30;;;;;;;;;;;22781:66;-1:-1:-1;14992:8351:0;;22842:4;22800:47;22781:66;;22800:30;;;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;;:::i;:::-;22800:30;;;14992:8351;;;;22800:30;;;-1:-1:-1;22800:30:0;;;14992:8351;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16063:30:0;14992:8351;;;;;;;;;;;;;;;-1:-1:-1;;14992:8351:0;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;14992:8351:0;;;;20529:10;:24;14992:8351;;;;-1:-1:-1;;;;;14992:8351:0;;;;;;;;;;;;;;;;;;;;;;;;15210:53;;;;;;;;;15259:3;15210:53;;;14992:8351;15210:53;;;14992:8351;;;;;;;;;;;;;;15153:111;14992:8351;;;;15153:111;14992:8351;15161:42;15153:111;;;;:::i;:::-;;14992:8351;;;;;;-1:-1:-1;;;14992:8351:0;;;;;15210:53;14992:8351;;;;;;;;;;;-1:-1:-1;;14992:8351:0;;;;;;:::i;:::-;;;;;;;;16874:23;;16891:5;16874:23;;;14992:8351;-1:-1:-1;;;;;16874:8:0;14992:8351;16874:8;14992:8351;16874:8;;;14992:8351;16874:23;;;;;;;;;;;;14992:8351;;;16860:10;:37;14992:8351;;18443:12;16860:10;;18443:12;:::i;16874:23::-;;;14992:8351;16874:23;;;;;;;;;14992:8351;16874:23;;;:::i;:::-;;;14992:8351;;;;;;;:::i;:::-;16874:23;;;;;;-1:-1:-1;16874:23:0;;14992:8351;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15730:45:0;14992:8351;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;16874:23:0;;16891:5;16874:23;;;14992:8351;;;-1:-1:-1;;;;;14992:8351:0;;16874:23;14992:8351;;;16874:8;14992:8351;;16874:23;;;;;;;;;;;;;;14992:8351;;;16860:10;:37;14992:8351;;;;;;;;;;;;-1:-1:-1;;;19789:17:0;;;;;14992:8351;19789:17;14992:8351;;;15586:42;19789:17;;;;;;19887:16;19789:17;;;;;14992:8351;19845:8;19838:16;19845:8;16874:23;19845:8;;14992:8351;;16860:10;19838:16;:::i;:::-;19894:8;14992:8351;;16860:10;19887:16;:::i;:::-;19936:14;16860:10;19936:14;:::i;19789:17::-;;;;;;;;;;;;;;:::i;:::-;;;;;14992:8351;;;;;;;;;16874:23;;;;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;;;:::i;:::-;16874:23;;;;;;-1:-1:-1;16874:23:0;;;14992:8351;;;;;;;;;;;;;;;;;;-1:-1:-1;;14992:8351:0;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;16547:23:0;;16564:5;16547:23;;;14992:8351;;;;;-1:-1:-1;;;;;14992:8351:0;;;;;16547:8;14992:8351;;16547:23;;;;;;;;;;;;14992:8351;;;;;;;16538:32;16534:211;;14992:8351;;;-1:-1:-1;;;14992:8351:0;;;;;16534:211;14992:8351;;;;;;16605:20;;;;;14992:8351;16605:20;;14992:8351;16605:20;15586:42;16605:20;;;;;;;;;;;16534:211;14992:8351;;16591:10;:34;16587:147;;16534:211;;;;;16587:147;14992:8351;;;;;;16654:4;:23;;;16587:147;14992:8351;;;;;;;;16587:147;;;;16654:23;14992:8351;;;16662:15;16654:23;;16605:20;;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;;:::i;:::-;16605:20;;;;;;;;;14992:8351;;;;;;;;;16547:23;;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;;;;:::i;:::-;16547:23;;;;;;;;14992:8351;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16874:23;;16891:5;16874:23;;;14992:8351;-1:-1:-1;;;;;16874:8:0;:23;:8;14992:8351;16874:8;;;14992:8351;16874:23;;;;;;;;;;;;14992:8351;;;16860:10;:37;14992:8351;;19560:21;;;;;16860:10;19605:40;;;;:::i;16874:23::-;;;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;;:::i;:::-;16874:23;;;;;;-1:-1:-1;16874:23:0;;14992:8351;;;;;;;;;-1:-1:-1;;14992:8351:0;;;;;;;;;;;;;;;;;-1:-1:-1;;;;15424:48:0;;;:92;;;;14992:8351;;;;;;;15424:92;-1:-1:-1;;;15476:40:0;;-1:-1:-1;15424:92:0;;;14992:8351;;;;-1:-1:-1;;;;;14992:8351:0;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;14992:8351:0;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;14992:8351:0;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;-1:-1:-1;;14992:8351:0;;;;:::o;:::-;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;14992:8351:0;;;;:::o;:::-;;;:::o;:::-;;;-1:-1:-1;;;;;14992:8351:0;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14992:8351:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14992:8351:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18470:928::-;18558:10;14992:8351;;;;-1:-1:-1;18558:15:0;;;;:66;;;18470:928;14992:8351;;;;;;-1:-1:-1;;;18667:17:0;;18678:5;18667:17;;;14992:8351;;;;;;;18667:17;14992:8351;;;15586:42;18667:17;;;;;;;;;;;18470:928;14992:8351;-1:-1:-1;;;;;14992:8351:0;;18728:8;;;;;;;14992:8351;;18771:8;;14992:8351;;;;;;;;;18806:31;;;;18831:4;;18806:31;;;14992:8351;18806:31;;;;;;;;;;;;;;;;;;;;;;;;;;18470:928;14992:8351;;;18863:31;;;;18831:4;18863:31;;;14992:8351;18863:31;;;;;;;;;;;;;;;;;;;;;18470:928;14992:8351;;;;;;;;;;;18940:3;14992:8351;;;;18977:4;14992:8351;;;;;;;;;;;;18940:49;;;;14992:8351;;;;18984:4;14992:8351;;;;18940:49;;;;;;;;;;;18470:928;19000:8;;14992:8351;19000:34;;;;;;14992:8351;;;;;;19000:34;14992:8351;;;;;;;;;;;;;19000:34;;;;;:::i;:::-;;;;;;;;;;;18470:928;19059:13;;19055:336;;18470:928;;;;;;;;;;;;:::o;19055:336::-;14992:8351;;19106:31;;;;18831:4;19106:31;;;14992:8351;19106:31;;;;;;;;;;;;;;;;;;;19055:336;14992:8351;;;19169:31;;;;;18831:4;;19169:31;;;14992:8351;19169:31;;;;;;;;;;;;;;;;;19055:336;19219:13;;;;19215:53;;19055:336;19287:13;;;;;;;19283:53;;19055:336;19364:14;;;;;;;;;;:::i;:::-;19055:336;;;;;;;;;;;;;19283:53;19322:13;;;;19302:34;19322:13;;;;;;:::i;:::-;14992:8351;;-1:-1:-1;;;19302:34:0;;-1:-1:-1;;;;;14992:8351:0;;;19302:34;;;14992:8351;;;;;;;;;;;;;-1:-1:-1;14992:8351:0;;;;;;19302:34;;;;;;;;;;;;;19283:53;;;;;;;;19302:34;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;;19364:14;14992:8351;;:::i;:::-;;19302:34;;;;;;;;;;;14992:8351;;;;;;;;19215:53;19234:34;19254:13;;;;:::i;:::-;14992:8351;;;;;;;;;;;;;;;;19234:34;;;;14992:8351;;;;;;-1:-1:-1;;;;;14992:8351:0;;;;;;;;;;19234:34;;;;;;;;;;;19215:53;;;;;;19234:34;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;;:::i;:::-;;19234:34;;;;;;;;;14992:8351;;;;;;;;;19169:31;;;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;;19169:31;;;;;;;;;;14992:8351;;;;;;;;;19106:31;;;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;;19106:31;;;;;;;;;;14992:8351;;;;;;;;;19000:34;;;;;;;:::i;:::-;;;;;;14992:8351;;;;;;;;;19000:34;14992:8351;;;18940:49;;;;;;;;;;;;;;;:::i;:::-;;;;;;14992:8351;;;;;;;;;18863:31;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;;;;;;;;;;;;;18863:31;;;;;;;18806;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;;;;;;;;;18806:31;;;;14992:8351;;;;18806:31;;;;;;14992:8351;;;;;;;;;18667:17;;;;;;;;;;;;;;:::i;:::-;;;;18558:66;14992:8351;;-1:-1:-1;;;;;18577:30:0;14992:8351;18577:10;14992:8351;;;;;;;;;;;18577:30;;;;;;14992:8351;18577:30;;;;;;;;;;;18558:66;-1:-1:-1;14992:8351:0;18619:4;18577:47;18558:66;;18577:30;;;;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;;:::i;:::-;18577:30;;;;;;;-1:-1:-1;18577:30:0;;;14992:8351;;;;;;;;;17994:156;14992:8351;;-1:-1:-1;;;18072:30:0;;18096:4;18072:30;;;14992:8351;;;18072:30;;;14992:8351;;;;18072:30;;;;;;;-1:-1:-1;18072:30:0;;;17994:156;18241:10;;;;:42;;;17994:156;18237:74;;17994:156;;;;;:::o;18237:74::-;14992:8351;;-1:-1:-1;;;18285:26:0;;-1:-1:-1;;;;;14992:8351:0;;;;18072:30;18285:26;;14992:8351;;;;;;;;;;;;;;-1:-1:-1;;18285:26:0;;;;;;;;18237:74;;;;;18285:26;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;;:::i;:::-;;18285:26;;;;;;;;;;14992:8351;;;-1:-1:-1;14992:8351:0;;;;;18241:42;;18255:28;18241:42;;18072:30;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;18072:30;;;;;;;;17994:156;14992:8351;;-1:-1:-1;;;18072:30:0;;18096:4;18072:30;;;14992:8351;;17994:156;;18072:30;14992:8351;;;-1:-1:-1;;;;;14992:8351:0;;18072:30;;;;;;;-1:-1:-1;18072:30:0;;;17994:156;18138:3;;;;;:::i;:::-;17994:156::o;18072:30::-;;;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;;-1:-1:-1;14992:8351:0;;;18072:30;;;;;-1:-1:-1;18072:30:0;;18156:163;;18241:10;;;:42;;;18156:163;18237:74;;18156:163;;;:::o;18237:74::-;14992:8351;;-1:-1:-1;;;18285:26:0;;-1:-1:-1;;;;;14992:8351:0;;;18285:26;;;14992:8351;;;;;;;;;18285:26;;14992:8351;;;;;;-1:-1:-1;;14992:8351:0;18285:26;;;;;;;;18156:163;:::o;18285:26::-;;;;;;;;;;;;;;;:::i;:::-;;;14992:8351;;;;;;;:::i;:::-;;18156:163::o;18285:26::-;;;-1:-1:-1;18285:26:0;;18241:42;14992:8351;-1:-1:-1;;;;;14992:8351:0;;18255:28;;18241:42;;14992:8351;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o

Swarm Source

ipfs://16534d47faa73e46d6c96a77ae74bba3fbc64a194fb7a655b06160ff0b87843d

Block Transaction Gas Used Reward
view all blocks ##produced##

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.