ETH Price: $2,467.69 (+3.90%)

Token

 

Overview

Max Total Supply

0

Holders

0

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

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

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

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

Contract Name:
THORChain_Router

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2022-04-24
*/

// SPDX-License-Identifier: MIT
// -------------------
// Router Version: 4.1
// -------------------
pragma solidity 0.8.13;

// ERC20 Interface
interface iERC20 {
    function balanceOf(address) external view returns (uint256);
    function burn(uint) external;
}
// RUNE Interface
interface iRUNE {
    function transferTo(address, uint) external returns (bool);
}
// ROUTER Interface
interface iROUTER {
    function depositWithExpiry(address, address, uint, string calldata, uint) external;
}

// THORChain_Router is managed by THORChain Vaults
contract THORChain_Router {
    address public RUNE;

    struct Coin {
        address asset;
        uint amount;
    }

    // Vault allowance for each asset
    mapping(address => mapping(address => uint)) private _vaultAllowance;

    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;
    uint256 private _status;

    // Emitted for all deposits, the memo distinguishes for swap, add, remove, donate etc
    event Deposit(address indexed to, address indexed asset, uint amount, string memo);

    // Emitted for all outgoing transfers, the vault dictates who sent it, memo used to track.
    event TransferOut(address indexed vault, address indexed to, address asset, uint amount, string memo);

    // Emitted for all outgoing transferAndCalls, the vault dictates who sent it, memo used to track.
    event TransferOutAndCall(address indexed vault, address target, uint amount, address finalAsset, address to, uint256 amountOutMin, string memo);

    // Changes the spend allowance between vaults
    event TransferAllowance(address indexed oldVault, address indexed newVault, address asset, uint amount, string memo);

    // Specifically used to batch send the entire vault assets
    event VaultTransfer(address indexed oldVault, address indexed newVault, Coin[] coins, string memo);

    modifier nonReentrant() {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
        _status = _ENTERED;
        _;
        _status = _NOT_ENTERED;
    }

    constructor(address rune) {
        RUNE = rune;
        _status = _NOT_ENTERED;
    }

    // Deposit with Expiry (preferred)
    function depositWithExpiry(address payable vault, address asset, uint amount, string memory memo, uint expiration) external payable {
        require(block.timestamp < expiration, "THORChain_Router: expired");
        deposit(vault, asset, amount, memo);
    }

    // Deposit an asset with a memo. ETH is forwarded, ERC-20 stays in ROUTER
    function deposit(address payable vault, address asset, uint amount, string memory memo) public payable nonReentrant{
        uint safeAmount;
        if(asset == address(0)){
            safeAmount = msg.value;
            bool success = vault.send(safeAmount);
            require(success);
        } else {
            require(msg.value == 0, "THORChain_Router: unexpected eth");  // protect user from accidentally locking up eth
            if(asset == RUNE) {
                safeAmount = amount;
                iRUNE(RUNE).transferTo(address(this), amount);
                iERC20(RUNE).burn(amount);
            } else {
                safeAmount = safeTransferFrom(asset, amount); // Transfer asset
                _vaultAllowance[vault][asset] += safeAmount; // Credit to chosen vault
            }
        }
        emit Deposit(vault, asset, safeAmount, memo);
    }

    //############################## ALLOWANCE TRANSFERS ##############################

    // Use for "moving" assets between vaults (asgard<>ygg), as well "churning" to a new Asgard
    function transferAllowance(address router, address newVault, address asset, uint amount, string memory memo) external nonReentrant {
        if (router == address(this)){
            _adjustAllowances(newVault, asset, amount);
            emit TransferAllowance(msg.sender, newVault, asset, amount, memo);
        } else {
            _routerDeposit(router, newVault, asset, amount, memo);
        }
    }

    //############################## ASSET TRANSFERS ##############################

    // Any vault calls to transfer any asset to any recipient.
    // Note: Contract recipients of ETH are only given 2300 Gas to complete execution.
    function transferOut(address payable to, address asset, uint amount, string memory memo) public payable nonReentrant {
        uint safeAmount;
        if(asset == address(0)){
            safeAmount = msg.value;
            bool success = to.send(safeAmount); // Send ETH. 
            if (!success) {
                payable(address(msg.sender)).transfer(safeAmount); // For failure, bounce back to vault & continue.
            }
        } else {
            _vaultAllowance[msg.sender][asset] -= amount; // Reduce allowance
            (bool success, bytes memory data) = asset.call(abi.encodeWithSignature("transfer(address,uint256)" , to, amount));
            require(success && (data.length == 0 || abi.decode(data, (bool))));
            safeAmount = amount;
        }
        emit TransferOut(msg.sender, to, asset, safeAmount, memo);
    }

    // Any vault calls to transferAndCall on a target contract that conforms with "swapOut(address,address,uint256)"
    // Example Memo: "~1b3:ETH.0xFinalToken:0xTo:"
    // Aggregator is matched to the last three digits of whitelisted aggregators
    // FinalToken, To, amountOutMin come from originating memo
    // Memo passed in here is the "OUT:HASH" type
    function transferOutAndCall(address payable aggregator, address finalToken, address to, uint256 amountOutMin, string memory memo) public payable nonReentrant {
        uint256 _safeAmount = msg.value;
        (bool erc20Success, ) = aggregator.call{value:_safeAmount}(abi.encodeWithSignature("swapOut(address,address,uint256)", finalToken, to, amountOutMin));
        if (!erc20Success) {
            bool ethSuccess = payable(to).send(_safeAmount); // If can't swap, just send the recipient the ETH
            if (!ethSuccess) {
                payable(address(msg.sender)).transfer(_safeAmount); // For failure, bounce back to vault & continue.
            }
        }
        emit TransferOutAndCall(msg.sender, aggregator, _safeAmount, finalToken, to, amountOutMin, memo);
    }


    //############################## VAULT MANAGEMENT ##############################

    // A vault can call to "return" all assets to an asgard, including ETH. 
    function returnVaultAssets(address router, address payable asgard, Coin[] memory coins, string memory memo) external payable nonReentrant {
        if (router == address(this)){
            for(uint i = 0; i < coins.length; i++){
                _adjustAllowances(asgard, coins[i].asset, coins[i].amount);
            }
            emit VaultTransfer(msg.sender, asgard, coins, memo); // Does not include ETH.           
        } else {
            for(uint i = 0; i < coins.length; i++){
                _routerDeposit(router, asgard, coins[i].asset, coins[i].amount, memo);
            }
        }
        bool success = asgard.send(msg.value);
        require(success);
    }

    //############################## HELPERS ##############################

    function vaultAllowance(address vault, address token) public view returns(uint amount){
        return _vaultAllowance[vault][token];
    }

    // Safe transferFrom in case asset charges transfer fees
    function safeTransferFrom(address _asset, uint _amount) internal returns(uint amount) {
        uint _startBal = iERC20(_asset).balanceOf(address(this));
        (bool success, bytes memory data) = _asset.call(abi.encodeWithSignature("transferFrom(address,address,uint256)", msg.sender, address(this), _amount));
        require(success && (data.length == 0 || abi.decode(data, (bool))));
        return (iERC20(_asset).balanceOf(address(this)) - _startBal);
    }

    // Decrements and Increments Allowances between two vaults
    function _adjustAllowances(address _newVault, address _asset, uint _amount) internal {
        _vaultAllowance[msg.sender][_asset] -= _amount;
        _vaultAllowance[_newVault][_asset] += _amount;
    }

    // Adjust allowance and forwards funds to new router, credits allowance to desired vault
    function _routerDeposit(address _router, address _vault, address _asset, uint _amount, string memory _memo) internal {
        _vaultAllowance[msg.sender][_asset] -= _amount;
        (bool success,) = _asset.call(abi.encodeWithSignature("approve(address,uint256)", _router, _amount)); // Approve to transfer
        require(success);
        iROUTER(_router).depositWithExpiry(_vault, _asset, _amount, _memo, type(uint).max); // Transfer by depositing
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"rune","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"string","name":"memo","type":"string"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldVault","type":"address"},{"indexed":true,"internalType":"address","name":"newVault","type":"address"},{"indexed":false,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"string","name":"memo","type":"string"}],"name":"TransferAllowance","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"vault","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"address","name":"asset","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"string","name":"memo","type":"string"}],"name":"TransferOut","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"vault","type":"address"},{"indexed":false,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"finalAsset","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"indexed":false,"internalType":"string","name":"memo","type":"string"}],"name":"TransferOutAndCall","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldVault","type":"address"},{"indexed":true,"internalType":"address","name":"newVault","type":"address"},{"components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"indexed":false,"internalType":"struct THORChain_Router.Coin[]","name":"coins","type":"tuple[]"},{"indexed":false,"internalType":"string","name":"memo","type":"string"}],"name":"VaultTransfer","type":"event"},{"inputs":[],"name":"RUNE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"vault","type":"address"},{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"memo","type":"string"}],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address payable","name":"vault","type":"address"},{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"memo","type":"string"},{"internalType":"uint256","name":"expiration","type":"uint256"}],"name":"depositWithExpiry","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address payable","name":"asgard","type":"address"},{"components":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct THORChain_Router.Coin[]","name":"coins","type":"tuple[]"},{"internalType":"string","name":"memo","type":"string"}],"name":"returnVaultAssets","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"newVault","type":"address"},{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"memo","type":"string"}],"name":"transferAllowance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"to","type":"address"},{"internalType":"address","name":"asset","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"memo","type":"string"}],"name":"transferOut","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address payable","name":"aggregator","type":"address"},{"internalType":"address","name":"finalToken","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"string","name":"memo","type":"string"}],"name":"transferOutAndCall","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"vault","type":"address"},{"internalType":"address","name":"token","type":"address"}],"name":"vaultAllowance","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"}]

