ETH Price: $2,279.73 (-4.38%)

Contract

0x85560d8Ee2e714E60645f887Dd4133ee0479B362
 

Overview

ETH Balance

30.02 ETH

Eth Value

$68,437.56 (@ $2,279.73/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Easy Zap In109402492020-09-26 20:03:321450 days ago1601150612IN
Zapper.Fi: Old Balancer Zap in ETH or ERC20 2
0.02 ETH0.001116951
Easy Zap In103488882020-06-27 16:30:471542 days ago1593275447IN
Zapper.Fi: Old Balancer Zap in ETH or ERC20 2
30 ETH0.0009865845
Easy Zap In103486442020-06-27 15:30:221542 days ago1593271822IN
Zapper.Fi: Old Balancer Zap in ETH or ERC20 2
0 ETH0.0009293742
Easy Zap In103456382020-06-27 4:07:091542 days ago1593230829IN
Zapper.Fi: Old Balancer Zap in ETH or ERC20 2
0 ETH0.0006195828
Easy Zap In103456262020-06-27 4:04:411542 days ago1593230681IN
Zapper.Fi: Old Balancer Zap in ETH or ERC20 2
0 ETH0.0006195828
Destruct103450212020-06-27 1:54:501542 days ago1593222890IN
Zapper.Fi: Old Balancer Zap in ETH or ERC20 2
0 ETH0.0002953821
Easy Zap In103447802020-06-27 1:03:361542 days ago1593219816IN
Zapper.Fi: Old Balancer Zap in ETH or ERC20 2
0 ETH0.0073606722
Easy Zap In103447572020-06-27 0:57:281542 days ago1593219448IN
Zapper.Fi: Old Balancer Zap in ETH or ERC20 2
0 ETH0.0070957926
Easy Zap In103447572020-06-27 0:57:281542 days ago1593219448IN
Zapper.Fi: Old Balancer Zap in ETH or ERC20 2
0 ETH0.0085460122
Easy Zap In103447402020-06-27 0:53:161542 days ago1593219196IN
Zapper.Fi: Old Balancer Zap in ETH or ERC20 2
0 ETH0.0129733732
Easy Zap In103447272020-06-27 0:48:291542 days ago1593218909IN
Zapper.Fi: Old Balancer Zap in ETH or ERC20 2
0 ETH0.0048032126
Easy Zap In103447032020-06-27 0:43:121542 days ago1593218592IN
Zapper.Fi: Old Balancer Zap in ETH or ERC20 2
0 ETH0.0037137320.1
Easy Zap In103445942020-06-27 0:17:381542 days ago1593217058IN
Zapper.Fi: Old Balancer Zap in ETH or ERC20 2
0 ETH0.007486126
Easy Zap In103444682020-06-26 23:48:561542 days ago1593215336IN
Zapper.Fi: Old Balancer Zap in ETH or ERC20 2
0 ETH0.0050181124
Easy Zap In103443782020-06-26 23:27:021542 days ago1593214022IN
Zapper.Fi: Old Balancer Zap in ETH or ERC20 2
1.7 ETH0.0057190524
Easy Zap In103443422020-06-26 23:19:391542 days ago1593213579IN
Zapper.Fi: Old Balancer Zap in ETH or ERC20 2
0.2355 ETH0.0049768222.3
Easy Zap In103442562020-06-26 22:59:311542 days ago1593212371IN
Zapper.Fi: Old Balancer Zap in ETH or ERC20 2
0.03 ETH0.0053386423
Easy Zap In103442432020-06-26 22:57:311542 days ago1593212251IN
Zapper.Fi: Old Balancer Zap in ETH or ERC20 2
0 ETH0.0082676522.3
Easy Zap In103442202020-06-26 22:52:501542 days ago1593211970IN
Zapper.Fi: Old Balancer Zap in ETH or ERC20 2
0.02 ETH0.0064789522.4
Easy Zap In103441992020-06-26 22:49:101542 days ago1593211750IN
Zapper.Fi: Old Balancer Zap in ETH or ERC20 2
0.15 ETH0.0055109725
Easy Zap In103441722020-06-26 22:42:161542 days ago1593211336IN
Zapper.Fi: Old Balancer Zap in ETH or ERC20 2
0 ETH0.021695622
Easy Zap In103439842020-06-26 22:01:311542 days ago1593208891IN
Zapper.Fi: Old Balancer Zap in ETH or ERC20 2
0.001 ETH0.0098608524
Easy Zap In103439102020-06-26 21:44:581542 days ago1593207898IN
Zapper.Fi: Old Balancer Zap in ETH or ERC20 2
0.0001 ETH0.0051761622.3
Easy Zap In103438252020-06-26 21:25:201542 days ago1593206720IN
Zapper.Fi: Old Balancer Zap in ETH or ERC20 2
20 ETH0.0054425222.2
Easy Zap In103432112020-06-26 19:09:261542 days ago1593198566IN
Zapper.Fi: Old Balancer Zap in ETH or ERC20 2
0.01 ETH0.0053618523.1
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
103450212020-06-27 1:54:501542 days ago1593222890
Zapper.Fi: Old Balancer Zap in ETH or ERC20 2
0 ETH
103443782020-06-26 23:27:021542 days ago1593214022
Zapper.Fi: Old Balancer Zap in ETH or ERC20 2
1.7 ETH
103443422020-06-26 23:19:391542 days ago1593213579
Zapper.Fi: Old Balancer Zap in ETH or ERC20 2
0.2355 ETH
103442562020-06-26 22:59:311542 days ago1593212371
Zapper.Fi: Old Balancer Zap in ETH or ERC20 2
0.03 ETH
103442202020-06-26 22:52:501542 days ago1593211970
Zapper.Fi: Old Balancer Zap in ETH or ERC20 2
0.02 ETH
103441992020-06-26 22:49:101542 days ago1593211750
Zapper.Fi: Old Balancer Zap in ETH or ERC20 2
0.15 ETH
103439842020-06-26 22:01:311542 days ago1593208891
Zapper.Fi: Old Balancer Zap in ETH or ERC20 2
0.001 ETH
103439102020-06-26 21:44:581542 days ago1593207898
Zapper.Fi: Old Balancer Zap in ETH or ERC20 2
0.0001 ETH
103438252020-06-26 21:25:201542 days ago1593206720
Zapper.Fi: Old Balancer Zap in ETH or ERC20 2
20 ETH
103432112020-06-26 19:09:261542 days ago1593198566
Zapper.Fi: Old Balancer Zap in ETH or ERC20 2
0.01 ETH
103430562020-06-26 18:31:221542 days ago1593196282
Zapper.Fi: Old Balancer Zap in ETH or ERC20 2
0.38 ETH
103429162020-06-26 17:57:061542 days ago1593194226
Zapper.Fi: Old Balancer Zap in ETH or ERC20 2
7.7802 ETH
103426612020-06-26 16:59:241543 days ago1593190764
Zapper.Fi: Old Balancer Zap in ETH or ERC20 2
0.01 ETH
103425602020-06-26 16:37:561543 days ago1593189476
Zapper.Fi: Old Balancer Zap in ETH or ERC20 2
0.8 ETH
103417072020-06-26 13:35:581543 days ago1593178558
Zapper.Fi: Old Balancer Zap in ETH or ERC20 2
0.04 ETH
103416032020-06-26 13:14:371543 days ago1593177277
Zapper.Fi: Old Balancer Zap in ETH or ERC20 2
0.1 ETH
103412752020-06-26 12:06:521543 days ago1593173212
Zapper.Fi: Old Balancer Zap in ETH or ERC20 2
0.3 ETH
103411682020-06-26 11:39:041543 days ago1593171544
Zapper.Fi: Old Balancer Zap in ETH or ERC20 2
0.1 ETH
103411162020-06-26 11:26:041543 days ago1593170764
Zapper.Fi: Old Balancer Zap in ETH or ERC20 2
0.1 ETH
103411122020-06-26 11:25:191543 days ago1593170719
Zapper.Fi: Old Balancer Zap in ETH or ERC20 2
0.263 ETH
103405962020-06-26 9:28:061543 days ago1593163686
Zapper.Fi: Old Balancer Zap in ETH or ERC20 2
0.18 ETH
103397882020-06-26 6:27:261543 days ago1593152846
Zapper.Fi: Old Balancer Zap in ETH or ERC20 2
5 ETH
103392972020-06-26 4:36:361543 days ago1593146196
Zapper.Fi: Old Balancer Zap in ETH or ERC20 2
0.3 ETH
103390172020-06-26 3:34:561543 days ago1593142496
Zapper.Fi: Old Balancer Zap in ETH or ERC20 2
0.3 ETH
103384472020-06-26 1:28:461543 days ago1593134926
Zapper.Fi: Old Balancer Zap in ETH or ERC20 2
50 ETH
View All Internal Transactions
Loading...
Loading
Contract Self Destruct called at Txn Hash 0xf0727c4c33c608b03ad0d581e6469227e52e92f9ed84a4d44f67de0bf37dc0a7


Contract Source Code Verified (Exact Match)

Contract Name:
Balancer_ZapIn_General_V1

Compiler Version
v0.5.12+commit.7709ece9

Optimization Enabled:
Yes with 500 runs

Other Settings:
petersburg EvmVersion, GNU GPLv2 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-06-20
*/

// File: @openzeppelin/contracts/utils/Address.sol

pragma solidity ^0.5.5;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following 
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Converts an `address` into `address payable`. Note that this is
     * simply a type cast: the actual underlying value is not changed.
     *
     * _Available since v2.4.0._
     */
    function toPayable(address account) internal pure returns (address payable) {
        return address(uint160(account));
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     *
     * _Available since v2.4.0._
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-call-value
        (bool success, ) = recipient.call.value(amount)("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol

pragma solidity ^0.5.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP. Does not include
 * the optional functions; to access them see {ERC20Detailed}.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

// File: @openzeppelin/contracts/GSN/Context.sol

pragma solidity ^0.5.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
contract Context {
    // Empty internal constructor, to prevent people from mistakenly deploying
    // an instance of this contract, which should be used via inheritance.
    constructor () internal { }
    // solhint-disable-previous-line no-empty-blocks

    function _msgSender() internal view returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

// File: @openzeppelin/contracts/ownership/Ownable.sol

pragma solidity ^0.5.0;

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(isOwner(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Returns true if the caller is the current owner.
     */
    function isOwner() public view returns (bool) {
        return _msgSender() == _owner;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     */
    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

// File: @openzeppelin/contracts/utils/ReentrancyGuard.sol

pragma solidity ^0.5.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 *
 * _Since v2.5.0:_ this module is now much more gas efficient, given net gas
 * metering changes introduced in the Istanbul hardfork.
 */
contract ReentrancyGuard {
    bool private _notEntered;

    constructor () internal {
        // Storing an initial non-zero value makes deployment a bit more
        // expensive, but in exchange the refund on every call to nonReentrant
        // will be lower in amount. Since refunds are capped to a percetange of
        // the total transaction's gas, it is best to keep them low in cases
        // like this one, to increase the likelihood of the full refund coming
        // into effect.
        _notEntered = true;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_notEntered, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _notEntered = false;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _notEntered = true;
    }
}

// File: @openzeppelin/contracts/math/SafeMath.sol

pragma solidity ^0.5.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     * - Subtraction cannot overflow.
     *
     * _Available since v2.4.0._
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     *
     * _Available since v2.4.0._
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     * - The divisor cannot be zero.
     *
     * _Available since v2.4.0._
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

// File: contracts/Balancer-pool/Balancer_Zapin_general_v1.sol

// File: browser/Balancer_ZapIn_General_V1.sol

// Copyright (C) 2020 defizap, dipeshsukhani, nodarjanashia, suhailg, sumitrajput, apoorvlathey

// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Affero General Public License for more details.
//
// Visit <https://www.gnu.org/licenses/>for a copy of the GNU Affero General Public License

// File: localhost/defizap/node_modules/@openzeppelin/contracts-ethereum-package/contracts/token/ERC20/IERC20.sol

///@author DeFiZap
///@notice this contract helps in investing in balancer pools through ETH or ERC20 tokens

pragma solidity 0.5.12;







interface IBFactory_Balancer_ZapIn_General_V1 {
    function isBPool(address b) external view returns (bool);
}


interface IBPool_Balancer_ZapIn_General_V1 {
    function joinswapExternAmountIn(
        address tokenIn,
        uint256 tokenAmountIn,
        uint256 minPoolAmountOut
    ) external payable returns (uint256 poolAmountOut);

    function isBound(address t) external view returns (bool);

    function getFinalTokens() external view returns (address[] memory tokens);

    function totalSupply() external view returns (uint256);

    function getDenormalizedWeight(address token)
        external
        view
        returns (uint256);

    function getTotalDenormalizedWeight() external view returns (uint256);

    function getSwapFee() external view returns (uint256);

    function calcPoolOutGivenSingleIn(
        uint256 tokenBalanceIn,
        uint256 tokenWeightIn,
        uint256 poolSupply,
        uint256 totalWeight,
        uint256 tokenAmountIn,
        uint256 swapFee
    ) external pure returns (uint256 poolAmountOut);

    function getBalance(address token) external view returns (uint256);
}


interface IuniswapFactory_Balancer_ZapIn_General_V1 {
    function getExchange(address token)
        external
        view
        returns (address exchange);
}


interface Iuniswap_Balancer_ZapIn_General_V1 {
    function ethToTokenSwapInput(uint256 min_tokens, uint256 deadline)
        external
        payable
        returns (uint256 tokens_bought);

    // converting ERC20 to ERC20 and transfer
    function tokenToTokenSwapInput(
        uint256 tokens_sold,
        uint256 min_tokens_bought,
        uint256 min_eth_bought,
        uint256 deadline,
        address token_addr
    ) external returns (uint256 tokens_bought);

    function getTokenToEthInputPrice(uint256 tokens_sold)
        external
        view
        returns (uint256 eth_bought);

    function getEthToTokenInputPrice(uint256 eth_sold)
        external
        view
        returns (uint256 tokens_bought);

    function balanceOf(address _owner) external view returns (uint256);

    function transfer(address _to, uint256 _value) external returns (bool);

    function transferFrom(address from, address to, uint256 tokens)
        external
        returns (bool success);
}

interface IWETH {
    function deposit() external payable;

    function transfer(address to, uint256 value) external returns (bool);

    function withdraw(uint256) external;
}



contract Balancer_ZapIn_General_V1 is ReentrancyGuard, Ownable {
    using SafeMath for uint256;
    using Address for address;
    bool private stopped = false;
    uint16 public goodwill;
    address public dzgoodwillAddress;
    uint256 public defaultSlippage;

    IuniswapFactory_Balancer_ZapIn_General_V1 public UniSwapFactoryAddress = IuniswapFactory_Balancer_ZapIn_General_V1(
        0xc0a47dFe034B400B47bDaD5FecDa2621de6c4d95
    );
    IBFactory_Balancer_ZapIn_General_V1 BalancerFactory = IBFactory_Balancer_ZapIn_General_V1(
        0x9424B1412450D0f8Fc2255FAf6046b98213B76Bd
    );

    address wethTokenAddress = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;

    event Zapin(
        address _toWhomToIssue,
        address _toBalancerPoolAddress,
        uint256 _OutgoingBPT
    );

    constructor(
        uint16 _goodwill,
        address _dzgoodwillAddress,
        uint256 _slippage
    ) public {
        goodwill = _goodwill;
        dzgoodwillAddress = _dzgoodwillAddress;
        defaultSlippage = _slippage;
    }

    // circuit breaker modifiers
    modifier stopInEmergency {
        if (stopped) {
            revert("Temporarily Paused");
        } else {
            _;
        }
    }

    /**
    @notice This function is used to invest in given balancer pool through ETH/ERC20 Tokens
    @param _FromTokenContractAddress The token used for investment (address(0x00) if ether)
    @param _ToBalancerPoolAddress The address of balancer pool to zapin
    @param _amount The amount of ERC to invest
    @param slippage slippage user wants
    @return success or failure
     */
    function EasyZapIn(
        address _FromTokenContractAddress,
        address _ToBalancerPoolAddress,
        uint256 _amount,
        uint256 slippage
    ) public payable nonReentrant stopInEmergency returns (uint256 tokensBought) {
        require(
            BalancerFactory.isBPool(_ToBalancerPoolAddress),
            "Invalid Balancer Pool"
        );

        uint256 withSlippage = slippage > 0 && slippage < 10000
            ? slippage
            : defaultSlippage;

        if (_FromTokenContractAddress == address(0)) {
            require(msg.value > 0, "ERR: No ETH sent");

            address _ToTokenContractAddress = _getBestDeal(
                _ToBalancerPoolAddress,
                msg.value,
                _FromTokenContractAddress
            );

            tokensBought = _performZapIn(
                msg.sender,
                _FromTokenContractAddress,
                _ToBalancerPoolAddress,
                msg.value,
                _ToTokenContractAddress,
                withSlippage
            );

            return tokensBought;
        }

        require(_amount > 0, "ERR: No ERC sent");
        require(msg.value == 0, "ERR: ETH sent with tokens");

        //transfer tokens to contract
        require(
            IERC20(_FromTokenContractAddress).transferFrom(
                msg.sender,
                address(this),
                _amount
            ),
            "Error in transferring ERC: 1"
        );

        address _ToTokenContractAddress = _getBestDeal(
            _ToBalancerPoolAddress,
            _amount,
            _FromTokenContractAddress
        );

        tokensBought = _performZapIn(
            msg.sender,
            _FromTokenContractAddress,
            _ToBalancerPoolAddress,
            _amount,
            _ToTokenContractAddress,
            withSlippage
        );
    }

    /**
    @notice This function is used to invest in given balancer pool through ETH/ERC20 Tokens with interface
    @param _toWhomToIssue The user address who want to invest
    @param _FromTokenContractAddress The token used for investment (address(0x00) if ether)
    @param _ToBalancerPoolAddress The address of balancer pool to zapin
    @param _amount The amount of ERC to invest
    @param _IntermediateToken The token for intermediate conversion before zapin
    @param slippage slippage user wants
    @return The quantity of Balancer Pool tokens returned
     */
    function ZapIn(
        address payable _toWhomToIssue,
        address _FromTokenContractAddress,
        address _ToBalancerPoolAddress,
        uint256 _amount,
        address _IntermediateToken,
        uint256 slippage
    ) public payable nonReentrant stopInEmergency returns (uint256 tokensBought) {
        uint256 withSlippage = slippage > 0 && slippage < 10000
            ? slippage
            : defaultSlippage;

        if (_FromTokenContractAddress == address(0)) {
            require(msg.value > 0, "ERR: No ETH sent");

            tokensBought = _performZapIn(
                _toWhomToIssue,
                _FromTokenContractAddress,
                _ToBalancerPoolAddress,
                msg.value,
                _IntermediateToken,
                withSlippage
            );

            return tokensBought;
        }

        require(_amount > 0, "ERR: No ERC sent");
        require(msg.value == 0, "ERR: ETH sent with tokens");

        //transfer tokens to contract
        require(
            IERC20(_FromTokenContractAddress).transferFrom(
                _toWhomToIssue,
                address(this),
                _amount
            ),
            "Error in transferring ERC: 2"
        );

        tokensBought = _performZapIn(
            _toWhomToIssue,
            _FromTokenContractAddress,
            _ToBalancerPoolAddress,
            _amount,
            _IntermediateToken,
            withSlippage
        );
    }

    /**
    @notice This function internally called by ZapIn() and EasyZapIn()
    @param _toWhomToIssue The user address who want to invest
    @param _FromTokenContractAddress The token used for investment (address(0x00) if ether)
    @param _ToBalancerPoolAddress The address of balancer pool to zapin
    @param _amount The amount of ETH/ERC to invest
    @param _IntermediateToken The token for intermediate conversion before zapin
    @param slippage slippage user wants
    @return The quantity of Balancer Pool tokens returned
     */
    function _performZapIn(
        address _toWhomToIssue,
        address _FromTokenContractAddress,
        address _ToBalancerPoolAddress,
        uint256 _amount,
        address _IntermediateToken,
        uint256 slippage
    ) internal returns (uint256 tokensBought) {
        // check if isBound()
        bool isBound = IBPool_Balancer_ZapIn_General_V1(_ToBalancerPoolAddress)
            .isBound(_FromTokenContractAddress);

        uint256 balancerTokens;

        if (isBound) {
            balancerTokens = _enter2Balancer(
                _ToBalancerPoolAddress,
                _FromTokenContractAddress,
                _amount
            );
        } else {
            // swap tokens or eth
            uint256 tokenBought;
            if (_FromTokenContractAddress == address(0)) {
                tokenBought = _eth2Token(_IntermediateToken, slippage);
            } else {
                tokenBought = _token2Token(
                    _FromTokenContractAddress,
                    _IntermediateToken,
                    _amount,
                    slippage
                );
            }

            //get BPT
            balancerTokens = _enter2Balancer(
                _ToBalancerPoolAddress,
                _IntermediateToken,
                tokenBought
            );
        }

        //transfer goodwill
        uint256 goodwillPortion = _transferGoodwill(
            _ToBalancerPoolAddress,
            balancerTokens
        );

        emit Zapin(
            _toWhomToIssue,
            _ToBalancerPoolAddress,
            SafeMath.sub(balancerTokens, goodwillPortion)
        );

        //transfer tokens to user
        IERC20(_ToBalancerPoolAddress).transfer(
            _toWhomToIssue,
            SafeMath.sub(balancerTokens, goodwillPortion)
        );
        return SafeMath.sub(balancerTokens, goodwillPortion);
    }

    /**
    @notice This function is used to calculate and transfer goodwill
    @param _tokenContractAddress Token in which goodwill is deducted
    @param tokens2Trade The total amount of tokens to be zapped in
    @return The quantity of goodwill deducted
     */
    function _transferGoodwill(
        address _tokenContractAddress,
        uint256 tokens2Trade
    ) internal returns (uint256 goodwillPortion) {
        goodwillPortion = SafeMath.div(
            SafeMath.mul(tokens2Trade, goodwill),
            10000
        );

        if (goodwillPortion == 0) {
            return 0;
        }

        require(
            IERC20(_tokenContractAddress).transfer(
                dzgoodwillAddress,
                goodwillPortion
            ),
            "Error in transferring BPT:1"
        );
    }

    /**
    @notice This function is used to zapin to balancer pool
    @param _ToBalancerPoolAddress The address of balancer pool to zap in
    @param _FromTokenContractAddress The token used to zap in
    @param tokens2Trade The amount of tokens to invest
    @return The quantity of Balancer Pool tokens returned
     */
    function _enter2Balancer(
        address _ToBalancerPoolAddress,
        address _FromTokenContractAddress,
        uint256 tokens2Trade
    ) internal returns (uint256 poolTokensOut) {
        require(
            IBPool_Balancer_ZapIn_General_V1(_ToBalancerPoolAddress).isBound(
                _FromTokenContractAddress
            ),
            "Token not bound"
        );

        uint256 allowance = IERC20(_FromTokenContractAddress).allowance(
            address(this),
            _ToBalancerPoolAddress
        );

        if (allowance < tokens2Trade) {
            IERC20(_FromTokenContractAddress).approve(
                _ToBalancerPoolAddress,
                uint256(-1)
            );
        }

        poolTokensOut = IBPool_Balancer_ZapIn_General_V1(_ToBalancerPoolAddress)
            .joinswapExternAmountIn(_FromTokenContractAddress, tokens2Trade, 1);

        require(poolTokensOut > 0, "Error in entering balancer pool");
    }

    /**
    @notice This function finds best token from the final tokens of balancer pool
    @param _ToBalancerPoolAddress The address of balancer pool to zap in
    @param _amount amount of eth/erc to invest
    @param _FromTokenContractAddress the token address which is used to invest
    @return The token address having max liquidity
     */
    function _getBestDeal(
        address _ToBalancerPoolAddress,
        uint256 _amount,
        address _FromTokenContractAddress
    ) internal view returns (address _token) {
        //get token list
        address[] memory tokens = IBPool_Balancer_ZapIn_General_V1(
            _ToBalancerPoolAddress
        ).getFinalTokens();

        uint256 amount = _amount;

        if (_FromTokenContractAddress != address(0)) {
            // check if isBound()
            bool isBound = IBPool_Balancer_ZapIn_General_V1(
                _ToBalancerPoolAddress
            ).isBound(_FromTokenContractAddress);

            if (isBound) return _FromTokenContractAddress;

            //get eth value for given token

            Iuniswap_Balancer_ZapIn_General_V1 FromUniSwapExchangeContractAddress
            = Iuniswap_Balancer_ZapIn_General_V1(
                UniSwapFactoryAddress.getExchange(_FromTokenContractAddress)
            );

            //get qty of eth expected
            amount = Iuniswap_Balancer_ZapIn_General_V1(
                FromUniSwapExchangeContractAddress
            ).getTokenToEthInputPrice(_amount);
        }

        uint256 maxBPT;

        for (uint256 index = 0; index < tokens.length; index++) {

            Iuniswap_Balancer_ZapIn_General_V1 FromUniSwapExchangeContractAddress
            = Iuniswap_Balancer_ZapIn_General_V1(
                UniSwapFactoryAddress.getExchange(tokens[index])
            );

            if (address(FromUniSwapExchangeContractAddress) == address(0)) {
                continue;
            }

            //get qty of tokens
            uint256 expectedTokens = Iuniswap_Balancer_ZapIn_General_V1(
                FromUniSwapExchangeContractAddress
            ).getEthToTokenInputPrice(amount);

            //get bpt for given tokens
            uint256 expectedBPT = getToken2BPT(
                _ToBalancerPoolAddress,
                expectedTokens,
                tokens[index]
            );

            //get token giving max BPT
            if (maxBPT < expectedBPT) {
                maxBPT = expectedBPT;
                _token = tokens[index];
            }
        }
    }

    /**
    @notice Function gives the expected amount of pool tokens on investing
    @param _ToBalancerPoolAddress Address of balancer pool to zapin
    @param _IncomingERC The amount of ERC to invest
    @param _FromToken Address of token to zap in with
    @return Amount of BPT token
     */
    function getToken2BPT(
        address _ToBalancerPoolAddress,
        uint256 _IncomingERC,
        address _FromToken
    ) internal view returns (uint256 tokensReturned) {
        uint256 totalSupply = IBPool_Balancer_ZapIn_General_V1(
            _ToBalancerPoolAddress
        ).totalSupply();
        uint256 swapFee = IBPool_Balancer_ZapIn_General_V1(
            _ToBalancerPoolAddress
        ).getSwapFee();
        uint256 totalWeight = IBPool_Balancer_ZapIn_General_V1(
            _ToBalancerPoolAddress
        ).getTotalDenormalizedWeight();
        uint256 balance = IBPool_Balancer_ZapIn_General_V1(
            _ToBalancerPoolAddress
        ).getBalance(_FromToken);
        uint256 denorm = IBPool_Balancer_ZapIn_General_V1(
            _ToBalancerPoolAddress
        ).getDenormalizedWeight(_FromToken);

        tokensReturned = IBPool_Balancer_ZapIn_General_V1(
            _ToBalancerPoolAddress
        ).calcPoolOutGivenSingleIn(
            balance,
            denorm,
            totalSupply,
            totalWeight,
            _IncomingERC,
            swapFee
        );
    }

    /**
    @notice This function is used to buy tokens from eth
    @param _tokenContractAddress Token address which we want to buy
    @return The quantity of token bought
     */
    function _eth2Token(address _tokenContractAddress, uint256 slippage)
        internal
        returns (uint256 tokenBought)
    {
        if(_tokenContractAddress == wethTokenAddress) {
            IWETH(wethTokenAddress).deposit.value(msg.value)();
            return msg.value;
        }

        Iuniswap_Balancer_ZapIn_General_V1 FromUniSwapExchangeContractAddress
        = Iuniswap_Balancer_ZapIn_General_V1(
            UniSwapFactoryAddress.getExchange(_tokenContractAddress)
        );

        uint256 minTokenBought = FromUniSwapExchangeContractAddress
            .getEthToTokenInputPrice(msg.value);
        minTokenBought = SafeMath.div(
            SafeMath.mul(minTokenBought, SafeMath.sub(10000, slippage)),
            10000
        );

        tokenBought = FromUniSwapExchangeContractAddress
            .ethToTokenSwapInput
            .value(msg.value)(minTokenBought, SafeMath.add(now, 300));
    }

    /**
    @notice This function is used to swap tokens
    @param _FromTokenContractAddress The token address to swap from
    @param _ToTokenContractAddress The token address to swap to
    @param tokens2Trade The amount of tokens to swap
    @return The quantity of tokens bought
     */
    function _token2Token(
        address _FromTokenContractAddress,
        address _ToTokenContractAddress,
        uint256 tokens2Trade,
        uint256 slippage
    ) internal returns (uint256 tokenBought) {

        Iuniswap_Balancer_ZapIn_General_V1 FromUniSwapExchangeContractAddress
        = Iuniswap_Balancer_ZapIn_General_V1(
            UniSwapFactoryAddress.getExchange(_FromTokenContractAddress)
        );

        Iuniswap_Balancer_ZapIn_General_V1 ToUniSwapExchangeContractAddress
        = Iuniswap_Balancer_ZapIn_General_V1(
            UniSwapFactoryAddress.getExchange(_ToTokenContractAddress)
        );

        IERC20(_FromTokenContractAddress).approve(
            address(FromUniSwapExchangeContractAddress),
            tokens2Trade
        );

        uint256 minEthBought = FromUniSwapExchangeContractAddress
            .getTokenToEthInputPrice(tokens2Trade);
        minEthBought = SafeMath.div(
            SafeMath.mul(minEthBought, SafeMath.sub(10000, slippage)),
            10000
        );

        uint256 minTokenBought = ToUniSwapExchangeContractAddress
            .getEthToTokenInputPrice(minEthBought);
        minTokenBought = SafeMath.div(
            SafeMath.mul(minTokenBought, SafeMath.sub(10000, slippage)),
            10000
        );

        tokenBought = FromUniSwapExchangeContractAddress.tokenToTokenSwapInput(
            tokens2Trade,
            minTokenBought,
            minEthBought,
            SafeMath.add(now, 1800),
            _ToTokenContractAddress
        );
        require(tokenBought > 0, "Error in swapping ERC: 1");
    }

    function updateSlippage(uint256 _newSlippage) public onlyOwner {
        require(
            _newSlippage > 0 && _newSlippage < 10000,
            "Slippage Value not allowed"
        );
        defaultSlippage = _newSlippage;
    }

    function set_new_goodwill(uint16 _new_goodwill) public onlyOwner {
        require(
            _new_goodwill >= 0 && _new_goodwill < 10000,
            "GoodWill Value not allowed"
        );
        goodwill = _new_goodwill;
    }

    function set_new_dzgoodwillAddress(address _new_dzgoodwillAddress)
        public
        onlyOwner
    {
        dzgoodwillAddress = _new_dzgoodwillAddress;
    }

    function inCaseTokengetsStuck(IERC20 _TokenAddress) public onlyOwner {
        uint256 qty = _TokenAddress.balanceOf(address(this));
        _TokenAddress.transfer(owner(), qty);
    }

    // - to Pause the contract
    function toggleContractActive() public onlyOwner {
        stopped = !stopped;
    }

    // - to withdraw any ETH balance sitting in the contract
    function withdraw() public onlyOwner {
        uint256 contractBalance = address(this).balance;
        address payable _to = owner().toPayable();
        _to.transfer(contractBalance);
    }

    // - to kill the contract
    function destruct() public onlyOwner {
        address payable _to = owner().toPayable();
        selfdestruct(_to);
    }

    function() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint16","name":"_goodwill","type":"uint16"},{"internalType":"address","name":"_dzgoodwillAddress","type":"address"},{"internalType":"uint256","name":"_slippage","type":"uint256"}],"payable":false,"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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_toWhomToIssue","type":"address"},{"indexed":false,"internalType":"address","name":"_toBalancerPoolAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"_OutgoingBPT","type":"uint256"}],"name":"Zapin","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":false,"inputs":[{"internalType":"address","name":"_FromTokenContractAddress","type":"address"},{"internalType":"address","name":"_ToBalancerPoolAddress","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"slippage","type":"uint256"}],"name":"EasyZapIn","outputs":[{"internalType":"uint256","name":"tokensBought","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"UniSwapFactoryAddress","outputs":[{"internalType":"contract IuniswapFactory_Balancer_ZapIn_General_V1","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address payable","name":"_toWhomToIssue","type":"address"},{"internalType":"address","name":"_FromTokenContractAddress","type":"address"},{"internalType":"address","name":"_ToBalancerPoolAddress","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_IntermediateToken","type":"address"},{"internalType":"uint256","name":"slippage","type":"uint256"}],"name":"ZapIn","outputs":[{"internalType":"uint256","name":"tokensBought","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"defaultSlippage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"destruct","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"dzgoodwillAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"goodwill","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IERC20","name":"_TokenAddress","type":"address"}],"name":"inCaseTokengetsStuck","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_dzgoodwillAddress","type":"address"}],"name":"set_new_dzgoodwillAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint16","name":"_new_goodwill","type":"uint16"}],"name":"set_new_goodwill","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"toggleContractActive","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_newSlippage","type":"uint256"}],"name":"updateSlippage","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]

60806040526000805460ff60a81b19169055600380546001600160a01b031990811673c0a47dfe034b400b47bdad5fecda2621de6c4d9517909155600480548216739424b1412450d0f8fc2255faf6046b98213b76bd1790556005805490911673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc217905534801561008357600080fd5b506040516200283538038062002835833981810160405260608110156100a857600080fd5b50805160208201516040909201516000805460ff191660011781559192916100d76001600160e01b0361018616565b60008054610100600160a81b0319166101006001600160a01b038416908102919091178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000805461ffff9094167601000000000000000000000000000000000000000000000261ffff60b01b1990941693909317909255600180546001600160a01b039092166001600160a01b031990921691909117905560025561018a565b3390565b61269b806200019a6000396000f3fe6080604052600436106100fe5760003560e01c80635de0398e116100955780638da5cb5b116100645780638da5cb5b146102ee5780638f32d59b14610303578063b10e1dbc1461032c578063c3a8fcb01461035a578063f2fde38b1461036f576100fe565b80635de0398e14610230578063715018a61461025c5780638070653014610271578063849e25f4146102bb576100fe565b806344da4abd116100d157806344da4abd14610169578063525d509e146101b75780635487404a146101e8578063551196d5146101fd576100fe565b80631385d24c1461010057806315b0d496146101155780632b68b9c61461013f5780633ccfd60b14610154575b005b34801561010c57600080fd5b506100fe6103a2565b34801561012157600080fd5b506100fe6004803603602081101561013857600080fd5b503561040a565b34801561014b57600080fd5b506100fe6104b8565b34801561016057600080fd5b506100fe610528565b6101a56004803603608081101561017f57600080fd5b506001600160a01b038135811691602081013590911690604081013590606001356105bc565b60408051918252519081900360200190f35b3480156101c357600080fd5b506101cc610982565b604080516001600160a01b039092168252519081900360200190f35b3480156101f457600080fd5b506101a5610991565b34801561020957600080fd5b506100fe6004803603602081101561022057600080fd5b50356001600160a01b0316610997565b34801561023c57600080fd5b50610245610aed565b6040805161ffff9092168252519081900360200190f35b34801561026857600080fd5b506100fe610afe565b6101a5600480360360c081101561028757600080fd5b506001600160a01b038135811691602081013582169160408201358116916060810135916080820135169060a00135610ba1565b3480156102c757600080fd5b506100fe600480360360208110156102de57600080fd5b50356001600160a01b0316610e7f565b3480156102fa57600080fd5b506101cc610ef5565b34801561030f57600080fd5b50610318610f09565b604080519115158252519081900360200190f35b34801561033857600080fd5b506100fe6004803603602081101561034f57600080fd5b503561ffff16610f32565b34801561036657600080fd5b506101cc610ff5565b34801561037b57600080fd5b506100fe6004803603602081101561039257600080fd5b50356001600160a01b0316611004565b6103aa610f09565b6103e9576040805162461bcd60e51b81526020600482018190526024820152600080516020612647833981519152604482015290519081900360640190fd5b6000805460ff60a81b198116600160a81b9182900460ff1615909102179055565b610412610f09565b610451576040805162461bcd60e51b81526020600482018190526024820152600080516020612647833981519152604482015290519081900360640190fd5b600081118015610462575061271081105b6104b3576040805162461bcd60e51b815260206004820152601a60248201527f536c6970706167652056616c7565206e6f7420616c6c6f776564000000000000604482015290519081900360640190fd5b600255565b6104c0610f09565b6104ff576040805162461bcd60e51b81526020600482018190526024820152600080516020612647833981519152604482015290519081900360640190fd5b600061051a61050c610ef5565b6001600160a01b0316611057565b9050806001600160a01b0316ff5b610530610f09565b61056f576040805162461bcd60e51b81526020600482018190526024820152600080516020612647833981519152604482015290519081900360640190fd5b3031600061057e61050c610ef5565b6040519091506001600160a01b0382169083156108fc029084906000818181858888f193505050501580156105b7573d6000803e3d6000fd5b505050565b6000805460ff16610614576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6000805460ff191690819055600160a81b900460ff1615610671576040805162461bcd60e51b815260206004820152601260248201527115195b5c1bdc985c9a5b1e4814185d5cd95960721b604482015290519081900360640190fd5b600480546040805163615db6e160e11b81526001600160a01b03888116948201949094529051929091169163c2bb6dc291602480820192602092909190829003018186803b1580156106c257600080fd5b505afa1580156106d6573d6000803e3d6000fd5b505050506040513d60208110156106ec57600080fd5b505161073f576040805162461bcd60e51b815260206004820152601560248201527f496e76616c69642042616c616e63657220506f6f6c0000000000000000000000604482015290519081900360640190fd5b60008083118015610751575061271083105b61075d5760025461075f565b825b90506001600160a01b0386166107de57600034116107b7576040805162461bcd60e51b815260206004820152601060248201526f1154948e88139bc8115512081cd95b9d60821b604482015290519081900360640190fd5b60006107c486348961105a565b90506107d433888834858761149e565b925061096d915050565b60008411610826576040805162461bcd60e51b815260206004820152601060248201526f1154948e88139bc8115490c81cd95b9d60821b604482015290519081900360640190fd5b3415610879576040805162461bcd60e51b815260206004820152601960248201527f4552523a204554482073656e74207769746820746f6b656e7300000000000000604482015290519081900360640190fd5b604080516323b872dd60e01b81523360048201523060248201526044810186905290516001600160a01b038816916323b872dd9160648083019260209291908290030181600087803b1580156108ce57600080fd5b505af11580156108e2573d6000803e3d6000fd5b505050506040513d60208110156108f857600080fd5b505161094b576040805162461bcd60e51b815260206004820152601c60248201527f4572726f7220696e207472616e7366657272696e67204552433a203100000000604482015290519081900360640190fd5b600061095886868961105a565b905061096833888888858761149e565b925050505b6000805460ff19166001179055949350505050565b6003546001600160a01b031681565b60025481565b61099f610f09565b6109de576040805162461bcd60e51b81526020600482018190526024820152600080516020612647833981519152604482015290519081900360640190fd5b604080516370a0823160e01b815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b158015610a2857600080fd5b505afa158015610a3c573d6000803e3d6000fd5b505050506040513d6020811015610a5257600080fd5b505190506001600160a01b03821663a9059cbb610a6d610ef5565b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015610abd57600080fd5b505af1158015610ad1573d6000803e3d6000fd5b505050506040513d6020811015610ae757600080fd5b50505050565b600054600160b01b900461ffff1681565b610b06610f09565b610b45576040805162461bcd60e51b81526020600482018190526024820152600080516020612647833981519152604482015290519081900360640190fd5b600080546040516101009091046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36000805474ffffffffffffffffffffffffffffffffffffffff0019169055565b6000805460ff16610bf9576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6000805460ff191690819055600160a81b900460ff1615610c56576040805162461bcd60e51b815260206004820152601260248201527115195b5c1bdc985c9a5b1e4814185d5cd95960721b604482015290519081900360640190fd5b60008083118015610c68575061271083105b610c7457600254610c76565b825b90506001600160a01b038716610ce55760003411610cce576040805162461bcd60e51b815260206004820152601060248201526f1154948e88139bc8115512081cd95b9d60821b604482015290519081900360640190fd5b610cdc88888834888661149e565b9150610e689050565b60008511610d2d576040805162461bcd60e51b815260206004820152601060248201526f1154948e88139bc8115490c81cd95b9d60821b604482015290519081900360640190fd5b3415610d80576040805162461bcd60e51b815260206004820152601960248201527f4552523a204554482073656e74207769746820746f6b656e7300000000000000604482015290519081900360640190fd5b604080516323b872dd60e01b81526001600160a01b038a81166004830152306024830152604482018890529151918916916323b872dd916064808201926020929091908290030181600087803b158015610dd957600080fd5b505af1158015610ded573d6000803e3d6000fd5b505050506040513d6020811015610e0357600080fd5b5051610e56576040805162461bcd60e51b815260206004820152601c60248201527f4572726f7220696e207472616e7366657272696e67204552433a203200000000604482015290519081900360640190fd5b610e6488888888888661149e565b9150505b6000805460ff191660011790559695505050505050565b610e87610f09565b610ec6576040805162461bcd60e51b81526020600482018190526024820152600080516020612647833981519152604482015290519081900360640190fd5b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b60005461010090046001600160a01b031690565b6000805461010090046001600160a01b0316610f23611690565b6001600160a01b031614905090565b610f3a610f09565b610f79576040805162461bcd60e51b81526020600482018190526024820152600080516020612647833981519152604482015290519081900360640190fd5b6127108161ffff1610610fd3576040805162461bcd60e51b815260206004820152601a60248201527f476f6f6457696c6c2056616c7565206e6f7420616c6c6f776564000000000000604482015290519081900360640190fd5b6000805461ffff909216600160b01b0261ffff60b01b19909216919091179055565b6001546001600160a01b031681565b61100c610f09565b61104b576040805162461bcd60e51b81526020600482018190526024820152600080516020612647833981519152604482015290519081900360640190fd5b61105481611694565b50565b90565b60006060846001600160a01b031663be3bbd2e6040518163ffffffff1660e01b815260040160006040518083038186803b15801561109757600080fd5b505afa1580156110ab573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156110d457600080fd5b81019080805160405193929190846401000000008211156110f457600080fd5b90830190602082018581111561110957600080fd5b825186602082028301116401000000008211171561112657600080fd5b82525081516020918201928201910280838360005b8381101561115357818101518382015260200161113b565b50505050919091016040525092935086925050506001600160a01b03841615611306576000866001600160a01b0316632f37b624866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156111ce57600080fd5b505afa1580156111e2573d6000803e3d6000fd5b505050506040513d60208110156111f857600080fd5b50519050801561120d57849350505050611497565b600354604080516303795fb160e11b81526001600160a01b038881166004830152915160009392909216916306f2bf6291602480820192602092909190829003018186803b15801561125e57600080fd5b505afa158015611272573d6000803e3d6000fd5b505050506040513d602081101561128857600080fd5b5051604080516395b68fe760e01b8152600481018a905290519192506001600160a01b038316916395b68fe791602480820192602092909190829003018186803b1580156112d557600080fd5b505afa1580156112e9573d6000803e3d6000fd5b505050506040513d60208110156112ff57600080fd5b5051925050505b6000805b83518110156114925760035484516000916001600160a01b0316906306f2bf629087908590811061133757fe5b60200260200101516040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561138557600080fd5b505afa158015611399573d6000803e3d6000fd5b505050506040513d60208110156113af57600080fd5b505190506001600160a01b0381166113c7575061148a565b6000816001600160a01b031663cd7724c3866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561140d57600080fd5b505afa158015611421573d6000803e3d6000fd5b505050506040513d602081101561143757600080fd5b50518651909150600090611462908c9084908a908890811061145557fe5b602002602001015161174c565b9050808510156114865780945086848151811061147b57fe5b602002602001015197505b5050505b60010161130a565b505050505b9392505050565b600080856001600160a01b0316632f37b624886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156114f757600080fd5b505afa15801561150b573d6000803e3d6000fd5b505050506040513d602081101561152157600080fd5b505190506000811561153f57611538878988611a37565b905061157e565b60006001600160a01b038916611560576115598686611cf6565b905061156f565b61156c89878988611f2a565b90505b61157a888783611a37565b9150505b600061158a88836122cc565b90507f7c58760c09b45377b9759b1584bfa97aaad8a040feb4ec965b2b76e20b4af07f8a896115b985856123cc565b604080516001600160a01b0394851681529290931660208301528183015290519081900360600190a1876001600160a01b031663a9059cbb8b6115fc85856123cc565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561164b57600080fd5b505af115801561165f573d6000803e3d6000fd5b505050506040513d602081101561167557600080fd5b50611682905082826123cc565b9a9950505050505050505050565b3390565b6001600160a01b0381166116d95760405162461bcd60e51b81526004018080602001828103825260268152602001806126006026913960400191505060405180910390fd5b600080546040516001600160a01b038085169361010090930416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b600080846001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561178857600080fd5b505afa15801561179c573d6000803e3d6000fd5b505050506040513d60208110156117b257600080fd5b505160408051631a995bed60e31b815290519192506000916001600160a01b0388169163d4cadf68916004808301926020929190829003018186803b1580156117fa57600080fd5b505afa15801561180e573d6000803e3d6000fd5b505050506040513d602081101561182457600080fd5b50516040805163936c347760e01b815290519192506000916001600160a01b0389169163936c3477916004808301926020929190829003018186803b15801561186c57600080fd5b505afa158015611880573d6000803e3d6000fd5b505050506040513d602081101561189657600080fd5b50516040805163f8b2cb4f60e01b81526001600160a01b0388811660048301529151929350600092918a169163f8b2cb4f91602480820192602092909190829003018186803b1580156118e857600080fd5b505afa1580156118fc573d6000803e3d6000fd5b505050506040513d602081101561191257600080fd5b505160408051634a46c67360e11b81526001600160a01b0389811660048301529151929350600092918b169163948d8ce691602480820192602092909190829003018186803b15801561196457600080fd5b505afa158015611978573d6000803e3d6000fd5b505050506040513d602081101561198e57600080fd5b505160408051638656b65360e01b815260048101859052602481018390526044810188905260648101869052608481018b905260a4810187905290519192506001600160a01b038b1691638656b6539160c480820192602092909190829003018186803b1580156119fe57600080fd5b505afa158015611a12573d6000803e3d6000fd5b505050506040513d6020811015611a2857600080fd5b50519998505050505050505050565b6000836001600160a01b0316632f37b624846040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611a8f57600080fd5b505afa158015611aa3573d6000803e3d6000fd5b505050506040513d6020811015611ab957600080fd5b5051611b0c576040805162461bcd60e51b815260206004820152600f60248201527f546f6b656e206e6f7420626f756e640000000000000000000000000000000000604482015290519081900360640190fd5b60408051636eb1769f60e11b81523060048201526001600160a01b038681166024830152915160009286169163dd62ed3e916044808301926020929190829003018186803b158015611b5d57600080fd5b505afa158015611b71573d6000803e3d6000fd5b505050506040513d6020811015611b8757600080fd5b5051905082811015611c14576040805163095ea7b360e01b81526001600160a01b038781166004830152600019602483015291519186169163095ea7b3916044808201926020929091908290030181600087803b158015611be757600080fd5b505af1158015611bfb573d6000803e3d6000fd5b505050506040513d6020811015611c1157600080fd5b50505b60408051635db3427760e01b81526001600160a01b0386811660048301526024820186905260016044830152915191871691635db34277916064808201926020929091908290030181600087803b158015611c6e57600080fd5b505af1158015611c82573d6000803e3d6000fd5b505050506040513d6020811015611c9857600080fd5b5051915081611cee576040805162461bcd60e51b815260206004820152601f60248201527f4572726f7220696e20656e746572696e672062616c616e63657220706f6f6c00604482015290519081900360640190fd5b509392505050565b6005546000906001600160a01b0384811691161415611d8057600560009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d5f57600080fd5b505af1158015611d73573d6000803e3d6000fd5b5050505050349050611f24565b600354604080516303795fb160e11b81526001600160a01b038681166004830152915160009392909216916306f2bf6291602480820192602092909190829003018186803b158015611dd157600080fd5b505afa158015611de5573d6000803e3d6000fd5b505050506040513d6020811015611dfb57600080fd5b50516040805163cd7724c360e01b815234600482015290519192506000916001600160a01b0384169163cd7724c3916024808301926020929190829003018186803b158015611e4957600080fd5b505afa158015611e5d573d6000803e3d6000fd5b505050506040513d6020811015611e7357600080fd5b50519050611e97611e8f82611e8a612710886123cc565b61240e565b612710612467565b9050816001600160a01b031663f39b5b9b3483611eb64261012c6124a9565b6040518463ffffffff1660e01b815260040180838152602001828152602001925050506020604051808303818588803b158015611ef257600080fd5b505af1158015611f06573d6000803e3d6000fd5b50505050506040513d6020811015611f1d57600080fd5b5051925050505b92915050565b600354604080516303795fb160e11b81526001600160a01b0387811660048301529151600093849316916306f2bf62916024808301926020929190829003018186803b158015611f7957600080fd5b505afa158015611f8d573d6000803e3d6000fd5b505050506040513d6020811015611fa357600080fd5b5051600354604080516303795fb160e11b81526001600160a01b038981166004830152915193945060009391909216916306f2bf62916024808301926020929190829003018186803b158015611ff857600080fd5b505afa15801561200c573d6000803e3d6000fd5b505050506040513d602081101561202257600080fd5b50516040805163095ea7b360e01b81526001600160a01b0385811660048301526024820189905291519293509089169163095ea7b3916044808201926020929091908290030181600087803b15801561207a57600080fd5b505af115801561208e573d6000803e3d6000fd5b505050506040513d60208110156120a457600080fd5b5050604080516395b68fe760e01b81526004810187905290516000916001600160a01b038516916395b68fe791602480820192602092909190829003018186803b1580156120f157600080fd5b505afa158015612105573d6000803e3d6000fd5b505050506040513d602081101561211b57600080fd5b50519050612132611e8f82611e8a612710896123cc565b90506000826001600160a01b031663cd7724c3836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561217a57600080fd5b505afa15801561218e573d6000803e3d6000fd5b505050506040513d60208110156121a457600080fd5b505190506121bb611e8f82611e8a6127108a6123cc565b9050836001600160a01b031663ddf7e1a78883856121db426107086124a9565b8d6040518663ffffffff1660e01b815260040180868152602001858152602001848152602001838152602001826001600160a01b03166001600160a01b0316815260200195505050505050602060405180830381600087803b15801561224057600080fd5b505af1158015612254573d6000803e3d6000fd5b505050506040513d602081101561226a57600080fd5b50519450846122c0576040805162461bcd60e51b815260206004820152601860248201527f4572726f7220696e207377617070696e67204552433a20310000000000000000604482015290519081900360640190fd5b50505050949350505050565b600080546122ea90611e8f908490600160b01b900461ffff1661240e565b9050806122f957506000611f24565b6001546040805163a9059cbb60e01b81526001600160a01b0392831660048201526024810184905290519185169163a9059cbb916044808201926020929091908290030181600087803b15801561234f57600080fd5b505af1158015612363573d6000803e3d6000fd5b505050506040513d602081101561237957600080fd5b5051611f24576040805162461bcd60e51b815260206004820152601b60248201527f4572726f7220696e207472616e7366657272696e67204250543a310000000000604482015290519081900360640190fd5b600061149783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612503565b60008261241d57506000611f24565b8282028284828161242a57fe5b04146114975760405162461bcd60e51b81526004018080602001828103825260218152602001806126266021913960400191505060405180910390fd5b600061149783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061259a565b600082820183811015611497576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600081848411156125925760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561255757818101518382015260200161253f565b50505050905090810190601f1680156125845780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836125e95760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561255757818101518382015260200161253f565b5060008385816125f557fe5b049594505050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a265627a7a723158200424d2843a78a795f0ed3632b4061e624ed4c743a0d4eb651330bfd247e5d89f64736f6c634300050c00320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f79cabc4caca5eca8ee6a36651a0ad5a2190f04e00000000000000000000000000000000000000000000000000000000000000c8

Deployed Bytecode

0x6080604052600436106100fe5760003560e01c80635de0398e116100955780638da5cb5b116100645780638da5cb5b146102ee5780638f32d59b14610303578063b10e1dbc1461032c578063c3a8fcb01461035a578063f2fde38b1461036f576100fe565b80635de0398e14610230578063715018a61461025c5780638070653014610271578063849e25f4146102bb576100fe565b806344da4abd116100d157806344da4abd14610169578063525d509e146101b75780635487404a146101e8578063551196d5146101fd576100fe565b80631385d24c1461010057806315b0d496146101155780632b68b9c61461013f5780633ccfd60b14610154575b005b34801561010c57600080fd5b506100fe6103a2565b34801561012157600080fd5b506100fe6004803603602081101561013857600080fd5b503561040a565b34801561014b57600080fd5b506100fe6104b8565b34801561016057600080fd5b506100fe610528565b6101a56004803603608081101561017f57600080fd5b506001600160a01b038135811691602081013590911690604081013590606001356105bc565b60408051918252519081900360200190f35b3480156101c357600080fd5b506101cc610982565b604080516001600160a01b039092168252519081900360200190f35b3480156101f457600080fd5b506101a5610991565b34801561020957600080fd5b506100fe6004803603602081101561022057600080fd5b50356001600160a01b0316610997565b34801561023c57600080fd5b50610245610aed565b6040805161ffff9092168252519081900360200190f35b34801561026857600080fd5b506100fe610afe565b6101a5600480360360c081101561028757600080fd5b506001600160a01b038135811691602081013582169160408201358116916060810135916080820135169060a00135610ba1565b3480156102c757600080fd5b506100fe600480360360208110156102de57600080fd5b50356001600160a01b0316610e7f565b3480156102fa57600080fd5b506101cc610ef5565b34801561030f57600080fd5b50610318610f09565b604080519115158252519081900360200190f35b34801561033857600080fd5b506100fe6004803603602081101561034f57600080fd5b503561ffff16610f32565b34801561036657600080fd5b506101cc610ff5565b34801561037b57600080fd5b506100fe6004803603602081101561039257600080fd5b50356001600160a01b0316611004565b6103aa610f09565b6103e9576040805162461bcd60e51b81526020600482018190526024820152600080516020612647833981519152604482015290519081900360640190fd5b6000805460ff60a81b198116600160a81b9182900460ff1615909102179055565b610412610f09565b610451576040805162461bcd60e51b81526020600482018190526024820152600080516020612647833981519152604482015290519081900360640190fd5b600081118015610462575061271081105b6104b3576040805162461bcd60e51b815260206004820152601a60248201527f536c6970706167652056616c7565206e6f7420616c6c6f776564000000000000604482015290519081900360640190fd5b600255565b6104c0610f09565b6104ff576040805162461bcd60e51b81526020600482018190526024820152600080516020612647833981519152604482015290519081900360640190fd5b600061051a61050c610ef5565b6001600160a01b0316611057565b9050806001600160a01b0316ff5b610530610f09565b61056f576040805162461bcd60e51b81526020600482018190526024820152600080516020612647833981519152604482015290519081900360640190fd5b3031600061057e61050c610ef5565b6040519091506001600160a01b0382169083156108fc029084906000818181858888f193505050501580156105b7573d6000803e3d6000fd5b505050565b6000805460ff16610614576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6000805460ff191690819055600160a81b900460ff1615610671576040805162461bcd60e51b815260206004820152601260248201527115195b5c1bdc985c9a5b1e4814185d5cd95960721b604482015290519081900360640190fd5b600480546040805163615db6e160e11b81526001600160a01b03888116948201949094529051929091169163c2bb6dc291602480820192602092909190829003018186803b1580156106c257600080fd5b505afa1580156106d6573d6000803e3d6000fd5b505050506040513d60208110156106ec57600080fd5b505161073f576040805162461bcd60e51b815260206004820152601560248201527f496e76616c69642042616c616e63657220506f6f6c0000000000000000000000604482015290519081900360640190fd5b60008083118015610751575061271083105b61075d5760025461075f565b825b90506001600160a01b0386166107de57600034116107b7576040805162461bcd60e51b815260206004820152601060248201526f1154948e88139bc8115512081cd95b9d60821b604482015290519081900360640190fd5b60006107c486348961105a565b90506107d433888834858761149e565b925061096d915050565b60008411610826576040805162461bcd60e51b815260206004820152601060248201526f1154948e88139bc8115490c81cd95b9d60821b604482015290519081900360640190fd5b3415610879576040805162461bcd60e51b815260206004820152601960248201527f4552523a204554482073656e74207769746820746f6b656e7300000000000000604482015290519081900360640190fd5b604080516323b872dd60e01b81523360048201523060248201526044810186905290516001600160a01b038816916323b872dd9160648083019260209291908290030181600087803b1580156108ce57600080fd5b505af11580156108e2573d6000803e3d6000fd5b505050506040513d60208110156108f857600080fd5b505161094b576040805162461bcd60e51b815260206004820152601c60248201527f4572726f7220696e207472616e7366657272696e67204552433a203100000000604482015290519081900360640190fd5b600061095886868961105a565b905061096833888888858761149e565b925050505b6000805460ff19166001179055949350505050565b6003546001600160a01b031681565b60025481565b61099f610f09565b6109de576040805162461bcd60e51b81526020600482018190526024820152600080516020612647833981519152604482015290519081900360640190fd5b604080516370a0823160e01b815230600482015290516000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b158015610a2857600080fd5b505afa158015610a3c573d6000803e3d6000fd5b505050506040513d6020811015610a5257600080fd5b505190506001600160a01b03821663a9059cbb610a6d610ef5565b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015610abd57600080fd5b505af1158015610ad1573d6000803e3d6000fd5b505050506040513d6020811015610ae757600080fd5b50505050565b600054600160b01b900461ffff1681565b610b06610f09565b610b45576040805162461bcd60e51b81526020600482018190526024820152600080516020612647833981519152604482015290519081900360640190fd5b600080546040516101009091046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36000805474ffffffffffffffffffffffffffffffffffffffff0019169055565b6000805460ff16610bf9576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6000805460ff191690819055600160a81b900460ff1615610c56576040805162461bcd60e51b815260206004820152601260248201527115195b5c1bdc985c9a5b1e4814185d5cd95960721b604482015290519081900360640190fd5b60008083118015610c68575061271083105b610c7457600254610c76565b825b90506001600160a01b038716610ce55760003411610cce576040805162461bcd60e51b815260206004820152601060248201526f1154948e88139bc8115512081cd95b9d60821b604482015290519081900360640190fd5b610cdc88888834888661149e565b9150610e689050565b60008511610d2d576040805162461bcd60e51b815260206004820152601060248201526f1154948e88139bc8115490c81cd95b9d60821b604482015290519081900360640190fd5b3415610d80576040805162461bcd60e51b815260206004820152601960248201527f4552523a204554482073656e74207769746820746f6b656e7300000000000000604482015290519081900360640190fd5b604080516323b872dd60e01b81526001600160a01b038a81166004830152306024830152604482018890529151918916916323b872dd916064808201926020929091908290030181600087803b158015610dd957600080fd5b505af1158015610ded573d6000803e3d6000fd5b505050506040513d6020811015610e0357600080fd5b5051610e56576040805162461bcd60e51b815260206004820152601c60248201527f4572726f7220696e207472616e7366657272696e67204552433a203200000000604482015290519081900360640190fd5b610e6488888888888661149e565b9150505b6000805460ff191660011790559695505050505050565b610e87610f09565b610ec6576040805162461bcd60e51b81526020600482018190526024820152600080516020612647833981519152604482015290519081900360640190fd5b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b60005461010090046001600160a01b031690565b6000805461010090046001600160a01b0316610f23611690565b6001600160a01b031614905090565b610f3a610f09565b610f79576040805162461bcd60e51b81526020600482018190526024820152600080516020612647833981519152604482015290519081900360640190fd5b6127108161ffff1610610fd3576040805162461bcd60e51b815260206004820152601a60248201527f476f6f6457696c6c2056616c7565206e6f7420616c6c6f776564000000000000604482015290519081900360640190fd5b6000805461ffff909216600160b01b0261ffff60b01b19909216919091179055565b6001546001600160a01b031681565b61100c610f09565b61104b576040805162461bcd60e51b81526020600482018190526024820152600080516020612647833981519152604482015290519081900360640190fd5b61105481611694565b50565b90565b60006060846001600160a01b031663be3bbd2e6040518163ffffffff1660e01b815260040160006040518083038186803b15801561109757600080fd5b505afa1580156110ab573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156110d457600080fd5b81019080805160405193929190846401000000008211156110f457600080fd5b90830190602082018581111561110957600080fd5b825186602082028301116401000000008211171561112657600080fd5b82525081516020918201928201910280838360005b8381101561115357818101518382015260200161113b565b50505050919091016040525092935086925050506001600160a01b03841615611306576000866001600160a01b0316632f37b624866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156111ce57600080fd5b505afa1580156111e2573d6000803e3d6000fd5b505050506040513d60208110156111f857600080fd5b50519050801561120d57849350505050611497565b600354604080516303795fb160e11b81526001600160a01b038881166004830152915160009392909216916306f2bf6291602480820192602092909190829003018186803b15801561125e57600080fd5b505afa158015611272573d6000803e3d6000fd5b505050506040513d602081101561128857600080fd5b5051604080516395b68fe760e01b8152600481018a905290519192506001600160a01b038316916395b68fe791602480820192602092909190829003018186803b1580156112d557600080fd5b505afa1580156112e9573d6000803e3d6000fd5b505050506040513d60208110156112ff57600080fd5b5051925050505b6000805b83518110156114925760035484516000916001600160a01b0316906306f2bf629087908590811061133757fe5b60200260200101516040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561138557600080fd5b505afa158015611399573d6000803e3d6000fd5b505050506040513d60208110156113af57600080fd5b505190506001600160a01b0381166113c7575061148a565b6000816001600160a01b031663cd7724c3866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561140d57600080fd5b505afa158015611421573d6000803e3d6000fd5b505050506040513d602081101561143757600080fd5b50518651909150600090611462908c9084908a908890811061145557fe5b602002602001015161174c565b9050808510156114865780945086848151811061147b57fe5b602002602001015197505b5050505b60010161130a565b505050505b9392505050565b600080856001600160a01b0316632f37b624886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156114f757600080fd5b505afa15801561150b573d6000803e3d6000fd5b505050506040513d602081101561152157600080fd5b505190506000811561153f57611538878988611a37565b905061157e565b60006001600160a01b038916611560576115598686611cf6565b905061156f565b61156c89878988611f2a565b90505b61157a888783611a37565b9150505b600061158a88836122cc565b90507f7c58760c09b45377b9759b1584bfa97aaad8a040feb4ec965b2b76e20b4af07f8a896115b985856123cc565b604080516001600160a01b0394851681529290931660208301528183015290519081900360600190a1876001600160a01b031663a9059cbb8b6115fc85856123cc565b6040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561164b57600080fd5b505af115801561165f573d6000803e3d6000fd5b505050506040513d602081101561167557600080fd5b50611682905082826123cc565b9a9950505050505050505050565b3390565b6001600160a01b0381166116d95760405162461bcd60e51b81526004018080602001828103825260268152602001806126006026913960400191505060405180910390fd5b600080546040516001600160a01b038085169361010090930416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b600080846001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561178857600080fd5b505afa15801561179c573d6000803e3d6000fd5b505050506040513d60208110156117b257600080fd5b505160408051631a995bed60e31b815290519192506000916001600160a01b0388169163d4cadf68916004808301926020929190829003018186803b1580156117fa57600080fd5b505afa15801561180e573d6000803e3d6000fd5b505050506040513d602081101561182457600080fd5b50516040805163936c347760e01b815290519192506000916001600160a01b0389169163936c3477916004808301926020929190829003018186803b15801561186c57600080fd5b505afa158015611880573d6000803e3d6000fd5b505050506040513d602081101561189657600080fd5b50516040805163f8b2cb4f60e01b81526001600160a01b0388811660048301529151929350600092918a169163f8b2cb4f91602480820192602092909190829003018186803b1580156118e857600080fd5b505afa1580156118fc573d6000803e3d6000fd5b505050506040513d602081101561191257600080fd5b505160408051634a46c67360e11b81526001600160a01b0389811660048301529151929350600092918b169163948d8ce691602480820192602092909190829003018186803b15801561196457600080fd5b505afa158015611978573d6000803e3d6000fd5b505050506040513d602081101561198e57600080fd5b505160408051638656b65360e01b815260048101859052602481018390526044810188905260648101869052608481018b905260a4810187905290519192506001600160a01b038b1691638656b6539160c480820192602092909190829003018186803b1580156119fe57600080fd5b505afa158015611a12573d6000803e3d6000fd5b505050506040513d6020811015611a2857600080fd5b50519998505050505050505050565b6000836001600160a01b0316632f37b624846040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611a8f57600080fd5b505afa158015611aa3573d6000803e3d6000fd5b505050506040513d6020811015611ab957600080fd5b5051611b0c576040805162461bcd60e51b815260206004820152600f60248201527f546f6b656e206e6f7420626f756e640000000000000000000000000000000000604482015290519081900360640190fd5b60408051636eb1769f60e11b81523060048201526001600160a01b038681166024830152915160009286169163dd62ed3e916044808301926020929190829003018186803b158015611b5d57600080fd5b505afa158015611b71573d6000803e3d6000fd5b505050506040513d6020811015611b8757600080fd5b5051905082811015611c14576040805163095ea7b360e01b81526001600160a01b038781166004830152600019602483015291519186169163095ea7b3916044808201926020929091908290030181600087803b158015611be757600080fd5b505af1158015611bfb573d6000803e3d6000fd5b505050506040513d6020811015611c1157600080fd5b50505b60408051635db3427760e01b81526001600160a01b0386811660048301526024820186905260016044830152915191871691635db34277916064808201926020929091908290030181600087803b158015611c6e57600080fd5b505af1158015611c82573d6000803e3d6000fd5b505050506040513d6020811015611c9857600080fd5b5051915081611cee576040805162461bcd60e51b815260206004820152601f60248201527f4572726f7220696e20656e746572696e672062616c616e63657220706f6f6c00604482015290519081900360640190fd5b509392505050565b6005546000906001600160a01b0384811691161415611d8057600560009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d5f57600080fd5b505af1158015611d73573d6000803e3d6000fd5b5050505050349050611f24565b600354604080516303795fb160e11b81526001600160a01b038681166004830152915160009392909216916306f2bf6291602480820192602092909190829003018186803b158015611dd157600080fd5b505afa158015611de5573d6000803e3d6000fd5b505050506040513d6020811015611dfb57600080fd5b50516040805163cd7724c360e01b815234600482015290519192506000916001600160a01b0384169163cd7724c3916024808301926020929190829003018186803b158015611e4957600080fd5b505afa158015611e5d573d6000803e3d6000fd5b505050506040513d6020811015611e7357600080fd5b50519050611e97611e8f82611e8a612710886123cc565b61240e565b612710612467565b9050816001600160a01b031663f39b5b9b3483611eb64261012c6124a9565b6040518463ffffffff1660e01b815260040180838152602001828152602001925050506020604051808303818588803b158015611ef257600080fd5b505af1158015611f06573d6000803e3d6000fd5b50505050506040513d6020811015611f1d57600080fd5b5051925050505b92915050565b600354604080516303795fb160e11b81526001600160a01b0387811660048301529151600093849316916306f2bf62916024808301926020929190829003018186803b158015611f7957600080fd5b505afa158015611f8d573d6000803e3d6000fd5b505050506040513d6020811015611fa357600080fd5b5051600354604080516303795fb160e11b81526001600160a01b038981166004830152915193945060009391909216916306f2bf62916024808301926020929190829003018186803b158015611ff857600080fd5b505afa15801561200c573d6000803e3d6000fd5b505050506040513d602081101561202257600080fd5b50516040805163095ea7b360e01b81526001600160a01b0385811660048301526024820189905291519293509089169163095ea7b3916044808201926020929091908290030181600087803b15801561207a57600080fd5b505af115801561208e573d6000803e3d6000fd5b505050506040513d60208110156120a457600080fd5b5050604080516395b68fe760e01b81526004810187905290516000916001600160a01b038516916395b68fe791602480820192602092909190829003018186803b1580156120f157600080fd5b505afa158015612105573d6000803e3d6000fd5b505050506040513d602081101561211b57600080fd5b50519050612132611e8f82611e8a612710896123cc565b90506000826001600160a01b031663cd7724c3836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561217a57600080fd5b505afa15801561218e573d6000803e3d6000fd5b505050506040513d60208110156121a457600080fd5b505190506121bb611e8f82611e8a6127108a6123cc565b9050836001600160a01b031663ddf7e1a78883856121db426107086124a9565b8d6040518663ffffffff1660e01b815260040180868152602001858152602001848152602001838152602001826001600160a01b03166001600160a01b0316815260200195505050505050602060405180830381600087803b15801561224057600080fd5b505af1158015612254573d6000803e3d6000fd5b505050506040513d602081101561226a57600080fd5b50519450846122c0576040805162461bcd60e51b815260206004820152601860248201527f4572726f7220696e207377617070696e67204552433a20310000000000000000604482015290519081900360640190fd5b50505050949350505050565b600080546122ea90611e8f908490600160b01b900461ffff1661240e565b9050806122f957506000611f24565b6001546040805163a9059cbb60e01b81526001600160a01b0392831660048201526024810184905290519185169163a9059cbb916044808201926020929091908290030181600087803b15801561234f57600080fd5b505af1158015612363573d6000803e3d6000fd5b505050506040513d602081101561237957600080fd5b5051611f24576040805162461bcd60e51b815260206004820152601b60248201527f4572726f7220696e207472616e7366657272696e67204250543a310000000000604482015290519081900360640190fd5b600061149783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612503565b60008261241d57506000611f24565b8282028284828161242a57fe5b04146114975760405162461bcd60e51b81526004018080602001828103825260218152602001806126266021913960400191505060405180910390fd5b600061149783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061259a565b600082820183811015611497576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600081848411156125925760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561255757818101518382015260200161253f565b50505050905090810190601f1680156125845780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836125e95760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561255757818101518382015260200161253f565b5060008385816125f557fe5b049594505050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a265627a7a723158200424d2843a78a795f0ed3632b4061e624ed4c743a0d4eb651330bfd247e5d89f64736f6c634300050c0032

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

0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f79cabc4caca5eca8ee6a36651a0ad5a2190f04e00000000000000000000000000000000000000000000000000000000000000c8

-----Decoded View---------------
Arg [0] : _goodwill (uint16): 0
Arg [1] : _dzgoodwillAddress (address): 0xf79Cabc4cacA5ECa8eE6A36651A0Ad5A2190F04E
Arg [2] : _slippage (uint256): 200

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [1] : 000000000000000000000000f79cabc4caca5eca8ee6a36651a0ad5a2190f04e
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000c8


Deployed Bytecode Sourcemap

21232:18952:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39628:86;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39628:86:0;;;:::i;38732:239::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38732:239:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38732:239:0;;:::i;40018:125::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40018:125:0;;;:::i;39784:195::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39784:195:0;;;:::i;22895:1931::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;22895:1931:0;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;21509:174;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21509:174:0;;;:::i;:::-;;;;-1:-1:-1;;;;;21509:174:0;;;;;;;;;;;;;;21470:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21470:30:0;;;:::i;39401:187::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39401:187:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39401:187:0;-1:-1:-1;;;;;39401:187:0;;:::i;21402:22::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21402:22:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8924:140;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8924:140:0;;;:::i;25419:1516::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;25419:1516:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;39225:168::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39225:168:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39225:168:0;-1:-1:-1;;;;;39225:168:0;;:::i;8113:79::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8113:79:0;;;:::i;8479:94::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8479:94:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;38979:238;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38979:238:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38979:238:0;;;;:::i;21431:32::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21431:32:0;;;:::i;9219:109::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9219:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9219:109:0;-1:-1:-1;;;;;9219:109:0;;:::i;39628:86::-;8325:9;:7;:9::i;:::-;8317:54;;;;;-1:-1:-1;;;8317:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8317:54:0;;;;;;;;;;;;;;;39699:7;;;-1:-1:-1;;;;39688:18:0;;-1:-1:-1;;;39699:7:0;;;;;;39698:8;39688:18;;;;;;39628:86::o;38732:239::-;8325:9;:7;:9::i;:::-;8317:54;;;;;-1:-1:-1;;;8317:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8317:54:0;;;;;;;;;;;;;;;38843:1;38828:12;:16;:40;;;;;38863:5;38848:12;:20;38828:40;38806:116;;;;;-1:-1:-1;;;38806:116:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;38933:15;:30;38732:239::o;40018:125::-;8325:9;:7;:9::i;:::-;8317:54;;;;;-1:-1:-1;;;8317:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8317:54:0;;;;;;;;;;;;;;;40066:19;40088;:7;:5;:7::i;:::-;-1:-1:-1;;;;;40088:17:0;;:19::i;:::-;40066:41;;40131:3;-1:-1:-1;;;;;40118:17:0;;39784:195;8325:9;:7;:9::i;:::-;8317:54;;;;;-1:-1:-1;;;8317:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8317:54:0;;;;;;;;;;;;;;;39866:4;39858:21;39832:23;39912:19;:7;:5;:7::i;:19::-;39942:29;;39890:41;;-1:-1:-1;;;;;;39942:12:0;;;:29;;;;;39955:15;;39942:29;;;;39955:15;39942:12;:29;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39942:29:0;8382:1;;39784:195::o;22895:1931::-;23112:20;11709:11;;;;11701:55;;;;;-1:-1:-1;;;11701:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11848:5;11834:19;;-1:-1:-1;;11834:19:0;;;;;-1:-1:-1;;;22384:7:0;;11834:19;22384:7;22380:102;;;22408:28;;;-1:-1:-1;;;22408:28:0;;;;;;;;;;;;-1:-1:-1;;;22408:28:0;;;;;;;;;;;;;;22380:102;23167:15;;;:47;;;-1:-1:-1;;;23167:47:0;;-1:-1:-1;;;;;23167:47:0;;;;;;;;;;;;:15;;;;;:23;;:47;;;;;;;;;;;;;;;:15;:47;;;5:2:-1;;;;30:1;27;20:12;5:2;23167:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23167:47:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23167:47:0;23145:118;;;;;-1:-1:-1;;;23145:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;23276:20;23310:1;23299:8;:12;:32;;;;;23326:5;23315:8;:16;23299:32;:87;;23371:15;;23299:87;;;23347:8;23299:87;23276:110;-1:-1:-1;;;;;;23403:39:0;;23399:616;;23479:1;23467:9;:13;23459:42;;;;;-1:-1:-1;;;23459:42:0;;;;;;;;;;;;-1:-1:-1;;;23459:42:0;;;;;;;;;;;;;;;23518:31;23552:140;23583:22;23624:9;23652:25;23552:12;:140::i;:::-;23518:174;;23724:243;23756:10;23785:25;23829:22;23870:9;23898:23;23940:12;23724:13;:243::i;:::-;23709:258;-1:-1:-1;23984:19:0;;-1:-1:-1;;23984:19:0;23399:616;24045:1;24035:7;:11;24027:40;;;;;-1:-1:-1;;;24027:40:0;;;;;;;;;;;;-1:-1:-1;;;24027:40:0;;;;;;;;;;;;;;;24086:9;:14;24078:52;;;;;-1:-1:-1;;;24078:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;24204:148;;;-1:-1:-1;;;24204:148:0;;24269:10;24204:148;;;;24306:4;24204:148;;;;;;;;;;;;-1:-1:-1;;;;;24204:46:0;;;;;:148;;;;;;;;;;;;;;-1:-1:-1;24204:46:0;:148;;;5:2:-1;;;;30:1;27;20:12;5:2;24204:148:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24204:148:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24204:148:0;24182:226;;;;;-1:-1:-1;;;24182:226:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;24421:31;24455:122;24482:22;24519:7;24541:25;24455:12;:122::i;:::-;24421:156;;24605:213;24633:10;24658:25;24698:22;24735:7;24757:23;24795:12;24605:13;:213::i;:::-;24590:228;;22469:1;;;12014:11;:18;;-1:-1:-1;;12014:18:0;12028:4;12014:18;;;22895:1931;;-1:-1:-1;;;;22895:1931:0:o;21509:174::-;;;-1:-1:-1;;;;;21509:174:0;;:::o;21470:30::-;;;;:::o;39401:187::-;8325:9;:7;:9::i;:::-;8317:54;;;;;-1:-1:-1;;;8317:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8317:54:0;;;;;;;;;;;;;;;39495:38;;;-1:-1:-1;;;39495:38:0;;39527:4;39495:38;;;;;;39481:11;;-1:-1:-1;;;;;39495:23:0;;;;;:38;;;;;;;;;;;;;;;:23;:38;;;5:2:-1;;;;30:1;27;20:12;5:2;39495:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39495:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39495:38:0;;-1:-1:-1;;;;;;39544:22:0;;;39567:7;:5;:7::i;:::-;39576:3;39544:36;;;;;;;;;;;;;-1:-1:-1;;;;;39544:36:0;-1:-1:-1;;;;;39544:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39544:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39544:36:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;39401:187:0:o;21402:22::-;;;-1:-1:-1;;;21402:22:0;;;;;:::o;8924:140::-;8325:9;:7;:9::i;:::-;8317:54;;;;;-1:-1:-1;;;8317:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8317:54:0;;;;;;;;;;;;;;;9023:1;9007:6;;8986:40;;9007:6;;;;-1:-1:-1;;;;;9007:6:0;;8986:40;;9023:1;;8986:40;9054:1;9037:19;;-1:-1:-1;;9037:19:0;;;8924:140::o;25419:1516::-;25710:20;11709:11;;;;11701:55;;;;;-1:-1:-1;;;11701:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11848:5;11834:19;;-1:-1:-1;;11834:19:0;;;;;-1:-1:-1;;;22384:7:0;;11834:19;22384:7;22380:102;;;22408:28;;;-1:-1:-1;;;22408:28:0;;;;;;;;;;;;-1:-1:-1;;;22408:28:0;;;;;;;;;;;;;;22380:102;25743:20;25777:1;25766:8;:12;:32;;;;;25793:5;25782:8;:16;25766:32;:87;;25838:15;;25766:87;;;25814:8;25766:87;25743:110;-1:-1:-1;;;;;;25870:39:0;;25866:424;;25946:1;25934:9;:13;25926:42;;;;;-1:-1:-1;;;25926:42:0;;;;;;;;;;;;-1:-1:-1;;;25926:42:0;;;;;;;;;;;;;;;26000:242;26032:14;26065:25;26109:22;26150:9;26178:18;26215:12;26000:13;:242::i;:::-;25985:257;-1:-1:-1;26259:19:0;;-1:-1:-1;26259:19:0;25866:424;26320:1;26310:7;:11;26302:40;;;;;-1:-1:-1;;;26302:40:0;;;;;;;;;;;;-1:-1:-1;;;26302:40:0;;;;;;;;;;;;;;;26361:9;:14;26353:52;;;;;-1:-1:-1;;;26353:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;26479:152;;;-1:-1:-1;;;26479:152:0;;-1:-1:-1;;;;;26479:152:0;;;;;;;26585:4;26479:152;;;;;;;;;;;;:46;;;;;;:152;;;;;;;;;;;;;;;-1:-1:-1;26479:46:0;:152;;;5:2:-1;;;;30:1;27;20:12;5:2;26479:152:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26479:152:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26479:152:0;26457:230;;;;;-1:-1:-1;;;26457:230:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;26715:212;26743:14;26772:25;26812:22;26849:7;26871:18;26904:12;26715:13;:212::i;:::-;26700:227;;22469:1;;12014:11;:18;;-1:-1:-1;;12014:18:0;12028:4;12014:18;;;25419:1516;;-1:-1:-1;;;;;;25419:1516:0:o;39225:168::-;8325:9;:7;:9::i;:::-;8317:54;;;;;-1:-1:-1;;;8317:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8317:54:0;;;;;;;;;;;;;;;39343:17;:42;;-1:-1:-1;;39343:42:0;-1:-1:-1;;;;;39343:42:0;;;;;;;;;;39225:168::o;8113:79::-;8151:7;8178:6;;;;-1:-1:-1;;;;;8178:6:0;;8113:79::o;8479:94::-;8519:4;8559:6;;;;;-1:-1:-1;;;;;8559:6:0;8543:12;:10;:12::i;:::-;-1:-1:-1;;;;;8543:22:0;;8536:29;;8479:94;:::o;38979:238::-;8325:9;:7;:9::i;:::-;8317:54;;;;;-1:-1:-1;;;8317:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8317:54:0;;;;;;;;;;;;;;;39115:5;39099:13;:21;;;39055:119;;;;;-1:-1:-1;;;39055:119:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;39185:8;:24;;;;;;-1:-1:-1;;;39185:24:0;-1:-1:-1;;;;39185:24:0;;;;;;;;;38979:238::o;21431:32::-;;;-1:-1:-1;;;;;21431:32:0;;:::o;9219:109::-;8325:9;:7;:9::i;:::-;8317:54;;;;;-1:-1:-1;;;8317:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8317:54:0;;;;;;;;;;;;;;;9292:28;9311:8;9292:18;:28::i;:::-;9219:109;:::o;1599:127::-;1709:7;1599:127::o;31959:2226::-;32122:14;32175:23;32248:22;-1:-1:-1;;;;;32201:95:0;;:97;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32201:97:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32201:97:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;32201:97:0;80:15:-1;;;-1:-1;;76:31;65:43;;120:4;113:20;13:2;5:11;;2:2;;;29:1;26;19:12;2:2;32201:97:0;;;;;;;;;;;;;19:11:-1;14:3;11:20;8:2;;;44:1;41;34:12;8:2;62:21;;;;123:4;114:14;;138:31;;;135:2;;;182:1;179;172:12;135:2;219:3;213:10;331:9;325:2;311:12;307:21;289:16;285:44;282:59;261:11;247:12;244:29;233:116;230:2;;;362:1;359;352:12;230:2;373:25;;-1:-1;32201:97:0;;421:4:-1;412:14;;;;32201:97:0;;;;;412:14:-1;32201:97:0;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;-1:-1;;;;32201:97:0;;;;;;-1:-1:-1;32175:123:0;;-1:-1:-1;32328:7:0;;-1:-1:-1;;;;;;;;32352:39:0;;;32348:784;;32443:12;32509:22;-1:-1:-1;;;;;32458:96:0;;32555:25;32458:123;;;;;;;;;;;;;-1:-1:-1;;;;;32458:123:0;-1:-1:-1;;;;;32458:123:0;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32458:123:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32458:123:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32458:123:0;;-1:-1:-1;32598:45:0;;;;32618:25;32611:32;;;;;;;32598:45;32845:21;;:60;;;-1:-1:-1;;;32845:60:0;;-1:-1:-1;;;;;32845:60:0;;;;;;;;;32707:69;;32845:21;;;;;:33;;:60;;;;;;;;;;;;;;;:21;:60;;;5:2:-1;;;;30:1;27;20:12;5:2;32845:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32845:60:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32845:60:0;32985:135;;;-1:-1:-1;;;32985:135:0;;;;;;;;;;32845:60;;-1:-1:-1;;;;;;32985:126:0;;;;;:135;;;;;32845:60;;32985:135;;;;;;;;:126;:135;;;5:2:-1;;;;30:1;27;20:12;5:2;32985:135:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32985:135:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32985:135:0;;-1:-1:-1;;;32348:784:0;33144:14;;33171:1007;33203:6;:13;33195:5;:21;33171:1007;;;33382:21;;33416:13;;33244:69;;-1:-1:-1;;;;;33382:21:0;;:33;;33416:6;;33423:5;;33416:13;;;;;;;;;;;;33382:48;;;;;;;;;;;;;-1:-1:-1;;;;;33382:48:0;-1:-1:-1;;;;;33382:48:0;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33382:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33382:48:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33382:48:0;;-1:-1:-1;;;;;;33466:57:0;;33462:106;;33544:8;;;33462:106;33617:22;33695:34;-1:-1:-1;;;;;33642:126:0;;33769:6;33642:134;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33642:134:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33642:134:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;33642:134:0;33960:13;;33642:134;;-1:-1:-1;33833:19:0;;33855:133;;33886:22;;33642:134;;33960:6;;33967:5;;33960:13;;;;;;;;;;;;33855:12;:133::i;:::-;33833:155;;34058:11;34049:6;:20;34045:122;;;34099:11;34090:20;;34138:6;34145:5;34138:13;;;;;;;;;;;;;;34129:22;;34045:122;33171:1007;;;;33218:7;;33171:1007;;;;31959:2226;;;;;;;;;:::o;27496:1931::-;27752:20;27816:12;27864:22;-1:-1:-1;;;;;27831:78:0;;27910:25;27831:105;;;;;;;;;;;;;-1:-1:-1;;;;;27831:105:0;-1:-1:-1;;;;;27831:105:0;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27831:105:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27831:105:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27831:105:0;;-1:-1:-1;27949:22:0;27984:864;;;;28029:141;28063:22;28104:25;28148:7;28029:15;:141::i;:::-;28012:158;;27984:864;;;28238:19;-1:-1:-1;;;;;28276:39:0;;28272:370;;28350:40;28361:18;28381:8;28350:10;:40::i;:::-;28336:54;;28272:370;;;28445:181;28480:25;28528:18;28569:7;28599:8;28445:12;:181::i;:::-;28431:195;;28272:370;28698:138;28732:22;28773:18;28810:11;28698:15;:138::i;:::-;28681:155;;27984:864;;28889:23;28915:94;28947:22;28984:14;28915:17;:94::i;:::-;28889:120;;29027:142;29047:14;29076:22;29113:45;29126:14;29142:15;29113:12;:45::i;:::-;29027:142;;;-1:-1:-1;;;;;29027:142:0;;;;;;;;;;;;;;;;;;;;;;;;;;;29224:22;-1:-1:-1;;;;;29217:39:0;;29271:14;29300:45;29313:14;29329:15;29300:12;:45::i;:::-;29217:139;;;;;;;;;;;;;-1:-1:-1;;;;;29217:139:0;-1:-1:-1;;;;;29217:139:0;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29217:139:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29217:139:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29374:45:0;;-1:-1:-1;29387:14:0;29403:15;29374:12;:45::i;:::-;29367:52;27496:1931;-1:-1:-1;;;;;;;;;;27496:1931:0:o;6819:98::-;6899:10;6819:98;:::o;9434:229::-;-1:-1:-1;;;;;9508:22:0;;9500:73;;;;-1:-1:-1;;;9500:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9610:6;;;9589:38;;-1:-1:-1;;;;;9589:38:0;;;;9610:6;;;;;;9589:38;;;9638:6;:17;;-1:-1:-1;;;;;9638:17:0;;;;;-1:-1:-1;;9638:17:0;;;;;;;;;9434:229::o;34497:1140::-;34650:22;34685:19;34754:22;-1:-1:-1;;;;;34707:92:0;;:94;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34707:94:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34707:94:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34707:94:0;34830:93;;;-1:-1:-1;;;34830:93:0;;;;34707:94;;-1:-1:-1;34812:15:0;;-1:-1:-1;;;;;34830:91:0;;;;;:93;;;;;34707:94;;34830:93;;;;;;;:91;:93;;;5:2:-1;;;;30:1;27;20:12;5:2;34830:93:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34830:93:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34830:93:0;34956:109;;;-1:-1:-1;;;34956:109:0;;;;34830:93;;-1:-1:-1;34934:19:0;;-1:-1:-1;;;;;34956:107:0;;;;;:109;;;;;34830:93;;34956:109;;;;;;;:107;:109;;;5:2:-1;;;;30:1;27;20:12;5:2;34956:109:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34956:109:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;34956:109:0;35094:103;;;-1:-1:-1;;;35094:103:0;;-1:-1:-1;;;;;35094:103:0;;;;;;;;;34956:109;;-1:-1:-1;35076:15:0;;35094:91;;;;;;:103;;;;;34956:109;;35094:103;;;;;;;;:91;:103;;;5:2:-1;;;;30:1;27;20:12;5:2;35094:103:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35094:103:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35094:103:0;35225:114;;;-1:-1:-1;;;35225:114:0;;-1:-1:-1;;;;;35225:114:0;;;;;;;;;35094:103;;-1:-1:-1;35208:14:0;;35225:102;;;;;;:114;;;;;35094:103;;35225:114;;;;;;;;:102;:114;;;5:2:-1;;;;30:1;27;20:12;5:2;35225:114:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35225:114:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35225:114:0;35369:260;;;-1:-1:-1;;;35369:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35225:114;;-1:-1:-1;;;;;;35369:105:0;;;;;:260;;;;;35225:114;;35369:260;;;;;;;;:105;:260;;;5:2:-1;;;;30:1;27;20:12;5:2;35369:260:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35369:260:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35369:260:0;;34497:1140;-1:-1:-1;;;;;;;;;34497:1140:0:o;30612:984::-;30778:21;30867:22;-1:-1:-1;;;;;30834:64:0;;30917:25;30834:123;;;;;;;;;;;;;-1:-1:-1;;;;;30834:123:0;-1:-1:-1;;;;;30834:123:0;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30834:123:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30834:123:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30834:123:0;30812:188;;;;;-1:-1:-1;;;30812:188:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;31033:119;;;-1:-1:-1;;;31033:119:0;;31099:4;31033:119;;;;-1:-1:-1;;;;;31033:119:0;;;;;;;;;31013:17;;31033:43;;;;;:119;;;;;;;;;;;;;;:43;:119;;;5:2:-1;;;;30:1;27;20:12;5:2;31033:119:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31033:119:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31033:119:0;;-1:-1:-1;31169:24:0;;;31165:184;;;31210:127;;;-1:-1:-1;;;31210:127:0;;-1:-1:-1;;;;;31210:127:0;;;;;;;-1:-1:-1;;31210:127:0;;;;;;:41;;;;;;:127;;;;;;;;;;;;;;;-1:-1:-1;31210:41:0;:127;;;5:2:-1;;;;30:1;27;20:12;5:2;31210:127:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31210:127:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;31165:184:0;31377:137;;;-1:-1:-1;;;31377:137:0;;-1:-1:-1;;;;;31377:137:0;;;;;;;;;;;;;31512:1;31377:137;;;;;;:93;;;;;;:137;;;;;;;;;;;;;;;-1:-1:-1;31377:93:0;:137;;;5:2:-1;;;;30:1;27;20:12;5:2;31377:137:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31377:137:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31377:137:0;;-1:-1:-1;31535:17:0;31527:61;;;;;-1:-1:-1;;;31527:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;30612:984;;;;;;:::o;35832:945::-;36002:16;;35937:19;;-1:-1:-1;;;;;35977:41:0;;;36002:16;;35977:41;35974:154;;;36041:16;;;;;;;;;-1:-1:-1;;;;;36041:16:0;-1:-1:-1;;;;;36035:31:0;;36073:9;36035:50;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36035:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36035:50:0;;;;;36107:9;36100:16;;;;35974:154;36270:21;;:56;;;-1:-1:-1;;;36270:56:0;;-1:-1:-1;;;;;36270:56:0;;;;;;;;;36140:69;;36270:21;;;;;:33;;:56;;;;;;;;;;;;;;;:21;:56;;;5:2:-1;;;;30:1;27;20:12;5:2;36270:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36270:56:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36270:56:0;36375:83;;;-1:-1:-1;;;36375:83:0;;36448:9;36375:83;;;;;;36270:56;;-1:-1:-1;36350:22:0;;-1:-1:-1;;;;;36375:72:0;;;;;:83;;;;;36270:56;;36375:83;;;;;;;:72;:83;;;5:2:-1;;;;30:1;27;20:12;5:2;36375:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36375:83:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36375:83:0;;-1:-1:-1;36486:117:0;36513:59;36375:83;36542:29;36555:5;36562:8;36542:12;:29::i;:::-;36513:12;:59::i;:::-;36587:5;36486:12;:117::i;:::-;36469:134;;36630:34;-1:-1:-1;;;;;36630:68:0;;36719:9;36730:14;36746:22;36759:3;36764;36746:12;:22::i;:::-;36630:139;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36630:139:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36630:139:0;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36630:139:0;;-1:-1:-1;;;35832:945:0;;;;;:::o;37084:1640::-;37439:21;;:60;;;-1:-1:-1;;;37439:60:0;;-1:-1:-1;;;;;37439:60:0;;;;;;;;;37275:19;;;;37439:21;;:33;;:60;;;;;;;;;;;;;;:21;:60;;;5:2:-1;;;;30:1;27;20:12;5:2;37439:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37439:60:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37439:60:0;37651:21;;:58;;;-1:-1:-1;;;37651:58:0;;-1:-1:-1;;;;;37651:58:0;;;;;;;;;37439:60;;-1:-1:-1;37523:67:0;;37651:21;;;;;:33;;:58;;;;;37439:60;;37651:58;;;;;;;:21;:58;;;5:2:-1;;;;30:1;27;20:12;5:2;37651:58:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37651:58:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37651:58:0;37733:137;;;-1:-1:-1;;;37733:137:0;;-1:-1:-1;;;;;37733:137:0;;;;;;;;;;;;;;;37651:58;;-1:-1:-1;37733:41:0;;;;;;:137;;;;;37651:58;;37733:137;;;;;;;;-1:-1:-1;37733:41:0;:137;;;5:2:-1;;;;30:1;27;20:12;5:2;37733:137:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37733:137:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;37906:86:0;;;-1:-1:-1;;;37906:86:0;;;;;;;;;;37883:20;;-1:-1:-1;;;;;37906:72:0;;;;;:86;;;;;37733:137;;37906:86;;;;;;;;:72;:86;;;5:2:-1;;;;30:1;27;20:12;5:2;37906:86:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37906:86:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37906:86:0;;-1:-1:-1;38018:115:0;38045:57;37906:86;38072:29;38085:5;38092:8;38072:12;:29::i;38018:115::-;38003:130;;38146:22;38171:32;-1:-1:-1;;;;;38171:70:0;;38242:12;38171:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38171:84:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38171:84:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38171:84:0;;-1:-1:-1;38283:117:0;38310:59;38171:84;38339:29;38352:5;38359:8;38339:12;:29::i;38283:117::-;38266:134;;38427:34;-1:-1:-1;;;;;38427:56:0;;38498:12;38525:14;38554:12;38581:23;38594:3;38599:4;38581:12;:23::i;:::-;38619;38427:226;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38427:226:0;-1:-1:-1;;;;;38427:226:0;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38427:226:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38427:226:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38427:226:0;;-1:-1:-1;38672:15:0;38664:52;;;;;-1:-1:-1;;;38664:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;37084:1640;;;;;;;;;;:::o;29708:565::-;29831:23;29939:8;;29885:94;;29912:36;;29925:12;;-1:-1:-1;;;29939:8:0;;;;29912:12;:36::i;29885:94::-;29867:112;-1:-1:-1;29996:20:0;29992:61;;-1:-1:-1;30040:1:0;30033:8;;29992:61;30144:17;;30087:123;;;-1:-1:-1;;;30087:123:0;;-1:-1:-1;;;;;30144:17:0;;;30087:123;;;;;;;;;;;;:38;;;;;;:123;;;;;;;;;;;;;;;30144:17;30087:38;:123;;;5:2:-1;;;;30:1;27;20:12;5:2;30087:123:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30087:123:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30087:123:0;30065:200;;;;;-1:-1:-1;;;30065:200:0;;;;;;;;;;;;;;;;;;;;;;;;;;;13416:136;13474:7;13501:43;13505:1;13508;13501:43;;;;;;;;;;;;;;;;;:3;:43::i;14332:471::-;14390:7;14635:6;14631:47;;-1:-1:-1;14665:1:0;14658:8;;14631:47;14702:5;;;14706:1;14702;:5;:1;14726:5;;;;;:10;14718:56;;;;-1:-1:-1;;;14718:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15271:132;15329:7;15356:39;15360:1;15363;15356:39;;;;;;;;;;;;;;;;;:3;:39::i;12960:181::-;13018:7;13050:5;;;13074:6;;;;13066:46;;;;;-1:-1:-1;;;13066:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;13889:192;13975:7;14011:12;14003:6;;;;13995:29;;;;-1:-1:-1;;;13995:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;13995:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;14047:5:0;;;13889:192::o;15933:345::-;16019:7;16121:12;16114:5;16106:28;;;;-1:-1:-1;;;16106:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;16106:28:0;;16145:9;16161:1;16157;:5;;;;;;;15933:345;-1:-1:-1;;;;;15933:345:0:o

Swarm Source

bzzr://0424d2843a78a795f0ed3632b4061e624ed4c743a0d4eb651330bfd247e5d89f

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

OVERVIEW

Zapper.Fi: Balancer Zap in ETH or ERC20 contract has migrated to 0x03E86D24C462fa6aD88568053361186E4A5aF68e.

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.