Contract Overview
Balance:
0 BNB
BNB Value:
$0.00
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
Contract Name:
Zap
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity ^0.6.12; /* ___ _ _ | _ )_ _ _ _ _ _ _ _ | | | | | _ \ || | ' \| ' \ || | |_| |_| |___/\_,_|_||_|_||_\_, | (_) (_) |__/ * * MIT License * =========== * * Copyright (c) 2020 BunnyFinance * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE */ import "./SafeMath.sol"; import "./SafeBEP20.sol"; import "./Ownable.sol"; import "./IPancakePair.sol"; import "./IPancakeRouter02.sol"; contract Zap is Ownable { using SafeMath for uint; using SafeBEP20 for IBEP20; address private constant CAKE = 0x0E09FaBB73Bd3Ade0a17ECC321fD13a19e81cE82; address private constant BUNNY = 0xC9849E6fdB743d08fAeE3E34dd2D1bc69EA11a51; address private constant WBNB = 0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c; address private constant BUSD = 0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56; address private constant USDT = 0x55d398326f99059fF775485246999027B3197955; address private constant DAI = 0x1AF3F329e8BE154074D8769D1FFa4eE058B1DBc3; address private constant USDC = 0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d; address private constant VAI = 0x4BD17003473389A42DAF6a0a729f6Fdb328BbBd7; IPancakeRouter02 private constant ROUTER = IPancakeRouter02(0x05fF2B0DB69458A0750badebc4f9e13aDd608C7F); mapping(address => bool) private notFlip; address[] public tokens; receive() external payable {} constructor() public { setNotFlip(CAKE); setNotFlip(BUNNY); setNotFlip(WBNB); setNotFlip(BUSD); setNotFlip(USDT); setNotFlip(DAI); setNotFlip(USDC); setNotFlip(VAI); } function isFlip(address _address) public view returns(bool) { return !notFlip[_address]; } function zapInToken(address _from, uint amount, address _to) external { IBEP20(_from).safeTransferFrom(msg.sender, address(this), amount); _approveTokenIfNeeded(_from); if (isFlip(_to)) { IPancakePair pair = IPancakePair(_to); address token0 = pair.token0(); address token1 = pair.token1(); if (_from == token0 || _from == token1) { // swap half amount for other address other = _from == token0 ? token1 : token0; _approveTokenIfNeeded(other); uint sellAmount = amount.div(2); uint otherAmount = _swap(_from, sellAmount, other, address(this)); ROUTER.addLiquidity(_from, other, amount.sub(sellAmount), otherAmount, 0, 0, msg.sender, block.timestamp); } else { uint bnbAmount = _swapTokenForBNB(_from, amount, address(this)); _bnbToFlip(_to, bnbAmount, msg.sender); } } else { _swap(_from, amount, _to, msg.sender); } } function zapIn(address _to) external payable { _bnbToFlip(_to, msg.value, msg.sender); } function _bnbToFlip(address flip, uint amount, address receiver) private { if (!isFlip(flip)) { _swapBNBForToken(flip, amount, receiver); } else { // flip IPancakePair pair = IPancakePair(flip); address token0 = pair.token0(); address token1 = pair.token1(); if (token0 == WBNB || token1 == WBNB) { address token = token0 == WBNB ? token1 : token0; uint swapValue = amount.div(2); uint tokenAmount = _swapBNBForToken(token, swapValue, address(this)); _approveTokenIfNeeded(token); ROUTER.addLiquidityETH{ value: amount.sub(swapValue) }(token, tokenAmount, 0, 0, receiver, block.timestamp); } else { uint swapValue = amount.div(2); uint token0Amount = _swapBNBForToken(token0, swapValue, address(this)); uint token1Amount = _swapBNBForToken(token1, amount.sub(swapValue), address(this)); _approveTokenIfNeeded(token0); _approveTokenIfNeeded(token1); ROUTER.addLiquidity(token0, token1, token0Amount, token1Amount, 0, 0, receiver, block.timestamp); } } } function zapOut(address _from, uint amount) external { IBEP20(_from).safeTransferFrom(msg.sender, address(this), amount); _approveTokenIfNeeded(_from); if (!isFlip(_from)) { _swapTokenForBNB(_from, amount, msg.sender); } else { IPancakePair pair = IPancakePair(_from); address token0 = pair.token0(); address token1 = pair.token1(); if (token0 == WBNB || token1 == WBNB) { ROUTER.removeLiquidityETH(token0!=WBNB?token0:token1, amount, 0, 0, msg.sender, block.timestamp); } else { ROUTER.removeLiquidity(token0, token1, amount, 0, 0, msg.sender, block.timestamp); } } } function _approveTokenIfNeeded(address token) private { if (IBEP20(token).allowance(address(this), address(ROUTER)) == 0) { IBEP20(token).safeApprove(address(ROUTER), uint(~0)); } } function _swapBNBForToken(address token, uint value, address receiver) private returns (uint){ address[] memory path = new address[](2); path[0] = WBNB; path[1] = token; uint[] memory amounts = ROUTER.swapExactETHForTokens{ value: value }(0, path, receiver, block.timestamp); return amounts[1]; } function _swap(address _from, uint amount, address _to, address receiver) private returns(uint) { if (_from == WBNB) { return _swapWBNBForToken(_to, amount, receiver); } else if (_to == WBNB) { return _swapTokenForWBNB(_from, amount, receiver); } else { return _swapTokenForToken(_from, amount, _to, receiver); } } function _swapWBNBForToken(address token, uint amount, address receiver) private returns (uint){ address[] memory path = new address[](2); path[0] = WBNB; path[1] = token; uint[] memory amounts = ROUTER.swapExactTokensForTokens(amount, 0, path, receiver, block.timestamp); return amounts[1]; } function _swapTokenForBNB(address token, uint amount, address receiver) private returns (uint) { address[] memory path = new address[](2); path[0] = token; path[1] = WBNB; uint[] memory amounts = ROUTER.swapExactTokensForETH(amount, 0, path, receiver, block.timestamp); return amounts[1]; } function _swapTokenForWBNB(address token, uint amount, address receiver) private returns (uint) { address[] memory path = new address[](2); path[0] = token; path[1] = WBNB; uint[] memory amounts = ROUTER.swapExactTokensForTokens(amount, 0, path, receiver, block.timestamp); return amounts[1]; } function _swapTokenForToken(address from, uint amount, address to, address receiver) private returns(uint) { address[] memory path = new address[](3); path[0] = from; path[1] = WBNB; path[2] = to; uint[] memory amounts = ROUTER.swapExactTokensForTokens(amount, 0, path, receiver, block.timestamp); return amounts[2]; } // ------------------------------------------ RESTRICTED function setNotFlip(address token) public onlyOwner { bool needPush = notFlip[token] == false; notFlip[token] = true; if (needPush) { tokens.push(token); } } function removeToken(uint i) external onlyOwner { address token = tokens[i]; notFlip[token] = false; tokens[i] = tokens[tokens.length-1]; tokens.pop(); } function sweep() external onlyOwner { for (uint i=0; i<tokens.length; i++) { address token = tokens[i]; if (token == address(0)) continue; uint amount = IBEP20(token).balanceOf(address(this)); if (amount > 0) { _swapTokenForBNB(token, amount, owner()); } } } function withdraw(address token) external onlyOwner { if (token == address(0)) { payable(owner()).transfer(address(this).balance); return; } IBEP20(token).transfer(owner(), IBEP20(token).balanceOf(address(this))); } }
File 2 of 12: Address.sol
// SPDX-License-Identifier: MIT pragma solidity ^0.6.2; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev 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]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, 'Address: insufficient balance'); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{value: amount}(''); require(success, 'Address: unable to send value, recipient may have reverted'); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, 'Address: low-level call failed'); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, 'Address: low-level call with value failed'); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, 'Address: insufficient balance for call'); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue( address target, bytes memory data, uint256 weiValue, string memory errorMessage ) private returns (bytes memory) { require(isContract(target), 'Address: call to non-contract'); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{value: weiValue}(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
File 3 of 12: BEP20.sol
// SPDX-License-Identifier: MIT pragma solidity >=0.4.0; import './Ownable.sol'; import './Context.sol'; import './IBEP20.sol'; import './SafeMath.sol'; import './Address.sol'; /** * @dev Implementation of the {IBEP20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {BEP20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-BEP20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of BEP20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IBEP20-approve}. */ contract BEP20 is Context, IBEP20, Ownable { using SafeMath for uint256; using Address for address; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimals; /** * @dev Sets the values for {name} and {symbol}, initializes {decimals} with * a default value of 18. * * To select a different value for {decimals}, use {_setupDecimals}. * * All three of these values are immutable: they can only be set once during * construction. */ constructor(string memory name, string memory symbol) public { _name = name; _symbol = symbol; _decimals = 18; } /** * @dev Returns the bep token owner. */ function getOwner() external override view returns (address) { return owner(); } /** * @dev Returns the token name. */ function name() public override view returns (string memory) { return _name; } /** * @dev Returns the token decimals. */ function decimals() public override view returns (uint8) { return _decimals; } /** * @dev Returns the token symbol. */ function symbol() public override view returns (string memory) { return _symbol; } /** * @dev See {BEP20-totalSupply}. */ function totalSupply() public override view returns (uint256) { return _totalSupply; } /** * @dev See {BEP20-balanceOf}. */ function balanceOf(address account) public override view returns (uint256) { return _balances[account]; } /** * @dev See {BEP20-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 override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {BEP20-allowance}. */ function allowance(address owner, address spender) public override view returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {BEP20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {BEP20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {BEP20}; * * 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 override returns (bool) { _transfer(sender, recipient, amount); _approve( sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, 'BEP20: 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 {BEP20-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(_msgSender(), spender, _allowances[_msgSender()][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 {BEP20-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( _msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, 'BEP20: decreased allowance below zero') ); return true; } /** * @dev Creates `amount` tokens and assigns them to `msg.sender`, increasing * the total supply. * * Requirements * * - `msg.sender` must be the token owner */ function mint(uint256 amount) public onlyOwner returns (bool) { _mint(_msgSender(), amount); 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), 'BEP20: transfer from the zero address'); require(recipient != address(0), 'BEP20: transfer to the zero address'); _balances[sender] = _balances[sender].sub(amount, 'BEP20: 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), 'BEP20: 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), 'BEP20: burn from the zero address'); _balances[account] = _balances[account].sub(amount, 'BEP20: 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), 'BEP20: approve from the zero address'); require(spender != address(0), 'BEP20: 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, _msgSender(), _allowances[account][_msgSender()].sub(amount, 'BEP20: burn amount exceeds allowance') ); } }
File 4 of 12: Context.sol
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity >=0.4.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ contract Context { // Empty internal constructor, to prevent people from mistakenly deploying // an instance of this contract, which should be used via inheritance. constructor() internal {} function _msgSender() internal view returns (address payable) { return msg.sender; } function _msgData() internal view returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } }
File 5 of 12: IBEP20.sol
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity >=0.4.0; interface IBEP20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the token decimals. */ function decimals() external view returns (uint8); /** * @dev Returns the token symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the token name. */ function name() external view returns (string memory); /** * @dev Returns the bep token owner. */ function getOwner() external view returns (address); /** * @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 6 of 12: IPancakePair.sol
// SPDX-License-Identifier: MIT pragma solidity >=0.6.2; interface IPancakePair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; }
File 7 of 12: IPancakeRouter01.sol
// SPDX-License-Identifier: MIT pragma solidity >=0.6.2; interface IPancakeRouter01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); }
File 8 of 12: IPancakeRouter02.sol
// SPDX-License-Identifier: MIT pragma solidity >=0.6.2; import './IPancakeRouter01.sol'; interface IPancakeRouter02 is IPancakeRouter01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; }
File 9 of 12: Math.sol
// SPDX-License-Identifier: MIT pragma solidity ^0.6.0; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow, so we distribute return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2); } }
File 10 of 12: Ownable.sol
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity >=0.4.0; import './Context.sol'; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), 'Ownable: caller is not the owner'); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0), 'Ownable: new owner is the zero address'); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } }
File 11 of 12: SafeBEP20.sol
// SPDX-License-Identifier: MIT pragma solidity ^0.6.0; import './IBEP20.sol'; import './SafeMath.sol'; import './Address.sol'; /** * @title SafeBEP20 * @dev Wrappers around BEP20 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 SafeBEP20 for IBEP20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeBEP20 { using SafeMath for uint256; using Address for address; function safeTransfer( IBEP20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IBEP20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IBEP20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IBEP20 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), 'SafeBEP20: approve from non-zero to non-zero allowance' ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IBEP20 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( IBEP20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender).sub( value, 'SafeBEP20: decreased allowance below zero' ); _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(IBEP20 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. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, 'SafeBEP20: low-level call failed'); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), 'SafeBEP20: BEP20 operation did not succeed'); } } }
File 12 of 12: SafeMath.sol
// SPDX-License-Identifier: MIT pragma solidity >=0.4.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. */ 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. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { 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. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } function min(uint256 x, uint256 y) internal pure returns (uint256 z) { z = x < y ? x : y; } // babylonian method (https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method) function sqrt(uint256 y) internal pure returns (uint256 z) { if (y > 3) { z = y; uint256 x = y / 2 + 1; while (x < z) { z = x; x = (y / x + x) / 2; } } else if (y != 0) { z = 1; } } }
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isFlip","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"i","type":"uint256"}],"name":"removeToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"setNotFlip","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sweep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"zapIn","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"_to","type":"address"}],"name":"zapInToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"zapOut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060006200001e62000166565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35062000087730e09fabb73bd3ade0a17ecc321fd13a19e81ce826200016a565b620000a673c9849e6fdb743d08faee3e34dd2d1bc69ea11a516200016a565b620000c573bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c6200016a565b620000e473e9e7cea3dedca5984780bafc599bd69add087d566200016a565b620001037355d398326f99059ff775485246999027b31979556200016a565b62000122731af3f329e8be154074d8769d1ffa4ee058b1dbc36200016a565b62000141738ac76a51cc950d9822d68b83fe1ad97b32cd580d6200016a565b62000160734bd17003473389a42daf6a0a729f6fdb328bbbd76200016a565b62000259565b3390565b6200017462000166565b6000546001600160a01b03908116911614620001d7576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166000908152600160208190526040909120805460ff198116909217905560ff161580156200025557600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0384161790555b5050565b61221a80620002696000396000f3fe6080604052600436106100ab5760003560e01c80638da5cb5b116100645780638da5cb5b146101c9578063979c48b9146101de578063d4f9f93a14610225578063d9139f6314610258578063f2fde38b14610291578063fe47068d146102c4576100b2565b80631c4009f9146100b757806335faa416146100fc57806336c5d724146101115780634f64b2be1461013b57806351cff8d914610181578063715018a6146101b4576100b2565b366100b257005b600080fd5b3480156100c357600080fd5b506100fa600480360360608110156100da57600080fd5b506001600160a01b038135811691602081013591604090910135166102ea565b005b34801561010857600080fd5b506100fa61057f565b34801561011d57600080fd5b506100fa6004803603602081101561013457600080fd5b50356106ba565b34801561014757600080fd5b506101656004803603602081101561015e57600080fd5b50356107e8565b604080516001600160a01b039092168252519081900360200190f35b34801561018d57600080fd5b506100fa600480360360208110156101a457600080fd5b50356001600160a01b031661080f565b3480156101c057600080fd5b506100fa6109bd565b3480156101d557600080fd5b50610165610a5f565b3480156101ea57600080fd5b506102116004803603602081101561020157600080fd5b50356001600160a01b0316610a6e565b604080519115158252519081900360200190f35b34801561023157600080fd5b506100fa6004803603602081101561024857600080fd5b50356001600160a01b0316610a8d565b34801561026457600080fd5b506100fa6004803603604081101561027b57600080fd5b506001600160a01b038135169060200135610b66565b34801561029d57600080fd5b506100fa600480360360208110156102b457600080fd5b50356001600160a01b0316610e58565b6100fa600480360360208110156102da57600080fd5b50356001600160a01b0316610eb9565b6102ff6001600160a01b038416333085610ec4565b61030883610f1e565b61031181610a6e565b1561056c5760008190506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561035657600080fd5b505afa15801561036a573d6000803e3d6000fd5b505050506040513d602081101561038057600080fd5b50516040805163d21220a760e01b815290519192506000916001600160a01b0385169163d21220a7916004808301926020929190829003018186803b1580156103c857600080fd5b505afa1580156103dc573d6000803e3d6000fd5b505050506040513d60208110156103f257600080fd5b505190506001600160a01b0386811690831614806104215750806001600160a01b0316866001600160a01b0316145b15610548576000826001600160a01b0316876001600160a01b0316146104475782610449565b815b905061045481610f1e565b6000610461876002610fd8565b9050600061047189838530611021565b90507305ff2b0db69458a0750badebc4f9e13add608c7f63e8e337008a856104998c87611092565b604080516001600160e01b031960e087901b1681526001600160a01b03948516600482015292909316602483015260448201526064810185905260006084820181905260a482018190523360c48301524260e483015291516101048083019360609383900390910190829087803b15801561051357600080fd5b505af1158015610527573d6000803e3d6000fd5b505050506040513d606081101561053d57600080fd5b506105649350505050565b60006105558787306110d4565b9050610562858233611313565b505b50505061057a565b61057883838333611021565b505b505050565b610587611678565b6000546001600160a01b039081169116146105d7576040805162461bcd60e51b815260206004820181905260248201526000805160206121c5833981519152604482015290519081900360640190fd5b60005b6002548110156106b7576000600282815481106105f357fe5b6000918252602090912001546001600160a01b031690508061061557506106af565b6000816001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561066457600080fd5b505afa158015610678573d6000803e3d6000fd5b505050506040513d602081101561068e57600080fd5b5051905080156106ac576106aa82826106a5610a5f565b6110d4565b505b50505b6001016105da565b50565b6106c2611678565b6000546001600160a01b03908116911614610712576040805162461bcd60e51b815260206004820181905260248201526000805160206121c5833981519152604482015290519081900360640190fd5b60006002828154811061072157fe5b60009182526020808320909101546001600160a01b031680835260019091526040909120805460ff191690556002805491925090600019810190811061076357fe5b600091825260209091200154600280546001600160a01b03909216918490811061078957fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060028054806107c257fe5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b600281815481106107f557fe5b6000918252602090912001546001600160a01b0316905081565b610817611678565b6000546001600160a01b03908116911614610867576040805162461bcd60e51b815260206004820181905260248201526000805160206121c5833981519152604482015290519081900360640190fd5b6001600160a01b0381166108bb5761087d610a5f565b6001600160a01b03166108fc479081150290604051600060405180830381858888f193505050501580156108b5573d6000803e3d6000fd5b506106b7565b806001600160a01b031663a9059cbb6108d2610a5f565b604080516370a0823160e01b815230600482015290516001600160a01b038616916370a08231916024808301926020929190829003018186803b15801561091857600080fd5b505afa15801561092c573d6000803e3d6000fd5b505050506040513d602081101561094257600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561099357600080fd5b505af11580156109a7573d6000803e3d6000fd5b505050506040513d602081101561057a57600080fd5b6109c5611678565b6000546001600160a01b03908116911614610a15576040805162461bcd60e51b815260206004820181905260248201526000805160206121c5833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031690565b6001600160a01b031660009081526001602052604090205460ff161590565b610a95611678565b6000546001600160a01b03908116911614610ae5576040805162461bcd60e51b815260206004820181905260248201526000805160206121c5833981519152604482015290519081900360640190fd5b6001600160a01b0381166000908152600160208190526040909120805460ff198116909217905560ff16158015610b6257600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0384161790555b5050565b610b7b6001600160a01b038316333084610ec4565b610b8482610f1e565b610b8d82610a6e565b610ba257610b9c8282336110d4565b50610b62565b60008290506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610be257600080fd5b505afa158015610bf6573d6000803e3d6000fd5b505050506040513d6020811015610c0c57600080fd5b50516040805163d21220a760e01b815290519192506000916001600160a01b0385169163d21220a7916004808301926020929190829003018186803b158015610c5457600080fd5b505afa158015610c68573d6000803e3d6000fd5b505050506040513d6020811015610c7e57600080fd5b505190506001600160a01b0382166000805160206121498339815191521480610cbd57506001600160a01b038116600080516020612149833981519152145b15610d9e577305ff2b0db69458a0750badebc4f9e13add608c7f6302751cec6001600160a01b0384166000805160206121498339815191521415610d015782610d03565b835b604080516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201889052600060448301819052606483018190523360848401524260a4840152815160c4808501949192918390030190829087803b158015610d6c57600080fd5b505af1158015610d80573d6000803e3d6000fd5b505050506040513d6040811015610d9657600080fd5b50610e519050565b60408051635d5155ef60e11b81526001600160a01b0384811660048301528316602482015260448101869052600060648201819052608482018190523360a48301524260c483015282517305ff2b0db69458a0750badebc4f9e13add608c7f9363baa2abde9360e480820194929392918390030190829087803b158015610e2457600080fd5b505af1158015610e38573d6000803e3d6000fd5b505050506040513d6040811015610e4e57600080fd5b50505b5050505050565b610e60611678565b6000546001600160a01b03908116911614610eb0576040805162461bcd60e51b815260206004820181905260248201526000805160206121c5833981519152604482015290519081900360640190fd5b6106b78161167c565b6106b7813433611313565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261057890859061171c565b60408051636eb1769f60e11b81523060048201527305ff2b0db69458a0750badebc4f9e13add608c7f602482015290516001600160a01b0383169163dd62ed3e916044808301926020929190829003018186803b158015610f7e57600080fd5b505afa158015610f92573d6000803e3d6000fd5b505050506040513d6020811015610fa857600080fd5b50516106b7576106b76001600160a01b0382167305ff2b0db69458a0750badebc4f9e13add608c7f6000196117cd565b600061101a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506118e0565b9392505050565b60006001600160a01b03851660008051602061214983398151915214156110545761104d838584611982565b905061108a565b6001600160a01b038316600080516020612149833981519152141561107e5761104d858584611aac565b61104d85858585611b1c565b949350505050565b600061101a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611d8a565b6040805160028082526060808301845260009390929190602083019080368337019050509050848160008151811061110857fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506000805160206121498339815191528160018151811061114457fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060607305ff2b0db69458a0750badebc4f9e13add608c7f6001600160a01b03166318cbafe58660008588426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156111ff5781810151838201526020016111e7565b505050509050019650505050505050600060405180830381600087803b15801561122857600080fd5b505af115801561123c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561126557600080fd5b810190808051604051939291908464010000000082111561128557600080fd5b90830190602082018581111561129a57600080fd5b82518660208202830111640100000000821117156112b757600080fd5b82525081516020918201928201910280838360005b838110156112e45781810151838201526020016112cc565b5050505090500160405250505090508060018151811061130057fe5b6020026020010151925050509392505050565b61131c83610a6e565b6113315761132b838383611de4565b5061057a565b60008390506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561137157600080fd5b505afa158015611385573d6000803e3d6000fd5b505050506040513d602081101561139b57600080fd5b50516040805163d21220a760e01b815290519192506000916001600160a01b0385169163d21220a7916004808301926020929190829003018186803b1580156113e357600080fd5b505afa1580156113f7573d6000803e3d6000fd5b505050506040513d602081101561140d57600080fd5b505190506001600160a01b038216600080516020612149833981519152148061144c57506001600160a01b038116600080516020612149833981519152145b156115655760006001600160a01b038316600080516020612149833981519152146114775782611479565b815b90506000611488876002610fd8565b90506000611497838330611de4565b90506114a283610f1e565b7305ff2b0db69458a0750badebc4f9e13add608c7f63f305d7196114c68a85611092565b604080516001600160e01b031960e085901b1681526001600160a01b0380891660048301526024820187905260006044830181905260648301528c1660848201524260a4820152905160c480830192606092919082900301818588803b15801561152f57600080fd5b505af1158015611543573d6000803e3d6000fd5b50505050506040513d606081101561155a57600080fd5b506116709350505050565b6000611572866002610fd8565b90506000611581848330611de4565b90506000611599846115938a86611092565b30611de4565b90506115a485610f1e565b6115ad84610f1e565b6040805162e8e33760e81b81526001600160a01b0387811660048301528681166024830152604482018590526064820184905260006084830181905260a48301819052908a1660c48301524260e483015291517305ff2b0db69458a0750badebc4f9e13add608c7f9263e8e337009261010480820193606093909283900390910190829087803b15801561164057600080fd5b505af1158015611654573d6000803e3d6000fd5b505050506040513d606081101561166a57600080fd5b50505050505b505050505050565b3390565b6001600160a01b0381166116c15760405162461bcd60e51b81526004018080602001828103825260268152602001806121696026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6060611771826040518060400160405280602081526020017f5361666542455032303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611f6e9092919063ffffffff16565b80519091501561057a5780806020019051602081101561179057600080fd5b505161057a5760405162461bcd60e51b815260040180806020018281038252602a81526020018061211f602a913960400191505060405180910390fd5b801580611853575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b15801561182557600080fd5b505afa158015611839573d6000803e3d6000fd5b505050506040513d602081101561184f57600080fd5b5051155b61188e5760405162461bcd60e51b815260040180806020018281038252603681526020018061218f6036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b17905261057a90849061171c565b6000818361196c5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611931578181015183820152602001611919565b50505050905090810190601f16801561195e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161197857fe5b0495945050505050565b6040805160028082526060808301845260009390929190602083019080368337019050509050600080516020612149833981519152816000815181106119c457fe5b60200260200101906001600160a01b031690816001600160a01b03168152505084816001815181106119f257fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060607305ff2b0db69458a0750badebc4f9e13add608c7f6001600160a01b03166338ed17398660008588426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b0316815260200183815260200182810382528581815181526020019150805190602001906020028083836000838110156111ff5781810151838201526020016111e7565b60408051600280825260608083018452600093909291906020830190803683370190505090508481600081518110611ae057fe5b60200260200101906001600160a01b031690816001600160a01b031681525050600080516020612149833981519152816001815181106119f257fe5b60408051600380825260808201909252600091606091906020820183803683370190505090508581600081518110611b5057fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060008051602061214983398151915281600181518110611b8c57fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508381600281518110611bba57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060607305ff2b0db69458a0750badebc4f9e13add608c7f6001600160a01b03166338ed17398760008588426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015611c75578181015183820152602001611c5d565b505050509050019650505050505050600060405180830381600087803b158015611c9e57600080fd5b505af1158015611cb2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015611cdb57600080fd5b8101908080516040519392919084640100000000821115611cfb57600080fd5b908301906020820185811115611d1057600080fd5b8251866020820283011164010000000082111715611d2d57600080fd5b82525081516020918201928201910280838360005b83811015611d5a578181015183820152602001611d42565b50505050905001604052505050905080600281518110611d7657fe5b602002602001015192505050949350505050565b60008184841115611ddc5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611931578181015183820152602001611919565b505050900390565b604080516002808252606080830184526000939092919060208301908036833701905050905060008051602061214983398151915281600081518110611e2657fe5b60200260200101906001600160a01b031690816001600160a01b0316815250508481600181518110611e5457fe5b60200260200101906001600160a01b031690816001600160a01b03168152505060607305ff2b0db69458a0750badebc4f9e13add608c7f6001600160a01b0316637ff36ab58660008588426040518663ffffffff1660e01b81526004018085815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015611f09578181015183820152602001611ef1565b50505050905001955050505050506000604051808303818588803b158015611f3057600080fd5b505af1158015611f44573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052602081101561126557600080fd5b606061108a84846000856060611f83856120e5565b611fd4576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b602083106120135780518252601f199092019160209182019101611ff4565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114612075576040519150601f19603f3d011682016040523d82523d6000602084013e61207a565b606091505b5091509150811561208e57915061108a9050565b80511561209e5780518082602001fd5b60405162461bcd60e51b8152602060048201818152865160248401528651879391928392604401919085019080838360008315611931578181015183820152602001611919565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061108a57505015159291505056fe5361666542455032303a204245503230206f7065726174696f6e20646964206e6f742073756363656564000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573735361666542455032303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220dfc127542cbe5abf0c24b07facf140e65f790333f42a37eeae2013c1e91eefaf64736f6c634300060c0033
Deployed ByteCode Sourcemap
1476:7942:11:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2778:1075;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2778:1075:11;;;;;;;;;;;;;;;;;:::i;:::-;;8788:354;;;;;;;;;;;;;:::i;8593:189::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8593:189:11;;:::i;2364:23::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2364:23:11;;:::i;:::-;;;;-1:-1:-1;;;;;2364:23:11;;;;;;;;;;;;;;9148:268;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9148:268:11;-1:-1:-1;;;;;9148:268:11;;:::i;1698:137:8:-;;;;;;;;;;;;;:::i;1075:77::-;;;;;;;;;;;;;:::i;2670:102:11:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2670:102:11;-1:-1:-1;;;;;2670:102:11;;:::i;:::-;;;;;;;;;;;;;;;;;;8382:205;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8382:205:11;-1:-1:-1;;;;;8382:205:11;;:::i;5224:729::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5224:729:11;;;;;;;;:::i;1984:107:8:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1984:107:8;-1:-1:-1;;;;;1984:107:8;;:::i;3859:100:11:-;;;;;;;;;;;;;;;;-1:-1:-1;3859:100:11;-1:-1:-1;;;;;3859:100:11;;:::i;2778:1075::-;2858:65;-1:-1:-1;;;;;2858:30:11;;2889:10;2909:4;2916:6;2858:30;:65::i;:::-;2933:28;2955:5;2933:21;:28::i;:::-;2976:11;2983:3;2976:6;:11::i;:::-;2972:875;;;3003:17;3036:3;3003:37;;3054:14;3071:4;-1:-1:-1;;;;;3071:11:11;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3071:13:11;3115;;;-1:-1:-1;;;3115:13:11;;;;3071;;-1:-1:-1;3098:14:11;;-1:-1:-1;;;;;3115:11:11;;;;;:13;;;;;3071;;3115;;;;;;;:11;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3115:13:11;;-1:-1:-1;;;;;;3146:15:11;;;;;;;;:34;;;3174:6;-1:-1:-1;;;;;3165:15:11;:5;-1:-1:-1;;;;;3165:15:11;;3146:34;3142:627;;;3246:13;3271:6;-1:-1:-1;;;;;3262:15:11;:5;-1:-1:-1;;;;;3262:15:11;;:33;;3289:6;3262:33;;;3280:6;3262:33;3246:49;;3313:28;3335:5;3313:21;:28::i;:::-;3359:15;3377:13;:6;3388:1;3377:10;:13::i;:::-;3359:31;;3408:16;3427:46;3433:5;3440:10;3452:5;3467:4;3427:5;:46::i;:::-;3408:65;-1:-1:-1;2268:42:11;3491:19;3511:5;3518;3525:22;:6;3536:10;3525;:22::i;:::-;3491:105;;;-1:-1:-1;;;;;;3491:105:11;;;;;;;-1:-1:-1;;;;;3491:105:11;;;;;;;;;;;;;;;;;;;;;;;;;3562:1;3491:105;;;;;;;;;;;;3568:10;3491:105;;;;3580:15;3491:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3142:627:11;;-1:-1:-1;;;;3142:627:11;;3635:14;3652:46;3669:5;3676:6;3692:4;3652:16;:46::i;:::-;3635:63;;3716:38;3727:3;3732:9;3743:10;3716;:38::i;:::-;3142:627;;2972:875;;;;;;3799:37;3805:5;3812:6;3820:3;3825:10;3799:5;:37::i;:::-;;2972:875;2778:1075;;;:::o;8788:354::-;1289:12:8;:10;:12::i;:::-;1279:6;;-1:-1:-1;;;;;1279:6:8;;;:22;;;1271:67;;;;;-1:-1:-1;;;1271:67:8;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1271:67:8;;;;;;;;;;;;;;;8839:6:11::1;8834:302;8851:6;:13:::0;8849:15;::::1;8834:302;;;8885:13;8901:6;8908:1;8901:9;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;8901:9:11::1;::::0;-1:-1:-1;8928:19:11;8924:33:::1;;8949:8;;;8924:33;8971:11;8992:5;-1:-1:-1::0;;;;;8985:23:11::1;;9017:4;8985:38;;;;;;;;;;;;;-1:-1:-1::0;;;;;8985:38:11::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;8985:38:11;;-1:-1:-1;9041:10:11;;9037:89:::1;;9071:40;9088:5;9095:6;9103:7;:5;:7::i;:::-;9071:16;:40::i;:::-;;9037:89;8834:302;;;8866:3;;8834:302;;;;8788:354::o:0;8593:189::-;1289:12:8;:10;:12::i;:::-;1279:6;;-1:-1:-1;;;;;1279:6:8;;;:22;;;1271:67;;;;;-1:-1:-1;;;1271:67:8;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1271:67:8;;;;;;;;;;;;;;;8651:13:11::1;8667:6;8674:1;8667:9;;;;;;;;;::::0;;;::::1;::::0;;;;;::::1;::::0;-1:-1:-1;;;;;8667:9:11::1;8686:14:::0;;;8667:9;8686:14;;;;;;;:22;;-1:-1:-1;;8686:22:11::1;::::0;;8730:6:::1;8737:13:::0;;8667:9;;-1:-1:-1;8730:6:11;-1:-1:-1;;8737:15:11;;;8730:23;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;8718:6:::1;:9:::0;;-1:-1:-1;;;;;8730:23:11;;::::1;::::0;8725:1;;8718:9;::::1;;;;;;;;;;;;;:35;;;;;-1:-1:-1::0;;;;;8718:35:11::1;;;;;-1:-1:-1::0;;;;;8718:35:11::1;;;;;;8763:6;:12;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;8763:12:11;;;;;-1:-1:-1;;;;;;8763:12:11::1;::::0;;;;;-1:-1:-1;;8593:189:11:o;2364:23::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2364:23:11;;-1:-1:-1;2364:23:11;:::o;9148:268::-;1289:12:8;:10;:12::i;:::-;1279:6;;-1:-1:-1;;;;;1279:6:8;;;:22;;;1271:67;;;;;-1:-1:-1;;;1271:67:8;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1271:67:8;;;;;;;;;;;;;;;-1:-1:-1;;;;;9214:19:11;::::1;9210:118;;9257:7;:5;:7::i;:::-;-1:-1:-1::0;;;;;9249:25:11::1;:48;9275:21;9249:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;9311:7;;9210:118;9345:5;-1:-1:-1::0;;;;;9338:22:11::1;;9361:7;:5;:7::i;:::-;9370:38;::::0;;-1:-1:-1;;;9370:38:11;;9402:4:::1;9370:38;::::0;::::1;::::0;;;-1:-1:-1;;;;;9370:23:11;::::1;::::0;::::1;::::0;:38;;;;;::::1;::::0;;;;;;;;:23;:38;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;9370:38:11;9338:71:::1;::::0;;-1:-1:-1;;;;;;9338:71:11::1;::::0;;;;;;-1:-1:-1;;;;;9338:71:11;;::::1;;::::0;::::1;::::0;;;;;;;;;;;;;;9370:38:::1;::::0;9338:71;;;;;;;-1:-1:-1;9338:71:11;;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;1698:137:8::0;1289:12;:10;:12::i;:::-;1279:6;;-1:-1:-1;;;;;1279:6:8;;;:22;;;1271:67;;;;;-1:-1:-1;;;1271:67:8;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1271:67:8;;;;;;;;;;;;;;;1796:1:::1;1780:6:::0;;1759:40:::1;::::0;-1:-1:-1;;;;;1780:6:8;;::::1;::::0;1759:40:::1;::::0;1796:1;;1759:40:::1;1826:1;1809:19:::0;;-1:-1:-1;;;;;;1809:19:8::1;::::0;;1698:137::o;1075:77::-;1113:7;1139:6;-1:-1:-1;;;;;1139:6:8;1075:77;:::o;2670:102:11:-;-1:-1:-1;;;;;2748:17:11;2724:4;2748:17;;;:7;:17;;;;;;;;2747:18;;2670:102::o;8382:205::-;1289:12:8;:10;:12::i;:::-;1279:6;;-1:-1:-1;;;;;1279:6:8;;;:22;;;1271:67;;;;;-1:-1:-1;;;1271:67:8;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1271:67:8;;;;;;;;;;;;;;;-1:-1:-1;;;;;8460:14:11;::::1;8444:13;8460:14:::0;;;:7:::1;:14;::::0;;;;;;;;;-1:-1:-1;;8493:21:11;::::1;::::0;;::::1;::::0;;8460:14:::1;;:23;::::0;::::1;8524:57;;8552:6;:18:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;8552:18:11;;;;;::::1;::::0;;-1:-1:-1;;;;;;8552:18:11::1;-1:-1:-1::0;;;;;8552:18:11;::::1;;::::0;;8524:57:::1;1348:1:8;8382:205:11::0;:::o;5224:729::-;5287:65;-1:-1:-1;;;;;5287:30:11;;5318:10;5338:4;5345:6;5287:30;:65::i;:::-;5362:28;5384:5;5362:21;:28::i;:::-;5406:13;5413:5;5406:6;:13::i;:::-;5401:546;;5435:43;5452:5;5459:6;5467:10;5435:16;:43::i;:::-;;5401:546;;;5509:17;5542:5;5509:39;;5562:14;5579:4;-1:-1:-1;;;;;5579:11:11;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5579:13:11;5623;;;-1:-1:-1;;;5623:13:11;;;;5579;;-1:-1:-1;5606:14:11;;-1:-1:-1;;;;;5623:11:11;;;;;:13;;;;;5579;;5623;;;;;;;:11;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5623:13:11;;-1:-1:-1;;;;;;5654:14:11;;-1:-1:-1;;;;;;;;;;;5654:14:11;;:32;;-1:-1:-1;;;;;;5672:14:11;;-1:-1:-1;;;;;;;;;;;5672:14:11;5654:32;5650:287;;;2268:42;5706:25;-1:-1:-1;;;;;5732:12:11;;-1:-1:-1;;;;;;;;;;;5732:12:11;;:26;;5752:6;5732:26;;;5745:6;5732:26;5706:96;;;-1:-1:-1;;;;;;5706:96:11;;;;;;;-1:-1:-1;;;;;5706:96:11;;;;;;;;;;;;;5768:1;5706:96;;;;;;;;;;;;5774:10;5706:96;;;;5786:15;5706:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5650:287:11;;-1:-1:-1;5650:287:11;;5841:81;;;-1:-1:-1;;;5841:81:11;;-1:-1:-1;;;;;5841:81:11;;;;;;;;;;;;;;;;;;;5888:1;5841:81;;;;;;;;;;;;5894:10;5841:81;;;;5906:15;5841:81;;;;;;2268:42;;5841:22;;:81;;;;;;;;;;;;;;;;2268:42;5841:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5650:287:11;5401:546;;;5224:729;;:::o;1984:107:8:-;1289:12;:10;:12::i;:::-;1279:6;;-1:-1:-1;;;;;1279:6:8;;;:22;;;1271:67;;;;;-1:-1:-1;;;1271:67:8;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1271:67:8;;;;;;;;;;;;;;;2056:28:::1;2075:8;2056:18;:28::i;3859:100:11:-:0;3914:38;3925:3;3930:9;3941:10;3914;:38::i;888:241:9:-;1053:68;;;-1:-1:-1;;;;;1053:68:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1053:68:9;-1:-1:-1;;;1053:68:9;;;1026:96;;1046:5;;1026:19;:96::i;5959:213:11:-;6027:55;;;-1:-1:-1;;;6027:55:11;;6059:4;6027:55;;;;2268:42;6027:55;;;;;;-1:-1:-1;;;;;6027:23:11;;;;;:55;;;;;;;;;;;;;;:23;:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6027:55:11;6023:143;;6103:52;-1:-1:-1;;;;;6103:25:11;;2268:42;-1:-1:-1;;6103:25:11;:52::i;3132:130:10:-;3190:7;3216:39;3220:1;3223;3216:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;3209:46;3132:130;-1:-1:-1;;;3132:130:10:o;6524:386:11:-;6614:4;-1:-1:-1;;;;;6634:13:11;;-1:-1:-1;;;;;;;;;;;6634:13:11;6630:274;;;6670:40;6688:3;6693:6;6701:8;6670:17;:40::i;:::-;6663:47;;;;6630:274;-1:-1:-1;;;;;6731:11:11;;-1:-1:-1;;;;;;;;;;;6731:11:11;6727:177;;;6765:42;6783:5;6790:6;6798:8;6765:17;:42::i;6727:177::-;6845:48;6864:5;6871:6;6879:3;6884:8;6845:18;:48::i;6727:177::-;6524:386;;;;;;:::o;1322:134:10:-;1380:7;1406:43;1410:1;1413;1406:43;;;;;;;;;;;;;;;;;:3;:43::i;7259:334:11:-;7388:16;;;7402:1;7388:16;;;7364:21;7388:16;;;;;7348:4;;7364:21;;7388:16;7402:1;7388:16;;;;;;;;;;-1:-1:-1;7388:16:11;7364:40;;7424:5;7414:4;7419:1;7414:7;;;;;;;;;;;;;:15;-1:-1:-1;;;;;7414:15:11;;;-1:-1:-1;;;;;7414:15:11;;;;;-1:-1:-1;;;;;;;;;;;7439:4:11;7444:1;7439:7;;;;;;;;;;;;;:14;-1:-1:-1;;;;;7439:14:11;;;-1:-1:-1;;;;;7439:14:11;;;;;7463:21;2268:42;-1:-1:-1;;;;;7487:28:11;;7516:6;7524:1;7527:4;7533:8;7543:15;7487:72;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7487:72:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7487:72:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7487:72:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7463:96;;7576:7;7584:1;7576:10;;;;;;;;;;;;;;7569:17;;;;7259:334;;;;;:::o;3965:1253::-;4053:12;4060:4;4053:6;:12::i;:::-;4048:1164;;4081:40;4098:4;4104:6;4112:8;4081:16;:40::i;:::-;;4048:1164;;;4172:17;4205:4;4172:38;;4224:14;4241:4;-1:-1:-1;;;;;4241:11:11;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4241:13:11;4285;;;-1:-1:-1;;;4285:13:11;;;;4241;;-1:-1:-1;4268:14:11;;-1:-1:-1;;;;;4285:11:11;;;;;:13;;;;;4241;;4285;;;;;;;:11;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4285:13:11;;-1:-1:-1;;;;;;4316:14:11;;-1:-1:-1;;;;;;;;;;;4316:14:11;;:32;;-1:-1:-1;;;;;;4334:14:11;;-1:-1:-1;;;;;;;;;;;4334:14:11;4316:32;4312:890;;;4368:13;-1:-1:-1;;;;;4384:14:11;;-1:-1:-1;;;;;;;;;;;4384:14:11;:32;;4410:6;4384:32;;;4401:6;4384:32;4368:48;-1:-1:-1;4434:14:11;4451:13;:6;4462:1;4451:10;:13::i;:::-;4434:30;;4482:16;4501:49;4518:5;4525:9;4544:4;4501:16;:49::i;:::-;4482:68;;4569:28;4591:5;4569:21;:28::i;:::-;2268:42;4615:22;4646:21;:6;4657:9;4646:10;:21::i;:::-;4615:107;;;-1:-1:-1;;;;;;4615:107:11;;;;;;;-1:-1:-1;;;;;4615:107:11;;;;;;;;;;;;;4690:1;4615:107;;;;;;;;;;;;;;;;4706:15;4615:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4312:890:11;;-1:-1:-1;;;;4312:890:11;;4761:14;4778:13;:6;4789:1;4778:10;:13::i;:::-;4761:30;;4809:17;4829:50;4846:6;4854:9;4873:4;4829:16;:50::i;:::-;4809:70;-1:-1:-1;4897:17:11;4917:62;4934:6;4942:21;:6;4953:9;4942:10;:21::i;:::-;4973:4;4917:16;:62::i;:::-;4897:82;;4997:29;5019:6;4997:21;:29::i;:::-;5044;5066:6;5044:21;:29::i;:::-;5091:96;;;-1:-1:-1;;;5091:96:11;;-1:-1:-1;;;;;5091:96:11;;;;;;;;;;;;;;;;;;;;;;;;;;5155:1;5091:96;;;;;;;;;;;;;;;;;;;5171:15;5091:96;;;;;;2268:42;;5091:19;;:96;;;;;;;;;;;;;;;;;;2268:42;5091:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4312:890:11;4048:1164;;;3965:1253;;;:::o;780:96:2:-;859:10;780:96;:::o;2192:225:8:-;-1:-1:-1;;;;;2265:22:8;;2257:73;;;;-1:-1:-1;;;2257:73:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2366:6;;;2345:38;;-1:-1:-1;;;;;2345:38:8;;;;2366:6;;;2345:38;;;2393:6;:17;;-1:-1:-1;;;;;;2393:17:8;-1:-1:-1;;;;;2393:17:8;;;;;;;;;;2192:225::o;3145:763:9:-;3564:23;3590:69;3618:4;3590:69;;;;;;;;;;;;;;;;;3598:5;-1:-1:-1;;;;;3590:27:9;;;:69;;;;;:::i;:::-;3673:17;;3564:95;;-1:-1:-1;3673:21:9;3669:233;;3825:10;3814:30;;;;;;;;;;;;;;;-1:-1:-1;3814:30:9;3806:85;;;;-1:-1:-1;;;3806:85:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1389:656;1797:10;;;1796:62;;-1:-1:-1;1813:39:9;;;-1:-1:-1;;;1813:39:9;;1837:4;1813:39;;;;-1:-1:-1;;;;;1813:39:9;;;;;;;;;:15;;;;;;:39;;;;;;;;;;;;;;;:15;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1813:39:9;:44;1796:62;1775:163;;;;-1:-1:-1;;;1775:163:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1975:62;;;-1:-1:-1;;;;;1975:62:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1975:62:9;-1:-1:-1;;;1975:62:9;;;1948:90;;1968:5;;1948:19;:90::i;3744:302:10:-;3860:7;3894:12;3887:5;3879:28;;;;-1:-1:-1;;;3879:28:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3917:9;3933:1;3929;:5;;;;;;;3744:302;-1:-1:-1;;;;;3744:302:10:o;6916:337:11:-;7045:16;;;7059:1;7045:16;;;7021:21;7045:16;;;;;7006:4;;7021:21;;7045:16;7059:1;7045:16;;;;;;;;;;-1:-1:-1;7045:16:11;7021:40;;-1:-1:-1;;;;;;;;;;;7071:4:11;7076:1;7071:7;;;;;;;;;;;;;:14;-1:-1:-1;;;;;7071:14:11;;;-1:-1:-1;;;;;7071:14:11;;;;;7105:5;7095:4;7100:1;7095:7;;;;;;;;;;;;;:15;-1:-1:-1;;;;;7095:15:11;;;-1:-1:-1;;;;;7095:15:11;;;;;7120:21;2268:42;-1:-1:-1;;;;;7144:31:11;;7176:6;7184:1;7187:4;7193:8;7203:15;7144:75;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7144:75:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7599:339;7729:16;;;7743:1;7729:16;;;7705:21;7729:16;;;;;7689:4;;7705:21;;7729:16;7743:1;7729:16;;;;;;;;;;-1:-1:-1;7729:16:11;7705:40;;7765:5;7755:4;7760:1;7755:7;;;;;;;;;;;;;:15;-1:-1:-1;;;;;7755:15:11;;;-1:-1:-1;;;;;7755:15:11;;;;;-1:-1:-1;;;;;;;;;;;7780:4:11;7785:1;7780:7;;;;;;;7944:371;8085:16;;;8099:1;8085:16;;;;;;;;;8045:4;;8061:21;;8085:16;;;;8061:21;;8085:16;;;;;-1:-1:-1;8085:16:11;8061:40;;8121:4;8111;8116:1;8111:7;;;;;;;;;;;;;:14;-1:-1:-1;;;;;8111:14:11;;;-1:-1:-1;;;;;8111:14:11;;;;;-1:-1:-1;;;;;;;;;;;8135:4:11;8140:1;8135:7;;;;;;;;;;;;;:14;-1:-1:-1;;;;;8135:14:11;;;-1:-1:-1;;;;;8135:14:11;;;;;8169:2;8159:4;8164:1;8159:7;;;;;;;;;;;;;:12;-1:-1:-1;;;;;8159:12:11;;;-1:-1:-1;;;;;8159:12:11;;;;;8182:21;2268:42;-1:-1:-1;;;;;8206:31:11;;8238:6;8246:1;8249:4;8255:8;8265:15;8206:75;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8206:75:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8206:75:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8206:75:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8182:99;;8298:7;8306:1;8298:10;;;;;;;;;;;;;;8291:17;;;;7944:371;;;;;;:::o;1747:217:10:-;1863:7;1898:12;1890:6;;;;1882:29;;;;-1:-1:-1;;;1882:29:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1933:5:10;;;1747:217::o;6178:340:11:-;6305:16;;;6319:1;6305:16;;;6281:21;6305:16;;;;;6266:4;;6281:21;;6305:16;6319:1;6305:16;;;;;;;;;;-1:-1:-1;6305:16:11;6281:40;;-1:-1:-1;;;;;;;;;;;6331:4:11;6336:1;6331:7;;;;;;;;;;;;;:14;-1:-1:-1;;;;;6331:14:11;;;-1:-1:-1;;;;;6331:14:11;;;;;6365:5;6355:4;6360:1;6355:7;;;;;;;;;;;;;:15;-1:-1:-1;;;;;6355:15:11;;;-1:-1:-1;;;;;6355:15:11;;;;;6380:21;2268:42;-1:-1:-1;;;;;6404:28:11;;6441:5;6449:1;6452:4;6458:8;6468:15;6404:80;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6404:80:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6404:80:11;;;;;;;;;;;;;;3790:224:0;3923:12;3954:53;3977:6;3985:4;3991:1;3994:12;5403;5435:18;5446:6;5435:10;:18::i;:::-;5427:60;;;;;-1:-1:-1;;;5427:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;5558:12;5572:23;5599:6;-1:-1:-1;;;;;5599:11:0;5618:8;5628:4;5599:34;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5599:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5557:76;;;;5647:7;5643:580;;;5677:10;-1:-1:-1;5670:17:0;;-1:-1:-1;5670:17:0;5643:580;5788:17;;:21;5784:429;;6046:10;6040:17;6106:15;6093:10;6089:2;6085:19;6078:44;5995:145;6178:20;;-1:-1:-1;;;6178:20:0;;;;;;;;;;;;;;;;;6185:12;;6178:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;718:630;778:4;1251:20;;1084:66;1298:23;;;;;;:42;;-1:-1:-1;;1325:15:0;;;1290:51;-1:-1:-1;;718:630:0:o
Swarm Source
ipfs://dfc127542cbe5abf0c24b07facf140e65f790333f42a37eeae2013c1e91eefaf
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.