608060405234801561001057600080fd5b506040516114ad3803806114ad83398101604081905261002f91610059565b600080546001600160a01b0319166001600160a01b03929092169190911790556001600255610089565b60006020828403121561006b57600080fd5b81516001600160a01b038116811461008257600080fd5b9392505050565b611415806100986000396000f3fe60806040526004361061007b5760003560e01c80634039fd4b1161004e5780634039fd4b1461012157806344bc937b14610134578063574da7171461014757806393e4eaa91461015a57600080fd5b806303b6a673146100805780631b738b32146100d95780631fece7b4146100fb5780632923e82e1461010e575b600080fd5b34801561008c57600080fd5b506100c661009b366004610da0565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6040519081526020015b60405180910390f35b3480156100e557600080fd5b506100f96100f4366004610eb9565b610192565b005b6100f9610109366004610f38565b610248565b6100f961011c366004610fa4565b61049c565b6100f961012f366004610eb9565b610620565b6100f96101423660046110b7565b6107ac565b6100f9610155366004610f38565b61080e565b34801561016657600080fd5b5060005461017a906001600160a01b031681565b6040516001600160a01b0390911681526020016100d0565b60028054036101bc5760405162461bcd60e51b81526004016101b39061112b565b60405180910390fd5b60028055306001600160a01b0386160361022f576101db8484846109fd565b836001600160a01b0316336001600160a01b03167f05b90458f953d3fcb2d7fb25616a2fddeca749d0c47cc5c9832d0266b5346eea858585604051610222939291906111be565b60405180910390a361023c565b61023c8585858585610a76565b50506001600255505050565b60028054036102695760405162461bcd60e51b81526004016101b39061112b565b6002805560006001600160a01b0384166102b9575060405134906000906001600160a01b0387169083156108fc0290849084818181858888f193505050509050806102b357600080fd5b50610443565b34156103075760405162461bcd60e51b815260206004820181905260248201527f54484f52436861696e5f526f757465723a20756e65787065637465642065746860448201526064016101b3565b6000546001600160a01b03908116908516036103f757506000546040516302ccb1b360e41b81523060048201526024810184905283916001600160a01b031690632ccb1b30906044016020604051808303816000875af115801561036f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061039391906111ee565b50600054604051630852cd8d60e31b8152600481018590526001600160a01b03909116906342966c6890602401600060405180830381600087803b1580156103da57600080fd5b505af11580156103ee573d6000803e3d6000fd5b50505050610443565b6104018484610bc7565b6001600160a01b03808716600090815260016020908152604080832093891683529290529081208054929350839290919061043d90849061122d565b90915550505b836001600160a01b0316856001600160a01b03167fef519b7eb82aaf6ac376a6df2d793843ebfd593de5f1a0601d3cc6ab49ebb3958385604051610488929190611245565b60405180910390a350506001600255505050565b60028054036104bd5760405162461bcd60e51b81526004016101b39061112b565b60028055306001600160a01b038516036105875760005b825181101561053457610522848483815181106104f3576104f3611266565b60200260200101516000015185848151811061051157610511611266565b6020026020010151602001516109fd565b8061052c8161127c565b9150506104d4565b50826001600160a01b0316336001600160a01b03167f281daef48d91e5cd3d32db0784f6af69cd8d8d2e8c612a3568dca51ded51e08f848460405161057a929190611295565b60405180910390a36105ee565b60005b82518110156105ec576105da85858584815181106105aa576105aa611266565b6020026020010151600001518685815181106105c8576105c8611266565b60200260200101516020015186610a76565b806105e48161127c565b91505061058a565b505b6040516000906001600160a01b038516903480156108fc029184818181858888f1935050505090508061023c57600080fd5b60028054036106415760405162461bcd60e51b81526004016101b39061112b565b600280556040516001600160a01b0385811660248301528481166044830152606482018490523491600091881690839060840160408051601f198184030181529181526020820180516001600160e01b0316631230c53d60e21b179052516106a99190611300565b60006040518083038185875af1925050503d80600081146106e6576040519150601f19603f3d011682016040523d82523d6000602084013e6106eb565b606091505b5050905080610753576040516000906001600160a01b0387169084156108fc0290859084818181858888f1935050505090508061075157604051339084156108fc029085906000818181858888f1935050505015801561074f573d6000803e3d6000fd5b505b505b336001600160a01b03167f8e5841bcd195b858d53b38bcf91b38d47f3bc800469b6812d35451ab619c6f6c8884898989896040516107969695949392919061131c565b60405180910390a2505060016002555050505050565b8042106107fb5760405162461bcd60e51b815260206004820152601960248201527f54484f52436861696e5f526f757465723a20657870697265640000000000000060448201526064016101b3565b61080785858585610248565b5050505050565b600280540361082f5760405162461bcd60e51b81526004016101b39061112b565b6002805560006001600160a01b0384166108a9575060405134906000906001600160a01b0387169083156108fc0290849084818181858888f193505050509050806108a357604051339083156108fc029084906000818181858888f193505050501580156108a1573d6000803e3d6000fd5b505b506109b6565b3360009081526001602090815260408083206001600160a01b0388168452909152812080548592906108dc90849061136a565b90915550506040516001600160a01b03868116602483015260448201859052600091829187169060640160408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b1790525161093b9190611300565b6000604051808303816000865af19150503d8060008114610978576040519150601f19603f3d011682016040523d82523d6000602084013e61097d565b606091505b50915091508180156109a75750805115806109a75750808060200190518101906109a791906111ee565b6109b057600080fd5b84925050505b846001600160a01b0316336001600160a01b03167fa9cd03aa3c1b4515114539cd53d22085129d495cb9e9f9af77864526240f1bf7868486604051610488939291906111be565b3360009081526001602090815260408083206001600160a01b038616845290915281208054839290610a3090849061136a565b90915550506001600160a01b03808416600090815260016020908152604080832093861683529290529081208054839290610a6c90849061122d565b9091555050505050565b3360009081526001602090815260408083206001600160a01b038716845290915281208054849290610aa990849061136a565b90915550506040516001600160a01b038681166024830152604482018490526000919085169060640160408051601f198184030181529181526020820180516001600160e01b031663095ea7b360e01b17905251610b079190611300565b6000604051808303816000865af19150503d8060008114610b44576040519150601f19603f3d011682016040523d82523d6000602084013e610b49565b606091505b5050905080610b5757600080fd5b6040516344bc937b60e01b81526001600160a01b038716906344bc937b90610b8d90889088908890889060001990600401611381565b600060405180830381600087803b158015610ba757600080fd5b505af1158015610bbb573d6000803e3d6000fd5b50505050505050505050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015610c10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3491906113c6565b6040513360248201523060448201526064810185905290915060009081906001600160a01b0387169060840160408051601f198184030181529181526020820180516001600160e01b03166323b872dd60e01b17905251610c959190611300565b6000604051808303816000865af19150503d8060008114610cd2576040519150601f19603f3d011682016040523d82523d6000602084013e610cd7565b606091505b5091509150818015610d01575080511580610d01575080806020019051810190610d0191906111ee565b610d0a57600080fd5b6040516370a0823160e01b815230600482015283906001600160a01b038816906370a0823190602401602060405180830381865afa158015610d50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7491906113c6565b610d7e919061136a565b9695505050505050565b6001600160a01b0381168114610d9d57600080fd5b50565b60008060408385031215610db357600080fd5b8235610dbe81610d88565b91506020830135610dce81610d88565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715610e1257610e12610dd9565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715610e4157610e41610dd9565b604052919050565b600082601f830112610e5a57600080fd5b813567ffffffffffffffff811115610e7457610e74610dd9565b610e87601f8201601f1916602001610e18565b818152846020838601011115610e9c57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a08688031215610ed157600080fd5b8535610edc81610d88565b94506020860135610eec81610d88565b93506040860135610efc81610d88565b925060608601359150608086013567ffffffffffffffff811115610f1f57600080fd5b610f2b88828901610e49565b9150509295509295909350565b60008060008060808587031215610f4e57600080fd5b8435610f5981610d88565b93506020850135610f6981610d88565b925060408501359150606085013567ffffffffffffffff811115610f8c57600080fd5b610f9887828801610e49565b91505092959194509250565b60008060008060808587031215610fba57600080fd5b8435610fc581610d88565b9350602085810135610fd681610d88565b935060408681013567ffffffffffffffff80821115610ff457600080fd5b818901915089601f83011261100857600080fd5b81358181111561101a5761101a610dd9565b611028858260051b01610e18565b81815260069190911b8301850190858101908c83111561104757600080fd5b938601935b828510156110905785858e0312156110645760008081fd5b61106c610def565b853561107781610d88565b815285880135888201528252938501939086019061104c565b9750505060608901359350808411156110a857600080fd5b505050610f9887828801610e49565b600080600080600060a086880312156110cf57600080fd5b85356110da81610d88565b945060208601356110ea81610d88565b935060408601359250606086013567ffffffffffffffff81111561110d57600080fd5b61111988828901610e49565b95989497509295608001359392505050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60005b8381101561117d578181015183820152602001611165565b8381111561118c576000848401525b50505050565b600081518084526111aa816020860160208601611162565b601f01601f19169290920160200192915050565b60018060a01b03841681528260208201526060604082015260006111e56060830184611192565b95945050505050565b60006020828403121561120057600080fd5b8151801515811461121057600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561124057611240611217565b500190565b82815260406020820152600061125e6040830184611192565b949350505050565b634e487b7160e01b600052603260045260246000fd5b60006001820161128e5761128e611217565b5060010190565b60408082528351828201819052600091906020906060850190828801855b828110156112e157815180516001600160a01b031685528501518585015292850192908401906001016112b3565b505050848103828601526112f58187611192565b979650505050505050565b60008251611312818460208701611162565b9190910192915050565b6001600160a01b038781168252602082018790528581166040830152841660608201526080810183905260c060a0820181905260009061135e90830184611192565b98975050505050505050565b60008282101561137c5761137c611217565b500390565b6001600160a01b038681168252851660208201526040810184905260a0606082018190526000906113b490830185611192565b90508260808301529695505050505050565b6000602082840312156113d857600080fd5b505191905056fea26469706673582212202cfe991af8d38fa2ac1704297d010d8644417c5713ec84f255506fc12400514d64736f6c634300080d00330000000000000000000000003155ba85d5f96b2d030a4966af206230e46849cb

