More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 283 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 15288770 | 746 days ago | IN | 0 ETH | 0.00015044 | ||||
Approve | 15288770 | 746 days ago | IN | 0 ETH | 0.00015044 | ||||
Approve | 14746377 | 834 days ago | IN | 0 ETH | 0.00120437 | ||||
Approve | 14661552 | 848 days ago | IN | 0 ETH | 0.00162918 | ||||
Approve | 14657016 | 848 days ago | IN | 0 ETH | 0.00097003 | ||||
Approve | 14657011 | 848 days ago | IN | 0 ETH | 0.0010793 | ||||
Approve | 14568019 | 862 days ago | IN | 0 ETH | 0.00222087 | ||||
Team Remove Rema... | 14420268 | 885 days ago | IN | 0 ETH | 0.00062741 | ||||
Team Release Liq... | 14420239 | 885 days ago | IN | 0 ETH | 0.00196675 | ||||
Approve | 14306688 | 903 days ago | IN | 0 ETH | 0.00143775 | ||||
Approve | 14272148 | 908 days ago | IN | 0 ETH | 0.00288374 | ||||
Approve | 14258320 | 911 days ago | IN | 0 ETH | 0.00342917 | ||||
Approve | 14257160 | 911 days ago | IN | 0 ETH | 0.00296857 | ||||
Approve | 14257158 | 911 days ago | IN | 0 ETH | 0.00533113 | ||||
Approve | 14257142 | 911 days ago | IN | 0 ETH | 0.00434834 | ||||
Approve | 14253923 | 911 days ago | IN | 0 ETH | 0.00484932 | ||||
Approve | 14245147 | 913 days ago | IN | 0 ETH | 0.00222309 | ||||
Team Withdraw AL... | 14239850 | 913 days ago | IN | 0 ETH | 0.00561751 | ||||
Approve | 14236232 | 914 days ago | IN | 0 ETH | 0.00202054 | ||||
Approve | 14236207 | 914 days ago | IN | 0 ETH | 0.00177203 | ||||
Approve | 14234840 | 914 days ago | IN | 0 ETH | 0.00228454 | ||||
Approve | 14232206 | 915 days ago | IN | 0 ETH | 0.00439047 | ||||
Team Withdraw AL... | 14231906 | 915 days ago | IN | 0 ETH | 0.00415524 | ||||
Approve | 14229435 | 915 days ago | IN | 0 ETH | 0.00382708 | ||||
Approve | 14228409 | 915 days ago | IN | 0 ETH | 0.00282288 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
14420268 | 885 days ago | 0.12170238 ETH | ||||
14329492 | 900 days ago | 0.0014874 ETH | ||||
14329492 | 900 days ago | 0.01338661 ETH | ||||
14299465 | 904 days ago | 0.001615 ETH | ||||
14299465 | 904 days ago | 0.01453507 ETH | ||||
14262327 | 910 days ago | 0.00168929 ETH | ||||
14262327 | 910 days ago | 0.01520367 ETH | ||||
14258328 | 911 days ago | 0.00179817 ETH | ||||
14258328 | 911 days ago | 0.01618358 ETH | ||||
14257221 | 911 days ago | 0.00191624 ETH | ||||
14257221 | 911 days ago | 0.01724619 ETH | ||||
14254987 | 911 days ago | 0.00000021 ETH | ||||
14254987 | 911 days ago | 0.00205483 ETH | ||||
14254987 | 911 days ago | 0.01849351 ETH | ||||
14250335 | 912 days ago | 0.00000052 ETH | ||||
14250335 | 912 days ago | 0.00222678 ETH | ||||
14250335 | 912 days ago | 0.02004108 ETH | ||||
14244248 | 913 days ago | 0.00000091 ETH | ||||
14244248 | 913 days ago | 0.00242484 ETH | ||||
14244248 | 913 days ago | 0.02182357 ETH | ||||
14239850 | 913 days ago | 0.04566588 ETH | ||||
14239850 | 913 days ago | 0.04566588 ETH | ||||
14238683 | 914 days ago | 0.00000121 ETH | ||||
14238683 | 914 days ago | 0.0025639 ETH | ||||
14238683 | 914 days ago | 0.02307518 ETH |
Loading...
Loading
Contract Name:
MoonMoon
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-16 */ /* * Moon Moon Supply: 1 000 000 000 000 Max Wallet: 10 000 000 000 at launch then 20 000 000 000 Max TX: 2 500 000 000 at launch then 10 000 000 000 Tax: 10% 2% LP 2% Buybacks 2% Dev 4% Marketing DO NOT BUY UNTIL CONTRACT ADDRESS IS POSTED IN TELEGRAM * */ pragma solidity =0.8.7; // SPDX-License-Identifier: UNLICENSED interface IBEP20 { function totalSupply() external view returns (uint256); function decimals() external view returns (uint8); function symbol() external view returns (string memory); function name() external view returns (string memory); function getOwner() external view returns (address); 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 IuniswapV2ERC20 { 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; } 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 IuniswapV2Router01 { 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 factory() external pure returns (address); function WETH() external pure returns (address); 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; } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = msg.sender; _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == msg.sender, "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() external onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) external onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // 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; // solhint-disable-next-line no-inline-assembly 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"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private 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 // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @dev Library for managing * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive * types. * * Sets have the following properties: * * - Elements are added, removed, and checked for existence in constant time * (O(1)). * - Elements are enumerated in O(n). No guarantees are made on the ordering. * * ``` * contract Example { * // Add the library methods * using EnumerableSet for EnumerableSet.AddressSet; * * // Declare a set state variable * EnumerableSet.AddressSet private mySet; * } * ``` * * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`) * and `uint256` (`UintSet`) are supported. */ library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping (bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement. bytes32 lastvalue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastvalue; // Update the index for the moved value set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { require(set._values.length > index, "EnumerableSet: index out of bounds"); return set._values[index]; } // Bytes32Set struct Bytes32Set { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values in the set. O(1). */ function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } } //Moon Moon Contract ///////////// contract MoonMoon is IBEP20, Ownable { using Address for address; using EnumerableSet for EnumerableSet.AddressSet; event ContractChanged(uint256 indexed value); event ContractChangedBool(bool indexed value); event ContractChangedAddress(address indexed value); event antiBotBan(address indexed value); mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => uint256) private _buyLock; EnumerableSet.AddressSet private _excluded; EnumerableSet.AddressSet private _isBlacklisted; //Token Info string private constant _name = 'MoonMoon'; string private constant _symbol = 'MNMN'; uint8 private constant _decimals = 9; uint256 public constant InitialSupply= 1000000000000 * 10**_decimals; //Amount to Swap variable uint256 currentAmountToSwap = 2000000000 * 10**_decimals; //Divider for the MaxBalance based on circulating Supply (1%) uint8 public constant BalanceLimitDivider=100; //Divider for sellLimit based on circulating Supply (0.25%) uint16 public constant SellLimitDivider=400; //Buyers get locked for MaxBuyLockTime (put in seconds, works better especially if changing later) so they can't buy repeatedly uint16 public constant MaxBuyLockTime= 9 seconds; //The time Liquidity gets locked at start and prolonged once it gets released uint256 private constant DefaultLiquidityLockTime= 1800; //DevWallets address public TeamWallet=payable(0x963Aa69545b799e6DE148A0c97CEcb74F4690029); address public walletTwo=payable(0x2fAf735616214FE58560923679291C31Ef024c1a); //Uniswap router (Main & Testnet) address private uniswapV2Router=0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; //variables that track balanceLimit and sellLimit, //can be updated based on circulating supply and Sell- and BalanceLimitDividers uint256 private _circulatingSupply =InitialSupply; uint256 public balanceLimit = _circulatingSupply; uint256 public sellLimit = _circulatingSupply; uint256 private antiWhale = 2500000000 * 10**_decimals; //Used for anti-bot autoblacklist uint256 private tradingEnabledAt; //DO NOT CHANGE, THIS IS FOR HOLDING A TIMESTAMP uint256 private autoBanTime = 60; // Set to the amount of time in seconds after enable trading you want addresses to be auto blacklisted if they buy/sell/transfer in this time. uint256 private enableAutoBlacklist = 1; //Leave 1 if using, set to 0 if not using. //Tracks the current Taxes, different Taxes can be applied for buy/sell/transfer uint8 private _buyTax; uint8 private _sellTax; uint8 private _transferTax; uint8 private _burnTax; uint8 private _liquidityTax; uint8 private _marketingTax; address private _uniswapV2PairAddress; IuniswapV2Router02 private _uniswapV2Router; //Constructor/////////// constructor () { //contract creator gets 90% of the token to create LP-Pair uint256 deployerBalance=_circulatingSupply; _balances[msg.sender] = deployerBalance; emit Transfer(address(0), msg.sender, deployerBalance); // Uniswap Router _uniswapV2Router = IuniswapV2Router02(uniswapV2Router); //Creates a Uniswap Pair _uniswapV2PairAddress = IuniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); //Sets Buy/Sell limits balanceLimit=InitialSupply/BalanceLimitDivider; sellLimit=InitialSupply/SellLimitDivider; //Sets buyLockTime buyLockTime=0; //Set Starting Taxes _buyTax=10; _sellTax=10; _transferTax=10; _burnTax=0; _liquidityTax=20; _marketingTax=80; //Team wallets and deployer are excluded from Taxes _excluded.add(TeamWallet); _excluded.add(walletTwo); _excluded.add(msg.sender); } //Transfer functionality/// //transfer function, every transfer runs through this function function _transfer(address sender, address recipient, uint256 amount) private{ require(sender != address(0), "Transfer from zero"); require(recipient != address(0), "Transfer to zero"); //Manually Excluded adresses are transfering tax and lock free bool isExcluded = (_excluded.contains(sender) || _excluded.contains(recipient)); //Transactions from and to the contract are always tax and lock free bool isContractTransfer=(sender==address(this) || recipient==address(this)); //transfers between UniswapRouter and UniswapPair are tax and lock free address uniswapV2Router=address(_uniswapV2Router); bool isLiquidityTransfer = ((sender == _uniswapV2PairAddress && recipient == uniswapV2Router) || (recipient == _uniswapV2PairAddress && sender == uniswapV2Router)); //differentiate between buy/sell/transfer to apply different taxes/restrictions bool isBuy=sender==_uniswapV2PairAddress|| sender == uniswapV2Router; bool isSell=recipient==_uniswapV2PairAddress|| recipient == uniswapV2Router; //Pick transfer if(isContractTransfer || isLiquidityTransfer || isExcluded){ _feelessTransfer(sender, recipient, amount); } else{ //once trading is enabled, it can't be turned off again require(tradingEnabled,"trading not yet enabled"); _taxedTransfer(sender,recipient,amount,isBuy,isSell); } } //applies taxes, checks for limits, locks generates autoLP function _taxedTransfer(address sender, address recipient, uint256 amount,bool isBuy,bool isSell) private{ uint256 recipientBalance = _balances[recipient]; uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "Transfer exceeds balance"); uint8 tax; if(isSell){ //Sells can't exceed the sell limit require(amount<=sellLimit,"Dump protection"); require(_isBlacklisted.contains(sender) == false, "Address blacklisted!"); if (block.timestamp <= tradingEnabledAt + autoBanTime && enableAutoBlacklist == 1) { _isBlacklisted.add(sender); emit antiBotBan(sender); } tax=_sellTax; } else if(isBuy){ //Checks If the recipient balance(excluding Taxes) would exceed Balance Limit require(recipientBalance+amount<=balanceLimit,"whale protection"); require(amount <= antiWhale,"Tx amount exceeding max buy amount"); require(_isBlacklisted.contains(recipient) == false, "Address blacklisted!"); if (block.timestamp <= tradingEnabledAt + autoBanTime && enableAutoBlacklist == 1) { _isBlacklisted.add(recipient); emit antiBotBan(recipient); } tax=_buyTax; } else {//Transfer //Checks If the recipient balance(excluding Taxes) would exceed Balance Limit require(_isBlacklisted.contains(sender) == false, "Sender address blacklisted!"); require(_isBlacklisted.contains(recipient) == false, "Recipient address blacklisted!"); require(recipientBalance+amount<=balanceLimit,"whale protection"); if (block.timestamp <= tradingEnabledAt + autoBanTime && enableAutoBlacklist == 1) { _isBlacklisted.add(sender); emit antiBotBan(sender); } tax=_transferTax; } //Swapping AutoLP and MarketingETH is only possible if sender is not uniswapV2 pair, //if its not manually disabled, if its not already swapping and if its a Sell to avoid // people from causing a large price impact from repeatedly transfering when theres a large backlog of Tokens if((sender!=_uniswapV2PairAddress)&&(!manualConversion)&&(!_isSwappingContractModifier)&&isSell) _swapContractToken(); //Calculates the exact token amount for each tax uint256 tokensToBeBurnt=_calculateFee(amount, tax, _burnTax); uint256 contractToken=_calculateFee(amount, tax, _marketingTax+_liquidityTax); //Subtract the Taxed Tokens from the amount uint256 taxedAmount=amount-(tokensToBeBurnt + contractToken); //Removes token _removeToken(sender,amount); //Adds the taxed tokens to the contract wallet _balances[address(this)] += contractToken; //Burns tokens _circulatingSupply-=tokensToBeBurnt; //Adds token _addToken(recipient, taxedAmount); emit Transfer(sender,recipient,taxedAmount); } //Feeless transfer only transfers function _feelessTransfer(address sender, address recipient, uint256 amount) private{ uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "Transfer exceeds balance"); //Removes token _removeToken(sender,amount); //Adds token _addToken(recipient, amount); emit Transfer(sender,recipient,amount); } //Calculates the token that should be taxed function _calculateFee(uint256 amount, uint8 tax, uint8 taxPercent) private pure returns (uint256) { return (amount*tax*taxPercent) / 10000; } //balance that is claimable by the team uint256 public marketingBalance; //adds Token to balances function _addToken(address addr, uint256 amount) private { //the amount of token after transfer uint256 newAmount=_balances[addr]+amount; //sets newBalance _balances[addr]=newAmount; } //removes Token function _removeToken(address addr, uint256 amount) private { //the amount of token after transfer uint256 newAmount=_balances[addr]-amount; //sets newBalance _balances[addr]=newAmount; } //Swap Contract Tokens////////////////////////////////////////////////////////////////////////////////// //tracks auto generated ETH, useful for ticker etc uint256 public totalLPETH; //Locks the swap if already swapping bool private _isSwappingContractModifier; modifier lockTheSwap { _isSwappingContractModifier = true; _; _isSwappingContractModifier = false; } //swaps the token on the contract for Marketing ETH and LP Token. //always swaps the sellLimit of token to avoid a large price impact function _swapContractToken() private lockTheSwap{ uint256 contractBalance=_balances[address(this)]; uint16 totalTax=_marketingTax+_liquidityTax; uint256 tokenToSwap = currentAmountToSwap; //only swap if contractBalance is larger than tokenToSwap, and totalTax is unequal to 0 if(contractBalance<tokenToSwap||totalTax==0){ return; } //splits the token in TokenForLiquidity and tokenForMarketing uint256 tokenForLiquidity=(tokenToSwap*_liquidityTax)/totalTax; uint256 tokenForMarketing= tokenToSwap-tokenForLiquidity; //splits tokenForLiquidity in 2 halves uint256 liqToken=tokenForLiquidity/2; uint256 liqETHToken=tokenForLiquidity-liqToken; //swaps marktetingToken and the liquidity token half for ETH uint256 swapToken=liqETHToken+tokenForMarketing; //Gets the initial ETH balance uint256 initialETHBalance = address(this).balance; _swapTokenForETH(swapToken); uint256 newETH=(address(this).balance - initialETHBalance); //calculates the amount of ETH belonging to the LP-Pair and converts them to LP uint256 liqETH = (newETH*liqETHToken)/swapToken; _addLiquidity(liqToken, liqETH); //Get the ETH balance after LP generation to get the //exact amount of token left for marketing uint256 distributeETH=(address(this).balance - initialETHBalance); //distributes remaining BETHNB to Marketing marketingBalance+=distributeETH; } //swaps tokens on the contract for ETH function _swapTokenForETH(uint256 amount) private { _approve(address(this), address(_uniswapV2Router), amount); address[] memory path = new address[](2); path[0] = address(this); path[1] = _uniswapV2Router.WETH(); _uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( amount, 0, path, address(this), block.timestamp ); } //Adds Liquidity directly to the contract where LP are locked(unlike safemoon forks, that transfer it to the owner) function _addLiquidity(uint256 tokenamount, uint256 ethamount) private returns (uint256 tAmountSent, uint256 ethAmountSent) { totalLPETH+=ethamount; uint256 minETH = (ethamount*75) / 100; uint256 minTokens = (tokenamount*75) / 100; _approve(address(this), address(_uniswapV2Router), tokenamount); _uniswapV2Router.addLiquidityETH{value: ethamount}( address(this), tokenamount, minTokens, minETH, address(this), block.timestamp ); tAmountSent = tokenamount; ethAmountSent = ethamount; return (tAmountSent, ethAmountSent); } //public functions ///////////////////////////////////////////////////////////////////////////////////// function getLiquidityReleaseTimeInSeconds() external view returns (uint256){ if(block.timestamp<_liquidityUnlockTime){ return _liquidityUnlockTime-block.timestamp; } return 0; } function getBurnedTokens() external view returns(uint256){ return (InitialSupply-_circulatingSupply)/10**_decimals; } function getLimits() external view returns(uint256 balance, uint256 sell){ return(balanceLimit/10**_decimals, sellLimit/10**_decimals); } function getTaxes() external view returns(uint256 burnTax,uint256 liquidityTax, uint256 marketingTax, uint256 buyTax, uint256 sellTax, uint256 transferTax){ return (_burnTax,_liquidityTax,_marketingTax,_buyTax,_sellTax,_transferTax); } //How long is a given address still locked from buying function getAddressBuyLockTimeInSeconds(address AddressToCheck) external view returns (uint256){ uint256 lockTime=_buyLock[AddressToCheck]; if(lockTime<=block.timestamp) { return 0; } return lockTime-block.timestamp; } function getBuyLockTimeInSeconds() external view returns(uint256){ return buyLockTime; } //Functions every wallet can call //Resets buy lock of caller to the default buyLockTime should something go very wrong function AddressResetBuyLock() external{ _buyLock[msg.sender]=block.timestamp+buyLockTime; } //Settings////////////////////////////////////////////////////////////////////////////////////////////// bool public buyLockDisabled; uint256 public buyLockTime; bool public manualConversion; function TeamWithdrawALLMarketingETH() external onlyOwner{ uint256 amount=marketingBalance; marketingBalance=0; payable(TeamWallet).transfer((amount*50) / 100); payable(walletTwo).transfer((amount-(amount*50) / 100)); emit Transfer(address(this), TeamWallet, (amount*50) / 100); emit Transfer(address(this), walletTwo, (amount-(amount*50) / 100)); } function TeamWithdrawXMarketingETH(uint256 amount) external onlyOwner{ require(amount<=marketingBalance, "Error: Amount greater than available balance."); marketingBalance-=amount; payable(TeamWallet).transfer((amount*50) / 100); payable(walletTwo).transfer((amount-(amount*50) / 100)); emit Transfer(address(this), TeamWallet, (amount*50) / 100); emit Transfer(address(this), walletTwo, (amount-(amount*50) / 100)); } //switches autoLiquidity and marketing ETH generation during transfers function TeamSwitchManualETHConversion(bool manual) external onlyOwner{ manualConversion=manual; emit ContractChangedBool(manualConversion); } function TeamChangeAntiWhale(uint256 newAntiWhale) external onlyOwner{ antiWhale=newAntiWhale * 10**_decimals; emit ContractChanged(antiWhale); } function TeamChangeTeamWallet(address newTeamWallet) external onlyOwner{ require(newTeamWallet != address(0), "Error: Cannot be 0 address."); TeamWallet=payable(newTeamWallet); emit ContractChangedAddress(TeamWallet); } function TeamChangeWalletTwo(address newWalletTwo) external onlyOwner{ require(newWalletTwo != address(0), "Error: Cannot be 0 address."); walletTwo=payable(newWalletTwo); emit ContractChangedAddress(walletTwo); } //Disables the timeLock after buying for everyone function TeamDisableBuyLock(bool disabled) external onlyOwner{ buyLockDisabled=disabled; emit ContractChangedBool(buyLockDisabled); } //Sets BuyLockTime, needs to be lower than MaxBuyLockTime function TeamSetBuyLockTime(uint256 buyLockSeconds) external onlyOwner{ require(buyLockSeconds<=MaxBuyLockTime,"Buy Lock time too high"); buyLockTime=buyLockSeconds; emit ContractChanged(buyLockTime); } //Allows CA owner to change how much the contract sells to prevent massive contract sells as the token grows. function TeamUpdateAmountToSwap(uint256 newSwapAmount) external onlyOwner{ currentAmountToSwap = newSwapAmount; emit ContractChanged(currentAmountToSwap); } //Allows wallet exclusion to be added after launch function addWalletExclusion(address exclusionAdd) external onlyOwner{ _excluded.add(exclusionAdd); emit ContractChangedAddress(exclusionAdd); } //Allows you to remove wallet exclusions after launch function removeWalletExclusion(address exclusionRemove) external onlyOwner{ _excluded.remove(exclusionRemove); emit ContractChangedAddress(exclusionRemove); } //Adds address to blacklist and prevents sells, buys or transfers. function addAddressToBlacklist(address blacklistedAddress) external onlyOwner { _isBlacklisted.add(blacklistedAddress); emit ContractChangedAddress(blacklistedAddress); } //Remove address from blacklist and allow sells, buys or transfers. function removeAddressFromBlacklist(address blacklistedAddress) external onlyOwner { _isBlacklisted.remove(blacklistedAddress); emit ContractChangedAddress(blacklistedAddress); } //Sets Taxes, is limited by MaxTax(20%) to make it impossible to create honeypot function TeamSetTaxes(uint8 burnTaxes, uint8 liquidityTaxes, uint8 marketingTaxes, uint8 buyTax, uint8 sellTax, uint8 transferTax) external onlyOwner{ uint8 totalTax=burnTaxes+liquidityTaxes+marketingTaxes; require(totalTax==100, "burn+liq+marketing needs to equal 100%"); require(buyTax <= 20, "Error: Honeypot prevention prevents buyTax from exceeding 20."); require(sellTax <= 20, "Error: Honeypot prevention prevents sellTax from exceeding 20."); require(transferTax <= 20, "Error: Honeypot prevention prevents transferTax from exceeding 20."); _burnTax=burnTaxes; _liquidityTax=liquidityTaxes; _marketingTax=marketingTaxes; _buyTax=buyTax; _sellTax=sellTax; _transferTax=transferTax; emit ContractChanged(_burnTax); emit ContractChanged(_liquidityTax); emit ContractChanged(_buyTax); emit ContractChanged(_sellTax); emit ContractChanged(_transferTax); } //manually converts contract token to LP function TeamCreateLPandETH() external onlyOwner{ _swapContractToken(); } function teamUpdateUniswapRouter(address newRouter) external onlyOwner { require(newRouter != address(0), "Error: Cannot be 0 address."); uniswapV2Router=newRouter; emit ContractChangedAddress(newRouter); } //Limits need to be at least target, to avoid setting value to 0(avoid potential Honeypot) function TeamUpdateLimits(uint256 newBalanceLimit, uint256 newSellLimit) external onlyOwner{ //SellLimit needs to be below 1% to avoid a Large Price impact when generating auto LP require(newSellLimit<_circulatingSupply/100, "Error: New sell limit above 1% of circulating supply."); //Adds decimals to limits newBalanceLimit=newBalanceLimit*10**_decimals; newSellLimit=newSellLimit*10**_decimals; //Calculates the target Limits based on supply uint256 targetBalanceLimit=_circulatingSupply/BalanceLimitDivider; uint256 targetSellLimit=_circulatingSupply/SellLimitDivider; require((newBalanceLimit>=targetBalanceLimit), "newBalanceLimit needs to be at least target"); require((newSellLimit>=targetSellLimit), "newSellLimit needs to be at least target"); balanceLimit = newBalanceLimit; sellLimit = newSellLimit; emit ContractChanged(balanceLimit); emit ContractChanged(sellLimit); } //Setup Functions/////////////////////////////////////////////////////////////////////////////////////// bool public tradingEnabled; address private _liquidityTokenAddress; //Enables trading for everyone function SetupEnableTrading() external onlyOwner{ tradingEnabled=true; tradingEnabledAt=block.timestamp; } //Sets up the LP-Token Address required for LP Release function SetupLiquidityTokenAddress(address liquidityTokenAddress) external onlyOwner{ require(liquidityTokenAddress != address(0), "Error: Cannot be 0 address."); _liquidityTokenAddress=liquidityTokenAddress; } //Liquidity Lock//////////////////////////////////////////////////////////////////////////////////////// //the timestamp when Liquidity unlocks uint256 private _liquidityUnlockTime; //Adds time to LP lock in seconds. function TeamProlongLiquidityLockInSeconds(uint256 secondsUntilUnlock) external onlyOwner{ _prolongLiquidityLock(secondsUntilUnlock+block.timestamp); emit ContractChanged(secondsUntilUnlock+block.timestamp); } //Adds time to LP lock based on set time. function _prolongLiquidityLock(uint256 newUnlockTime) private{ // require new unlock time to be longer than old one require(newUnlockTime>_liquidityUnlockTime, "Error: New unlock time is shorter than old one."); _liquidityUnlockTime=newUnlockTime; emit ContractChanged(_liquidityUnlockTime); } //Release Liquidity Tokens once unlock time is over function TeamReleaseLiquidity() external onlyOwner returns (address tWAddress, uint256 amountSent) { //Only callable if liquidity Unlock time is over require(block.timestamp >= _liquidityUnlockTime, "Not yet unlocked"); IuniswapV2ERC20 liquidityToken = IuniswapV2ERC20(_liquidityTokenAddress); uint256 amount = liquidityToken.balanceOf(address(this)); //Liquidity release if something goes wrong at start liquidityToken.transfer(TeamWallet, amount); emit Transfer(address(this), TeamWallet, amount); tWAddress = TeamWallet; amountSent = amount; return (tWAddress, amountSent); } //Removes Liquidity once unlock Time is over, function TeamRemoveLiquidity() external onlyOwner returns (uint256 newBalance) { //Only callable if liquidity Unlock time is over require(block.timestamp >= _liquidityUnlockTime, "Not yet unlocked"); IuniswapV2ERC20 liquidityToken = IuniswapV2ERC20(_liquidityTokenAddress); uint256 amount = liquidityToken.balanceOf(address(this)); liquidityToken.approve(address(_uniswapV2Router),amount); //Removes Liquidity and adds it to marketing Balance uint256 initialETHBalance = address(this).balance; _uniswapV2Router.removeLiquidityETHSupportingFeeOnTransferTokens( address(this), amount, (amount*75) / 100, (amount*75) / 100, address(this), block.timestamp ); uint256 newETHBalance = address(this).balance-initialETHBalance; marketingBalance+=newETHBalance; newBalance=newETHBalance; return newBalance; } //Releases all remaining ETH on the contract wallet, so ETH wont be burned function TeamRemoveRemainingETH() external onlyOwner{ require(block.timestamp >= _liquidityUnlockTime, "Not yet unlocked"); (bool sent,) =TeamWallet.call{value: (address(this).balance)}(""); require(sent, "Error: Not sent."); } //////////////////////////////////////////////////////////////////////////////////////////////////////// //external////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////// receive() external payable {} fallback() external payable {} // IBEP20 function getOwner() external view override returns (address) { return owner(); } function name() external pure override returns (string memory) { return _name; } function symbol() external pure override returns (string memory) { return _symbol; } function decimals() external pure override returns (uint8) { return _decimals; } function totalSupply() external view override returns (uint256) { return _circulatingSupply; } function balanceOf(address account) external view override returns (uint256) { return _balances[account]; } function transfer(address recipient, uint256 amount) external override returns (bool) { _transfer(msg.sender, recipient, amount); return true; } function allowance(address _owner, address spender) external view override returns (uint256) { return _allowances[_owner][spender]; } function approve(address spender, uint256 amount) external override returns (bool) { _approve(msg.sender, spender, amount); return true; } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "Approve from zero"); require(spender != address(0), "Approve to zero"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][msg.sender]; require(currentAllowance >= amount, "Transfer > allowance"); _approve(sender, msg.sender, currentAllowance - amount); return true; } // IBEP20 - Helpers function increaseAllowance(address spender, uint256 addedValue) external returns (bool) { _approve(msg.sender, spender, _allowances[msg.sender][spender] + addedValue); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool) { uint256 currentAllowance = _allowances[msg.sender][spender]; require(currentAllowance >= subtractedValue, "<0 allowance"); _approve(msg.sender, spender, currentAllowance - subtractedValue); return true; } }
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":"uint256","name":"value","type":"uint256"}],"name":"ContractChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"value","type":"address"}],"name":"ContractChangedAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"ContractChangedBool","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":"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":"value","type":"address"}],"name":"antiBotBan","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"AddressResetBuyLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"BalanceLimitDivider","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"InitialSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MaxBuyLockTime","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SellLimitDivider","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SetupEnableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"liquidityTokenAddress","type":"address"}],"name":"SetupLiquidityTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAntiWhale","type":"uint256"}],"name":"TeamChangeAntiWhale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newTeamWallet","type":"address"}],"name":"TeamChangeTeamWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWalletTwo","type":"address"}],"name":"TeamChangeWalletTwo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TeamCreateLPandETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"disabled","type":"bool"}],"name":"TeamDisableBuyLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"secondsUntilUnlock","type":"uint256"}],"name":"TeamProlongLiquidityLockInSeconds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TeamReleaseLiquidity","outputs":[{"internalType":"address","name":"tWAddress","type":"address"},{"internalType":"uint256","name":"amountSent","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TeamRemoveLiquidity","outputs":[{"internalType":"uint256","name":"newBalance","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TeamRemoveRemainingETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyLockSeconds","type":"uint256"}],"name":"TeamSetBuyLockTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"burnTaxes","type":"uint8"},{"internalType":"uint8","name":"liquidityTaxes","type":"uint8"},{"internalType":"uint8","name":"marketingTaxes","type":"uint8"},{"internalType":"uint8","name":"buyTax","type":"uint8"},{"internalType":"uint8","name":"sellTax","type":"uint8"},{"internalType":"uint8","name":"transferTax","type":"uint8"}],"name":"TeamSetTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"manual","type":"bool"}],"name":"TeamSwitchManualETHConversion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSwapAmount","type":"uint256"}],"name":"TeamUpdateAmountToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBalanceLimit","type":"uint256"},{"internalType":"uint256","name":"newSellLimit","type":"uint256"}],"name":"TeamUpdateLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TeamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TeamWithdrawALLMarketingETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TeamWithdrawXMarketingETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"blacklistedAddress","type":"address"}],"name":"addAddressToBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"exclusionAdd","type":"address"}],"name":"addWalletExclusion","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":[],"name":"balanceLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLockDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":"AddressToCheck","type":"address"}],"name":"getAddressBuyLockTimeInSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBurnedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBuyLockTimeInSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLimits","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"sell","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLiquidityReleaseTimeInSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTaxes","outputs":[{"internalType":"uint256","name":"burnTax","type":"uint256"},{"internalType":"uint256","name":"liquidityTax","type":"uint256"},{"internalType":"uint256","name":"marketingTax","type":"uint256"},{"internalType":"uint256","name":"buyTax","type":"uint256"},{"internalType":"uint256","name":"sellTax","type":"uint256"},{"internalType":"uint256","name":"transferTax","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":[],"name":"manualConversion","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"blacklistedAddress","type":"address"}],"name":"removeAddressFromBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"exclusionRemove","type":"address"}],"name":"removeWalletExclusion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"teamUpdateUniswapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalLPETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"walletTwo","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052620000126009600a62000552565b6200002290637735940062000611565b600855600980546001600160a01b031990811673963aa69545b799e6de148a0c97cecb74f4690029178255600a80548216732faf735616214fe58560923679291c31ef024c1a178155600b8054909216737a250d5630b4cf539739df2c5dacb4c659f2488d1790915562000097919062000552565b620000a89064e8d4a5100062000611565b600c819055600d819055600e55620000c36009600a62000552565b620000d390639502f90062000611565b600f55603c6011556001601255348015620000ed57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600c54336000818152600160209081526040808320859055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3600b54601480546001600160a01b0319166001600160a01b0390921691821790556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b158015620001ce57600080fd5b505afa158015620001e3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002099190620004b4565b6001600160a01b031663c9c6539630601460009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200026757600080fd5b505afa1580156200027c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a29190620004b4565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002eb57600080fd5b505af115801562000300573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003269190620004b4565b601380546001600160a01b0392909216660100000000000002600160301b600160d01b03199092169190911790556064620003646009600a62000552565b620003759064e8d4a5100062000611565b620003819190620004e6565b600d55610190620003956009600a62000552565b620003a69064e8d4a5100062000611565b620003b29190620004e6565b600e5560006018556013805465ffffffffffff1916655014000a0a0a179055600954620003f7906004906001600160a01b031662000442602090811b620022e617901c565b50600a546200041e906004906001600160a01b031662000442602090811b620022e617901c565b506200043a3360046200044260201b620022e61790919060201c565b505062000649565b600062000459836001600160a01b03841662000462565b90505b92915050565b6000818152600183016020526040812054620004ab575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556200045c565b5060006200045c565b600060208284031215620004c757600080fd5b81516001600160a01b0381168114620004df57600080fd5b9392505050565b6000826200050457634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156200054a5781600019048211156200052e576200052e62000633565b808516156200053c57918102915b93841c93908002906200050e565b509250929050565b60006200045960ff8416836000826200056e575060016200045c565b816200057d575060006200045c565b8160018114620005965760028114620005a157620005c1565b60019150506200045c565b60ff841115620005b557620005b562000633565b50506001821b6200045c565b5060208310610133831016604e8410600b8410161715620005e6575081810a6200045c565b620005f2838362000509565b806000190482111562000609576200060962000633565b029392505050565b60008160001904831182151516156200062e576200062e62000633565b500290565b634e487b7160e01b600052601160045260246000fd5b61395380620006596000396000f3fe6080604052600436106103605760003560e01c8063677a8870116101c45780639fa62d5f116100f6578063d8902ff51161009a578063e803050c1161006c578063e803050c14610a6d578063f2c816ae14610a8d578063f2fde38b14610aad578063f9ab736614610acd57005b8063d8902ff5146109c7578063daf9a47a146109e7578063dd62ed3e14610a07578063e2fd002a14610a4d57005b8063b766a386116100d3578063b766a3861461095d578063c3a3c0321461097d578063c3f4f54f14610992578063d11edf74146109a757005b80639fa62d5f146108fd578063a457c2d71461091d578063a9059cbb1461093d57005b8063828e8b7e11610168578063929dffda1161013a578063929dffda1461087057806395d89b41146108905780639bc845fb146108bd5780639bf65770146108dd57005b8063828e8b7e1461082357806386d0ada814610838578063893d20e8146108525780638da5cb5b1461085257005b806370a08231116101a157806370a08231146107ad578063715018a6146107e3578063762bb282146107f85780637b9e987a1461080e57005b8063677a8870146107435780636eb8c7f1146107635780636f89e4091461078357005b806335e82f3a1161029d5780634cbf8e241161024157806358e1df921161021357806358e1df92146106e357806358e55365146106f85780635c69f6901461070e57806361cb27481461072357005b80634cbf8e24146106785780634cdaf0ae1461068d5780634f91e48c146106ad57806357ad67d1146106c357005b80633cc39b7a1161027a5780633cc39b7a1461060d5780634476f35a1461062357806344f3c83a146106435780634ada218b1461065957005b806335e82f3a1461059957806339509351146105b95780633c7a309b146105d957005b806323b872dd116103045780632973ef2d116102e15780632973ef2d146104d45780633054f8a31461053f578063311a86971461055e578063313ce5671461058557005b806323b872dd14610467578063243b529a146104875780632594b3431461049c57005b80630fd99e161161033d5780630fd99e16146103ff57806314ddc0951461042857806318160ddd1461043d5780631eb25d131461045257005b806306fdde0314610369578063095ea7b3146103ac5780630fa5b215146103dc57005b3661036757005b005b34801561037557600080fd5b5060408051808201909152600881526726b7b7b726b7b7b760c11b60208201525b6040516103a39190613579565b60405180910390f35b3480156103b857600080fd5b506103cc6103c73660046133e2565b610aed565b60405190151581526020016103a3565b3480156103e857600080fd5b506103f1610b04565b6040519081526020016103a3565b34801561040b57600080fd5b5061041561019081565b60405161ffff90911681526020016103a3565b34801561043457600080fd5b506018546103f1565b34801561044957600080fd5b50600c546103f1565b34801561045e57600080fd5b506103f1610d5f565b34801561047357600080fd5b506103cc6104823660046133a1565b610d7d565b34801561049357600080fd5b50610367610e14565b3480156104a857600080fd5b50600a546104bc906001600160a01b031681565b6040516001600160a01b0390911681526020016103a3565b3480156104e057600080fd5b506013546040805160ff63010000008404811682526401000000008404811660208301526501000000000084048116928201929092528183166060820152610100830482166080820152620100009092041660a082015260c0016103a3565b34801561054b57600080fd5b506017546103cc90610100900460ff1681565b34801561056a57600080fd5b50610573606481565b60405160ff90911681526020016103a3565b34801561059157600080fd5b506009610573565b3480156105a557600080fd5b506103676105b436600461332e565b610e57565b3480156105c557600080fd5b506103cc6105d43660046133e2565b610ec1565b3480156105e557600080fd5b506105ee610ef8565b604080516001600160a01b0390931683526020830191909152016103a3565b34801561061957600080fd5b506103f160165481565b34801561062f57600080fd5b5061036761063e366004613448565b6110ab565b34801561064f57600080fd5b506103f160185481565b34801561066557600080fd5b506019546103cc90610100900460ff1681565b34801561068457600080fd5b506103676112a0565b34801561069957600080fd5b506103676106a836600461332e565b611394565b3480156106b957600080fd5b506103f1600e5481565b3480156106cf57600080fd5b506103676106de3660046134ca565b61141d565b3480156106ef57600080fd5b506103676117b2565b34801561070457600080fd5b506103f160155481565b34801561071a57600080fd5b50610415600981565b34801561072f57600080fd5b5061036761073e36600461332e565b611810565b34801561074f57600080fd5b506009546104bc906001600160a01b031681565b34801561076f57600080fd5b5061036761077e366004613448565b611854565b34801561078f57600080fd5b506107986118c3565b604080519283526020830191909152016103a3565b3480156107b957600080fd5b506103f16107c836600461332e565b6001600160a01b031660009081526001602052604090205490565b3480156107ef57600080fd5b50610367611900565b34801561080457600080fd5b506103f1600d5481565b34801561081a57600080fd5b50610367611983565b34801561082f57600080fd5b506103676119d1565b34801561084457600080fd5b506019546103cc9060ff1681565b34801561085e57600080fd5b506000546001600160a01b03166104bc565b34801561087c57600080fd5b5061036761088b36600461332e565b6119f5565b34801561089c57600080fd5b5060408051808201909152600481526326a726a760e11b6020820152610396565b3480156108c957600080fd5b506103676108d836600461332e565b611a8c565b3480156108e957600080fd5b506103676108f836600461340e565b611b23565b34801561090957600080fd5b5061036761091836600461347a565b611ba1565b34801561092957600080fd5b506103cc6109383660046133e2565b611dbb565b34801561094957600080fd5b506103cc6109583660046133e2565b611e37565b34801561096957600080fd5b5061036761097836600461340e565b611e44565b34801561098957600080fd5b506103f1611ecc565b34801561099e57600080fd5b506103f1611eec565b3480156109b357600080fd5b506103676109c2366004613448565b611f2c565b3480156109d357600080fd5b506103676109e236600461332e565b611f86565b3480156109f357600080fd5b50610367610a02366004613448565b61201d565b348015610a1357600080fd5b506103f1610a22366004613368565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b348015610a5957600080fd5b50610367610a68366004613448565b61208b565b348015610a7957600080fd5b506103f1610a8836600461332e565b61212f565b348015610a9957600080fd5b50610367610aa836600461332e565b612169565b348015610ab957600080fd5b50610367610ac836600461332e565b6121ad565b348015610ad957600080fd5b50610367610ae836600461332e565b6122a6565b6000610afa3384846122fb565b5060015b92915050565b600033610b196000546001600160a01b031690565b6001600160a01b031614610b485760405162461bcd60e51b8152600401610b3f906135f8565b60405180910390fd5b601a54421015610b6a5760405162461bcd60e51b8152600401610b3f906135ce565b6019546040516370a0823160e01b8152306004820152620100009091046001600160a01b03169060009082906370a082319060240160206040518083038186803b158015610bb757600080fd5b505afa158015610bcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bef9190613461565b60145460405163095ea7b360e01b81526001600160a01b0391821660048201526024810183905291925083169063095ea7b390604401602060405180830381600087803b158015610c3f57600080fd5b505af1158015610c53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c77919061342b565b5060145447906001600160a01b031663af2979eb30846064610c9a82604b613822565b610ca49190613712565b6064610cb188604b613822565b610cbb9190613712565b30426040518763ffffffff1660e01b8152600401610cde9695949392919061353e565b602060405180830381600087803b158015610cf857600080fd5b505af1158015610d0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d309190613461565b506000610d3d8247613841565b90508060156000828254610d5191906136d5565b909155509094505050505090565b610d6b6009600a613777565b610d7a9064e8d4a51000613822565b81565b6000610d8a8484846123ee565b6001600160a01b038416600090815260026020908152604080832033845290915290205482811015610df55760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b6044820152606401610b3f565b610e098533610e048685613841565b6122fb565b506001949350505050565b33610e276000546001600160a01b031690565b6001600160a01b031614610e4d5760405162461bcd60e51b8152600401610b3f906135f8565b610e5561264b565b565b33610e6a6000546001600160a01b031690565b6001600160a01b031614610e905760405162461bcd60e51b8152600401610b3f906135f8565b610e9b60068261279e565b506040516001600160a01b038216906000805160206138fe83398151915290600090a250565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610afa918590610e049086906136d5565b60008033610f0e6000546001600160a01b031690565b6001600160a01b031614610f345760405162461bcd60e51b8152600401610b3f906135f8565b601a54421015610f565760405162461bcd60e51b8152600401610b3f906135ce565b6019546040516370a0823160e01b8152306004820152620100009091046001600160a01b03169060009082906370a082319060240160206040518083038186803b158015610fa357600080fd5b505afa158015610fb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fdb9190613461565b60095460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810183905291925083169063a9059cbb90604401602060405180830381600087803b15801561102b57600080fd5b505af115801561103f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611063919061342b565b506009546040518281526001600160a01b039091169030906000805160206138de8339815191529060200160405180910390a36009546001600160a01b031693509150509091565b336110be6000546001600160a01b031690565b6001600160a01b0316146110e45760405162461bcd60e51b8152600401610b3f906135f8565b60155481111561114c5760405162461bcd60e51b815260206004820152602d60248201527f4572726f723a20416d6f756e742067726561746572207468616e20617661696c60448201526c30b13632903130b630b731b29760991b6064820152608401610b3f565b806015600082825461115e9190613841565b90915550506009546001600160a01b03166108fc606461117f846032613822565b6111899190613712565b6040518115909202916000818181858888f193505050501580156111b1573d6000803e3d6000fd5b50600a546001600160a01b03166108fc60646111ce846032613822565b6111d89190613712565b6111e29084613841565b6040518115909202916000818181858888f1935050505015801561120a573d6000803e3d6000fd5b506009546001600160a01b0316306000805160206138de8339815191526064611234856032613822565b61123e9190613712565b60405190815260200160405180910390a3600a546001600160a01b0316306000805160206138de8339815191526064611278856032613822565b6112829190613712565b61128c9085613841565b60405190815260200160405180910390a350565b336112b36000546001600160a01b031690565b6001600160a01b0316146112d95760405162461bcd60e51b8152600401610b3f906135f8565b601a544210156112fb5760405162461bcd60e51b8152600401610b3f906135ce565b6009546040516000916001600160a01b03169047908381818185875af1925050503d8060008114611348576040519150601f19603f3d011682016040523d82523d6000602084013e61134d565b606091505b50509050806113915760405162461bcd60e51b815260206004820152601060248201526f22b93937b91d102737ba1039b2b73a1760811b6044820152606401610b3f565b50565b336113a76000546001600160a01b031690565b6001600160a01b0316146113cd5760405162461bcd60e51b8152600401610b3f906135f8565b6001600160a01b0381166113f35760405162461bcd60e51b8152600401610b3f9061362d565b601980546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b336114306000546001600160a01b031690565b6001600160a01b0316146114565760405162461bcd60e51b8152600401610b3f906135f8565b60008461146387896136ed565b61146d91906136ed565b90508060ff166064146114d15760405162461bcd60e51b815260206004820152602660248201527f6275726e2b6c69712b6d61726b6574696e67206e6565647320746f20657175616044820152656c203130302560d01b6064820152608401610b3f565b60148460ff16111561154b5760405162461bcd60e51b815260206004820152603d60248201527f4572726f723a20486f6e6579706f742070726576656e74696f6e20707265766560448201527f6e7473206275795461782066726f6d20657863656564696e672032302e0000006064820152608401610b3f565b60148360ff1611156115c55760405162461bcd60e51b815260206004820152603e60248201527f4572726f723a20486f6e6579706f742070726576656e74696f6e20707265766560448201527f6e74732073656c6c5461782066726f6d20657863656564696e672032302e00006064820152608401610b3f565b60148260ff16111561164a5760405162461bcd60e51b815260206004820152604260248201527f4572726f723a20486f6e6579706f742070726576656e74696f6e20707265766560448201527f6e7473207472616e736665725461782066726f6d20657863656564696e672032606482015261181760f11b608482015260a401610b3f565b86601360036101000a81548160ff021916908360ff16021790555085601360046101000a81548160ff021916908360ff16021790555084601360056101000a81548160ff021916908360ff16021790555083601360006101000a81548160ff021916908360ff16021790555082601360016101000a81548160ff021916908360ff16021790555081601360026101000a81548160ff021916908360ff160217905550601360039054906101000a900460ff1660ff166000805160206138be83398151915260405160405180910390a260135460405164010000000090910460ff16906000805160206138be83398151915290600090a260135460405160ff909116906000805160206138be83398151915290600090a260135460405161010090910460ff16906000805160206138be83398151915290600090a26013546040516201000090910460ff16906000805160206138be83398151915290600090a250505050505050565b336117c56000546001600160a01b031690565b6001600160a01b0316146117eb5760405162461bcd60e51b8152600401610b3f906135f8565b6015805460009091556009546001600160a01b03166108fc606461117f846032613822565b336118236000546001600160a01b031690565b6001600160a01b0316146118495760405162461bcd60e51b8152600401610b3f906135f8565b610e9b60048261279e565b336118676000546001600160a01b031690565b6001600160a01b03161461188d5760405162461bcd60e51b8152600401610b3f906135f8565b61189f61189a42836136d5565b6127b3565b6118a942826136d5565b6040516000805160206138be83398151915290600090a250565b6000806118d26009600a613777565b600d546118df9190613712565b6118eb6009600a613777565b600e546118f89190613712565b915091509091565b336119136000546001600160a01b031690565b6001600160a01b0316146119395760405162461bcd60e51b8152600401610b3f906135f8565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b336119966000546001600160a01b031690565b6001600160a01b0316146119bc5760405162461bcd60e51b8152600401610b3f906135f8565b6019805461ff00191661010017905542601055565b6018546119de90426136d5565b33600090815260036020526040902055565b905090565b33611a086000546001600160a01b031690565b6001600160a01b031614611a2e5760405162461bcd60e51b8152600401610b3f906135f8565b6001600160a01b038116611a545760405162461bcd60e51b8152600401610b3f9061362d565b600b80546001600160a01b0319166001600160a01b0383169081179091556040516000805160206138fe83398151915290600090a250565b33611a9f6000546001600160a01b031690565b6001600160a01b031614611ac55760405162461bcd60e51b8152600401610b3f906135f8565b6001600160a01b038116611aeb5760405162461bcd60e51b8152600401610b3f9061362d565b600980546001600160a01b0319166001600160a01b0383169081179091556040516000805160206138fe83398151915290600090a250565b33611b366000546001600160a01b031690565b6001600160a01b031614611b5c5760405162461bcd60e51b8152600401610b3f906135f8565b6019805460ff191682151590811790915560405160ff9091161515907f669a6418e904a59fab89972d5ce42429cb380f287efcaef65dace33212fda0d990600090a250565b33611bb46000546001600160a01b031690565b6001600160a01b031614611bda5760405162461bcd60e51b8152600401610b3f906135f8565b6064600c54611be99190613712565b8110611c555760405162461bcd60e51b815260206004820152603560248201527f4572726f723a204e65772073656c6c206c696d69742061626f7665203125206f604482015274331031b4b931bab630ba34b7339039bab838363c9760591b6064820152608401610b3f565b611c616009600a613777565b611c6b9083613822565b9150611c796009600a613777565b611c839082613822565b90506000606460ff16600c54611c999190613712565b9050600061019061ffff16600c54611cb19190613712565b905081841015611d175760405162461bcd60e51b815260206004820152602b60248201527f6e657742616c616e63654c696d6974206e6565647320746f206265206174206c60448201526a19585cdd081d185c99d95d60aa1b6064820152608401610b3f565b80831015611d785760405162461bcd60e51b815260206004820152602860248201527f6e657753656c6c4c696d6974206e6565647320746f206265206174206c6561736044820152671d081d185c99d95d60c21b6064820152608401610b3f565b600d849055600e83905560405184906000805160206138be83398151915290600090a2600e546040516000805160206138be83398151915290600090a250505050565b3360009081526002602090815260408083206001600160a01b038616845290915281205482811015611e1e5760405162461bcd60e51b815260206004820152600c60248201526b3c3020616c6c6f77616e636560a01b6044820152606401610b3f565b611e2d3385610e048685613841565b5060019392505050565b6000610afa3384846123ee565b33611e576000546001600160a01b031690565b6001600160a01b031614611e7d5760405162461bcd60e51b8152600401610b3f906135f8565b6017805461ff0019166101008315158102919091179182905560405160ff91909204161515907f669a6418e904a59fab89972d5ce42429cb380f287efcaef65dace33212fda0d990600090a250565b6000601a54421015611ee65742601a546119f09190613841565b50600090565b6000611efa6009600a613777565b600c54611f096009600a613777565b611f189064e8d4a51000613822565b611f229190613841565b6119f09190613712565b33611f3f6000546001600160a01b031690565b6001600160a01b031614611f655760405162461bcd60e51b8152600401610b3f906135f8565b600881905560405181906000805160206138be83398151915290600090a250565b33611f996000546001600160a01b031690565b6001600160a01b031614611fbf5760405162461bcd60e51b8152600401610b3f906135f8565b6001600160a01b038116611fe55760405162461bcd60e51b8152600401610b3f9061362d565b600a80546001600160a01b0319166001600160a01b0383169081179091556040516000805160206138fe83398151915290600090a250565b336120306000546001600160a01b031690565b6001600160a01b0316146120565760405162461bcd60e51b8152600401610b3f906135f8565b6120626009600a613777565b61206c9082613822565b600f8190556040516000805160206138be83398151915290600090a250565b3361209e6000546001600160a01b031690565b6001600160a01b0316146120c45760405162461bcd60e51b8152600401610b3f906135f8565b600981111561210e5760405162461bcd60e51b8152602060048201526016602482015275084eaf24098dec6d640e8d2daca40e8dede40d0d2ced60531b6044820152606401610b3f565b601881905560405181906000805160206138be83398151915290600090a250565b6001600160a01b0381166000908152600360205260408120544281116121585750600092915050565b6121624282613841565b9392505050565b3361217c6000546001600160a01b031690565b6001600160a01b0316146121a25760405162461bcd60e51b8152600401610b3f906135f8565b610e9b6006826122e6565b336121c06000546001600160a01b031690565b6001600160a01b0316146121e65760405162461bcd60e51b8152600401610b3f906135f8565b6001600160a01b03811661224b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b3f565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b336122b96000546001600160a01b031690565b6001600160a01b0316146122df5760405162461bcd60e51b8152600401610b3f906135f8565b610e9b6004825b6000612162836001600160a01b03841661283d565b6001600160a01b0383166123455760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b6044820152606401610b3f565b6001600160a01b03821661238d5760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401610b3f565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166124395760405162461bcd60e51b81526020600482015260126024820152715472616e736665722066726f6d207a65726f60701b6044820152606401610b3f565b6001600160a01b0382166124825760405162461bcd60e51b815260206004820152601060248201526f5472616e7366657220746f207a65726f60801b6044820152606401610b3f565b600061248f60048561288c565b806124a057506124a060048461288c565b905060006001600160a01b0385163014806124c357506001600160a01b03841630145b6014546013549192506001600160a01b0390811691600091888116600160301b909204161480156125055750816001600160a01b0316866001600160a01b0316145b8061254057506013546001600160a01b03878116600160301b909204161480156125405750816001600160a01b0316876001600160a01b0316145b6013549091506000906001600160a01b03898116600160301b90920416148061257a5750826001600160a01b0316886001600160a01b0316145b6013549091506000906001600160a01b03898116600160301b9092041614806125b45750836001600160a01b0316886001600160a01b0316145b905084806125bf5750825b806125c75750855b156125dc576125d78989896128ae565b612640565b601954610100900460ff166126335760405162461bcd60e51b815260206004820152601760248201527f74726164696e67206e6f742079657420656e61626c65640000000000000000006044820152606401610b3f565b6126408989898585612967565b505050505050505050565b6017805460ff19166001908117909155306000908152602091909152604081205460135490919061269390640100000000810460ff90811691650100000000009004166136ed565b60ff16905060006008549050808310806126af575061ffff8216155b156126bc57505050612792565b60135460009061ffff8416906126dd90640100000000900460ff1684613822565b6126e79190613712565b905060006126f58284613841565b90506000612704600284613712565b905060006127128285613841565b9050600061272084836136d5565b90504761272c82612f21565b60006127388247613841565b90506000836127478684613822565b6127519190613712565b905061275d8682613089565b506000905061276c8447613841565b9050806015600082825461278091906136d5565b90915550505050505050505050505050505b6017805460ff19169055565b6000612162836001600160a01b03841661318e565b601a54811161281c5760405162461bcd60e51b815260206004820152602f60248201527f4572726f723a204e657720756e6c6f636b2074696d652069732073686f72746560448201526e39103a3430b71037b6321037b7329760891b6064820152608401610b3f565b601a81905560405181906000805160206138be83398151915290600090a250565b600081815260018301602052604081205461288457508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610afe565b506000610afe565b6001600160a01b03811660009081526001830160205260408120541515612162565b6001600160a01b038316600090815260016020526040902054818110156129125760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610b3f565b61291c848361327b565b61292683836132c0565b826001600160a01b0316846001600160a01b03166000805160206138de8339815191528460405161295991815260200190565b60405180910390a350505050565b6001600160a01b03808516600090815260016020526040808220549288168252902054848110156129d55760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610b3f565b60008315612ae857600e54861115612a215760405162461bcd60e51b815260206004820152600f60248201526e223ab6b810383937ba32b1ba34b7b760891b6044820152606401610b3f565b612a2c60068961288c565b15612a705760405162461bcd60e51b81526020600482015260146024820152734164647265737320626c61636b6c69737465642160601b6044820152606401610b3f565b601154601054612a8091906136d5565b4211158015612a9157506012546001145b15612ad757612aa16006896122e6565b506040516001600160a01b038916907f8c21268f4379683ad2b81c32b4357f44a17e83e73d741ba6e8c23e085e57135190600090a25b50601354610100900460ff16612dce565b8415612c5b57600d54612afb87856136d5565b1115612b3c5760405162461bcd60e51b815260206004820152601060248201526f3bb430b63290383937ba32b1ba34b7b760811b6044820152606401610b3f565b600f54861115612b995760405162461bcd60e51b815260206004820152602260248201527f547820616d6f756e7420657863656564696e67206d61782062757920616d6f756044820152611b9d60f21b6064820152608401610b3f565b612ba460068861288c565b15612be85760405162461bcd60e51b81526020600482015260146024820152734164647265737320626c61636b6c69737465642160601b6044820152606401610b3f565b601154601054612bf891906136d5565b4211158015612c0957506012546001145b15612c4f57612c196006886122e6565b506040516001600160a01b038816907f8c21268f4379683ad2b81c32b4357f44a17e83e73d741ba6e8c23e085e57135190600090a25b5060135460ff16612dce565b612c6660068961288c565b15612cb35760405162461bcd60e51b815260206004820152601b60248201527f53656e646572206164647265737320626c61636b6c69737465642100000000006044820152606401610b3f565b612cbe60068861288c565b15612d0b5760405162461bcd60e51b815260206004820152601e60248201527f526563697069656e74206164647265737320626c61636b6c69737465642100006044820152606401610b3f565b600d54612d1887856136d5565b1115612d595760405162461bcd60e51b815260206004820152601060248201526f3bb430b63290383937ba32b1ba34b7b760811b6044820152606401610b3f565b601154601054612d6991906136d5565b4211158015612d7a57506012546001145b15612dc057612d8a6006896122e6565b506040516001600160a01b038916907f8c21268f4379683ad2b81c32b4357f44a17e83e73d741ba6e8c23e085e57135190600090a25b5060135462010000900460ff165b6013546001600160a01b03898116600160301b9092041614801590612df6575060195460ff16155b8015612e05575060175460ff16155b8015612e0e5750835b15612e1b57612e1b61264b565b6000612e378783601360039054906101000a900460ff166132e4565b601354909150600090612e6d9089908590612e689060ff6401000000008204811691650100000000009004166136ed565b6132e4565b90506000612e7b82846136d5565b612e85908a613841565b9050612e918b8a61327b565b3060009081526001602052604081208054849290612eb09084906136d5565b9250508190555082600c6000828254612ec99190613841565b90915550612ed990508a826132c0565b896001600160a01b03168b6001600160a01b03166000805160206138de83398151915283604051612f0c91815260200190565b60405180910390a35050505050505050505050565b601454612f399030906001600160a01b0316836122fb565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612f6e57612f6e613884565b6001600160a01b03928316602091820292909201810191909152601454604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612fc257600080fd5b505afa158015612fd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ffa919061334b565b8160018151811061300d5761300d613884565b6001600160a01b03928316602091820292909201015260145460405163791ac94760e01b815291169063791ac94790613053908590600090869030904290600401613664565b600060405180830381600087803b15801561306d57600080fd5b505af1158015613081573d6000803e3d6000fd5b505050505050565b600080826016600082825461309e91906136d5565b909155506000905060646130b385604b613822565b6130bd9190613712565b9050600060646130ce87604b613822565b6130d89190613712565b6014549091506130f39030906001600160a01b0316886122fb565b60145460405163f305d71960e01b81526001600160a01b039091169063f305d71990879061312f9030908b90879089908490429060040161353e565b6060604051808303818588803b15801561314857600080fd5b505af115801561315c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613181919061349c565b5096979596505050505050565b600081815260018301602052604081205480156132715760006131b2600183613841565b85549091506000906131c690600190613841565b905060008660000182815481106131df576131df613884565b906000526020600020015490508087600001848154811061320257613202613884565b6000918252602080832090910192909255828152600189019091526040902084905586548790806132355761323561386e565b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610afe565b6000915050610afe565b6001600160a01b03821660009081526001602052604081205461329f908390613841565b6001600160a01b039093166000908152600160205260409020929092555050565b6001600160a01b03821660009081526001602052604081205461329f9083906136d5565b60006127108260ff168460ff16866132fc9190613822565b6133069190613822565b6133109190613712565b949350505050565b803560ff8116811461332957600080fd5b919050565b60006020828403121561334057600080fd5b81356121628161389a565b60006020828403121561335d57600080fd5b81516121628161389a565b6000806040838503121561337b57600080fd5b82356133868161389a565b915060208301356133968161389a565b809150509250929050565b6000806000606084860312156133b657600080fd5b83356133c18161389a565b925060208401356133d18161389a565b929592945050506040919091013590565b600080604083850312156133f557600080fd5b82356134008161389a565b946020939093013593505050565b60006020828403121561342057600080fd5b8135612162816138af565b60006020828403121561343d57600080fd5b8151612162816138af565b60006020828403121561345a57600080fd5b5035919050565b60006020828403121561347357600080fd5b5051919050565b6000806040838503121561348d57600080fd5b50508035926020909101359150565b6000806000606084860312156134b157600080fd5b8351925060208401519150604084015190509250925092565b60008060008060008060c087890312156134e357600080fd5b6134ec87613318565b95506134fa60208801613318565b945061350860408801613318565b935061351660608801613318565b925061352460808801613318565b915061353260a08801613318565b90509295509295509295565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600060208083528351808285015260005b818110156135a65785810183015185820160400152820161358a565b818111156135b8576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526010908201526f139bdd081e595d081d5b9b1bd8dad95960821b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601b908201527f4572726f723a2043616e6e6f74206265203020616464726573732e0000000000604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156136b45784516001600160a01b03168352938301939183019160010161368f565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156136e8576136e8613858565b500190565b600060ff821660ff84168060ff0382111561370a5761370a613858565b019392505050565b60008261372f57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561376f57816000190482111561375557613755613858565b8085161561376257918102915b93841c9390800290613739565b509250929050565b600061216260ff84168360008261379057506001610afe565b8161379d57506000610afe565b81600181146137b357600281146137bd576137d9565b6001915050610afe565b60ff8411156137ce576137ce613858565b50506001821b610afe565b5060208310610133831016604e8410600b84101617156137fc575081810a610afe565b6138068383613734565b806000190482111561381a5761381a613858565b029392505050565b600081600019048311821515161561383c5761383c613858565b500290565b60008282101561385357613853613858565b500390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461139157600080fd5b801515811461139157600080fdfefb60e050a21ad73ac014de3ac7e8beec47ce0426c74545f9eded8135493e8e02ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef156f82350b7972f1821f0b3cc744ecec05d5c0893150eccf16174dbc4bf8d8dda26469706673582212202bfad25e055ba6083cde7b06ad4c78b76eb3a9f368ba549ddad7e21501d5c5ba64736f6c63430008070033
Deployed Bytecode
0x6080604052600436106103605760003560e01c8063677a8870116101c45780639fa62d5f116100f6578063d8902ff51161009a578063e803050c1161006c578063e803050c14610a6d578063f2c816ae14610a8d578063f2fde38b14610aad578063f9ab736614610acd57005b8063d8902ff5146109c7578063daf9a47a146109e7578063dd62ed3e14610a07578063e2fd002a14610a4d57005b8063b766a386116100d3578063b766a3861461095d578063c3a3c0321461097d578063c3f4f54f14610992578063d11edf74146109a757005b80639fa62d5f146108fd578063a457c2d71461091d578063a9059cbb1461093d57005b8063828e8b7e11610168578063929dffda1161013a578063929dffda1461087057806395d89b41146108905780639bc845fb146108bd5780639bf65770146108dd57005b8063828e8b7e1461082357806386d0ada814610838578063893d20e8146108525780638da5cb5b1461085257005b806370a08231116101a157806370a08231146107ad578063715018a6146107e3578063762bb282146107f85780637b9e987a1461080e57005b8063677a8870146107435780636eb8c7f1146107635780636f89e4091461078357005b806335e82f3a1161029d5780634cbf8e241161024157806358e1df921161021357806358e1df92146106e357806358e55365146106f85780635c69f6901461070e57806361cb27481461072357005b80634cbf8e24146106785780634cdaf0ae1461068d5780634f91e48c146106ad57806357ad67d1146106c357005b80633cc39b7a1161027a5780633cc39b7a1461060d5780634476f35a1461062357806344f3c83a146106435780634ada218b1461065957005b806335e82f3a1461059957806339509351146105b95780633c7a309b146105d957005b806323b872dd116103045780632973ef2d116102e15780632973ef2d146104d45780633054f8a31461053f578063311a86971461055e578063313ce5671461058557005b806323b872dd14610467578063243b529a146104875780632594b3431461049c57005b80630fd99e161161033d5780630fd99e16146103ff57806314ddc0951461042857806318160ddd1461043d5780631eb25d131461045257005b806306fdde0314610369578063095ea7b3146103ac5780630fa5b215146103dc57005b3661036757005b005b34801561037557600080fd5b5060408051808201909152600881526726b7b7b726b7b7b760c11b60208201525b6040516103a39190613579565b60405180910390f35b3480156103b857600080fd5b506103cc6103c73660046133e2565b610aed565b60405190151581526020016103a3565b3480156103e857600080fd5b506103f1610b04565b6040519081526020016103a3565b34801561040b57600080fd5b5061041561019081565b60405161ffff90911681526020016103a3565b34801561043457600080fd5b506018546103f1565b34801561044957600080fd5b50600c546103f1565b34801561045e57600080fd5b506103f1610d5f565b34801561047357600080fd5b506103cc6104823660046133a1565b610d7d565b34801561049357600080fd5b50610367610e14565b3480156104a857600080fd5b50600a546104bc906001600160a01b031681565b6040516001600160a01b0390911681526020016103a3565b3480156104e057600080fd5b506013546040805160ff63010000008404811682526401000000008404811660208301526501000000000084048116928201929092528183166060820152610100830482166080820152620100009092041660a082015260c0016103a3565b34801561054b57600080fd5b506017546103cc90610100900460ff1681565b34801561056a57600080fd5b50610573606481565b60405160ff90911681526020016103a3565b34801561059157600080fd5b506009610573565b3480156105a557600080fd5b506103676105b436600461332e565b610e57565b3480156105c557600080fd5b506103cc6105d43660046133e2565b610ec1565b3480156105e557600080fd5b506105ee610ef8565b604080516001600160a01b0390931683526020830191909152016103a3565b34801561061957600080fd5b506103f160165481565b34801561062f57600080fd5b5061036761063e366004613448565b6110ab565b34801561064f57600080fd5b506103f160185481565b34801561066557600080fd5b506019546103cc90610100900460ff1681565b34801561068457600080fd5b506103676112a0565b34801561069957600080fd5b506103676106a836600461332e565b611394565b3480156106b957600080fd5b506103f1600e5481565b3480156106cf57600080fd5b506103676106de3660046134ca565b61141d565b3480156106ef57600080fd5b506103676117b2565b34801561070457600080fd5b506103f160155481565b34801561071a57600080fd5b50610415600981565b34801561072f57600080fd5b5061036761073e36600461332e565b611810565b34801561074f57600080fd5b506009546104bc906001600160a01b031681565b34801561076f57600080fd5b5061036761077e366004613448565b611854565b34801561078f57600080fd5b506107986118c3565b604080519283526020830191909152016103a3565b3480156107b957600080fd5b506103f16107c836600461332e565b6001600160a01b031660009081526001602052604090205490565b3480156107ef57600080fd5b50610367611900565b34801561080457600080fd5b506103f1600d5481565b34801561081a57600080fd5b50610367611983565b34801561082f57600080fd5b506103676119d1565b34801561084457600080fd5b506019546103cc9060ff1681565b34801561085e57600080fd5b506000546001600160a01b03166104bc565b34801561087c57600080fd5b5061036761088b36600461332e565b6119f5565b34801561089c57600080fd5b5060408051808201909152600481526326a726a760e11b6020820152610396565b3480156108c957600080fd5b506103676108d836600461332e565b611a8c565b3480156108e957600080fd5b506103676108f836600461340e565b611b23565b34801561090957600080fd5b5061036761091836600461347a565b611ba1565b34801561092957600080fd5b506103cc6109383660046133e2565b611dbb565b34801561094957600080fd5b506103cc6109583660046133e2565b611e37565b34801561096957600080fd5b5061036761097836600461340e565b611e44565b34801561098957600080fd5b506103f1611ecc565b34801561099e57600080fd5b506103f1611eec565b3480156109b357600080fd5b506103676109c2366004613448565b611f2c565b3480156109d357600080fd5b506103676109e236600461332e565b611f86565b3480156109f357600080fd5b50610367610a02366004613448565b61201d565b348015610a1357600080fd5b506103f1610a22366004613368565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b348015610a5957600080fd5b50610367610a68366004613448565b61208b565b348015610a7957600080fd5b506103f1610a8836600461332e565b61212f565b348015610a9957600080fd5b50610367610aa836600461332e565b612169565b348015610ab957600080fd5b50610367610ac836600461332e565b6121ad565b348015610ad957600080fd5b50610367610ae836600461332e565b6122a6565b6000610afa3384846122fb565b5060015b92915050565b600033610b196000546001600160a01b031690565b6001600160a01b031614610b485760405162461bcd60e51b8152600401610b3f906135f8565b60405180910390fd5b601a54421015610b6a5760405162461bcd60e51b8152600401610b3f906135ce565b6019546040516370a0823160e01b8152306004820152620100009091046001600160a01b03169060009082906370a082319060240160206040518083038186803b158015610bb757600080fd5b505afa158015610bcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bef9190613461565b60145460405163095ea7b360e01b81526001600160a01b0391821660048201526024810183905291925083169063095ea7b390604401602060405180830381600087803b158015610c3f57600080fd5b505af1158015610c53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c77919061342b565b5060145447906001600160a01b031663af2979eb30846064610c9a82604b613822565b610ca49190613712565b6064610cb188604b613822565b610cbb9190613712565b30426040518763ffffffff1660e01b8152600401610cde9695949392919061353e565b602060405180830381600087803b158015610cf857600080fd5b505af1158015610d0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d309190613461565b506000610d3d8247613841565b90508060156000828254610d5191906136d5565b909155509094505050505090565b610d6b6009600a613777565b610d7a9064e8d4a51000613822565b81565b6000610d8a8484846123ee565b6001600160a01b038416600090815260026020908152604080832033845290915290205482811015610df55760405162461bcd60e51b81526020600482015260146024820152735472616e73666572203e20616c6c6f77616e636560601b6044820152606401610b3f565b610e098533610e048685613841565b6122fb565b506001949350505050565b33610e276000546001600160a01b031690565b6001600160a01b031614610e4d5760405162461bcd60e51b8152600401610b3f906135f8565b610e5561264b565b565b33610e6a6000546001600160a01b031690565b6001600160a01b031614610e905760405162461bcd60e51b8152600401610b3f906135f8565b610e9b60068261279e565b506040516001600160a01b038216906000805160206138fe83398151915290600090a250565b3360008181526002602090815260408083206001600160a01b03871684529091528120549091610afa918590610e049086906136d5565b60008033610f0e6000546001600160a01b031690565b6001600160a01b031614610f345760405162461bcd60e51b8152600401610b3f906135f8565b601a54421015610f565760405162461bcd60e51b8152600401610b3f906135ce565b6019546040516370a0823160e01b8152306004820152620100009091046001600160a01b03169060009082906370a082319060240160206040518083038186803b158015610fa357600080fd5b505afa158015610fb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fdb9190613461565b60095460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810183905291925083169063a9059cbb90604401602060405180830381600087803b15801561102b57600080fd5b505af115801561103f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611063919061342b565b506009546040518281526001600160a01b039091169030906000805160206138de8339815191529060200160405180910390a36009546001600160a01b031693509150509091565b336110be6000546001600160a01b031690565b6001600160a01b0316146110e45760405162461bcd60e51b8152600401610b3f906135f8565b60155481111561114c5760405162461bcd60e51b815260206004820152602d60248201527f4572726f723a20416d6f756e742067726561746572207468616e20617661696c60448201526c30b13632903130b630b731b29760991b6064820152608401610b3f565b806015600082825461115e9190613841565b90915550506009546001600160a01b03166108fc606461117f846032613822565b6111899190613712565b6040518115909202916000818181858888f193505050501580156111b1573d6000803e3d6000fd5b50600a546001600160a01b03166108fc60646111ce846032613822565b6111d89190613712565b6111e29084613841565b6040518115909202916000818181858888f1935050505015801561120a573d6000803e3d6000fd5b506009546001600160a01b0316306000805160206138de8339815191526064611234856032613822565b61123e9190613712565b60405190815260200160405180910390a3600a546001600160a01b0316306000805160206138de8339815191526064611278856032613822565b6112829190613712565b61128c9085613841565b60405190815260200160405180910390a350565b336112b36000546001600160a01b031690565b6001600160a01b0316146112d95760405162461bcd60e51b8152600401610b3f906135f8565b601a544210156112fb5760405162461bcd60e51b8152600401610b3f906135ce565b6009546040516000916001600160a01b03169047908381818185875af1925050503d8060008114611348576040519150601f19603f3d011682016040523d82523d6000602084013e61134d565b606091505b50509050806113915760405162461bcd60e51b815260206004820152601060248201526f22b93937b91d102737ba1039b2b73a1760811b6044820152606401610b3f565b50565b336113a76000546001600160a01b031690565b6001600160a01b0316146113cd5760405162461bcd60e51b8152600401610b3f906135f8565b6001600160a01b0381166113f35760405162461bcd60e51b8152600401610b3f9061362d565b601980546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b336114306000546001600160a01b031690565b6001600160a01b0316146114565760405162461bcd60e51b8152600401610b3f906135f8565b60008461146387896136ed565b61146d91906136ed565b90508060ff166064146114d15760405162461bcd60e51b815260206004820152602660248201527f6275726e2b6c69712b6d61726b6574696e67206e6565647320746f20657175616044820152656c203130302560d01b6064820152608401610b3f565b60148460ff16111561154b5760405162461bcd60e51b815260206004820152603d60248201527f4572726f723a20486f6e6579706f742070726576656e74696f6e20707265766560448201527f6e7473206275795461782066726f6d20657863656564696e672032302e0000006064820152608401610b3f565b60148360ff1611156115c55760405162461bcd60e51b815260206004820152603e60248201527f4572726f723a20486f6e6579706f742070726576656e74696f6e20707265766560448201527f6e74732073656c6c5461782066726f6d20657863656564696e672032302e00006064820152608401610b3f565b60148260ff16111561164a5760405162461bcd60e51b815260206004820152604260248201527f4572726f723a20486f6e6579706f742070726576656e74696f6e20707265766560448201527f6e7473207472616e736665725461782066726f6d20657863656564696e672032606482015261181760f11b608482015260a401610b3f565b86601360036101000a81548160ff021916908360ff16021790555085601360046101000a81548160ff021916908360ff16021790555084601360056101000a81548160ff021916908360ff16021790555083601360006101000a81548160ff021916908360ff16021790555082601360016101000a81548160ff021916908360ff16021790555081601360026101000a81548160ff021916908360ff160217905550601360039054906101000a900460ff1660ff166000805160206138be83398151915260405160405180910390a260135460405164010000000090910460ff16906000805160206138be83398151915290600090a260135460405160ff909116906000805160206138be83398151915290600090a260135460405161010090910460ff16906000805160206138be83398151915290600090a26013546040516201000090910460ff16906000805160206138be83398151915290600090a250505050505050565b336117c56000546001600160a01b031690565b6001600160a01b0316146117eb5760405162461bcd60e51b8152600401610b3f906135f8565b6015805460009091556009546001600160a01b03166108fc606461117f846032613822565b336118236000546001600160a01b031690565b6001600160a01b0316146118495760405162461bcd60e51b8152600401610b3f906135f8565b610e9b60048261279e565b336118676000546001600160a01b031690565b6001600160a01b03161461188d5760405162461bcd60e51b8152600401610b3f906135f8565b61189f61189a42836136d5565b6127b3565b6118a942826136d5565b6040516000805160206138be83398151915290600090a250565b6000806118d26009600a613777565b600d546118df9190613712565b6118eb6009600a613777565b600e546118f89190613712565b915091509091565b336119136000546001600160a01b031690565b6001600160a01b0316146119395760405162461bcd60e51b8152600401610b3f906135f8565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b336119966000546001600160a01b031690565b6001600160a01b0316146119bc5760405162461bcd60e51b8152600401610b3f906135f8565b6019805461ff00191661010017905542601055565b6018546119de90426136d5565b33600090815260036020526040902055565b905090565b33611a086000546001600160a01b031690565b6001600160a01b031614611a2e5760405162461bcd60e51b8152600401610b3f906135f8565b6001600160a01b038116611a545760405162461bcd60e51b8152600401610b3f9061362d565b600b80546001600160a01b0319166001600160a01b0383169081179091556040516000805160206138fe83398151915290600090a250565b33611a9f6000546001600160a01b031690565b6001600160a01b031614611ac55760405162461bcd60e51b8152600401610b3f906135f8565b6001600160a01b038116611aeb5760405162461bcd60e51b8152600401610b3f9061362d565b600980546001600160a01b0319166001600160a01b0383169081179091556040516000805160206138fe83398151915290600090a250565b33611b366000546001600160a01b031690565b6001600160a01b031614611b5c5760405162461bcd60e51b8152600401610b3f906135f8565b6019805460ff191682151590811790915560405160ff9091161515907f669a6418e904a59fab89972d5ce42429cb380f287efcaef65dace33212fda0d990600090a250565b33611bb46000546001600160a01b031690565b6001600160a01b031614611bda5760405162461bcd60e51b8152600401610b3f906135f8565b6064600c54611be99190613712565b8110611c555760405162461bcd60e51b815260206004820152603560248201527f4572726f723a204e65772073656c6c206c696d69742061626f7665203125206f604482015274331031b4b931bab630ba34b7339039bab838363c9760591b6064820152608401610b3f565b611c616009600a613777565b611c6b9083613822565b9150611c796009600a613777565b611c839082613822565b90506000606460ff16600c54611c999190613712565b9050600061019061ffff16600c54611cb19190613712565b905081841015611d175760405162461bcd60e51b815260206004820152602b60248201527f6e657742616c616e63654c696d6974206e6565647320746f206265206174206c60448201526a19585cdd081d185c99d95d60aa1b6064820152608401610b3f565b80831015611d785760405162461bcd60e51b815260206004820152602860248201527f6e657753656c6c4c696d6974206e6565647320746f206265206174206c6561736044820152671d081d185c99d95d60c21b6064820152608401610b3f565b600d849055600e83905560405184906000805160206138be83398151915290600090a2600e546040516000805160206138be83398151915290600090a250505050565b3360009081526002602090815260408083206001600160a01b038616845290915281205482811015611e1e5760405162461bcd60e51b815260206004820152600c60248201526b3c3020616c6c6f77616e636560a01b6044820152606401610b3f565b611e2d3385610e048685613841565b5060019392505050565b6000610afa3384846123ee565b33611e576000546001600160a01b031690565b6001600160a01b031614611e7d5760405162461bcd60e51b8152600401610b3f906135f8565b6017805461ff0019166101008315158102919091179182905560405160ff91909204161515907f669a6418e904a59fab89972d5ce42429cb380f287efcaef65dace33212fda0d990600090a250565b6000601a54421015611ee65742601a546119f09190613841565b50600090565b6000611efa6009600a613777565b600c54611f096009600a613777565b611f189064e8d4a51000613822565b611f229190613841565b6119f09190613712565b33611f3f6000546001600160a01b031690565b6001600160a01b031614611f655760405162461bcd60e51b8152600401610b3f906135f8565b600881905560405181906000805160206138be83398151915290600090a250565b33611f996000546001600160a01b031690565b6001600160a01b031614611fbf5760405162461bcd60e51b8152600401610b3f906135f8565b6001600160a01b038116611fe55760405162461bcd60e51b8152600401610b3f9061362d565b600a80546001600160a01b0319166001600160a01b0383169081179091556040516000805160206138fe83398151915290600090a250565b336120306000546001600160a01b031690565b6001600160a01b0316146120565760405162461bcd60e51b8152600401610b3f906135f8565b6120626009600a613777565b61206c9082613822565b600f8190556040516000805160206138be83398151915290600090a250565b3361209e6000546001600160a01b031690565b6001600160a01b0316146120c45760405162461bcd60e51b8152600401610b3f906135f8565b600981111561210e5760405162461bcd60e51b8152602060048201526016602482015275084eaf24098dec6d640e8d2daca40e8dede40d0d2ced60531b6044820152606401610b3f565b601881905560405181906000805160206138be83398151915290600090a250565b6001600160a01b0381166000908152600360205260408120544281116121585750600092915050565b6121624282613841565b9392505050565b3361217c6000546001600160a01b031690565b6001600160a01b0316146121a25760405162461bcd60e51b8152600401610b3f906135f8565b610e9b6006826122e6565b336121c06000546001600160a01b031690565b6001600160a01b0316146121e65760405162461bcd60e51b8152600401610b3f906135f8565b6001600160a01b03811661224b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b3f565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b336122b96000546001600160a01b031690565b6001600160a01b0316146122df5760405162461bcd60e51b8152600401610b3f906135f8565b610e9b6004825b6000612162836001600160a01b03841661283d565b6001600160a01b0383166123455760405162461bcd60e51b8152602060048201526011602482015270417070726f76652066726f6d207a65726f60781b6044820152606401610b3f565b6001600160a01b03821661238d5760405162461bcd60e51b815260206004820152600f60248201526e417070726f766520746f207a65726f60881b6044820152606401610b3f565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166124395760405162461bcd60e51b81526020600482015260126024820152715472616e736665722066726f6d207a65726f60701b6044820152606401610b3f565b6001600160a01b0382166124825760405162461bcd60e51b815260206004820152601060248201526f5472616e7366657220746f207a65726f60801b6044820152606401610b3f565b600061248f60048561288c565b806124a057506124a060048461288c565b905060006001600160a01b0385163014806124c357506001600160a01b03841630145b6014546013549192506001600160a01b0390811691600091888116600160301b909204161480156125055750816001600160a01b0316866001600160a01b0316145b8061254057506013546001600160a01b03878116600160301b909204161480156125405750816001600160a01b0316876001600160a01b0316145b6013549091506000906001600160a01b03898116600160301b90920416148061257a5750826001600160a01b0316886001600160a01b0316145b6013549091506000906001600160a01b03898116600160301b9092041614806125b45750836001600160a01b0316886001600160a01b0316145b905084806125bf5750825b806125c75750855b156125dc576125d78989896128ae565b612640565b601954610100900460ff166126335760405162461bcd60e51b815260206004820152601760248201527f74726164696e67206e6f742079657420656e61626c65640000000000000000006044820152606401610b3f565b6126408989898585612967565b505050505050505050565b6017805460ff19166001908117909155306000908152602091909152604081205460135490919061269390640100000000810460ff90811691650100000000009004166136ed565b60ff16905060006008549050808310806126af575061ffff8216155b156126bc57505050612792565b60135460009061ffff8416906126dd90640100000000900460ff1684613822565b6126e79190613712565b905060006126f58284613841565b90506000612704600284613712565b905060006127128285613841565b9050600061272084836136d5565b90504761272c82612f21565b60006127388247613841565b90506000836127478684613822565b6127519190613712565b905061275d8682613089565b506000905061276c8447613841565b9050806015600082825461278091906136d5565b90915550505050505050505050505050505b6017805460ff19169055565b6000612162836001600160a01b03841661318e565b601a54811161281c5760405162461bcd60e51b815260206004820152602f60248201527f4572726f723a204e657720756e6c6f636b2074696d652069732073686f72746560448201526e39103a3430b71037b6321037b7329760891b6064820152608401610b3f565b601a81905560405181906000805160206138be83398151915290600090a250565b600081815260018301602052604081205461288457508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610afe565b506000610afe565b6001600160a01b03811660009081526001830160205260408120541515612162565b6001600160a01b038316600090815260016020526040902054818110156129125760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610b3f565b61291c848361327b565b61292683836132c0565b826001600160a01b0316846001600160a01b03166000805160206138de8339815191528460405161295991815260200190565b60405180910390a350505050565b6001600160a01b03808516600090815260016020526040808220549288168252902054848110156129d55760405162461bcd60e51b81526020600482015260186024820152775472616e7366657220657863656564732062616c616e636560401b6044820152606401610b3f565b60008315612ae857600e54861115612a215760405162461bcd60e51b815260206004820152600f60248201526e223ab6b810383937ba32b1ba34b7b760891b6044820152606401610b3f565b612a2c60068961288c565b15612a705760405162461bcd60e51b81526020600482015260146024820152734164647265737320626c61636b6c69737465642160601b6044820152606401610b3f565b601154601054612a8091906136d5565b4211158015612a9157506012546001145b15612ad757612aa16006896122e6565b506040516001600160a01b038916907f8c21268f4379683ad2b81c32b4357f44a17e83e73d741ba6e8c23e085e57135190600090a25b50601354610100900460ff16612dce565b8415612c5b57600d54612afb87856136d5565b1115612b3c5760405162461bcd60e51b815260206004820152601060248201526f3bb430b63290383937ba32b1ba34b7b760811b6044820152606401610b3f565b600f54861115612b995760405162461bcd60e51b815260206004820152602260248201527f547820616d6f756e7420657863656564696e67206d61782062757920616d6f756044820152611b9d60f21b6064820152608401610b3f565b612ba460068861288c565b15612be85760405162461bcd60e51b81526020600482015260146024820152734164647265737320626c61636b6c69737465642160601b6044820152606401610b3f565b601154601054612bf891906136d5565b4211158015612c0957506012546001145b15612c4f57612c196006886122e6565b506040516001600160a01b038816907f8c21268f4379683ad2b81c32b4357f44a17e83e73d741ba6e8c23e085e57135190600090a25b5060135460ff16612dce565b612c6660068961288c565b15612cb35760405162461bcd60e51b815260206004820152601b60248201527f53656e646572206164647265737320626c61636b6c69737465642100000000006044820152606401610b3f565b612cbe60068861288c565b15612d0b5760405162461bcd60e51b815260206004820152601e60248201527f526563697069656e74206164647265737320626c61636b6c69737465642100006044820152606401610b3f565b600d54612d1887856136d5565b1115612d595760405162461bcd60e51b815260206004820152601060248201526f3bb430b63290383937ba32b1ba34b7b760811b6044820152606401610b3f565b601154601054612d6991906136d5565b4211158015612d7a57506012546001145b15612dc057612d8a6006896122e6565b506040516001600160a01b038916907f8c21268f4379683ad2b81c32b4357f44a17e83e73d741ba6e8c23e085e57135190600090a25b5060135462010000900460ff165b6013546001600160a01b03898116600160301b9092041614801590612df6575060195460ff16155b8015612e05575060175460ff16155b8015612e0e5750835b15612e1b57612e1b61264b565b6000612e378783601360039054906101000a900460ff166132e4565b601354909150600090612e6d9089908590612e689060ff6401000000008204811691650100000000009004166136ed565b6132e4565b90506000612e7b82846136d5565b612e85908a613841565b9050612e918b8a61327b565b3060009081526001602052604081208054849290612eb09084906136d5565b9250508190555082600c6000828254612ec99190613841565b90915550612ed990508a826132c0565b896001600160a01b03168b6001600160a01b03166000805160206138de83398151915283604051612f0c91815260200190565b60405180910390a35050505050505050505050565b601454612f399030906001600160a01b0316836122fb565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612f6e57612f6e613884565b6001600160a01b03928316602091820292909201810191909152601454604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612fc257600080fd5b505afa158015612fd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ffa919061334b565b8160018151811061300d5761300d613884565b6001600160a01b03928316602091820292909201015260145460405163791ac94760e01b815291169063791ac94790613053908590600090869030904290600401613664565b600060405180830381600087803b15801561306d57600080fd5b505af1158015613081573d6000803e3d6000fd5b505050505050565b600080826016600082825461309e91906136d5565b909155506000905060646130b385604b613822565b6130bd9190613712565b9050600060646130ce87604b613822565b6130d89190613712565b6014549091506130f39030906001600160a01b0316886122fb565b60145460405163f305d71960e01b81526001600160a01b039091169063f305d71990879061312f9030908b90879089908490429060040161353e565b6060604051808303818588803b15801561314857600080fd5b505af115801561315c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613181919061349c565b5096979596505050505050565b600081815260018301602052604081205480156132715760006131b2600183613841565b85549091506000906131c690600190613841565b905060008660000182815481106131df576131df613884565b906000526020600020015490508087600001848154811061320257613202613884565b6000918252602080832090910192909255828152600189019091526040902084905586548790806132355761323561386e565b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610afe565b6000915050610afe565b6001600160a01b03821660009081526001602052604081205461329f908390613841565b6001600160a01b039093166000908152600160205260409020929092555050565b6001600160a01b03821660009081526001602052604081205461329f9083906136d5565b60006127108260ff168460ff16866132fc9190613822565b6133069190613822565b6133109190613712565b949350505050565b803560ff8116811461332957600080fd5b919050565b60006020828403121561334057600080fd5b81356121628161389a565b60006020828403121561335d57600080fd5b81516121628161389a565b6000806040838503121561337b57600080fd5b82356133868161389a565b915060208301356133968161389a565b809150509250929050565b6000806000606084860312156133b657600080fd5b83356133c18161389a565b925060208401356133d18161389a565b929592945050506040919091013590565b600080604083850312156133f557600080fd5b82356134008161389a565b946020939093013593505050565b60006020828403121561342057600080fd5b8135612162816138af565b60006020828403121561343d57600080fd5b8151612162816138af565b60006020828403121561345a57600080fd5b5035919050565b60006020828403121561347357600080fd5b5051919050565b6000806040838503121561348d57600080fd5b50508035926020909101359150565b6000806000606084860312156134b157600080fd5b8351925060208401519150604084015190509250925092565b60008060008060008060c087890312156134e357600080fd5b6134ec87613318565b95506134fa60208801613318565b945061350860408801613318565b935061351660608801613318565b925061352460808801613318565b915061353260a08801613318565b90509295509295509295565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600060208083528351808285015260005b818110156135a65785810183015185820160400152820161358a565b818111156135b8576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526010908201526f139bdd081e595d081d5b9b1bd8dad95960821b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601b908201527f4572726f723a2043616e6e6f74206265203020616464726573732e0000000000604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156136b45784516001600160a01b03168352938301939183019160010161368f565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156136e8576136e8613858565b500190565b600060ff821660ff84168060ff0382111561370a5761370a613858565b019392505050565b60008261372f57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561376f57816000190482111561375557613755613858565b8085161561376257918102915b93841c9390800290613739565b509250929050565b600061216260ff84168360008261379057506001610afe565b8161379d57506000610afe565b81600181146137b357600281146137bd576137d9565b6001915050610afe565b60ff8411156137ce576137ce613858565b50506001821b610afe565b5060208310610133831016604e8410600b84101617156137fc575081810a610afe565b6138068383613734565b806000190482111561381a5761381a613858565b029392505050565b600081600019048311821515161561383c5761383c613858565b500290565b60008282101561385357613853613858565b500390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461139157600080fd5b801515811461139157600080fdfefb60e050a21ad73ac014de3ac7e8beec47ce0426c74545f9eded8135493e8e02ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef156f82350b7972f1821f0b3cc744ecec05d5c0893150eccf16174dbc4bf8d8dda26469706673582212202bfad25e055ba6083cde7b06ad4c78b76eb3a9f368ba549ddad7e21501d5c5ba64736f6c63430008070033
Deployed Bytecode Sourcemap
27674:28611:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53939:94;;;;;;;;;;-1:-1:-1;54020:5:0;;;;;;;;;;;;-1:-1:-1;;;54020:5:0;;;;53939:94;;;;;;;:::i;:::-;;;;;;;;54824:161;;;;;;;;;;-1:-1:-1;54824:161:0;;;;;:::i;:::-;;:::i;:::-;;;5289:14:1;;5282:22;5264:41;;5252:2;5237:18;54824:161:0;5124:187:1;52040:1015:0;;;;;;;;;;;;;:::i;:::-;;;17171:25:1;;;17159:2;17144:18;52040:1015:0;17025:177:1;28827:43:0;;;;;;;;;;;;28867:3;28827:43;;;;;17006:6:1;16994:19;;;16976:38;;16964:2;16949:18;28827:43:0;16832:188:1;42684:102:0;;;;;;;;;;-1:-1:-1;42767:11:0;;42684:102;;54249:108;;;;;;;;;;-1:-1:-1;54331:18:0;;54249:108;;28472:68;;;;;;;;;;;;;:::i;55298:392::-;;;;;;;;;;-1:-1:-1;55298:392:0;;;;;:::i;:::-;;:::i;48175:83::-;;;;;;;;;;;;;:::i;29309:76::-;;;;;;;;;;-1:-1:-1;29309:76:0;;;;-1:-1:-1;;;;;29309:76:0;;;;;;-1:-1:-1;;;;;4205:32:1;;;4187:51;;4175:2;4160:18;29309:76:0;4041:203:1;42088:249:0;;;;;;;;;;-1:-1:-1;42262:8:0;;42088:249;;;42262:8;;;;;;18732:25:1;;42271:13:0;;;;;18788:2:1;18773:18;;18766:34;42285:13:0;;;;;18816:18:1;;;18809:34;;;;42299:7:0;;;18874:2:1;18859:18;;18852:34;42262:8:0;42307;;;;18917:3:1;18902:19;;18895:35;42316:12:0;;;;;18961:3:1;18946:19;;18939:35;18719:3;18704:19;42088:249:0;18445:535:1;43155:27:0;;;;;;;;;;-1:-1:-1;43155:27:0;;;;;;;;;;;28710:45;;;;;;;;;;;;28752:3;28710:45;;;;;19157:4:1;19145:17;;;19127:36;;19115:2;19100:18;28710:45:0;18985:184:1;54147:94:0;;;;;;;;;;-1:-1:-1;28464:1:0;54147:94;;46774:201;;;;;;;;;;-1:-1:-1;46774:201:0;;;;;:::i;:::-;;:::i;55725:205::-;;;;;;;;;;-1:-1:-1;55725:205:0;;;;;:::i;:::-;;:::i;51287:695::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;4441:32:1;;;4423:51;;4505:2;4490:18;;4483:34;;;;4396:18;51287:695:0;4249:274:1;38129:25:0;;;;;;;;;;;;;;;;43675:486;;;;;;;;;;-1:-1:-1;43675:486:0;;;;;:::i;:::-;;:::i;43189:26::-;;;;;;;;;;;;;;;;49795;;;;;;;;;;-1:-1:-1;49795:26:0;;;;;;;;;;;53141:268;;;;;;;;;;;;;:::i;50104:243::-;;;;;;;;;;-1:-1:-1;50104:243:0;;;;;:::i;:::-;;:::i;29769:46::-;;;;;;;;;;;;;;;;47073:1048;;;;;;;;;;-1:-1:-1;47073:1048:0;;;;;:::i;:::-;;:::i;43260:408::-;;;;;;;;;;;;;:::i;37391:31::-;;;;;;;;;;;;;;;;29007:48;;;;;;;;;;;;29046:9;29007:48;;46239:181;;;;;;;;;;-1:-1:-1;46239:181:0;;;;;:::i;:::-;;:::i;29225:77::-;;;;;;;;;;-1:-1:-1;29225:77:0;;;;-1:-1:-1;;;;;29225:77:0;;;50594:232;;;;;;;;;;-1:-1:-1;50594:232:0;;;;;:::i;:::-;;:::i;41929:151::-;;;;;;;;;;;;;:::i;:::-;;;;18366:25:1;;;18422:2;18407:18;;18400:34;;;;18339:18;41929:151:0;18192:248:1;54365:121:0;;;;;;;;;;-1:-1:-1;54365:121:0;;;;;:::i;:::-;-1:-1:-1;;;;;54460:18:0;54433:7;54460:18;;;:9;:18;;;;;;;54365:121;9530:142;;;;;;;;;;;;;:::i;29713:49::-;;;;;;;;;;;;;;;;49909:129;;;;;;;;;;;;;:::i;42928:109::-;;;;;;;;;;;;;:::i;43222:28::-;;;;;;;;;;-1:-1:-1;43222:28:0;;;;;;;;53837:94;;;;;;;;;;-1:-1:-1;53889:7:0;8954:6;-1:-1:-1;;;;;8954:6:0;53837:94;;48270:247;;;;;;;;;;-1:-1:-1;48270:247:0;;;;;:::i;:::-;;:::i;54041:98::-;;;;;;;;;;-1:-1:-1;54124:7:0;;;;;;;;;;;;-1:-1:-1;;;54124:7:0;;;;54041:98;;44593:252;;;;;;;;;;-1:-1:-1;44593:252:0;;;;;:::i;:::-;;:::i;44246:165::-;;;;;;;;;;-1:-1:-1;44246:165:0;;;;;:::i;:::-;;:::i;48620:1045::-;;;;;;;;;;-1:-1:-1;48620:1045:0;;;;;:::i;:::-;;:::i;55938:342::-;;;;;;;;;;-1:-1:-1;55938:342:0;;;;;:::i;:::-;;:::i;54494:167::-;;;;;;;;;;-1:-1:-1;54494:167:0;;;;;:::i;:::-;;:::i;45164:156::-;;;;;;;;;;-1:-1:-1;45164:156:0;;;;;:::i;:::-;;:::i;41560:222::-;;;;;;;;;;;;;:::i;41790:131::-;;;;;;;;;;;;;:::i;45759:179::-;;;;;;;;;;-1:-1:-1;45759:179:0;;;;;:::i;:::-;;:::i;44857:246::-;;;;;;;;;;-1:-1:-1;44857:246:0;;;;;:::i;:::-;;:::i;44417:164::-;;;;;;;;;;-1:-1:-1;44417:164:0;;;;;:::i;:::-;;:::i;54669:147::-;;;;;;;;;;-1:-1:-1;54669:147:0;;;;;:::i;:::-;-1:-1:-1;;;;;54780:19:0;;;54753:7;54780:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;54669:147;45389:246;;;;;;;;;;-1:-1:-1;45389:246:0;;;;;:::i;:::-;;:::i;42403:275::-;;;;;;;;;;-1:-1:-1;42403:275:0;;;;;:::i;:::-;;:::i;46500:193::-;;;;;;;;;;-1:-1:-1;46500:193:0;;;;;:::i;:::-;;:::i;9827:238::-;;;;;;;;;;-1:-1:-1;9827:238:0;;;;;:::i;:::-;;:::i;46006:166::-;;;;;;;;;;-1:-1:-1;46006:166:0;;;;;:::i;:::-;;:::i;54824:161::-;54901:4;54918:37;54927:10;54939:7;54948:6;54918:8;:37::i;:::-;-1:-1:-1;54973:4:0;54824:161;;;;;:::o;52040:1015::-;52099:18;9112:10;9101:7;8927;8954:6;-1:-1:-1;;;;;8954:6:0;;8889:79;9101:7;-1:-1:-1;;;;;9101:21:0;;9093:66;;;;-1:-1:-1;;;9093:66:0;;;;;;;:::i;:::-;;;;;;;;;52215:20:::1;;52196:15;:39;;52188:68;;;;-1:-1:-1::0;;;52188:68:0::1;;;;;;;:::i;:::-;52316:22;::::0;52367:39:::1;::::0;-1:-1:-1;;;52367:39:0;;52400:4:::1;52367:39;::::0;::::1;4187:51:1::0;52316:22:0;;;::::1;-1:-1:-1::0;;;;;52316:22:0::1;::::0;52267:30:::1;::::0;52316:22;;52367:24:::1;::::0;4160:18:1;;52367:39:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52450:16;::::0;52419:56:::1;::::0;-1:-1:-1;;;52419:56:0;;-1:-1:-1;;;;;52450:16:0;;::::1;52419:56;::::0;::::1;4423:51:1::0;4490:18;;;4483:34;;;52350:56:0;;-1:-1:-1;52419:22:0;::::1;::::0;::::1;::::0;4396:18:1;;52419:56:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;52618:16:0::1;::::0;52576:21:::1;::::0;-1:-1:-1;;;;;52618:16:0::1;:64;52705:4;52725:6:::0;52760:3:::1;52747:9;52725:6:::0;52754:2:::1;52747:9;:::i;:::-;52746:17;;;;:::i;:::-;52792:3;52779:9;:6:::0;52786:2:::1;52779:9;:::i;:::-;52778:17;;;;:::i;:::-;52818:4;52838:15;52618:250;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;52879:21:0::1;52903:39;52925:17:::0;52903:21:::1;:39;:::i;:::-;52879:63;;52971:13;52953:16;;:31;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;53006:13:0;;-1:-1:-1;;;;;52040:1015:0;:::o;28472:68::-;28527:13;28464:1;28527:2;:13;:::i;:::-;28511:29;;:13;:29;:::i;:::-;28472:68;:::o;55298:392::-;55398:4;55415:36;55425:6;55433:9;55444:6;55415:9;:36::i;:::-;-1:-1:-1;;;;;55491:19:0;;55464:24;55491:19;;;:11;:19;;;;;;;;55511:10;55491:31;;;;;;;;55541:26;;;;55533:59;;;;-1:-1:-1;;;55533:59:0;;9870:2:1;55533:59:0;;;9852:21:1;9909:2;9889:18;;;9882:30;-1:-1:-1;;;9928:18:1;;;9921:50;9988:18;;55533:59:0;9668:344:1;55533:59:0;55605:55;55614:6;55622:10;55634:25;55653:6;55634:16;:25;:::i;:::-;55605:8;:55::i;:::-;-1:-1:-1;55678:4:0;;55298:392;-1:-1:-1;;;;55298:392:0:o;48175:83::-;9112:10;9101:7;8927;8954:6;-1:-1:-1;;;;;8954:6:0;;8889:79;9101:7;-1:-1:-1;;;;;9101:21:0;;9093:66;;;;-1:-1:-1;;;9093:66:0;;;;;;;:::i;:::-;48230:20:::1;:18;:20::i;:::-;48175:83::o:0;46774:201::-;9112:10;9101:7;8927;8954:6;-1:-1:-1;;;;;8954:6:0;;8889:79;9101:7;-1:-1:-1;;;;;9101:21:0;;9093:66;;;;-1:-1:-1;;;9093:66:0;;;;;;;:::i;:::-;46868:41:::1;:14;46890:18:::0;46868:21:::1;:41::i;:::-;-1:-1:-1::0;46925:42:0::1;::::0;-1:-1:-1;;;;;46925:42:0;::::1;::::0;-1:-1:-1;;;;;;;;;;;46925:42:0;;;::::1;46774:201:::0;:::o;55725:205::-;55833:10;55807:4;55854:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;55854:32:0;;;;;;;;;;55807:4;;55824:76;;55845:7;;55854:45;;55889:10;;55854:45;:::i;51287:695::-;51347:17;;9112:10;9101:7;8927;8954:6;-1:-1:-1;;;;;8954:6:0;;8889:79;9101:7;-1:-1:-1;;;;;9101:21:0;;9093:66;;;;-1:-1:-1;;;9093:66:0;;;;;;;:::i;:::-;51482:20:::1;;51463:15;:39;;51455:68;;;;-1:-1:-1::0;;;51455:68:0::1;;;;;;;:::i;:::-;51593:22;::::0;51644:39:::1;::::0;-1:-1:-1;;;51644:39:0;;51677:4:::1;51644:39;::::0;::::1;4187:51:1::0;51593:22:0;;;::::1;-1:-1:-1::0;;;;;51593:22:0::1;::::0;51544:30:::1;::::0;51593:22;;51644:24:::1;::::0;4160:18:1;;51644:39:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51782:10;::::0;51758:43:::1;::::0;-1:-1:-1;;;51758:43:0;;-1:-1:-1;;;;;51782:10:0;;::::1;51758:43;::::0;::::1;4423:51:1::0;4490:18;;;4483:34;;;51627:56:0;;-1:-1:-1;51758:23:0;::::1;::::0;::::1;::::0;4396:18:1;;51758:43:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;51841:10:0::1;::::0;51817:43:::1;::::0;17171:25:1;;;-1:-1:-1;;;;;51841:10:0;;::::1;::::0;51834:4:::1;::::0;-1:-1:-1;;;;;;;;;;;51817:43:0;17159:2:1;17144:18;51817:43:0::1;;;;;;;51883:10;::::0;-1:-1:-1;;;;;51883:10:0::1;::::0;-1:-1:-1;51917:6:0;-1:-1:-1;;51287:695:0;;:::o;43675:486::-;9112:10;9101:7;8927;8954:6;-1:-1:-1;;;;;8954:6:0;;8889:79;9101:7;-1:-1:-1;;;;;9101:21:0;;9093:66;;;;-1:-1:-1;;;9093:66:0;;;;;;;:::i;:::-;43771:16:::1;;43763:6;:24;;43755:91;;;::::0;-1:-1:-1;;;43755:91:0;;7165:2:1;43755:91:0::1;::::0;::::1;7147:21:1::0;7204:2;7184:18;;;7177:30;7243:34;7223:18;;;7216:62;-1:-1:-1;;;7294:18:1;;;7287:43;7347:19;;43755:91:0::1;6963:409:1::0;43755:91:0::1;43875:6;43857:16;;:24;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;43900:10:0::1;::::0;-1:-1:-1;;;;;43900:10:0::1;43892:47;43935:3;43922:9;:6:::0;43929:2:::1;43922:9;:::i;:::-;43921:17;;;;:::i;:::-;43892:47;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;43958:9:0::1;::::0;-1:-1:-1;;;;;43958:9:0::1;43950:55;44000:3;43987:9;:6:::0;43994:2:::1;43987:9;:::i;:::-;43986:17;;;;:::i;:::-;43979:24;::::0;:6;:24:::1;:::i;:::-;43950:55;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;44045:10:0::1;::::0;-1:-1:-1;;;;;44045:10:0::1;44038:4;-1:-1:-1::0;;;;;;;;;;;44071:3:0::1;44058:9;:6:::0;44065:2:::1;44058:9;:::i;:::-;44057:17;;;;:::i;:::-;44021:54;::::0;17171:25:1;;;17159:2;17144:18;44021:54:0::1;;;;;;;44115:9;::::0;-1:-1:-1;;;;;44115:9:0::1;44108:4;-1:-1:-1::0;;;;;;;;;;;44148:3:0::1;44135:9;:6:::0;44142:2:::1;44135:9;:::i;:::-;44134:17;;;;:::i;:::-;44127:24;::::0;:6;:24:::1;:::i;:::-;44091:62;::::0;17171:25:1;;;17159:2;17144:18;44091:62:0::1;;;;;;;43675:486:::0;:::o;53141:268::-;9112:10;9101:7;8927;8954:6;-1:-1:-1;;;;;8954:6:0;;8889:79;9101:7;-1:-1:-1;;;;;9101:21:0;;9093:66;;;;-1:-1:-1;;;9093:66:0;;;;;;;:::i;:::-;53231:20:::1;;53212:15;:39;;53204:68;;;;-1:-1:-1::0;;;53204:68:0::1;;;;;;;:::i;:::-;53297:10;::::0;:51:::1;::::0;53284:9:::1;::::0;-1:-1:-1;;;;;53297:10:0::1;::::0;53321:21:::1;::::0;53284:9;53297:51;53284:9;53297:51;53321:21;53297:10;:51:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53283:65;;;53367:4;53359:42;;;::::0;-1:-1:-1;;;53359:42:0;;13217:2:1;53359:42:0::1;::::0;::::1;13199:21:1::0;13256:2;13236:18;;;13229:30;-1:-1:-1;;;13275:18:1;;;13268:46;13331:18;;53359:42:0::1;13015:340:1::0;53359:42:0::1;53193:216;53141:268::o:0;50104:243::-;9112:10;9101:7;8927;8954:6;-1:-1:-1;;;;;8954:6:0;;8889:79;9101:7;-1:-1:-1;;;;;9101:21:0;;9093:66;;;;-1:-1:-1;;;9093:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;50208:35:0;::::1;50200:84;;;;-1:-1:-1::0;;;50200:84:0::1;;;;;;;:::i;:::-;50295:22;:44:::0;;-1:-1:-1;;;;;50295:44:0;;::::1;::::0;::::1;-1:-1:-1::0;;;;;;50295:44:0;;::::1;::::0;;;::::1;::::0;;50104:243::o;47073:1048::-;9112:10;9101:7;8927;8954:6;-1:-1:-1;;;;;8954:6:0;;8889:79;9101:7;-1:-1:-1;;;;;9101:21:0;;9093:66;;;;-1:-1:-1;;;9093:66:0;;;;;;;:::i;:::-;47233:14:::1;47273::::0;47248:24:::1;47258:14:::0;47248:9;:24:::1;:::i;:::-;:39;;;;:::i;:::-;47233:54;;47306:8;:13;;47316:3;47306:13;47298:64;;;::::0;-1:-1:-1;;;47298:64:0;;10563:2:1;47298:64:0::1;::::0;::::1;10545:21:1::0;10602:2;10582:18;;;10575:30;10641:34;10621:18;;;10614:62;-1:-1:-1;;;10692:18:1;;;10685:36;10738:19;;47298:64:0::1;10361:402:1::0;47298:64:0::1;47391:2;47381:6;:12;;;;47373:95;;;::::0;-1:-1:-1;;;47373:95:0;;8398:2:1;47373:95:0::1;::::0;::::1;8380:21:1::0;8437:2;8417:18;;;8410:30;8476:34;8456:18;;;8449:62;8547:31;8527:18;;;8520:59;8596:19;;47373:95:0::1;8196:425:1::0;47373:95:0::1;47498:2;47487:7;:13;;;;47479:97;;;::::0;-1:-1:-1;;;47479:97:0;;13907:2:1;47479:97:0::1;::::0;::::1;13889:21:1::0;13946:2;13926:18;;;13919:30;13985:34;13965:18;;;13958:62;14056:32;14036:18;;;14029:60;14106:19;;47479:97:0::1;13705:426:1::0;47479:97:0::1;47610:2;47595:11;:17;;;;47587:105;;;::::0;-1:-1:-1;;;47587:105:0;;14338:2:1;47587:105:0::1;::::0;::::1;14320:21:1::0;14377:2;14357:18;;;14350:30;14416:34;14396:18;;;14389:62;14487:34;14467:18;;;14460:62;-1:-1:-1;;;14538:19:1;;;14531:33;14581:19;;47587:105:0::1;14136:470:1::0;47587:105:0::1;47714:9;47705:8;;:18;;;;;;;;;;;;;;;;;;47748:14;47734:13;;:28;;;;;;;;;;;;;;;;;;47787:14;47773:13;;:28;;;;;;;;;;;;;;;;;;47830:6;47822:7;;:14;;;;;;;;;;;;;;;;;;47856:7;47847:8;;:16;;;;;;;;;;;;;;;;;;47887:11;47874:12;;:24;;;;;;;;;;;;;;;;;;47932:8;;;;;;;;;;;47916:25;;-1:-1:-1::0;;;;;;;;;;;47916:25:0::1;;;;;;;;;47973:13;::::0;47957:30:::1;::::0;47973:13;;;::::1;;;::::0;-1:-1:-1;;;;;;;;;;;47957:30:0;;;::::1;48019:7;::::0;48003:24:::1;::::0;48019:7:::1;::::0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;48003:24:0;48019:7:::1;::::0;48003:24:::1;48059:8;::::0;48043:25:::1;::::0;48059:8:::1;::::0;;::::1;;;::::0;-1:-1:-1;;;;;;;;;;;48043:25:0;;;::::1;48100:12;::::0;48084:29:::1;::::0;48100:12;;;::::1;;;::::0;-1:-1:-1;;;;;;;;;;;48084:29:0;;;::::1;47222:899;47073:1048:::0;;;;;;:::o;43260:408::-;9112:10;9101:7;8927;8954:6;-1:-1:-1;;;;;8954:6:0;;8889:79;9101:7;-1:-1:-1;;;;;9101:21:0;;9093:66;;;;-1:-1:-1;;;9093:66:0;;;;;;;:::i;:::-;43343:16:::1;::::0;;43328:14:::1;43370:18:::0;;;43407:10:::1;::::0;-1:-1:-1;;;;;43407:10:0::1;43399:47;43442:3;43429:9;43343:16:::0;43436:2:::1;43429:9;:::i;46239:181::-:0;9112:10;9101:7;8927;8954:6;-1:-1:-1;;;;;8954:6:0;;8889:79;9101:7;-1:-1:-1;;;;;9101:21:0;;9093:66;;;;-1:-1:-1;;;9093:66:0;;;;;;;:::i;:::-;46324:33:::1;:9;46341:15:::0;46324:16:::1;:33::i;50594:232::-:0;9112:10;9101:7;8927;8954:6;-1:-1:-1;;;;;8954:6:0;;8889:79;9101:7;-1:-1:-1;;;;;9101:21:0;;9093:66;;;;-1:-1:-1;;;9093:66:0;;;;;;;:::i;:::-;50694:57:::1;50716:34;50735:15;50716:18:::0;:34:::1;:::i;:::-;50694:21;:57::i;:::-;50783:34;50802:15;50783:18:::0;:34:::1;:::i;:::-;50767:51;::::0;-1:-1:-1;;;;;;;;;;;50767:51:0;;;::::1;50594:232:::0;:::o;41929:151::-;41972:15;;42033:13;28464:1;42033:2;:13;:::i;:::-;42020:12;;:26;;;;:::i;:::-;42058:13;28464:1;42058:2;:13;:::i;:::-;42048:9;;:23;;;;:::i;:::-;42013:59;;;;41929:151;;:::o;9530:142::-;9112:10;9101:7;8927;8954:6;-1:-1:-1;;;;;8954:6:0;;8889:79;9101:7;-1:-1:-1;;;;;9101:21:0;;9093:66;;;;-1:-1:-1;;;9093:66:0;;;;;;;:::i;:::-;9631:1:::1;9615:6:::0;;9594:40:::1;::::0;-1:-1:-1;;;;;9615:6:0;;::::1;::::0;9594:40:::1;::::0;9631:1;;9594:40:::1;9662:1;9645:19:::0;;-1:-1:-1;;;;;;9645:19:0::1;::::0;;9530:142::o;49909:129::-;9112:10;9101:7;8927;8954:6;-1:-1:-1;;;;;8954:6:0;;8889:79;9101:7;-1:-1:-1;;;;;9101:21:0;;9093:66;;;;-1:-1:-1;;;9093:66:0;;;;;;;:::i;:::-;49968:14:::1;:19:::0;;-1:-1:-1;;49968:19:0::1;;;::::0;;50015:15:::1;49998:16;:32:::0;49909:129::o;42928:109::-;43015:11;;42999:27;;:15;:27;:::i;:::-;42987:10;42978:20;;;;:8;:20;;;;;:48;42928:109::o;53916:7::-;53909:14;;53837:94;:::o;48270:247::-;9112:10;9101:7;8927;8954:6;-1:-1:-1;;;;;8954:6:0;;8889:79;9101:7;-1:-1:-1;;;;;9101:21:0;;9093:66;;;;-1:-1:-1;;;9093:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;48360:23:0;::::1;48352:72;;;;-1:-1:-1::0;;;48352:72:0::1;;;;;;;:::i;:::-;48435:15;:25:::0;;-1:-1:-1;;;;;;48435:25:0::1;-1:-1:-1::0;;;;;48435:25:0;::::1;::::0;;::::1;::::0;;;48476:33:::1;::::0;-1:-1:-1;;;;;;;;;;;48476:33:0;-1:-1:-1;;48476:33:0::1;48270:247:::0;:::o;44593:252::-;9112:10;9101:7;8927;8954:6;-1:-1:-1;;;;;8954:6:0;;8889:79;9101:7;-1:-1:-1;;;;;9101:21:0;;9093:66;;;;-1:-1:-1;;;9093:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44681:27:0;::::1;44673:74;;;;-1:-1:-1::0;;;44673:74:0::1;;;;;;;:::i;:::-;44756:10;:33:::0;;-1:-1:-1;;;;;;44756:33:0::1;-1:-1:-1::0;;;;;44756:33:0;::::1;::::0;;::::1;::::0;;;44803:34:::1;::::0;-1:-1:-1;;;;;;;;;;;44803:34:0;-1:-1:-1;;44803:34:0::1;44593:252:::0;:::o;44246:165::-;9112:10;9101:7;8927;8954:6;-1:-1:-1;;;;;8954:6:0;;8889:79;9101:7;-1:-1:-1;;;;;9101:21:0;;9093:66;;;;-1:-1:-1;;;9093:66:0;;;;;;;:::i;:::-;44327:16:::1;:23:::0;;-1:-1:-1;;44327:23:0::1;::::0;::::1;;::::0;;::::1;::::0;;;44366:37:::1;::::0;44327:23:::1;44386:16:::0;;;44366:37:::1;;::::0;::::1;::::0;-1:-1:-1;;44366:37:0::1;44246:165:::0;:::o;48620:1045::-;9112:10;9101:7;8927;8954:6;-1:-1:-1;;;;;8954:6:0;;8889:79;9101:7;-1:-1:-1;;;;;9101:21:0;;9093:66;;;;-1:-1:-1;;;9093:66:0;;;;;;;:::i;:::-;48858:3:::1;48839:18;;:22;;;;:::i;:::-;48826:12;:35;48818:110;;;::::0;-1:-1:-1;;;48818:110:0;;12436:2:1;48818:110:0::1;::::0;::::1;12418:21:1::0;12475:2;12455:18;;;12448:30;12514:34;12494:18;;;12487:62;-1:-1:-1;;;12565:18:1;;;12558:51;12626:19;;48818:110:0::1;12234:417:1::0;48818:110:0::1;49006:13;28464:1;49006:2;:13;:::i;:::-;48990:29;::::0;:15;:29:::1;:::i;:::-;48974:45:::0;-1:-1:-1;49056:13:0::1;28464:1;49056:2;:13;:::i;:::-;49043:26;::::0;:12;:26:::1;:::i;:::-;49030:39;;49136:26;28752:3;49163:38;;:18;;:38;;;;:::i;:::-;49136:65;;49212:23;28867:3;49236:35;;:18;;:35;;;;:::i;:::-;49212:59;;49310:18;49293:15;:35;;49284:103;;;::::0;-1:-1:-1;;;49284:103:0;;7986:2:1;49284:103:0::1;::::0;::::1;7968:21:1::0;8025:2;8005:18;;;7998:30;8064:34;8044:18;;;8037:62;-1:-1:-1;;;8115:18:1;;;8108:41;8166:19;;49284:103:0::1;7784:407:1::0;49284:103:0::1;49421:15;49407:12;:29;;49398:94;;;::::0;-1:-1:-1;;;49398:94:0;;11314:2:1;49398:94:0::1;::::0;::::1;11296:21:1::0;11353:2;11333:18;;;11326:30;11392:34;11372:18;;;11365:62;-1:-1:-1;;;11443:18:1;;;11436:38;11491:19;;49398:94:0::1;11112:404:1::0;49398:94:0::1;49505:12;:30:::0;;;49546:9:::1;:24:::0;;;49586:29:::1;::::0;49520:15;;-1:-1:-1;;;;;;;;;;;49586:29:0;-1:-1:-1;;49586:29:0::1;49647:9;::::0;49631:26:::1;::::0;-1:-1:-1;;;;;;;;;;;49631:26:0;;;::::1;48711:954;;48620:1045:::0;;:::o;55938:342::-;56081:10;56025:4;56069:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;56069:32:0;;;;;;;;;;56120:35;;;;56112:60;;;;-1:-1:-1;;;56112:60:0;;16693:2:1;56112:60:0;;;16675:21:1;16732:2;16712:18;;;16705:30;-1:-1:-1;;;16751:18:1;;;16744:42;16803:18;;56112:60:0;16491:336:1;56112:60:0;56185:65;56194:10;56206:7;56215:34;56234:15;56215:16;:34;:::i;56185:65::-;-1:-1:-1;56268:4:0;;55938:342;-1:-1:-1;;;55938:342:0:o;54494:167::-;54574:4;54591:40;54601:10;54613:9;54624:6;54591:9;:40::i;45164:156::-;9112:10;9101:7;8927;8954:6;-1:-1:-1;;;;;8954:6:0;;8889:79;9101:7;-1:-1:-1;;;;;9101:21:0;;9093:66;;;;-1:-1:-1;;;9093:66:0;;;;;;;:::i;:::-;45236:15:::1;:24:::0;;-1:-1:-1;;45236:24:0::1;;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;45276:36:::1;::::0;45236:24:::1;45296:15:::0;;;::::1;;45276:36;;::::0;::::1;::::0;-1:-1:-1;;45276:36:0::1;45164:156:::0;:::o;41560:222::-;41627:7;41665:20;;41649:15;:36;41646:110;;;41729:15;41708:20;;:36;;;;:::i;41646:110::-;-1:-1:-1;41773:1:0;;41560:222::o;41790:131::-;41839:7;41900:13;28464:1;41900:2;:13;:::i;:::-;41880:18;;28527:13;28464:1;28527:2;:13;:::i;:::-;28511:29;;:13;:29;:::i;:::-;41866:32;;;;:::i;:::-;41865:48;;;;:::i;45759:179::-;9112:10;9101:7;8927;8954:6;-1:-1:-1;;;;;8954:6:0;;8889:79;9101:7;-1:-1:-1;;;;;9101:21:0;;9093:66;;;;-1:-1:-1;;;9093:66:0;;;;;;;:::i;:::-;45843:19:::1;:35:::0;;;45894:36:::1;::::0;45865:13;;-1:-1:-1;;;;;;;;;;;45894:36:0;;;::::1;45759:179:::0;:::o;44857:246::-;9112:10;9101:7;8927;8954:6;-1:-1:-1;;;;;8954:6:0;;8889:79;9101:7;-1:-1:-1;;;;;9101:21:0;;9093:66;;;;-1:-1:-1;;;9093:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44943:26:0;::::1;44935:73;;;;-1:-1:-1::0;;;44935:73:0::1;;;;;;;:::i;:::-;45017:9;:31:::0;;-1:-1:-1;;;;;;45017:31:0::1;-1:-1:-1::0;;;;;45017:31:0;::::1;::::0;;::::1;::::0;;;45062:33:::1;::::0;-1:-1:-1;;;;;;;;;;;45062:33:0;-1:-1:-1;;45062:33:0::1;44857:246:::0;:::o;44417:164::-;9112:10;9101:7;8927;8954:6;-1:-1:-1;;;;;8954:6:0;;8889:79;9101:7;-1:-1:-1;;;;;9101:21:0;;9093:66;;;;-1:-1:-1;;;9093:66:0;;;;;;;:::i;:::-;44520:13:::1;28464:1;44520:2;:13;:::i;:::-;44505:28;::::0;:12;:28:::1;:::i;:::-;44495:9;:38:::0;;;44547:26:::1;::::0;-1:-1:-1;;;;;;;;;;;44547:26:0;;;::::1;44417:164:::0;:::o;45389:246::-;9112:10;9101:7;8927;8954:6;-1:-1:-1;;;;;8954:6:0;;8889:79;9101:7;-1:-1:-1;;;;;9101:21:0;;9093:66;;;;-1:-1:-1;;;9093:66:0;;;;;;;:::i;:::-;29046:9:::1;45482:30:::0;::::1;;45474:64;;;::::0;-1:-1:-1;;;45474:64:0;;9519:2:1;45474:64:0::1;::::0;::::1;9501:21:1::0;9558:2;9538:18;;;9531:30;-1:-1:-1;;;9577:18:1;;;9570:52;9639:18;;45474:64:0::1;9317:346:1::0;45474:64:0::1;45553:11;:26:::0;;;45599:28:::1;::::0;45565:14;;-1:-1:-1;;;;;;;;;;;45599:28:0;;;::::1;45389:246:::0;:::o;42403:275::-;-1:-1:-1;;;;;42525:24:0;;42490:7;42525:24;;;:8;:24;;;;;;42572:15;42562:25;;42559:71;;-1:-1:-1;42618:1:0;;42403:275;-1:-1:-1;;42403:275:0:o;42559:71::-;42646:24;42655:15;42646:8;:24;:::i;:::-;42639:31;42403:275;-1:-1:-1;;;42403:275:0:o;46500:193::-;9112:10;9101:7;8927;8954:6;-1:-1:-1;;;;;8954:6:0;;8889:79;9101:7;-1:-1:-1;;;;;9101:21:0;;9093:66;;;;-1:-1:-1;;;9093:66:0;;;;;;;:::i;:::-;46589:38:::1;:14;46608:18:::0;46589::::1;:38::i;9827:238::-:0;9112:10;9101:7;8927;8954:6;-1:-1:-1;;;;;8954:6:0;;8889:79;9101:7;-1:-1:-1;;;;;9101:21:0;;9093:66;;;;-1:-1:-1;;;9093:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9910:22:0;::::1;9902:73;;;::::0;-1:-1:-1;;;9902:73:0;;7579:2:1;9902:73:0::1;::::0;::::1;7561:21:1::0;7618:2;7598:18;;;7591:30;7657:34;7637:18;;;7630:62;-1:-1:-1;;;7708:18:1;;;7701:36;7754:19;;9902:73:0::1;7377:402:1::0;9902:73:0::1;10012:6;::::0;;9991:38:::1;::::0;-1:-1:-1;;;;;9991:38:0;;::::1;::::0;10012:6;::::1;::::0;9991:38:::1;::::0;::::1;10040:6;:17:::0;;-1:-1:-1;;;;;;10040:17:0::1;-1:-1:-1::0;;;;;10040:17:0;;;::::1;::::0;;;::::1;::::0;;9827:238::o;46006:166::-;9112:10;9101:7;8927;8954:6;-1:-1:-1;;;;;8954:6:0;;8889:79;9101:7;-1:-1:-1;;;;;9101:21:0;;9093:66;;;;-1:-1:-1;;;9093:66:0;;;;;;;:::i;:::-;46085:27:::1;:9;46099:12:::0;24580:152;24650:4;24674:50;24679:3;-1:-1:-1;;;;;24699:23:0;;24674:4;:50::i;54991:299::-;-1:-1:-1;;;;;55084:19:0;;55076:49;;;;-1:-1:-1;;;55076:49:0;;8828:2:1;55076:49:0;;;8810:21:1;8867:2;8847:18;;;8840:30;-1:-1:-1;;;8886:18:1;;;8879:47;8943:18;;55076:49:0;8626:341:1;55076:49:0;-1:-1:-1;;;;;55144:21:0;;55136:49;;;;-1:-1:-1;;;55136:49:0;;10970:2:1;55136:49:0;;;10952:21:1;11009:2;10989:18;;;10982:30;-1:-1:-1;;;11028:18:1;;;11021:45;11083:18;;55136:49:0;10768:339:1;55136:49:0;-1:-1:-1;;;;;55198:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;55250:32;;17171:25:1;;;55250:32:0;;17144:18:1;55250:32:0;;;;;;;54991:299;;;:::o;31885:1540::-;-1:-1:-1;;;;;31981:20:0;;31973:51;;;;-1:-1:-1;;;31973:51:0;;6120:2:1;31973:51:0;;;6102:21:1;6159:2;6139:18;;;6132:30;-1:-1:-1;;;6178:18:1;;;6171:48;6236:18;;31973:51:0;5918:342:1;31973:51:0;-1:-1:-1;;;;;32043:23:0;;32035:52;;;;-1:-1:-1;;;32035:52:0;;9174:2:1;32035:52:0;;;9156:21:1;9213:2;9193:18;;;9186:30;-1:-1:-1;;;9232:18:1;;;9225:46;9288:18;;32035:52:0;8972:340:1;32035:52:0;32180:15;32199:26;:9;32218:6;32199:18;:26::i;:::-;:59;;;-1:-1:-1;32229:29:0;:9;32248;32229:18;:29::i;:::-;32180:79;-1:-1:-1;32358:23:0;-1:-1:-1;;;;;32383:21:0;;32399:4;32383:21;;:49;;-1:-1:-1;;;;;;32408:24:0;;32427:4;32408:24;32383:49;32567:16;;32634:21;;32358:75;;-1:-1:-1;;;;;;32567:16:0;;;;32535:23;;32624:31;;;-1:-1:-1;;;32634:21:0;;;;32624:31;:63;;;;;32672:15;-1:-1:-1;;;;;32659:28:0;:9;-1:-1:-1;;;;;32659:28:0;;32624:63;32623:144;;;-1:-1:-1;32716:21:0;;-1:-1:-1;;;;;32703:34:0;;;-1:-1:-1;;;32716:21:0;;;;32703:34;:63;;;;;32751:15;-1:-1:-1;;;;;32741:25:0;:6;-1:-1:-1;;;;;32741:25:0;;32703:63;32889:21;;32595:173;;-1:-1:-1;32870:10:0;;-1:-1:-1;;;;;32881:29:0;;;-1:-1:-1;;;32889:21:0;;;;32881:29;;:57;;;32923:15;-1:-1:-1;;;;;32913:25:0;:6;-1:-1:-1;;;;;32913:25:0;;32881:57;32972:21;;32870:68;;-1:-1:-1;32949:11:0;;-1:-1:-1;;;;;32961:32:0;;;-1:-1:-1;;;32972:21:0;;;;32961:32;;:63;;;33009:15;-1:-1:-1;;;;;32996:28:0;:9;-1:-1:-1;;;;;32996:28:0;;32961:63;32949:75;;33065:18;:41;;;;33087:19;33065:41;:55;;;;33110:10;33065:55;33062:356;;;33136:43;33153:6;33161:9;33172:6;33136:16;:43::i;:::-;33062:356;;;33298:14;;;;;;;33290:49;;;;-1:-1:-1;;;33290:49:0;;12084:2:1;33290:49:0;;;12066:21:1;12123:2;12103:18;;;12096:30;12162:25;12142:18;;;12135:53;12205:18;;33290:49:0;11882:347:1;33290:49:0;33354:52;33369:6;33376:9;33386:6;33393:5;33399:6;33354:14;:52::i;:::-;31962:1463;;;;;;31885:1540;;;:::o;38534:1582::-;38282:27;:34;;-1:-1:-1;;38282:34:0;38312:4;38282:34;;;;;;38636:4:::1;38282:27:::0;38618:24;;;::::1;::::0;;;;;;;;38683:13:::1;::::0;38618:24;;38282:27;38669::::1;::::0;38683:13;;::::1;38282:34:::0;38683:13;;::::1;::::0;38669;;::::1;;:27;:::i;:::-;38653:43;;;;38707:19;38729;;38707:41;;38875:11;38859:15;:27;:40;;;-1:-1:-1::0;38888:11:0::1;::::0;::::1;::::0;38859:40:::1;38856:77;;;38915:7;;;;;38856:77;39053:13;::::0;39014:25:::1;::::0;39040:36:::1;::::0;::::1;::::0;39041:25:::1;::::0;39053:13;;::::1;;;39041:11:::0;:25:::1;:::i;:::-;39040:36;;;;:::i;:::-;39014:62:::0;-1:-1:-1;39087:25:0::1;39114:29;39014:62:::0;39114:11;:29:::1;:::i;:::-;39087:56:::0;-1:-1:-1;39204:16:0::1;39221:19;39239:1;39221:17:::0;:19:::1;:::i;:::-;39204:36:::0;-1:-1:-1;39251:19:0::1;39271:26;39204:36:::0;39271:17;:26:::1;:::i;:::-;39251:46:::0;-1:-1:-1;39380:17:0::1;39398:29;39410:17:::0;39251:46;39398:29:::1;:::i;:::-;39380:47:::0;-1:-1:-1;39506:21:0::1;39538:27;39380:47:::0;39538:16:::1;:27::i;:::-;39576:14;39592:41;39616:17:::0;39592:21:::1;:41;:::i;:::-;39576:58:::0;-1:-1:-1;39734:14:0::1;39772:9:::0;39752:18:::1;39759:11:::0;39576:58;39752:18:::1;:::i;:::-;39751:30;;;;:::i;:::-;39734:47;;39792:31;39806:8;39816:6;39792:13;:31::i;:::-;-1:-1:-1::0;39948:21:0::1;::::0;-1:-1:-1;39971:41:0::1;39995:17:::0;39971:21:::1;:41;:::i;:::-;39948:65;;40095:13;40077:16;;:31;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;;;;;;;;38327:1:0::1;38339:27:::0;:35;;-1:-1:-1;;38339:35:0;;;38534:1582::o;24908:158::-;24981:4;25005:53;25013:3;-1:-1:-1;;;;;25033:23:0;;25005:7;:53::i;50879:343::-;51035:20;;51021:13;:34;51013:103;;;;-1:-1:-1;;;51013:103:0;;15169:2:1;51013:103:0;;;15151:21:1;15208:2;15188:18;;;15181:30;15247:34;15227:18;;;15220:62;-1:-1:-1;;;15298:18:1;;;15291:45;15353:19;;51013:103:0;14967:411:1;51013:103:0;51127:20;:34;;;51177:37;;51148:13;;-1:-1:-1;;;;;;;;;;;51177:37:0;;;;50879:343;:::o;19635:414::-;19698:4;21961:19;;;:12;;;:19;;;;;;19715:327;;-1:-1:-1;19758:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;19941:18;;19919:19;;;:12;;;:19;;;;;;:40;;;;19974:11;;19715:327;-1:-1:-1;20025:5:0;20018:12;;25152:167;-1:-1:-1;;;;;25286:23:0;;25232:4;21961:19;;;:12;;;:19;;;;;;:24;;25256:55;21864:129;36725:400;-1:-1:-1;;;;;36844:17:0;;36820:21;36844:17;;;:9;:17;;;;;;36880:23;;;;36872:60;;;;-1:-1:-1;;;36872:60:0;;6812:2:1;36872:60:0;;;6794:21:1;6851:2;6831:18;;;6824:30;-1:-1:-1;;;6870:18:1;;;6863:54;6934:18;;36872:60:0;6610:348:1;36872:60:0;36968:27;36981:6;36988;36968:12;:27::i;:::-;37028:28;37038:9;37049:6;37028:9;:28::i;:::-;37098:9;-1:-1:-1;;;;;37082:33:0;37091:6;-1:-1:-1;;;;;37082:33:0;-1:-1:-1;;;;;;;;;;;37108:6:0;37082:33;;;;17171:25:1;;17159:2;17144:18;;17025:177;37082:33:0;;;;;;;;36809:316;36725:400;;;:::o;33495:3183::-;-1:-1:-1;;;;;33638:20:0;;;33611:24;33638:20;;;:9;:20;;;;;;;33693:17;;;;;;;;33729:23;;;;33721:60;;;;-1:-1:-1;;;33721:60:0;;6812:2:1;33721:60:0;;;6794:21:1;6851:2;6831:18;;;6824:30;-1:-1:-1;;;6870:18:1;;;6863:54;6934:18;;33721:60:0;6610:348:1;33721:60:0;33794:9;33817:6;33814:1673;;;33904:9;;33896:6;:17;;33888:44;;;;-1:-1:-1;;;33888:44:0;;10219:2:1;33888:44:0;;;10201:21:1;10258:2;10238:18;;;10231:30;-1:-1:-1;;;10277:18:1;;;10270:45;10332:18;;33888:44:0;10017:339:1;33888:44:0;33955:31;:14;33979:6;33955:23;:31::i;:::-;:40;33947:73;;;;-1:-1:-1;;;33947:73:0;;15585:2:1;33947:73:0;;;15567:21:1;15624:2;15604:18;;;15597:30;-1:-1:-1;;;15643:18:1;;;15636:50;15703:18;;33947:73:0;15383:344:1;33947:73:0;34077:11;;34058:16;;:30;;;;:::i;:::-;34039:15;:49;;:77;;;;;34092:19;;34115:1;34092:24;34039:77;34035:186;;;34137:26;:14;34156:6;34137:18;:26::i;:::-;-1:-1:-1;34187:18:0;;-1:-1:-1;;;;;34187:18:0;;;;;;;;34035:186;-1:-1:-1;34239:8:0;;;;;;;33814:1673;;;34272:5;34269:1218;;;34417:12;;34392:23;34409:6;34392:16;:23;:::i;:::-;:37;;34384:65;;;;-1:-1:-1;;;34384:65:0;;13562:2:1;34384:65:0;;;13544:21:1;13601:2;13581:18;;;13574:30;-1:-1:-1;;;13620:18:1;;;13613:46;13676:18;;34384:65:0;13360:340:1;34384:65:0;34473:9;;34463:6;:19;;34455:65;;;;-1:-1:-1;;;34455:65:0;;15934:2:1;34455:65:0;;;15916:21:1;15973:2;15953:18;;;15946:30;16012:34;15992:18;;;15985:62;-1:-1:-1;;;16063:18:1;;;16056:32;16105:19;;34455:65:0;15732:398:1;34455:65:0;34543:34;:14;34567:9;34543:23;:34::i;:::-;:43;34535:76;;;;-1:-1:-1;;;34535:76:0;;15585:2:1;34535:76:0;;;15567:21:1;15624:2;15604:18;;;15597:30;-1:-1:-1;;;15643:18:1;;;15636:50;15703:18;;34535:76:0;15383:344:1;34535:76:0;34668:11;;34649:16;;:30;;;;:::i;:::-;34630:15;:49;;:77;;;;;34683:19;;34706:1;34683:24;34630:77;34626:192;;;34728:29;:14;34747:9;34728:18;:29::i;:::-;-1:-1:-1;34781:21:0;;-1:-1:-1;;;;;34781:21:0;;;;;;;;34626:192;-1:-1:-1;34836:7:0;;;;34269:1218;;;34987:31;:14;35011:6;34987:23;:31::i;:::-;:40;34979:80;;;;-1:-1:-1;;;34979:80:0;;16337:2:1;34979:80:0;;;16319:21:1;16376:2;16356:18;;;16349:30;16415:29;16395:18;;;16388:57;16462:18;;34979:80:0;16135:351:1;34979:80:0;35082:34;:14;35106:9;35082:23;:34::i;:::-;:43;35074:86;;;;-1:-1:-1;;;35074:86:0;;12858:2:1;35074:86:0;;;12840:21:1;12897:2;12877:18;;;12870:30;12936:32;12916:18;;;12909:60;12986:18;;35074:86:0;12656:354:1;35074:86:0;35208:12;;35183:23;35200:6;35183:16;:23;:::i;:::-;:37;;35175:65;;;;-1:-1:-1;;;35175:65:0;;13562:2:1;35175:65:0;;;13544:21:1;13601:2;13581:18;;;13574:30;-1:-1:-1;;;13620:18:1;;;13613:46;13676:18;;35175:65:0;13360:340:1;35175:65:0;35297:11;;35278:16;;:30;;;;:::i;:::-;35259:15;:49;;:77;;;;;35312:19;;35335:1;35312:24;35259:77;35255:186;;;35357:26;:14;35376:6;35357:18;:26::i;:::-;-1:-1:-1;35407:18:0;;-1:-1:-1;;;;;35407:18:0;;;;;;;;35255:186;-1:-1:-1;35459:12:0;;;;;;;34269:1218;35824:21;;-1:-1:-1;;;;;35816:29:0;;;-1:-1:-1;;;35824:21:0;;;;35816:29;;;;35815:52;;-1:-1:-1;35850:16:0;;;;35849:17;35815:52;:84;;;;-1:-1:-1;35871:27:0;;;;35870:28;35815:84;:92;;;;;35901:6;35815:92;35812:130;;;35922:20;:18;:20::i;:::-;36011:23;36035:36;36049:6;36057:3;36062:8;;;;;;;;;;;36035:13;:36::i;:::-;36145:13;;36011:60;;-1:-1:-1;36082:21:0;;36104:55;;36118:6;;36126:3;;36131:27;;36145:13;;;;;;;36131;;;;:27;:::i;:::-;36104:13;:55::i;:::-;36082:77;-1:-1:-1;36223:19:0;36251:31;36082:77;36251:15;:31;:::i;:::-;36243:40;;:6;:40;:::i;:::-;36223:60;;36321:27;36334:6;36341;36321:12;:27::i;:::-;36443:4;36425:24;;;;:9;:24;;;;;:41;;36453:13;;36425:24;:41;;36453:13;;36425:41;:::i;:::-;;;;;;;;36521:15;36501:18;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;36571:33:0;;-1:-1:-1;36581:9:0;36592:11;36571:9;:33::i;:::-;36646:9;-1:-1:-1;;;;;36630:38:0;36639:6;-1:-1:-1;;;;;36630:38:0;-1:-1:-1;;;;;;;;;;;36656:11:0;36630:38;;;;17171:25:1;;17159:2;17144:18;;17025:177;36630:38:0;;;;;;;;33600:3078;;;;;;33495:3183;;;;;:::o;40166:461::-;40259:16;;40227:58;;40244:4;;-1:-1:-1;;;;;40259:16:0;40278:6;40227:8;:58::i;:::-;40320:16;;;40334:1;40320:16;;;;;;;;40296:21;;40320:16;;;;;;;;;;-1:-1:-1;40320:16:0;40296:40;;40365:4;40347;40352:1;40347:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;40347:23:0;;;:7;;;;;;;;;;:23;;;;40391:16;;:23;;;-1:-1:-1;;;40391:23:0;;;;:16;;;;;:21;;:23;;;;;40347:7;;40391:23;;;;;:16;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40381:4;40386:1;40381:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;40381:33:0;;;:7;;;;;;;;;:33;40427:16;;:192;;-1:-1:-1;;;40427:192:0;;:16;;;:67;;:192;;40509:6;;40427:16;;40546:4;;40573;;40593:15;;40427:192;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40216:411;40166:461;:::o;40754:686::-;40834:19;40855:21;40901:9;40889:10;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;40921:14:0;;-1:-1:-1;40955:3:0;40939:12;:9;40949:2;40939:12;:::i;:::-;40938:20;;;;:::i;:::-;40921:37;-1:-1:-1;40969:17:0;41008:3;40990:14;:11;41002:2;40990:14;:::i;:::-;40989:22;;;;:::i;:::-;41054:16;;40969:42;;-1:-1:-1;41022:63:0;;41039:4;;-1:-1:-1;;;;;41054:16:0;41073:11;41022:8;:63::i;:::-;41096:16;;:218;;-1:-1:-1;;;41096:218:0;;-1:-1:-1;;;;;41096:16:0;;;;:32;;41136:9;;41096:218;;41169:4;;41189:11;;41215:9;;41239:6;;41169:4;;41288:15;;41096:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;41339:11:0;;41377:9;;-1:-1:-1;;;;;;40754:686:0:o;20225:1553::-;20291:4;20430:19;;;:12;;;:19;;;;;;20466:15;;20462:1309;;20828:21;20852:14;20865:1;20852:10;:14;:::i;:::-;20901:18;;20828:38;;-1:-1:-1;20881:17:0;;20901:22;;20922:1;;20901:22;:::i;:::-;20881:42;;21168:17;21188:3;:11;;21200:9;21188:22;;;;;;;;:::i;:::-;;;;;;;;;21168:42;;21334:9;21305:3;:11;;21317:13;21305:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;21411:23;;;:12;;;:23;;;;;;:36;;;21572:17;;21411:3;;21572:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;21667:3;:12;;:19;21680:5;21667:19;;;;;;;;;;;21660:26;;;21710:4;21703:11;;;;;;;;20462:1309;21754:5;21747:12;;;;;37725:228;-1:-1:-1;;;;;37860:15:0;;37842:17;37860:15;;;:9;:15;;;;;;:22;;37876:6;;37860:22;:::i;:::-;-1:-1:-1;;;;;37920:15:0;;;;;;;:9;:15;;;;;:25;;;;-1:-1:-1;;37725:228:0:o;37461:225::-;-1:-1:-1;;;;;37593:15:0;;37575:17;37593:15;;;:9;:15;;;;;;:22;;37609:6;;37593:22;:::i;37180:156::-;37270:7;37323:5;37309:10;37298:21;;37305:3;37298:10;;:6;:10;;;;:::i;:::-;:21;;;;:::i;:::-;37297:31;;;;:::i;:::-;37290:38;37180:156;-1:-1:-1;;;;37180:156:0:o;14::1:-;80:20;;140:4;129:16;;119:27;;109:55;;160:1;157;150:12;109:55;14:156;;;:::o;175:247::-;234:6;287:2;275:9;266:7;262:23;258:32;255:52;;;303:1;300;293:12;255:52;342:9;329:23;361:31;386:5;361:31;:::i;427:251::-;497:6;550:2;538:9;529:7;525:23;521:32;518:52;;;566:1;563;556:12;518:52;598:9;592:16;617:31;642:5;617:31;:::i;683:388::-;751:6;759;812:2;800:9;791:7;787:23;783:32;780:52;;;828:1;825;818:12;780:52;867:9;854:23;886:31;911:5;886:31;:::i;:::-;936:5;-1:-1:-1;993:2:1;978:18;;965:32;1006:33;965:32;1006:33;:::i;:::-;1058:7;1048:17;;;683:388;;;;;:::o;1076:456::-;1153:6;1161;1169;1222:2;1210:9;1201:7;1197:23;1193:32;1190:52;;;1238:1;1235;1228:12;1190:52;1277:9;1264:23;1296:31;1321:5;1296:31;:::i;:::-;1346:5;-1:-1:-1;1403:2:1;1388:18;;1375:32;1416:33;1375:32;1416:33;:::i;:::-;1076:456;;1468:7;;-1:-1:-1;;;1522:2:1;1507:18;;;;1494:32;;1076:456::o;1537:315::-;1605:6;1613;1666:2;1654:9;1645:7;1641:23;1637:32;1634:52;;;1682:1;1679;1672:12;1634:52;1721:9;1708:23;1740:31;1765:5;1740:31;:::i;:::-;1790:5;1842:2;1827:18;;;;1814:32;;-1:-1:-1;;;1537:315:1:o;1857:241::-;1913:6;1966:2;1954:9;1945:7;1941:23;1937:32;1934:52;;;1982:1;1979;1972:12;1934:52;2021:9;2008:23;2040:28;2062:5;2040:28;:::i;2103:245::-;2170:6;2223:2;2211:9;2202:7;2198:23;2194:32;2191:52;;;2239:1;2236;2229:12;2191:52;2271:9;2265:16;2290:28;2312:5;2290:28;:::i;2353:180::-;2412:6;2465:2;2453:9;2444:7;2440:23;2436:32;2433:52;;;2481:1;2478;2471:12;2433:52;-1:-1:-1;2504:23:1;;2353:180;-1:-1:-1;2353:180:1:o;2538:184::-;2608:6;2661:2;2649:9;2640:7;2636:23;2632:32;2629:52;;;2677:1;2674;2667:12;2629:52;-1:-1:-1;2700:16:1;;2538:184;-1:-1:-1;2538:184:1:o;2727:248::-;2795:6;2803;2856:2;2844:9;2835:7;2831:23;2827:32;2824:52;;;2872:1;2869;2862:12;2824:52;-1:-1:-1;;2895:23:1;;;2965:2;2950:18;;;2937:32;;-1:-1:-1;2727:248:1:o;2980:306::-;3068:6;3076;3084;3137:2;3125:9;3116:7;3112:23;3108:32;3105:52;;;3153:1;3150;3143:12;3105:52;3182:9;3176:16;3166:26;;3232:2;3221:9;3217:18;3211:25;3201:35;;3276:2;3265:9;3261:18;3255:25;3245:35;;2980:306;;;;;:::o;3291:535::-;3383:6;3391;3399;3407;3415;3423;3476:3;3464:9;3455:7;3451:23;3447:33;3444:53;;;3493:1;3490;3483:12;3444:53;3516:27;3533:9;3516:27;:::i;:::-;3506:37;;3562:36;3594:2;3583:9;3579:18;3562:36;:::i;:::-;3552:46;;3617:36;3649:2;3638:9;3634:18;3617:36;:::i;:::-;3607:46;;3672:36;3704:2;3693:9;3689:18;3672:36;:::i;:::-;3662:46;;3727:37;3759:3;3748:9;3744:19;3727:37;:::i;:::-;3717:47;;3783:37;3815:3;3804:9;3800:19;3783:37;:::i;:::-;3773:47;;3291:535;;;;;;;;:::o;4528:591::-;-1:-1:-1;;;;;4871:15:1;;;4853:34;;4918:2;4903:18;;4896:34;;;;4961:2;4946:18;;4939:34;;;;5004:2;4989:18;;4982:34;;;;5053:15;;;5047:3;5032:19;;5025:44;4833:3;5085:19;;5078:35;;;;4802:3;4787:19;;4528:591::o;5316:597::-;5428:4;5457:2;5486;5475:9;5468:21;5518:6;5512:13;5561:6;5556:2;5545:9;5541:18;5534:34;5586:1;5596:140;5610:6;5607:1;5604:13;5596:140;;;5705:14;;;5701:23;;5695:30;5671:17;;;5690:2;5667:26;5660:66;5625:10;;5596:140;;;5754:6;5751:1;5748:13;5745:91;;;5824:1;5819:2;5810:6;5799:9;5795:22;5791:31;5784:42;5745:91;-1:-1:-1;5897:2:1;5876:15;-1:-1:-1;;5872:29:1;5857:45;;;;5904:2;5853:54;;5316:597;-1:-1:-1;;;5316:597:1:o;6265:340::-;6467:2;6449:21;;;6506:2;6486:18;;;6479:30;-1:-1:-1;;;6540:2:1;6525:18;;6518:46;6596:2;6581:18;;6265:340::o;11521:356::-;11723:2;11705:21;;;11742:18;;;11735:30;11801:34;11796:2;11781:18;;11774:62;11868:2;11853:18;;11521:356::o;14611:351::-;14813:2;14795:21;;;14852:2;14832:18;;;14825:30;14891:29;14886:2;14871:18;;14864:57;14953:2;14938:18;;14611:351::o;17207:980::-;17469:4;17517:3;17506:9;17502:19;17548:6;17537:9;17530:25;17574:2;17612:6;17607:2;17596:9;17592:18;17585:34;17655:3;17650:2;17639:9;17635:18;17628:31;17679:6;17714;17708:13;17745:6;17737;17730:22;17783:3;17772:9;17768:19;17761:26;;17822:2;17814:6;17810:15;17796:29;;17843:1;17853:195;17867:6;17864:1;17861:13;17853:195;;;17932:13;;-1:-1:-1;;;;;17928:39:1;17916:52;;18023:15;;;;17988:12;;;;17964:1;17882:9;17853:195;;;-1:-1:-1;;;;;;;18104:32:1;;;;18099:2;18084:18;;18077:60;-1:-1:-1;;;18168:3:1;18153:19;18146:35;18065:3;17207:980;-1:-1:-1;;;17207:980:1:o;19174:128::-;19214:3;19245:1;19241:6;19238:1;19235:13;19232:39;;;19251:18;;:::i;:::-;-1:-1:-1;19287:9:1;;19174:128::o;19307:204::-;19345:3;19381:4;19378:1;19374:12;19413:4;19410:1;19406:12;19448:3;19442:4;19438:14;19433:3;19430:23;19427:49;;;19456:18;;:::i;:::-;19492:13;;19307:204;-1:-1:-1;;;19307:204:1:o;19516:217::-;19556:1;19582;19572:132;;19626:10;19621:3;19617:20;19614:1;19607:31;19661:4;19658:1;19651:15;19689:4;19686:1;19679:15;19572:132;-1:-1:-1;19718:9:1;;19516:217::o;19738:422::-;19827:1;19870:5;19827:1;19884:270;19905:7;19895:8;19892:21;19884:270;;;19964:4;19960:1;19956:6;19952:17;19946:4;19943:27;19940:53;;;19973:18;;:::i;:::-;20023:7;20013:8;20009:22;20006:55;;;20043:16;;;;20006:55;20122:22;;;;20082:15;;;;19884:270;;;19888:3;19738:422;;;;;:::o;20165:140::-;20223:5;20252:47;20293:4;20283:8;20279:19;20273:4;20359:5;20389:8;20379:80;;-1:-1:-1;20430:1:1;20444:5;;20379:80;20478:4;20468:76;;-1:-1:-1;20515:1:1;20529:5;;20468:76;20560:4;20578:1;20573:59;;;;20646:1;20641:130;;;;20553:218;;20573:59;20603:1;20594:10;;20617:5;;;20641:130;20678:3;20668:8;20665:17;20662:43;;;20685:18;;:::i;:::-;-1:-1:-1;;20741:1:1;20727:16;;20756:5;;20553:218;;20855:2;20845:8;20842:16;20836:3;20830:4;20827:13;20823:36;20817:2;20807:8;20804:16;20799:2;20793:4;20790:12;20786:35;20783:77;20780:159;;;-1:-1:-1;20892:19:1;;;20924:5;;20780:159;20971:34;20996:8;20990:4;20971:34;:::i;:::-;21041:6;21037:1;21033:6;21029:19;21020:7;21017:32;21014:58;;;21052:18;;:::i;:::-;21090:20;;20310:806;-1:-1:-1;;;20310:806:1:o;21121:168::-;21161:7;21227:1;21223;21219:6;21215:14;21212:1;21209:21;21204:1;21197:9;21190:17;21186:45;21183:71;;;21234:18;;:::i;:::-;-1:-1:-1;21274:9:1;;21121:168::o;21294:125::-;21334:4;21362:1;21359;21356:8;21353:34;;;21367:18;;:::i;:::-;-1:-1:-1;21404:9:1;;21294:125::o;21424:127::-;21485:10;21480:3;21476:20;21473:1;21466:31;21516:4;21513:1;21506:15;21540:4;21537:1;21530:15;21556:127;21617:10;21612:3;21608:20;21605:1;21598:31;21648:4;21645:1;21638:15;21672:4;21669:1;21662:15;21688:127;21749:10;21744:3;21740:20;21737:1;21730:31;21780:4;21777:1;21770:15;21804:4;21801:1;21794:15;21952:131;-1:-1:-1;;;;;22027:31:1;;22017:42;;22007:70;;22073:1;22070;22063:12;22088:118;22174:5;22167:13;22160:21;22153:5;22150:32;22140:60;;22196:1;22193;22186:12
Swarm Source
ipfs://2bfad25e055ba6083cde7b06ad4c78b76eb3a9f368ba549ddad7e21501d5c5ba
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.