ETH Price: $2,894.39 (-10.17%)
Gas: 16 Gwei

Contract

0x1c7C4348f17f690D271fF4DE3A9214CB09CfF926
 

Overview

ETH Balance

0.080216878282661862 ETH

Eth Value

$232.18 (@ $2,894.39/ETH)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Execute Swap168025152023-03-11 4:37:23482 days ago1678509443IN
0x1c7C4348...B09CfF926
0.04572596 ETH0.03222228164.78952628
Execute Cross Ex...165511032023-02-03 22:00:11517 days ago1675461611IN
0x1c7C4348...B09CfF926
0.00029813 ETH0.003804327.85628509
Execute Swap1Inc...163331672023-01-04 11:36:35547 days ago1672832195IN
0x1c7C4348...B09CfF926
0 ETH0.0021332518.39126322
Execute Swap1Inc...163330992023-01-04 11:22:59547 days ago1672831379IN
0x1c7C4348...B09CfF926
0 ETH0.0005732815.45795881
Execute Swap161926942022-12-15 21:11:11567 days ago1671138671IN
0x1c7C4348...B09CfF926
0.00558822 ETH0.0038830420.49016353
Execute Swap161926242022-12-15 20:57:11567 days ago1671137831IN
0x1c7C4348...B09CfF926
0.0066634 ETH0.0028157424.43249716
Execute Swap159373042022-11-10 4:42:47603 days ago1668055367IN
0x1c7C4348...B09CfF926
0.00650878 ETH0.0027509823.86554069
Execute Swap1Inc...159228182022-11-08 4:07:11605 days ago1667880431IN
0x1c7C4348...B09CfF926
0.10634824 ETH0.003830123.23724145
Execute Swap158248722022-10-25 11:42:35618 days ago1666698155IN
0x1c7C4348...B09CfF926
0.0001003 ETH0.0019624112.82923355
Execute Swap158248092022-10-25 11:29:59618 days ago1666697399IN
0x1c7C4348...B09CfF926
0.01003 ETH0.001764911.53711326
Execute Cross Ex...158158982022-10-24 5:32:23619 days ago1666589543IN
0x1c7C4348...B09CfF926
0.00030544 ETH0.0014565410.66529863
Execute Cross Ex...158158912022-10-24 5:30:59619 days ago1666589459IN
0x1c7C4348...B09CfF926
0.00030544 ETH0.0016030111.73778282
Execute Swap157283442022-10-12 0:07:35632 days ago1665533255IN
0x1c7C4348...B09CfF926
0.001003 ETH0.0024900317.61275473
Execute Swap156660192022-10-03 7:05:11640 days ago1664780711IN
0x1c7C4348...B09CfF926
0.00000023 ETH0.0017010710.50693613
Execute Swap1Inc...156659602022-10-03 6:52:59640 days ago1664779979IN
0x1c7C4348...B09CfF926
0.001003 ETH0.001561189.30788422
Execute Swap1Inc...156659432022-10-03 6:49:35640 days ago1664779775IN
0x1c7C4348...B09CfF926
0.001003 ETH0.0019051910.30797206
Execute Swap1Inc...156497722022-10-01 0:35:35643 days ago1664584535IN
0x1c7C4348...B09CfF926
0.00000022 ETH0.0030903410.21540538
Execute Swap156326542022-09-28 15:12:35645 days ago1664377955IN
0x1c7C4348...B09CfF926
0.01613233 ETH0.0044946822.48524229
Execute Cross Ex...156167462022-09-26 9:46:47647 days ago1664185607IN
0x1c7C4348...B09CfF926
0.00000514 ETH0.000756174.66421542
Execute Cross Ex...156167412022-09-26 9:45:47647 days ago1664185547IN
0x1c7C4348...B09CfF926
0.00000514 ETH0.000851575.25262548
Execute Cross Ex...156167362022-09-26 9:44:47647 days ago1664185487IN
0x1c7C4348...B09CfF926
0.00031353 ETH0.000767924.73670122
Execute Cross Ex...156167302022-09-26 9:43:35647 days ago1664185415IN
0x1c7C4348...B09CfF926
0.00031353 ETH0.000783794.83458202
Execute Cross Ex...156167252022-09-26 9:42:35647 days ago1664185355IN
0x1c7C4348...B09CfF926
0.00031434 ETH0.000721054.44760471
Execute Swap156167012022-09-26 9:37:47647 days ago1664185067IN
0x1c7C4348...B09CfF926
0.00121536 ETH0.000719944.45632311
Execute Swap1Inc...155229502022-09-12 20:44:19661 days ago1663015459IN
0x1c7C4348...B09CfF926
9.78757364 ETH0.0034678215.13774041
View all transactions

Latest 20 internal transactions

Advanced mode:
Parent Transaction Hash Block From To Value
165511032023-02-03 22:00:11517 days ago1675461611
0x1c7C4348...B09CfF926
0.00029813 ETH
163331662023-01-04 11:36:23547 days ago1672832183
0x1c7C4348...B09CfF926
1 wei
163331662023-01-04 11:36:23547 days ago1672832183
0x1c7C4348...B09CfF926
1 wei
159228182022-11-08 4:07:11605 days ago1667880431
0x1c7C4348...B09CfF926
0.1 ETH
158248722022-10-25 11:42:35618 days ago1666698155
0x1c7C4348...B09CfF926
0.0001 ETH
158248092022-10-25 11:29:59618 days ago1666697399
0x1c7C4348...B09CfF926
0.01 ETH
158158982022-10-24 5:32:23619 days ago1666589543
0x1c7C4348...B09CfF926
0.00030544 ETH
158158912022-10-24 5:30:59619 days ago1666589459
0x1c7C4348...B09CfF926
0.00030544 ETH
157283442022-10-12 0:07:35632 days ago1665533255
0x1c7C4348...B09CfF926
0.001 ETH
156659602022-10-03 6:52:59640 days ago1664779979
0x1c7C4348...B09CfF926
0.001 ETH
156659432022-10-03 6:49:35640 days ago1664779775
0x1c7C4348...B09CfF926
0.001 ETH
156326542022-09-28 15:12:35645 days ago1664377955
0x1c7C4348...B09CfF926
0.01 ETH
156167462022-09-26 9:46:47647 days ago1664185607
0x1c7C4348...B09CfF926
0.00000514 ETH
156167412022-09-26 9:45:47647 days ago1664185547
0x1c7C4348...B09CfF926
0.00000514 ETH
156167362022-09-26 9:44:47647 days ago1664185487
0x1c7C4348...B09CfF926
0.00031353 ETH
156167302022-09-26 9:43:35647 days ago1664185415
0x1c7C4348...B09CfF926
0.00031353 ETH
156167252022-09-26 9:42:35647 days ago1664185355
0x1c7C4348...B09CfF926
0.00031434 ETH
155229502022-09-12 20:44:19661 days ago1663015459
0x1c7C4348...B09CfF926
9.78282 ETH
155229372022-09-12 20:40:33661 days ago1663015233
0x1c7C4348...B09CfF926
1 ETH
152271642022-07-27 22:14:03708 days ago1658960043
0x1c7C4348...B09CfF926
0.0001 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Degen

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-07-08
*/

//SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;


abstract contract Ownable {
    address private _owner;

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

    /**
     * @dev The Ownable constructor sets the original `owner` of the contract to the sender
     * account.
     */
    constructor () {
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), _owner);
    }

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(isOwner(),"Not Owner");
        _;
    }

    /**
     * @return true if `msg.sender` is the owner of the contract.
     */
    function isOwner() public view returns (bool) {
        return msg.sender == _owner;
    }

    /**
     * @dev Allows the current owner to relinquish control of the contract.
     * @notice Renouncing to ownership will leave the contract without an owner.
     * It will not be possible to call the functions with the `onlyOwner`
     * modifier anymore.
     */
    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Allows the current owner to transfer control of the contract to a newOwner.
     * @param newOwner The address to transfer ownership to.
     */
    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers control of the contract to a newOwner.
     * @param newOwner The address to transfer ownership to.
     */
    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0),"Zero address not allowed");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}


interface ISwapFactory {
    function swap(address tokenA, address tokenB, uint256 amount, address user, uint256 crossOrderType, uint256 dexId, uint256 deadline) 
    external payable returns (bool);
}

interface IContractCaller {
    function callContract(address to, address token, uint256 value, bytes calldata data) external payable;
}

library TransferHelper {
    function safeApprove(address token, address to, uint256 value) internal {
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: APPROVE_FAILED');
    }

    function safeTransfer(address token, address to, uint256 value) internal {
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FAILED');
    }

    function safeTransferFrom(address token, address from, address to, uint256 value) internal {
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED');
    }

    function safeTransferETH(address to, uint256 value) internal {
        (bool success, ) = to.call{value: value}(new bytes(0));
        require(success, 'TransferHelper: ETH_TRANSFER_FAILED');
    }
}

interface IERC20 {
    function balanceOf(address account) external view returns (uint256);
}

interface IUni {

    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
    external payable
    returns (uint[] memory amounts);
    
    function swapExactTokensForTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) 
    external 
    returns (uint[] memory amounts);

    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    returns (uint[] memory amounts);

    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);

    function WETH() external pure returns (address);

}

interface IReimbursement {
    function getLicenseeFee(address licenseeVault, address projectContract) external view returns(uint256); // return fee percentage with 2 decimals
    function getVaultOwner(address vault) external view returns(address);
    // returns address of fee receiver or address(0) if licensee can't receive the fee (fee should be returns to user)
    function requestReimbursement(address user, uint256 feeAmount, address licenseeVault) external returns(address);
}

