Overview
ETH Balance
0.014999999849331719 ETH
Eth Value
$48.87 (@ $3,257.88/ETH)Token Holdings
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 254 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer | 12805537 | 1260 days ago | IN | 0 ETH | 0.00036612 | ||||
Transfer | 12760249 | 1267 days ago | IN | 0 ETH | 0.00029299 | ||||
Transfer | 12760234 | 1267 days ago | IN | 0 ETH | 0.00046124 | ||||
Withdraw | 12760223 | 1267 days ago | IN | 0 ETH | 0.00036867 | ||||
Release Tokens | 12760205 | 1267 days ago | IN | 0 ETH | 0.00074206 | ||||
Withdraw | 12627225 | 1288 days ago | IN | 0 ETH | 0.00088416 | ||||
Withdraw | 12278189 | 1342 days ago | IN | 0 ETH | 0.01003563 | ||||
Release Tokens | 12278178 | 1342 days ago | IN | 0 ETH | 0.01285303 | ||||
Withdraw | 12213633 | 1352 days ago | IN | 0 ETH | 0.00406659 | ||||
Withdraw | 12203650 | 1353 days ago | IN | 0 ETH | 0.00232123 | ||||
Withdraw | 12202545 | 1353 days ago | IN | 0 ETH | 0.00295656 | ||||
Withdraw | 12181259 | 1357 days ago | IN | 0 ETH | 0.00779535 | ||||
Withdraw | 12181222 | 1357 days ago | IN | 0 ETH | 0.0080978 | ||||
Transfer | 12173288 | 1358 days ago | IN | 0 ETH | 0.00545369 | ||||
Withdraw | 12155601 | 1361 days ago | IN | 0 ETH | 0.00408693 | ||||
Withdraw | 12151733 | 1361 days ago | IN | 0 ETH | 0.00425151 | ||||
Withdraw | 12147378 | 1362 days ago | IN | 0 ETH | 0.00542577 | ||||
Withdraw | 12147359 | 1362 days ago | IN | 0 ETH | 0.00476463 | ||||
Release Tokens | 12147352 | 1362 days ago | IN | 0 ETH | 0.00583822 | ||||
Release Tokens | 12147351 | 1362 days ago | IN | 0 ETH | 0.00564142 | ||||
Release Tokens | 12147349 | 1362 days ago | IN | 0 ETH | 0.00874591 | ||||
Withdraw | 12142624 | 1363 days ago | IN | 0 ETH | 0.0090426 | ||||
Withdraw | 12140613 | 1363 days ago | IN | 0 ETH | 0.00547318 | ||||
Withdraw | 12140370 | 1363 days ago | IN | 0 ETH | 0.00295796 | ||||
Withdraw | 12136460 | 1363 days ago | IN | 0 ETH | 0.00471576 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
12760223 | 1267 days ago | 7.5 ETH | ||||
12203650 | 1353 days ago | 0.1 ETH | ||||
12155601 | 1361 days ago | 3.04 ETH | ||||
12151733 | 1361 days ago | 2.06 ETH | ||||
12147359 | 1362 days ago | 0.2 ETH | ||||
12140370 | 1363 days ago | 19.97 ETH | ||||
12136460 | 1363 days ago | 0.48 ETH | ||||
12132625 | 1364 days ago | 77.56 ETH | ||||
12129800 | 1365 days ago | 6.93 ETH | ||||
12129799 | 1365 days ago | 5 ETH | ||||
12129799 | 1365 days ago | 2.35 ETH | ||||
12129684 | 1365 days ago | 10.12 ETH | ||||
12127208 | 1365 days ago | 20.16 ETH | ||||
12126954 | 1365 days ago | 1 ETH | ||||
12126724 | 1365 days ago | 2 ETH | ||||
12124290 | 1365 days ago | 100 ETH | ||||
12123716 | 1365 days ago | 1.09999999 ETH | ||||
12123129 | 1366 days ago | 2 ETH | ||||
12122899 | 1366 days ago | 10 ETH | ||||
12122668 | 1366 days ago | 1.57 ETH | ||||
12122641 | 1366 days ago | 0.03 ETH | ||||
12122638 | 1366 days ago | 0.22 ETH | ||||
12121999 | 1366 days ago | 299.95 ETH | ||||
12116575 | 1367 days ago | 423.34499999 ETH | ||||
12116391 | 1367 days ago | 149.99999999 ETH |
Loading...
Loading
Contract Name:
InDefiEcoPreMining
Compiler Version
v0.5.17+commit.d19bba13
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-12-16 */ // File: @openzeppelin\upgrades\contracts\Initializable.sol pragma solidity >=0.4.24 <0.7.0; /** * @title Initializable * * @dev Helper contract to support initializer functions. To use it, replace * the constructor with a function that has the `initializer` modifier. * WARNING: Unlike constructors, initializer functions must be manually * invoked. This applies both to deploying an Initializable contract, as well * as extending an Initializable contract via inheritance. * WARNING: When used with inheritance, manual care must be taken to not invoke * a parent initializer twice, or ensure that all initializers are idempotent, * because this is not dealt with automatically as with constructors. */ contract Initializable { /** * @dev Indicates that the contract has been initialized. */ bool private initialized; /** * @dev Indicates that the contract is in the process of being initialized. */ bool private initializing; /** * @dev Modifier to use in the initializer function of a contract. */ modifier initializer() { require(initializing || isConstructor() || !initialized, "Contract instance has already been initialized"); bool isTopLevelCall = !initializing; if (isTopLevelCall) { initializing = true; initialized = true; } _; if (isTopLevelCall) { initializing = false; } } /// @dev Returns true if and only if the function is running in the constructor function isConstructor() private view returns (bool) { // extcodesize checks the size of the code stored in an address, and // address returns the current address. Since the code is still not // deployed when running a constructor, any checks on its code size will // yield zero, making it an effective way to detect if a contract is // under construction or not. address self = address(this); uint256 cs; assembly { cs := extcodesize(self) } return cs == 0; } // Reserved storage space to allow for layout changes in the future. uint256[50] private ______gap; } // File: contracts\interfaces\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: contracts\token\ERC20\ERC20Detailed.sol pragma solidity ^0.5.0; /** * @dev Optional functions from the ERC20 standard. */ contract ERC20Detailed is Initializable, IERC20 { string private _name; string private _symbol; uint8 private _decimals; /** * @dev Sets the values for `name`, `symbol`, and `decimals`. All three of * these values are immutable: they can only be set once during * construction. */ function initialize(string memory name, string memory symbol, uint8 decimals) public initializer { _name = name; _symbol = symbol; _decimals = decimals; } /** * @dev Returns the name of the token. */ function name() public view returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view returns (uint8) { return _decimals; } uint256[50] private ______gap; } // File: contracts\nonupgradable\Ownable.sol pragma solidity ^0.5.16; contract Ownable { address payable public owner; address payable internal newOwnerCandidate; constructor() public { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner, "Permission denied"); _; } function changeOwner(address payable newOwner) public onlyOwner { newOwnerCandidate = newOwner; } function acceptOwner() public { require(msg.sender == newOwnerCandidate, "Permission denied"); owner = newOwnerCandidate; } } // File: contracts\interfaces\IToken.sol pragma solidity ^0.5.16; interface IToken { function decimals() external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function balanceOf(address account) external view returns (uint); function approve(address spender, uint value) external; function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function deposit() external payable; function mint(address, uint256) external; function withdraw(uint amount) external; function totalSupply() view external returns (uint256); function burnFrom(address account, uint256 amount) external; function symbol() external view returns (string memory); } // File: contracts\utils\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\token\ERC20\ERC20.sol pragma solidity ^0.5.0; /** * @dev Implementation of the {IERC20} interface. */ contract ERC20 is Initializable, IERC20 { using SafeMath for uint256; mapping (address => uint256) internal _balances; mapping (address => mapping (address => uint256)) internal _allowances; uint256 internal _totalSupply; /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public returns (bool) { _transfer(msg.sender, recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public returns (bool) { _approve(msg.sender, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}; * * Requirements: * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for `sender`'s tokens of at least * `amount`. */ function transferFrom(address sender, address recipient, uint256 amount) public returns (bool) { _transfer(sender, recipient, amount); _approve(sender, msg.sender, _allowances[sender][msg.sender].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public returns (bool) { _approve(msg.sender, spender, _allowances[msg.sender][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) { _approve(msg.sender, spender, _allowances[msg.sender][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements * * - `to` cannot be the zero address. */ function _mint(address account, uint256 amount) internal { require(account != address(0), "ERC20: mint to the zero address"); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal { require(account != address(0), "ERC20: burn from the zero address"); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens. * * This is internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve(address owner, address spender, uint256 amount) internal { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Destroys `amount` tokens from `account`.`amount` is then deducted * from the caller's allowance. * * See {_burn} and {_approve}. */ function _burnFrom(address account, uint256 amount) internal { _burn(account, amount); _approve(account, msg.sender, _allowances[account][msg.sender].sub(amount, "ERC20: burn amount exceeds allowance")); } uint256[50] private ______gap; } // File: contracts\interfaces\IPriceOracle.sol pragma solidity ^0.5.17; interface IPriceOracle { function price(string calldata symbol) external view returns (uint); } // File: contracts\utils\DSMath.sol pragma solidity ^0.5.0; contract DSMath { function add(uint x, uint y) internal pure returns (uint z) { require((z = x + y) >= x); } function sub(uint x, uint y) internal pure returns (uint z) { require((z = x - y) <= x); } function mul(uint x, uint y) internal pure returns (uint z) { require(y == 0 || (z = x * y) / y == x); } // function min(uint x, uint y) internal pure returns (uint z) { // return x <= y ? x : y; // } // function max(uint x, uint y) internal pure returns (uint z) { // return x >= y ? x : y; // } // function imin(int x, int y) internal pure returns (int z) { // return x <= y ? x : y; // } // function imax(int x, int y) internal pure returns (int z) { // return x >= y ? x : y; // } uint constant WAD = 10 ** 18; // uint constant RAY = 10 ** 27; function wmul(uint x, uint y, uint base) internal pure returns (uint z) { z = add(mul(x, y), base / 2) / base; } function wmul(uint x, uint y) internal pure returns (uint z) { z = add(mul(x, y), WAD / 2) / WAD; } // function rmul(uint x, uint y) internal pure returns (uint z) { // z = add(mul(x, y), RAY / 2) / RAY; // } function wdiv(uint x, uint y) internal pure returns (uint z) { z = add(mul(x, WAD), y / 2) / y; } // function rdiv(uint x, uint y) internal pure returns (uint z) { // z = add(mul(x, RAY), y / 2) / y; // } } // File: 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. * * This test is non-exhaustive, and there may be false-negatives: during the * execution of a contract's constructor, its address will be reported as * not containing 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. */ function isContract(address account) internal view returns (bool) { // This method relies in extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. // 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 != 0x0 && codehash != accountHash); } /** * @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: contracts\utils\SafeERC20.sol pragma solidity ^0.5.16; // import "@openzeppelin/contracts-ethereum-package/contracts/math/SafeMath.sol"; // import "@openzeppelin/contracts-ethereum-package/contracts/utils/Address.sol"; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IToken token, address to, uint256 value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IToken token, address from, address to, uint256 value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } function safeApprove(IToken token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IToken token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IToken token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function callOptionalReturn(IToken token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. // A Solidity high level call has three parts: // 1. The target address is checked to verify it contains contract code // 2. The call itself is made, and success asserted // 3. The return value is decoded, which in turn checks the size of the returned data. // solhint-disable-next-line max-line-length require(address(token).isContract(), "SafeERC20: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = address(token).call(data); require(success, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File: contracts\utils\UniversalERC20.sol pragma solidity ^0.5.16; // import "@openzeppelin/contracts-ethereum-package/contracts/math/SafeMath.sol"; // import "./SafeMath.sol"; library UniversalERC20 { using SafeMath for uint256; using SafeERC20 for IToken; IToken private constant ZERO_ADDRESS = IToken(0x0000000000000000000000000000000000000000); IToken private constant ETH_ADDRESS = IToken(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE); function universalTransfer(IToken token, address to, uint256 amount) internal { universalTransfer(token, to, amount, false); } function universalSymbol(IToken token) internal view returns (string memory) { if (token == ETH_ADDRESS) return "ETH"; return token.symbol(); } function universalDecimals(IToken token) internal view returns (uint) { if (token == ETH_ADDRESS) return 18; return token.decimals(); } function universalTransfer(IToken token, address to, uint256 amount, bool mayFail) internal returns(bool) { if (amount == 0) { return true; } if (token == ZERO_ADDRESS || token == ETH_ADDRESS) { if (mayFail) { return address(uint160(to)).send(amount); } else { address(uint160(to)).transfer(amount); return true; } } else { token.safeTransfer(to, amount); return true; } } function universalApprove(IToken token, address to, uint256 amount) internal { if (token != ZERO_ADDRESS && token != ETH_ADDRESS) { token.safeApprove(to, amount); } } function universalTransferFrom(IToken token, address from, address to, uint256 amount) internal { if (amount == 0) { return; } if (token == ZERO_ADDRESS || token == ETH_ADDRESS) { require(from == msg.sender && msg.value >= amount, "msg.value is zero"); if (to != address(this)) { address(uint160(to)).transfer(amount); } if (msg.value > amount) { msg.sender.transfer(uint256(msg.value).sub(amount)); } } else { token.safeTransferFrom(from, to, amount); } } function universalBalanceOf(IToken token, address who) internal view returns (uint256) { if (token == ZERO_ADDRESS || token == ETH_ADDRESS) { return who.balance; } else { return token.balanceOf(who); } } } // File: contracts\deposits_v3\Indefieco.sol pragma solidity ^0.5.16; interface TokenizedStrategy { function deposit(uint256 amountDAI, uint256 amountUSDC, address flashloanFromAddress) external payable; function burnTokens(uint256 amountDAI, uint256 amountUSDC, uint256 amountETH, address flashLoanFromAddress) external; function userClaimProfit(uint64 max) external; function burnTokens(uint256 amount, bool withFlashloan) external; // function from old TokenizedStrategy, work just for DAI } interface IDfFinanceDeposits { enum FlashloanProvider { DYDX, AAVE, ADDRESS } function deposit( address dfWallet, uint256 amountDAI, uint256 amountUSDC, uint256 amountWBTC, uint256 flashloanDAI, uint256 flashloanUSDC, FlashloanProvider flashloanType, address flashloanFromAddress ) external payable returns (address); } interface IComptroller { function oracle() external view returns (IPriceOracle); function getAccountLiquidity(address) external view returns (uint, uint, uint); } contract InDefiEcoPreMining is Initializable, Ownable, ERC20Detailed, ERC20, DSMath { using UniversalERC20 for IToken; // address public constant ETH_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; // Kovan // address public constant DAI_ADDRESS = 0x4F96Fe3b7A6Cf9725f59d353F723c1bDb64CA6Aa; // Kovan // address public constant USDC_ADDRESS = 0xb7a4F3E9097C08dA09517b5aB877F7a917224ede; // Kovan // address public constant WBTC_ADDRESS = 0xd3A691C852CDB01E281545A27064741F0B7f6825; // Kovan // address public constant COMPTROLLER = 0x5eAe89DC1C671724A672ff0630122ee834098657; // Kovan address public constant ETH_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; address public constant DAI_ADDRESS = 0x6B175474E89094C44Da98b954EedeAC495271d0F; // Mainnet address public constant USDC_ADDRESS = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48; // Mainnet address public constant WBTC_ADDRESS = 0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599; // Mainnet address public constant COMPTROLLER = 0x3d9819210A31b4961b30EF54bE2aeD79B9c9Cd3B; // Mainnet TokenizedStrategy public constant dfTokenizedStrategy = TokenizedStrategy(0xb942ca22e0eb0f2524F53f999aE33fD3B2D58E3E); // Mainnet address public constant dfDeposits = 0xFff9D7b0B6312ead0a1A993BF32f373449006F2F; // Mainnet function initialize() public initializer { owner = 0xdAE0aca4B9B38199408ffaB32562Bf7B3B0495fE; ERC20Detailed.initialize('XInDefiEco', 'XIDF', 18); maxDateDeposits = 1609016400; dateFundsUnlocked = maxDateDeposits + 90 days; maxDelayUntilClaimTokens = 3 days; enableToken(DAI_ADDRESS); enableToken(ETH_ADDRESS); enableToken(WBTC_ADDRESS); enableToken(USDC_ADDRESS); } // TODO: remove in production // function setDebugDates(uint256 _new_maxDateDeposits, uint256 _new_dateFundsUnlocked) public onlyOwner { // maxDateDeposits = _new_maxDateDeposits; // dateFundsUnlocked = _new_dateFundsUnlocked; // } mapping(address => bool) tokens; struct Deposit { uint256 amount; uint256 avgPrice; uint256 tokensToMint; uint128 lastDeposit; } mapping(address => mapping(address => Deposit)) userDeposits; uint256 public maxDateDeposits; uint256 public dateFundsUnlocked; uint256 public maxDelayUntilClaimTokens; address flashloanFromAddress; uint256 public constant totalMaxTokens = 20000000 * 1e18; // 20 mil uint256 public totalCurrentTokens; // emergency tokens withdrawal status mapping(address => bool) public isEmergencyWithdrawalActive; event EmergencyWithdrawalActivated(address indexed token); function getInfo(address userAddress, address tokenAddress) view public returns ( uint256 amount, uint256 avgPrice,uint256 tokensToMint, uint256 price, uint256 balance, uint128 lastDeposit) { IPriceOracle compOracle = IComptroller(COMPTROLLER).oracle(); string memory symbol = IToken(tokenAddress).universalSymbol(); if (tokenAddress == WBTC_ADDRESS) symbol = "BTC"; price = compOracle.price(symbol); balance = IToken(tokenAddress).universalBalanceOf(address(this)); Deposit memory d = userDeposits[userAddress][tokenAddress]; amount = d.amount; avgPrice = d.avgPrice; tokensToMint = d.tokensToMint; lastDeposit = d.lastDeposit; } function enableToken(address tokenAddress) public onlyOwner { tokens[tokenAddress] = true; // can't remove tokens, just add } // Emergency Withdrawal logic function activateEmergencyWithdrawal(address token) public onlyOwner { isEmergencyWithdrawalActive[token] = true; emit EmergencyWithdrawalActivated(token); } function fundsToTokensUsePrice(IToken token, uint256 price, uint256 amount) view public returns (uint256 ret) { // oracle price always in $ (6 decimals) uint256 decimals = token.universalDecimals(); ret = mul(price, amount) / 1e6; if (decimals < 18) ret = mul(ret, 10 ** (18 - decimals)); } function deposit(IToken token, uint256 amount) payable public returns (uint256) { require(now < maxDateDeposits); require(tokens[address(token)]); IPriceOracle compOracle = IComptroller(COMPTROLLER).oracle(); string memory symbol = token.universalSymbol(); if (address(token) == WBTC_ADDRESS) symbol = "BTC"; uint256 _price = compOracle.price(symbol); require(_price > 0); token.universalTransferFrom(msg.sender, address(this), amount); uint256 tokensToMint = fundsToTokensUsePrice(token, _price, amount); totalCurrentTokens = add(totalCurrentTokens, tokensToMint); require(totalCurrentTokens <= totalMaxTokens); Deposit storage depo = userDeposits[msg.sender][address(token)]; uint256 totalAmount = depo.amount; uint256 newAvgPrice = add(totalAmount * depo.avgPrice, _price * amount) / (totalAmount + amount); depo.amount = totalAmount + amount; depo.avgPrice = newAvgPrice; depo.tokensToMint = add(depo.tokensToMint, tokensToMint); depo.lastDeposit = uint128(now); return tokensToMint; } function releaseTokens(address userAddress, address[] memory tokenList) public returns (uint256 tokensToMint) { if (userAddress == address(0)) userAddress = msg.sender; uint256 len = tokenList.length; uint256 _maxDelayUntilClaimTokens = maxDelayUntilClaimTokens; for(uint256 i = 0; i < len;i++) { Deposit storage depo = userDeposits[userAddress][tokenList[i]]; if (now > depo.lastDeposit + _maxDelayUntilClaimTokens) { uint256 _tMint = depo.tokensToMint; if (_tMint > 0) { tokensToMint = add(tokensToMint, _tMint); depo.tokensToMint = 0; } } } if (tokensToMint > 0) { _mint(userAddress, tokensToMint); } } function emergencyWithdraw(address token) public { require(tokens[token] && isEmergencyWithdrawalActive[token]); // token enabled Deposit storage depo = userDeposits[msg.sender][token]; uint256 amount = depo.amount; // update storage user's deposit depo.amount = 0; depo.avgPrice = 0; depo.tokensToMint = 0; depo.lastDeposit = 0; withdrawToken(IToken(token), amount, msg.sender); } function withdraw(address token, uint256 amount) public returns (uint256 tokensToBurn) { require(tokens[token]); // token enabled Deposit storage depo = userDeposits[msg.sender][token]; require(depo.tokensToMint == 0); // до dateFundsUnlocked необходимо вернуть токены для возврата средств if (now < dateFundsUnlocked) { tokensToBurn = fundsToTokensUsePrice(IToken(token), depo.avgPrice, amount); _burn(msg.sender, tokensToBurn); } depo.amount = sub(depo.amount, amount); withdrawToken(IToken(token), amount, msg.sender); return tokensToBurn; } function approveTokens(address[] memory listTokens) public onlyOwner { for(uint256 i = 0; i < listTokens.length; i++) { IToken token = IToken(listTokens[i]); if (token.allowance(address(this), address(dfTokenizedStrategy)) != uint256(-1)) { token.universalApprove(address(dfTokenizedStrategy), uint256(-1)); } if (token.allowance(address(this), address(dfDeposits)) != uint256(-1)) { token.universalApprove(address(dfDeposits), uint256(-1)); } } } function externalCallToTokenizedStrategy(address payable target, bytes memory data, uint256 ethAmount) public onlyOwner returns(bytes32 response) { // external calls allowed only for 2 contracts require(target == dfDeposits || target == address(dfTokenizedStrategy)); assembly { let succeeded := call(sub(gas, 5000), target, ethAmount, add(data, 0x20), mload(data), 0, 32) response := mload(0) switch iszero(succeeded) case 1 { revert(0, 0) } } } function depositWBTC(address dfWallet, uint256 amountWBTC) public onlyOwner { require(dfWallet != address(0)); IToken(WBTC_ADDRESS).universalTransfer(dfWallet, amountWBTC); IDfFinanceDeposits(dfDeposits).deposit( dfWallet, 0, // amountDAI 0, // amountUSDC amountWBTC, 0, // flashloanDAI 0, // flashloanUSDC IDfFinanceDeposits.FlashloanProvider.DYDX, // default address(0) // flashloanFromAddress – default ); } function withdrawToken(IToken token, uint256 amount, address receiver) internal { if (receiver != address(this)) { if (token.universalBalanceOf(address(this)) >= amount) { token.universalTransfer(receiver, amount); return; } } if (address(token) == DAI_ADDRESS) { // dfTokenizedStrategy.burnTokens(amount, 0, 0, flashloanFromAddress); dfTokenizedStrategy.burnTokens(amount, true); } else if (address(token) == ETH_ADDRESS) { dfTokenizedStrategy.burnTokens(0, 0, amount, flashloanFromAddress); } else if (address(token) == USDC_ADDRESS) { dfTokenizedStrategy.burnTokens(0, amount, 0, flashloanFromAddress); } else { require(false); } if (receiver != address(this)) token.universalTransfer(receiver, amount); } // allow to claim profit from tokenized startegy (in new version) function defiController() view external returns(address) { return owner; } function() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"}],"name":"EmergencyWithdrawalActivated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":true,"inputs":[],"name":"COMPTROLLER","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"DAI_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ETH_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"USDC_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"WBTC_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"acceptOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"activateEmergencyWithdrawal","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"listTokens","type":"address[]"}],"name":"approveTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address payable","name":"newOwner","type":"address"}],"name":"changeOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"dateFundsUnlocked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"defiController","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IToken","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"dfWallet","type":"address"},{"internalType":"uint256","name":"amountWBTC","type":"uint256"}],"name":"depositWBTC","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"dfDeposits","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"dfTokenizedStrategy","outputs":[{"internalType":"contract TokenizedStrategy","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"emergencyWithdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"enableToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address payable","name":"target","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"ethAmount","type":"uint256"}],"name":"externalCallToTokenizedStrategy","outputs":[{"internalType":"bytes32","name":"response","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"contract IToken","name":"token","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"fundsToTokensUsePrice","outputs":[{"internalType":"uint256","name":"ret","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"getInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"avgPrice","type":"uint256"},{"internalType":"uint256","name":"tokensToMint","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint128","name":"lastDeposit","type":"uint128"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint8","name":"decimals","type":"uint8"}],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isEmergencyWithdrawalActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxDateDeposits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maxDelayUntilClaimTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address payable","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"address[]","name":"tokenList","type":"address[]"}],"name":"releaseTokens","outputs":[{"internalType":"uint256","name":"tokensToMint","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalCurrentTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalMaxTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"tokensToBurn","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052603380546001600160a01b031916331790556133bc806100256000396000f3fe6080604052600436106102465760003560e01c806395d89b4111610139578063b9b8cc96116100b6578063c690908a1161007a578063c690908a14610b01578063d24e567a14610b34578063dd62ed3e14610b6d578063eb3112b514610ba8578063ebbc496514610bbd578063f3fef3a314610bd257610246565b8063b9b8cc9614610a18578063ba1de6c714610a4b578063bb09d9b714610a60578063bdd5915f14610a75578063c686554e14610a8a57610246565b8063a9059cbb116100fd578063a9059cbb1461082b578063ac43070b14610864578063b0cf77d314610912578063b2ae48f0146109d0578063b3537893146109e557610246565b806395d89b41146107805780639b9e98be14610795578063a457c2d7146107aa578063a6f9dae1146107e3578063a734f06e1461081657610246565b806346144c8f116101c757806370a082311161018b57806370a082311461064b578063734622811461067e5780637b24715d146107415780638129fc1c146107565780638da5cb5b1461076b57610246565b806346144c8f1461058357806347e7ef24146105985780634ce56141146105c45780635f82c67e146106035780636ff1c9bc1461061857610246565b806323b872dd1161020e57806323b872dd146104965780632a4c0a1a146104d9578063313ce5671461050a57806334fe2c7514610535578063395093511461054a57610246565b806306fdde0314610248578063095ea7b3146102d2578063152165391461031f5780631624f6c61461034657806318160ddd14610481575b005b34801561025457600080fd5b5061025d610c0b565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561029757818101518382015260200161027f565b50505050905090810190601f1680156102c45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102de57600080fd5b5061030b600480360360408110156102f557600080fd5b506001600160a01b038135169060200135610ca2565b604080519115158252519081900360200190f35b34801561032b57600080fd5b50610334610cb9565b60408051918252519081900360200190f35b34801561035257600080fd5b506102466004803603606081101561036957600080fd5b810190602081018135600160201b81111561038357600080fd5b82018360208201111561039557600080fd5b803590602001918460018302840111600160201b831117156103b657600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561040857600080fd5b82018360208201111561041a57600080fd5b803590602001918460018302840111600160201b8311171561043b57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505050903560ff169150610cbf9050565b34801561048d57600080fd5b50610334610d9b565b3480156104a257600080fd5b5061030b600480360360608110156104b957600080fd5b506001600160a01b03813581169160208101359091169060400135610da1565b3480156104e557600080fd5b506104ee610e10565b604080516001600160a01b039092168252519081900360200190f35b34801561051657600080fd5b5061051f610e28565b6040805160ff9092168252519081900360200190f35b34801561054157600080fd5b50610334610e31565b34801561055657600080fd5b5061030b6004803603604081101561056d57600080fd5b506001600160a01b038135169060200135610e40565b34801561058f57600080fd5b506104ee610e7c565b610334600480360360408110156105ae57600080fd5b506001600160a01b038135169060200135610e8b565b3480156105d057600080fd5b50610334600480360360608110156105e757600080fd5b506001600160a01b038135169060208101359060400135611159565b34801561060f57600080fd5b506104ee6111ac565b34801561062457600080fd5b506102466004803603602081101561063b57600080fd5b50356001600160a01b03166111c4565b34801561065757600080fd5b506103346004803603602081101561066e57600080fd5b50356001600160a01b0316611269565b34801561068a57600080fd5b50610334600480360360608110156106a157600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156106cb57600080fd5b8201836020820111156106dd57600080fd5b803590602001918460018302840111600160201b831117156106fe57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505091359250611288915050565b34801561074d57600080fd5b50610334611362565b34801561076257600080fd5b50610246611368565b34801561077757600080fd5b506104ee611502565b34801561078c57600080fd5b5061025d611511565b3480156107a157600080fd5b506104ee611572565b3480156107b657600080fd5b5061030b600480360360408110156107cd57600080fd5b506001600160a01b03813516906020013561158a565b3480156107ef57600080fd5b506102466004803603602081101561080657600080fd5b50356001600160a01b03166115df565b34801561082257600080fd5b506104ee611654565b34801561083757600080fd5b5061030b6004803603604081101561084e57600080fd5b506001600160a01b03813516906020013561166c565b34801561087057600080fd5b506102466004803603602081101561088757600080fd5b810190602081018135600160201b8111156108a157600080fd5b8201836020820111156108b357600080fd5b803590602001918460208302840111600160201b831117156108d457600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611679945050505050565b34801561091e57600080fd5b506103346004803603604081101561093557600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561095f57600080fd5b82018360208201111561097157600080fd5b803590602001918460208302840111600160201b8311171561099257600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061188a945050505050565b3480156109dc57600080fd5b506104ee611956565b3480156109f157600080fd5b5061030b60048036036020811015610a0857600080fd5b50356001600160a01b031661196e565b348015610a2457600080fd5b5061024660048036036020811015610a3b57600080fd5b50356001600160a01b0316611983565b348015610a5757600080fd5b50610334611a22565b348015610a6c57600080fd5b506104ee611a28565b348015610a8157600080fd5b506104ee611a40565b348015610a9657600080fd5b50610ac560048036036040811015610aad57600080fd5b506001600160a01b0381358116916020013516611a58565b60408051968752602087019590955285850193909352606085019190915260808401526001600160801b031660a0830152519081900360c00190f35b348015610b0d57600080fd5b5061024660048036036020811015610b2457600080fd5b50356001600160a01b0316611c9f565b348015610b4057600080fd5b5061024660048036036040811015610b5757600080fd5b506001600160a01b038135169060200135611d16565b348015610b7957600080fd5b5061033460048036036040811015610b9057600080fd5b506001600160a01b0381358116916020013516611e92565b348015610bb457600080fd5b50610334611ebd565b348015610bc957600080fd5b50610246611ec3565b348015610bde57600080fd5b5061033460048036036040811015610bf557600080fd5b506001600160a01b038135169060200135611f3a565b60358054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c975780601f10610c6c57610100808354040283529160200191610c97565b820191906000526020600020905b815481529060010190602001808311610c7a57829003601f168201915b505050505090505b90565b6000610caf338484611fd6565b5060015b92915050565b60a15481565b600054610100900460ff1680610cd85750610cd86120c2565b80610ce6575060005460ff16155b610d215760405162461bcd60e51b815260040180806020018281038252602e81526020018061326b602e913960400191505060405180910390fd5b600054610100900460ff16158015610d4c576000805460ff1961ff0019909116610100171660011790555b8351610d5f9060359060208701906130ec565b508251610d739060369060208601906130ec565b506037805460ff191660ff84161790558015610d95576000805461ff00191690555b50505050565b606c5490565b6000610dae8484846120c8565b610e068433610e0185604051806060016040528060288152602001613243602891396001600160a01b038a166000908152606b60209081526040808320338452909152902054919063ffffffff61222616565b611fd6565b5060019392505050565b736b175474e89094c44da98b954eedeac495271d0f81565b60375460ff1690565b6a108b2a2c2802909400000081565b336000818152606b602090815260408083206001600160a01b03871684529091528120549091610caf918590610e01908663ffffffff6122bd16565b6033546001600160a01b031690565b600060a1544210610e9b57600080fd5b6001600160a01b0383166000908152609f602052604090205460ff16610ec057600080fd5b6000733d9819210a31b4961b30ef54be2aed79b9c9cd3b6001600160a01b0316637dc0d1d06040518163ffffffff1660e01b815260040160206040518083038186803b158015610f0f57600080fd5b505afa158015610f23573d6000803e3d6000fd5b505050506040513d6020811015610f3957600080fd5b505190506060610f516001600160a01b03861661231e565b90506001600160a01b038516732260fac5e5542a773aa44fbcfedf7c193bc2c5991415610f94575060408051808201909152600381526242544360e81b60208201525b6000826001600160a01b031663fe2c6198836040518263ffffffff1660e01b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610ff2578181015183820152602001610fda565b50505050905090810190601f16801561101f5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b15801561103c57600080fd5b505afa158015611050573d6000803e3d6000fd5b505050506040513d602081101561106657600080fd5b505190508061107457600080fd5b61108f6001600160a01b03871633308863ffffffff61249016565b600061109c878388611159565b90506110aa60a554826125dc565b60a58190556a108b2a2c2802909400000010156110c657600080fd5b33600090815260a0602090815260408083206001600160a01b038b1684529091528120805460018201549192909189830190611106908402878c026125dc565b8161110d57fe5b838b0185550460018401819055600284015490915061112c90856125dc565b6002840155505060030180546001600160801b031916426001600160801b03161790559695505050505050565b60008061116e856001600160a01b03166125ec565b9050620f424061117e8585612686565b8161118557fe5b04915060128110156111a4576111a18282601203600a0a612686565b91505b509392505050565b733d9819210a31b4961b30ef54be2aed79b9c9cd3b81565b6001600160a01b0381166000908152609f602052604090205460ff16801561120457506001600160a01b038116600090815260a6602052604090205460ff165b61120d57600080fd5b33600081815260a0602090815260408083206001600160a01b0386168452909152812080548282556001820183905560028201929092556003810180546001600160801b03191690559161126490849083906126aa565b505050565b6001600160a01b0381166000908152606a60205260409020545b919050565b6033546000906001600160a01b031633146112de576040805162461bcd60e51b815260206004820152601160248201527014195c9b5a5cdcda5bdb8819195b9a5959607a1b604482015290519081900360640190fd5b6001600160a01b03841673fff9d7b0b6312ead0a1a993bf32f373449006f2f148061132557506001600160a01b03841673b942ca22e0eb0f2524f53f999ae33fd3b2d58e3e145b61132e57600080fd5b6020600084516020860185886113885a03f1600051915080156001811461135457611359565b600080fd5b50509392505050565b60a25481565b600054610100900460ff168061138157506113816120c2565b8061138f575060005460ff16155b6113ca5760405162461bcd60e51b815260040180806020018281038252602e81526020018061326b602e913960400191505060405180910390fd5b600054610100900460ff161580156113f5576000805460ff1961ff0019909116610100171660011790555b603380546001600160a01b03191673dae0aca4b9b38199408ffab32562bf7b3b0495fe179055604080518082018252600a81526958496e4465666945636f60b01b602080830191909152825180840190935260048352632c24a22360e11b90830152611462916012610cbf565b635fe7a45060a15563605e4b5060a2556203f48060a355611496736b175474e89094c44da98b954eedeac495271d0f611c9f565b6114b373eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee611c9f565b6114d0732260fac5e5542a773aa44fbcfedf7c193bc2c599611c9f565b6114ed73a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48611c9f565b80156114ff576000805461ff00191690555b50565b6033546001600160a01b031681565b60368054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c975780601f10610c6c57610100808354040283529160200191610c97565b73fff9d7b0b6312ead0a1a993bf32f373449006f2f81565b6000610caf3384610e018560405180606001604052806025815260200161336360259139336000908152606b602090815260408083206001600160a01b038d168452909152902054919063ffffffff61222616565b6033546001600160a01b03163314611632576040805162461bcd60e51b815260206004820152601160248201527014195c9b5a5cdcda5bdb8819195b9a5959607a1b604482015290519081900360640190fd5b603480546001600160a01b0319166001600160a01b0392909216919091179055565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b6000610caf3384846120c8565b6033546001600160a01b031633146116cc576040805162461bcd60e51b815260206004820152601160248201527014195c9b5a5cdcda5bdb8819195b9a5959607a1b604482015290519081900360640190fd5b60005b81518110156118865760008282815181106116e657fe5b60209081029190910181015160408051636eb1769f60e11b815230600482015273b942ca22e0eb0f2524f53f999ae33fd3b2d58e3e60248201529051919350600019926001600160a01b0385169263dd62ed3e926044808201939291829003018186803b15801561175657600080fd5b505afa15801561176a573d6000803e3d6000fd5b505050506040513d602081101561178057600080fd5b5051146117b7576117b76001600160a01b03821673b942ca22e0eb0f2524f53f999ae33fd3b2d58e3e60001963ffffffff6128ec16565b60408051636eb1769f60e11b815230600482015273fff9d7b0b6312ead0a1a993bf32f373449006f2f60248201529051600019916001600160a01b0384169163dd62ed3e91604480820192602092909190829003018186803b15801561181c57600080fd5b505afa158015611830573d6000803e3d6000fd5b505050506040513d602081101561184657600080fd5b50511461187d5761187d6001600160a01b03821673fff9d7b0b6312ead0a1a993bf32f373449006f2f60001963ffffffff6128ec16565b506001016116cf565b5050565b60006001600160a01b03831661189e573392505b815160a35460005b8281101561193d576001600160a01b038616600090815260a060205260408120865182908890859081106118d657fe5b6020908102919091018101516001600160a01b0316825281019190915260400160002060038101549091506001600160801b0316830142111561193457600281015480156119325761192886826125dc565b6000600284015595505b505b506001016118a6565b50821561194e5761194e8584612940565b505092915050565b73b942ca22e0eb0f2524f53f999ae33fd3b2d58e3e81565b60a66020526000908152604090205460ff1681565b6033546001600160a01b031633146119d6576040805162461bcd60e51b815260206004820152601160248201527014195c9b5a5cdcda5bdb8819195b9a5959607a1b604482015290519081900360640190fd5b6001600160a01b038116600081815260a66020526040808220805460ff19166001179055517f24b15cbf29b47201cb0e3a93d054342041ffe497a74d4e1be287bffc6f3de9159190a250565b60a55481565b73a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4881565b732260fac5e5542a773aa44fbcfedf7c193bc2c59981565b6000806000806000806000733d9819210a31b4961b30ef54be2aed79b9c9cd3b6001600160a01b0316637dc0d1d06040518163ffffffff1660e01b815260040160206040518083038186803b158015611ab057600080fd5b505afa158015611ac4573d6000803e3d6000fd5b505050506040513d6020811015611ada57600080fd5b505190506060611af26001600160a01b038a1661231e565b90506001600160a01b038916732260fac5e5542a773aa44fbcfedf7c193bc2c5991415611b35575060408051808201909152600381526242544360e81b60208201525b604051631fc58c3360e31b81526020600482018181528351602484015283516001600160a01b0386169363fe2c61989386939283926044019185019080838360005b83811015611b8f578181015183820152602001611b77565b50505050905090810190601f168015611bbc5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015611bd957600080fd5b505afa158015611bed573d6000803e3d6000fd5b505050506040513d6020811015611c0357600080fd5b50519450611c206001600160a01b038a163063ffffffff612a3216565b9350611c2a61316a565b505050506001600160a01b03968716600090815260a06020908152604080832098909916825296875287902087516080810189528154808252600183015498820189905260028301549982018a90526003909201546001600160801b0316606090910181905290989697969295509093509150565b6033546001600160a01b03163314611cf2576040805162461bcd60e51b815260206004820152601160248201527014195c9b5a5cdcda5bdb8819195b9a5959607a1b604482015290519081900360640190fd5b6001600160a01b03166000908152609f60205260409020805460ff19166001179055565b6033546001600160a01b03163314611d69576040805162461bcd60e51b815260206004820152601160248201527014195c9b5a5cdcda5bdb8819195b9a5959607a1b604482015290519081900360640190fd5b6001600160a01b038216611d7c57600080fd5b611da1732260fac5e5542a773aa44fbcfedf7c193bc2c599838363ffffffff612b0516565b73fff9d7b0b6312ead0a1a993bf32f373449006f2f6001600160a01b03166303db86a383600080856000806000806040518963ffffffff1660e01b815260040180896001600160a01b03166001600160a01b03168152602001888152602001878152602001868152602001858152602001848152602001836002811115611e2457fe5b60ff168152602001826001600160a01b03166001600160a01b0316815260200198505050505050505050602060405180830381600087803b158015611e6857600080fd5b505af1158015611e7c573d6000803e3d6000fd5b505050506040513d6020811015610d9557600080fd5b6001600160a01b039182166000908152606b6020908152604080832093909416825291909152205490565b60a35481565b6034546001600160a01b03163314611f16576040805162461bcd60e51b815260206004820152601160248201527014195c9b5a5cdcda5bdb8819195b9a5959607a1b604482015290519081900360640190fd5b603454603380546001600160a01b0319166001600160a01b03909216919091179055565b6001600160a01b0382166000908152609f602052604081205460ff16611f5f57600080fd5b33600090815260a0602090815260408083206001600160a01b03871684529091529020600281015415611f9157600080fd5b60a254421015611fb657611faa84826001015485611159565b9150611fb63383612b12565b8054611fc29084612c0e565b8155611fcf8484336126aa565b5092915050565b6001600160a01b03831661201b5760405162461bcd60e51b81526004018080602001828103825260248152602001806132df6024913960400191505060405180910390fd5b6001600160a01b0382166120605760405162461bcd60e51b81526004018080602001828103825260228152602001806131fb6022913960400191505060405180910390fd5b6001600160a01b038084166000818152606b6020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b303b1590565b6001600160a01b03831661210d5760405162461bcd60e51b81526004018080602001828103825260258152602001806132ba6025913960400191505060405180910390fd5b6001600160a01b0382166121525760405162461bcd60e51b81526004018080602001828103825260238152602001806131b66023913960400191505060405180910390fd5b6121958160405180606001604052806026815260200161321d602691396001600160a01b0386166000908152606a6020526040902054919063ffffffff61222616565b6001600160a01b038085166000908152606a602052604080822093909355908416815220546121ca908263ffffffff6122bd16565b6001600160a01b038084166000818152606a602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600081848411156122b55760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561227a578181015183820152602001612262565b50505050905090810190601f1680156122a75780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015612317576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60606001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415612365575060408051808201909152600381526208aa8960eb1b6020820152611283565b816001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561239e57600080fd5b505afa1580156123b2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156123db57600080fd5b8101908080516040519392919084600160201b8211156123fa57600080fd5b90830190602082018581111561240f57600080fd5b8251600160201b81118282018810171561242857600080fd5b82525081516020918201929091019080838360005b8381101561245557818101518382015260200161243d565b50505050905090810190601f1680156124825780820380516001836020036101000a031916815260200191505b506040525050509050919050565b8061249a57610d95565b6001600160a01b03841615806124cc57506001600160a01b03841673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee145b156125c1576001600160a01b038316331480156124e95750803410155b61252e576040805162461bcd60e51b81526020600482015260116024820152706d73672e76616c7565206973207a65726f60781b604482015290519081900360640190fd5b6001600160a01b0382163014612576576040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015612574573d6000803e3d6000fd5b505b803411156125bc57336108fc612592348463ffffffff612c1e16565b6040518115909202916000818181858888f193505050501580156125ba573d6000803e3d6000fd5b505b610d95565b610d956001600160a01b03851684848463ffffffff612c6016565b80820182811015610cb357600080fd5b60006001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561261b57506012611283565b816001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561265457600080fd5b505afa158015612668573d6000803e3d6000fd5b505050506040513d602081101561267e57600080fd5b505192915050565b60008115806126a15750508082028282828161269e57fe5b04145b610cb357600080fd5b6001600160a01b03811630146126f857816126d46001600160a01b0385163063ffffffff612a3216565b106126f8576126f36001600160a01b038416828463ffffffff612b0516565b611264565b6001600160a01b038316736b175474e89094c44da98b954eedeac495271d0f1415612794576040805163869ee0f960e01b81526004810184905260016024820152905173b942ca22e0eb0f2524f53f999ae33fd3b2d58e3e9163869ee0f991604480830192600092919082900301818387803b15801561277757600080fd5b505af115801561278b573d6000803e3d6000fd5b505050506128c2565b6001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561282b5760a4546040805163030f41c760e41b815260006004820181905260248201819052604482018690526001600160a01b039093166064820152905173b942ca22e0eb0f2524f53f999ae33fd3b2d58e3e926330f41c70926084808201939182900301818387803b15801561277757600080fd5b6001600160a01b03831673a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4814156113545760a4546040805163030f41c760e41b815260006004820181905260248201869052604482018190526001600160a01b039093166064820152905173b942ca22e0eb0f2524f53f999ae33fd3b2d58e3e926330f41c70926084808201939182900301818387803b15801561277757600080fd5b6001600160a01b0381163014611264576112646001600160a01b038416828463ffffffff612b0516565b6001600160a01b0383161580159061292157506001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b15611264576112646001600160a01b038416838363ffffffff612cba16565b6001600160a01b03821661299b576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b606c546129ae908263ffffffff6122bd16565b606c556001600160a01b0382166000908152606a60205260409020546129da908263ffffffff6122bd16565b6001600160a01b0383166000818152606a602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60006001600160a01b0383161580612a6657506001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee145b15612a7c57506001600160a01b03811631610cb3565b826001600160a01b03166370a08231836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015612ad257600080fd5b505afa158015612ae6573d6000803e3d6000fd5b505050506040513d6020811015612afc57600080fd5b50519050610cb3565b610d958383836000612dcd565b6001600160a01b038216612b575760405162461bcd60e51b81526004018080602001828103825260218152602001806132996021913960400191505060405180910390fd5b612b9a816040518060600160405280602281526020016131d9602291396001600160a01b0385166000908152606a6020526040902054919063ffffffff61222616565b6001600160a01b0383166000908152606a6020526040902055606c54612bc6908263ffffffff612c1e16565b606c556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b80820382811115610cb357600080fd5b600061231783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612226565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610d95908590612eab565b801580612d40575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b158015612d1257600080fd5b505afa158015612d26573d6000803e3d6000fd5b505050506040513d6020811015612d3c57600080fd5b5051155b612d7b5760405162461bcd60e51b815260040180806020018281038252603681526020018061332d6036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052611264908490612eab565b600082612ddc57506001612ea3565b6001600160a01b0385161580612e0e57506001600160a01b03851673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee145b15612e85578115612e45576040516001600160a01b0385169084156108fc029085906000818181858888f193505050509050612ea3565b6040516001600160a01b0385169084156108fc029085906000818181858888f19350505050158015612e7b573d6000803e3d6000fd5b5060019050612ea3565b612e9f6001600160a01b038616858563ffffffff61306316565b5060015b949350505050565b612ebd826001600160a01b03166130b5565b612f0e576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b60208310612f4c5780518252601f199092019160209182019101612f2d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612fae576040519150601f19603f3d011682016040523d82523d6000602084013e612fb3565b606091505b50915091508161300a576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115610d955780806020019051602081101561302657600080fd5b5051610d955760405162461bcd60e51b815260040180806020018281038252602a815260200180613303602a913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611264908490612eab565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708115801590612ea35750141592915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061312d57805160ff191683800117855561315a565b8280016001018555821561315a579182015b8281111561315a57825182559160200191906001019061313f565b5061316692915061319b565b5090565b604051806080016040528060008152602001600081526020016000815260200160006001600160801b031681525090565b610c9f91905b8082111561316657600081556001016131a156fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a656445524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa265627a7a7231582046c29e4c5592f1255d425f4fcc6d5d76dcd4264cf1ccd25f1276c9f63e9acbe364736f6c63430005110032
Deployed Bytecode
0x6080604052600436106102465760003560e01c806395d89b4111610139578063b9b8cc96116100b6578063c690908a1161007a578063c690908a14610b01578063d24e567a14610b34578063dd62ed3e14610b6d578063eb3112b514610ba8578063ebbc496514610bbd578063f3fef3a314610bd257610246565b8063b9b8cc9614610a18578063ba1de6c714610a4b578063bb09d9b714610a60578063bdd5915f14610a75578063c686554e14610a8a57610246565b8063a9059cbb116100fd578063a9059cbb1461082b578063ac43070b14610864578063b0cf77d314610912578063b2ae48f0146109d0578063b3537893146109e557610246565b806395d89b41146107805780639b9e98be14610795578063a457c2d7146107aa578063a6f9dae1146107e3578063a734f06e1461081657610246565b806346144c8f116101c757806370a082311161018b57806370a082311461064b578063734622811461067e5780637b24715d146107415780638129fc1c146107565780638da5cb5b1461076b57610246565b806346144c8f1461058357806347e7ef24146105985780634ce56141146105c45780635f82c67e146106035780636ff1c9bc1461061857610246565b806323b872dd1161020e57806323b872dd146104965780632a4c0a1a146104d9578063313ce5671461050a57806334fe2c7514610535578063395093511461054a57610246565b806306fdde0314610248578063095ea7b3146102d2578063152165391461031f5780631624f6c61461034657806318160ddd14610481575b005b34801561025457600080fd5b5061025d610c0b565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561029757818101518382015260200161027f565b50505050905090810190601f1680156102c45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102de57600080fd5b5061030b600480360360408110156102f557600080fd5b506001600160a01b038135169060200135610ca2565b604080519115158252519081900360200190f35b34801561032b57600080fd5b50610334610cb9565b60408051918252519081900360200190f35b34801561035257600080fd5b506102466004803603606081101561036957600080fd5b810190602081018135600160201b81111561038357600080fd5b82018360208201111561039557600080fd5b803590602001918460018302840111600160201b831117156103b657600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561040857600080fd5b82018360208201111561041a57600080fd5b803590602001918460018302840111600160201b8311171561043b57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505050903560ff169150610cbf9050565b34801561048d57600080fd5b50610334610d9b565b3480156104a257600080fd5b5061030b600480360360608110156104b957600080fd5b506001600160a01b03813581169160208101359091169060400135610da1565b3480156104e557600080fd5b506104ee610e10565b604080516001600160a01b039092168252519081900360200190f35b34801561051657600080fd5b5061051f610e28565b6040805160ff9092168252519081900360200190f35b34801561054157600080fd5b50610334610e31565b34801561055657600080fd5b5061030b6004803603604081101561056d57600080fd5b506001600160a01b038135169060200135610e40565b34801561058f57600080fd5b506104ee610e7c565b610334600480360360408110156105ae57600080fd5b506001600160a01b038135169060200135610e8b565b3480156105d057600080fd5b50610334600480360360608110156105e757600080fd5b506001600160a01b038135169060208101359060400135611159565b34801561060f57600080fd5b506104ee6111ac565b34801561062457600080fd5b506102466004803603602081101561063b57600080fd5b50356001600160a01b03166111c4565b34801561065757600080fd5b506103346004803603602081101561066e57600080fd5b50356001600160a01b0316611269565b34801561068a57600080fd5b50610334600480360360608110156106a157600080fd5b6001600160a01b038235169190810190604081016020820135600160201b8111156106cb57600080fd5b8201836020820111156106dd57600080fd5b803590602001918460018302840111600160201b831117156106fe57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505091359250611288915050565b34801561074d57600080fd5b50610334611362565b34801561076257600080fd5b50610246611368565b34801561077757600080fd5b506104ee611502565b34801561078c57600080fd5b5061025d611511565b3480156107a157600080fd5b506104ee611572565b3480156107b657600080fd5b5061030b600480360360408110156107cd57600080fd5b506001600160a01b03813516906020013561158a565b3480156107ef57600080fd5b506102466004803603602081101561080657600080fd5b50356001600160a01b03166115df565b34801561082257600080fd5b506104ee611654565b34801561083757600080fd5b5061030b6004803603604081101561084e57600080fd5b506001600160a01b03813516906020013561166c565b34801561087057600080fd5b506102466004803603602081101561088757600080fd5b810190602081018135600160201b8111156108a157600080fd5b8201836020820111156108b357600080fd5b803590602001918460208302840111600160201b831117156108d457600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611679945050505050565b34801561091e57600080fd5b506103346004803603604081101561093557600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561095f57600080fd5b82018360208201111561097157600080fd5b803590602001918460208302840111600160201b8311171561099257600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061188a945050505050565b3480156109dc57600080fd5b506104ee611956565b3480156109f157600080fd5b5061030b60048036036020811015610a0857600080fd5b50356001600160a01b031661196e565b348015610a2457600080fd5b5061024660048036036020811015610a3b57600080fd5b50356001600160a01b0316611983565b348015610a5757600080fd5b50610334611a22565b348015610a6c57600080fd5b506104ee611a28565b348015610a8157600080fd5b506104ee611a40565b348015610a9657600080fd5b50610ac560048036036040811015610aad57600080fd5b506001600160a01b0381358116916020013516611a58565b60408051968752602087019590955285850193909352606085019190915260808401526001600160801b031660a0830152519081900360c00190f35b348015610b0d57600080fd5b5061024660048036036020811015610b2457600080fd5b50356001600160a01b0316611c9f565b348015610b4057600080fd5b5061024660048036036040811015610b5757600080fd5b506001600160a01b038135169060200135611d16565b348015610b7957600080fd5b5061033460048036036040811015610b9057600080fd5b506001600160a01b0381358116916020013516611e92565b348015610bb457600080fd5b50610334611ebd565b348015610bc957600080fd5b50610246611ec3565b348015610bde57600080fd5b5061033460048036036040811015610bf557600080fd5b506001600160a01b038135169060200135611f3a565b60358054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c975780601f10610c6c57610100808354040283529160200191610c97565b820191906000526020600020905b815481529060010190602001808311610c7a57829003601f168201915b505050505090505b90565b6000610caf338484611fd6565b5060015b92915050565b60a15481565b600054610100900460ff1680610cd85750610cd86120c2565b80610ce6575060005460ff16155b610d215760405162461bcd60e51b815260040180806020018281038252602e81526020018061326b602e913960400191505060405180910390fd5b600054610100900460ff16158015610d4c576000805460ff1961ff0019909116610100171660011790555b8351610d5f9060359060208701906130ec565b508251610d739060369060208601906130ec565b506037805460ff191660ff84161790558015610d95576000805461ff00191690555b50505050565b606c5490565b6000610dae8484846120c8565b610e068433610e0185604051806060016040528060288152602001613243602891396001600160a01b038a166000908152606b60209081526040808320338452909152902054919063ffffffff61222616565b611fd6565b5060019392505050565b736b175474e89094c44da98b954eedeac495271d0f81565b60375460ff1690565b6a108b2a2c2802909400000081565b336000818152606b602090815260408083206001600160a01b03871684529091528120549091610caf918590610e01908663ffffffff6122bd16565b6033546001600160a01b031690565b600060a1544210610e9b57600080fd5b6001600160a01b0383166000908152609f602052604090205460ff16610ec057600080fd5b6000733d9819210a31b4961b30ef54be2aed79b9c9cd3b6001600160a01b0316637dc0d1d06040518163ffffffff1660e01b815260040160206040518083038186803b158015610f0f57600080fd5b505afa158015610f23573d6000803e3d6000fd5b505050506040513d6020811015610f3957600080fd5b505190506060610f516001600160a01b03861661231e565b90506001600160a01b038516732260fac5e5542a773aa44fbcfedf7c193bc2c5991415610f94575060408051808201909152600381526242544360e81b60208201525b6000826001600160a01b031663fe2c6198836040518263ffffffff1660e01b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610ff2578181015183820152602001610fda565b50505050905090810190601f16801561101f5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b15801561103c57600080fd5b505afa158015611050573d6000803e3d6000fd5b505050506040513d602081101561106657600080fd5b505190508061107457600080fd5b61108f6001600160a01b03871633308863ffffffff61249016565b600061109c878388611159565b90506110aa60a554826125dc565b60a58190556a108b2a2c2802909400000010156110c657600080fd5b33600090815260a0602090815260408083206001600160a01b038b1684529091528120805460018201549192909189830190611106908402878c026125dc565b8161110d57fe5b838b0185550460018401819055600284015490915061112c90856125dc565b6002840155505060030180546001600160801b031916426001600160801b03161790559695505050505050565b60008061116e856001600160a01b03166125ec565b9050620f424061117e8585612686565b8161118557fe5b04915060128110156111a4576111a18282601203600a0a612686565b91505b509392505050565b733d9819210a31b4961b30ef54be2aed79b9c9cd3b81565b6001600160a01b0381166000908152609f602052604090205460ff16801561120457506001600160a01b038116600090815260a6602052604090205460ff165b61120d57600080fd5b33600081815260a0602090815260408083206001600160a01b0386168452909152812080548282556001820183905560028201929092556003810180546001600160801b03191690559161126490849083906126aa565b505050565b6001600160a01b0381166000908152606a60205260409020545b919050565b6033546000906001600160a01b031633146112de576040805162461bcd60e51b815260206004820152601160248201527014195c9b5a5cdcda5bdb8819195b9a5959607a1b604482015290519081900360640190fd5b6001600160a01b03841673fff9d7b0b6312ead0a1a993bf32f373449006f2f148061132557506001600160a01b03841673b942ca22e0eb0f2524f53f999ae33fd3b2d58e3e145b61132e57600080fd5b6020600084516020860185886113885a03f1600051915080156001811461135457611359565b600080fd5b50509392505050565b60a25481565b600054610100900460ff168061138157506113816120c2565b8061138f575060005460ff16155b6113ca5760405162461bcd60e51b815260040180806020018281038252602e81526020018061326b602e913960400191505060405180910390fd5b600054610100900460ff161580156113f5576000805460ff1961ff0019909116610100171660011790555b603380546001600160a01b03191673dae0aca4b9b38199408ffab32562bf7b3b0495fe179055604080518082018252600a81526958496e4465666945636f60b01b602080830191909152825180840190935260048352632c24a22360e11b90830152611462916012610cbf565b635fe7a45060a15563605e4b5060a2556203f48060a355611496736b175474e89094c44da98b954eedeac495271d0f611c9f565b6114b373eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee611c9f565b6114d0732260fac5e5542a773aa44fbcfedf7c193bc2c599611c9f565b6114ed73a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48611c9f565b80156114ff576000805461ff00191690555b50565b6033546001600160a01b031681565b60368054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c975780601f10610c6c57610100808354040283529160200191610c97565b73fff9d7b0b6312ead0a1a993bf32f373449006f2f81565b6000610caf3384610e018560405180606001604052806025815260200161336360259139336000908152606b602090815260408083206001600160a01b038d168452909152902054919063ffffffff61222616565b6033546001600160a01b03163314611632576040805162461bcd60e51b815260206004820152601160248201527014195c9b5a5cdcda5bdb8819195b9a5959607a1b604482015290519081900360640190fd5b603480546001600160a01b0319166001600160a01b0392909216919091179055565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b6000610caf3384846120c8565b6033546001600160a01b031633146116cc576040805162461bcd60e51b815260206004820152601160248201527014195c9b5a5cdcda5bdb8819195b9a5959607a1b604482015290519081900360640190fd5b60005b81518110156118865760008282815181106116e657fe5b60209081029190910181015160408051636eb1769f60e11b815230600482015273b942ca22e0eb0f2524f53f999ae33fd3b2d58e3e60248201529051919350600019926001600160a01b0385169263dd62ed3e926044808201939291829003018186803b15801561175657600080fd5b505afa15801561176a573d6000803e3d6000fd5b505050506040513d602081101561178057600080fd5b5051146117b7576117b76001600160a01b03821673b942ca22e0eb0f2524f53f999ae33fd3b2d58e3e60001963ffffffff6128ec16565b60408051636eb1769f60e11b815230600482015273fff9d7b0b6312ead0a1a993bf32f373449006f2f60248201529051600019916001600160a01b0384169163dd62ed3e91604480820192602092909190829003018186803b15801561181c57600080fd5b505afa158015611830573d6000803e3d6000fd5b505050506040513d602081101561184657600080fd5b50511461187d5761187d6001600160a01b03821673fff9d7b0b6312ead0a1a993bf32f373449006f2f60001963ffffffff6128ec16565b506001016116cf565b5050565b60006001600160a01b03831661189e573392505b815160a35460005b8281101561193d576001600160a01b038616600090815260a060205260408120865182908890859081106118d657fe5b6020908102919091018101516001600160a01b0316825281019190915260400160002060038101549091506001600160801b0316830142111561193457600281015480156119325761192886826125dc565b6000600284015595505b505b506001016118a6565b50821561194e5761194e8584612940565b505092915050565b73b942ca22e0eb0f2524f53f999ae33fd3b2d58e3e81565b60a66020526000908152604090205460ff1681565b6033546001600160a01b031633146119d6576040805162461bcd60e51b815260206004820152601160248201527014195c9b5a5cdcda5bdb8819195b9a5959607a1b604482015290519081900360640190fd5b6001600160a01b038116600081815260a66020526040808220805460ff19166001179055517f24b15cbf29b47201cb0e3a93d054342041ffe497a74d4e1be287bffc6f3de9159190a250565b60a55481565b73a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4881565b732260fac5e5542a773aa44fbcfedf7c193bc2c59981565b6000806000806000806000733d9819210a31b4961b30ef54be2aed79b9c9cd3b6001600160a01b0316637dc0d1d06040518163ffffffff1660e01b815260040160206040518083038186803b158015611ab057600080fd5b505afa158015611ac4573d6000803e3d6000fd5b505050506040513d6020811015611ada57600080fd5b505190506060611af26001600160a01b038a1661231e565b90506001600160a01b038916732260fac5e5542a773aa44fbcfedf7c193bc2c5991415611b35575060408051808201909152600381526242544360e81b60208201525b604051631fc58c3360e31b81526020600482018181528351602484015283516001600160a01b0386169363fe2c61989386939283926044019185019080838360005b83811015611b8f578181015183820152602001611b77565b50505050905090810190601f168015611bbc5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b158015611bd957600080fd5b505afa158015611bed573d6000803e3d6000fd5b505050506040513d6020811015611c0357600080fd5b50519450611c206001600160a01b038a163063ffffffff612a3216565b9350611c2a61316a565b505050506001600160a01b03968716600090815260a06020908152604080832098909916825296875287902087516080810189528154808252600183015498820189905260028301549982018a90526003909201546001600160801b0316606090910181905290989697969295509093509150565b6033546001600160a01b03163314611cf2576040805162461bcd60e51b815260206004820152601160248201527014195c9b5a5cdcda5bdb8819195b9a5959607a1b604482015290519081900360640190fd5b6001600160a01b03166000908152609f60205260409020805460ff19166001179055565b6033546001600160a01b03163314611d69576040805162461bcd60e51b815260206004820152601160248201527014195c9b5a5cdcda5bdb8819195b9a5959607a1b604482015290519081900360640190fd5b6001600160a01b038216611d7c57600080fd5b611da1732260fac5e5542a773aa44fbcfedf7c193bc2c599838363ffffffff612b0516565b73fff9d7b0b6312ead0a1a993bf32f373449006f2f6001600160a01b03166303db86a383600080856000806000806040518963ffffffff1660e01b815260040180896001600160a01b03166001600160a01b03168152602001888152602001878152602001868152602001858152602001848152602001836002811115611e2457fe5b60ff168152602001826001600160a01b03166001600160a01b0316815260200198505050505050505050602060405180830381600087803b158015611e6857600080fd5b505af1158015611e7c573d6000803e3d6000fd5b505050506040513d6020811015610d9557600080fd5b6001600160a01b039182166000908152606b6020908152604080832093909416825291909152205490565b60a35481565b6034546001600160a01b03163314611f16576040805162461bcd60e51b815260206004820152601160248201527014195c9b5a5cdcda5bdb8819195b9a5959607a1b604482015290519081900360640190fd5b603454603380546001600160a01b0319166001600160a01b03909216919091179055565b6001600160a01b0382166000908152609f602052604081205460ff16611f5f57600080fd5b33600090815260a0602090815260408083206001600160a01b03871684529091529020600281015415611f9157600080fd5b60a254421015611fb657611faa84826001015485611159565b9150611fb63383612b12565b8054611fc29084612c0e565b8155611fcf8484336126aa565b5092915050565b6001600160a01b03831661201b5760405162461bcd60e51b81526004018080602001828103825260248152602001806132df6024913960400191505060405180910390fd5b6001600160a01b0382166120605760405162461bcd60e51b81526004018080602001828103825260228152602001806131fb6022913960400191505060405180910390fd5b6001600160a01b038084166000818152606b6020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b303b1590565b6001600160a01b03831661210d5760405162461bcd60e51b81526004018080602001828103825260258152602001806132ba6025913960400191505060405180910390fd5b6001600160a01b0382166121525760405162461bcd60e51b81526004018080602001828103825260238152602001806131b66023913960400191505060405180910390fd5b6121958160405180606001604052806026815260200161321d602691396001600160a01b0386166000908152606a6020526040902054919063ffffffff61222616565b6001600160a01b038085166000908152606a602052604080822093909355908416815220546121ca908263ffffffff6122bd16565b6001600160a01b038084166000818152606a602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600081848411156122b55760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561227a578181015183820152602001612262565b50505050905090810190601f1680156122a75780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015612317576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60606001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1415612365575060408051808201909152600381526208aa8960eb1b6020820152611283565b816001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801561239e57600080fd5b505afa1580156123b2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405260208110156123db57600080fd5b8101908080516040519392919084600160201b8211156123fa57600080fd5b90830190602082018581111561240f57600080fd5b8251600160201b81118282018810171561242857600080fd5b82525081516020918201929091019080838360005b8381101561245557818101518382015260200161243d565b50505050905090810190601f1680156124825780820380516001836020036101000a031916815260200191505b506040525050509050919050565b8061249a57610d95565b6001600160a01b03841615806124cc57506001600160a01b03841673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee145b156125c1576001600160a01b038316331480156124e95750803410155b61252e576040805162461bcd60e51b81526020600482015260116024820152706d73672e76616c7565206973207a65726f60781b604482015290519081900360640190fd5b6001600160a01b0382163014612576576040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015612574573d6000803e3d6000fd5b505b803411156125bc57336108fc612592348463ffffffff612c1e16565b6040518115909202916000818181858888f193505050501580156125ba573d6000803e3d6000fd5b505b610d95565b610d956001600160a01b03851684848463ffffffff612c6016565b80820182811015610cb357600080fd5b60006001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561261b57506012611283565b816001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561265457600080fd5b505afa158015612668573d6000803e3d6000fd5b505050506040513d602081101561267e57600080fd5b505192915050565b60008115806126a15750508082028282828161269e57fe5b04145b610cb357600080fd5b6001600160a01b03811630146126f857816126d46001600160a01b0385163063ffffffff612a3216565b106126f8576126f36001600160a01b038416828463ffffffff612b0516565b611264565b6001600160a01b038316736b175474e89094c44da98b954eedeac495271d0f1415612794576040805163869ee0f960e01b81526004810184905260016024820152905173b942ca22e0eb0f2524f53f999ae33fd3b2d58e3e9163869ee0f991604480830192600092919082900301818387803b15801561277757600080fd5b505af115801561278b573d6000803e3d6000fd5b505050506128c2565b6001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141561282b5760a4546040805163030f41c760e41b815260006004820181905260248201819052604482018690526001600160a01b039093166064820152905173b942ca22e0eb0f2524f53f999ae33fd3b2d58e3e926330f41c70926084808201939182900301818387803b15801561277757600080fd5b6001600160a01b03831673a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4814156113545760a4546040805163030f41c760e41b815260006004820181905260248201869052604482018190526001600160a01b039093166064820152905173b942ca22e0eb0f2524f53f999ae33fd3b2d58e3e926330f41c70926084808201939182900301818387803b15801561277757600080fd5b6001600160a01b0381163014611264576112646001600160a01b038416828463ffffffff612b0516565b6001600160a01b0383161580159061292157506001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b15611264576112646001600160a01b038416838363ffffffff612cba16565b6001600160a01b03821661299b576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b606c546129ae908263ffffffff6122bd16565b606c556001600160a01b0382166000908152606a60205260409020546129da908263ffffffff6122bd16565b6001600160a01b0383166000818152606a602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60006001600160a01b0383161580612a6657506001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee145b15612a7c57506001600160a01b03811631610cb3565b826001600160a01b03166370a08231836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015612ad257600080fd5b505afa158015612ae6573d6000803e3d6000fd5b505050506040513d6020811015612afc57600080fd5b50519050610cb3565b610d958383836000612dcd565b6001600160a01b038216612b575760405162461bcd60e51b81526004018080602001828103825260218152602001806132996021913960400191505060405180910390fd5b612b9a816040518060600160405280602281526020016131d9602291396001600160a01b0385166000908152606a6020526040902054919063ffffffff61222616565b6001600160a01b0383166000908152606a6020526040902055606c54612bc6908263ffffffff612c1e16565b606c556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b80820382811115610cb357600080fd5b600061231783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612226565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610d95908590612eab565b801580612d40575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b158015612d1257600080fd5b505afa158015612d26573d6000803e3d6000fd5b505050506040513d6020811015612d3c57600080fd5b5051155b612d7b5760405162461bcd60e51b815260040180806020018281038252603681526020018061332d6036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052611264908490612eab565b600082612ddc57506001612ea3565b6001600160a01b0385161580612e0e57506001600160a01b03851673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee145b15612e85578115612e45576040516001600160a01b0385169084156108fc029085906000818181858888f193505050509050612ea3565b6040516001600160a01b0385169084156108fc029085906000818181858888f19350505050158015612e7b573d6000803e3d6000fd5b5060019050612ea3565b612e9f6001600160a01b038616858563ffffffff61306316565b5060015b949350505050565b612ebd826001600160a01b03166130b5565b612f0e576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b60208310612f4c5780518252601f199092019160209182019101612f2d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612fae576040519150601f19603f3d011682016040523d82523d6000602084013e612fb3565b606091505b50915091508161300a576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115610d955780806020019051602081101561302657600080fd5b5051610d955760405162461bcd60e51b815260040180806020018281038252602a815260200180613303602a913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611264908490612eab565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708115801590612ea35750141592915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061312d57805160ff191683800117855561315a565b8280016001018555821561315a579182015b8281111561315a57825182559160200191906001019061313f565b5061316692915061319b565b5090565b604051806080016040528060008152602001600081526020016000815260200160006001600160801b031681525090565b610c9f91905b8082111561316657600081556001016131a156fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a656445524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa265627a7a7231582046c29e4c5592f1255d425f4fcc6d5d76dcd4264cf1ccd25f1276c9f63e9acbe364736f6c63430005110032
Deployed Bytecode Sourcemap
33518:10311:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5743:83;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5743:83:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;5743:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15136:150;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15136:150:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;15136:150:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;35861:30;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35861:30:0;;;:::i;:::-;;;;;;;;;;;;;;;;5487:186;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5487:186:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5487:186:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;5487:186:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;5487:186:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;5487:186:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;5487:186:0;;;;;;;;-1:-1:-1;5487:186:0;;-1:-1:-1;;;;;5:28;;2:2;;;46:1;43;36:12;2:2;5487:186:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;5487:186:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;5487:186:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;5487:186:0;;-1:-1:-1;;;5487:186:0;;;;;-1:-1:-1;5487:186:0;;-1:-1:-1;5487:186:0:i;14159:91::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14159:91:0;;;:::i;15758:300::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15758:300:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;15758:300:0;;;;;;;;;;;;;;;;;:::i;34256:80::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34256:80:0;;;:::i;:::-;;;;-1:-1:-1;;;;;34256:80:0;;;;;;;;;;;;;;6595:83;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6595:83:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36018:56;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36018:56:0;;;:::i;16467:206::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16467:206:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;16467:206:0;;;;;;;;:::i;43700:88::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;43700:88:0;;;:::i;37754:1173::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;37754:1173:0;;;;;;;;:::i;37415:331::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37415:331:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;37415:331:0;;;;;;;;;;;;;:::i;34552:80::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34552:80:0;;;:::i;39765:475::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39765:475:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39765:475:0;-1:-1:-1;;;;;39765:475:0;;:::i;14313:110::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14313:110:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14313:110:0;-1:-1:-1;;;;;14313:110:0;;:::i;41540:569::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;41540:569:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;41540:569:0;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;41540:569:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;41540:569:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;41540:569:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;41540:569:0;;-1:-1:-1;;41540:569:0;;;-1:-1:-1;41540:569:0;;-1:-1:-1;;41540:569:0:i;35898:32::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35898:32:0;;;:::i;34886:452::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34886:452:0;;;:::i;6823:28::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6823:28:0;;;:::i;5945:87::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5945:87:0;;;:::i;34787:79::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34787:79:0;;;:::i;17176:257::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17176:257:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;17176:257:0;;;;;;;;:::i;7082:111::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7082:111:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7082:111:0;-1:-1:-1;;;;;7082:111:0;;:::i;34169:80::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34169:80:0;;;:::i;14636:156::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14636:156:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;14636:156:0;;;;;;;;:::i;40963:569::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40963:569:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;40963:569:0;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;40963:569:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;40963:569:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;40963:569:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;40963:569:0;;-1:-1:-1;40963:569:0;;-1:-1:-1;;;;;40963:569:0:i;38935:822::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38935:822:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;38935:822:0;;;;;;;;;;;;;;;-1:-1:-1;;;5:28;;2:2;;;46:1;43;36:12;2:2;38935:822:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;38935:822:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;38935:822:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;38935:822:0;;-1:-1:-1;38935:822:0;;-1:-1:-1;;;;;38935:822:0:i;34652:117::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34652:117:0;;;:::i;36176:59::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36176:59:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36176:59:0;-1:-1:-1;;;;;36176:59:0;;:::i;37227:180::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37227:180:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37227:180:0;-1:-1:-1;;;;;37227:180:0;;:::i;36091:33::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36091:33:0;;;:::i;34354:81::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34354:81:0;;;:::i;34453:::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34453:81:0;;;:::i;36310:727::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36310:727:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;36310:727:0;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36310:727:0;;;;;;;;;;;;;;37045:139;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37045:139:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37045:139:0;-1:-1:-1;;;;;37045:139:0;;:::i;42117:583::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;42117:583:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;42117:583:0;;;;;;;;:::i;14855:134::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14855:134:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;14855:134:0;;;;;;;;;;:::i;35937:39::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35937:39:0;;;:::i;7201:146::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7201:146:0;;;:::i;40248:707::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40248:707:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;40248:707:0;;;;;;;;:::i;5743:83::-;5813:5;5806:12;;;;;;;;-1:-1:-1;;5806:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5780:13;;5806:12;;5813:5;;5806:12;;5813:5;5806:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5743:83;;:::o;15136:150::-;15202:4;15219:37;15228:10;15240:7;15249:6;15219:8;:37::i;:::-;-1:-1:-1;15274:4:0;15136:150;;;;;:::o;35861:30::-;;;;:::o;5487:186::-;1118:12;;;;;;;;:31;;;1134:15;:13;:15::i;:::-;1118:47;;;-1:-1:-1;1154:11:0;;;;1153:12;1118:47;1110:106;;;;-1:-1:-1;;;1110:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1225:19;1248:12;;;;;;1247:13;1267:83;;;;1296:12;:19;;-1:-1:-1;;;;1296:19:0;;;;;1324:18;1311:4;1324:18;;;1267:83;5595:12;;;;:5;;:12;;;;;:::i;:::-;-1:-1:-1;5618:16:0;;;;:7;;:16;;;;;:::i;:::-;-1:-1:-1;5645:9:0;:20;;-1:-1:-1;;5645:20:0;;;;;;;1368:57;;;;1412:5;1397:20;;-1:-1:-1;;1397:20:0;;;1368:57;5487:186;;;;:::o;14159:91::-;14230:12;;14159:91;:::o;15758:300::-;15847:4;15864:36;15874:6;15882:9;15893:6;15864:9;:36::i;:::-;15911:117;15920:6;15928:10;15940:87;15976:6;15940:87;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15940:19:0;;;;;;:11;:19;;;;;;;;15960:10;15940:31;;;;;;;;;:87;;:35;:87;:::i;:::-;15911:8;:117::i;:::-;-1:-1:-1;16046:4:0;15758:300;;;;;:::o;34256:80::-;34294:42;34256:80;:::o;6595:83::-;6661:9;;;;6595:83;:::o;36018:56::-;36059:15;36018:56;:::o;16467:206::-;16573:10;16547:4;16594:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;16594:32:0;;;;;;;;;;16547:4;;16564:79;;16585:7;;16594:48;;16631:10;16594:48;:36;:48;:::i;43700:88::-;43775:5;;-1:-1:-1;;;;;43775:5:0;43700:88;:::o;37754:1173::-;37825:7;37859:15;;37853:3;:21;37845:30;;;;;;-1:-1:-1;;;;;37894:22:0;;;;;;:6;:22;;;;;;;;37886:31;;;;;;37928:23;34590:42;-1:-1:-1;;;;;37954:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37954:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37954:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;37954:34:0;;-1:-1:-1;37999:20:0;38022:23;-1:-1:-1;;;;;38022:21:0;;;:23::i;:::-;37999:46;-1:-1:-1;;;;;;38060:30:0;;34492:42;38060:30;38056:50;;;-1:-1:-1;38092:14:0;;;;;;;;;;;;-1:-1:-1;;;38092:14:0;;;;38056:50;38117:14;38134:10;-1:-1:-1;;;;;38134:16:0;;38151:6;38134:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;38134:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38134:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38134:24:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38134:24:0;;-1:-1:-1;38177:10:0;38169:19;;;;;;38201:62;-1:-1:-1;;;;;38201:27:0;;38229:10;38249:4;38256:6;38201:62;:27;:62;:::i;:::-;38276:20;38299:44;38321:5;38328:6;38336;38299:21;:44::i;:::-;38276:67;;38375:37;38379:18;;38399:12;38375:3;:37::i;:::-;38354:18;:58;;;36059:15;-1:-1:-1;38431:36:0;38423:45;;;;;;38517:10;38481:20;38504:24;;;:12;:24;;;;;;;;-1:-1:-1;;;;;38504:40:0;;;;;;;;;38577:11;;38639:13;;;;38504:40;;38577:11;;38674:20;;;;38621:49;;38625:27;;38654:15;;;38621:3;:49::i;:::-;:74;;;;;38720:20;;;38706:34;;38621:74;38751:13;;;:27;;;38813:17;;;;38621:74;;-1:-1:-1;38809:36:0;;38832:12;38809:3;:36::i;:::-;38789:17;;;:56;-1:-1:-1;;38856:16:0;;:31;;-1:-1:-1;;;;;;38856:31:0;38883:3;-1:-1:-1;;;;;38856:31:0;;;;38907:12;37754:1173;-1:-1:-1;;;;;;37754:1173:0:o;37415:331::-;37512:11;37586:16;37605:25;:5;-1:-1:-1;;;;;37605:23:0;;:25::i;:::-;37586:44;;37668:3;37647:18;37651:5;37658:6;37647:3;:18::i;:::-;:24;;;;;;37641:30;;37697:2;37686:8;:13;37682:56;;;37707:31;37711:3;37728:8;37723:2;:13;37716:2;:21;37707:3;:31::i;:::-;37701:37;;37682:56;37415:331;;;;;;:::o;34552:80::-;34590:42;34552:80;:::o;39765:475::-;-1:-1:-1;;;;;39833:13:0;;;;;;:6;:13;;;;;;;;:51;;;;-1:-1:-1;;;;;;39850:34:0;;;;;;:27;:34;;;;;;;;39833:51;39825:60;;;;;;39951:10;39915:20;39938:24;;;:12;:24;;;;;;;;-1:-1:-1;;;;;39938:31:0;;;;;;;;;39999:11;;40065:15;;;-1:-1:-1;40091:13:0;;:17;;;40119;;;:21;;;;40151:16;;;:20;;-1:-1:-1;;;;;;40151:20:0;;;39938:31;40184:48;;39963:5;;39999:11;;40184:13;:48::i;:::-;39765:475;;;:::o;14313:110::-;-1:-1:-1;;;;;14397:18:0;;14370:7;14397:18;;;:9;:18;;;;;;14313:110;;;;:::o;41540:569::-;7027:5;;41668:16;;-1:-1:-1;;;;;7027:5:0;7013:10;:19;7005:49;;;;;-1:-1:-1;;;7005:49:0;;;;;;;;;;;;-1:-1:-1;;;7005:49:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;41761:20:0;;34824:42;41761:20;;:62;;-1:-1:-1;;;;;;41785:38:0;;34726:42;41785:38;41761:62;41753:71;;;;;;41949:2;41946:1;41939:4;41933:11;41926:4;41920;41916:15;41905:9;41897:6;41890:4;41885:3;41881:14;41876:76;41984:1;41978:8;41966:20;;42014:9;42007:17;42043:1;42038:53;;;;42000:91;;42038:53;42074:1;42071;42064:12;42000:91;;41844:258;41540:569;;;;;:::o;35898:32::-;;;;:::o;34886:452::-;1118:12;;;;;;;;:31;;;1134:15;:13;:15::i;:::-;1118:47;;;-1:-1:-1;1154:11:0;;;;1153:12;1118:47;1110:106;;;;-1:-1:-1;;;1110:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1225:19;1248:12;;;;;;1247:13;1267:83;;;;1296:12;:19;;-1:-1:-1;;;;1296:19:0;;;;;1324:18;1311:4;1324:18;;;1267:83;34938:5;:50;;-1:-1:-1;;;;;;34938:50:0;34946:42;34938:50;;;34999;;;;;;;;;;;-1:-1:-1;;;34999:50:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;34999:50:0;;;;;;35046:2;34999:24;:50::i;:::-;35078:10;35060:15;:28;35119:25;35099:17;:45;35182:6;35155:24;:33;35199:24;34294:42;35199:11;:24::i;:::-;35234;34207:42;35234:11;:24::i;:::-;35269:25;34492:42;35269:11;:25::i;:::-;35305;34393:42;35305:11;:25::i;:::-;1372:14;1368:57;;;1412:5;1397:20;;-1:-1:-1;;1397:20:0;;;1368:57;34886:452;:::o;6823:28::-;;;-1:-1:-1;;;;;6823:28:0;;:::o;5945:87::-;6017:7;6010:14;;;;;;;;-1:-1:-1;;6010:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5984:13;;6010:14;;6017:7;;6010:14;;6017:7;6010:14;;;;;;;;;;;;;;;;;;;;;;;;34787:79;34824:42;34787:79;:::o;17176:257::-;17261:4;17278:125;17287:10;17299:7;17308:94;17345:15;17308:94;;;;;;;;;;;;;;;;;17320:10;17308:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;17308:32:0;;;;;;;;;;;:94;;:36;:94;:::i;7082:111::-;7027:5;;-1:-1:-1;;;;;7027:5:0;7013:10;:19;7005:49;;;;;-1:-1:-1;;;7005:49:0;;;;;;;;;;;;-1:-1:-1;;;7005:49:0;;;;;;;;;;;;;;;7157:17;:28;;-1:-1:-1;;;;;;7157:28:0;-1:-1:-1;;;;;7157:28:0;;;;;;;;;;7082:111::o;34169:80::-;34207:42;34169:80;:::o;14636:156::-;14705:4;14722:40;14732:10;14744:9;14755:6;14722:9;:40::i;40963:569::-;7027:5;;-1:-1:-1;;;;;7027:5:0;7013:10;:19;7005:49;;;;;-1:-1:-1;;;7005:49:0;;;;;;;;;;;;-1:-1:-1;;;7005:49:0;;;;;;;;;;;;;;;41047:9;41043:482;41066:10;:17;41062:1;:21;41043:482;;;41105:12;41127:10;41138:1;41127:13;;;;;;;;;;;;;;;;;;;41160:60;;;-1:-1:-1;;;41160:60:0;;41184:4;41160:60;;;;34726:42;41160:60;;;;;;41127:13;;-1:-1:-1;;;41232:2:0;-1:-1:-1;;;;;41160:15:0;;;;;:60;;;;;41127:13;41160:60;;;;;;:15;:60;;;5:2:-1;;;;30:1;27;20:12;5:2;41160:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;41160:60:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;41160:60:0;:75;41156:181;;41256:65;-1:-1:-1;;;;;41256:22:0;;34726:42;-1:-1:-1;;41256:65:0;:22;:65;:::i;:::-;41355:51;;;-1:-1:-1;;;41355:51:0;;41379:4;41355:51;;;;34824:42;41355:51;;;;;;-1:-1:-1;;41418:2:0;-1:-1:-1;;;;;41355:15:0;;;;;:51;;;;;;;;;;;;;;;:15;:51;;;5:2:-1;;;;30:1;27;20:12;5:2;41355:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;41355:51:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;41355:51:0;:66;41351:163;;41442:56;-1:-1:-1;;;;;41442:22:0;;34824:42;-1:-1:-1;;41442:56:0;:22;:56;:::i;:::-;-1:-1:-1;41085:3:0;;41043:482;;;;40963:569;:::o;38935:822::-;39023:20;-1:-1:-1;;;;;39060:25:0;;39056:55;;39101:10;39087:24;;39056:55;39136:16;;39201:24;;39122:11;39238:421;39261:3;39257:1;:7;39238:421;;;-1:-1:-1;;;;;39308:25:0;;39285:20;39308:25;;;:12;:25;;;;;39334:12;;39285:20;;39334:9;;39344:1;;39334:12;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39308:39:0;;;;;;;;;;;-1:-1:-1;39308:39:0;39372:16;;;;39308:39;;-1:-1:-1;;;;;;39372:16:0;:44;;39366:3;:50;39362:286;;;39454:17;;;;39494:10;;39490:143;;39544:25;39548:12;39562:6;39544:3;:25::i;:::-;39612:1;39592:17;;;:21;39529:40;-1:-1:-1;39490:143:0;39362:286;;-1:-1:-1;39265:3:0;;39238:421;;;-1:-1:-1;39673:16:0;;39669:81;;39706:32;39712:11;39725:12;39706:5;:32::i;:::-;38935:822;;;;;;:::o;34652:117::-;34726:42;34652:117;:::o;36176:59::-;;;;;;;;;;;;;;;:::o;37227:180::-;7027:5;;-1:-1:-1;;;;;7027:5:0;7013:10;:19;7005:49;;;;;-1:-1:-1;;;7005:49:0;;;;;;;;;;;;-1:-1:-1;;;7005:49:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;37307:34:0;;;;;;:27;:34;;;;;;:41;;-1:-1:-1;;37307:41:0;37344:4;37307:41;;;37364:35;;;37307:34;37364:35;37227:180;:::o;36091:33::-;;;;:::o;34354:81::-;34393:42;34354:81;:::o;34453:::-;34492:42;34453:81;:::o;36310:727::-;36392:14;36408:16;36425:20;36447:13;36462:15;36479:19;36511:23;34590:42;-1:-1:-1;;;;;36537:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36537:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36537:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36537:34:0;;-1:-1:-1;36582:20:0;36605:38;-1:-1:-1;;;;;36605:36:0;;;:38::i;:::-;36582:61;-1:-1:-1;;;;;;36658:28:0;;34492:42;36658:28;36654:48;;;-1:-1:-1;36688:14:0;;;;;;;;;;;;-1:-1:-1;;;36688:14:0;;;;36654:48;36721:24;;-1:-1:-1;;;36721:24:0;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36721:16:0;;;;;36738:6;;36721:24;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;36721:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36721:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36721:24:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36721:24:0;;-1:-1:-1;36766:54:0;-1:-1:-1;;;;;36766:39:0;;36814:4;36766:54;:39;:54;:::i;:::-;36756:64;;36833:16;;:::i;:::-;-1:-1:-1;;;;;;;;;36852:25:0;;;;;;;:12;:25;;;;;;;;:39;;;;;;;;;;;;36833:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36833:58:0;;;;;;;;;;;;;36310:727;;-1:-1:-1;36310:727:0;;-1:-1:-1;36833:58:0;-1:-1:-1;36310:727:0:o;37045:139::-;7027:5;;-1:-1:-1;;;;;7027:5:0;7013:10;:19;7005:49;;;;;-1:-1:-1;;;7005:49:0;;;;;;;;;;;;-1:-1:-1;;;7005:49:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;37116:20:0;;;;;:6;:20;;;;;:27;;-1:-1:-1;;37116:27:0;37139:4;37116:27;;;37045:139::o;42117:583::-;7027:5;;-1:-1:-1;;;;;7027:5:0;7013:10;:19;7005:49;;;;;-1:-1:-1;;;7005:49:0;;;;;;;;;;;;-1:-1:-1;;;7005:49:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;42212:22:0;;42204:31;;;;;;42248:60;34492:42;42287:8;42297:10;42248:60;:38;:60;:::i;:::-;34824:42;-1:-1:-1;;;;;42321:38:0;;42374:8;42397:1;42431;42466:10;42491:1;42528;42566:41;42642:1;42321:371;;;;;;;;;;;;;-1:-1:-1;;;;;42321:371:0;-1:-1:-1;;;;;42321:371:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;42321:371:0;-1:-1:-1;;;;;42321:371:0;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;42321:371:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;42321:371:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;14855:134:0;-1:-1:-1;;;;;14954:18:0;;;14927:7;14954:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;14855:134::o;35937:39::-;;;;:::o;7201:146::-;7264:17;;-1:-1:-1;;;;;7264:17:0;7250:10;:31;7242:61;;;;;-1:-1:-1;;;7242:61:0;;;;;;;;;;;;-1:-1:-1;;;7242:61:0;;;;;;;;;;;;;;;7322:17;;7314:5;:25;;-1:-1:-1;;;;;;7314:25:0;-1:-1:-1;;;;;7322:17:0;;;7314:25;;;;;;7201:146::o;40248:707::-;-1:-1:-1;;;;;40354:13:0;;40313:20;40354:13;;;:6;:13;;;;;;;;40346:22;;;;;;40434:10;40398:20;40421:24;;;:12;:24;;;;;;;;-1:-1:-1;;;;;40421:31:0;;;;;;;;;40471:17;;;;:22;40463:31;;;;;;40638:17;;40632:3;:23;40628:176;;;40687:59;40716:5;40724:4;:13;;;40739:6;40687:21;:59::i;:::-;40672:74;;40761:31;40767:10;40779:12;40761:5;:31::i;:::-;40834:11;;40830:24;;40847:6;40830:3;:24::i;:::-;40816:38;;40867:48;40888:5;40896:6;40904:10;40867:13;:48::i;:::-;-1:-1:-1;40248:707:0;;;;:::o;20103:338::-;-1:-1:-1;;;;;20197:19:0;;20189:68;;;;-1:-1:-1;;;20189:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20276:21:0;;20268:68;;;;-1:-1:-1;;;20268:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20349:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;20401:32;;;;;;;;;;;;;;;;;20103:338;;;:::o;1519:508::-;1936:4;1982:17;2014:7;1519:508;:::o;17923:471::-;-1:-1:-1;;;;;18021:20:0;;18013:70;;;;-1:-1:-1;;;18013:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18102:23:0;;18094:71;;;;-1:-1:-1;;;18094:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18198;18220:6;18198:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18198:17:0;;;;;;:9;:17;;;;;;;:71;;:21;:71;:::i;:::-;-1:-1:-1;;;;;18178:17:0;;;;;;;:9;:17;;;;;;:91;;;;18303:20;;;;;;;:32;;18328:6;18303:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;18280:20:0;;;;;;;:9;:20;;;;;;;;;:55;;;;18351:35;;;;;;;18280:20;;18351:35;;;;;;;;;;;;;17923:471;;;:::o;10039:192::-;10125:7;10161:12;10153:6;;;;10145:29;;;;-1:-1:-1;;;10145: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;10145:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;10197:5:0;;;10039:192::o;9110:181::-;9168:7;9200:5;;;9224:6;;;;9216:46;;;;;-1:-1:-1;;;9216:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9282:1;9110:181;-1:-1:-1;;;9110:181:0:o;30335:166::-;30397:13;-1:-1:-1;;;;;30427:20:0;;30135:42;30427:20;30423:38;;;-1:-1:-1;30449:12:0;;;;;;;;;;;;-1:-1:-1;;;30449:12:0;;;;;;30423:38;30479:5;-1:-1:-1;;;;;30479:12:0;;:14;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30479:14:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30479:14:0;;;;;;39:16:-1;36:1;17:17;2:54;101:4;30479:14: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;30479:14:0;;;;;;;;;;;;;-1:-1:-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;213:10;;-1:-1;;;244:29;;285:43;;;282:58;-1:-1;233:115;230:2;;;361:1;358;351:12;230:2;372:25;;-1:-1;30479:14:0;;420:4:-1;411:14;;;;30479::0;;;;;411::-1;30479::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;30479::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30472:21;;30335:166;;;:::o;31446:633::-;31557:11;31553:50;;31585:7;;31553:50;-1:-1:-1;;;;;31619:21:0;;;;:45;;-1:-1:-1;;;;;;31644:20:0;;30135:42;31644:20;31619:45;31615:457;;;-1:-1:-1;;;;;31689:18:0;;31697:10;31689:18;:41;;;;;31724:6;31711:9;:19;;31689:41;31681:71;;;;;-1:-1:-1;;;31681:71:0;;;;;;;;;;;;-1:-1:-1;;;31681:71:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;31771:19:0;;31785:4;31771:19;31767:97;;31811:37;;-1:-1:-1;;;;;31811:29:0;;;:37;;;;;31841:6;;31811:37;;;;31841:6;31811:29;:37;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31811:37:0;31767:97;31894:6;31882:9;:18;31878:110;;;31921:10;:51;31941:30;31949:9;31964:6;31941:30;:22;:30;:::i;:::-;31921:51;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31921:51:0;31878:110;31615:457;;;32020:40;-1:-1:-1;;;;;32020:22:0;;32043:4;32049:2;32053:6;32020:40;:22;:40;:::i;21172:104::-;21256:5;;;21251:16;;;;21243:25;;;;;30509:158;30573:4;-1:-1:-1;;;;;30594:20:0;;30135:42;30594:20;30590:35;;;-1:-1:-1;30623:2:0;30616:9;;30590:35;30643:5;-1:-1:-1;;;;;30643:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30643:16:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30643:16:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30643:16:0;;30509:158;-1:-1:-1;;30509:158:0:o;21392:118::-;21444:6;21471;;;:30;;-1:-1:-1;;21486:5:0;;;21500:1;21495;21486:5;21495:1;21481:15;;;;;:20;21471:30;21463:39;;;;;42708:913;-1:-1:-1;;;;;42803:25:0;;42823:4;42803:25;42799:213;;42892:6;42849:39;-1:-1:-1;;;;;42849:24:0;;42882:4;42849:39;:24;:39;:::i;:::-;:49;42845:156;;42919:41;-1:-1:-1;;;;;42919:23:0;;42943:8;42953:6;42919:41;:23;:41;:::i;:::-;42979:7;;42845:156;-1:-1:-1;;;;;43028:29:0;;34294:42;43028:29;43024:505;;;43157:44;;;-1:-1:-1;;;43157:44:0;;;;;;;;43196:4;43157:44;;;;;;34726:42;;43157:30;;:44;;;;;-1:-1:-1;;43157:44:0;;;;;;;-1:-1:-1;34726:42:0;43157:44;;;5:2:-1;;;;30:1;27;20:12;5:2;43157:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;43157:44:0;;;;43024:505;;;-1:-1:-1;;;;;43223:29:0;;34207:42;43223:29;43219:310;;;43314:20;;43269:66;;;-1:-1:-1;;;43269:66:0;;43300:1;43269:66;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;43314:20:0;;;43269:66;;;;;;34726:42;;43269:30;;:66;;;;;;;;;;;43300:1;34726:42;43269:66;;;5:2:-1;;;;30:1;27;20:12;43219:310:0;-1:-1:-1;;;;;43357:30:0;;34393:42;43357:30;43353:176;;;43449:20;;43404:66;;;-1:-1:-1;;;43404:66:0;;43435:1;43404:66;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;43449:20:0;;;43404:66;;;;;;34726:42;;43404:30;;:66;;;;;;;;;;;43435:1;34726:42;43404:66;;;5:2:-1;;;;30:1;27;20:12;43503:14:0;-1:-1:-1;;;;;43545:25:0;;43565:4;43545:25;43541:72;;43572:41;-1:-1:-1;;;;;43572:23:0;;43596:8;43606:6;43572:41;:23;:41;:::i;31236:202::-;-1:-1:-1;;;;;31328:21:0;;;;;;:45;;-1:-1:-1;;;;;;31353:20:0;;30135:42;31353:20;;31328:45;31324:107;;;31390:29;-1:-1:-1;;;;;31390:17:0;;31408:2;31412:6;31390:29;:17;:29;:::i;18675:308::-;-1:-1:-1;;;;;18751:21:0;;18743:65;;;;;-1:-1:-1;;;18743:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18836:12;;:24;;18853:6;18836:24;:16;:24;:::i;:::-;18821:12;:39;-1:-1:-1;;;;;18892:18:0;;;;;;:9;:18;;;;;;:30;;18915:6;18892:30;:22;:30;:::i;:::-;-1:-1:-1;;;;;18871:18:0;;;;;;:9;:18;;;;;;;;:51;;;;18938:37;;;;;;;18871:18;;;;18938:37;;;;;;;;;;18675:308;;:::o;32087:261::-;32165:7;-1:-1:-1;;;;;32189:21:0;;;;:45;;-1:-1:-1;;;;;;32214:20:0;;30135:42;32214:20;32189:45;32185:156;;;-1:-1:-1;;;;;;32258:11:0;;;32251:18;;32185:156;32309:5;-1:-1:-1;;;;;32309:15:0;;32325:3;32309:20;;;;;;;;;;;;;-1:-1:-1;;;;;32309:20:0;-1:-1:-1;;;;;32309:20:0;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;32309:20:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32309:20:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;32309:20:0;;-1:-1:-1;32302:27:0;;30187:140;30276:43;30294:5;30301:2;30305:6;30313:5;30276:17;:43::i;19315:348::-;-1:-1:-1;;;;;19391:21:0;;19383:67;;;;-1:-1:-1;;;19383:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19484:68;19507:6;19484:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19484:18:0;;;;;;:9;:18;;;;;;;:68;;:22;:68;:::i;:::-;-1:-1:-1;;;;;19463:18:0;;;;;;:9;:18;;;;;:89;19578:12;;:24;;19595:6;19578:24;:16;:24;:::i;:::-;19563:12;:39;19618:37;;;;;;;;19644:1;;-1:-1:-1;;;;;19618:37:0;;;;;;;;;;;;19315:348;;:::o;21282:104::-;21366:5;;;21361:16;;;;21353:25;;;;;9566:136;9624:7;9651:43;9655:1;9658;9651:43;;;;;;;;;;;;;;;;;:3;:43::i;26770:204::-;26897:68;;;-1:-1:-1;;;;;26897:68:0;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;26897:68:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;26871:95:0;;26890:5;;26871:18;:95::i;26982:621::-;27352:10;;;27351:62;;-1:-1:-1;27368:39:0;;;-1:-1:-1;;;27368:39:0;;27392:4;27368:39;;;;-1:-1:-1;;;;;27368:39:0;;;;;;;;;:15;;;;;;:39;;;;;;;;;;;;;;;:15;:39;;;5:2:-1;;;;30:1;27;20:12;5:2;27368:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27368:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27368:39:0;:44;27351:62;27343:152;;;;-1:-1:-1;;;27343:152:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27532:62;;;-1:-1:-1;;;;;27532:62:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;27532:62:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;27506:89:0;;27525:5;;27506:18;:89::i;30675:553::-;30775:4;30796:11;30792:55;;-1:-1:-1;30831:4:0;30824:11;;30792:55;-1:-1:-1;;;;;30863:21:0;;;;:45;;-1:-1:-1;;;;;;30888:20:0;;30135:42;30888:20;30863:45;30859:362;;;30929:7;30925:196;;;30964:33;;-1:-1:-1;;;;;30964:25:0;;;:33;;;;;30990:6;;30964:33;;;;30990:6;30964:25;:33;;;;;;;30957:40;;;;30925:196;31038:37;;-1:-1:-1;;;;;31038:29:0;;;:37;;;;;31068:6;;31038:37;;;;31068:6;31038:29;:37;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31038:37:0;31101:4;31094:11;;;;30859:362;31153:30;-1:-1:-1;;;;;31153:18:0;;31172:2;31176:6;31153:30;:18;:30;:::i;:::-;-1:-1:-1;31205:4:0;30859:362;30675:553;;;;;;:::o;28580:1114::-;29184:27;29192:5;-1:-1:-1;;;;;29184:25:0;;:27::i;:::-;29176:71;;;;;-1:-1:-1;;;29176:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;29321:12;29335:23;29370:5;-1:-1:-1;;;;;29362:19:0;29382:4;29362:25;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;29362:25:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;29320:67:0;;;;29406:7;29398:52;;;;;-1:-1:-1;;;29398:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29467:17;;:21;29463:224;;29609:10;29598:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29598:30:0;29590:85;;;;-1:-1:-1;;;29590:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26586:176;26695:58;;;-1:-1:-1;;;;;26695:58:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;26695:58:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;26669:85:0;;26688:5;;26669:18;:85::i;23273:810::-;23333:4;23992:20;;23835:66;24032:15;;;;;:42;;-1:-1:-1;24051:23:0;;;24024:51;-1:-1:-1;;23273:810:0:o;33518:10311::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33518:10311:0;;;-1:-1:-1;33518:10311:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33518:10311:0;;;;;:::o;:::-;;;;;;;;;;;;;;;;;
Swarm Source
bzzr://46c29e4c5592f1255d425f4fcc6d5d76dcd4264cf1ccd25f1276c9f63e9acbe3
Loading...
Loading
Loading...
Loading
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.