Deployed Bytecode

0x60806040526004361061007b5760003560e01c80634039fd4b1161004e5780634039fd4b1461012157806344bc937b14610134578063574da7171461014757806393e4eaa91461015a57600080fd5b806303b6a673146100805780631b738b32146100d95780631fece7b4146100fb5780632923e82e1461010e575b600080fd5b34801561008c57600080fd5b506100c661009b366004610da0565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6040519081526020015b60405180910390f35b3480156100e557600080fd5b506100f96100f4366004610eb9565b610192565b005b6100f9610109366004610f38565b610248565b6100f961011c366004610fa4565b61049c565b6100f961012f366004610eb9565b610620565b6100f96101423660046110b7565b6107ac565b6100f9610155366004610f38565b61080e565b34801561016657600080fd5b5060005461017a906001600160a01b031681565b6040516001600160a01b0390911681526020016100d0565b60028054036101bc5760405162461bcd60e51b81526004016101b39061112b565b60405180910390fd5b60028055306001600160a01b0386160361022f576101db8484846109fd565b836001600160a01b0316336001600160a01b03167f05b90458f953d3fcb2d7fb25616a2fddeca749d0c47cc5c9832d0266b5346eea858585604051610222939291906111be565b60405180910390a361023c565b61023c8585858585610a76565b50506001600255505050565b60028054036102695760405162461bcd60e51b81526004016101b39061112b565b6002805560006001600160a01b0384166102b9575060405134906000906001600160a01b0387169083156108fc0290849084818181858888f193505050509050806102b357600080fd5b50610443565b34156103075760405162461bcd60e51b815260206004820181905260248201527f54484f52436861696e5f526f757465723a20756e65787065637465642065746860448201526064016101b3565b6000546001600160a01b03908116908516036103f757506000546040516302ccb1b360e41b81523060048201526024810184905283916001600160a01b031690632ccb1b30906044016020604051808303816000875af115801561036f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061039391906111ee565b50600054604051630852cd8d60e31b8152600481018590526001600160a01b03909116906342966c6890602401600060405180830381600087803b1580156103da57600080fd5b505af11580156103ee573d6000803e3d6000fd5b50505050610443565b6104018484610bc7565b6001600160a01b03808716600090815260016020908152604080832093891683529290529081208054929350839290919061043d90849061122d565b90915550505b836001600160a01b0316856001600160a01b03167fef519b7eb82aaf6ac376a6df2d793843ebfd593de5f1a0601d3cc6ab49ebb3958385604051610488929190611245565b60405180910390a350506001600255505050565b60028054036104bd5760405162461bcd60e51b81526004016101b39061112b565b60028055306001600160a01b038516036105875760005b825181101561053457610522848483815181106104f3576104f3611266565b60200260200101516000015185848151811061051157610511611266565b6020026020010151602001516109fd565b8061052c8161127c565b9150506104d4565b50826001600160a01b0316336001600160a01b03167f281daef48d91e5cd3d32db0784f6af69cd8d8d2e8c612a3568dca51ded51e08f848460405161057a929190611295565b60405180910390a36105ee565b60005b82518110156105ec576105da85858584815181106105aa576105aa611266565b6020026020010151600001518685815181106105c8576105c8611266565b60200260200101516020015186610a76565b806105e48161127c565b91505061058a565b505b6040516000906001600160a01b038516903480156108fc029184818181858888f1935050505090508061023c57600080fd5b60028054036106415760405162461bcd60e51b81526004016101b39061112b565b600280556040516001600160a01b0385811660248301528481166044830152606482018490523491600091881690839060840160408051601f198184030181529181526020820180516001600160e01b0316631230c53d60e21b179052516106a99190611300565b60006040518083038185875af1925050503d80600081146106e6576040519150601f19603f3d011682016040523d82523d6000602084013e6106eb565b606091505b5050905080610753576040516000906001600160a01b0387169084156108fc0290859084818181858888f1935050505090508061075157604051339084156108fc029085906000818181858888f1935050505015801561074f573d6000803e3d6000fd5b505b505b336001600160a01b03167f8e5841bcd195b858d53b38bcf91b38d47f3bc800469b6812d35451ab619c6f6c8884898989896040516107969695949392919061131c565b60405180910390a2505060016002555050505050565b8042106107fb5760405162461bcd60e51b815260206004820152601960248201527f54484f52436861696e5f526f757465723a20657870697265640000000000000060448201526064016101b3565b61080785858585610248565b5050505050565b600280540361082f5760405162461bcd60e51b81526004016101b39061112b565b6002805560006001600160a01b0384166108a9575060405134906000906001600160a01b0387169083156108fc0290849084818181858888f193505050509050806108a357604051339083156108fc029084906000818181858888f193505050501580156108a1573d6000803e3d6000fd5b505b506109b6565b3360009081526001602090815260408083206001600160a01b0388168452909152812080548592906108dc90849061136a565b90915550506040516001600160a01b03868116602483015260448201859052600091829187169060640160408051601f198184030181529181526020820180516001600160e01b031663a9059cbb60e01b1790525161093b9190611300565b6000604051808303816000865af19150503d8060008114610978576040519150601f19603f3d011682016040523d82523d6000602084013e61097d565b606091505b50915091508180156109a75750805115806109a75750808060200190518101906109a791906111ee565b6109b057600080fd5b84925050505b846001600160a01b0316336001600160a01b03167fa9cd03aa3c1b4515114539cd53d22085129d495cb9e9f9af77864526240f1bf7868486604051610488939291906111be565b3360009081526001602090815260408083206001600160a01b038616845290915281208054839290610a3090849061136a565b90915550506001600160a01b03808416600090815260016020908152604080832093861683529290529081208054839290610a6c90849061122d565b9091555050505050565b3360009081526001602090815260408083206001600160a01b038716845290915281208054849290610aa990849061136a565b90915550506040516001600160a01b038681166024830152604482018490526000919085169060640160408051601f198184030181529181526020820180516001600160e01b031663095ea7b360e01b17905251610b079190611300565b6000604051808303816000865af19150503d8060008114610b44576040519150601f19603f3d011682016040523d82523d6000602084013e610b49565b606091505b5050905080610b5757600080fd5b6040516344bc937b60e01b81526001600160a01b038716906344bc937b90610b8d90889088908890889060001990600401611381565b600060405180830381600087803b158015610ba757600080fd5b505af1158015610bbb573d6000803e3d6000fd5b50505050505050505050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015610c10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3491906113c6565b6040513360248201523060448201526064810185905290915060009081906001600160a01b0387169060840160408051601f198184030181529181526020820180516001600160e01b03166323b872dd60e01b17905251610c959190611300565b6000604051808303816000865af19150503d8060008114610cd2576040519150601f19603f3d011682016040523d82523d6000602084013e610cd7565b606091505b5091509150818015610d01575080511580610d01575080806020019051810190610d0191906111ee565b610d0a57600080fd5b6040516370a0823160e01b815230600482015283906001600160a01b038816906370a0823190602401602060405180830381865afa158015610d50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7491906113c6565b610d7e919061136a565b9695505050505050565b6001600160a01b0381168114610d9d57600080fd5b50565b60008060408385031215610db357600080fd5b8235610dbe81610d88565b91506020830135610dce81610d88565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715610e1257610e12610dd9565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715610e4157610e41610dd9565b604052919050565b600082601f830112610e5a57600080fd5b813567ffffffffffffffff811115610e7457610e74610dd9565b610e87601f8201601f1916602001610e18565b818152846020838601011115610e9c57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a08688031215610ed157600080fd5b8535610edc81610d88565b94506020860135610eec81610d88565b93506040860135610efc81610d88565b925060608601359150608086013567ffffffffffffffff811115610f1f57600080fd5b610f2b88828901610e49565b9150509295509295909350565b60008060008060808587031215610f4e57600080fd5b8435610f5981610d88565b93506020850135610f6981610d88565b925060408501359150606085013567ffffffffffffffff811115610f8c57600080fd5b610f9887828801610e49565b91505092959194509250565b60008060008060808587031215610fba57600080fd5b8435610fc581610d88565b9350602085810135610fd681610d88565b935060408681013567ffffffffffffffff80821115610ff457600080fd5b818901915089601f83011261100857600080fd5b81358181111561101a5761101a610dd9565b611028858260051b01610e18565b81815260069190911b8301850190858101908c83111561104757600080fd5b938601935b828510156110905785858e0312156110645760008081fd5b61106c610def565b853561107781610d88565b815285880135888201528252938501939086019061104c565b9750505060608901359350808411156110a857600080fd5b505050610f9887828801610e49565b600080600080600060a086880312156110cf57600080fd5b85356110da81610d88565b945060208601356110ea81610d88565b935060408601359250606086013567ffffffffffffffff81111561110d57600080fd5b61111988828901610e49565b95989497509295608001359392505050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60005b8381101561117d578181015183820152602001611165565b8381111561118c576000848401525b50505050565b600081518084526111aa816020860160208601611162565b601f01601f19169290920160200192915050565b60018060a01b03841681528260208201526060604082015260006111e56060830184611192565b95945050505050565b60006020828403121561120057600080fd5b8151801515811461121057600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561124057611240611217565b500190565b82815260406020820152600061125e6040830184611192565b949350505050565b634e487b7160e01b600052603260045260246000fd5b60006001820161128e5761128e611217565b5060010190565b60408082528351828201819052600091906020906060850190828801855b828110156112e157815180516001600160a01b031685528501518585015292850192908401906001016112b3565b505050848103828601526112f58187611192565b979650505050505050565b60008251611312818460208701611162565b9190910192915050565b6001600160a01b038781168252602082018790528581166040830152841660608201526080810183905260c060a0820181905260009061135e90830184611192565b98975050505050505050565b60008282101561137c5761137c611217565b500390565b6001600160a01b038681168252851660208201526040810184905260a0606082018190526000906113b490830185611192565b90508260808301529695505050505050565b6000602082840312156113d857600080fd5b505191905056fea26469706673582212202cfe991af8d38fa2ac1704297d010d8644417c5713ec84f255506fc12400514d64736f6c634300080d0033