contract Degen is Ownable {
    using TransferHelper for address;
    enum OrderType {EthForTokens, TokensForEth, TokensForTokens, EthForEth}
    
    IUni public Uni = IUni(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); //mainnet network address for uniswap (valid for Ropsten as well)
    IUni public Sushi = IUni(0xd9e1cE17f2641f24aE83637ab66a2cca9C378B9F); // Mainnet network address for sushiswap
    //address public _sushi = address(0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506); // Ropsten network address for sushiswap
    //address public USDT = address(0x47A530f3Fa882502344DC491549cA9c058dbC7Da); // Ropsten test net USDT test token
    address public USDT = address(0xdAC17F958D2ee523a2206206994597C13D831ec7); // USDT Token Address
    address public system;
    address public contractCaller;
    uint256 public processingFee = 0 ;
    
    uint256 private deadlineLimit = 20*60;      // 20 minutes by default 
    
    uint256 private collectedFees = 1; // amount of collected fee (starts from 1 to avoid additional gas usage)
    address public feeReceiver; // address which receive the fee (by default is validator)


    IReimbursement public reimbursementContract;      // reimbursement contract address

    address public companyVault;    // the vault address of our company registered in reimbursement contract

    ISwapFactory public swapFactory;
   
    modifier onlySystem() {
        require(msg.sender == system || owner() == msg.sender,"Caller is not the system");
        _;
    }
    
    constructor(address _swapFactory, address _system, address _contractCaller) 
    {
        swapFactory = ISwapFactory(_swapFactory);
        system = _system;
        contractCaller = _contractCaller;
    }

    function setContractCaller(address _contractCaller) external onlyOwner {
        contractCaller = _contractCaller;
    }    

    function setCompanyVault(address _comapnyVault) external onlyOwner {
        companyVault = _comapnyVault;
    }

    function setReimbursementContract(address _reimbursementContarct) external onlyOwner {
        reimbursementContract = IReimbursement(_reimbursementContarct);
    }

    function setProcessingFee(uint256 _processingFees) external onlySystem {
        processingFee = _processingFees;
    }

    function setSwapFactory(address _swapFactory) external onlyOwner {
        swapFactory = ISwapFactory(_swapFactory);
    }
    
    function setSystem(address _system) external onlyOwner {
        system = _system;
    }
    
    function setFeeReceiver(address _addr) external onlyOwner {
        feeReceiver = _addr;
    }
    
    function getDeadlineLimit() public view returns(uint256) {
        return deadlineLimit;
    }
    
    function setDeadlineLimit(uint256 limit) external onlyOwner {
        deadlineLimit = limit;
    }

    // get amount of collected fees that can be claimed
    function getColletedFees() external view returns (uint256) {
        // collectedFees starts from 1 to avoid additional gas usage to initiate storage (when collectedFees = 0)
        return collectedFees - 1;
    }

    // claim fees by feeReceiver
    function claimFee() external returns (uint256 feeAmount) {
        require(msg.sender == feeReceiver, "This fee can be claimed only by fee receiver!!");
        feeAmount = collectedFees - 1;
        collectedFees = 1;        
        TransferHelper.safeTransferETH(msg.sender, feeAmount);
    }
    
    
    // Call function processFee() at the end of main function for correct gas usage calculation.
    // txGas - is gasleft() on start of calling contract. Put `uint256 txGas = gasleft();` as a first command in function
    // feeAmount - fee amount that user paid
    // processing - processing fee (for cross-chain swaping)
    // licenseeVault - address that licensee received on registration and should provide when users comes from their site
    // user - address of user who has to get reimbursement (usually msg.sender)

    function processFee(uint256 txGas, uint256 feeAmount, uint256 processing, address licenseeVault, address user) internal {
        if (address(reimbursementContract) == address(0)) {
            if (feeAmount != 0) payable(user).transfer(feeAmount); // return fee to sender if no reimbursement contract
            if (processing != 0) payable(system).transfer(processing);  // transfer to fee receiver
            return;
        }
        
        uint256 licenseeFeeAmount;
        if (licenseeVault != address(0)) {
            uint256 companyFeeRate = reimbursementContract.getLicenseeFee(companyVault, address(this));
            uint256 licenseeFeeRate = reimbursementContract.getLicenseeFee(licenseeVault, address(this));
            if (licenseeFeeRate != 0)
                licenseeFeeAmount = (feeAmount * licenseeFeeRate)/(licenseeFeeRate + companyFeeRate);
            if (licenseeFeeAmount != 0) {
                address licenseeFeeTo = reimbursementContract.requestReimbursement(user, licenseeFeeAmount, licenseeVault);
                if (licenseeFeeTo == address(0)) {
                    payable(user).transfer(licenseeFeeAmount);    // refund to user
                } else {
                    payable(licenseeFeeTo).transfer(licenseeFeeAmount);  // transfer to fee receiver
                }
            }
        }
        feeAmount -= licenseeFeeAmount; // company's part of fee
        collectedFees += feeAmount; 
        
        if (processing != 0) 
            payable(system).transfer(processing);  // transfer to fee receiver
        
        txGas -= gasleft(); // get gas amount that was spent on Licensee fee
        txGas = txGas * tx.gasprice;
        // request reimbursement for user
        reimbursementContract.requestReimbursement(user, feeAmount+txGas+processing, companyVault);
    }
    
    
    function _swap( 
        OrderType orderType, 
        address[] memory path, 
        uint256 assetInOffered,
        uint256 minExpectedAmount, 
        address to,
        uint256 dexId,
        uint256 deadline
    ) internal returns(uint256 amountOut) {
         
        require(dexId < 2, "Invalid DEX Id!");
        require(deadline >= block.timestamp, "EXPIRED: Deadline for transaction already passed.");

       if(dexId == 0){
            uint[] memory swapResult;
            if(orderType == OrderType.EthForTokens) {
                 path[0] = Uni.WETH();
                 swapResult = Uni.swapExactETHForTokens{value:assetInOffered}(0, path, to,block.timestamp);
            }
            else if (orderType == OrderType.TokensForEth) {
                path[path.length-1] = Uni.WETH();
                TransferHelper.safeApprove(path[0], address(Uni), assetInOffered);
                swapResult = Uni.swapExactTokensForETH(assetInOffered, 0, path,to, block.timestamp);
            }
            else if (orderType == OrderType.TokensForTokens) {
                TransferHelper.safeApprove(path[0], address(Uni), assetInOffered);
                swapResult = Uni.swapExactTokensForTokens(assetInOffered, minExpectedAmount, path, to, block.timestamp);
            }
            amountOut = swapResult[swapResult.length - 1];
        } else if(dexId == 1) {
            uint[] memory swapResult;
            if(orderType == OrderType.EthForTokens) {
                 path[0] = Sushi.WETH();
                 swapResult = Sushi.swapExactETHForTokens{value:assetInOffered}(minExpectedAmount, path, to, block.timestamp);
            }
            else if (orderType == OrderType.TokensForEth) {
                path[path.length-1] = Sushi.WETH();
                TransferHelper.safeApprove(path[0], address(Sushi), assetInOffered);
                swapResult = Sushi.swapExactTokensForETH(assetInOffered, minExpectedAmount, path, to, block.timestamp);
            }
            else if (orderType == OrderType.TokensForTokens) {
                TransferHelper.safeApprove(path[0], address(Sushi), assetInOffered);
                swapResult = Sushi.swapExactTokensForTokens(assetInOffered, minExpectedAmount, path, to, block.timestamp);
            }
            amountOut = swapResult[swapResult.length - 1];
        }
    }
    
    function executeSwap(
        OrderType orderType, 
        address[] memory path, 
        uint256 assetInOffered, 
        uint256 fees, 
        uint256 minExpectedAmount,
        address licenseeVault,
        uint256 dexId,
        uint256 deadline
    ) external payable {
        uint256 gasA = gasleft();
        uint256 receivedFees = 0;
        if(deadline == 0) {
            deadline = block.timestamp + deadlineLimit;
        }
        
        if(orderType == OrderType.EthForTokens){
            require(msg.value >= (assetInOffered + fees), "Payment = assetInOffered + fees");
            receivedFees = receivedFees + msg.value - assetInOffered;
        } else {
            require(msg.value >= fees, "fees not received");
            receivedFees = receivedFees + msg.value;
            TransferHelper.safeTransferFrom(path[0], msg.sender, address(this), assetInOffered);
        }
        
        _swap(orderType, path, assetInOffered, minExpectedAmount, msg.sender, dexId, deadline);
   
        processFee(gasA, receivedFees, 0, licenseeVault, msg.sender);
    }
    
    function executeCrossExchange(
        address[] memory path, 
        OrderType orderType,
        uint256 crossOrderType,
        uint256 assetInOffered,
        uint256 fees, 
        uint256 minExpectedAmount,
        address licenseeVault,
        uint256[3] memory dexId_deadline // dexId_deadline[0] - native swap dexId, dexId_deadline[1] - foreign swap dexId, dexId_deadline[2] - deadline
    ) public payable {
        uint256[2] memory feesPrice;
        feesPrice[0] = gasleft();       // equivalent to gasA
        feesPrice[1] = 0;               // processing fees
        
        if (dexId_deadline[2] == 0) {   // if deadline == 0, set deadline to deadlineLimit
            dexId_deadline[2] = block.timestamp + deadlineLimit;
        }

        if(orderType == OrderType.EthForTokens){
            require(msg.value >= (assetInOffered + fees + processingFee), "Payment = assetInOffered + fees + processingFee");
            feesPrice[1] = msg.value - assetInOffered - fees;
        } else {
            require(msg.value >= (fees + processingFee), "fees not received");
            feesPrice[1] = msg.value - fees;
            TransferHelper.safeTransferFrom(path[0], msg.sender, address(this), assetInOffered);
        }
        
        if(path[0] == USDT) {
            TransferHelper.safeApprove(USDT, address(swapFactory), assetInOffered);
            swapFactory.swap(USDT, path[path.length-1], assetInOffered, msg.sender, crossOrderType, dexId_deadline[1], dexId_deadline[2]);
        }
        else {
            address tokenB = path[path.length-1];
            path[path.length-1] = USDT;
            uint256 minAmountExpected = _swap(orderType, path, assetInOffered, minExpectedAmount, address(this), dexId_deadline[0], dexId_deadline[2]);
                
            TransferHelper.safeApprove(USDT, address(swapFactory),minAmountExpected);
            swapFactory.swap(USDT, tokenB, minAmountExpected, msg.sender, crossOrderType, dexId_deadline[1], dexId_deadline[2]);
        }        

        processFee(feesPrice[0], fees, feesPrice[1], licenseeVault, msg.sender);
    }

    function callbackCrossExchange( 
        uint256 orderType, 
        address[] memory path, 
        uint256 assetInOffered, 
        address user,
        uint256 dexId,
        uint256 deadline
    ) public returns(bool) {
        require(msg.sender == address(swapFactory) , "Degen : caller is not SwapFactory");
        if(deadline==0) {
            deadline = block.timestamp + deadlineLimit;
        }
        _swap(OrderType(orderType), path, assetInOffered, uint256(0), user, dexId, deadline);
        return true;
    }

    // user has to approve 1Inch router contract to transfer `assetInOffered` before calling this function 
    // when call `swap` API of 1Inch, you have to set:
    // `fromTokenAddress` - token user want to swap (if user swap ETH use address: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE)
    // `toTokenAddress ` - token user want to receive
    // `amount` - amount of tokens user want to swap
    // `fromAddress` - the user's address. MAY NOT WORK
    // `slippage` - from user's setting
    function executeSwap1Inch(
        address[2] memory path, // path[0] - from token, path[1] - to token
        OrderType orderType, 
        uint256 assetInOffered, // token amount or value of ETH (Form API response).
        uint256 fees, 
        address licenseeVault,
        address to, // 1Inch router. Form API response.
        bytes memory data   // Form API response.
    ) external payable {
        uint256 gasA = gasleft();
        uint256 receivedFees;
        
        if(orderType == OrderType.EthForTokens){
            require(msg.value >= (assetInOffered + fees), "Payment = assetInOffered + fees");
            receivedFees = msg.value - assetInOffered;
            IContractCaller(contractCaller).callContract{value: assetInOffered}(to, address(0), assetInOffered, data);
        } else {
            require(msg.value >= fees, "fees not received");
            receivedFees = msg.value;
            TransferHelper.safeTransferFrom(path[0], msg.sender, contractCaller, assetInOffered);
            //TransferHelper.safeApprove(path[0],to,assetInOffered);
            IContractCaller(contractCaller).callContract(to, path[0], assetInOffered, data);
        }
   
        processFee(gasA, receivedFees, 0, licenseeVault, msg.sender);
    }
    
    // user has to approve 1Inch router contract to transfer `assetInOffered` before calling this function 
    // when call `swap` API of 1Inch, you have to set:
    // `fromTokenAddress` - token user want to swap (if user swap ETH use address: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE)
    // `toTokenAddress ` - token user want to receive
    // `amount` - amount of tokens user want to swap
    // `fromAddress` - the user's address
    // `slippage` - from user's setting
    // `destReceiver` - Degen contract address
    function executeCrossExchange1Inch(
        address[2] memory path, // path[0] - from token, path[1] - to token
        OrderType crossOrderType, 
        uint256 assetInOffered, // token amount or value of ETH (Form API response).
        uint256 fees, 
        address licenseeVault,
        address to, // 1Inch router. Form API response.
        bytes memory data,   // Form API response.
        uint256 toDEX,  // destination dex that will be used on foreign chain.
        uint256 deadline
    ) external payable {
        uint256 gasA = gasleft();
        uint256 _crossOrderType = uint256(crossOrderType);
        
        if(deadline==0) {
            deadline = block.timestamp + deadlineLimit;
        }
        
        uint256 balanceUSDT = IERC20(USDT).balanceOf(address(this));
       
        if(crossOrderType == OrderType.EthForTokens || crossOrderType == OrderType.EthForEth){
            require(msg.value >= (assetInOffered + fees), "Payment = assetInOffered + fees");
            fees = msg.value - assetInOffered;
            IContractCaller(contractCaller).callContract{value: assetInOffered}(to, address(0), assetInOffered, data);
        } else {
            require(msg.value >= fees, "fees not received");
            fees = msg.value;
            TransferHelper.safeTransferFrom(path[0], msg.sender, contractCaller, assetInOffered);
            //TransferHelper.safeApprove(path[0],to,assetInOffered);
            IContractCaller(contractCaller).callContract(to, path[0], assetInOffered, data);
        }
               
        balanceUSDT = IERC20(USDT).balanceOf(address(this)) - balanceUSDT;  // USDT amount that received from 1Inch swap
        TransferHelper.safeApprove(USDT, address(swapFactory), balanceUSDT);
        
        swapFactory.swap(USDT, path[1], balanceUSDT, msg.sender, _crossOrderType, toDEX, deadline);

        processFee(gasA, fees, 0, licenseeVault, msg.sender);
    }

    // If someone accidentally transfer tokens to this contract, the owner will be able to rescue it and refund sender.
    function rescueTokens(address _token) external onlyOwner {
        if (address(0) == _token) {
            payable(msg.sender).transfer(address(this).balance);
        } else {
            uint256 available = IERC20(_token).balanceOf(address(this));
            TransferHelper.safeTransfer(_token, msg.sender, available);
        }
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_swapFactory","type":"address"},{"internalType":"address","name":"_system","type":"address"},{"internalType":"address","name":"_contractCaller","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"Sushi","outputs":[{"internalType":"contract IUni","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Uni","outputs":[{"internalType":"contract IUni","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"orderType","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"uint256","name":"assetInOffered","type":"uint256"},{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"dexId","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"callbackCrossExchange","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimFee","outputs":[{"internalType":"uint256","name":"feeAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"companyVault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractCaller","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"enum Degen.OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"crossOrderType","type":"uint256"},{"internalType":"uint256","name":"assetInOffered","type":"uint256"},{"internalType":"uint256","name":"fees","type":"uint256"},{"internalType":"uint256","name":"minExpectedAmount","type":"uint256"},{"internalType":"address","name":"licenseeVault","type":"address"},{"internalType":"uint256[3]","name":"dexId_deadline","type":"uint256[3]"}],"name":"executeCrossExchange","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[2]","name":"path","type":"address[2]"},{"internalType":"enum Degen.OrderType","name":"crossOrderType","type":"uint8"},{"internalType":"uint256","name":"assetInOffered","type":"uint256"},{"internalType":"uint256","name":"fees","type":"uint256"},{"internalType":"address","name":"licenseeVault","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"toDEX","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"executeCrossExchange1Inch","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"enum Degen.OrderType","name":"orderType","type":"uint8"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"uint256","name":"assetInOffered","type":"uint256"},{"internalType":"uint256","name":"fees","type":"uint256"},{"internalType":"uint256","name":"minExpectedAmount","type":"uint256"},{"internalType":"address","name":"licenseeVault","type":"address"},{"internalType":"uint256","name":"dexId","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"executeSwap","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[2]","name":"path","type":"address[2]"},{"internalType":"enum Degen.OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"assetInOffered","type":"uint256"},{"internalType":"uint256","name":"fees","type":"uint256"},{"internalType":"address","name":"licenseeVault","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"executeSwap1Inch","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"feeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getColletedFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDeadlineLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"processingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reimbursementContract","outputs":[{"internalType":"contract IReimbursement","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_comapnyVault","type":"address"}],"name":"setCompanyVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contractCaller","type":"address"}],"name":"setContractCaller","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"setDeadlineLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setFeeReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_processingFees","type":"uint256"}],"name":"setProcessingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_reimbursementContarct","type":"address"}],"name":"setReimbursementContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_swapFactory","type":"address"}],"name":"setSwapFactory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_system","type":"address"}],"name":"setSystem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapFactory","outputs":[{"internalType":"contract ISwapFactory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"system","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052600180546001600160a01b0319908116737a250d5630b4cf539739df2c5dacb4c659f2488d17825560028054821673d9e1ce17f2641f24ae83637ab66a2cca9c378b9f1790556003805490911673dac17f958d2ee523a2206206994597c13d831ec717905560006006556104b06007556008553480156200008457600080fd5b50604051620031e6380380620031e6833981016040819052620000a79162000146565b600080546001600160a01b0319163390811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3600c80546001600160a01b039485166001600160a01b03199182161790915560048054938516938216939093179092556005805491909316911617905562000190565b80516001600160a01b03811681146200014157600080fd5b919050565b6000806000606084860312156200015c57600080fd5b620001678462000129565b9250620001776020850162000129565b9150620001876040850162000129565b90509250925092565b61304680620001a06000396000f3fe6080604052600436106101d75760003560e01c80637944f944116101025780639c9bb1e311610095578063c54e44eb11610064578063c54e44eb14610517578063de1881a814610537578063efdcd9741461054d578063f2fde38b1461056d57600080fd5b80639c9bb1e3146104a4578063b3f00674146104c4578063c34e596f146104e4578063c3d730181461050457600080fd5b8063901bd2cc116100d1578063901bd2cc1461042f5780639461446d1461044f57806395bf75fd1461046f57806399d32fc41461048f57600080fd5b80637944f944146103b15780638a77ba1a146103d15780638da5cb5b146103f15780638f32d59b1461040f57600080fd5b806342d5350b1161017a5780635af9e7c9116101495780635af9e7c914610347578063647762761461035c57806369fb10751461037c578063715018a61461039c57600080fd5b806342d5350b146102c4578063447f25ef146102e457806354cf428a14610307578063558377571461032757600080fd5b80632ffda2b4116101b65780632ffda2b41461025b5780633500ac411461026e5780633d45b7f31461029e5780634061215d146102b157600080fd5b8062ae3bf8146101dc5780630660acb4146101fe5780632a94a9c81461023b575b600080fd5b3480156101e857600080fd5b506101fc6101f736600461283b565b61058d565b005b34801561020a57600080fd5b5060015461021e906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561024757600080fd5b506101fc61025636600461283b565b610688565b6101fc610269366004612b5f565b6106d4565b34801561027a57600080fd5b5061028e610289366004612c22565b6107cb565b6040519015158152602001610232565b6101fc6102ac366004612915565b610876565b6101fc6102bf36600461287c565b610bfd565b3480156102d057600080fd5b50600a5461021e906001600160a01b031681565b3480156102f057600080fd5b506102f9610d81565b604051908152602001610232565b34801561031357600080fd5b5060055461021e906001600160a01b031681565b34801561033357600080fd5b506101fc61034236600461283b565b610d97565b34801561035357600080fd5b506007546102f9565b34801561036857600080fd5b506101fc61037736600461283b565b610de3565b34801561038857600080fd5b506101fc610397366004612bf0565b610e2f565b3480156103a857600080fd5b506101fc610e5e565b3480156103bd57600080fd5b50600c5461021e906001600160a01b031681565b3480156103dd57600080fd5b50600b5461021e906001600160a01b031681565b3480156103fd57600080fd5b506000546001600160a01b031661021e565b34801561041b57600080fd5b506000546001600160a01b0316331461028e565b34801561043b57600080fd5b5060025461021e906001600160a01b031681565b34801561045b57600080fd5b506101fc61046a366004612bf0565b610ed2565b34801561047b57600080fd5b5060045461021e906001600160a01b031681565b34801561049b57600080fd5b506102f9610f55565b3480156104b057600080fd5b506101fc6104bf36600461283b565b610fec565b3480156104d057600080fd5b5060095461021e906001600160a01b031681565b3480156104f057600080fd5b506101fc6104ff36600461283b565b611038565b6101fc6105123660046129c2565b611084565b34801561052357600080fd5b5060035461021e906001600160a01b031681565b34801561054357600080fd5b506102f960065481565b34801561055957600080fd5b506101fc61056836600461283b565b611470565b34801561057957600080fd5b506101fc61058836600461283b565b6114bc565b6000546001600160a01b031633146105c05760405162461bcd60e51b81526004016105b790612dc4565b60405180910390fd5b6001600160a01b0381166105fe5760405133904780156108fc02916000818181858888f193505050501580156105fa573d6000803e3d6000fd5b5050565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a082319060240160206040518083038186803b15801561064057600080fd5b505afa158015610654573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106789190612c09565b90506105fa8233836114ef565b50565b6000546001600160a01b031633146106b25760405162461bcd60e51b81526004016105b790612dc4565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b60005a90506000826106f0576007546106ed9042612f03565b92505b60008a600381111561070457610704612fb9565b141561074f576107148789612f03565b3410156107335760405162461bcd60e51b81526004016105b790612de7565b8761073e3483612f03565b6107489190612f5c565b90506107a1565b8634101561076f5760405162461bcd60e51b81526004016105b790612e1e565b6107793482612f03565b90506107a18960008151811061079157610791612fcf565b602002602001015133308b61160a565b6107b08a8a8a8933898961173a565b506107bf828260008833611fcd565b50505050505050505050565b600c546000906001600160a01b031633146108325760405162461bcd60e51b815260206004820152602160248201527f446567656e203a2063616c6c6572206973206e6f742053776170466163746f726044820152607960f81b60648201526084016105b7565b81610847576007546108449042612f03565b91505b61086887600381111561085c5761085c612fb9565b8787600088888861173a565b506001979650505050505050565b60005a9050600089600381111561088f5761088f612fb9565b9050826108a6576007546108a39042612f03565b92505b6003546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b1580156108ea57600080fd5b505afa1580156108fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109229190612c09565b905060008b600381111561093857610938612fb9565b1480610955575060038b600381111561095357610953612fb9565b145b156109fe57610964898b612f03565b3410156109835760405162461bcd60e51b81526004016105b790612de7565b61098d8a34612f5c565b60055460405163fd6ac30960e01b8152919a506001600160a01b03169063fd6ac309908c906109c7908b9060009084908d90600401612d3b565b6000604051808303818588803b1580156109e057600080fd5b505af11580156109f4573d6000803e3d6000fd5b5050505050610aa6565b88341015610a1e5760405162461bcd60e51b81526004016105b790612e1e565b8b51600554349a50610a3c919033906001600160a01b03168d61160a565b6005548c5160405163fd6ac30960e01b81526001600160a01b039092169163fd6ac30991610a73918b91908f908c90600401612d3b565b600060405180830381600087803b158015610a8d57600080fd5b505af1158015610aa1573d6000803e3d6000fd5b505050505b6003546040516370a0823160e01b815230600482015282916001600160a01b0316906370a082319060240160206040518083038186803b158015610ae957600080fd5b505afa158015610afd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b219190612c09565b610b2b9190612f5c565b600354600c54919250610b4b916001600160a01b03918216911683612409565b600c5460035460208e015160405163f73d640d60e01b81526001600160a01b039384169363f73d640d93610b8e939116918690339089908d908d90600401612cf7565b602060405180830381600087803b158015610ba857600080fd5b505af1158015610bbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be09190612b3d565b50610bef838a60008b33611fcd565b505050505050505050505050565b60005a9050600080886003811115610c1757610c17612fb9565b1415610cc157610c278688612f03565b341015610c465760405162461bcd60e51b81526004016105b790612de7565b610c508734612f5c565b60055460405163fd6ac30960e01b81529192506001600160a01b03169063fd6ac309908990610c8a90889060009084908a90600401612d3b565b6000604051808303818588803b158015610ca357600080fd5b505af1158015610cb7573d6000803e3d6000fd5b5050505050610d68565b85341015610ce15760405162461bcd60e51b81526004016105b790612e1e565b5087516005543491610cfe9133906001600160a01b03168a61160a565b600554895160405163fd6ac30960e01b81526001600160a01b039092169163fd6ac30991610d35918891908c908990600401612d3b565b600060405180830381600087803b158015610d4f57600080fd5b505af1158015610d63573d6000803e3d6000fd5b505050505b610d76828260008833611fcd565b505050505050505050565b60006001600854610d929190612f5c565b905090565b6000546001600160a01b03163314610dc15760405162461bcd60e51b81526004016105b790612dc4565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610e0d5760405162461bcd60e51b81526004016105b790612dc4565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610e595760405162461bcd60e51b81526004016105b790612dc4565b600755565b6000546001600160a01b03163314610e885760405162461bcd60e51b81526004016105b790612dc4565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6004546001600160a01b0316331480610f04575033610ef96000546001600160a01b031690565b6001600160a01b0316145b610f505760405162461bcd60e51b815260206004820152601860248201527f43616c6c6572206973206e6f74207468652073797374656d000000000000000060448201526064016105b7565b600655565b6009546000906001600160a01b03163314610fc95760405162461bcd60e51b815260206004820152602e60248201527f54686973206665652063616e20626520636c61696d6564206f6e6c792062792060448201526d666565207265636569766572212160901b60648201526084016105b7565b6001600854610fd89190612f5c565b60016008559050610fe9338261251d565b90565b6000546001600160a01b031633146110165760405162461bcd60e51b81526004016105b790612dc4565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146110625760405162461bcd60e51b81526004016105b790612dc4565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b61108c61269c565b5a81526000602082015260408201516110b2576007546110ac9042612f03565b60408301525b60008860038111156110c6576110c6612fb9565b1415611169576006546110d98688612f03565b6110e39190612f03565b34101561114a5760405162461bcd60e51b815260206004820152602f60248201527f5061796d656e74203d206173736574496e4f666665726564202b20666565732060448201526e2b2070726f63657373696e6746656560881b60648201526084016105b7565b846111558734612f5c565b61115f9190612f5c565b60208201526111cb565b6006546111769086612f03565b3410156111955760405162461bcd60e51b81526004016105b790612e1e565b61119f8534612f5c565b602082015288516111cb908a906000906111bb576111bb612fcf565b602002602001015133308961160a565b60035489516001600160a01b03909116908a906000906111ed576111ed612fcf565b60200260200101516001600160a01b0316141561130057600354600c54611221916001600160a01b03908116911688612409565b600c546003548a516001600160a01b039283169263f73d640d9216908c9061124b90600190612f5c565b8151811061125b5761125b612fcf565b602002602001015189338c8860016003811061127957611279612fcf565b602002015189600260200201516040518863ffffffff1660e01b81526004016112a89796959493929190612cf7565b602060405180830381600087803b1580156112c257600080fd5b505af11580156112d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112fa9190612b3d565b5061145b565b60008960018b516113119190612f5c565b8151811061132157611321612fcf565b60200260200101519050600360009054906101000a90046001600160a01b03168a60018c516113509190612f5c565b8151811061136057611360612fcf565b6001600160a01b039092166020928302919091019091015260006113968a8c8a8930898760200201518a6002602002015161173a565b600354600c549192506113b6916001600160a01b03918216911683612409565b600c546003546001600160a01b039182169163f73d640d91168484338e8a600160200201518b600260200201516040518863ffffffff1660e01b81526004016114059796959493929190612cf7565b602060405180830381600087803b15801561141f57600080fd5b505af1158015611433573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114579190612b3d565b5050505b80516020820151610d76919087908633611fcd565b6000546001600160a01b0316331461149a5760405162461bcd60e51b81526004016105b790612dc4565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146114e65760405162461bcd60e51b81526004016105b790612dc4565b610685816125eb565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b179052915160009283929087169161154b9190612cdb565b6000604051808303816000865af19150503d8060008114611588576040519150601f19603f3d011682016040523d82523d6000602084013e61158d565b606091505b50915091508180156115b75750805115806115b75750808060200190518101906115b79190612b3d565b6116035760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c45440060448201526064016105b7565b5050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b179052915160009283929088169161166e9190612cdb565b6000604051808303816000865af19150503d80600081146116ab576040519150601f19603f3d011682016040523d82523d6000602084013e6116b0565b606091505b50915091508180156116da5750805115806116da5750808060200190518101906116da9190612b3d565b6117325760405162461bcd60e51b8152602060048201526024808201527f5472616e7366657248656c7065723a205452414e534645525f46524f4d5f46416044820152631253115160e21b60648201526084016105b7565b505050505050565b60006002831061177e5760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964204445582049642160881b60448201526064016105b7565b428210156117e85760405162461bcd60e51b815260206004820152603160248201527f455850495245443a20446561646c696e6520666f72207472616e73616374696f604482015270371030b63932b0b23c903830b9b9b2b21760791b60648201526084016105b7565b82611bd6576060600089600381111561180357611803612fb9565b141561194557600160009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561185757600080fd5b505afa15801561186b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188f919061285f565b886000815181106118a2576118a2612fcf565b6001600160a01b039283166020918202929092010152600154604051637ff36ab560e01b8152911690637ff36ab59089906118e8906000908d908b904290600401612d8f565b6000604051808303818588803b15801561190157600080fd5b505af1158015611915573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f1916820160405261193e9190810190612aa5565b9050611ba7565b600189600381111561195957611959612fb9565b1415611ae657600160009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156119ad57600080fd5b505afa1580156119c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e5919061285f565b8860018a516119f49190612f5c565b81518110611a0457611a04612fcf565b60200260200101906001600160a01b031690816001600160a01b031681525050611a5788600081518110611a3a57611a3a612fcf565b60209081029190910101516001546001600160a01b031689612409565b6001546040516318cbafe560e01b81526001600160a01b03909116906318cbafe590611a90908a906000908d908b904290600401612e49565b600060405180830381600087803b158015611aaa57600080fd5b505af1158015611abe573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261193e9190810190612aa5565b6002896003811115611afa57611afa612fb9565b1415611ba757611b1688600081518110611a3a57611a3a612fcf565b6001546040516338ed173960e01b81526001600160a01b03909116906338ed173990611b4e908a908a908d908b904290600401612e49565b600060405180830381600087803b158015611b6857600080fd5b505af1158015611b7c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611ba49190810190612aa5565b90505b8060018251611bb69190612f5c565b81518110611bc657611bc6612fcf565b6020026020010151915050611fc2565b8260011415611fc25760606000896003811115611bf557611bf5612fb9565b1415611d3657600260009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611c4957600080fd5b505afa158015611c5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c81919061285f565b88600081518110611c9457611c94612fcf565b6001600160a01b039283166020918202929092010152600254604051637ff36ab560e01b8152911690637ff36ab5908990611cd9908a908d908b904290600401612d8f565b6000604051808303818588803b158015611cf257600080fd5b505af1158015611d06573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611d2f9190810190612aa5565b9050611f97565b6001896003811115611d4a57611d4a612fb9565b1415611ed657600260009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611d9e57600080fd5b505afa158015611db2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dd6919061285f565b8860018a51611de59190612f5c565b81518110611df557611df5612fcf565b60200260200101906001600160a01b031690816001600160a01b031681525050611e4888600081518110611e2b57611e2b612fcf565b60209081029190910101516002546001600160a01b031689612409565b6002546040516318cbafe560e01b81526001600160a01b03909116906318cbafe590611e80908a908a908d908b904290600401612e49565b600060405180830381600087803b158015611e9a57600080fd5b505af1158015611eae573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611d2f9190810190612aa5565b6002896003811115611eea57611eea612fb9565b1415611f9757611f0688600081518110611e2b57611e2b612fcf565b6002546040516338ed173960e01b81526001600160a01b03909116906338ed173990611f3e908a908a908d908b904290600401612e49565b600060405180830381600087803b158015611f5857600080fd5b505af1158015611f6c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f949190810190612aa5565b90505b8060018251611fa69190612f5c565b81518110611fb657611fb6612fcf565b60200260200101519150505b979650505050505050565b600a546001600160a01b031661206257831561201b576040516001600160a01b0382169085156108fc029086906000818181858888f19350505050158015612019573d6000803e3d6000fd5b505b821561205d576004546040516001600160a01b039091169084156108fc029085906000818181858888f1935050505015801561205b573d6000803e3d6000fd5b505b611603565b60006001600160a01b038316156122cd57600a54600b5460405163016175dd60e51b81526001600160a01b0391821660048201523060248201526000929190911690632c2ebba09060440160206040518083038186803b1580156120c557600080fd5b505afa1580156120d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120fd9190612c09565b600a5460405163016175dd60e51b81526001600160a01b03878116600483015230602483015292935060009290911690632c2ebba09060440160206040518083038186803b15801561214e57600080fd5b505afa158015612162573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121869190612c09565b905080156121af576121988282612f03565b6121a28289612f3d565b6121ac9190612f1b565b92505b82156122ca57600a546040516305c2b27f60e21b81526001600160a01b038681166004830152602482018690528781166044830152600092169063170ac9fc90606401602060405180830381600087803b15801561220c57600080fd5b505af1158015612220573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612244919061285f565b90506001600160a01b038116612290576040516001600160a01b0386169085156108fc029086906000818181858888f1935050505015801561228a573d6000803e3d6000fd5b506122c8565b6040516001600160a01b0382169085156108fc029086906000818181858888f193505050501580156122c6573d6000803e3d6000fd5b505b505b50505b6122d78186612f5c565b945084600860008282546122eb9190612f03565b90915550508315612332576004546040516001600160a01b039091169085156108fc029086906000818181858888f19350505050158015612330573d6000803e3d6000fd5b505b5a61233d9087612f5c565b95506123493a87612f3d565b600a549096506001600160a01b031663170ac9fc83866123698a8a612f03565b6123739190612f03565b600b5460405160e085901b6001600160e01b03191681526001600160a01b0393841660048201526024810192909252919091166044820152606401602060405180830381600087803b1580156123c857600080fd5b505af11580156123dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612400919061285f565b50505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b17905291516000928392908716916124659190612cdb565b6000604051808303816000865af19150503d80600081146124a2576040519150601f19603f3d011682016040523d82523d6000602084013e6124a7565b606091505b50915091508180156124d15750805115806124d15750808060200190518101906124d19190612b3d565b6116035760405162461bcd60e51b815260206004820152601e60248201527f5472616e7366657248656c7065723a20415050524f56455f4641494c4544000060448201526064016105b7565b604080516000808252602082019092526001600160a01b0384169083906040516125479190612cdb565b60006040518083038185875af1925050503d8060008114612584576040519150601f19603f3d011682016040523d82523d6000602084013e612589565b606091505b50509050806125e65760405162461bcd60e51b815260206004820152602360248201527f5472616e7366657248656c7065723a204554485f5452414e534645525f46414960448201526213115160ea1b60648201526084016105b7565b505050565b6001600160a01b0381166126415760405162461bcd60e51b815260206004820152601860248201527f5a65726f2061646472657373206e6f7420616c6c6f776564000000000000000060448201526064016105b7565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60405180604001604052806002906020820280368337509192915050565b600082601f8301126126cb57600080fd5b6040516040810181811067ffffffffffffffff821117156126ee576126ee612fe5565b806040525080838560408601111561270557600080fd5b60005b600281101561273157813561271c81612ffb565b83526020928301929190910190600101612708565b509195945050505050565b600082601f83011261274d57600080fd5b8135602061276261275d83612edf565b612eae565b80838252828201915082860187848660051b890101111561278257600080fd5b60005b858110156127aa57813561279881612ffb565b84529284019290840190600101612785565b5090979650505050505050565b600082601f8301126127c857600080fd5b813567ffffffffffffffff8111156127e2576127e2612fe5565b6127f5601f8201601f1916602001612eae565b81815284602083860101111561280a57600080fd5b816020850160208301376000918101602001919091529392505050565b80356004811061283657600080fd5b919050565b60006020828403121561284d57600080fd5b813561285881612ffb565b9392505050565b60006020828403121561287157600080fd5b815161285881612ffb565b6000806000806000806000610100888a03121561289857600080fd5b6128a289896126ba565b96506128b060408901612827565b9550606088013594506080880135935060a08801356128ce81612ffb565b925060c08801356128de81612ffb565b915060e088013567ffffffffffffffff8111156128fa57600080fd5b6129068a828b016127b7565b91505092959891949750929550565b60008060008060008060008060006101408a8c03121561293457600080fd5b61293e8b8b6126ba565b985061294c60408b01612827565b975060608a0135965060808a0135955060a08a013561296a81612ffb565b945060c08a013561297a81612ffb565b935060e08a013567ffffffffffffffff81111561299657600080fd5b6129a28c828d016127b7565b9350506101008a013591506101208a013590509295985092959850929598565b600080600080600080600080610140808a8c0312156129e057600080fd5b893567ffffffffffffffff8111156129f757600080fd5b612a038c828d0161273c565b9950506020612a13818c01612827565b985060408b0135975060608b0135965060808b0135955060a08b0135945060c08b0135612a3f81612ffb565b935060ff8b018c13612a5057600080fd5b612a58612e85565b8060e08d018e858f011115612a6c57600080fd5b600094505b6003851015612a90578035835260019490940193918301918301612a71565b50809450505050509295985092959890939650565b60006020808385031215612ab857600080fd5b825167ffffffffffffffff811115612acf57600080fd5b8301601f81018513612ae057600080fd5b8051612aee61275d82612edf565b80828252848201915084840188868560051b8701011115612b0e57600080fd5b600094505b83851015612b31578051835260019490940193918501918501612b13565b50979650505050505050565b600060208284031215612b4f57600080fd5b8151801515811461285857600080fd5b600080600080600080600080610100898b031215612b7c57600080fd5b612b8589612827565b9750602089013567ffffffffffffffff811115612ba157600080fd5b612bad8b828c0161273c565b97505060408901359550606089013594506080890135935060a0890135612bd381612ffb565b979a969950949793969295929450505060c08201359160e0013590565b600060208284031215612c0257600080fd5b5035919050565b600060208284031215612c1b57600080fd5b5051919050565b60008060008060008060c08789031215612c3b57600080fd5b86359550602087013567ffffffffffffffff811115612c5957600080fd5b612c6589828a0161273c565b955050604087013593506060870135612c7d81612ffb565b9598949750929560808101359460a0909101359350915050565b600081518084526020808501945080840160005b83811015612cd05781516001600160a01b031687529582019590820190600101612cab565b509495945050505050565b60008251612ced818460208701612f73565b9190910192915050565b6001600160a01b03978816815295871660208701526040860194909452919094166060840152608083019390935260a082019290925260c081019190915260e00190565b600060018060a01b038087168352808616602084015250836040830152608060608301528251806080840152612d788160a0850160208701612f73565b601f01601f19169190910160a00195945050505050565b848152608060208201526000612da86080830186612c97565b6001600160a01b03949094166040830152506060015292915050565b6020808252600990820152682737ba1027bbb732b960b91b604082015260600190565b6020808252601f908201527f5061796d656e74203d206173736574496e4f666665726564202b206665657300604082015260600190565b6020808252601190820152701999595cc81b9bdd081c9958d95a5d9959607a1b604082015260600190565b85815284602082015260a060408201526000612e6860a0830186612c97565b6001600160a01b0394909416606083015250608001529392505050565b6040516060810167ffffffffffffffff81118282101715612ea857612ea8612fe5565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715612ed757612ed7612fe5565b604052919050565b600067ffffffffffffffff821115612ef957612ef9612fe5565b5060051b60200190565b60008219821115612f1657612f16612fa3565b500190565b600082612f3857634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612f5757612f57612fa3565b500290565b600082821015612f6e57612f6e612fa3565b500390565b60005b83811015612f8e578181015183820152602001612f76565b83811115612f9d576000848401525b50505050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461068557600080fdfea264697066735822122041f06931924a09455dc4c7c8eb59ec788df47ebb863353a1905af2a01caa3a2264736f6c634300080700330000000000000000000000005eb3a5b2f0017debf5307f279eef58d3461b124000000000000000000000000036155633f72e34f855f128e7ef5beb214b7c27f5000000000000000000000000a75dca2cf0e8f2d536f7fac4e11a60c146ae7433

Deployed Bytecode

0x6080604052600436106101d75760003560e01c80637944f944116101025780639c9bb1e311610095578063c54e44eb11610064578063c54e44eb14610517578063de1881a814610537578063efdcd9741461054d578063f2fde38b1461056d57600080fd5b80639c9bb1e3146104a4578063b3f00674146104c4578063c34e596f146104e4578063c3d730181461050457600080fd5b8063901bd2cc116100d1578063901bd2cc1461042f5780639461446d1461044f57806395bf75fd1461046f57806399d32fc41461048f57600080fd5b80637944f944146103b15780638a77ba1a146103d15780638da5cb5b146103f15780638f32d59b1461040f57600080fd5b806342d5350b1161017a5780635af9e7c9116101495780635af9e7c914610347578063647762761461035c57806369fb10751461037c578063715018a61461039c57600080fd5b806342d5350b146102c4578063447f25ef146102e457806354cf428a14610307578063558377571461032757600080fd5b80632ffda2b4116101b65780632ffda2b41461025b5780633500ac411461026e5780633d45b7f31461029e5780634061215d146102b157600080fd5b8062ae3bf8146101dc5780630660acb4146101fe5780632a94a9c81461023b575b600080fd5b3480156101e857600080fd5b506101fc6101f736600461283b565b61058d565b005b34801561020a57600080fd5b5060015461021e906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561024757600080fd5b506101fc61025636600461283b565b610688565b6101fc610269366004612b5f565b6106d4565b34801561027a57600080fd5b5061028e610289366004612c22565b6107cb565b6040519015158152602001610232565b6101fc6102ac366004612915565b610876565b6101fc6102bf36600461287c565b610bfd565b3480156102d057600080fd5b50600a5461021e906001600160a01b031681565b3480156102f057600080fd5b506102f9610d81565b604051908152602001610232565b34801561031357600080fd5b5060055461021e906001600160a01b031681565b34801561033357600080fd5b506101fc61034236600461283b565b610d97565b34801561035357600080fd5b506007546102f9565b34801561036857600080fd5b506101fc61037736600461283b565b610de3565b34801561038857600080fd5b506101fc610397366004612bf0565b610e2f565b3480156103a857600080fd5b506101fc610e5e565b3480156103bd57600080fd5b50600c5461021e906001600160a01b031681565b3480156103dd57600080fd5b50600b5461021e906001600160a01b031681565b3480156103fd57600080fd5b506000546001600160a01b031661021e565b34801561041b57600080fd5b506000546001600160a01b0316331461028e565b34801561043b57600080fd5b5060025461021e906001600160a01b031681565b34801561045b57600080fd5b506101fc61046a366004612bf0565b610ed2565b34801561047b57600080fd5b5060045461021e906001600160a01b031681565b34801561049b57600080fd5b506102f9610f55565b3480156104b057600080fd5b506101fc6104bf36600461283b565b610fec565b3480156104d057600080fd5b5060095461021e906001600160a01b031681565b3480156104f057600080fd5b506101fc6104ff36600461283b565b611038565b6101fc6105123660046129c2565b611084565b34801561052357600080fd5b5060035461021e906001600160a01b031681565b34801561054357600080fd5b506102f960065481565b34801561055957600080fd5b506101fc61056836600461283b565b611470565b34801561057957600080fd5b506101fc61058836600461283b565b6114bc565b6000546001600160a01b031633146105c05760405162461bcd60e51b81526004016105b790612dc4565b60405180910390fd5b6001600160a01b0381166105fe5760405133904780156108fc02916000818181858888f193505050501580156105fa573d6000803e3d6000fd5b5050565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a082319060240160206040518083038186803b15801561064057600080fd5b505afa158015610654573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106789190612c09565b90506105fa8233836114ef565b50565b6000546001600160a01b031633146106b25760405162461bcd60e51b81526004016105b790612dc4565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b60005a90506000826106f0576007546106ed9042612f03565b92505b60008a600381111561070457610704612fb9565b141561074f576107148789612f03565b3410156107335760405162461bcd60e51b81526004016105b790612de7565b8761073e3483612f03565b6107489190612f5c565b90506107a1565b8634101561076f5760405162461bcd60e51b81526004016105b790612e1e565b6107793482612f03565b90506107a18960008151811061079157610791612fcf565b602002602001015133308b61160a565b6107b08a8a8a8933898961173a565b506107bf828260008833611fcd565b50505050505050505050565b600c546000906001600160a01b031633146108325760405162461bcd60e51b815260206004820152602160248201527f446567656e203a2063616c6c6572206973206e6f742053776170466163746f726044820152607960f81b60648201526084016105b7565b81610847576007546108449042612f03565b91505b61086887600381111561085c5761085c612fb9565b8787600088888861173a565b506001979650505050505050565b60005a9050600089600381111561088f5761088f612fb9565b9050826108a6576007546108a39042612f03565b92505b6003546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b1580156108ea57600080fd5b505afa1580156108fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109229190612c09565b905060008b600381111561093857610938612fb9565b1480610955575060038b600381111561095357610953612fb9565b145b156109fe57610964898b612f03565b3410156109835760405162461bcd60e51b81526004016105b790612de7565b61098d8a34612f5c565b60055460405163fd6ac30960e01b8152919a506001600160a01b03169063fd6ac309908c906109c7908b9060009084908d90600401612d3b565b6000604051808303818588803b1580156109e057600080fd5b505af11580156109f4573d6000803e3d6000fd5b5050505050610aa6565b88341015610a1e5760405162461bcd60e51b81526004016105b790612e1e565b8b51600554349a50610a3c919033906001600160a01b03168d61160a565b6005548c5160405163fd6ac30960e01b81526001600160a01b039092169163fd6ac30991610a73918b91908f908c90600401612d3b565b600060405180830381600087803b158015610a8d57600080fd5b505af1158015610aa1573d6000803e3d6000fd5b505050505b6003546040516370a0823160e01b815230600482015282916001600160a01b0316906370a082319060240160206040518083038186803b158015610ae957600080fd5b505afa158015610afd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b219190612c09565b610b2b9190612f5c565b600354600c54919250610b4b916001600160a01b03918216911683612409565b600c5460035460208e015160405163f73d640d60e01b81526001600160a01b039384169363f73d640d93610b8e939116918690339089908d908d90600401612cf7565b602060405180830381600087803b158015610ba857600080fd5b505af1158015610bbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be09190612b3d565b50610bef838a60008b33611fcd565b505050505050505050505050565b60005a9050600080886003811115610c1757610c17612fb9565b1415610cc157610c278688612f03565b341015610c465760405162461bcd60e51b81526004016105b790612de7565b610c508734612f5c565b60055460405163fd6ac30960e01b81529192506001600160a01b03169063fd6ac309908990610c8a90889060009084908a90600401612d3b565b6000604051808303818588803b158015610ca357600080fd5b505af1158015610cb7573d6000803e3d6000fd5b5050505050610d68565b85341015610ce15760405162461bcd60e51b81526004016105b790612e1e565b5087516005543491610cfe9133906001600160a01b03168a61160a565b600554895160405163fd6ac30960e01b81526001600160a01b039092169163fd6ac30991610d35918891908c908990600401612d3b565b600060405180830381600087803b158015610d4f57600080fd5b505af1158015610d63573d6000803e3d6000fd5b505050505b610d76828260008833611fcd565b505050505050505050565b60006001600854610d929190612f5c565b905090565b6000546001600160a01b03163314610dc15760405162461bcd60e51b81526004016105b790612dc4565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610e0d5760405162461bcd60e51b81526004016105b790612dc4565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610e595760405162461bcd60e51b81526004016105b790612dc4565b600755565b6000546001600160a01b03163314610e885760405162461bcd60e51b81526004016105b790612dc4565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6004546001600160a01b0316331480610f04575033610ef96000546001600160a01b031690565b6001600160a01b0316145b610f505760405162461bcd60e51b815260206004820152601860248201527f43616c6c6572206973206e6f74207468652073797374656d000000000000000060448201526064016105b7565b600655565b6009546000906001600160a01b03163314610fc95760405162461bcd60e51b815260206004820152602e60248201527f54686973206665652063616e20626520636c61696d6564206f6e6c792062792060448201526d666565207265636569766572212160901b60648201526084016105b7565b6001600854610fd89190612f5c565b60016008559050610fe9338261251d565b90565b6000546001600160a01b031633146110165760405162461bcd60e51b81526004016105b790612dc4565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146110625760405162461bcd60e51b81526004016105b790612dc4565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b61108c61269c565b5a81526000602082015260408201516110b2576007546110ac9042612f03565b60408301525b60008860038111156110c6576110c6612fb9565b1415611169576006546110d98688612f03565b6110e39190612f03565b34101561114a5760405162461bcd60e51b815260206004820152602f60248201527f5061796d656e74203d206173736574496e4f666665726564202b20666565732060448201526e2b2070726f63657373696e6746656560881b60648201526084016105b7565b846111558734612f5c565b61115f9190612f5c565b60208201526111cb565b6006546111769086612f03565b3410156111955760405162461bcd60e51b81526004016105b790612e1e565b61119f8534612f5c565b602082015288516111cb908a906000906111bb576111bb612fcf565b602002602001015133308961160a565b60035489516001600160a01b03909116908a906000906111ed576111ed612fcf565b60200260200101516001600160a01b0316141561130057600354600c54611221916001600160a01b03908116911688612409565b600c546003548a516001600160a01b039283169263f73d640d9216908c9061124b90600190612f5c565b8151811061125b5761125b612fcf565b602002602001015189338c8860016003811061127957611279612fcf565b602002015189600260200201516040518863ffffffff1660e01b81526004016112a89796959493929190612cf7565b602060405180830381600087803b1580156112c257600080fd5b505af11580156112d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112fa9190612b3d565b5061145b565b60008960018b516113119190612f5c565b8151811061132157611321612fcf565b60200260200101519050600360009054906101000a90046001600160a01b03168a60018c516113509190612f5c565b8151811061136057611360612fcf565b6001600160a01b039092166020928302919091019091015260006113968a8c8a8930898760200201518a6002602002015161173a565b600354600c549192506113b6916001600160a01b03918216911683612409565b600c546003546001600160a01b039182169163f73d640d91168484338e8a600160200201518b600260200201516040518863ffffffff1660e01b81526004016114059796959493929190612cf7565b602060405180830381600087803b15801561141f57600080fd5b505af1158015611433573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114579190612b3d565b5050505b80516020820151610d76919087908633611fcd565b6000546001600160a01b0316331461149a5760405162461bcd60e51b81526004016105b790612dc4565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146114e65760405162461bcd60e51b81526004016105b790612dc4565b610685816125eb565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b179052915160009283929087169161154b9190612cdb565b6000604051808303816000865af19150503d8060008114611588576040519150601f19603f3d011682016040523d82523d6000602084013e61158d565b606091505b50915091508180156115b75750805115806115b75750808060200190518101906115b79190612b3d565b6116035760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c45440060448201526064016105b7565b5050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b179052915160009283929088169161166e9190612cdb565b6000604051808303816000865af19150503d80600081146116ab576040519150601f19603f3d011682016040523d82523d6000602084013e6116b0565b606091505b50915091508180156116da5750805115806116da5750808060200190518101906116da9190612b3d565b6117325760405162461bcd60e51b8152602060048201526024808201527f5472616e7366657248656c7065723a205452414e534645525f46524f4d5f46416044820152631253115160e21b60648201526084016105b7565b505050505050565b60006002831061177e5760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964204445582049642160881b60448201526064016105b7565b428210156117e85760405162461bcd60e51b815260206004820152603160248201527f455850495245443a20446561646c696e6520666f72207472616e73616374696f604482015270371030b63932b0b23c903830b9b9b2b21760791b60648201526084016105b7565b82611bd6576060600089600381111561180357611803612fb9565b141561194557600160009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561185757600080fd5b505afa15801561186b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188f919061285f565b886000815181106118a2576118a2612fcf565b6001600160a01b039283166020918202929092010152600154604051637ff36ab560e01b8152911690637ff36ab59089906118e8906000908d908b904290600401612d8f565b6000604051808303818588803b15801561190157600080fd5b505af1158015611915573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f1916820160405261193e9190810190612aa5565b9050611ba7565b600189600381111561195957611959612fb9565b1415611ae657600160009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156119ad57600080fd5b505afa1580156119c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e5919061285f565b8860018a516119f49190612f5c565b81518110611a0457611a04612fcf565b60200260200101906001600160a01b031690816001600160a01b031681525050611a5788600081518110611a3a57611a3a612fcf565b60209081029190910101516001546001600160a01b031689612409565b6001546040516318cbafe560e01b81526001600160a01b03909116906318cbafe590611a90908a906000908d908b904290600401612e49565b600060405180830381600087803b158015611aaa57600080fd5b505af1158015611abe573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261193e9190810190612aa5565b6002896003811115611afa57611afa612fb9565b1415611ba757611b1688600081518110611a3a57611a3a612fcf565b6001546040516338ed173960e01b81526001600160a01b03909116906338ed173990611b4e908a908a908d908b904290600401612e49565b600060405180830381600087803b158015611b6857600080fd5b505af1158015611b7c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611ba49190810190612aa5565b90505b8060018251611bb69190612f5c565b81518110611bc657611bc6612fcf565b6020026020010151915050611fc2565b8260011415611fc25760606000896003811115611bf557611bf5612fb9565b1415611d3657600260009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611c4957600080fd5b505afa158015611c5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c81919061285f565b88600081518110611c9457611c94612fcf565b6001600160a01b039283166020918202929092010152600254604051637ff36ab560e01b8152911690637ff36ab5908990611cd9908a908d908b904290600401612d8f565b6000604051808303818588803b158015611cf257600080fd5b505af1158015611d06573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052611d2f9190810190612aa5565b9050611f97565b6001896003811115611d4a57611d4a612fb9565b1415611ed657600260009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611d9e57600080fd5b505afa158015611db2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dd6919061285f565b8860018a51611de59190612f5c565b81518110611df557611df5612fcf565b60200260200101906001600160a01b031690816001600160a01b031681525050611e4888600081518110611e2b57611e2b612fcf565b60209081029190910101516002546001600160a01b031689612409565b6002546040516318cbafe560e01b81526001600160a01b03909116906318cbafe590611e80908a908a908d908b904290600401612e49565b600060405180830381600087803b158015611e9a57600080fd5b505af1158015611eae573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611d2f9190810190612aa5565b6002896003811115611eea57611eea612fb9565b1415611f9757611f0688600081518110611e2b57611e2b612fcf565b6002546040516338ed173960e01b81526001600160a01b03909116906338ed173990611f3e908a908a908d908b904290600401612e49565b600060405180830381600087803b158015611f5857600080fd5b505af1158015611f6c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f949190810190612aa5565b90505b8060018251611fa69190612f5c565b81518110611fb657611fb6612fcf565b60200260200101519150505b979650505050505050565b600a546001600160a01b031661206257831561201b576040516001600160a01b0382169085156108fc029086906000818181858888f19350505050158015612019573d6000803e3d6000fd5b505b821561205d576004546040516001600160a01b039091169084156108fc029085906000818181858888f1935050505015801561205b573d6000803e3d6000fd5b505b611603565b60006001600160a01b038316156122cd57600a54600b5460405163016175dd60e51b81526001600160a01b0391821660048201523060248201526000929190911690632c2ebba09060440160206040518083038186803b1580156120c557600080fd5b505afa1580156120d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120fd9190612c09565b600a5460405163016175dd60e51b81526001600160a01b03878116600483015230602483015292935060009290911690632c2ebba09060440160206040518083038186803b15801561214e57600080fd5b505afa158015612162573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121869190612c09565b905080156121af576121988282612f03565b6121a28289612f3d565b6121ac9190612f1b565b92505b82156122ca57600a546040516305c2b27f60e21b81526001600160a01b038681166004830152602482018690528781166044830152600092169063170ac9fc90606401602060405180830381600087803b15801561220c57600080fd5b505af1158015612220573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612244919061285f565b90506001600160a01b038116612290576040516001600160a01b0386169085156108fc029086906000818181858888f1935050505015801561228a573d6000803e3d6000fd5b506122c8565b6040516001600160a01b0382169085156108fc029086906000818181858888f193505050501580156122c6573d6000803e3d6000fd5b505b505b50505b6122d78186612f5c565b945084600860008282546122eb9190612f03565b90915550508315612332576004546040516001600160a01b039091169085156108fc029086906000818181858888f19350505050158015612330573d6000803e3d6000fd5b505b5a61233d9087612f5c565b95506123493a87612f3d565b600a549096506001600160a01b031663170ac9fc83866123698a8a612f03565b6123739190612f03565b600b5460405160e085901b6001600160e01b03191681526001600160a01b0393841660048201526024810192909252919091166044820152606401602060405180830381600087803b1580156123c857600080fd5b505af11580156123dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612400919061285f565b50505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663095ea7b360e01b17905291516000928392908716916124659190612cdb565b6000604051808303816000865af19150503d80600081146124a2576040519150601f19603f3d011682016040523d82523d6000602084013e6124a7565b606091505b50915091508180156124d15750805115806124d15750808060200190518101906124d19190612b3d565b6116035760405162461bcd60e51b815260206004820152601e60248201527f5472616e7366657248656c7065723a20415050524f56455f4641494c4544000060448201526064016105b7565b604080516000808252602082019092526001600160a01b0384169083906040516125479190612cdb565b60006040518083038185875af1925050503d8060008114612584576040519150601f19603f3d011682016040523d82523d6000602084013e612589565b606091505b50509050806125e65760405162461bcd60e51b815260206004820152602360248201527f5472616e7366657248656c7065723a204554485f5452414e534645525f46414960448201526213115160ea1b60648201526084016105b7565b505050565b6001600160a01b0381166126415760405162461bcd60e51b815260206004820152601860248201527f5a65726f2061646472657373206e6f7420616c6c6f776564000000000000000060448201526064016105b7565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60405180604001604052806002906020820280368337509192915050565b600082601f8301126126cb57600080fd5b6040516040810181811067ffffffffffffffff821117156126ee576126ee612fe5565b806040525080838560408601111561270557600080fd5b60005b600281101561273157813561271c81612ffb565b83526020928301929190910190600101612708565b509195945050505050565b600082601f83011261274d57600080fd5b8135602061276261275d83612edf565b612eae565b80838252828201915082860187848660051b890101111561278257600080fd5b60005b858110156127aa57813561279881612ffb565b84529284019290840190600101612785565b5090979650505050505050565b600082601f8301126127c857600080fd5b813567ffffffffffffffff8111156127e2576127e2612fe5565b6127f5601f8201601f1916602001612eae565b81815284602083860101111561280a57600080fd5b816020850160208301376000918101602001919091529392505050565b80356004811061283657600080fd5b919050565b60006020828403121561284d57600080fd5b813561285881612ffb565b9392505050565b60006020828403121561287157600080fd5b815161285881612ffb565b6000806000806000806000610100888a03121561289857600080fd5b6128a289896126ba565b96506128b060408901612827565b9550606088013594506080880135935060a08801356128ce81612ffb565b925060c08801356128de81612ffb565b915060e088013567ffffffffffffffff8111156128fa57600080fd5b6129068a828b016127b7565b91505092959891949750929550565b60008060008060008060008060006101408a8c03121561293457600080fd5b61293e8b8b6126ba565b985061294c60408b01612827565b975060608a0135965060808a0135955060a08a013561296a81612ffb565b945060c08a013561297a81612ffb565b935060e08a013567ffffffffffffffff81111561299657600080fd5b6129a28c828d016127b7565b9350506101008a013591506101208a013590509295985092959850929598565b600080600080600080600080610140808a8c0312156129e057600080fd5b893567ffffffffffffffff8111156129f757600080fd5b612a038c828d0161273c565b9950506020612a13818c01612827565b985060408b0135975060608b0135965060808b0135955060a08b0135945060c08b0135612a3f81612ffb565b935060ff8b018c13612a5057600080fd5b612a58612e85565b8060e08d018e858f011115612a6c57600080fd5b600094505b6003851015612a90578035835260019490940193918301918301612a71565b50809450505050509295985092959890939650565b60006020808385031215612ab857600080fd5b825167ffffffffffffffff811115612acf57600080fd5b8301601f81018513612ae057600080fd5b8051612aee61275d82612edf565b80828252848201915084840188868560051b8701011115612b0e57600080fd5b600094505b83851015612b31578051835260019490940193918501918501612b13565b50979650505050505050565b600060208284031215612b4f57600080fd5b8151801515811461285857600080fd5b600080600080600080600080610100898b031215612b7c57600080fd5b612b8589612827565b9750602089013567ffffffffffffffff811115612ba157600080fd5b612bad8b828c0161273c565b97505060408901359550606089013594506080890135935060a0890135612bd381612ffb565b979a969950949793969295929450505060c08201359160e0013590565b600060208284031215612c0257600080fd5b5035919050565b600060208284031215612c1b57600080fd5b5051919050565b60008060008060008060c08789031215612c3b57600080fd5b86359550602087013567ffffffffffffffff811115612c5957600080fd5b612c6589828a0161273c565b955050604087013593506060870135612c7d81612ffb565b9598949750929560808101359460a0909101359350915050565b600081518084526020808501945080840160005b83811015612cd05781516001600160a01b031687529582019590820190600101612cab565b509495945050505050565b60008251612ced818460208701612f73565b9190910192915050565b6001600160a01b03978816815295871660208701526040860194909452919094166060840152608083019390935260a082019290925260c081019190915260e00190565b600060018060a01b038087168352808616602084015250836040830152608060608301528251806080840152612d788160a0850160208701612f73565b601f01601f19169190910160a00195945050505050565b848152608060208201526000612da86080830186612c97565b6001600160a01b03949094166040830152506060015292915050565b6020808252600990820152682737ba1027bbb732b960b91b604082015260600190565b6020808252601f908201527f5061796d656e74203d206173736574496e4f666665726564202b206665657300604082015260600190565b6020808252601190820152701999595cc81b9bdd081c9958d95a5d9959607a1b604082015260600190565b85815284602082015260a060408201526000612e6860a0830186612c97565b6001600160a01b0394909416606083015250608001529392505050565b6040516060810167ffffffffffffffff81118282101715612ea857612ea8612fe5565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715612ed757612ed7612fe5565b604052919050565b600067ffffffffffffffff821115612ef957612ef9612fe5565b5060051b60200190565b60008219821115612f1657612f16612fa3565b500190565b600082612f3857634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612f5757612f57612fa3565b500290565b600082821015612f6e57612f6e612fa3565b500390565b60005b83811015612f8e578181015183820152602001612f76565b83811115612f9d576000848401525b50505050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461068557600080fdfea264697066735822122041f06931924a09455dc4c7c8eb59ec788df47ebb863353a1905af2a01caa3a2264736f6c63430008070033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000005eb3a5b2f0017debf5307f279eef58d3461b124000000000000000000000000036155633f72e34f855f128e7ef5beb214b7c27f5000000000000000000000000a75dca2cf0e8f2d536f7fac4e11a60c146ae7433

-----Decoded View---------------
Arg [0] : _swapFactory (address): 0x5eb3A5B2f0017DEBf5307F279EEf58D3461B1240
Arg [1] : _system (address): 0x36155633f72e34F855F128e7ef5bEB214B7c27f5
Arg [2] : _contractCaller (address): 0xa75DCa2CF0e8f2D536F7Fac4E11A60C146aE7433

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000005eb3a5b2f0017debf5307f279eef58d3461b1240
Arg [1] : 00000000000000000000000036155633f72e34f855f128e7ef5beb214b7c27f5
Arg [2] : 000000000000000000000000a75dca2cf0e8f2d536f7fac4e11a60c146ae7433


Deployed Bytecode Sourcemap

4898:16928:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21477:344;;;;;;;;;;-1:-1:-1;21477:344:0;;;;;:::i;:::-;;:::i;:::-;;5053:66;;;;;;;;;;-1:-1:-1;5053:66:0;;;;-1:-1:-1;;;;;5053:66:0;;;;;;-1:-1:-1;;;;;10306:32:1;;;10288:51;;10276:2;10261:18;5053:66:0;;;;;;;;6664:122;;;;;;;;;;-1:-1:-1;6664:122:0;;;;;:::i;:::-;;:::i;13226:1113::-;;;;;;:::i;:::-;;:::i;16505:542::-;;;;;;;;;;-1:-1:-1;16505:542:0;;;;;:::i;:::-;;:::i;:::-;;;13199:14:1;;13192:22;13174:41;;13162:2;13147:18;16505:542:0;13034:187:1;19384:1964:0;;;;;;:::i;:::-;;:::i;17555:1283::-;;;;;;:::i;:::-;;:::i;6053:43::-;;;;;;;;;;-1:-1:-1;6053:43:0;;;;-1:-1:-1;;;;;6053:43:0;;;7842:217;;;;;;;;;;;;;:::i;:::-;;;19837:25:1;;;19825:2;19810:18;7842:217:0;19691:177:1;5681:29:0;;;;;;;;;;-1:-1:-1;5681:29:0;;;;-1:-1:-1;;;;;5681:29:0;;;7359:90;;;;;;;;;;-1:-1:-1;7359:90:0;;;;;:::i;:::-;;:::i;7569:96::-;;;;;;;;;;-1:-1:-1;7644:13:0;;7569:96;;6920:166;;;;;;;;;;-1:-1:-1;6920:166:0;;;;;:::i;:::-;;:::i;7677:100::-;;;;;;;;;;-1:-1:-1;7677:100:0;;;;;:::i;:::-;;:::i;1247:140::-;;;;;;;;;;;;;:::i;6256:31::-;;;;;;;;;;-1:-1:-1;6256:31:0;;;;-1:-1:-1;;;;;6256:31:0;;;6144:27;;;;;;;;;;-1:-1:-1;6144:27:0;;;;-1:-1:-1;;;;;6144:27:0;;;522:79;;;;;;;;;;-1:-1:-1;560:7:0;587:6;-1:-1:-1;;;;;587:6:0;522:79;;869:92;;;;;;;;;;-1:-1:-1;909:4:0;947:6;-1:-1:-1;;;;;947:6:0;933:10;:20;869:92;;5192:68;;;;;;;;;;-1:-1:-1;5192:68:0;;;;-1:-1:-1;;;;;5192:68:0;;;7094:121;;;;;;;;;;-1:-1:-1;7094:121:0;;;;;:::i;:::-;;:::i;5653:21::-;;;;;;;;;;-1:-1:-1;5653:21:0;;;;-1:-1:-1;;;;;5653:21:0;;;8101:300;;;;;;;;;;;;;:::i;6798:114::-;;;;;;;;;;-1:-1:-1;6798:114:0;;;;;:::i;:::-;;:::i;5957:26::-;;;;;;;;;;-1:-1:-1;5957:26:0;;;;-1:-1:-1;;;;;5957:26:0;;;7223:124;;;;;;;;;;-1:-1:-1;7223:124:0;;;;;:::i;:::-;;:::i;14351:2146::-;;;;;;:::i;:::-;;:::i;5551:73::-;;;;;;;;;;-1:-1:-1;5551:73:0;;;;-1:-1:-1;;;;;5551:73:0;;;5717:32;;;;;;;;;;;;;;;;7461:96;;;;;;;;;;-1:-1:-1;7461:96:0;;;;;:::i;:::-;;:::i;1564:109::-;;;;;;;;;;-1:-1:-1;1564:109:0;;;;;:::i;:::-;;:::i;21477:344::-;909:4;947:6;-1:-1:-1;;;;;947:6:0;933:10;:20;726:30;;;;-1:-1:-1;;;726:30:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;21549:20:0;::::1;21545:269;;21586:51;::::0;21594:10:::1;::::0;21615:21:::1;21586:51:::0;::::1;;;::::0;::::1;::::0;;;21615:21;21594:10;21586:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;21477:344:::0;:::o;21545:269::-:1;21690:39;::::0;-1:-1:-1;;;21690:39:0;;21723:4:::1;21690:39;::::0;::::1;10288:51:1::0;21670:17:0::1;::::0;-1:-1:-1;;;;;21690:24:0;::::1;::::0;::::1;::::0;10261:18:1;;21690:39:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21670:59;;21744:58;21772:6;21780:10;21792:9;21744:27;:58::i;21545:269::-;21477:344:::0;:::o;6664:122::-;909:4;947:6;-1:-1:-1;;;;;947:6:0;933:10;:20;726:30;;;;-1:-1:-1;;;726:30:0;;;;;;;:::i;:::-;6746:14:::1;:32:::0;;-1:-1:-1;;;;;;6746:32:0::1;-1:-1:-1::0;;;;;6746:32:0;;;::::1;::::0;;;::::1;::::0;;6664:122::o;13226:1113::-;13523:12;13538:9;13523:24;-1:-1:-1;13558:20:0;13596:13;13593:87;;13655:13;;13637:31;;:15;:31;:::i;:::-;13626:42;;13593:87;13716:22;13703:9;:35;;;;;;;;:::i;:::-;;13700:449;;;13776:21;13793:4;13776:14;:21;:::i;:::-;13762:9;:36;;13754:80;;;;-1:-1:-1;;;13754:80:0;;;;;;;:::i;:::-;13891:14;13864:24;13879:9;13864:12;:24;:::i;:::-;:41;;;;:::i;:::-;13849:56;;13700:449;;;13959:4;13946:9;:17;;13938:47;;;;-1:-1:-1;;;13938:47:0;;;;;;;:::i;:::-;14015:24;14030:9;14015:12;:24;:::i;:::-;14000:39;;14054:83;14086:4;14091:1;14086:7;;;;;;;;:::i;:::-;;;;;;;14095:10;14115:4;14122:14;14054:31;:83::i;:::-;14169:86;14175:9;14186:4;14192:14;14208:17;14227:10;14239:5;14246:8;14169:5;:86::i;:::-;;14271:60;14282:4;14288:12;14302:1;14305:13;14320:10;14271;:60::i;:::-;13512:827;;13226:1113;;;;;;;;:::o;16505:542::-;16776:11;;16729:4;;-1:-1:-1;;;;;16776:11:0;16754:10;:34;16746:81;;;;-1:-1:-1;;;16746:81:0;;18322:2:1;16746:81:0;;;18304:21:1;18361:2;18341:18;;;18334:30;18400:34;18380:18;;;18373:62;-1:-1:-1;;;18451:18:1;;;18444:31;18492:19;;16746:81:0;18120:397:1;16746:81:0;16841:11;16838:85;;16898:13;;16880:31;;:15;:31;:::i;:::-;16869:42;;16838:85;16933:84;16949:9;16939:20;;;;;;;;:::i;:::-;16961:4;16967:14;16991:1;16995:4;17001:5;17008:8;16933:5;:84::i;:::-;-1:-1:-1;17035:4:0;;16505:542;-1:-1:-1;;;;;;;16505:542:0:o;19384:1964::-;19925:12;19940:9;19925:24;;19960:23;19994:14;19986:23;;;;;;;;:::i;:::-;19960:49;-1:-1:-1;20033:11:0;20030:85;;20090:13;;20072:31;;:15;:31;:::i;:::-;20061:42;;20030:85;20164:4;;20157:37;;-1:-1:-1;;;20157:37:0;;20188:4;20157:37;;;10288:51:1;20135:19:0;;-1:-1:-1;;;;;20164:4:0;;20157:22;;10261:18:1;;20157:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20135:59;-1:-1:-1;20235:22:0;20217:14;:40;;;;;;;;:::i;:::-;;:81;;;-1:-1:-1;20279:19:0;20261:14;:37;;;;;;;;:::i;:::-;;20217:81;20214:734;;;20336:21;20353:4;20336:14;:21;:::i;:::-;20322:9;:36;;20314:80;;;;-1:-1:-1;;;20314:80:0;;;;;;;:::i;:::-;20416:26;20428:14;20416:9;:26;:::i;:::-;20473:14;;20457:105;;-1:-1:-1;;;20457:105:0;;20409:33;;-1:-1:-1;;;;;;20473:14:0;;20457:44;;20509:14;;20457:105;;20525:2;;20473:14;;20509;;20557:4;;20457:105;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20214:734;;;20616:4;20603:9;:17;;20595:47;;;;-1:-1:-1;;;20595:47:0;;;;;;;:::i;:::-;20720:7;;20741:14;;20664:9;;-1:-1:-1;20688:84:0;;20720:7;20729:10;;-1:-1:-1;;;;;20741:14:0;20757;20688:31;:84::i;:::-;20873:14;;20906:7;;20857:79;;-1:-1:-1;;;20857:79:0;;-1:-1:-1;;;;;20873:14:0;;;;20857:44;;:79;;20902:2;;20906:7;20915:14;;20931:4;;20857:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20214:734;20996:4;;20989:37;;-1:-1:-1;;;20989:37:0;;21020:4;20989:37;;;10288:51:1;21029:11:0;;-1:-1:-1;;;;;20996:4:0;;20989:22;;10261:18:1;;20989:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:51;;;;:::i;:::-;21124:4;;21138:11;;20975:65;;-1:-1:-1;21097:67:0;;-1:-1:-1;;;;;21124:4:0;;;;21138:11;20975:65;21097:26;:67::i;:::-;21185:11;;21202:4;;21208:7;;;;21185:90;;-1:-1:-1;;;21185:90:0;;-1:-1:-1;;;;;21185:11:0;;;;:16;;:90;;21202:4;;;21217:11;;21230:10;;21242:15;;21259:5;;21266:8;;21185:90;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21288:52;21299:4;21305;21311:1;21314:13;21329:10;21288;:52::i;:::-;19914:1434;;;19384:1964;;;;;;;;;:::o;17555:1283::-;17975:12;17990:9;17975:24;-1:-1:-1;18010:20:0;;18054:9;:35;;;;;;;;:::i;:::-;;18051:704;;;18127:21;18144:4;18127:14;:21;:::i;:::-;18113:9;:36;;18105:80;;;;-1:-1:-1;;;18105:80:0;;;;;;;:::i;:::-;18215:26;18227:14;18215:9;:26;:::i;:::-;18272:14;;18256:105;;-1:-1:-1;;;18256:105:0;;18200:41;;-1:-1:-1;;;;;;18272:14:0;;18256:44;;18308:14;;18256:105;;18324:2;;18272:14;;18308;;18356:4;;18256:105;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18051:704;;;18415:4;18402:9;:17;;18394:47;;;;-1:-1:-1;;;18394:47:0;;;;;;;:::i;:::-;-1:-1:-1;18527:7:0;;18548:14;;18471:9;;18495:84;;18536:10;;-1:-1:-1;;;;;18548:14:0;18564;18495:31;:84::i;:::-;18680:14;;18713:7;;18664:79;;-1:-1:-1;;;18664:79:0;;-1:-1:-1;;;;;18680:14:0;;;;18664:44;;:79;;18709:2;;18713:7;18722:14;;18738:4;;18664:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18051:704;18770:60;18781:4;18787:12;18801:1;18804:13;18819:10;18770;:60::i;:::-;17964:874;;17555:1283;;;;;;;:::o;7842:217::-;7892:7;8050:1;8034:13;;:17;;;;:::i;:::-;8027:24;;7842:217;:::o;7359:90::-;909:4;947:6;-1:-1:-1;;;;;947:6:0;933:10;:20;726:30;;;;-1:-1:-1;;;726:30:0;;;;;;;:::i;:::-;7425:6:::1;:16:::0;;-1:-1:-1;;;;;;7425:16:0::1;-1:-1:-1::0;;;;;7425:16:0;;;::::1;::::0;;;::::1;::::0;;7359:90::o;6920:166::-;909:4;947:6;-1:-1:-1;;;;;947:6:0;933:10;:20;726:30;;;;-1:-1:-1;;;726:30:0;;;;;;;:::i;:::-;7016:21:::1;:62:::0;;-1:-1:-1;;;;;;7016:62:0::1;-1:-1:-1::0;;;;;7016:62:0;;;::::1;::::0;;;::::1;::::0;;6920:166::o;7677:100::-;909:4;947:6;-1:-1:-1;;;;;947:6:0;933:10;:20;726:30;;;;-1:-1:-1;;;726:30:0;;;;;;;:::i;:::-;7748:13:::1;:21:::0;7677:100::o;1247:140::-;909:4;947:6;-1:-1:-1;;;;;947:6:0;933:10;:20;726:30;;;;-1:-1:-1;;;726:30:0;;;;;;;:::i;:::-;1346:1:::1;1330:6:::0;;1309:40:::1;::::0;-1:-1:-1;;;;;1330:6:0;;::::1;::::0;1309:40:::1;::::0;1346:1;;1309:40:::1;1377:1;1360:19:::0;;-1:-1:-1;;;;;;1360:19:0::1;::::0;;1247:140::o;7094:121::-;6354:6;;-1:-1:-1;;;;;6354:6:0;6340:10;:20;;:45;;-1:-1:-1;6375:10:0;6364:7;560;587:6;-1:-1:-1;;;;;587:6:0;;522:79;6364:7;-1:-1:-1;;;;;6364:21:0;;6340:45;6332:81;;;;-1:-1:-1;;;6332:81:0;;16508:2:1;6332:81:0;;;16490:21:1;16547:2;16527:18;;;16520:30;16586:26;16566:18;;;16559:54;16630:18;;6332:81:0;16306:348:1;6332:81:0;7176:13:::1;:31:::0;7094:121::o;8101:300::-;8191:11;;8139:17;;-1:-1:-1;;;;;8191:11:0;8177:10;:25;8169:84;;;;-1:-1:-1;;;8169:84:0;;15397:2:1;8169:84:0;;;15379:21:1;15436:2;15416:18;;;15409:30;15475:34;15455:18;;;15448:62;-1:-1:-1;;;15526:18:1;;;15519:44;15580:19;;8169:84:0;15195:410:1;8169:84:0;8292:1;8276:13;;:17;;;;:::i;:::-;8320:1;8304:13;:17;8264:29;-1:-1:-1;8340:53:0;8371:10;8264:29;8340:30;:53::i;:::-;8101:300;:::o;6798:114::-;909:4;947:6;-1:-1:-1;;;;;947:6:0;933:10;:20;726:30;;;;-1:-1:-1;;;726:30:0;;;;;;;:::i;:::-;6876:12:::1;:28:::0;;-1:-1:-1;;;;;;6876:28:0::1;-1:-1:-1::0;;;;;6876:28:0;;;::::1;::::0;;;::::1;::::0;;6798:114::o;7223:124::-;909:4;947:6;-1:-1:-1;;;;;947:6:0;933:10;:20;726:30;;;;-1:-1:-1;;;726:30:0;;;;;;;:::i;:::-;7299:11:::1;:40:::0;;-1:-1:-1;;;;;;7299:40:0::1;-1:-1:-1::0;;;;;7299:40:0;;;::::1;::::0;;;::::1;::::0;;7223:124::o;14351:2146::-;14789:27;;:::i;:::-;14842:9;14827:24;;14837:1;14827:12;14890;;:16;14964:17;;;;14960:159;;15094:13;;15076:31;;:15;:31;:::i;:::-;15056:17;;;:51;14960:159;15147:22;15134:9;:35;;;;;;;;:::i;:::-;;15131:483;;;15231:13;;15207:21;15224:4;15207:14;:21;:::i;:::-;:37;;;;:::i;:::-;15193:9;:52;;15185:112;;;;-1:-1:-1;;;15185:112:0;;14981:2:1;15185:112:0;;;14963:21:1;15020:2;15000:18;;;14993:30;15059:34;15039:18;;;15032:62;-1:-1:-1;;;15110:18:1;;;15103:45;15165:19;;15185:112:0;14779:411:1;15185:112:0;15356:4;15327:26;15339:14;15327:9;:26;:::i;:::-;:33;;;;:::i;:::-;15312:12;;;:48;15131:483;;;15422:13;;15415:20;;:4;:20;:::i;:::-;15401:9;:35;;15393:65;;;;-1:-1:-1;;;15393:65:0;;;;;;;:::i;:::-;15488:16;15500:4;15488:9;:16;:::i;:::-;15473:12;;;:31;15551:7;;15519:83;;15551:7;;15556:1;;15551:7;;;;:::i;:::-;;;;;;;15560:10;15580:4;15587:14;15519:31;:83::i;:::-;15648:4;;15637:7;;-1:-1:-1;;;;;15648:4:0;;;;15637;;15648;;15637:7;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;15637:15:0;;15634:764;;;15696:4;;15710:11;;15669:70;;-1:-1:-1;;;;;15696:4:0;;;;15710:11;15724:14;15669:26;:70::i;:::-;15754:11;;15771:4;;15782:11;;-1:-1:-1;;;;;15754:11:0;;;;:16;;15771:4;;15777;;15782:13;;15754:11;;15782:13;:::i;:::-;15777:19;;;;;;;;:::i;:::-;;;;;;;15798:14;15814:10;15826:14;15842;15857:1;15842:17;;;;;;;:::i;:::-;;;;;15861:14;15876:1;15861:17;;;;15754:125;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15634:764;;;15921:14;15938:4;15955:1;15943:4;:11;:13;;;;:::i;:::-;15938:19;;;;;;;;:::i;:::-;;;;;;;15921:36;;15994:4;;;;;;;;;-1:-1:-1;;;;;15994:4:0;15972;15989:1;15977:4;:11;:13;;;;:::i;:::-;15972:19;;;;;;;;:::i;:::-;-1:-1:-1;;;;;15972:26:0;;;:19;;;;;;;;;;;:26;16013:25;16041:110;16047:9;16058:4;16064:14;16080:17;16107:4;16114:14;16013:25;16114:17;;;;16133:14;16148:1;16133:17;;;;16041:5;:110::i;:::-;16211:4;;16225:11;;16013:138;;-1:-1:-1;16184:72:0;;-1:-1:-1;;;;;16211:4:0;;;;16225:11;16013:138;16184:26;:72::i;:::-;16271:11;;16288:4;;-1:-1:-1;;;;;16271:11:0;;;;:16;;16288:4;16294:6;16302:17;16321:10;16333:14;16349;16271:11;16349:17;;;;16368:14;16383:1;16368:17;;;;16271:115;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15906:492;;15634:764;16429:12;;;16449;;;16418:71;;16429:12;16443:4;;16463:13;16478:10;16418;:71::i;7461:96::-;909:4;947:6;-1:-1:-1;;;;;947:6:0;933:10;:20;726:30;;;;-1:-1:-1;;;726:30:0;;;;;;;:::i;:::-;7530:11:::1;:19:::0;;-1:-1:-1;;;;;;7530:19:0::1;-1:-1:-1::0;;;;;7530:19:0;;;::::1;::::0;;;::::1;::::0;;7461:96::o;1564:109::-;909:4;947:6;-1:-1:-1;;;;;947:6:0;933:10;:20;726:30;;;;-1:-1:-1;;;726:30:0;;;;;;;:::i;:::-;1637:28:::1;1656:8;1637:18;:28::i;2729:297::-:0;2860:45;;;-1:-1:-1;;;;;12567:32:1;;;2860:45:0;;;12549:51:1;12616:18;;;;12609:34;;;2860:45:0;;;;;;;;;;12522:18:1;;;;2860:45:0;;;;;;;-1:-1:-1;;;;;2860:45:0;-1:-1:-1;;;2860:45:0;;;2849:57;;-1:-1:-1;;;;2849:10:0;;;;:57;;2860:45;2849:57;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2813:93;;;;2925:7;:57;;;;-1:-1:-1;2937:11:0;;:16;;:44;;;2968:4;2957:24;;;;;;;;;;;;:::i;:::-;2917:101;;;;-1:-1:-1;;;2917:101:0;;14621:2:1;2917:101:0;;;14603:21:1;14660:2;14640:18;;;14633:30;14699:33;14679:18;;;14672:61;14750:18;;2917:101:0;14419:355:1;2917:101:0;2802:224;;2729:297;;;:::o;3034:326::-;3183:51;;;-1:-1:-1;;;;;10917:15:1;;;3183:51:0;;;10899:34:1;10969:15;;;10949:18;;;10942:43;11001:18;;;;10994:34;;;3183:51:0;;;;;;;;;;10834:18:1;;;;3183:51:0;;;;;;;-1:-1:-1;;;;;3183:51:0;-1:-1:-1;;;3183:51:0;;;3172:63;;-1:-1:-1;;;;3172:10:0;;;;:63;;3183:51;3172:63;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3136:99;;;;3254:7;:57;;;;-1:-1:-1;3266:11:0;;:16;;:44;;;3297:4;3286:24;;;;;;;;;;;;:::i;:::-;3246:106;;;;-1:-1:-1;;;3246:106:0;;19488:2:1;3246:106:0;;;19470:21:1;19527:2;19507:18;;;19500:30;19566:34;19546:18;;;19539:62;-1:-1:-1;;;19617:18:1;;;19610:34;19661:19;;3246:106:0;19286:400:1;3246:106:0;3125:235;;3034:326;;;;:::o;10832:2382::-;11078:17;11135:1;11127:5;:9;11119:37;;;;-1:-1:-1;;;11119:37:0;;17221:2:1;11119:37:0;;;17203:21:1;17260:2;17240:18;;;17233:30;-1:-1:-1;;;17279:18:1;;;17272:45;17334:18;;11119:37:0;17019:339:1;11119:37:0;11187:15;11175:8;:27;;11167:89;;;;-1:-1:-1;;;11167:89:0;;18724:2:1;11167:89:0;;;18706:21:1;18763:2;18743:18;;;18736:30;18802:34;18782:18;;;18775:62;-1:-1:-1;;;18853:18:1;;;18846:47;18910:19;;11167:89:0;18522:413:1;11167:89:0;11271:10;11268:1939;;11297:24;11352:22;11339:9;:35;;;;;;;;:::i;:::-;;11336:803;;;11406:3;;;;;;;;;-1:-1:-1;;;;;11406:3:0;-1:-1:-1;;;;;11406:8:0;;:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11396:4;11401:1;11396:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;11396:20:0;;;:7;;;;;;;;;:20;11449:3;;:76;;-1:-1:-1;;;11449:76:0;;:3;;;:25;;11481:14;;11449:76;;:3;;11500:4;;11506:2;;11509:15;;11449:76;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11449:76:0;;;;;;;;;;;;:::i;:::-;11436:89;;11336:803;;;11577:22;11564:9;:35;;;;;;;;:::i;:::-;;11560:579;;;11642:3;;;;;;;;;-1:-1:-1;;;;;11642:3:0;-1:-1:-1;;;;;11642:8:0;;:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11620:4;11637:1;11625:4;:11;:13;;;;:::i;:::-;11620:19;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;11620:32:0;;;-1:-1:-1;;;;;11620:32:0;;;;;11671:65;11698:4;11703:1;11698:7;;;;;;;;:::i;:::-;;;;;;;;;;;11715:3;;-1:-1:-1;;;;;11715:3:0;11721:14;11671:26;:65::i;:::-;11768:3;;:70;;-1:-1:-1;;;11768:70:0;;-1:-1:-1;;;;;11768:3:0;;;;:25;;:70;;11794:14;;11768:3;;11813:4;;11818:2;;11822:15;;11768:70;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11768:70:0;;;;;;;;;;;;:::i;11560:579::-;11890:25;11877:9;:38;;;;;;;;:::i;:::-;;11873:266;;;11936:65;11963:4;11968:1;11963:7;;;;;;;;:::i;11936:65::-;12033:3;;:90;;-1:-1:-1;;;12033:90:0;;-1:-1:-1;;;;;12033:3:0;;;;:28;;:90;;12062:14;;12078:17;;12097:4;;12103:2;;12107:15;;12033:90;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12033:90:0;;;;;;;;;;;;:::i;:::-;12020:103;;11873:266;12165:10;12196:1;12176:10;:17;:21;;;;:::i;:::-;12165:33;;;;;;;;:::i;:::-;;;;;;;12153:45;;11282:928;11268:1939;;;12219:5;12228:1;12219:10;12216:991;;;12246:24;12301:22;12288:9;:35;;;;;;;;:::i;:::-;;12285:851;;;12355:5;;;;;;;;;-1:-1:-1;;;;;12355:5:0;-1:-1:-1;;;;;12355:10:0;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12345:4;12350:1;12345:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;12345:22:0;;;:7;;;;;;;;;:22;12400:5;;:95;;-1:-1:-1;;;12400:95:0;;:5;;;:27;;12434:14;;12400:95;;12450:17;;12469:4;;12475:2;;12479:15;;12400:95;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12400:95:0;;;;;;;;;;;;:::i;:::-;12387:108;;12285:851;;;12547:22;12534:9;:35;;;;;;;;:::i;:::-;;12530:606;;;12612:5;;;;;;;;;-1:-1:-1;;;;;12612:5:0;-1:-1:-1;;;;;12612:10:0;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12590:4;12607:1;12595:4;:11;:13;;;;:::i;:::-;12590:19;;;;;;;;:::i;:::-;;;;;;:34;-1:-1:-1;;;;;12590:34:0;;;-1:-1:-1;;;;;12590:34:0;;;;;12643:67;12670:4;12675:1;12670:7;;;;;;;;:::i;:::-;;;;;;;;;;;12687:5;;-1:-1:-1;;;;;12687:5:0;12695:14;12643:26;:67::i;:::-;12742:5;;:89;;-1:-1:-1;;;12742:89:0;;-1:-1:-1;;;;;12742:5:0;;;;:27;;:89;;12770:14;;12786:17;;12805:4;;12811:2;;12815:15;;12742:89;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12742:89:0;;;;;;;;;;;;:::i;12530:606::-;12883:25;12870:9;:38;;;;;;;;:::i;:::-;;12866:270;;;12929:67;12956:4;12961:1;12956:7;;;;;;;;:::i;12929:67::-;13028:5;;:92;;-1:-1:-1;;;13028:92:0;;-1:-1:-1;;;;;13028:5:0;;;;:30;;:92;;13059:14;;13075:17;;13094:4;;13100:2;;13104:15;;13028:92;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13028:92:0;;;;;;;;;;;;:::i;:::-;13015:105;;12866:270;13162:10;13193:1;13173:10;:17;:21;;;;:::i;:::-;13162:33;;;;;;;;:::i;:::-;;;;;;;13150:45;;12231:976;12216:991;10832:2382;;;;;;;;;:::o;8954:1860::-;9097:21;;-1:-1:-1;;;;;9097:21:0;9085:305;;9154:14;;9150:53;;9170:33;;-1:-1:-1;;;;;9170:22:0;;;:33;;;;;9193:9;;9170:33;;;;9193:9;9170:22;:33;;;;;;;;;;;;;;;;;;;;;9150:53;9275:15;;9271:57;;9300:6;;9292:36;;-1:-1:-1;;;;;9300:6:0;;;;9292:36;;;;;9317:10;;9300:6;9292:36;9300:6;9292:36;9317:10;9300:6;9292:36;;;;;;;;;;;;;;;;;;;;;9271:57;9372:7;;9085:305;9410:25;-1:-1:-1;;;;;9450:27:0;;;9446:866;;9519:21;;9556:12;;9519:65;;-1:-1:-1;;;9519:65:0;;-1:-1:-1;;;;;9556:12:0;;;9519:65;;;10562:34:1;9578:4:0;10612:18:1;;;10605:43;9494:22:0;;9519:21;;;;;:36;;10497:18:1;;9519:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9625:21;;:66;;-1:-1:-1;;;9625:66:0;;-1:-1:-1;;;;;10580:15:1;;;9625:66:0;;;10562:34:1;9685:4:0;10612:18:1;;;10605:43;9494:90:0;;-1:-1:-1;9599:23:0;;9625:21;;;;:36;;10497:18:1;;9625:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9599:92;-1:-1:-1;9710:20:0;;9706:127;;9800:32;9818:14;9800:15;:32;:::i;:::-;9770:27;9782:15;9770:9;:27;:::i;:::-;9769:64;;;;:::i;:::-;9749:84;;9706:127;9852:22;;9848:453;;9919:21;;:82;;-1:-1:-1;;;9919:82:0;;-1:-1:-1;;;;;12912:15:1;;;9919:82:0;;;12894:34:1;12944:18;;;12937:34;;;13007:15;;;12987:18;;;12980:43;9895:21:0;;9919;;:42;;12829:18:1;;9919:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9895:106;-1:-1:-1;;;;;;10024:27:0;;10020:266;;10076:41;;-1:-1:-1;;;;;10076:22:0;;;:41;;;;;10099:17;;10076:41;;;;10099:17;10076:22;:41;;;;;;;;;;;;;;;;;;;;;10020:266;;;10187:50;;-1:-1:-1;;;;;10187:31:0;;;:50;;;;;10219:17;;10187:50;;;;10219:17;10187:31;:50;;;;;;;;;;;;;;;;;;;;;10020:266;9876:425;9848:453;9479:833;;9446:866;10322:30;10335:17;10322:30;;:::i;:::-;;;10405:9;10388:13;;:26;;;;;;;:::i;:::-;;;;-1:-1:-1;;10440:15:0;;10436:71;;10479:6;;10471:36;;-1:-1:-1;;;;;10479:6:0;;;;10471:36;;;;;10496:10;;10479:6;10471:36;10479:6;10471:36;10496:10;10479:6;10471:36;;;;;;;;;;;;;;;;;;;;;10436:71;10566:9;10557:18;;;;:::i;:::-;;-1:-1:-1;10643:19:0;10651:11;10557:18;10643:19;:::i;:::-;10716:21;;10635:27;;-1:-1:-1;;;;;;10716:21:0;:42;10759:4;10781:10;10765:15;10635:27;10765:9;:15;:::i;:::-;:26;;;;:::i;:::-;10793:12;;10716:90;;;;;;-1:-1:-1;;;;;;10716:90:0;;;-1:-1:-1;;;;;12912:15:1;;;10716:90:0;;;12894:34:1;12944:18;;;12937:34;;;;10793:12:0;;;;12987:18:1;;;12980:43;12829:18;;10716:90:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;9074:1740;8954:1860;;;;;:::o;2426:295::-;2556:45;;;-1:-1:-1;;;;;12567:32:1;;;2556:45:0;;;12549:51:1;12616:18;;;;12609:34;;;2556:45:0;;;;;;;;;;12522:18:1;;;;2556:45:0;;;;;;;-1:-1:-1;;;;;2556:45:0;-1:-1:-1;;;2556:45:0;;;2545:57;;-1:-1:-1;;;;2545:10:0;;;;:57;;2556:45;2545:57;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2509:93;;;;2621:7;:57;;;;-1:-1:-1;2633:11:0;;:16;;:44;;;2664:4;2653:24;;;;;;;;;;;;:::i;:::-;2613:100;;;;-1:-1:-1;;;2613:100:0;;15812:2:1;2613:100:0;;;15794:21:1;15851:2;15831:18;;;15824:30;15890:32;15870:18;;;15863:60;15940:18;;2613:100:0;15610:354:1;3368:200:0;3481:12;;;3441;3481;;;;;;;;;-1:-1:-1;;;;;3459:7:0;;;3474:5;;3459:35;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3440:54;;;3513:7;3505:55;;;;-1:-1:-1;;;3505:55:0;;17918:2:1;3505:55:0;;;17900:21:1;17957:2;17937:18;;;17930:30;17996:34;17976:18;;;17969:62;-1:-1:-1;;;18047:18:1;;;18040:33;18090:19;;3505:55:0;17716:399:1;3505:55:0;3429:139;3368:200;;:::o;1823:214::-;-1:-1:-1;;;;;1897:22:0;;1889:58;;;;-1:-1:-1;;;1889:58:0;;17565:2:1;1889:58:0;;;17547:21:1;17604:2;17584:18;;;17577:30;17643:26;17623:18;;;17616:54;17687:18;;1889:58:0;17363:348:1;1889:58:0;1984:6;;;1963:38;;-1:-1:-1;;;;;1963:38:0;;;;1984:6;;;1963:38;;;2012:6;:17;;-1:-1:-1;;;;;;2012:17:0;-1:-1:-1;;;;;2012:17:0;;;;;;;;;;1823:214::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:757:1:-;64:5;117:3;110:4;102:6;98:17;94:27;84:55;;135:1;132;125:12;84:55;168:2;162:9;210:2;202:6;198:15;279:6;267:10;264:22;243:18;231:10;228:34;225:62;222:88;;;290:18;;:::i;:::-;330:10;326:2;319:22;;361:6;387;425:3;420:2;412:6;408:15;405:24;402:44;;;442:1;439;432:12;402:44;464:1;474:267;488:4;485:1;482:11;474:267;;;561:3;548:17;578:31;603:5;578:31;:::i;:::-;622:18;;663:4;687:12;;;;719;;;;;508:1;501:9;474:267;;;-1:-1:-1;759:6:1;;14:757;-1:-1:-1;;;;;14:757:1:o;776:748::-;830:5;883:3;876:4;868:6;864:17;860:27;850:55;;901:1;898;891:12;850:55;937:6;924:20;963:4;987:60;1003:43;1043:2;1003:43;:::i;:::-;987:60;:::i;:::-;1069:3;1093:2;1088:3;1081:15;1121:2;1116:3;1112:12;1105:19;;1156:2;1148:6;1144:15;1208:3;1203:2;1197;1194:1;1190:10;1182:6;1178:23;1174:32;1171:41;1168:61;;;1225:1;1222;1215:12;1168:61;1247:1;1257:238;1271:2;1268:1;1265:9;1257:238;;;1342:3;1329:17;1359:31;1384:5;1359:31;:::i;:::-;1403:18;;1441:12;;;;1473;;;;1289:1;1282:9;1257:238;;;-1:-1:-1;1513:5:1;;776:748;-1:-1:-1;;;;;;;776:748:1:o;1529:530::-;1571:5;1624:3;1617:4;1609:6;1605:17;1601:27;1591:55;;1642:1;1639;1632:12;1591:55;1678:6;1665:20;1704:18;1700:2;1697:26;1694:52;;;1726:18;;:::i;:::-;1770:55;1813:2;1794:13;;-1:-1:-1;;1790:27:1;1819:4;1786:38;1770:55;:::i;:::-;1850:2;1841:7;1834:19;1896:3;1889:4;1884:2;1876:6;1872:15;1868:26;1865:35;1862:55;;;1913:1;1910;1903:12;1862:55;1978:2;1971:4;1963:6;1959:17;1952:4;1943:7;1939:18;1926:55;2026:1;2001:16;;;2019:4;1997:27;1990:38;;;;2005:7;1529:530;-1:-1:-1;;;1529:530:1:o;2064:150::-;2139:20;;2188:1;2178:12;;2168:40;;2204:1;2201;2194:12;2168:40;2064:150;;;:::o;2219:247::-;2278:6;2331:2;2319:9;2310:7;2306:23;2302:32;2299:52;;;2347:1;2344;2337:12;2299:52;2386:9;2373:23;2405:31;2430:5;2405:31;:::i;:::-;2455:5;2219:247;-1:-1:-1;;;2219:247:1:o;2471:251::-;2541:6;2594:2;2582:9;2573:7;2569:23;2565:32;2562:52;;;2610:1;2607;2600:12;2562:52;2642:9;2636:16;2661:31;2686:5;2661:31;:::i;2727:943::-;2885:6;2893;2901;2909;2917;2925;2933;2986:3;2974:9;2965:7;2961:23;2957:33;2954:53;;;3003:1;3000;2993:12;2954:53;3026:44;3062:7;3051:9;3026:44;:::i;:::-;3016:54;;3089:45;3130:2;3119:9;3115:18;3089:45;:::i;:::-;3079:55;;3181:2;3170:9;3166:18;3153:32;3143:42;;3232:3;3221:9;3217:19;3204:33;3194:43;;3287:3;3276:9;3272:19;3259:33;3301:31;3326:5;3301:31;:::i;:::-;3351:5;-1:-1:-1;3408:3:1;3393:19;;3380:33;3422;3380;3422;:::i;:::-;3474:7;-1:-1:-1;3532:3:1;3517:19;;3504:33;3560:18;3549:30;;3546:50;;;3592:1;3589;3582:12;3546:50;3615:49;3656:7;3647:6;3636:9;3632:22;3615:49;:::i;:::-;3605:59;;;2727:943;;;;;;;;;;:::o;3675:1081::-;3851:6;3859;3867;3875;3883;3891;3899;3907;3915;3968:3;3956:9;3947:7;3943:23;3939:33;3936:53;;;3985:1;3982;3975:12;3936:53;4008:44;4044:7;4033:9;4008:44;:::i;:::-;3998:54;;4071:45;4112:2;4101:9;4097:18;4071:45;:::i;:::-;4061:55;;4163:2;4152:9;4148:18;4135:32;4125:42;;4214:3;4203:9;4199:19;4186:33;4176:43;;4269:3;4258:9;4254:19;4241:33;4283:31;4308:5;4283:31;:::i;:::-;4333:5;-1:-1:-1;4390:3:1;4375:19;;4362:33;4404;4362;4404;:::i;:::-;4456:7;-1:-1:-1;4514:3:1;4499:19;;4486:33;4542:18;4531:30;;4528:50;;;4574:1;4571;4564:12;4528:50;4597:49;4638:7;4629:6;4618:9;4614:22;4597:49;:::i;:::-;4587:59;;;4693:3;4682:9;4678:19;4665:33;4655:43;;4745:3;4734:9;4730:19;4717:33;4707:43;;3675:1081;;;;;;;;;;;:::o;4761:1388::-;4944:6;4952;4960;4968;4976;4984;4992;5000;5031:3;5075:2;5063:9;5054:7;5050:23;5046:32;5043:52;;;5091:1;5088;5081:12;5043:52;5131:9;5118:23;5164:18;5156:6;5153:30;5150:50;;;5196:1;5193;5186:12;5150:50;5219:61;5272:7;5263:6;5252:9;5248:22;5219:61;:::i;:::-;5209:71;;;5299:2;5320:45;5361:2;5350:9;5346:18;5320:45;:::i;:::-;5310:55;;5412:2;5401:9;5397:18;5384:32;5374:42;;5463:2;5452:9;5448:18;5435:32;5425:42;;5514:3;5503:9;5499:19;5486:33;5476:43;;5566:3;5555:9;5551:19;5538:33;5528:43;;5621:3;5610:9;5606:19;5593:33;5635:31;5660:5;5635:31;:::i;:::-;5685:5;-1:-1:-1;5728:3:1;5713:19;;5709:33;-1:-1:-1;5699:61:1;;5756:1;5753;5746:12;5699:61;5780:22;;:::i;:::-;5824:3;5862;5851:9;5847:19;5901:7;5896:2;5885:9;5881:18;5878:31;5875:51;;;5922:1;5919;5912:12;5875:51;5944:1;5935:10;;5954:165;5968:4;5965:1;5962:11;5954:165;;;6027:17;;6015:30;;5988:1;5981:9;;;;;6065:12;;;;6097;;5954:165;;;5958:3;6138:5;6128:15;;;;;;4761:1388;;;;;;;;;;;:::o;6154:892::-;6249:6;6280:2;6323;6311:9;6302:7;6298:23;6294:32;6291:52;;;6339:1;6336;6329:12;6291:52;6372:9;6366:16;6405:18;6397:6;6394:30;6391:50;;;6437:1;6434;6427:12;6391:50;6460:22;;6513:4;6505:13;;6501:27;-1:-1:-1;6491:55:1;;6542:1;6539;6532:12;6491:55;6571:2;6565:9;6594:60;6610:43;6650:2;6610:43;:::i;6594:60::-;6676:3;6700:2;6695:3;6688:15;6728:2;6723:3;6719:12;6712:19;;6759:2;6755;6751:11;6807:7;6802:2;6796;6793:1;6789:10;6785:2;6781:19;6777:28;6774:41;6771:61;;;6828:1;6825;6818:12;6771:61;6850:1;6841:10;;6860:156;6874:2;6871:1;6868:9;6860:156;;;6931:10;;6919:23;;6892:1;6885:9;;;;;6962:12;;;;6994;;6860:156;;;-1:-1:-1;7035:5:1;6154:892;-1:-1:-1;;;;;;;6154:892:1:o;7051:277::-;7118:6;7171:2;7159:9;7150:7;7146:23;7142:32;7139:52;;;7187:1;7184;7177:12;7139:52;7219:9;7213:16;7272:5;7265:13;7258:21;7251:5;7248:32;7238:60;;7294:1;7291;7284:12;7333:922;7493:6;7501;7509;7517;7525;7533;7541;7549;7602:3;7590:9;7581:7;7577:23;7573:33;7570:53;;;7619:1;7616;7609:12;7570:53;7642:36;7668:9;7642:36;:::i;:::-;7632:46;;7729:2;7718:9;7714:18;7701:32;7756:18;7748:6;7745:30;7742:50;;;7788:1;7785;7778:12;7742:50;7811:61;7864:7;7855:6;7844:9;7840:22;7811:61;:::i;:::-;7801:71;;;7919:2;7908:9;7904:18;7891:32;7881:42;;7970:2;7959:9;7955:18;7942:32;7932:42;;8021:3;8010:9;8006:19;7993:33;7983:43;;8076:3;8065:9;8061:19;8048:33;8090:31;8115:5;8090:31;:::i;:::-;7333:922;;;;-1:-1:-1;7333:922:1;;;;;;8140:5;;-1:-1:-1;;;8192:3:1;8177:19;;8164:33;;8244:3;8229:19;8216:33;;7333:922::o;8260:180::-;8319:6;8372:2;8360:9;8351:7;8347:23;8343:32;8340:52;;;8388:1;8385;8378:12;8340:52;-1:-1:-1;8411:23:1;;8260:180;-1:-1:-1;8260:180:1:o;8445:184::-;8515:6;8568:2;8556:9;8547:7;8543:23;8539:32;8536:52;;;8584:1;8581;8574:12;8536:52;-1:-1:-1;8607:16:1;;8445:184;-1:-1:-1;8445:184:1:o;8634:758::-;8763:6;8771;8779;8787;8795;8803;8856:3;8844:9;8835:7;8831:23;8827:33;8824:53;;;8873:1;8870;8863:12;8824:53;8909:9;8896:23;8886:33;;8970:2;8959:9;8955:18;8942:32;8997:18;8989:6;8986:30;8983:50;;;9029:1;9026;9019:12;8983:50;9052:61;9105:7;9096:6;9085:9;9081:22;9052:61;:::i;:::-;9042:71;;;9160:2;9149:9;9145:18;9132:32;9122:42;;9214:2;9203:9;9199:18;9186:32;9227:31;9252:5;9227:31;:::i;:::-;8634:758;;;;-1:-1:-1;8634:758:1;;9329:3;9314:19;;9301:33;;9381:3;9366:19;;;9353:33;;-1:-1:-1;8634:758:1;-1:-1:-1;;8634:758:1:o;9397:461::-;9450:3;9488:5;9482:12;9515:6;9510:3;9503:19;9541:4;9570:2;9565:3;9561:12;9554:19;;9607:2;9600:5;9596:14;9628:1;9638:195;9652:6;9649:1;9646:13;9638:195;;;9717:13;;-1:-1:-1;;;;;9713:39:1;9701:52;;9773:12;;;;9808:15;;;;9749:1;9667:9;9638:195;;;-1:-1:-1;9849:3:1;;9397:461;-1:-1:-1;;;;;9397:461:1:o;9863:274::-;9992:3;10030:6;10024:13;10046:53;10092:6;10087:3;10080:4;10072:6;10068:17;10046:53;:::i;:::-;10115:16;;;;;9863:274;-1:-1:-1;;9863:274:1:o;11039:672::-;-1:-1:-1;;;;;11410:15:1;;;11392:34;;11462:15;;;11457:2;11442:18;;11435:43;11509:2;11494:18;;11487:34;;;;11557:15;;;;11552:2;11537:18;;11530:43;11604:3;11589:19;;11582:35;;;;11372:3;11633:19;;11626:35;;;;11692:3;11677:19;;11670:35;;;;11341:3;11326:19;;11039:672::o;11716:654::-;11910:4;11956:1;11952;11947:3;11943:11;11939:19;11997:2;11989:6;11985:15;11974:9;11967:34;12049:2;12041:6;12037:15;12032:2;12021:9;12017:18;12010:43;;12089:6;12084:2;12073:9;12069:18;12062:34;12132:3;12127:2;12116:9;12112:18;12105:31;12165:6;12159:13;12209:6;12203:3;12192:9;12188:19;12181:35;12225:67;12285:6;12279:3;12268:9;12264:19;12259:2;12251:6;12247:15;12225:67;:::i;:::-;12353:2;12332:15;-1:-1:-1;;12328:29:1;12313:45;;;;12360:3;12309:55;;11716:654;-1:-1:-1;;;;;11716:654:1:o;13904:510::-;14175:6;14164:9;14157:25;14218:3;14213:2;14202:9;14198:18;14191:31;14138:4;14239:57;14291:3;14280:9;14276:19;14268:6;14239:57;:::i;:::-;-1:-1:-1;;;;;14332:32:1;;;;14327:2;14312:18;;14305:60;-1:-1:-1;14396:2:1;14381:18;14374:34;14231:65;13904:510;-1:-1:-1;;13904:510:1:o;15969:332::-;16171:2;16153:21;;;16210:1;16190:18;;;16183:29;-1:-1:-1;;;16243:2:1;16228:18;;16221:39;16292:2;16277:18;;15969:332::o;16659:355::-;16861:2;16843:21;;;16900:2;16880:18;;;16873:30;16939:33;16934:2;16919:18;;16912:61;17005:2;16990:18;;16659:355::o;18940:341::-;19142:2;19124:21;;;19181:2;19161:18;;;19154:30;-1:-1:-1;;;19215:2:1;19200:18;;19193:47;19272:2;19257:18;;18940:341::o;20380:582::-;20679:6;20668:9;20661:25;20722:6;20717:2;20706:9;20702:18;20695:34;20765:3;20760:2;20749:9;20745:18;20738:31;20642:4;20786:57;20838:3;20827:9;20823:19;20815:6;20786:57;:::i;:::-;-1:-1:-1;;;;;20879:32:1;;;;20874:2;20859:18;;20852:60;-1:-1:-1;20943:3:1;20928:19;20921:35;20778:65;20380:582;-1:-1:-1;;;20380:582:1:o;21546:251::-;21618:2;21612:9;21660:2;21648:15;;21693:18;21678:34;;21714:22;;;21675:62;21672:88;;;21740:18;;:::i;:::-;21776:2;21769:22;21546:251;:::o;21802:275::-;21873:2;21867:9;21938:2;21919:13;;-1:-1:-1;;21915:27:1;21903:40;;21973:18;21958:34;;21994:22;;;21955:62;21952:88;;;22020:18;;:::i;:::-;22056:2;22049:22;21802:275;;-1:-1:-1;21802:275:1:o;22082:183::-;22142:4;22175:18;22167:6;22164:30;22161:56;;;22197:18;;:::i;:::-;-1:-1:-1;22242:1:1;22238:14;22254:4;22234:25;;22082:183::o;22270:128::-;22310:3;22341:1;22337:6;22334:1;22331:13;22328:39;;;22347:18;;:::i;:::-;-1:-1:-1;22383:9:1;;22270:128::o;22403:217::-;22443:1;22469;22459:132;;22513:10;22508:3;22504:20;22501:1;22494:31;22548:4;22545:1;22538:15;22576:4;22573:1;22566:15;22459:132;-1:-1:-1;22605:9:1;;22403:217::o;22625:168::-;22665:7;22731:1;22727;22723:6;22719:14;22716:1;22713:21;22708:1;22701:9;22694:17;22690:45;22687:71;;;22738:18;;:::i;:::-;-1:-1:-1;22778:9:1;;22625:168::o;22798:125::-;22838:4;22866:1;22863;22860:8;22857:34;;;22871:18;;:::i;:::-;-1:-1:-1;22908:9:1;;22798:125::o;22928:258::-;23000:1;23010:113;23024:6;23021:1;23018:13;23010:113;;;23100:11;;;23094:18;23081:11;;;23074:39;23046:2;23039:10;23010:113;;;23141:6;23138:1;23135:13;23132:48;;;23176:1;23167:6;23162:3;23158:16;23151:27;23132:48;;22928:258;;;:::o;23191:127::-;23252:10;23247:3;23243:20;23240:1;23233:31;23283:4;23280:1;23273:15;23307:4;23304:1;23297:15;23323:127;23384:10;23379:3;23375:20;23372:1;23365:31;23415:4;23412:1;23405:15;23439:4;23436:1;23429:15;23455:127;23516:10;23511:3;23507:20;23504:1;23497:31;23547:4;23544:1;23537:15;23571:4;23568:1;23561:15;23587:127;23648:10;23643:3;23639:20;23636:1;23629:31;23679:4;23676:1;23669:15;23703:4;23700:1;23693:15;23719:131;-1:-1:-1;;;;;23794:31:1;;23784:42;;23774:70;;23840:1;23837;23830:12

Swarm Source

ipfs://41f06931924a09455dc4c7c8eb59ec788df47ebb863353a1905af2a01caa3a22

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
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.