More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 167 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 17009340 | 594 days ago | IN | 0 ETH | 0.00054988 | ||||
Approve | 16070963 | 725 days ago | IN | 0 ETH | 0.00032468 | ||||
Approve | 15637901 | 786 days ago | IN | 0 ETH | 0.00026236 | ||||
Approve | 14532757 | 962 days ago | IN | 0 ETH | 0.00513139 | ||||
Transfer | 14482340 | 969 days ago | IN | 0 ETH | 0.00271865 | ||||
Transfer | 14475589 | 971 days ago | IN | 0 ETH | 0.00319688 | ||||
Transfer | 14475581 | 971 days ago | IN | 0 ETH | 0.00327691 | ||||
Transfer | 14460732 | 973 days ago | IN | 0 ETH | 0.00140096 | ||||
Approve | 14456192 | 974 days ago | IN | 0 ETH | 0.00523134 | ||||
Transfer | 14454012 | 974 days ago | IN | 0 ETH | 0.00107278 | ||||
Transfer | 14451426 | 974 days ago | IN | 0 ETH | 0.00355536 | ||||
Transfer | 14450634 | 974 days ago | IN | 0 ETH | 0.0026869 | ||||
Transfer | 14450625 | 974 days ago | IN | 0 ETH | 0.00295035 | ||||
Transfer | 14450615 | 974 days ago | IN | 0 ETH | 0.0037715 | ||||
Transfer | 14450430 | 974 days ago | IN | 0 ETH | 0.00389128 | ||||
Transfer | 14450366 | 974 days ago | IN | 0 ETH | 0.00309674 | ||||
Transfer | 14450352 | 974 days ago | IN | 0 ETH | 0.00506341 | ||||
Transfer | 14448291 | 975 days ago | IN | 0 ETH | 0.00147375 | ||||
Transfer | 14443030 | 976 days ago | IN | 0 ETH | 0.0021837 | ||||
Transfer | 14437234 | 977 days ago | IN | 0 ETH | 0.00467194 | ||||
Transfer | 14434464 | 977 days ago | IN | 0 ETH | 0.00100314 | ||||
Transfer | 14433438 | 977 days ago | IN | 0 ETH | 0.00419184 | ||||
Transfer | 14432955 | 977 days ago | IN | 0 ETH | 0.00228581 | ||||
Approve | 14432706 | 977 days ago | IN | 0 ETH | 0.00174578 | ||||
Transfer | 14431859 | 977 days ago | IN | 0 ETH | 0.00183638 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
14532757 | 962 days ago | 0.00011778 ETH | ||||
14532757 | 962 days ago | 0.00044938 ETH | ||||
14532757 | 962 days ago | 0.00030894 ETH | ||||
14532757 | 962 days ago | 0.00030894 ETH | ||||
14532757 | 962 days ago | 0.00188802 ETH | ||||
14532757 | 962 days ago | 0.00242621 ETH | ||||
14532757 | 962 days ago | 0.00022309 ETH | ||||
14532757 | 962 days ago | 0.00056412 ETH | ||||
14532757 | 962 days ago | 0.00038783 ETH | ||||
14532757 | 962 days ago | 0.00038783 ETH | ||||
14532757 | 962 days ago | 0.00237012 ETH | ||||
14532757 | 962 days ago | 0.00249532 ETH | ||||
14419328 | 979 days ago | 0.0001314 ETH | ||||
14419328 | 979 days ago | 0.00097032 ETH | ||||
14419328 | 979 days ago | 0.0006671 ETH | ||||
14419328 | 979 days ago | 0.0006671 ETH | ||||
14419328 | 979 days ago | 0.00407673 ETH | ||||
14419328 | 979 days ago | 0.00614094 ETH | ||||
14418517 | 979 days ago | 0.00013553 ETH | ||||
14418517 | 979 days ago | 0.00100962 ETH | ||||
14418517 | 979 days ago | 0.00069411 ETH | ||||
14418517 | 979 days ago | 0.00069411 ETH | ||||
14418517 | 979 days ago | 0.00424182 ETH | ||||
14418517 | 979 days ago | 0.00639851 ETH | ||||
14418214 | 979 days ago | 0.0001403 ETH |
Loading...
Loading
Contract Name:
BabyApeCoin
Compiler Version
v0.8.11+commit.d7f03943
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-03-17 */ // https://t.me/BabyApeCoinChat pragma solidity ^0.8.11; //SPDX-License-Identifier: none interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return payable(msg.sender); } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override 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. This is the value {ERC20} uses, unless this function is * overridden; * * 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 virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override 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 virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), 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 virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } 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 virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + 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 virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This 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 virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(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: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(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 virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This 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 virtual { 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 Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } 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) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @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"); (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"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { 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 assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 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 * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 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' 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( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - 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(IERC20 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, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } abstract 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() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual 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 virtual onlyOwner { _setOwner(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 virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } interface IUniswapV2Router01 { 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); } interface IUniswapV2Router02 is IUniswapV2Router01 { 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; } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { 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; } library SafeMathInt { function mul(int256 a, int256 b) internal pure returns (int256) { require(!(a == - 2**255 && b == -1) && !(b == - 2**255 && a == -1)); int256 c = a * b; require((b == 0) || (c / b == a)); return c; } function div(int256 a, int256 b) internal pure returns (int256) { require(!(a == - 2**255 && b == -1) && (b > 0)); return a / b; } function sub(int256 a, int256 b) internal pure returns (int256) { require((b >= 0 && a - b <= a) || (b < 0 && a - b > a)); return a - b; } function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0); return uint256(a); } } library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0); return b; } } library SafeMath { function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) return 0; uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: division by zero"); return a / b; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a / b; } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a % b; } } contract BabyApeCoin is Context, ERC20, Ownable { using SafeMath for uint256; using SafeERC20 for IERC20; using Address for address; IUniswapV2Router02 public uniswapV2Router; address public immutable uniswapV2Pair; bool private trading; bool private starting; bool private sendTokens; bool public burning; bool public swapping; address private marketingWallet; address private developmentWallet1; address private developmentWallet2; address private liquidityWallet; uint256 public swapTokensAtAmount; uint256 private _buyMarketingFee; uint256 private _buyDevelopmentFee; uint256 private _buyLiquidityFee; uint256 private buyMarketingFee; uint256 private buyDevelopmentFee; uint256 private buyLiquidityFee; uint256 private _sellMarketingFee; uint256 private _sellDevelopmentFee; uint256 private _sellLiquidityFee; uint256 private sellMarketingFee; uint256 private sellDevelopmentFee; uint256 private sellLiquidityFee; uint256 private swapPercent; uint256 private maxWalletPercent; uint256 private maxBuyPercent; uint256 private maxSellPercent; uint256 public _maxWallet; uint256 public _maxBuy; uint256 public _maxSell; uint256 public TotalSupply; uint256 public totalBuyFees; uint256 public totalSellFees; uint256 private constant DefaultTime = 30 days; mapping (address => bool) private _isExcludedFromFees; mapping (address => bool) public automatedMarketMakerPairs; mapping (address => bool) public _isBlacklisted; event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress); event ExcludeFromFees(address indexed account, bool isExcluded); event isElon(address indexed account, bool isExcluded); event blacklist(address indexed account, bool isBlacklisted); event ExcludeMultipleAccountsFromFees(address[] accounts, bool isExcluded); event tradingUpdated(bool _enabled); event burningUpdated(bool _enabled); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event ProductiongWalletUpdated(address indexed newbuybackWallet, address indexed oldbuybackWallet); event MarketingWalletUpdated(address indexed newMarketingWallet, address indexed oldMarketingWallet); event DevelopmentWalletUpdated(address indexed newDevelopmentWallet, address indexed oldDevelopmentWallet); event appWalletUpdated(address indexed newAppWallet, address indexed oldAppWallet); event LiquidityWalletUpdated(address indexed newLiquidityWallet, address indexed oldLiquidityWallet); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); event SendDividends( uint256 tokensSwapped, uint256 amount ); constructor() ERC20 ("BabyApeCoin", "BAPE") { //Only edit this section for tokenomics //=============================================================== //divisor is 100, 2 = 2% buyMarketingFee = 4; buyDevelopmentFee = 2; buyLiquidityFee = 3; sellMarketingFee = 5; sellDevelopmentFee = 3; sellLiquidityFee = 3; //divisor is 1000, 200 = 2% swapPercent = 5; //0.05% of total supply to be swapped during contract sell maxWalletPercent = 200; //2% max wallet maxBuyPercent = 100; //1% max buy maxSellPercent = 100; //1% max sell TotalSupply = 1000000000; //Set the total token supply sendTokens = false; //False to send ETH to marketing, true to send tokens to marketing liquidityWallet = owner(); marketingWallet = address(payable(0xd7cE2EeC83ce6015D2EE30acC46986EEaA9f1dcD)); developmentWallet1 = address(payable(0xF7F2c1668e9e2818A571c8E09D1aC7A12EA64067)); developmentWallet2 = address(payable(0x14A5114204b7a27a9d87de029cA16364cA0D72Da)); //=============================================================== swapTokensAtAmount = TotalSupply.mul(swapPercent).div(10000) * (10**18); _maxWallet = TotalSupply.mul(maxWalletPercent).div(10000) * (10**18); _maxBuy = TotalSupply.mul(maxBuyPercent).div(10000) * (10**18); _maxSell = TotalSupply.mul(maxSellPercent).div(10000) * (10**18); totalBuyFees = _buyMarketingFee.add(_buyDevelopmentFee).add(_buyLiquidityFee); totalSellFees = _sellMarketingFee.add(_sellDevelopmentFee).add(_sellLiquidityFee); IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); //0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3 Testnet //0x10ED43C718714eb63d5aA57B78B54704E256024E BSC Mainnet //0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D Ropsten //0xCDe540d7eAFE93aC5fE6233Bee57E1270D3E330F BakerySwap // Create a uniswap pair for this new token address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = _uniswapV2Pair; _setAutomatedMarketMakerPair(_uniswapV2Pair, true); // exclude from paying fees excludeFromFees(liquidityWallet, true); excludeFromFees(marketingWallet, true); excludeFromFees(developmentWallet1, true); excludeFromFees(developmentWallet2, true); excludeFromFees(address(this), true); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(owner(), TotalSupply * (10**18)); } receive() external payable { } function updateSwapAmount(uint256 amount) public onlyOwner { swapTokensAtAmount = amount * (10**18); } function updateUniswapV2Router(address newAddress) public onlyOwner { require(newAddress != address(uniswapV2Router), "BabyApeCoin: The router already has that address"); emit UpdateUniswapV2Router(newAddress, address(uniswapV2Router)); uniswapV2Router = IUniswapV2Router02(newAddress); } function excludeFromFees(address account, bool excluded) public onlyOwner { require(_isExcludedFromFees[account] != excluded, "BabyApeCoin: Account is already the value of 'excluded'"); _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function excludeMultipleFromFees(address[] calldata accounts, bool excluded) public onlyOwner { uint256 i = 0; while (i < accounts.length) { excludeFromFees(accounts[i], excluded); i++; } } function blacklistMultipleAccounts(address[] calldata accounts, bool blacklisted) public onlyOwner { uint256 i = 0; while (i < accounts.length) { _isBlacklisted[accounts[i]] = blacklisted; i++; } } function addToBlacklist(address account, bool blacklisted) public onlyOwner { require(_isBlacklisted[account] != blacklisted, "BabyApeCoin: Account is already the value of 'blacklisted'"); _isBlacklisted[account] = blacklisted; emit blacklist(account, blacklisted); } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair, "BabyApeCoin: The PancakeSwap pair cannot be removed from automatedMarketMakerPairs"); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { require(automatedMarketMakerPairs[pair] != value, "BabyApeCoin: Automated market maker pair is already set to that value"); automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } address private _liquidityTokenAddress; //Sets up the LP-Token Address required for LP Release function SetupLiquidityTokenAddress(address liquidityTokenAddress) public onlyOwner{ _liquidityTokenAddress=liquidityTokenAddress; _liquidityUnlockTime=block.timestamp+DefaultTime; } //////////////////////////////////////////////////////////////////////////////////////////////////////// //Liquidity Lock//////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////// //the timestamp when Liquidity unlocks uint256 private _liquidityUnlockTime; //Sets Liquidity Release to 20% at a time and prolongs liquidity Lock for a Week after Release. //Should be called once start was successful. bool public liquidityRelease10Percent; function TeamlimitLiquidityReleaseTo20Percent() public onlyOwner{ liquidityRelease10Percent=true; } function TeamUnlockLiquidityInSeconds(uint256 secondsUntilUnlock) public onlyOwner{ _prolongLiquidityLock(secondsUntilUnlock+block.timestamp); } function _prolongLiquidityLock(uint256 newUnlockTime) private{ // require new unlock time to be longer than old one require(newUnlockTime>_liquidityUnlockTime); _liquidityUnlockTime=newUnlockTime; } //Release Liquidity Tokens once unlock time is over function TeamReleaseLiquidity() public onlyOwner { //Only callable if liquidity Unlock time is over require(block.timestamp >= _liquidityUnlockTime, "Not yet unlocked"); IERC20 liquidityToken = IERC20(_liquidityTokenAddress); uint256 amount = liquidityToken.balanceOf(address(this)); if(liquidityRelease10Percent) { _liquidityUnlockTime=block.timestamp+DefaultTime; //regular liquidity release, only releases 20% at a time and locks liquidity for another month amount=amount*1/10; liquidityToken.transfer(liquidityWallet, amount); } else { //Liquidity release if something goes wrong at start //liquidityRelease20Percent should be called once everything is clear liquidityToken.transfer(liquidityWallet, amount); } } function updateLiquidityWallet(address newLiquidityWallet) public onlyOwner { require(newLiquidityWallet != liquidityWallet, "BabyApeCoin: The liquidity wallet is already this address"); excludeFromFees(newLiquidityWallet, true); emit LiquidityWalletUpdated(newLiquidityWallet, liquidityWallet); liquidityWallet = newLiquidityWallet; } function updateMarketingWallet(address newMarketingWallet) public onlyOwner { require(newMarketingWallet != marketingWallet, "BabyApeCoin: The marketing wallet is already this address"); excludeFromFees(newMarketingWallet, true); emit MarketingWalletUpdated(newMarketingWallet, marketingWallet); marketingWallet = newMarketingWallet; } function getLiquidityReleaseTimeInSeconds() public view returns (uint256){ if(block.timestamp<_liquidityUnlockTime){ return _liquidityUnlockTime-block.timestamp; } return 0; } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } function isBlacklisted(address account) public view returns (bool) { return _isBlacklisted[account]; } function tradingEnabled(bool _enabled) public onlyOwner { trading = _enabled; emit tradingUpdated(_enabled); } function burningEnabled(bool enabled) public onlyOwner { burning = enabled; emit burningUpdated(enabled); } function sendTokensToMarketing(bool enabled) public onlyOwner { sendTokens = enabled; } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if (from != owner() && to != owner() && to != address(0) && to != address(0xdead) && to != uniswapV2Pair && !_isExcludedFromFees[to] && !_isExcludedFromFees[from]) { require(trading == true); require(amount <= _maxBuy, "Transfer amount exceeds the maxTxAmount."); uint256 contractBalanceRecepient = balanceOf(to); require(contractBalanceRecepient + amount <= _maxWallet, "Exceeds maximum wallet token amount."); } if(amount == 0) { super._transfer(from, to, 0); return; } if(!swapping && automatedMarketMakerPairs[to] && from != address(uniswapV2Router) && from != owner() && to != owner() && !_isExcludedFromFees[to] && !_isExcludedFromFees[from]) { require(trading == true); require(amount <= _maxSell, "Sell transfer amount exceeds the maxSellTransactionAmount."); } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if(canSwap && !swapping && automatedMarketMakerPairs[to] && !_isExcludedFromFees[to] && !_isExcludedFromFees[from]) { contractTokenBalance = swapTokensAtAmount; if(burning) { if(balanceOf(address(this)).sub(swapTokensAtAmount) > swapTokensAtAmount) { uint256 burningAmount = swapTokensAtAmount; super._transfer(address(this), 0x000000000000000000000000000000000000dEaD, burningAmount); emit Transfer(address(this), 0x000000000000000000000000000000000000dEaD, burningAmount); } else { uint256 burningAmount = balanceOf(address(this)).sub(swapTokensAtAmount); super._transfer(address(this), 0x000000000000000000000000000000000000dEaD, burningAmount); emit Transfer(address(this), 0x000000000000000000000000000000000000dEaD, burningAmount); } } uint256 swapTokens; uint256 swapAmount = totalSellFees; uint256 liquidityAmount = contractTokenBalance.mul(_sellLiquidityFee).div(swapAmount); uint256 half = liquidityAmount.div(2); uint256 otherHalf = liquidityAmount.sub(half); swapping = true; if (swapAmount > 0 && _sellLiquidityFee > 0 && !sendTokens) { swapTokens = contractTokenBalance; swapTokensForEth(swapTokens); swapAmount = totalSellFees; if (_sellMarketingFee > 0) { uint256 marketingAmount = address(this).balance.mul(_sellMarketingFee).div(swapAmount); (bool success, ) = marketingWallet.call{value: marketingAmount}(""); require(success, "Failed to send marketing amount"); } } else if (swapAmount > 0 && _sellLiquidityFee > 0 && sendTokens) { swapTokens = contractTokenBalance; uint256 marketingAmount = swapTokens.mul(_sellMarketingFee).div(100); swapTokens = swapTokens.sub(marketingAmount); swapAmount = totalSellFees.sub(_sellMarketingFee); swapTokensForEth(swapTokens); if (_sellMarketingFee > 0) { super._transfer(address(this), marketingWallet, marketingAmount); } } if (_sellDevelopmentFee > 0) { uint256 developmentAmount = address(this).balance.mul(_sellDevelopmentFee).div(swapAmount); developmentAmount = developmentAmount.div(2); (bool success, ) = developmentWallet1.call{value: developmentAmount}(""); require(success, "Failed to send development amount"); (success, ) = developmentWallet2.call{value: developmentAmount}(""); require(success, "Failed to send development amount"); } if (_sellLiquidityFee > 0) { uint256 newBalance = address(this).balance.mul(_sellLiquidityFee).div(swapAmount); // add liquidity to uniswap addLiquidity(half, newBalance); emit SwapAndLiquify(otherHalf, newBalance, half); } swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; super._transfer(from, to, amount); } else if(!automatedMarketMakerPairs[to] && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) { takeFee = false; super._transfer(from, to, amount); } if(takeFee) { uint256 BuyFees = amount.mul(totalBuyFees).div(100); uint256 SellFees = amount.mul(totalSellFees).div(100); // if sell if(automatedMarketMakerPairs[to] && totalSellFees > 0) { amount = amount.sub(SellFees); super._transfer(from, address(this), SellFees); super._transfer(from, to, amount); } // if buy or wallet to wallet transfer else if(automatedMarketMakerPairs[from] && totalBuyFees > 0) { amount = amount.sub(BuyFees); super._transfer(from, address(this), BuyFees); super._transfer(from, to, amount); } else { super._transfer(from, to, amount); } } } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable address(this), block.timestamp ); } function addLP() external onlyOwner() { updateBuyFees(0,0,0); updateSellFees(0,0,0); trading = false; updateMaxWallet(TotalSupply); updateMaxBuySell((TotalSupply), (TotalSupply)); } function letsGoLive() external onlyOwner() { updateBuyFees(buyMarketingFee,buyDevelopmentFee,buyLiquidityFee); updateSellFees(sellMarketingFee,sellDevelopmentFee,sellLiquidityFee); updateMaxWallet(TotalSupply.mul(maxWalletPercent).div(10000)); updateMaxBuySell(TotalSupply.mul(maxBuyPercent).div(10000), TotalSupply.mul(maxSellPercent).div(10000)); trading = true; burning = false; starting = false; } function updateBuyFees(uint256 newBuyMarketingFee, uint256 newBuyDevelopmentFee, uint256 newBuyLiquidityFee) public onlyOwner { _buyMarketingFee = newBuyMarketingFee; _buyDevelopmentFee = newBuyDevelopmentFee; _buyLiquidityFee = newBuyLiquidityFee; totalFees(); } function updateSellFees( uint256 newSellMarketingFee, uint256 newSellDevelopmentFee, uint256 newSellLiquidityFee) public onlyOwner { _sellMarketingFee = newSellMarketingFee; _sellDevelopmentFee = newSellDevelopmentFee; _sellLiquidityFee = newSellLiquidityFee; totalFees(); } function updateMaxWallet(uint256 newMaxWallet) public onlyOwner { _maxWallet = newMaxWallet * (10**18); } function updateMaxBuySell(uint256 newMaxBuy, uint256 newMaxSell) public onlyOwner { _maxBuy = newMaxBuy * (10**18); _maxSell = newMaxSell * (10**18); } function totalFees() private { totalBuyFees = _buyMarketingFee.add(_buyDevelopmentFee).add(_buyLiquidityFee); totalSellFees = _sellMarketingFee.add(_sellDevelopmentFee).add(_sellLiquidityFee); } function withdrawRemainingETH(address account, uint256 percent) public onlyOwner { require(percent > 0 && percent <= 100); uint256 percentage = percent.div(100); uint256 balance = address(this).balance.mul(percentage); (bool success, ) = account.call{value: balance}(""); require(success, "Failed to withdraw ETH"); } function withdrawRemainingToken(address account) public onlyOwner { uint256 balance = balanceOf(address(this)); super._transfer(address(this), account, balance); } function withdrawRemainingERC20Token(address token, address account) public onlyOwner { ERC20 Token = ERC20(token); uint256 balance = Token.balanceOf(address(this)); Token.transfer(account, balance); } function burnTokenManual(uint256 amount) public onlyOwner { require(amount <= balanceOf(address(this)), "Amount cannot exceed tokens in contract"); super._transfer(address(this), 0x000000000000000000000000000000000000dEaD, amount * 10**18); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"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":"newDevelopmentWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldDevelopmentWallet","type":"address"}],"name":"DevelopmentWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeMultipleAccountsFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newLiquidityWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldLiquidityWallet","type":"address"}],"name":"LiquidityWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newMarketingWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldMarketingWallet","type":"address"}],"name":"MarketingWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newbuybackWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldbuybackWallet","type":"address"}],"name":"ProductiongWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SendDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAppWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldAppWallet","type":"address"}],"name":"appWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"blacklist","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"_enabled","type":"bool"}],"name":"burningUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"isElon","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"_enabled","type":"bool"}],"name":"tradingUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"liquidityTokenAddress","type":"address"}],"name":"SetupLiquidityTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TeamReleaseLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"secondsUntilUnlock","type":"uint256"}],"name":"TeamUnlockLiquidityInSeconds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TeamlimitLiquidityReleaseTo20Percent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"blacklisted","type":"bool"}],"name":"addToBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"blacklisted","type":"bool"}],"name":"blacklistMultipleAccounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnTokenManual","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burning","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"burningEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getLiquidityReleaseTimeInSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"letsGoLive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"liquidityRelease10Percent","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"sendTokensToMarketing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapping","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"tradingEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"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"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBuyMarketingFee","type":"uint256"},{"internalType":"uint256","name":"newBuyDevelopmentFee","type":"uint256"},{"internalType":"uint256","name":"newBuyLiquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiquidityWallet","type":"address"}],"name":"updateLiquidityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxBuy","type":"uint256"},{"internalType":"uint256","name":"newMaxSell","type":"uint256"}],"name":"updateMaxBuySell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxWallet","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"newSellDevelopmentFee","type":"uint256"},{"internalType":"uint256","name":"newSellLiquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateUniswapV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"withdrawRemainingERC20Token","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"withdrawRemainingETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"withdrawRemainingToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a06040523480156200001157600080fd5b50604080518082018252600b81526a2130b13ca0b832a1b7b4b760a91b6020808301918252835180850190945260048452634241504560e01b908401528151919291620000619160039162000a0b565b5080516200007790600490602084019062000a0b565b505050620000946200008e6200052f60201b60201c565b62000533565b6004600f5560026010556003601181905560056015819055601682905560179190915560185560c86019556064601a819055601b55633b9aca00601f556006805460ff60b01b19169055620000f16005546001600160a01b031690565b600a80546001600160a01b03929092166001600160a01b031992831617905560078054821673d7ce2eec83ce6015d2ee30acc46986eeaa9f1dcd17905560088054821673f7f2c1668e9e2818a571c8e09d1ac7a12ea64067179055600980549091167314a5114204b7a27a9d87de029ca16364ca0d72da179055601854601f54620001a89161271091620001949162001f0562000585602090811b91909117901c565b6200061960201b62001f8b1790919060201c565b620001bc90670de0b6b3a764000062000ac7565b600b81905550620001e761271062000194601954601f546200058560201b62001f051790919060201c565b620001fb90670de0b6b3a764000062000ac7565b601c819055506200022661271062000194601a54601f546200058560201b62001f051790919060201c565b6200023a90670de0b6b3a764000062000ac7565b601d819055506200026561271062000194601b54601f546200058560201b62001f051790919060201c565b6200027990670de0b6b3a764000062000ac7565b601e81905550620002b8600e54620002a4600d54600c546200067860201b62001fe61790919060201c565b6200067860201b62001fe61790919060201c565b6020908155601454601354601254620002e093620002a4929062001fe662000678821b17901c565b6021819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000340573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000366919062000ae9565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003b4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003da919062000ae9565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000428573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044e919062000ae9565b600680546001600160a01b0319166001600160a01b03858116919091179091558116608052905062000482816001620006db565b600a546200049b906001600160a01b03166001620007d4565b600754620004b4906001600160a01b03166001620007d4565b600854620004cd906001600160a01b03166001620007d4565b600954620004e6906001600160a01b03166001620007d4565b620004f3306001620007d4565b620005276200050a6005546001600160a01b031690565b601f546200052190670de0b6b3a764000062000ac7565b62000926565b505062000b8f565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600082620005965750600062000613565b6000620005a4838562000ac7565b905082620005b3858362000b14565b14620006105760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b90505b92915050565b60008082116200066c5760405162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015260640162000607565b62000610828462000b14565b60008062000687838562000b37565b905083811015620006105760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640162000607565b6001600160a01b03821660009081526023602052604090205460ff1615158115151415620007805760405162461bcd60e51b815260206004820152604560248201527f42616279417065436f696e3a204175746f6d61746564206d61726b6574206d6160448201527f6b6572207061697220697320616c72656164792073657420746f20746861742060648201526476616c756560d81b608482015260a40162000607565b6001600160a01b038216600081815260236020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b03163314620008305760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000607565b6001600160a01b03821660009081526022602052604090205460ff1615158115151415620008c75760405162461bcd60e51b815260206004820152603760248201527f42616279417065436f696e3a204163636f756e7420697320616c72656164792060448201527f7468652076616c7565206f6620276578636c7564656427000000000000000000606482015260840162000607565b6001600160a01b038216600081815260226020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382166200097e5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000607565b806002600082825462000992919062000b37565b90915550506001600160a01b03821660009081526020819052604081208054839290620009c190849062000b37565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b82805462000a199062000b52565b90600052602060002090601f01602090048101928262000a3d576000855562000a88565b82601f1062000a5857805160ff191683800117855562000a88565b8280016001018555821562000a88579182015b8281111562000a8857825182559160200191906001019062000a6b565b5062000a9692915062000a9a565b5090565b5b8082111562000a96576000815560010162000a9b565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562000ae45762000ae462000ab1565b500290565b60006020828403121562000afc57600080fd5b81516001600160a01b03811681146200061057600080fd5b60008262000b3257634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111562000b4d5762000b4d62000ab1565b500190565b600181811c9082168062000b6757607f821691505b6020821081141562000b8957634e487b7160e01b600052602260045260246000fd5b50919050565b6080516136f662000bb9600039600081816105dd01528181611504015261221501526136f66000f3fe60806040526004361061037a5760003560e01c80638da5cb5b116101d1578063bea1cb2711610102578063d966bcf1116100a0578063f298f42c1161006f578063f298f42c14610a3a578063f2fde38b14610a5a578063f3ebe96514610a7a578063fe575a8714610a9457600080fd5b8063d966bcf11461099e578063dd62ed3e146109be578063e2f4560514610a04578063e37ba8f914610a1a57600080fd5b8063c23be47f116100dc578063c23be47f1461093e578063c3a3c0321461095e578063d0a3981414610973578063d63607d81461098957600080fd5b8063bea1cb27146108de578063c0246668146108fe578063c17b5b8c1461091e57600080fd5b8063a9dec4361161016f578063b62496f511610149578063b62496f514610863578063b9e9370014610893578063bc37e1a3146108a9578063be874c92146108be57600080fd5b8063a9dec4361461080d578063aacebbe314610823578063ab3b55451461084357600080fd5b8063a44b47f7116101ab578063a44b47f714610797578063a457c2d7146107ad578063a7b97fa9146107cd578063a9059cbb146107ed57600080fd5b80638da5cb5b1461074457806395d89b41146107625780639a7a23d61461077757600080fd5b8063313ce567116102ab578063553ad0dc11610249578063715018a611610223578063715018a6146106d95780637bbf8df9146106ee5780638095d5641461070e57806382247ec01461072e57600080fd5b8063553ad0dc1461067957806365b8dbc01461069957806370a08231146106b957600080fd5b806349bd5a5e1161028557806349bd5a5e146105cb5780634c12b33f146105ff5780634cdaf0ae146106205780634fbee1931461064057600080fd5b8063313ce5671461057a57806339509351146105965780633c7a309b146105b657600080fd5b80631c499ab011610318578063270924c7116102f2578063270924c714610505578063296d3de01461051a5780632c889d181461053a5780632de3f9561461055a57600080fd5b80631c499ab0146104955780631cdd3be3146104b557806323b872dd146104e557600080fd5b80631694505e116103545780631694505e146104055780631732cded1461043d57806318160ddd1461045e57806319fb3e7a1461047357600080fd5b806306fdde03146103865780630773d31d146103b1578063095ea7b3146103d557600080fd5b3661038157005b600080fd5b34801561039257600080fd5b5061039b610acd565b6040516103a8919061316b565b60405180910390f35b3480156103bd57600080fd5b506103c7601e5481565b6040519081526020016103a8565b3480156103e157600080fd5b506103f56103f03660046131d5565b610b5f565b60405190151581526020016103a8565b34801561041157600080fd5b50600654610425906001600160a01b031681565b6040516001600160a01b0390911681526020016103a8565b34801561044957600080fd5b506006546103f590600160c01b900460ff1681565b34801561046a57600080fd5b506002546103c7565b34801561047f57600080fd5b5061049361048e366004613201565b610b76565b005b3480156104a157600080fd5b506104936104b036600461323a565b610c94565b3480156104c157600080fd5b506103f56104d0366004613253565b60246020526000908152604090205460ff1681565b3480156104f157600080fd5b506103f5610500366004613270565b610cd6565b34801561051157600080fd5b50610493610d80565b34801561052657600080fd5b506104936105353660046132b1565b610e47565b34801561054657600080fd5b5061049361055536600461323a565b610e9f565b34801561056657600080fd5b506104936105753660046132e1565b610ede565b34801561058657600080fd5b50604051601281526020016103a8565b3480156105a257600080fd5b506103f56105b13660046131d5565b610f60565b3480156105c257600080fd5b50610493610f9c565b3480156105d757600080fd5b506104257f000000000000000000000000000000000000000000000000000000000000000081565b34801561060b57600080fd5b506006546103f590600160b81b900460ff1681565b34801561062c57600080fd5b5061049361063b366004613253565b61116d565b34801561064c57600080fd5b506103f561065b366004613253565b6001600160a01b031660009081526022602052604090205460ff1690565b34801561068557600080fd5b506104936106943660046132e1565b6111c5565b3480156106a557600080fd5b506104936106b4366004613253565b61123c565b3480156106c557600080fd5b506103c76106d4366004613253565b61133a565b3480156106e557600080fd5b50610493611355565b3480156106fa57600080fd5b506104936107093660046131d5565b61138b565b34801561071a57600080fd5b506104936107293660046132fe565b611488565b34801561073a57600080fd5b506103c7601c5481565b34801561075057600080fd5b506005546001600160a01b0316610425565b34801561076e57600080fd5b5061039b6114c9565b34801561078357600080fd5b5061049361079236600461332a565b6114d8565b3480156107a357600080fd5b506103c7601f5481565b3480156107b957600080fd5b506103f56107c83660046131d5565b6115cf565b3480156107d957600080fd5b506104936107e8366004613358565b611668565b3480156107f957600080fd5b506103f56108083660046131d5565b611709565b34801561081957600080fd5b506103c7601d5481565b34801561082f57600080fd5b5061049361083e366004613253565b611716565b34801561084f57600080fd5b5061049361085e36600461323a565b611828565b34801561086f57600080fd5b506103f561087e366004613253565b60236020526000908152604090205460ff1681565b34801561089f57600080fd5b506103c760205481565b3480156108b557600080fd5b5061049361186a565b3480156108ca57600080fd5b506104936108d936600461323a565b6118d5565b3480156108ea57600080fd5b506104936108f9366004613358565b611985565b34801561090a57600080fd5b5061049361091936600461332a565b6119fc565b34801561092a57600080fd5b506104936109393660046132fe565b611b1b565b34801561094a57600080fd5b50610493610959366004613253565b611b5c565b34801561096a57600080fd5b506103c7611b9e565b34801561097f57600080fd5b506103c760215481565b34801561099557600080fd5b50610493611bc3565b3480156109aa57600080fd5b506104936109b93660046132e1565b611bfc565b3480156109ca57600080fd5b506103c76109d9366004613201565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a1057600080fd5b506103c7600b5481565b348015610a2657600080fd5b50610493610a35366004613253565b611c44565b348015610a4657600080fd5b50610493610a5536600461332a565b611d56565b348015610a6657600080fd5b50610493610a75366004613253565b611e6d565b348015610a8657600080fd5b506027546103f59060ff1681565b348015610aa057600080fd5b506103f5610aaf366004613253565b6001600160a01b031660009081526024602052604090205460ff1690565b606060038054610adc906133de565b80601f0160208091040260200160405190810160405280929190818152602001828054610b08906133de565b8015610b555780601f10610b2a57610100808354040283529160200191610b55565b820191906000526020600020905b815481529060010190602001808311610b3857829003601f168201915b5050505050905090565b6000610b6c338484612045565b5060015b92915050565b6005546001600160a01b03163314610ba95760405162461bcd60e51b8152600401610ba090613419565b60405180910390fd5b6040516370a0823160e01b815230600482015282906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610bf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c16919061344e565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509083169063a9059cbb906044016020604051808303816000875af1158015610c69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8d9190613467565b5050505050565b6005546001600160a01b03163314610cbe5760405162461bcd60e51b8152600401610ba090613419565b610cd081670de0b6b3a764000061349a565b601c5550565b6000610ce3848484612169565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610d685760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610ba0565b610d758533858403612045565b506001949350505050565b6005546001600160a01b03163314610daa5760405162461bcd60e51b8152600401610ba090613419565b610dbb600f54601054601154611488565b610dcc601554601654601754611b1b565b610df26104b0612710610dec601954601f54611f0590919063ffffffff16565b90611f8b565b610e2f610e12612710610dec601a54601f54611f0590919063ffffffff16565b610535612710610dec601b54601f54611f0590919063ffffffff16565b6006805463ff00ffff60a01b1916600160a01b179055565b6005546001600160a01b03163314610e715760405162461bcd60e51b8152600401610ba090613419565b610e8382670de0b6b3a764000061349a565b601d55610e9881670de0b6b3a764000061349a565b601e555050565b6005546001600160a01b03163314610ec95760405162461bcd60e51b8152600401610ba090613419565b610edb610ed642836134b9565b612c20565b50565b6005546001600160a01b03163314610f085760405162461bcd60e51b8152600401610ba090613419565b60068054821515600160a01b0260ff60a01b199091161790556040517fd92566aec3731c43bc7ec6a90c119de538d83f226f301b29d5139a4b670abfb290610f5590831515815260200190565b60405180910390a150565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610b6c918590610f979086906134b9565b612045565b6005546001600160a01b03163314610fc65760405162461bcd60e51b8152600401610ba090613419565b60265442101561100b5760405162461bcd60e51b815260206004820152601060248201526f139bdd081e595d081d5b9b1bd8dad95960821b6044820152606401610ba0565b6025546040516370a0823160e01b81523060048201526001600160a01b039091169060009082906370a0823190602401602060405180830381865afa158015611058573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107c919061344e565b60275490915060ff16156111305761109762278d00426134b9565b602655600a6110a782600161349a565b6110b191906134d1565b600a5460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810183905291925083169063a9059cbb906044015b6020604051808303816000875af1158015611107573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112b9190613467565b505050565b600a5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb906044016110e8565b5050565b6005546001600160a01b031633146111975760405162461bcd60e51b8152600401610ba090613419565b602580546001600160a01b0319166001600160a01b0383161790556111bf62278d00426134b9565b60265550565b6005546001600160a01b031633146111ef5760405162461bcd60e51b8152600401610ba090613419565b60068054821515600160b81b0260ff60b81b199091161790556040517f6225104598bca03a23e6426058f298b0ff0510d263e9c7c61317dbbf41da0eb090610f5590831515815260200190565b6005546001600160a01b031633146112665760405162461bcd60e51b8152600401610ba090613419565b6006546001600160a01b03828116911614156112dd5760405162461bcd60e51b815260206004820152603060248201527f42616279417065436f696e3a2054686520726f7574657220616c72656164792060448201526f6861732074686174206164647265737360801b6064820152608401610ba0565b6006546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b0316331461137f5760405162461bcd60e51b8152600401610ba090613419565b6113896000612c33565b565b6005546001600160a01b031633146113b55760405162461bcd60e51b8152600401610ba090613419565b6000811180156113c6575060648111155b6113cf57600080fd5b60006113dc826064611f8b565b905060006113ea4783611f05565b90506000846001600160a01b03168260405160006040518083038185875af1925050503d8060008114611439576040519150601f19603f3d011682016040523d82523d6000602084013e61143e565b606091505b5050905080610c8d5760405162461bcd60e51b815260206004820152601660248201527508cc2d2d8cac840e8de40eed2e8d0c8e4c2ee408aa8960531b6044820152606401610ba0565b6005546001600160a01b031633146114b25760405162461bcd60e51b8152600401610ba090613419565b600c839055600d829055600e81905561112b612c85565b606060048054610adc906133de565b6005546001600160a01b031633146115025760405162461bcd60e51b8152600401610ba090613419565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156115c55760405162461bcd60e51b815260206004820152605260248201527f42616279417065436f696e3a205468652050616e63616b65537761702070616960448201527f722063616e6e6f742062652072656d6f7665642066726f6d206175746f6d617460648201527165644d61726b65744d616b6572506169727360701b608482015260a401610ba0565b6111698282612cc8565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156116515760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610ba0565b61165e3385858403612045565b5060019392505050565b6005546001600160a01b031633146116925760405162461bcd60e51b8152600401610ba090613419565b60005b828110156117035781602460008686858181106116b4576116b46134f3565b90506020020160208101906116c99190613253565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806116fb81613509565b915050611695565b50505050565b6000610b6c338484612169565b6005546001600160a01b031633146117405760405162461bcd60e51b8152600401610ba090613419565b6007546001600160a01b03828116911614156117c05760405162461bcd60e51b815260206004820152603960248201527f42616279417065436f696e3a20546865206d61726b6574696e672077616c6c656044820152787420697320616c72656164792074686973206164647265737360381b6064820152608401610ba0565b6117cb8160016119fc565b6007546040516001600160a01b03918216918316907f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6790600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146118525760405162461bcd60e51b8152600401610ba090613419565b61186481670de0b6b3a764000061349a565b600b5550565b6005546001600160a01b031633146118945760405162461bcd60e51b8152600401610ba090613419565b6118a16000806000611488565b6118ae6000806000611b1b565b6006805460ff60a01b19169055601f546118c790610c94565b611389601f54601f54610e47565b6005546001600160a01b031633146118ff5760405162461bcd60e51b8152600401610ba090613419565b6119083061133a565b8111156119675760405162461bcd60e51b815260206004820152602760248201527f416d6f756e742063616e6e6f742065786365656420746f6b656e7320696e20636044820152661bdb9d1c9858dd60ca1b6064820152608401610ba0565b610edb3061dead61198084670de0b6b3a764000061349a565b612dbf565b6005546001600160a01b031633146119af5760405162461bcd60e51b8152600401610ba090613419565b60005b82811015611703576119ea8484838181106119cf576119cf6134f3565b90506020020160208101906119e49190613253565b836119fc565b806119f481613509565b9150506119b2565b6005546001600160a01b03163314611a265760405162461bcd60e51b8152600401610ba090613419565b6001600160a01b03821660009081526022602052604090205460ff1615158115151415611abb5760405162461bcd60e51b815260206004820152603760248201527f42616279417065436f696e3a204163636f756e7420697320616c72656164792060448201527f7468652076616c7565206f6620276578636c75646564270000000000000000006064820152608401610ba0565b6001600160a01b038216600081815260226020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791015b60405180910390a25050565b6005546001600160a01b03163314611b455760405162461bcd60e51b8152600401610ba090613419565b60128390556013829055601481905561112b612c85565b6005546001600160a01b03163314611b865760405162461bcd60e51b8152600401610ba090613419565b6000611b913061133a565b9050611169308383612dbf565b6000602654421015611bbd5742602654611bb89190613524565b905090565b50600090565b6005546001600160a01b03163314611bed5760405162461bcd60e51b8152600401610ba090613419565b6027805460ff19166001179055565b6005546001600160a01b03163314611c265760405162461bcd60e51b8152600401610ba090613419565b60068054911515600160b01b0260ff60b01b19909216919091179055565b6005546001600160a01b03163314611c6e5760405162461bcd60e51b8152600401610ba090613419565b600a546001600160a01b0382811691161415611cee5760405162461bcd60e51b815260206004820152603960248201527f42616279417065436f696e3a20546865206c69717569646974792077616c6c656044820152787420697320616c72656164792074686973206164647265737360381b6064820152608401610ba0565b611cf98160016119fc565b600a546040516001600160a01b03918216918316907f6080503d1da552ae8eb4b7b8a20245d9fabed014180510e7d1a05ea08fdb0f3e90600090a3600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611d805760405162461bcd60e51b8152600401610ba090613419565b6001600160a01b03821660009081526024602052604090205460ff1615158115151415611e155760405162461bcd60e51b815260206004820152603a60248201527f42616279417065436f696e3a204163636f756e7420697320616c72656164792060448201527f7468652076616c7565206f662027626c61636b6c6973746564270000000000006064820152608401610ba0565b6001600160a01b038216600081815260246020908152604091829020805460ff191685151590811790915591519182527f404e512903f1ca111aaa7db3f548b1969d86eda85df18088582f13feba1e412c9101611b0f565b6005546001600160a01b03163314611e975760405162461bcd60e51b8152600401610ba090613419565b6001600160a01b038116611efc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ba0565b610edb81612c33565b600082611f1457506000610b70565b6000611f20838561349a565b905082611f2d85836134d1565b14611f845760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610ba0565b9392505050565b6000808211611fdc5760405162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f0000000000006044820152606401610ba0565b611f8482846134d1565b600080611ff383856134b9565b905083811015611f845760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610ba0565b6001600160a01b0383166120a75760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ba0565b6001600160a01b0382166121085760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ba0565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661218f5760405162461bcd60e51b8152600401610ba09061353b565b6001600160a01b0382166121b55760405162461bcd60e51b8152600401610ba090613580565b6005546001600160a01b038481169116148015906121e157506005546001600160a01b03838116911614155b80156121f557506001600160a01b03821615155b801561220c57506001600160a01b03821661dead14155b801561224a57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b801561226f57506001600160a01b03821660009081526022602052604090205460ff16155b801561229457506001600160a01b03831660009081526022602052604090205460ff16155b1561238e57600654600160a01b900460ff1615156001146122b457600080fd5b601d548111156123175760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610ba0565b60006123228361133a565b601c5490915061233283836134b9565b111561238c5760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b6064820152608401610ba0565b505b8061239f5761112b83836000612dbf565b600654600160c01b900460ff161580156123d157506001600160a01b03821660009081526023602052604090205460ff165b80156123eb57506006546001600160a01b03848116911614155b801561240557506005546001600160a01b03848116911614155b801561241f57506005546001600160a01b03838116911614155b801561244457506001600160a01b03821660009081526022602052604090205460ff16155b801561246957506001600160a01b03831660009081526022602052604090205460ff16155b1561250157600654600160a01b900460ff16151560011461248957600080fd5b601e548111156125015760405162461bcd60e51b815260206004820152603a60248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201527f206d617853656c6c5472616e73616374696f6e416d6f756e742e0000000000006064820152608401610ba0565b600061250c3061133a565b600b549091508110801590819061252d5750600654600160c01b900460ff16155b801561255157506001600160a01b03841660009081526023602052604090205460ff165b801561257657506001600160a01b03841660009081526022602052604090205460ff16155b801561259b57506001600160a01b03851660009081526022602052604090205460ff16155b15612a2657600b54600654909250600160b81b900460ff161561267e57600b546125ce816125c83061133a565b90612f13565b111561262357600b546125e43061dead83612dbf565b60405181815261dead9030907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35061267e565b6000612634600b546125c83061133a565b90506126433061dead83612dbf565b60405181815261dead9030907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505b600080602154905060006126a182610dec60145488611f0590919063ffffffff16565b905060006126b0826002611f8b565b905060006126be8383612f13565b6006805460ff60c01b1916600160c01b179055905083158015906126e457506000601454115b80156126fa5750600654600160b01b900460ff16155b156127e45786945061270b85612f6f565b602154601254909450156127df57600061273485610dec60125447611f0590919063ffffffff16565b6007546040519192506000916001600160a01b039091169083908381818185875af1925050503d8060008114612786576040519150601f19603f3d011682016040523d82523d6000602084013e61278b565b606091505b50509050806127dc5760405162461bcd60e51b815260206004820152601f60248201527f4661696c656420746f2073656e64206d61726b6574696e6720616d6f756e74006044820152606401610ba0565b50505b612881565b6000841180156127f657506000601454115b801561280b5750600654600160b01b900460ff165b1561288157869450600061282f6064610dec60125489611f0590919063ffffffff16565b905061283b8682612f13565b9550612854601254602154612f1390919063ffffffff16565b945061285f86612f6f565b6012541561287f5760075461287f9030906001600160a01b031683612dbf565b505b601354156129a15760006128a485610dec60135447611f0590919063ffffffff16565b90506128b1816002611f8b565b6008546040519192506000916001600160a01b039091169083908381818185875af1925050503d8060008114612903576040519150601f19603f3d011682016040523d82523d6000602084013e612908565b606091505b50509050806129295760405162461bcd60e51b8152600401610ba0906135c3565b6009546040516001600160a01b03909116908390600081818185875af1925050503d8060008114612976576040519150601f19603f3d011682016040523d82523d6000602084013e61297b565b606091505b5050809150508061299e5760405162461bcd60e51b8152600401610ba0906135c3565b50505b60145415612a135760006129c485610dec60145447611f0590919063ffffffff16565b90506129d083826130c1565b60408051838152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a1505b50506006805460ff60c01b191690555050505b6006546001600160a01b03861660009081526022602052604090205460ff600160c01b909204821615911680612a7457506001600160a01b03851660009081526022602052604090205460ff165b15612a8c57506000612a87868686612dbf565b612b2b565b6001600160a01b03851660009081526023602052604090205460ff16158015612ace57506001600160a01b03861660009081526023602052604090205460ff16155b8015612af357506001600160a01b03861660009081526022602052604090205460ff16155b8015612b1857506001600160a01b03851660009081526022602052604090205460ff16155b15612b2b57506000612b2b868686612dbf565b8015612c18576000612b4d6064610dec60205488611f0590919063ffffffff16565b90506000612b6b6064610dec60215489611f0590919063ffffffff16565b6001600160a01b03881660009081526023602052604090205490915060ff168015612b9857506000602154115b15612bc457612ba78682612f13565b9550612bb4883083612dbf565b612bbf888888612dbf565b612c15565b6001600160a01b03881660009081526023602052604090205460ff168015612bee57506000602054115b15612c0a57612bfd8683612f13565b9550612bb4883084612dbf565b612c15888888612dbf565b50505b505050505050565b6026548111612c2e57600080fd5b602655565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b612ca8600e54612ca2600d54600c54611fe690919063ffffffff16565b90611fe6565b602055601454601354601254612cc39291612ca29190611fe6565b602155565b6001600160a01b03821660009081526023602052604090205460ff1615158115151415612d6b5760405162461bcd60e51b815260206004820152604560248201527f42616279417065436f696e3a204175746f6d61746564206d61726b6574206d6160448201527f6b6572207061697220697320616c72656164792073657420746f20746861742060648201526476616c756560d81b608482015260a401610ba0565b6001600160a01b038216600081815260236020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316612de55760405162461bcd60e51b8152600401610ba09061353b565b6001600160a01b038216612e0b5760405162461bcd60e51b8152600401610ba090613580565b6001600160a01b03831660009081526020819052604090205481811015612e835760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610ba0565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612eba9084906134b9565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612f0691815260200190565b60405180910390a3611703565b600082821115612f655760405162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f7700006044820152606401610ba0565b611f848284613524565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612fa457612fa46134f3565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612ffd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130219190613604565b81600181518110613034576130346134f3565b6001600160a01b03928316602091820292909201015260065461305a9130911684612045565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790613093908590600090869030904290600401613621565b600060405180830381600087803b1580156130ad57600080fd5b505af1158015612c18573d6000803e3d6000fd5b6006546130d99030906001600160a01b031684612045565b60065460405163f305d71960e01b8152306004820181905260248201859052600060448301819052606483015260848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015613146573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610c8d9190613692565b600060208083528351808285015260005b818110156131985785810183015185820160400152820161317c565b818111156131aa576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610edb57600080fd5b600080604083850312156131e857600080fd5b82356131f3816131c0565b946020939093013593505050565b6000806040838503121561321457600080fd5b823561321f816131c0565b9150602083013561322f816131c0565b809150509250929050565b60006020828403121561324c57600080fd5b5035919050565b60006020828403121561326557600080fd5b8135611f84816131c0565b60008060006060848603121561328557600080fd5b8335613290816131c0565b925060208401356132a0816131c0565b929592945050506040919091013590565b600080604083850312156132c457600080fd5b50508035926020909101359150565b8015158114610edb57600080fd5b6000602082840312156132f357600080fd5b8135611f84816132d3565b60008060006060848603121561331357600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561333d57600080fd5b8235613348816131c0565b9150602083013561322f816132d3565b60008060006040848603121561336d57600080fd5b833567ffffffffffffffff8082111561338557600080fd5b818601915086601f83011261339957600080fd5b8135818111156133a857600080fd5b8760208260051b85010111156133bd57600080fd5b602092830195509350508401356133d3816132d3565b809150509250925092565b600181811c908216806133f257607f821691505b6020821081141561341357634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561346057600080fd5b5051919050565b60006020828403121561347957600080fd5b8151611f84816132d3565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156134b4576134b4613484565b500290565b600082198211156134cc576134cc613484565b500190565b6000826134ee57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060001982141561351d5761351d613484565b5060010190565b60008282101561353657613536613484565b500390565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526021908201527f4661696c656420746f2073656e6420646576656c6f706d656e7420616d6f756e6040820152601d60fa1b606082015260800190565b60006020828403121561361657600080fd5b8151611f84816131c0565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156136715784516001600160a01b03168352938301939183019160010161364c565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156136a757600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220c7792da47a20c4d7fc9a079fe29872591fc4f9845c701e9082b2283e3eff380564736f6c634300080b0033
Deployed Bytecode
0x60806040526004361061037a5760003560e01c80638da5cb5b116101d1578063bea1cb2711610102578063d966bcf1116100a0578063f298f42c1161006f578063f298f42c14610a3a578063f2fde38b14610a5a578063f3ebe96514610a7a578063fe575a8714610a9457600080fd5b8063d966bcf11461099e578063dd62ed3e146109be578063e2f4560514610a04578063e37ba8f914610a1a57600080fd5b8063c23be47f116100dc578063c23be47f1461093e578063c3a3c0321461095e578063d0a3981414610973578063d63607d81461098957600080fd5b8063bea1cb27146108de578063c0246668146108fe578063c17b5b8c1461091e57600080fd5b8063a9dec4361161016f578063b62496f511610149578063b62496f514610863578063b9e9370014610893578063bc37e1a3146108a9578063be874c92146108be57600080fd5b8063a9dec4361461080d578063aacebbe314610823578063ab3b55451461084357600080fd5b8063a44b47f7116101ab578063a44b47f714610797578063a457c2d7146107ad578063a7b97fa9146107cd578063a9059cbb146107ed57600080fd5b80638da5cb5b1461074457806395d89b41146107625780639a7a23d61461077757600080fd5b8063313ce567116102ab578063553ad0dc11610249578063715018a611610223578063715018a6146106d95780637bbf8df9146106ee5780638095d5641461070e57806382247ec01461072e57600080fd5b8063553ad0dc1461067957806365b8dbc01461069957806370a08231146106b957600080fd5b806349bd5a5e1161028557806349bd5a5e146105cb5780634c12b33f146105ff5780634cdaf0ae146106205780634fbee1931461064057600080fd5b8063313ce5671461057a57806339509351146105965780633c7a309b146105b657600080fd5b80631c499ab011610318578063270924c7116102f2578063270924c714610505578063296d3de01461051a5780632c889d181461053a5780632de3f9561461055a57600080fd5b80631c499ab0146104955780631cdd3be3146104b557806323b872dd146104e557600080fd5b80631694505e116103545780631694505e146104055780631732cded1461043d57806318160ddd1461045e57806319fb3e7a1461047357600080fd5b806306fdde03146103865780630773d31d146103b1578063095ea7b3146103d557600080fd5b3661038157005b600080fd5b34801561039257600080fd5b5061039b610acd565b6040516103a8919061316b565b60405180910390f35b3480156103bd57600080fd5b506103c7601e5481565b6040519081526020016103a8565b3480156103e157600080fd5b506103f56103f03660046131d5565b610b5f565b60405190151581526020016103a8565b34801561041157600080fd5b50600654610425906001600160a01b031681565b6040516001600160a01b0390911681526020016103a8565b34801561044957600080fd5b506006546103f590600160c01b900460ff1681565b34801561046a57600080fd5b506002546103c7565b34801561047f57600080fd5b5061049361048e366004613201565b610b76565b005b3480156104a157600080fd5b506104936104b036600461323a565b610c94565b3480156104c157600080fd5b506103f56104d0366004613253565b60246020526000908152604090205460ff1681565b3480156104f157600080fd5b506103f5610500366004613270565b610cd6565b34801561051157600080fd5b50610493610d80565b34801561052657600080fd5b506104936105353660046132b1565b610e47565b34801561054657600080fd5b5061049361055536600461323a565b610e9f565b34801561056657600080fd5b506104936105753660046132e1565b610ede565b34801561058657600080fd5b50604051601281526020016103a8565b3480156105a257600080fd5b506103f56105b13660046131d5565b610f60565b3480156105c257600080fd5b50610493610f9c565b3480156105d757600080fd5b506104257f0000000000000000000000009abb2bb4ed59e37d3016f296d35aff603957c80881565b34801561060b57600080fd5b506006546103f590600160b81b900460ff1681565b34801561062c57600080fd5b5061049361063b366004613253565b61116d565b34801561064c57600080fd5b506103f561065b366004613253565b6001600160a01b031660009081526022602052604090205460ff1690565b34801561068557600080fd5b506104936106943660046132e1565b6111c5565b3480156106a557600080fd5b506104936106b4366004613253565b61123c565b3480156106c557600080fd5b506103c76106d4366004613253565b61133a565b3480156106e557600080fd5b50610493611355565b3480156106fa57600080fd5b506104936107093660046131d5565b61138b565b34801561071a57600080fd5b506104936107293660046132fe565b611488565b34801561073a57600080fd5b506103c7601c5481565b34801561075057600080fd5b506005546001600160a01b0316610425565b34801561076e57600080fd5b5061039b6114c9565b34801561078357600080fd5b5061049361079236600461332a565b6114d8565b3480156107a357600080fd5b506103c7601f5481565b3480156107b957600080fd5b506103f56107c83660046131d5565b6115cf565b3480156107d957600080fd5b506104936107e8366004613358565b611668565b3480156107f957600080fd5b506103f56108083660046131d5565b611709565b34801561081957600080fd5b506103c7601d5481565b34801561082f57600080fd5b5061049361083e366004613253565b611716565b34801561084f57600080fd5b5061049361085e36600461323a565b611828565b34801561086f57600080fd5b506103f561087e366004613253565b60236020526000908152604090205460ff1681565b34801561089f57600080fd5b506103c760205481565b3480156108b557600080fd5b5061049361186a565b3480156108ca57600080fd5b506104936108d936600461323a565b6118d5565b3480156108ea57600080fd5b506104936108f9366004613358565b611985565b34801561090a57600080fd5b5061049361091936600461332a565b6119fc565b34801561092a57600080fd5b506104936109393660046132fe565b611b1b565b34801561094a57600080fd5b50610493610959366004613253565b611b5c565b34801561096a57600080fd5b506103c7611b9e565b34801561097f57600080fd5b506103c760215481565b34801561099557600080fd5b50610493611bc3565b3480156109aa57600080fd5b506104936109b93660046132e1565b611bfc565b3480156109ca57600080fd5b506103c76109d9366004613201565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610a1057600080fd5b506103c7600b5481565b348015610a2657600080fd5b50610493610a35366004613253565b611c44565b348015610a4657600080fd5b50610493610a5536600461332a565b611d56565b348015610a6657600080fd5b50610493610a75366004613253565b611e6d565b348015610a8657600080fd5b506027546103f59060ff1681565b348015610aa057600080fd5b506103f5610aaf366004613253565b6001600160a01b031660009081526024602052604090205460ff1690565b606060038054610adc906133de565b80601f0160208091040260200160405190810160405280929190818152602001828054610b08906133de565b8015610b555780601f10610b2a57610100808354040283529160200191610b55565b820191906000526020600020905b815481529060010190602001808311610b3857829003601f168201915b5050505050905090565b6000610b6c338484612045565b5060015b92915050565b6005546001600160a01b03163314610ba95760405162461bcd60e51b8152600401610ba090613419565b60405180910390fd5b6040516370a0823160e01b815230600482015282906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610bf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c16919061344e565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509083169063a9059cbb906044016020604051808303816000875af1158015610c69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8d9190613467565b5050505050565b6005546001600160a01b03163314610cbe5760405162461bcd60e51b8152600401610ba090613419565b610cd081670de0b6b3a764000061349a565b601c5550565b6000610ce3848484612169565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610d685760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610ba0565b610d758533858403612045565b506001949350505050565b6005546001600160a01b03163314610daa5760405162461bcd60e51b8152600401610ba090613419565b610dbb600f54601054601154611488565b610dcc601554601654601754611b1b565b610df26104b0612710610dec601954601f54611f0590919063ffffffff16565b90611f8b565b610e2f610e12612710610dec601a54601f54611f0590919063ffffffff16565b610535612710610dec601b54601f54611f0590919063ffffffff16565b6006805463ff00ffff60a01b1916600160a01b179055565b6005546001600160a01b03163314610e715760405162461bcd60e51b8152600401610ba090613419565b610e8382670de0b6b3a764000061349a565b601d55610e9881670de0b6b3a764000061349a565b601e555050565b6005546001600160a01b03163314610ec95760405162461bcd60e51b8152600401610ba090613419565b610edb610ed642836134b9565b612c20565b50565b6005546001600160a01b03163314610f085760405162461bcd60e51b8152600401610ba090613419565b60068054821515600160a01b0260ff60a01b199091161790556040517fd92566aec3731c43bc7ec6a90c119de538d83f226f301b29d5139a4b670abfb290610f5590831515815260200190565b60405180910390a150565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610b6c918590610f979086906134b9565b612045565b6005546001600160a01b03163314610fc65760405162461bcd60e51b8152600401610ba090613419565b60265442101561100b5760405162461bcd60e51b815260206004820152601060248201526f139bdd081e595d081d5b9b1bd8dad95960821b6044820152606401610ba0565b6025546040516370a0823160e01b81523060048201526001600160a01b039091169060009082906370a0823190602401602060405180830381865afa158015611058573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107c919061344e565b60275490915060ff16156111305761109762278d00426134b9565b602655600a6110a782600161349a565b6110b191906134d1565b600a5460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810183905291925083169063a9059cbb906044015b6020604051808303816000875af1158015611107573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112b9190613467565b505050565b600a5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb906044016110e8565b5050565b6005546001600160a01b031633146111975760405162461bcd60e51b8152600401610ba090613419565b602580546001600160a01b0319166001600160a01b0383161790556111bf62278d00426134b9565b60265550565b6005546001600160a01b031633146111ef5760405162461bcd60e51b8152600401610ba090613419565b60068054821515600160b81b0260ff60b81b199091161790556040517f6225104598bca03a23e6426058f298b0ff0510d263e9c7c61317dbbf41da0eb090610f5590831515815260200190565b6005546001600160a01b031633146112665760405162461bcd60e51b8152600401610ba090613419565b6006546001600160a01b03828116911614156112dd5760405162461bcd60e51b815260206004820152603060248201527f42616279417065436f696e3a2054686520726f7574657220616c72656164792060448201526f6861732074686174206164647265737360801b6064820152608401610ba0565b6006546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b0316331461137f5760405162461bcd60e51b8152600401610ba090613419565b6113896000612c33565b565b6005546001600160a01b031633146113b55760405162461bcd60e51b8152600401610ba090613419565b6000811180156113c6575060648111155b6113cf57600080fd5b60006113dc826064611f8b565b905060006113ea4783611f05565b90506000846001600160a01b03168260405160006040518083038185875af1925050503d8060008114611439576040519150601f19603f3d011682016040523d82523d6000602084013e61143e565b606091505b5050905080610c8d5760405162461bcd60e51b815260206004820152601660248201527508cc2d2d8cac840e8de40eed2e8d0c8e4c2ee408aa8960531b6044820152606401610ba0565b6005546001600160a01b031633146114b25760405162461bcd60e51b8152600401610ba090613419565b600c839055600d829055600e81905561112b612c85565b606060048054610adc906133de565b6005546001600160a01b031633146115025760405162461bcd60e51b8152600401610ba090613419565b7f0000000000000000000000009abb2bb4ed59e37d3016f296d35aff603957c8086001600160a01b0316826001600160a01b031614156115c55760405162461bcd60e51b815260206004820152605260248201527f42616279417065436f696e3a205468652050616e63616b65537761702070616960448201527f722063616e6e6f742062652072656d6f7665642066726f6d206175746f6d617460648201527165644d61726b65744d616b6572506169727360701b608482015260a401610ba0565b6111698282612cc8565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156116515760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610ba0565b61165e3385858403612045565b5060019392505050565b6005546001600160a01b031633146116925760405162461bcd60e51b8152600401610ba090613419565b60005b828110156117035781602460008686858181106116b4576116b46134f3565b90506020020160208101906116c99190613253565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806116fb81613509565b915050611695565b50505050565b6000610b6c338484612169565b6005546001600160a01b031633146117405760405162461bcd60e51b8152600401610ba090613419565b6007546001600160a01b03828116911614156117c05760405162461bcd60e51b815260206004820152603960248201527f42616279417065436f696e3a20546865206d61726b6574696e672077616c6c656044820152787420697320616c72656164792074686973206164647265737360381b6064820152608401610ba0565b6117cb8160016119fc565b6007546040516001600160a01b03918216918316907f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6790600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146118525760405162461bcd60e51b8152600401610ba090613419565b61186481670de0b6b3a764000061349a565b600b5550565b6005546001600160a01b031633146118945760405162461bcd60e51b8152600401610ba090613419565b6118a16000806000611488565b6118ae6000806000611b1b565b6006805460ff60a01b19169055601f546118c790610c94565b611389601f54601f54610e47565b6005546001600160a01b031633146118ff5760405162461bcd60e51b8152600401610ba090613419565b6119083061133a565b8111156119675760405162461bcd60e51b815260206004820152602760248201527f416d6f756e742063616e6e6f742065786365656420746f6b656e7320696e20636044820152661bdb9d1c9858dd60ca1b6064820152608401610ba0565b610edb3061dead61198084670de0b6b3a764000061349a565b612dbf565b6005546001600160a01b031633146119af5760405162461bcd60e51b8152600401610ba090613419565b60005b82811015611703576119ea8484838181106119cf576119cf6134f3565b90506020020160208101906119e49190613253565b836119fc565b806119f481613509565b9150506119b2565b6005546001600160a01b03163314611a265760405162461bcd60e51b8152600401610ba090613419565b6001600160a01b03821660009081526022602052604090205460ff1615158115151415611abb5760405162461bcd60e51b815260206004820152603760248201527f42616279417065436f696e3a204163636f756e7420697320616c72656164792060448201527f7468652076616c7565206f6620276578636c75646564270000000000000000006064820152608401610ba0565b6001600160a01b038216600081815260226020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791015b60405180910390a25050565b6005546001600160a01b03163314611b455760405162461bcd60e51b8152600401610ba090613419565b60128390556013829055601481905561112b612c85565b6005546001600160a01b03163314611b865760405162461bcd60e51b8152600401610ba090613419565b6000611b913061133a565b9050611169308383612dbf565b6000602654421015611bbd5742602654611bb89190613524565b905090565b50600090565b6005546001600160a01b03163314611bed5760405162461bcd60e51b8152600401610ba090613419565b6027805460ff19166001179055565b6005546001600160a01b03163314611c265760405162461bcd60e51b8152600401610ba090613419565b60068054911515600160b01b0260ff60b01b19909216919091179055565b6005546001600160a01b03163314611c6e5760405162461bcd60e51b8152600401610ba090613419565b600a546001600160a01b0382811691161415611cee5760405162461bcd60e51b815260206004820152603960248201527f42616279417065436f696e3a20546865206c69717569646974792077616c6c656044820152787420697320616c72656164792074686973206164647265737360381b6064820152608401610ba0565b611cf98160016119fc565b600a546040516001600160a01b03918216918316907f6080503d1da552ae8eb4b7b8a20245d9fabed014180510e7d1a05ea08fdb0f3e90600090a3600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314611d805760405162461bcd60e51b8152600401610ba090613419565b6001600160a01b03821660009081526024602052604090205460ff1615158115151415611e155760405162461bcd60e51b815260206004820152603a60248201527f42616279417065436f696e3a204163636f756e7420697320616c72656164792060448201527f7468652076616c7565206f662027626c61636b6c6973746564270000000000006064820152608401610ba0565b6001600160a01b038216600081815260246020908152604091829020805460ff191685151590811790915591519182527f404e512903f1ca111aaa7db3f548b1969d86eda85df18088582f13feba1e412c9101611b0f565b6005546001600160a01b03163314611e975760405162461bcd60e51b8152600401610ba090613419565b6001600160a01b038116611efc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ba0565b610edb81612c33565b600082611f1457506000610b70565b6000611f20838561349a565b905082611f2d85836134d1565b14611f845760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610ba0565b9392505050565b6000808211611fdc5760405162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f0000000000006044820152606401610ba0565b611f8482846134d1565b600080611ff383856134b9565b905083811015611f845760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610ba0565b6001600160a01b0383166120a75760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ba0565b6001600160a01b0382166121085760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ba0565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661218f5760405162461bcd60e51b8152600401610ba09061353b565b6001600160a01b0382166121b55760405162461bcd60e51b8152600401610ba090613580565b6005546001600160a01b038481169116148015906121e157506005546001600160a01b03838116911614155b80156121f557506001600160a01b03821615155b801561220c57506001600160a01b03821661dead14155b801561224a57507f0000000000000000000000009abb2bb4ed59e37d3016f296d35aff603957c8086001600160a01b0316826001600160a01b031614155b801561226f57506001600160a01b03821660009081526022602052604090205460ff16155b801561229457506001600160a01b03831660009081526022602052604090205460ff16155b1561238e57600654600160a01b900460ff1615156001146122b457600080fd5b601d548111156123175760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610ba0565b60006123228361133a565b601c5490915061233283836134b9565b111561238c5760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6044820152633ab73a1760e11b6064820152608401610ba0565b505b8061239f5761112b83836000612dbf565b600654600160c01b900460ff161580156123d157506001600160a01b03821660009081526023602052604090205460ff165b80156123eb57506006546001600160a01b03848116911614155b801561240557506005546001600160a01b03848116911614155b801561241f57506005546001600160a01b03838116911614155b801561244457506001600160a01b03821660009081526022602052604090205460ff16155b801561246957506001600160a01b03831660009081526022602052604090205460ff16155b1561250157600654600160a01b900460ff16151560011461248957600080fd5b601e548111156125015760405162461bcd60e51b815260206004820152603a60248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201527f206d617853656c6c5472616e73616374696f6e416d6f756e742e0000000000006064820152608401610ba0565b600061250c3061133a565b600b549091508110801590819061252d5750600654600160c01b900460ff16155b801561255157506001600160a01b03841660009081526023602052604090205460ff165b801561257657506001600160a01b03841660009081526022602052604090205460ff16155b801561259b57506001600160a01b03851660009081526022602052604090205460ff16155b15612a2657600b54600654909250600160b81b900460ff161561267e57600b546125ce816125c83061133a565b90612f13565b111561262357600b546125e43061dead83612dbf565b60405181815261dead9030907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35061267e565b6000612634600b546125c83061133a565b90506126433061dead83612dbf565b60405181815261dead9030907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505b600080602154905060006126a182610dec60145488611f0590919063ffffffff16565b905060006126b0826002611f8b565b905060006126be8383612f13565b6006805460ff60c01b1916600160c01b179055905083158015906126e457506000601454115b80156126fa5750600654600160b01b900460ff16155b156127e45786945061270b85612f6f565b602154601254909450156127df57600061273485610dec60125447611f0590919063ffffffff16565b6007546040519192506000916001600160a01b039091169083908381818185875af1925050503d8060008114612786576040519150601f19603f3d011682016040523d82523d6000602084013e61278b565b606091505b50509050806127dc5760405162461bcd60e51b815260206004820152601f60248201527f4661696c656420746f2073656e64206d61726b6574696e6720616d6f756e74006044820152606401610ba0565b50505b612881565b6000841180156127f657506000601454115b801561280b5750600654600160b01b900460ff165b1561288157869450600061282f6064610dec60125489611f0590919063ffffffff16565b905061283b8682612f13565b9550612854601254602154612f1390919063ffffffff16565b945061285f86612f6f565b6012541561287f5760075461287f9030906001600160a01b031683612dbf565b505b601354156129a15760006128a485610dec60135447611f0590919063ffffffff16565b90506128b1816002611f8b565b6008546040519192506000916001600160a01b039091169083908381818185875af1925050503d8060008114612903576040519150601f19603f3d011682016040523d82523d6000602084013e612908565b606091505b50509050806129295760405162461bcd60e51b8152600401610ba0906135c3565b6009546040516001600160a01b03909116908390600081818185875af1925050503d8060008114612976576040519150601f19603f3d011682016040523d82523d6000602084013e61297b565b606091505b5050809150508061299e5760405162461bcd60e51b8152600401610ba0906135c3565b50505b60145415612a135760006129c485610dec60145447611f0590919063ffffffff16565b90506129d083826130c1565b60408051838152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a1505b50506006805460ff60c01b191690555050505b6006546001600160a01b03861660009081526022602052604090205460ff600160c01b909204821615911680612a7457506001600160a01b03851660009081526022602052604090205460ff165b15612a8c57506000612a87868686612dbf565b612b2b565b6001600160a01b03851660009081526023602052604090205460ff16158015612ace57506001600160a01b03861660009081526023602052604090205460ff16155b8015612af357506001600160a01b03861660009081526022602052604090205460ff16155b8015612b1857506001600160a01b03851660009081526022602052604090205460ff16155b15612b2b57506000612b2b868686612dbf565b8015612c18576000612b4d6064610dec60205488611f0590919063ffffffff16565b90506000612b6b6064610dec60215489611f0590919063ffffffff16565b6001600160a01b03881660009081526023602052604090205490915060ff168015612b9857506000602154115b15612bc457612ba78682612f13565b9550612bb4883083612dbf565b612bbf888888612dbf565b612c15565b6001600160a01b03881660009081526023602052604090205460ff168015612bee57506000602054115b15612c0a57612bfd8683612f13565b9550612bb4883084612dbf565b612c15888888612dbf565b50505b505050505050565b6026548111612c2e57600080fd5b602655565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b612ca8600e54612ca2600d54600c54611fe690919063ffffffff16565b90611fe6565b602055601454601354601254612cc39291612ca29190611fe6565b602155565b6001600160a01b03821660009081526023602052604090205460ff1615158115151415612d6b5760405162461bcd60e51b815260206004820152604560248201527f42616279417065436f696e3a204175746f6d61746564206d61726b6574206d6160448201527f6b6572207061697220697320616c72656164792073657420746f20746861742060648201526476616c756560d81b608482015260a401610ba0565b6001600160a01b038216600081815260236020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316612de55760405162461bcd60e51b8152600401610ba09061353b565b6001600160a01b038216612e0b5760405162461bcd60e51b8152600401610ba090613580565b6001600160a01b03831660009081526020819052604090205481811015612e835760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610ba0565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612eba9084906134b9565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612f0691815260200190565b60405180910390a3611703565b600082821115612f655760405162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f7700006044820152606401610ba0565b611f848284613524565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612fa457612fa46134f3565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612ffd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130219190613604565b81600181518110613034576130346134f3565b6001600160a01b03928316602091820292909201015260065461305a9130911684612045565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790613093908590600090869030904290600401613621565b600060405180830381600087803b1580156130ad57600080fd5b505af1158015612c18573d6000803e3d6000fd5b6006546130d99030906001600160a01b031684612045565b60065460405163f305d71960e01b8152306004820181905260248201859052600060448301819052606483015260848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af1158015613146573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610c8d9190613692565b600060208083528351808285015260005b818110156131985785810183015185820160400152820161317c565b818111156131aa576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610edb57600080fd5b600080604083850312156131e857600080fd5b82356131f3816131c0565b946020939093013593505050565b6000806040838503121561321457600080fd5b823561321f816131c0565b9150602083013561322f816131c0565b809150509250929050565b60006020828403121561324c57600080fd5b5035919050565b60006020828403121561326557600080fd5b8135611f84816131c0565b60008060006060848603121561328557600080fd5b8335613290816131c0565b925060208401356132a0816131c0565b929592945050506040919091013590565b600080604083850312156132c457600080fd5b50508035926020909101359150565b8015158114610edb57600080fd5b6000602082840312156132f357600080fd5b8135611f84816132d3565b60008060006060848603121561331357600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561333d57600080fd5b8235613348816131c0565b9150602083013561322f816132d3565b60008060006040848603121561336d57600080fd5b833567ffffffffffffffff8082111561338557600080fd5b818601915086601f83011261339957600080fd5b8135818111156133a857600080fd5b8760208260051b85010111156133bd57600080fd5b602092830195509350508401356133d3816132d3565b809150509250925092565b600181811c908216806133f257607f821691505b6020821081141561341357634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561346057600080fd5b5051919050565b60006020828403121561347957600080fd5b8151611f84816132d3565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156134b4576134b4613484565b500290565b600082198211156134cc576134cc613484565b500190565b6000826134ee57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060001982141561351d5761351d613484565b5060010190565b60008282101561353657613536613484565b500390565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526021908201527f4661696c656420746f2073656e6420646576656c6f706d656e7420616d6f756e6040820152601d60fa1b606082015260800190565b60006020828403121561361657600080fd5b8151611f84816131c0565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156136715784516001600160a01b03168352938301939183019160010161364c565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156136a757600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220c7792da47a20c4d7fc9a079fe29872591fc4f9845c701e9082b2283e3eff380564736f6c634300080b0033
Deployed Bytecode Sourcemap
36670:22320:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2389:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37952:23;;;;;;;;;;;;;;;;;;;762:25:1;;;750:2;735:18;37952:23:0;616:177:1;4556:169:0;;;;;;;;;;-1:-1:-1;4556:169:0;;;;;:::i;:::-;;:::i;:::-;;;1419:14:1;;1412:22;1394:41;;1382:2;1367:18;4556:169:0;1254:187:1;36825:41:0;;;;;;;;;;-1:-1:-1;36825:41:0;;;;-1:-1:-1;;;;;36825:41:0;;;;;;-1:-1:-1;;;;;1637:32:1;;;1619:51;;1607:2;1592:18;36825:41:0;1446:230:1;37028:20:0;;;;;;;;;;-1:-1:-1;37028:20:0;;;;-1:-1:-1;;;37028:20:0;;;;;;3509:108;;;;;;;;;;-1:-1:-1;3597:12:0;;3509:108;;58481:233;;;;;;;;;;-1:-1:-1;58481:233:0;;;;;:::i;:::-;;:::i;:::-;;57378:119;;;;;;;;;;-1:-1:-1;57378:119:0;;;;;:::i;:::-;;:::i;38276:47::-;;;;;;;;;;-1:-1:-1;38276:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;5207:492;;;;;;;;;;-1:-1:-1;5207:492:0;;;;;:::i;:::-;;:::i;56244:467::-;;;;;;;;;;;;;:::i;57505:174::-;;;;;;;;;;-1:-1:-1;57505:174:0;;;;;:::i;:::-;;:::i;45828:158::-;;;;;;;;;;-1:-1:-1;45828:158:0;;;;;:::i;:::-;;:::i;48454:143::-;;;;;;;;;;-1:-1:-1;48454:143:0;;;;;:::i;:::-;;:::i;3351:93::-;;;;;;;;;;-1:-1:-1;3351:93:0;;3434:2;3736:36:1;;3724:2;3709:18;3351:93:0;3594:184:1;6108:215:0;;;;;;;;;;-1:-1:-1;6108:215:0;;;;;:::i;:::-;;:::i;46287:904::-;;;;;;;;;;;;;:::i;36873:38::-;;;;;;;;;;;;;;;37002:19;;;;;;;;;;-1:-1:-1;37002:19:0;;;;-1:-1:-1;;;37002:19:0;;;;;;44878:205;;;;;;;;;;-1:-1:-1;44878:205:0;;;;;:::i;:::-;;:::i;48195:125::-;;;;;;;;;;-1:-1:-1;48195:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;48284:28:0;48260:4;48284:28;;;:19;:28;;;;;;;;;48195:125;48605:130;;;;;;;;;;-1:-1:-1;48605:130:0;;;;;:::i;:::-;;:::i;42699:320::-;;;;;;;;;;-1:-1:-1;42699:320:0;;;;;:::i;:::-;;:::i;3680:127::-;;;;;;;;;;-1:-1:-1;3680:127:0;;;;;:::i;:::-;;:::i;24700:94::-;;;;;;;;;;;;;:::i;57912:367::-;;;;;;;;;;-1:-1:-1;57912:367:0;;;;;:::i;:::-;;:::i;56723:314::-;;;;;;;;;;-1:-1:-1;56723:314:0;;;;;:::i;:::-;;:::i;37891:25::-;;;;;;;;;;;;;;;;24049:87;;;;;;;;;;-1:-1:-1;24122:6:0;;-1:-1:-1;;;;;24122:6:0;24049:87;;2608:104;;;;;;;;;;;;;:::i;44169:269::-;;;;;;;;;;-1:-1:-1;44169:269:0;;;;;:::i;:::-;;:::i;37982:26::-;;;;;;;;;;;;;;;;6826:413;;;;;;;;;;-1:-1:-1;6826:413:0;;;;;:::i;:::-;;:::i;43593:255::-;;;;;;;;;;-1:-1:-1;43593:255:0;;;;;:::i;:::-;;:::i;4020:175::-;;;;;;;;;;-1:-1:-1;4020:175:0;;;;;:::i;:::-;;:::i;37923:22::-;;;;;;;;;;;;;;;;47583:376;;;;;;;;;;-1:-1:-1;47583:376:0;;;;;:::i;:::-;;:::i;42581:110::-;;;;;;;;;;-1:-1:-1;42581:110:0;;;;;:::i;:::-;;:::i;38211:58::-;;;;;;;;;;-1:-1:-1;38211:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;38023:27;;;;;;;;;;;;;;;;56006:229;;;;;;;;;;;;;:::i;58722:265::-;;;;;;;;;;-1:-1:-1;58722:265:0;;;;;:::i;:::-;;:::i;43338:247::-;;;;;;;;;;-1:-1:-1;43338:247:0;;;;;:::i;:::-;;:::i;43027:303::-;;;;;;;;;;-1:-1:-1;43027:303:0;;;;;:::i;:::-;;:::i;57045:325::-;;;;;;;;;;-1:-1:-1;57045:325:0;;;;;:::i;:::-;;:::i;58287:186::-;;;;;;;;;;-1:-1:-1;58287:186:0;;;;;:::i;:::-;;:::i;47967:220::-;;;;;;;;;;;;;:::i;38057:28::-;;;;;;;;;;;;;;;;45707:113;;;;;;;;;;;;;:::i;48743:102::-;;;;;;;;;;-1:-1:-1;48743:102:0;;;;;:::i;:::-;;:::i;4258:151::-;;;;;;;;;;-1:-1:-1;4258:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;4374:18:0;;;4347:7;4374:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4258:151;37217:33;;;;;;;;;;;;;;;;47199:376;;;;;;;;;;-1:-1:-1;47199:376:0;;;;;:::i;:::-;;:::i;43860:301::-;;;;;;;;;;-1:-1:-1;43860:301:0;;;;;:::i;:::-;;:::i;24949:192::-;;;;;;;;;;-1:-1:-1;24949:192:0;;;;;:::i;:::-;;:::i;45663:37::-;;;;;;;;;;-1:-1:-1;45663:37:0;;;;;;;;48332:116;;;;;;;;;;-1:-1:-1;48332:116:0;;;;;:::i;:::-;-1:-1:-1;;;;;48417:23:0;48393:4;48417:23;;;:14;:23;;;;;;;;;48332:116;2389:100;2443:13;2476:5;2469:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2389:100;:::o;4556:169::-;4639:4;4656:39;1342:10;4679:7;4688:6;4656:8;:39::i;:::-;-1:-1:-1;4713:4:0;4556:169;;;;;:::o;58481:233::-;24122:6;;-1:-1:-1;;;;;24122:6:0;1342:10;24269:23;24261:68;;;;-1:-1:-1;;;24261:68:0;;;;;;;:::i;:::-;;;;;;;;;58633:30:::1;::::0;-1:-1:-1;;;58633:30:0;;58657:4:::1;58633:30;::::0;::::1;1619:51:1::0;58598:5:0;;58578:11:::1;::::0;-1:-1:-1;;;;;58633:15:0;::::1;::::0;::::1;::::0;1592:18:1;;58633:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;58674:32;::::0;-1:-1:-1;;;58674:32:0;;-1:-1:-1;;;;;6581:32:1;;;58674::0::1;::::0;::::1;6563:51:1::0;6630:18;;;6623:34;;;58615:48:0;;-1:-1:-1;58674:14:0;;::::1;::::0;::::1;::::0;6536:18:1;;58674:32:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;58567:147;;58481:233:::0;;:::o;57378:119::-;24122:6;;-1:-1:-1;;;;;24122:6:0;1342:10;24269:23;24261:68;;;;-1:-1:-1;;;24261:68:0;;;;;;;:::i;:::-;57466:23:::1;:12:::0;57482:6:::1;57466:23;:::i;:::-;57453:10;:36:::0;-1:-1:-1;57378:119:0:o;5207:492::-;5347:4;5364:36;5374:6;5382:9;5393:6;5364:9;:36::i;:::-;-1:-1:-1;;;;;5440:19:0;;5413:24;5440:19;;;:11;:19;;;;;;;;1342:10;5440:33;;;;;;;;5492:26;;;;5484:79;;;;-1:-1:-1;;;5484:79:0;;7425:2:1;5484:79:0;;;7407:21:1;7464:2;7444:18;;;7437:30;7503:34;7483:18;;;7476:62;-1:-1:-1;;;7554:18:1;;;7547:38;7602:19;;5484:79:0;7223:404:1;5484:79:0;5599:57;5608:6;1342:10;5649:6;5630:16;:25;5599:8;:57::i;:::-;-1:-1:-1;5687:4:0;;5207:492;-1:-1:-1;;;;5207:492:0:o;56244:467::-;24122:6;;-1:-1:-1;;;;;24122:6:0;1342:10;24269:23;24261:68;;;;-1:-1:-1;;;24261:68:0;;;;;;;:::i;:::-;56298:64:::1;56312:15;;56328:17;;56346:15;;56298:13;:64::i;:::-;56373:68;56388:16;;56405:18;;56424:16;;56373:14;:68::i;:::-;56454:61;56470:44;56508:5;56470:33;56486:16;;56470:11;;:15;;:33;;;;:::i;:::-;:37:::0;::::1;:44::i;56454:61::-;56526:103;56543:41;56578:5;56543:30;56559:13;;56543:11;;:15;;:30;;;;:::i;:41::-;56586:42;56622:5;56586:31;56602:14;;56586:11;;:15;;:31;;;;:::i;56526:103::-;56636:7;:14:::0;;-1:-1:-1;;;;56687:16:0;-1:-1:-1;;;56687:16:0;;;56244:467::o;57505:174::-;24122:6;;-1:-1:-1;;;;;24122:6:0;1342:10;24269:23;24261:68;;;;-1:-1:-1;;;24261:68:0;;;;;;;:::i;:::-;57608:20:::1;:9:::0;57621:6:::1;57608:20;:::i;:::-;57598:7;:30:::0;57650:21:::1;:10:::0;57664:6:::1;57650:21;:::i;:::-;57639:8;:32:::0;-1:-1:-1;;57505:174:0:o;45828:158::-;24122:6;;-1:-1:-1;;;;;24122:6:0;1342:10;24269:23;24261:68;;;;-1:-1:-1;;;24261:68:0;;;;;;;:::i;:::-;45921:57:::1;45943:34;45962:15;45943:18:::0;:34:::1;:::i;:::-;45921:21;:57::i;:::-;45828:158:::0;:::o;48454:143::-;24122:6;;-1:-1:-1;;;;;24122:6:0;1342:10;24269:23;24261:68;;;;-1:-1:-1;;;24261:68:0;;;;;;;:::i;:::-;48521:7:::1;:18:::0;;;::::1;;-1:-1:-1::0;;;48521:18:0::1;-1:-1:-1::0;;;;48521:18:0;;::::1;;::::0;;48565:24:::1;::::0;::::1;::::0;::::1;::::0;48531:8;1419:14:1;1412:22;1394:41;;1382:2;1367:18;;1254:187;48565:24:0::1;;;;;;;;48454:143:::0;:::o;6108:215::-;1342:10;6196:4;6245:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6245:34:0;;;;;;;;;;6196:4;;6213:80;;6236:7;;6245:47;;6282:10;;6245:47;:::i;:::-;6213:8;:80::i;46287:904::-;24122:6;;-1:-1:-1;;;;;24122:6:0;1342:10;24269:23;24261:68;;;;-1:-1:-1;;;24261:68:0;;;;;;;:::i;:::-;46432:20:::1;;46413:15;:39;;46405:68;;;::::0;-1:-1:-1;;;46405:68:0;;7967:2:1;46405:68:0::1;::::0;::::1;7949:21:1::0;8006:2;7986:18;;;7979:30;-1:-1:-1;;;8025:18:1;;;8018:46;8081:18;;46405:68:0::1;7765:340:1::0;46405:68:0::1;46517:22;::::0;46568:39:::1;::::0;-1:-1:-1;;;46568:39:0;;46601:4:::1;46568:39;::::0;::::1;1619:51:1::0;-1:-1:-1;;;;;46517:22:0;;::::1;::::0;46486:21:::1;::::0;46517:22;;46568:24:::1;::::0;1592:18:1;;46568:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46621:25;::::0;46551:56;;-1:-1:-1;46621:25:0::1;;46618:566;;;46693:27;38133:7;46693:15;:27;:::i;:::-;46672:20;:48:::0;46859:2:::1;46850:8;:6:::0;46857:1:::1;46850:8;:::i;:::-;:11;;;;:::i;:::-;46900:15;::::0;46876:48:::1;::::0;-1:-1:-1;;;46876:48:0;;-1:-1:-1;;;;;46900:15:0;;::::1;46876:48;::::0;::::1;6563:51:1::0;6630:18;;;6623:34;;;46843:18:0;;-1:-1:-1;46876:23:0;::::1;::::0;::::1;::::0;6536:18:1;;46876:48:0::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;46336:855;;46287:904::o:0;46618:566::-:1;47148:15;::::0;47124:48:::1;::::0;-1:-1:-1;;;47124:48:0;;-1:-1:-1;;;;;47148:15:0;;::::1;47124:48;::::0;::::1;6563:51:1::0;6630:18;;;6623:34;;;47124:23:0;;::::1;::::0;::::1;::::0;6536:18:1;;47124:48:0::1;6389:274:1::0;46618:566:0::1;46336:855;;46287:904::o:0;44878:205::-;24122:6;;-1:-1:-1;;;;;24122:6:0;1342:10;24269:23;24261:68;;;;-1:-1:-1;;;24261:68:0;;;;;;;:::i;:::-;44972:22:::1;:44:::0;;-1:-1:-1;;;;;;44972:44:0::1;-1:-1:-1::0;;;;;44972:44:0;::::1;;::::0;;45048:27:::1;38133:7;45048:15;:27;:::i;:::-;45027:20;:48:::0;-1:-1:-1;44878:205:0:o;48605:130::-;24122:6;;-1:-1:-1;;;;;24122:6:0;1342:10;24269:23;24261:68;;;;-1:-1:-1;;;24261:68:0;;;;;;;:::i;:::-;48671:7:::1;:17:::0;;;::::1;;-1:-1:-1::0;;;48671:17:0::1;-1:-1:-1::0;;;;48671:17:0;;::::1;;::::0;;48704:23:::1;::::0;::::1;::::0;::::1;::::0;48681:7;1419:14:1;1412:22;1394:41;;1382:2;1367:18;;1254:187;42699:320:0;24122:6;;-1:-1:-1;;;;;24122:6:0;1342:10;24269:23;24261:68;;;;-1:-1:-1;;;24261:68:0;;;;;;;:::i;:::-;42808:15:::1;::::0;-1:-1:-1;;;;;42786:38:0;;::::1;42808:15:::0;::::1;42786:38;;42778:99;;;::::0;-1:-1:-1;;;42778:99:0;;8534:2:1;42778:99:0::1;::::0;::::1;8516:21:1::0;8573:2;8553:18;;;8546:30;8612:34;8592:18;;;8585:62;-1:-1:-1;;;8663:18:1;;;8656:46;8719:19;;42778:99:0::1;8332:412:1::0;42778:99:0::1;42935:15;::::0;42893:59:::1;::::0;-1:-1:-1;;;;;42935:15:0;;::::1;::::0;42893:59;::::1;::::0;::::1;::::0;42935:15:::1;::::0;42893:59:::1;42963:15;:48:::0;;-1:-1:-1;;;;;;42963:48:0::1;-1:-1:-1::0;;;;;42963:48:0;;;::::1;::::0;;;::::1;::::0;;42699:320::o;3680:127::-;-1:-1:-1;;;;;3781:18:0;3754:7;3781:18;;;;;;;;;;;;3680:127::o;24700:94::-;24122:6;;-1:-1:-1;;;;;24122:6:0;1342:10;24269:23;24261:68;;;;-1:-1:-1;;;24261:68:0;;;;;;;:::i;:::-;24765:21:::1;24783:1;24765:9;:21::i;:::-;24700:94::o:0;57912:367::-;24122:6;;-1:-1:-1;;;;;24122:6:0;1342:10;24269:23;24261:68;;;;-1:-1:-1;;;24261:68:0;;;;;;;:::i;:::-;58022:1:::1;58012:7;:11;:29;;;;;58038:3;58027:7;:14;;58012:29;58004:38;;;::::0;::::1;;58053:18;58074:16;:7:::0;58086:3:::1;58074:11;:16::i;:::-;58053:37:::0;-1:-1:-1;58101:15:0::1;58119:37;:21;58053:37:::0;58119:25:::1;:37::i;:::-;58101:55;;58168:12;58186:7;-1:-1:-1::0;;;;;58186:12:0::1;58206:7;58186:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58167:51;;;58237:7;58229:42;;;::::0;-1:-1:-1;;;58229:42:0;;9161:2:1;58229:42:0::1;::::0;::::1;9143:21:1::0;9200:2;9180:18;;;9173:30;-1:-1:-1;;;9219:18:1;;;9212:52;9281:18;;58229:42:0::1;8959:346:1::0;56723:314:0;24122:6;;-1:-1:-1;;;;;24122:6:0;1342:10;24269:23;24261:68;;;;-1:-1:-1;;;24261:68:0;;;;;;;:::i;:::-;56860:16:::1;:37:::0;;;56908:18:::1;:41:::0;;;56960:16:::1;:37:::0;;;57018:11:::1;:9;:11::i;2608:104::-:0;2664:13;2697:7;2690:14;;;;;:::i;44169:269::-;24122:6;;-1:-1:-1;;;;;24122:6:0;1342:10;24269:23;24261:68;;;;-1:-1:-1;;;24261:68:0;;;;;;;:::i;:::-;44276:13:::1;-1:-1:-1::0;;;;;44268:21:0::1;:4;-1:-1:-1::0;;;;;44268:21:0::1;;;44260:116;;;::::0;-1:-1:-1;;;44260:116:0;;9512:2:1;44260:116:0::1;::::0;::::1;9494:21:1::0;9551:2;9531:18;;;9524:30;9590:34;9570:18;;;9563:62;9661:34;9641:18;;;9634:62;-1:-1:-1;;;9712:19:1;;;9705:49;9771:19;;44260:116:0::1;9310:486:1::0;44260:116:0::1;44389:41;44418:4;44424:5;44389:28;:41::i;6826:413::-:0;1342:10;6919:4;6963:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6963:34:0;;;;;;;;;;7016:35;;;;7008:85;;;;-1:-1:-1;;;7008:85:0;;10003:2:1;7008:85:0;;;9985:21:1;10042:2;10022:18;;;10015:30;10081:34;10061:18;;;10054:62;-1:-1:-1;;;10132:18:1;;;10125:35;10177:19;;7008:85:0;9801:401:1;7008:85:0;7129:67;1342:10;7152:7;7180:15;7161:16;:34;7129:8;:67::i;:::-;-1:-1:-1;7227:4:0;;6826:413;-1:-1:-1;;;6826:413:0:o;43593:255::-;24122:6;;-1:-1:-1;;;;;24122:6:0;1342:10;24269:23;24261:68;;;;-1:-1:-1;;;24261:68:0;;;;;;;:::i;:::-;43703:9:::1;43727:114;43734:19:::0;;::::1;43727:114;;;43800:11;43770:14;:27;43785:8;;43794:1;43785:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;43770:27:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;43770:27:0;:41;;-1:-1:-1;;43770:41:0::1;::::0;::::1;;::::0;;;::::1;::::0;;43826:3;::::1;::::0;::::1;:::i;:::-;;;;43727:114;;;43692:156;43593:255:::0;;;:::o;4020:175::-;4106:4;4123:42;1342:10;4147:9;4158:6;4123:9;:42::i;47583:376::-;24122:6;;-1:-1:-1;;;;;24122:6:0;1342:10;24269:23;24261:68;;;;-1:-1:-1;;;24261:68:0;;;;;;;:::i;:::-;47700:15:::1;::::0;-1:-1:-1;;;;;47678:37:0;;::::1;47700:15:::0;::::1;47678:37;;47670:107;;;::::0;-1:-1:-1;;;47670:107:0;;10681:2:1;47670:107:0::1;::::0;::::1;10663:21:1::0;10720:2;10700:18;;;10693:30;10759:34;10739:18;;;10732:62;-1:-1:-1;;;10810:18:1;;;10803:55;10875:19;;47670:107:0::1;10479:421:1::0;47670:107:0::1;47788:41;47804:18;47824:4;47788:15;:41::i;:::-;47888:15;::::0;47845:59:::1;::::0;-1:-1:-1;;;;;47888:15:0;;::::1;::::0;47845:59;::::1;::::0;::::1;::::0;47888:15:::1;::::0;47845:59:::1;47915:15;:36:::0;;-1:-1:-1;;;;;;47915:36:0::1;-1:-1:-1::0;;;;;47915:36:0;;;::::1;::::0;;;::::1;::::0;;47583:376::o;42581:110::-;24122:6;;-1:-1:-1;;;;;24122:6:0;1342:10;24269:23;24261:68;;;;-1:-1:-1;;;24261:68:0;;;;;;;:::i;:::-;42669:17:::1;:6:::0;42679::::1;42669:17;:::i;:::-;42648:18;:38:::0;-1:-1:-1;42581:110:0:o;56006:229::-;24122:6;;-1:-1:-1;;;;;24122:6:0;1342:10;24269:23;24261:68;;;;-1:-1:-1;;;24261:68:0;;;;;;;:::i;:::-;56055:20:::1;56069:1;56071::::0;56073::::1;56055:13;:20::i;:::-;56086:21;56101:1;56103::::0;56105::::1;56086:14;:21::i;:::-;56114:7;:15:::0;;-1:-1:-1;;;;56114:15:0::1;::::0;;56158:11:::1;::::0;56142:28:::1;::::0;:15:::1;:28::i;:::-;56181:46;56199:11;;56214;;56181:16;:46::i;58722:265::-:0;24122:6;;-1:-1:-1;;;;;24122:6:0;1342:10;24269:23;24261:68;;;;-1:-1:-1;;;24261:68:0;;;;;;;:::i;:::-;58809:24:::1;58827:4;58809:9;:24::i;:::-;58799:6;:34;;58791:86;;;::::0;-1:-1:-1;;;58791:86:0;;11107:2:1;58791:86:0::1;::::0;::::1;11089:21:1::0;11146:2;11126:18;;;11119:30;11185:34;11165:18;;;11158:62;-1:-1:-1;;;11236:18:1;;;11229:37;11283:19;;58791:86:0::1;10905:403:1::0;58791:86:0::1;58888:91;58912:4;58919:42;58963:15;:6:::0;58972::::1;58963:15;:::i;:::-;58888;:91::i;43338:247::-:0;24122:6;;-1:-1:-1;;;;;24122:6:0;1342:10;24269:23;24261:68;;;;-1:-1:-1;;;24261:68:0;;;;;;;:::i;:::-;43443:9:::1;43467:111;43474:19:::0;;::::1;43467:111;;;43510:38;43526:8;;43535:1;43526:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;43539:8;43510:15;:38::i;:::-;43563:3:::0;::::1;::::0;::::1;:::i;:::-;;;;43467:111;;43027:303:::0;24122:6;;-1:-1:-1;;;;;24122:6:0;1342:10;24269:23;24261:68;;;;-1:-1:-1;;;24261:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43120:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;::::1;;:40;;::::0;::::1;;;;43112:108;;;::::0;-1:-1:-1;;;43112:108:0;;11515:2:1;43112:108:0::1;::::0;::::1;11497:21:1::0;11554:2;11534:18;;;11527:30;11593:34;11573:18;;;11566:62;11664:25;11644:18;;;11637:53;11707:19;;43112:108:0::1;11313:419:1::0;43112:108:0::1;-1:-1:-1::0;;;;;43231:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;43231:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;43288:34;;1394:41:1;;;43288:34:0::1;::::0;1367:18:1;43288:34:0::1;;;;;;;;43027:303:::0;;:::o;57045:325::-;24122:6;;-1:-1:-1;;;;;24122:6:0;1342:10;24269:23;24261:68;;;;-1:-1:-1;;;24261:68:0;;;;;;;:::i;:::-;57187:17:::1;:39:::0;;;57237:19:::1;:43:::0;;;57291:17:::1;:39:::0;;;57351:11:::1;:9;:11::i;58287:186::-:0;24122:6;;-1:-1:-1;;;;;24122:6:0;1342:10;24269:23;24261:68;;;;-1:-1:-1;;;24261:68:0;;;;;;;:::i;:::-;58364:15:::1;58382:24;58400:4;58382:9;:24::i;:::-;58364:42;;58417:48;58441:4;58448:7;58457;58417:15;:48::i;47967:220::-:0;48032:7;48070:20;;48054:15;:36;48051:110;;;48134:15;48113:20;;:36;;;;:::i;:::-;48106:43;;47967:220;:::o;48051:110::-;-1:-1:-1;48178:1:0;;47967:220::o;45707:113::-;24122:6;;-1:-1:-1;;;;;24122:6:0;1342:10;24269:23;24261:68;;;;-1:-1:-1;;;24261:68:0;;;;;;;:::i;:::-;45782:25:::1;:30:::0;;-1:-1:-1;;45782:30:0::1;45808:4;45782:30;::::0;;45707:113::o;48743:102::-;24122:6;;-1:-1:-1;;;;;24122:6:0;1342:10;24269:23;24261:68;;;;-1:-1:-1;;;24261:68:0;;;;;;;:::i;:::-;48817:10:::1;:20:::0;;;::::1;;-1:-1:-1::0;;;48817:20:0::1;-1:-1:-1::0;;;;48817:20:0;;::::1;::::0;;;::::1;::::0;;48743:102::o;47199:376::-;24122:6;;-1:-1:-1;;;;;24122:6:0;1342:10;24269:23;24261:68;;;;-1:-1:-1;;;24261:68:0;;;;;;;:::i;:::-;47316:15:::1;::::0;-1:-1:-1;;;;;47294:37:0;;::::1;47316:15:::0;::::1;47294:37;;47286:107;;;::::0;-1:-1:-1;;;47286:107:0;;12069:2:1;47286:107:0::1;::::0;::::1;12051:21:1::0;12108:2;12088:18;;;12081:30;12147:34;12127:18;;;12120:62;-1:-1:-1;;;12198:18:1;;;12191:55;12263:19;;47286:107:0::1;11867:421:1::0;47286:107:0::1;47404:41;47420:18;47440:4;47404:15;:41::i;:::-;47504:15;::::0;47461:59:::1;::::0;-1:-1:-1;;;;;47504:15:0;;::::1;::::0;47461:59;::::1;::::0;::::1;::::0;47504:15:::1;::::0;47461:59:::1;47531:15;:36:::0;;-1:-1:-1;;;;;;47531:36:0::1;-1:-1:-1::0;;;;;47531:36:0;;;::::1;::::0;;;::::1;::::0;;47199:376::o;43860:301::-;24122:6;;-1:-1:-1;;;;;24122:6:0;1342:10;24269:23;24261:68;;;;-1:-1:-1;;;24261:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43955:23:0;::::1;;::::0;;;:14:::1;:23;::::0;;;;;::::1;;:38;;::::0;::::1;;;;43947:109;;;::::0;-1:-1:-1;;;43947:109:0;;12495:2:1;43947:109:0::1;::::0;::::1;12477:21:1::0;12534:2;12514:18;;;12507:30;12573:34;12553:18;;;12546:62;12644:28;12624:18;;;12617:56;12690:19;;43947:109:0::1;12293:422:1::0;43947:109:0::1;-1:-1:-1::0;;;;;44067:23:0;::::1;;::::0;;;:14:::1;:23;::::0;;;;;;;;:37;;-1:-1:-1;;44067:37:0::1;::::0;::::1;;::::0;;::::1;::::0;;;44122:31;;1394:41:1;;;44122:31:0::1;::::0;1367:18:1;44122:31:0::1;1254:187:1::0;24949:192:0;24122:6;;-1:-1:-1;;;;;24122:6:0;1342:10;24269:23;24261:68;;;;-1:-1:-1;;;24261:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25038:22:0;::::1;25030:73;;;::::0;-1:-1:-1;;;25030:73:0;;12922:2:1;25030:73:0::1;::::0;::::1;12904:21:1::0;12961:2;12941:18;;;12934:30;13000:34;12980:18;;;12973:62;-1:-1:-1;;;13051:18:1;;;13044:36;13097:19;;25030:73:0::1;12720:402:1::0;25030:73:0::1;25114:19;25124:8;25114:9;:19::i;35603:220::-:0;35661:7;35685:6;35681:20;;-1:-1:-1;35700:1:0;35693:8;;35681:20;35712:9;35724:5;35728:1;35724;:5;:::i;:::-;35712:17;-1:-1:-1;35757:1:0;35748:5;35752:1;35712:17;35748:5;:::i;:::-;:10;35740:56;;;;-1:-1:-1;;;35740:56:0;;13329:2:1;35740:56:0;;;13311:21:1;13368:2;13348:18;;;13341:30;13407:34;13387:18;;;13380:62;-1:-1:-1;;;13458:18:1;;;13451:31;13499:19;;35740:56:0;13127:397:1;35740:56:0;35814:1;35603:220;-1:-1:-1;;;35603:220:0:o;35831:153::-;35889:7;35921:1;35917;:5;35909:44;;;;-1:-1:-1;;;35909:44:0;;13731:2:1;35909:44:0;;;13713:21:1;13770:2;13750:18;;;13743:30;13809:28;13789:18;;;13782:56;13855:18;;35909:44:0;13529:350:1;35909:44:0;35971:5;35975:1;35971;:5;:::i;35250:179::-;35308:7;;35340:5;35344:1;35340;:5;:::i;:::-;35328:17;;35369:1;35364;:6;;35356:46;;;;-1:-1:-1;;;35356:46:0;;14086:2:1;35356:46:0;;;14068:21:1;14125:2;14105:18;;;14098:30;14164:29;14144:18;;;14137:57;14211:18;;35356:46:0;13884:351:1;10510:380:0;-1:-1:-1;;;;;10646:19:0;;10638:68;;;;-1:-1:-1;;;10638:68:0;;14442:2:1;10638:68:0;;;14424:21:1;14481:2;14461:18;;;14454:30;14520:34;14500:18;;;14493:62;-1:-1:-1;;;14571:18:1;;;14564:34;14615:19;;10638:68:0;14240:400:1;10638:68:0;-1:-1:-1;;;;;10725:21:0;;10717:68;;;;-1:-1:-1;;;10717:68:0;;14847:2:1;10717:68:0;;;14829:21:1;14886:2;14866:18;;;14859:30;14925:34;14905:18;;;14898:62;-1:-1:-1;;;14976:18:1;;;14969:32;15018:19;;10717:68:0;14645:398:1;10717:68:0;-1:-1:-1;;;;;10798:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10850:32;;762:25:1;;;10850:32:0;;735:18:1;10850:32:0;;;;;;;10510:380;;;:::o;48853:6018::-;-1:-1:-1;;;;;48985:18:0;;48977:68;;;;-1:-1:-1;;;48977:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;49064:16:0;;49056:64;;;;-1:-1:-1;;;49056:64:0;;;;;;;:::i;:::-;24122:6;;-1:-1:-1;;;;;49137:15:0;;;24122:6;;49137:15;;;;:32;;-1:-1:-1;24122:6:0;;-1:-1:-1;;;;;49156:13:0;;;24122:6;;49156:13;;49137:32;:52;;;;-1:-1:-1;;;;;;49173:16:0;;;;49137:52;:77;;;;-1:-1:-1;;;;;;49193:21:0;;49207:6;49193:21;;49137:77;:100;;;;;49224:13;-1:-1:-1;;;;;49218:19:0;:2;-1:-1:-1;;;;;49218:19:0;;;49137:100;:128;;;;-1:-1:-1;;;;;;49242:23:0;;;;;;:19;:23;;;;;;;;49241:24;49137:128;:158;;;;-1:-1:-1;;;;;;49270:25:0;;;;;;:19;:25;;;;;;;;49269:26;49137:158;49133:484;;;49330:7;;-1:-1:-1;;;49330:7:0;;;;:15;;49341:4;49330:15;49322:24;;;;;;49379:7;;49369:6;:17;;49361:70;;;;-1:-1:-1;;;49361:70:0;;16060:2:1;49361:70:0;;;16042:21:1;16099:2;16079:18;;;16072:30;16138:34;16118:18;;;16111:62;-1:-1:-1;;;16189:18:1;;;16182:38;16237:19;;49361:70:0;15858:404:1;49361:70:0;49446:32;49481:13;49491:2;49481:9;:13::i;:::-;49554:10;;49446:48;;-1:-1:-1;49517:33:0;49544:6;49446:48;49517:33;:::i;:::-;:47;;49509:96;;;;-1:-1:-1;;;49509:96:0;;16469:2:1;49509:96:0;;;16451:21:1;16508:2;16488:18;;;16481:30;16547:34;16527:18;;;16520:62;-1:-1:-1;;;16598:18:1;;;16591:34;16642:19;;49509:96:0;16267:400:1;49509:96:0;49307:310;49133:484;49644:11;49641:92;;49672:28;49688:4;49694:2;49698:1;49672:15;:28::i;49641:92::-;49749:8;;-1:-1:-1;;;49749:8:0;;;;49748:9;:42;;;;-1:-1:-1;;;;;;49761:29:0;;;;;;:25;:29;;;;;;;;49748:42;:78;;;;-1:-1:-1;49810:15:0;;-1:-1:-1;;;;;49794:32:0;;;49810:15;;49794:32;;49748:78;:97;;;;-1:-1:-1;24122:6:0;;-1:-1:-1;;;;;49830:15:0;;;24122:6;;49830:15;;49748:97;:114;;;;-1:-1:-1;24122:6:0;;-1:-1:-1;;;;;49849:13:0;;;24122:6;;49849:13;;49748:114;:142;;;;-1:-1:-1;;;;;;49867:23:0;;;;;;:19;:23;;;;;;;;49866:24;49748:142;:172;;;;-1:-1:-1;;;;;;49895:25:0;;;;;;:19;:25;;;;;;;;49894:26;49748:172;49745:343;;;49954:7;;-1:-1:-1;;;49954:7:0;;;;:15;;49965:4;49954:15;49946:24;;;;;;50005:8;;49995:6;:18;;49987:89;;;;-1:-1:-1;;;49987:89:0;;16874:2:1;49987:89:0;;;16856:21:1;16913:2;16893:18;;;16886:30;16952:34;16932:18;;;16925:62;17023:28;17003:18;;;16996:56;17069:19;;49987:89:0;16672:422:1;49987:89:0;50094:28;50125:24;50143:4;50125:9;:24::i;:::-;50201:18;;50094:55;;-1:-1:-1;50177:42:0;;;;;;;50231:20;;-1:-1:-1;50243:8:0;;-1:-1:-1;;;50243:8:0;;;;50242:9;50231:20;:53;;;;-1:-1:-1;;;;;;50255:29:0;;;;;;:25;:29;;;;;;;;50231:53;:81;;;;-1:-1:-1;;;;;;50289:23:0;;;;;;:19;:23;;;;;;;;50288:24;50231:81;:111;;;;-1:-1:-1;;;;;;50317:25:0;;;;;;:19;:25;;;;;;;;50316:26;50231:111;50228:3258;;;50384:18;;50420:7;;50384:18;;-1:-1:-1;;;;50420:7:0;;;;50417:774;;;50502:18;;50451:48;50502:18;50451:24;50469:4;50451:9;:24::i;:::-;:28;;:48::i;:::-;:69;50448:728;;;50569:18;;50610:89;50634:4;50641:42;50569:18;50610:15;:89::i;:::-;50729:82;;762:25:1;;;50753:42:0;;50746:4;;50729:82;;750:2:1;735:18;50729:82:0;;;;;;;50522:309;50448:728;;;50860:21;50884:48;50913:18;;50884:24;50902:4;50884:9;:24::i;:48::-;50860:72;;50955:89;50979:4;50986:42;51030:13;50955:15;:89::i;:::-;51074:82;;762:25:1;;;51098:42:0;;51091:4;;51074:82;;750:2:1;735:18;51074:82:0;;;;;;;50837:339;50448:728;51199:18;51223;51244:13;;51223:34;;51263:23;51289:59;51337:10;51289:43;51314:17;;51289:20;:24;;:43;;;;:::i;:59::-;51263:85;-1:-1:-1;51354:12:0;51369:22;51263:85;51389:1;51369:19;:22::i;:::-;51354:37;-1:-1:-1;51397:17:0;51417:25;:15;51354:37;51417:19;:25::i;:::-;51471:8;:15;;-1:-1:-1;;;;51471:15:0;-1:-1:-1;;;51471:15:0;;;51397:45;-1:-1:-1;51501:14:0;;;;;:39;;;51539:1;51519:17;;:21;51501:39;:54;;;;-1:-1:-1;51545:10:0;;-1:-1:-1;;;51545:10:0;;;;51544:11;51501:54;51497:1101;;;51576:20;51563:33;;51611:28;51628:10;51611:16;:28::i;:::-;51667:13;;51705:17;;51667:13;;-1:-1:-1;51705:21:0;51701:310;;51749:23;51775:60;51824:10;51775:44;51801:17;;51775:21;:25;;:44;;;;:::i;:60::-;51873:15;;:48;;51749:86;;-1:-1:-1;51855:12:0;;-1:-1:-1;;;;;51873:15:0;;;;51749:86;;51855:12;51873:48;51855:12;51873:48;51749:86;51873:15;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51854:67;;;51948:7;51940:51;;;;-1:-1:-1;;;51940:51:0;;17301:2:1;51940:51:0;;;17283:21:1;17340:2;17320:18;;;17313:30;17379:33;17359:18;;;17352:61;17430:18;;51940:51:0;17099:355:1;51940:51:0;51728:283;;51701:310;51497:1101;;;52055:1;52042:10;:14;:39;;;;;52080:1;52060:17;;:21;52042:39;:53;;;;-1:-1:-1;52085:10:0;;-1:-1:-1;;;52085:10:0;;;;52042:53;52038:560;;;52116:20;52103:33;;52151:23;52177:42;52215:3;52177:33;52192:17;;52177:10;:14;;:33;;;;:::i;:42::-;52151:68;-1:-1:-1;52247:31:0;:10;52151:68;52247:14;:31::i;:::-;52234:44;;52306:36;52324:17;;52306:13;;:17;;:36;;;;:::i;:::-;52293:49;;52359:28;52376:10;52359:16;:28::i;:::-;52426:17;;:21;52422:170;;52503:15;;52472:64;;52496:4;;-1:-1:-1;;;;;52503:15:0;52520;52472;:64::i;:::-;52097:501;52038:560;52618:19;;:23;52614:518;;52660:25;52688:62;52739:10;52688:46;52714:19;;52688:21;:25;;:46;;;;:::i;:62::-;52660:90;-1:-1:-1;52785:24:0;52660:90;52807:1;52785:21;:24::i;:::-;52845:18;;:53;;52765:44;;-1:-1:-1;52827:12:0;;-1:-1:-1;;;;;52845:18:0;;;;52765:44;;52827:12;52845:53;52827:12;52845:53;52765:44;52845:18;:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52826:72;;;52921:7;52913:53;;;;-1:-1:-1;;;52913:53:0;;;;;;;:::i;:::-;52995:18;;:53;;-1:-1:-1;;;;;52995:18:0;;;;53026:17;;52995:53;;;;53026:17;52995:18;:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52981:67;;;;;53071:7;53063:53;;;;-1:-1:-1;;;53063:53:0;;;;;;;:::i;:::-;52643:489;;52614:518;53143:17;;:21;53139:300;;53184:18;53205:60;53254:10;53205:44;53231:17;;53205:21;:25;;:44;;;;:::i;:60::-;53184:81;;53327:30;53340:4;53346:10;53327:12;:30::i;:::-;53380:43;;;18063:25:1;;;18119:2;18104:18;;18097:34;;;18147:18;;;18140:34;;;53380:43:0;;18051:2:1;18036:18;53380:43:0;;;;;;;53166:273;53139:300;-1:-1:-1;;53458:8:0;:16;;-1:-1:-1;;;;53458:16:0;;;-1:-1:-1;;;50228:3258:0;53514:8;;-1:-1:-1;;;;;53623:25:0;;53498:12;53623:25;;;:19;:25;;;;;;53514:8;-1:-1:-1;;;53514:8:0;;;;;53513:9;;53623:25;;:52;;-1:-1:-1;;;;;;53652:23:0;;;;;;:19;:23;;;;;;;;53623:52;53620:383;;;-1:-1:-1;53702:5:0;53722:33;53738:4;53744:2;53748:6;53722:15;:33::i;:::-;53620:383;;;-1:-1:-1;;;;;53788:29:0;;;;;;:25;:29;;;;;;;;53787:30;:66;;;;-1:-1:-1;;;;;;53822:31:0;;;;;;:25;:31;;;;;;;;53821:32;53787:66;:96;;;;-1:-1:-1;;;;;;53858:25:0;;;;;;:19;:25;;;;;;;;53857:26;53787:96;:124;;;;-1:-1:-1;;;;;;53888:23:0;;;;;;:19;:23;;;;;;;;53887:24;53787:124;53784:219;;;-1:-1:-1;53938:5:0;53958:33;53974:4;53980:2;53984:6;53958:15;:33::i;:::-;54018:7;54015:849;;;54042:15;54060:33;54089:3;54060:24;54071:12;;54060:6;:10;;:24;;;;:::i;:33::-;54042:51;;54108:16;54127:34;54157:3;54127:25;54138:13;;54127:6;:10;;:25;;;;:::i;:34::-;-1:-1:-1;;;;;54205:29:0;;;;;;:25;:29;;;;;;54108:53;;-1:-1:-1;54205:29:0;;:50;;;;;54254:1;54238:13;;:17;54205:50;54202:651;;;54285:20;:6;54296:8;54285:10;:20::i;:::-;54276:29;;54324:46;54340:4;54354;54361:8;54324:15;:46::i;:::-;54389:33;54405:4;54411:2;54415:6;54389:15;:33::i;:::-;54202:651;;;-1:-1:-1;;;;;54514:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;54564:1;54549:12;;:16;54514:51;54511:342;;;54595:19;:6;54606:7;54595:10;:19::i;:::-;54586:28;;54633:45;54649:4;54663;54670:7;54633:15;:45::i;54511:342::-;54804:33;54820:4;54826:2;54830:6;54804:15;:33::i;:::-;54027:837;;54015:849;48966:5905;;;48853:6018;;;:::o;45992:230::-;46148:20;;46134:13;:34;46126:43;;;;;;46180:20;:34;45992:230::o;25149:173::-;25224:6;;;-1:-1:-1;;;;;25241:17:0;;;-1:-1:-1;;;;;;25241:17:0;;;;;;;25274:40;;25224:6;;;25241:17;25224:6;;25274:40;;25205:16;;25274:40;25194:128;25149:173;:::o;57687:217::-;57742:62;57787:16;;57742:40;57763:18;;57742:16;;:20;;:40;;;;:::i;:::-;:44;;:62::i;:::-;57727:12;:77;57878:17;;57853:19;;57831:17;;:65;;57878:17;57831:42;;:17;:21;:42::i;:65::-;57815:13;:81;57687:217::o;44446:321::-;-1:-1:-1;;;;;44537:31:0;;;;;;:25;:31;;;;;;;;:40;;;;;;;44529:122;;;;-1:-1:-1;;;44529:122:0;;18387:2:1;44529:122:0;;;18369:21:1;18426:2;18406:18;;;18399:30;18465:34;18445:18;;;18438:62;18536:34;18516:18;;;18509:62;-1:-1:-1;;;18587:19:1;;;18580:36;18633:19;;44529:122:0;18185:473:1;44529:122:0;-1:-1:-1;;;;;44662:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;44662:39:0;;;;;;;;;;44719:40;;44662:39;;:31;44719:40;;;44446:321;;:::o;7729:733::-;-1:-1:-1;;;;;7869:20:0;;7861:70;;;;-1:-1:-1;;;7861:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7950:23:0;;7942:71;;;;-1:-1:-1;;;7942:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8110:17:0;;8086:21;8110:17;;;;;;;;;;;8146:23;;;;8138:74;;;;-1:-1:-1;;;8138:74:0;;18865:2:1;8138:74:0;;;18847:21:1;18904:2;18884:18;;;18877:30;18943:34;18923:18;;;18916:62;-1:-1:-1;;;18994:18:1;;;18987:36;19040:19;;8138:74:0;18663:402:1;8138:74:0;-1:-1:-1;;;;;8248:17:0;;;:9;:17;;;;;;;;;;;8268:22;;;8248:42;;8312:20;;;;;;;;:30;;8284:6;;8248:9;8312:30;;8284:6;;8312:30;:::i;:::-;;;;;;;;8377:9;-1:-1:-1;;;;;8360:35:0;8369:6;-1:-1:-1;;;;;8360:35:0;;8388:6;8360:35;;;;762:25:1;;750:2;735:18;;616:177;8360:35:0;;;;;;;;8408:46;46287:904;35437:158;35495:7;35528:1;35523;:6;;35515:49;;;;-1:-1:-1;;;35515:49:0;;19272:2:1;35515:49:0;;;19254:21:1;19311:2;19291:18;;;19284:30;19350:32;19330:18;;;19323:60;19400:18;;35515:49:0;19070:354:1;35515:49:0;35582:5;35586:1;35582;:5;:::i;54879:591::-;55031:16;;;55045:1;55031:16;;;;;;;;55007:21;;55031:16;;;;;;;;;;-1:-1:-1;55031:16:0;55007:40;;55076:4;55058;55063:1;55058:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;55058:23:0;;;:7;;;;;;;;;;:23;;;;55102:15;;:22;;;-1:-1:-1;;;55102:22:0;;;;:15;;;;;:20;;:22;;;;;55058:7;;55102:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;55092:4;55097:1;55092:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;55092:32:0;;;:7;;;;;;;;;:32;55169:15;;55137:62;;55154:4;;55169:15;55187:11;55137:8;:62::i;:::-;55238:15;;:224;;-1:-1:-1;;;55238:224:0;;-1:-1:-1;;;;;55238:15:0;;;;:66;;:224;;55319:11;;55238:15;;55389:4;;55416;;55436:15;;55238:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55478:520;55660:15;;55628:62;;55645:4;;-1:-1:-1;;;;;55660:15:0;55678:11;55628:8;:62::i;:::-;55732:15;;:258;;-1:-1:-1;;;55732:258:0;;55804:4;55732:258;;;21143:34:1;;;21193:18;;;21186:34;;;55732:15:0;21236:18:1;;;21229:34;;;21279:18;;;21272:34;21322:19;;;21315:44;55964:15:0;21375:19:1;;;21368:35;-1:-1:-1;;;;;55732:15:0;;;;:31;;55771:9;;21077:19:1;;55732:258:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;798:131::-;-1:-1:-1;;;;;873:31:1;;863:42;;853:70;;919:1;916;909:12;934:315;1002:6;1010;1063:2;1051:9;1042:7;1038:23;1034:32;1031:52;;;1079:1;1076;1069:12;1031:52;1118:9;1105:23;1137:31;1162:5;1137:31;:::i;:::-;1187:5;1239:2;1224:18;;;;1211:32;;-1:-1:-1;;;934:315:1:o;1681:388::-;1749:6;1757;1810:2;1798:9;1789:7;1785:23;1781:32;1778:52;;;1826:1;1823;1816:12;1778:52;1865:9;1852:23;1884:31;1909:5;1884:31;:::i;:::-;1934:5;-1:-1:-1;1991:2:1;1976:18;;1963:32;2004:33;1963:32;2004:33;:::i;:::-;2056:7;2046:17;;;1681:388;;;;;:::o;2074:180::-;2133:6;2186:2;2174:9;2165:7;2161:23;2157:32;2154:52;;;2202:1;2199;2192:12;2154:52;-1:-1:-1;2225:23:1;;2074:180;-1:-1:-1;2074:180:1:o;2259:247::-;2318:6;2371:2;2359:9;2350:7;2346:23;2342:32;2339:52;;;2387:1;2384;2377:12;2339:52;2426:9;2413:23;2445:31;2470:5;2445:31;:::i;2511:456::-;2588:6;2596;2604;2657:2;2645:9;2636:7;2632:23;2628:32;2625:52;;;2673:1;2670;2663:12;2625:52;2712:9;2699:23;2731:31;2756:5;2731:31;:::i;:::-;2781:5;-1:-1:-1;2838:2:1;2823:18;;2810:32;2851:33;2810:32;2851:33;:::i;:::-;2511:456;;2903:7;;-1:-1:-1;;;2957:2:1;2942:18;;;;2929:32;;2511:456::o;2972:248::-;3040:6;3048;3101:2;3089:9;3080:7;3076:23;3072:32;3069:52;;;3117:1;3114;3107:12;3069:52;-1:-1:-1;;3140:23:1;;;3210:2;3195:18;;;3182:32;;-1:-1:-1;2972:248:1:o;3225:118::-;3311:5;3304:13;3297:21;3290:5;3287:32;3277:60;;3333:1;3330;3323:12;3348:241;3404:6;3457:2;3445:9;3436:7;3432:23;3428:32;3425:52;;;3473:1;3470;3463:12;3425:52;3512:9;3499:23;3531:28;3553:5;3531:28;:::i;3991:316::-;4068:6;4076;4084;4137:2;4125:9;4116:7;4112:23;4108:32;4105:52;;;4153:1;4150;4143:12;4105:52;-1:-1:-1;;4176:23:1;;;4246:2;4231:18;;4218:32;;-1:-1:-1;4297:2:1;4282:18;;;4269:32;;3991:316;-1:-1:-1;3991:316:1:o;4312:382::-;4377:6;4385;4438:2;4426:9;4417:7;4413:23;4409:32;4406:52;;;4454:1;4451;4444:12;4406:52;4493:9;4480:23;4512:31;4537:5;4512:31;:::i;:::-;4562:5;-1:-1:-1;4619:2:1;4604:18;;4591:32;4632:30;4591:32;4632:30;:::i;4699:750::-;4791:6;4799;4807;4860:2;4848:9;4839:7;4835:23;4831:32;4828:52;;;4876:1;4873;4866:12;4828:52;4916:9;4903:23;4945:18;4986:2;4978:6;4975:14;4972:34;;;5002:1;4999;4992:12;4972:34;5040:6;5029:9;5025:22;5015:32;;5085:7;5078:4;5074:2;5070:13;5066:27;5056:55;;5107:1;5104;5097:12;5056:55;5147:2;5134:16;5173:2;5165:6;5162:14;5159:34;;;5189:1;5186;5179:12;5159:34;5244:7;5237:4;5227:6;5224:1;5220:14;5216:2;5212:23;5208:34;5205:47;5202:67;;;5265:1;5262;5255:12;5202:67;5296:4;5288:13;;;;-1:-1:-1;5320:6:1;-1:-1:-1;;5361:20:1;;5348:34;5391:28;5348:34;5391:28;:::i;:::-;5438:5;5428:15;;;4699:750;;;;;:::o;5454:380::-;5533:1;5529:12;;;;5576;;;5597:61;;5651:4;5643:6;5639:17;5629:27;;5597:61;5704:2;5696:6;5693:14;5673:18;5670:38;5667:161;;;5750:10;5745:3;5741:20;5738:1;5731:31;5785:4;5782:1;5775:15;5813:4;5810:1;5803:15;5667:161;;5454:380;;;:::o;5839:356::-;6041:2;6023:21;;;6060:18;;;6053:30;6119:34;6114:2;6099:18;;6092:62;6186:2;6171:18;;5839:356::o;6200:184::-;6270:6;6323:2;6311:9;6302:7;6298:23;6294:32;6291:52;;;6339:1;6336;6329:12;6291:52;-1:-1:-1;6362:16:1;;6200:184;-1:-1:-1;6200:184:1:o;6668:245::-;6735:6;6788:2;6776:9;6767:7;6763:23;6759:32;6756:52;;;6804:1;6801;6794:12;6756:52;6836:9;6830:16;6855:28;6877:5;6855:28;:::i;6918:127::-;6979:10;6974:3;6970:20;6967:1;6960:31;7010:4;7007:1;7000:15;7034:4;7031:1;7024:15;7050:168;7090:7;7156:1;7152;7148:6;7144:14;7141:1;7138:21;7133:1;7126:9;7119:17;7115:45;7112:71;;;7163:18;;:::i;:::-;-1:-1:-1;7203:9:1;;7050:168::o;7632:128::-;7672:3;7703:1;7699:6;7696:1;7693:13;7690:39;;;7709:18;;:::i;:::-;-1:-1:-1;7745:9:1;;7632:128::o;8110:217::-;8150:1;8176;8166:132;;8220:10;8215:3;8211:20;8208:1;8201:31;8255:4;8252:1;8245:15;8283:4;8280:1;8273:15;8166:132;-1:-1:-1;8312:9:1;;8110:217::o;10207:127::-;10268:10;10263:3;10259:20;10256:1;10249:31;10299:4;10296:1;10289:15;10323:4;10320:1;10313:15;10339:135;10378:3;-1:-1:-1;;10399:17:1;;10396:43;;;10419:18;;:::i;:::-;-1:-1:-1;10466:1:1;10455:13;;10339:135::o;11737:125::-;11777:4;11805:1;11802;11799:8;11796:34;;;11810:18;;:::i;:::-;-1:-1:-1;11847:9:1;;11737:125::o;15048:401::-;15250:2;15232:21;;;15289:2;15269:18;;;15262:30;15328:34;15323:2;15308:18;;15301:62;-1:-1:-1;;;15394:2:1;15379:18;;15372:35;15439:3;15424:19;;15048:401::o;15454:399::-;15656:2;15638:21;;;15695:2;15675:18;;;15668:30;15734:34;15729:2;15714:18;;15707:62;-1:-1:-1;;;15800:2:1;15785:18;;15778:33;15843:3;15828:19;;15454:399::o;17459:397::-;17661:2;17643:21;;;17700:2;17680:18;;;17673:30;17739:34;17734:2;17719:18;;17712:62;-1:-1:-1;;;17805:2:1;17790:18;;17783:31;17846:3;17831:19;;17459:397::o;19561:251::-;19631:6;19684:2;19672:9;19663:7;19659:23;19655:32;19652:52;;;19700:1;19697;19690:12;19652:52;19732:9;19726:16;19751:31;19776:5;19751:31;:::i;19817:980::-;20079:4;20127:3;20116:9;20112:19;20158:6;20147:9;20140:25;20184:2;20222:6;20217:2;20206:9;20202:18;20195:34;20265:3;20260:2;20249:9;20245:18;20238:31;20289:6;20324;20318:13;20355:6;20347;20340:22;20393:3;20382:9;20378:19;20371:26;;20432:2;20424:6;20420:15;20406:29;;20453:1;20463:195;20477:6;20474:1;20471:13;20463:195;;;20542:13;;-1:-1:-1;;;;;20538:39:1;20526:52;;20633:15;;;;20598:12;;;;20574:1;20492:9;20463:195;;;-1:-1:-1;;;;;;;20714:32:1;;;;20709:2;20694:18;;20687:60;-1:-1:-1;;;20778:3:1;20763:19;20756:35;20675:3;19817:980;-1:-1:-1;;;19817:980:1:o;21414:306::-;21502:6;21510;21518;21571:2;21559:9;21550:7;21546:23;21542:32;21539:52;;;21587:1;21584;21577:12;21539:52;21616:9;21610:16;21600:26;;21666:2;21655:9;21651:18;21645:25;21635:35;;21710:2;21699:9;21695:18;21689:25;21679:35;;21414:306;;;;;:::o
Swarm Source
ipfs://c7792da47a20c4d7fc9a079fe29872591fc4f9845c701e9082b2283e3eff3805
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $3,409.96 | 0.00131613 | $4.49 |
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.