Deployed Bytecode Sourcemap

570:8304:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7349:141;;;;;;;;;;-1:-1:-1;7349:141:0;;;;;:::i;:::-;-1:-1:-1;;;;;7453:22:0;;;7423:11;7453:22;;;:15;:22;;;;;;;;:29;;;;;;;;;;;;;7349:141;;;;689:25:1;;;677:2;662:18;7349:141:0;;;;;;;;3702:412;;;;;;;;;;-1:-1:-1;3702:412:0;;;;;:::i;:::-;;:::i;:::-;;2610:896;;;;;;:::i;:::-;;:::i;6570:692::-;;;;;;:::i;:::-;;:::i;5601:793::-;;;;;;:::i;:::-;;:::i;2260:263::-;;;;;;:::i;:::-;;:::i;4361:865::-;;;;;;:::i;:::-;;:::i;603:19::-;;;;;;;;;;-1:-1:-1;603:19:0;;;;-1:-1:-1;;;;;603:19:0;;;;;;-1:-1:-1;;;;;6984:32:1;;;6966:51;;6954:2;6939:18;603:19:0;6820:203:1;3702:412:0;905:1;1978:7;;:19;1970:63;;;;-1:-1:-1;;;1970:63:0;;;;;;;:::i;:::-;;;;;;;;;905:1;2044:18;;3866:4:::1;-1:-1:-1::0;;;;;3848:23:0;::::1;::::0;3844:263:::1;;3887:42;3905:8;3915:5;3922:6;3887:17;:42::i;:::-;3979:8;-1:-1:-1::0;;;;;3949:60:0::1;3967:10;-1:-1:-1::0;;;;;3949:60:0::1;;3989:5;3996:6;4004:4;3949:60;;;;;;;;:::i;:::-;;;;;;;;3844:263;;;4042:53;4057:6;4065:8;4075:5;4082:6;4090:4;4042:14;:53::i;:::-;-1:-1:-1::0;;861:1:0;2085:7;:22;-1:-1:-1;;;3702:412:0:o;2610:896::-;905:1;1978:7;;:19;1970:63;;;;-1:-1:-1;;;1970:63:0;;;;;;;:::i;:::-;905:1;2044:18;;2736:15:::1;-1:-1:-1::0;;;;;2765:19:0;::::1;2762:682;;-1:-1:-1::0;2852:22:0::1;::::0;2813:9:::1;::::0;2837:12:::1;::::0;-1:-1:-1;;;;;2852:10:0;::::1;::::0;:22;::::1;;;::::0;2813:9;;2837:12;2852:22;2837:12;2852:22;2813:9;2852:10;:22;::::1;;;;;;2837:37;;2897:7;2889:16;;;::::0;::::1;;2785:132;2762:682;;;2946:9;:14:::0;2938:59:::1;;;::::0;-1:-1:-1;;;2938:59:0;;8509:2:1;2938:59:0::1;::::0;::::1;8491:21:1::0;;;8528:18;;;8521:30;8587:34;8567:18;;;8560:62;8639:18;;2938:59:0::1;8307:356:1::0;2938:59:0::1;3074:4;::::0;-1:-1:-1;;;;;3074:4:0;;::::1;3065:13:::0;;::::1;::::0;3062:371:::1;;-1:-1:-1::0;3143:4:0::1;::::0;3137:45:::1;::::0;-1:-1:-1;;;3137:45:0;;3168:4:::1;3137:45;::::0;::::1;8842:51:1::0;8909:18;;;8902:34;;;3112:6:0;;-1:-1:-1;;;;;3143:4:0::1;::::0;3137:22:::1;::::0;8815:18:1;;3137:45:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;3208:4:0::1;::::0;3201:25:::1;::::0;-1:-1:-1;;;3201:25:0;;::::1;::::0;::::1;689::1::0;;;-1:-1:-1;;;;;3208:4:0;;::::1;::::0;3201:17:::1;::::0;662:18:1;;3201:25:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;3062:371;;;3280:31;3297:5;3304:6;3280:16;:31::i;:::-;-1:-1:-1::0;;;;;3348:22:0;;::::1;;::::0;;;:15:::1;:22;::::0;;;;;;;:29;;::::1;::::0;;;;;;;;:43;;3267:44;;-1:-1:-1;3267:44:0;;3348:29;;:22;:43:::1;::::0;3267:44;;3348:43:::1;:::i;:::-;::::0;;;-1:-1:-1;;3062:371:0::1;3474:5;-1:-1:-1::0;;;;;3459:39:0::1;3467:5;-1:-1:-1::0;;;;;3459:39:0::1;;3481:10;3493:4;3459:39;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;861:1:0;2085:7;:22;-1:-1:-1;;;2610:896:0:o;6570:692::-;905:1;1978:7;;:19;1970:63;;;;-1:-1:-1;;;1970:63:0;;;;;;;:::i;:::-;905:1;2044:18;;6741:4:::1;-1:-1:-1::0;;;;;6723:23:0;::::1;::::0;6719:461:::1;;6766:6;6762:131;6782:5;:12;6778:1;:16;6762:131;;;6819:58;6837:6;6845:5;6851:1;6845:8;;;;;;;;:::i;:::-;;;;;;;:14;;;6861:5;6867:1;6861:8;;;;;;;;:::i;:::-;;;;;;;:15;;;6819:17;:58::i;:::-;6796:3:::0;::::1;::::0;::::1;:::i;:::-;;;;6762:131;;;;6938:6;-1:-1:-1::0;;;;;6912:46:0::1;6926:10;-1:-1:-1::0;;;;;6912:46:0::1;;6946:5;6953:4;6912:46;;;;;;;:::i;:::-;;;;;;;;6719:461;;;7031:6;7027:142;7047:5;:12;7043:1;:16;7027:142;;;7084:69;7099:6;7107;7115:5;7121:1;7115:8;;;;;;;;:::i;:::-;;;;;;;:14;;;7131:5;7137:1;7131:8;;;;;;;;:::i;:::-;;;;;;;:15;;;7148:4;7084:14;:69::i;:::-;7061:3:::0;::::1;::::0;::::1;:::i;:::-;;;;7027:142;;;;6719:461;7205:22;::::0;7190:12:::1;::::0;-1:-1:-1;;;;;7205:11:0;::::1;::::0;7217:9:::1;7205:22:::0;::::1;;;::::0;7190:12;7205:22;7190:12;7205:22;7217:9;7205:11;:22;::::1;;;;;;7190:37;;7246:7;7238:16;;;::::0;::::1;5601:793:::0;905:1;1978:7;;:19;1970:63;;;;-1:-1:-1;;;1970:63:0;;;;;;;:::i;:::-;905:1;2044:18;;5871:89:::1;::::0;-1:-1:-1;;;;;11262:15:1;;;5871:89:0::1;::::0;::::1;11244:34:1::0;11314:15;;;11294:18;;;11287:43;11346:18;;;11339:34;;;5792:9:0::1;::::0;5770:19:::1;::::0;5836:15;::::1;::::0;5792:9;;11179:18:1;;5871:89:0::1;::::0;;-1:-1:-1;;5871:89:0;;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;5871:89:0::1;-1:-1:-1::0;;;5871:89:0::1;::::0;;5836:125;::::1;::::0;5871:89;5836:125:::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5812:149;;;5977:12;5972:308;;6024:29;::::0;6006:15:::1;::::0;-1:-1:-1;;;;;6024:16:0;::::1;::::0;:29;::::1;;;::::0;6041:11;;6006:15;6024:29;6006:15;6024:29;6041:11;6024:16;:29;::::1;;;;;;6006:47;;6123:10;6118:151;;6154:50;::::0;6170:10:::1;::::0;6154:50;::::1;;;::::0;6192:11;;6154:50:::1;::::0;;;6192:11;6170:10;6154:50;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;6118:151;5991:289;5972:308;6314:10;-1:-1:-1::0;;;;;6295:91:0::1;;6326:10;6338:11;6351:10;6363:2;6367:12;6381:4;6295:91;;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;861:1:0;2085:7;:22;-1:-1:-1;;;;;5601:793:0:o;2260:263::-;2429:10;2411:15;:28;2403:66;;;;-1:-1:-1;;;2403:66:0;;12522:2:1;2403:66:0;;;12504:21:1;12561:2;12541:18;;;12534:30;12600:27;12580:18;;;12573:55;12645:18;;2403:66:0;12320:349:1;2403:66:0;2480:35;2488:5;2495;2502:6;2510:4;2480:7;:35::i;:::-;2260:263;;;;;:::o;4361:865::-;905:1;1978:7;;:19;1970:63;;;;-1:-1:-1;;;1970:63:0;;;;;;;:::i;:::-;905:1;2044:18;;4489:15:::1;-1:-1:-1::0;;;;;4518:19:0;::::1;4515:636;;-1:-1:-1::0;4605:19:0::1;::::0;4566:9:::1;::::0;4590:12:::1;::::0;-1:-1:-1;;;;;4605:7:0;::::1;::::0;:19;::::1;;;::::0;4566:9;;4590:12;4605:19;4590:12;4605:19;4566:9;4605:7;:19;::::1;;;;;;4590:34;;4658:7;4653:147;;4686:49;::::0;4702:10:::1;::::0;4686:49;::::1;;;::::0;4724:10;;4686:49:::1;::::0;;;4724:10;4702;4686:49;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;4653:147;4538:273;4515:636;;;4848:10;4832:27;::::0;;;:15:::1;:27;::::0;;;;;;;-1:-1:-1;;;;;4832:34:0;::::1;::::0;;;;;;;:44;;4870:6;;4832:27;:44:::1;::::0;4870:6;;4832:44:::1;:::i;:::-;::::0;;;-1:-1:-1;;4958:65:0::1;::::0;-1:-1:-1;;;;;8860:32:1;;;4958:65:0::1;::::0;::::1;8842:51:1::0;8909:18;;;8902:34;;;4912:12:0::1;::::0;;;4947:10;::::1;::::0;8815:18:1;;4958:65:0::1;::::0;;-1:-1:-1;;4958:65:0;;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;4958:65:0::1;-1:-1:-1::0;;;4958:65:0::1;::::0;;4947:77;::::1;::::0;4958:65;4947:77:::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4911:113;;;;5047:7;:57;;;;-1:-1:-1::0;5059:11:0;;:16;;:44:::1;;;5090:4;5079:24;;;;;;;;;;;;:::i;:::-;5039:66;;;::::0;::::1;;5133:6;5120:19;;4817:334;;4515:636;5190:2;-1:-1:-1::0;;;;;5166:52:0::1;5178:10;-1:-1:-1::0;;;;;5166:52:0::1;;5194:5;5201:10;5213:4;5166:52;;;;;;;;:::i;8101:206::-:0;8213:10;8197:27;;;;:15;:27;;;;;;;;-1:-1:-1;;;;;8197:35:0;;;;;;;;;:46;;8236:7;;8197:27;:46;;8236:7;;8197:46;:::i;:::-;;;;-1:-1:-1;;;;;;;8254:26:0;;;;;;;:15;:26;;;;;;;;:34;;;;;;;;;;;:45;;8292:7;;8254:26;:45;;8292:7;;8254:45;:::i;:::-;;;;-1:-1:-1;;;;;8101:206:0:o;8409:462::-;8553:10;8537:27;;;;:15;:27;;;;;;;;-1:-1:-1;;;;;8537:35:0;;;;;;;;;:46;;8576:7;;8537:27;:46;;8576:7;;8537:46;:::i;:::-;;;;-1:-1:-1;;8624:69:0;;-1:-1:-1;;;;;8860:32:1;;;8624:69:0;;;8842:51:1;8909:18;;;8902:34;;;8595:12:0;;8612:11;;;;8815:18:1;;8624:69:0;;;-1:-1:-1;;8624:69:0;;;;;;;;;;;;;;-1:-1:-1;;;;;8624:69:0;-1:-1:-1;;;8624:69:0;;;8612:82;;;8624:69;8612:82;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8594:100;;;8736:7;8728:16;;;;;;8755:82;;-1:-1:-1;;;8755:82:0;;-1:-1:-1;;;;;8755:34:0;;;;;:82;;8790:6;;8798;;8806:7;;8815:5;;-1:-1:-1;;8822:14:0;8755:82;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8526:345;8409:462;;;;;:::o;7560:469::-;7674:39;;-1:-1:-1;;;7674:39:0;;7707:4;7674:39;;;6966:51:1;7633:11:0;;;;-1:-1:-1;;;;;7674:24:0;;;;;6939:18:1;;7674:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7772:100;;7837:10;7772:100;;;11244:34:1;7857:4:0;11294:18:1;;;11287:43;11346:18;;;11339:34;;;7657:56:0;;-1:-1:-1;7725:12:0;;;;-1:-1:-1;;;;;7760:11:0;;;11179:18:1;;7772:100:0;;;-1:-1:-1;;7772:100:0;;;;;;;;;;;;;;-1:-1:-1;;;;;7772:100:0;-1:-1:-1;;;7772:100:0;;;7760:113;;;7772:100;7760:113;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7724:149;;;;7892:7;:57;;;;-1:-1:-1;7904:11:0;;:16;;:44;;;7935:4;7924:24;;;;;;;;;;;;:::i;:::-;7884:66;;;;;;7969:39;;-1:-1:-1;;;7969:39:0;;8002:4;7969:39;;;6966:51:1;8011:9:0;;-1:-1:-1;;;;;7969:24:0;;;;;6939:18:1;;7969:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:51;;;;:::i;:::-;7961:60;7560:469;-1:-1:-1;;;;;;7560:469:0:o;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:388::-;218:6;226;279:2;267:9;258:7;254:23;250:32;247:52;;;295:1;292;285:12;247:52;334:9;321:23;353:31;378:5;353:31;:::i;:::-;403:5;-1:-1:-1;460:2:1;445:18;;432:32;473:33;432:32;473:33;:::i;:::-;525:7;515:17;;;150:388;;;;;:::o;725:127::-;786:10;781:3;777:20;774:1;767:31;817:4;814:1;807:15;841:4;838:1;831:15;857:251;929:2;923:9;;;959:15;;1004:18;989:34;;1025:22;;;986:62;983:88;;;1051:18;;:::i;:::-;1087:2;1080:22;857:251;:::o;1113:275::-;1184:2;1178:9;1249:2;1230:13;;-1:-1:-1;;1226:27:1;1214:40;;1284:18;1269:34;;1305:22;;;1266:62;1263:88;;;1331:18;;:::i;:::-;1367:2;1360:22;1113:275;;-1:-1:-1;1113:275:1:o;1393:531::-;1436:5;1489:3;1482:4;1474:6;1470:17;1466:27;1456:55;;1507:1;1504;1497:12;1456:55;1543:6;1530:20;1569:18;1565:2;1562:26;1559:52;;;1591:18;;:::i;:::-;1635:55;1678:2;1659:13;;-1:-1:-1;;1655:27:1;1684:4;1651:38;1635:55;:::i;:::-;1715:2;1706:7;1699:19;1761:3;1754:4;1749:2;1741:6;1737:15;1733:26;1730:35;1727:55;;;1778:1;1775;1768:12;1727:55;1843:2;1836:4;1828:6;1824:17;1817:4;1808:7;1804:18;1791:55;1891:1;1866:16;;;1884:4;1862:27;1855:38;;;;1870:7;1393:531;-1:-1:-1;;;1393:531:1:o;1929:809::-;2034:6;2042;2050;2058;2066;2119:3;2107:9;2098:7;2094:23;2090:33;2087:53;;;2136:1;2133;2126:12;2087:53;2175:9;2162:23;2194:31;2219:5;2194:31;:::i;:::-;2244:5;-1:-1:-1;2301:2:1;2286:18;;2273:32;2314:33;2273:32;2314:33;:::i;:::-;2366:7;-1:-1:-1;2425:2:1;2410:18;;2397:32;2438:33;2397:32;2438:33;:::i;:::-;2490:7;-1:-1:-1;2544:2:1;2529:18;;2516:32;;-1:-1:-1;2599:3:1;2584:19;;2571:33;2627:18;2616:30;;2613:50;;;2659:1;2656;2649:12;2613:50;2682;2724:7;2715:6;2704:9;2700:22;2682:50;:::i;:::-;2672:60;;;1929:809;;;;;;;;:::o;2743:675::-;2847:6;2855;2863;2871;2924:3;2912:9;2903:7;2899:23;2895:33;2892:53;;;2941:1;2938;2931:12;2892:53;2980:9;2967:23;2999:31;3024:5;2999:31;:::i;:::-;3049:5;-1:-1:-1;3106:2:1;3091:18;;3078:32;3119:33;3078:32;3119:33;:::i;:::-;3171:7;-1:-1:-1;3225:2:1;3210:18;;3197:32;;-1:-1:-1;3280:2:1;3265:18;;3252:32;3307:18;3296:30;;3293:50;;;3339:1;3336;3329:12;3293:50;3362;3404:7;3395:6;3384:9;3380:22;3362:50;:::i;:::-;3352:60;;;2743:675;;;;;;;:::o;3423:1821::-;3572:6;3580;3588;3596;3649:3;3637:9;3628:7;3624:23;3620:33;3617:53;;;3666:1;3663;3656:12;3617:53;3705:9;3692:23;3724:31;3749:5;3724:31;:::i;:::-;3774:5;-1:-1:-1;3798:2:1;3837:18;;;3824:32;3865:33;3824:32;3865:33;:::i;:::-;3917:7;-1:-1:-1;3943:2:1;3981:18;;;3968:32;4019:18;4049:14;;;4046:34;;;4076:1;4073;4066:12;4046:34;4114:6;4103:9;4099:22;4089:32;;4159:7;4152:4;4148:2;4144:13;4140:27;4130:55;;4181:1;4178;4171:12;4130:55;4217:2;4204:16;4239:2;4235;4232:10;4229:36;;;4245:18;;:::i;:::-;4285:36;4317:2;4312;4309:1;4305:10;4301:19;4285:36;:::i;:::-;4355:15;;;4437:1;4433:10;;;;4425:19;;4421:28;;;4386:12;;;;4461:19;;;4458:39;;;4493:1;4490;4483:12;4458:39;4517:11;;;;4537:504;4553:6;4548:3;4545:15;4537:504;;;4633:2;4627:3;4618:7;4614:17;4610:26;4607:116;;;4677:1;4706:2;4702;4695:14;4607:116;4751:22;;:::i;:::-;4814:3;4801:17;4831:33;4856:7;4831:33;:::i;:::-;4877:24;;4952:12;;;4939:26;4921:16;;;4914:52;4979:20;;4570:12;;;;5019;;;;4537:504;;;5060:5;-1:-1:-1;;;5118:2:1;5103:18;;5090:32;;-1:-1:-1;5134:16:1;;;5131:36;;;5163:1;5160;5153:12;5131:36;;;;5186:52;5230:7;5219:8;5208:9;5204:24;5186:52;:::i;6071:744::-;6184:6;6192;6200;6208;6216;6269:3;6257:9;6248:7;6244:23;6240:33;6237:53;;;6286:1;6283;6276:12;6237:53;6325:9;6312:23;6344:31;6369:5;6344:31;:::i;:::-;6394:5;-1:-1:-1;6451:2:1;6436:18;;6423:32;6464:33;6423:32;6464:33;:::i;:::-;6516:7;-1:-1:-1;6570:2:1;6555:18;;6542:32;;-1:-1:-1;6625:2:1;6610:18;;6597:32;6652:18;6641:30;;6638:50;;;6684:1;6681;6674:12;6638:50;6707;6749:7;6740:6;6729:9;6725:22;6707:50;:::i;:::-;6071:744;;;;-1:-1:-1;6071:744:1;;6804:3;6789:19;6776:33;;6071:744;-1:-1:-1;;;6071:744:1:o;7028:355::-;7230:2;7212:21;;;7269:2;7249:18;;;7242:30;7308:33;7303:2;7288:18;;7281:61;7374:2;7359:18;;7028:355::o;7388:258::-;7460:1;7470:113;7484:6;7481:1;7478:13;7470:113;;;7560:11;;;7554:18;7541:11;;;7534:39;7506:2;7499:10;7470:113;;;7601:6;7598:1;7595:13;7592:48;;;7636:1;7627:6;7622:3;7618:16;7611:27;7592:48;;7388:258;;;:::o;7651:::-;7693:3;7731:5;7725:12;7758:6;7753:3;7746:19;7774:63;7830:6;7823:4;7818:3;7814:14;7807:4;7800:5;7796:16;7774:63;:::i;:::-;7891:2;7870:15;-1:-1:-1;;7866:29:1;7857:39;;;;7898:4;7853:50;;7651:258;-1:-1:-1;;7651:258:1:o;7914:388::-;8148:1;8144;8139:3;8135:11;8131:19;8123:6;8119:32;8108:9;8101:51;8188:6;8183:2;8172:9;8168:18;8161:34;8231:2;8226;8215:9;8211:18;8204:30;8082:4;8251:45;8292:2;8281:9;8277:18;8269:6;8251:45;:::i;:::-;8243:53;7914:388;-1:-1:-1;;;;;7914:388:1:o;8947:277::-;9014:6;9067:2;9055:9;9046:7;9042:23;9038:32;9035:52;;;9083:1;9080;9073:12;9035:52;9115:9;9109:16;9168:5;9161:13;9154:21;9147:5;9144:32;9134:60;;9190:1;9187;9180:12;9134:60;9213:5;8947:277;-1:-1:-1;;;8947:277:1:o;9229:127::-;9290:10;9285:3;9281:20;9278:1;9271:31;9321:4;9318:1;9311:15;9345:4;9342:1;9335:15;9361:128;9401:3;9432:1;9428:6;9425:1;9422:13;9419:39;;;9438:18;;:::i;:::-;-1:-1:-1;9474:9:1;;9361:128::o;9494:291::-;9671:6;9660:9;9653:25;9714:2;9709;9698:9;9694:18;9687:30;9634:4;9734:45;9775:2;9764:9;9760:18;9752:6;9734:45;:::i;:::-;9726:53;9494:291;-1:-1:-1;;;;9494:291:1:o;9790:127::-;9851:10;9846:3;9842:20;9839:1;9832:31;9882:4;9879:1;9872:15;9906:4;9903:1;9896:15;9922:135;9961:3;9982:17;;;9979:43;;10002:18;;:::i;:::-;-1:-1:-1;10049:1:1;10038:13;;9922:135::o;10062:937::-;10321:2;10373:21;;;10443:13;;10346:18;;;10465:22;;;10292:4;;10321:2;10540:4;;10518:2;10503:18;;;10567:15;;;10292:4;10610:280;10624:6;10621:1;10618:13;10610:280;;;10683:13;;10725:9;;-1:-1:-1;;;;;10721:35:1;10709:48;;10797:11;;10791:18;10777:12;;;10770:40;10830:12;;;;10865:15;;;;10753:1;10639:9;10610:280;;;10614:3;;;10935:9;10930:3;10926:19;10921:2;10910:9;10906:18;10899:47;10963:30;10989:3;10981:6;10963:30;:::i;:::-;10955:38;10062:937;-1:-1:-1;;;;;;;10062:937:1:o;11384:274::-;11513:3;11551:6;11545:13;11567:53;11613:6;11608:3;11601:4;11593:6;11589:17;11567:53;:::i;:::-;11636:16;;;;;11384:274;-1:-1:-1;;11384:274:1:o;11663:652::-;-1:-1:-1;;;;;11998:15:1;;;11980:34;;12045:2;12030:18;;12023:34;;;12093:15;;;12088:2;12073:18;;12066:43;12145:15;;12140:2;12125:18;;12118:43;12192:3;12177:19;;12170:35;;;12242:3;11960;12221:19;;12214:32;;;11923:4;;12263:46;;12289:19;;12281:6;12263:46;:::i;:::-;12255:54;11663:652;-1:-1:-1;;;;;;;;11663:652:1:o;12674:125::-;12714:4;12742:1;12739;12736:8;12733:34;;;12747:18;;:::i;:::-;-1:-1:-1;12784:9:1;;12674:125::o;13099:563::-;-1:-1:-1;;;;;13398:15:1;;;13380:34;;13450:15;;13445:2;13430:18;;13423:43;13497:2;13482:18;;13475:34;;;13360:3;13540:2;13525:18;;13518:31;;;13323:4;;13566:46;;13592:19;;13584:6;13566:46;:::i;:::-;13558:54;;13649:6;13643:3;13632:9;13628:19;13621:35;13099:563;;;;;;;;:::o;13667:184::-;13737:6;13790:2;13778:9;13769:7;13765:23;13761:32;13758:52;;;13806:1;13803;13796:12;13758:52;-1:-1:-1;13829:16:1;;13667:184;-1:-1:-1;13667:184:1:o

Swarm Source

ipfs://2cfe991af8d38fa2ac1704297d010d8644417c5713ec84f255506fc12400514d
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.