More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 480,497 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer | 60765305 | 12 hrs ago | IN | 0 AVAX | 0.00000682 | ||||
Transfer | 59954237 | 14 days ago | IN | 0 AVAX | 0.00003398 | ||||
Transfer | 59954236 | 14 days ago | IN | 0 AVAX | 0.00000301 | ||||
Transfer | 59946169 | 14 days ago | IN | 0 AVAX | 0.00000007 | ||||
Transfer | 59946168 | 14 days ago | IN | 0 AVAX | 0.0000001 | ||||
Transfer | 59939083 | 14 days ago | IN | 0 AVAX | 0.00000214 | ||||
Transfer | 59919458 | 14 days ago | IN | 0 AVAX | 0.00000429 | ||||
Transfer | 59919458 | 14 days ago | IN | 0 AVAX | 0.00000142 | ||||
Transfer | 59919457 | 14 days ago | IN | 0 AVAX | 0.00000143 | ||||
Transfer | 59919455 | 14 days ago | IN | 0 AVAX | 0.00000269 | ||||
Transfer | 59586783 | 21 days ago | IN | 0 AVAX | 0.00009508 | ||||
Transfer | 59543760 | 22 days ago | IN | 0 AVAX | 0.000122 | ||||
Transfer | 59432789 | 24 days ago | IN | 0 AVAX | 0.00015087 | ||||
Approve | 58912943 | 35 days ago | IN | 0 AVAX | 0.00005935 | ||||
Approve | 58893596 | 36 days ago | IN | 0 AVAX | 0.000043 | ||||
Approve | 58893588 | 36 days ago | IN | 0 AVAX | 0.00004124 | ||||
Approve | 58342972 | 47 days ago | IN | 0 AVAX | 0.00007539 | ||||
Approve | 58264704 | 48 days ago | IN | 0 AVAX | 0.00004193 | ||||
Approve | 58205653 | 50 days ago | IN | 0 AVAX | 0.0000516 | ||||
Approve | 58005021 | 54 days ago | IN | 0 AVAX | 0.00005946 | ||||
Approve | 57735951 | 59 days ago | IN | 0 AVAX | 0.0000701 | ||||
Approve | 57698164 | 60 days ago | IN | 0 AVAX | 0.0000389 | ||||
Approve | 57693420 | 60 days ago | IN | 0 AVAX | 0.00005355 | ||||
Approve | 57596512 | 62 days ago | IN | 0 AVAX | 0.00011618 | ||||
Approve | 57555868 | 62 days ago | IN | 0 AVAX | 0.00003656 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
33316932 | 631 days ago | 0.00510242 AVAX | ||||
33316932 | 631 days ago | 0.00510242 AVAX | ||||
27465178 | 770 days ago | 0.0678996 AVAX | ||||
27465178 | 770 days ago | 0.0678996 AVAX | ||||
18522276 | 985 days ago | 0.00003993 AVAX | ||||
18522276 | 985 days ago | 0.00003993 AVAX | ||||
15355928 | 1059 days ago | 0.00078992 AVAX | ||||
15355928 | 1059 days ago | 0.00078992 AVAX | ||||
13518186 | 1102 days ago | 0.00473203 AVAX | ||||
13518186 | 1102 days ago | 0.00473203 AVAX | ||||
13306153 | 1107 days ago | 0.01640934 AVAX | ||||
13306153 | 1107 days ago | 0.01640934 AVAX | ||||
12853099 | 1118 days ago | 0.00061282 AVAX | ||||
12853099 | 1118 days ago | 0.00061282 AVAX | ||||
12784106 | 1119 days ago | 0.00123355 AVAX | ||||
12784106 | 1119 days ago | 0.00123355 AVAX | ||||
12541046 | 1125 days ago | 0.02101523 AVAX | ||||
12541046 | 1125 days ago | 0.02101523 AVAX | ||||
12403120 | 1128 days ago | 0.00076759 AVAX | ||||
12403120 | 1128 days ago | 0.00076759 AVAX | ||||
12367436 | 1129 days ago | 0.00592828 AVAX | ||||
12367436 | 1129 days ago | 0.00592828 AVAX | ||||
12341748 | 1130 days ago | 0.01201937 AVAX | ||||
12341748 | 1130 days ago | 0.01201937 AVAX | ||||
12318708 | 1130 days ago | 0.0060207 AVAX |
Loading...
Loading
Contract Name:
LVT
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at snowscan.xyz on 2021-12-14 */ /* * __ __ ______ _ * / / ____ __ __ _ __ ___ _____ / /_ __ __ _____ ___ / ____/ (_) ____ ____ _ ____ _____ ___ * / / / __ \ / / / /| | / / / _ \ / ___/ / __/ / / / / / ___/ / _ \ / /_ / / / __ \ / __ `/ / __ \ / ___/ / _ \ * / /___/ /_/ // /_/ / | |/ / / __/ / / / /_ / /_/ / / / / __/ / __/ / / / / / // /_/ / / / / // /__ / __/ * /_____/\____/ \__,_/ |___/ \___/ /_/ \__/ \__,_/ /_/ \___/ /_/ /_/ /_/ /_/ \__,_/ /_/ /_/ \___/ \___/ * * * Web: https://www.louverture.finance/ * Telegram: https://t.me/louverture_fi * Discord: https://discord.gg/HKjuqjdN * Twitter: https://twitter.com/louverture_fi * * Created with Love by the DevTheApe.eth Team */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @title SafeMathUint * @dev Math operations with safety TKNcks that revert on error */ library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0, "toInt256Safe: B LESS THAN ZERO"); return b; } } pragma solidity ^0.8.0; /** * @title SafeMathInt * @dev Math operations for int256 with overflow safety TKNcks. */ library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); /** * @dev Multiplies two int256 variables and fails on overflow. */ function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; // Detect overflow when multiplying MIN_INT256 with -1 require( c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256), "mul: A B C combi values invalid with MIN_INT256" ); require((b == 0) || (c / b == a), "mul: A B C combi values invalid"); return c; } /** * @dev Division of two int256 variables and fails on overflow. */ function div(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when dividing MIN_INT256 by -1 require(b != -1 || a != MIN_INT256, "div: b == 1 OR A == MIN_INT256"); // Solidity already throws when dividing by 0. return a / b; } /** * @dev Subtracts two int256 variables and fails on overflow. */ function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require( (b >= 0 && c <= a) || (b < 0 && c > a), "sub: A B C combi values invalid" ); return c; } /** * @dev Adds two int256 variables and fails on overflow. */ function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require( (b >= 0 && c >= a) || (b < 0 && c < a), "add: A B C combi values invalid" ); return c; } /** * @dev Converts to absolute value, and fails on overflow. */ function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256, "abs: A EQUAL MIN INT256"); return a < 0 ? -a : a; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0, "toUint256Safe: A LESS THAN ZERO"); return uint256(a); } } pragma solidity ^0.8.0; library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is TKNaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouTKNd) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouTKNd) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouTKNd) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouTKNd) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } library IterableMapping { // Iterable mapping from address to uint; struct Map { address[] keys; mapping(address => uint256) values; mapping(address => uint256) indexOf; mapping(address => bool) inserted; } function get(Map storage map, address key) public view returns (uint256) { return map.values[key]; } function getIndexOfKey(Map storage map, address key) public view returns (int256) { if (!map.inserted[key]) { return -1; } return int256(map.indexOf[key]); } function getKeyAtIndex(Map storage map, uint256 index) public view returns (address) { return map.keys[index]; } function size(Map storage map) public view returns (uint256) { return map.keys.length; } function set( Map storage map, address key, uint256 val ) public { if (map.inserted[key]) { map.values[key] = val; } else { map.inserted[key] = true; map.values[key] = val; map.indexOf[key] = map.keys.length; map.keys.push(key); } } function remove(Map storage map, address key) public { if (!map.inserted[key]) { return; } delete map.inserted[key]; delete map.values[key]; uint256 index = map.indexOf[key]; uint256 lastIndex = map.keys.length - 1; address lastKey = map.keys[lastIndex]; map.indexOf[lastKey] = index; delete map.indexOf[key]; map.keys[index] = lastKey; map.keys.pop(); } } // OpenZeppelin Contracts v4.3.2 (utils/Address.sol) pragma solidity ^0.8.0; /** * @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; 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 */ function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}( data ); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall( target, data, "Address: low-level static call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall( target, data, "Address: low-level delegate call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } interface IJoeRouter01 { function factory() external pure returns (address); function WAVAX() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityAVAX( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountAVAXMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountAVAX, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityAVAX( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountAVAXMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountAVAX); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityAVAXWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountAVAXMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountAVAX); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactAVAXForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactAVAX( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForAVAX( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapAVAXForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } // pragma solidity >=0.6.2; interface IJoeRouter02 is IJoeRouter01 { function removeLiquidityAVAXSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountAVAXMin, address to, uint256 deadline ) external returns (uint256 amountAVAX); function removeLiquidityAVAXWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountAVAXMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountAVAX); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactAVAXForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForAVAXSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 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 (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 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 (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns ( uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast ); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IJoeFactory { event PairCreated(address indexed token0, address indexed token1, address pair, uint256); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function migrator() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; function setMigrator(address) external; } pragma solidity ^0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; return msg.data; } } contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); } /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } pragma solidity ^0.8.0; contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve( sender, _msgSender(), _allowances[sender][_msgSender()].sub( amount, "ERC20: transfer amount exceeds allowance" ) ); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue) ); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].sub( subtractedValue, "ERC20: decreased allowance below zero" ) ); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub( amount, "ERC20: transfer amount exceeds balance" ); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub( amount, "ERC20: burn amount exceeds balance" ); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } // OpenZeppelin Contracts v4.3.2 (token/ERC20/utils/SafeERC20.sol) pragma solidity ^0.8.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn( token, abi.encodeWithSelector(token.transfer.selector, to, value) ); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn( token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value) ); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn( token, abi.encodeWithSelector(token.approve.selector, spender, value) ); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn( token, abi.encodeWithSelector( token.approve.selector, spender, newAllowance ) ); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { //unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require( oldAllowance >= value, "SafeERC20: decreased allowance below zero" ); uint256 newAllowance = oldAllowance - value; _callOptionalReturn( token, abi.encodeWithSelector( token.approve.selector, spender, newAllowance ) ); //} } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall( data, "SafeERC20: low-level call failed" ); if (returndata.length > 0) { // Return data is optional require( abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed" ); } } } // OpenZeppelin Contracts v4.3.2 (finance/PaymentSplitter.sol) pragma solidity ^0.8.0; /** * @title PaymentSplitter * @dev This contract allows to split Ether payments among a group of accounts. The sender does not need to be aware * that the Ether will be split in this way, since it is handled transparently by the contract. * * The split can be in equal parts or in any other arbitrary proportion. The way this is specified is by assigning each * account to a number of shares. Of all the Ether that this contract receives, each account will then be able to claim * an amount proportional to the percentage of total shares they were assigned. * * `PaymentSplitter` follows a _pull payment_ model. This means that payments are not automatically forwarded to the * accounts but kept in this contract, and the actual transfer is triggered as a separate step by calling the {release} * function. * * NOTE: This contract assumes that ERC20 tokens will behave similarly to native tokens (Ether). Rebasing tokens, and * tokens that apply fees during transfers, are likely to not be supported as expected. If in doubt, we encourage you * to run tests before sending real value to this contract. */ contract PaymentSplitter is Context { event PayeeAdded(address account, uint256 shares); event PaymentReleased(address to, uint256 amount); event ERC20PaymentReleased( IERC20 indexed token, address to, uint256 amount ); event PaymentReceived(address from, uint256 amount); uint256 private _totalShares; uint256 private _totalReleased; mapping(address => uint256) private _shares; mapping(address => uint256) private _released; address[] private _payees; mapping(IERC20 => uint256) private _erc20TotalReleased; mapping(IERC20 => mapping(address => uint256)) private _erc20Released; /** * @dev Creates an instance of `PaymentSplitter` where each account in `payees` is assigned the number of shares at * the matching position in the `shares` array. * * All addresses in `payees` must be non-zero. Both arrays must have the same non-zero length, and there must be no * duplicates in `payees`. */ constructor(address[] memory payees, uint256[] memory shares_) payable { require( payees.length == shares_.length, "PaymentSplitter: payees and shares length mismatch" ); require(payees.length > 0, "PaymentSplitter: no payees"); for (uint256 i = 0; i < payees.length; i++) { _addPayee(payees[i], shares_[i]); } } /** * @dev The Ether received will be logged with {PaymentReceived} events. Note that these events are not fully * reliable: it's possible for a contract to receive Ether without triggering this function. This only affects the * reliability of the events, and not the actual splitting of Ether. * * To learn more about this see the Solidity documentation for * https://solidity.readthedocs.io/en/latest/contracts.html#fallback-function[fallback * functions]. */ receive() external payable virtual { emit PaymentReceived(_msgSender(), msg.value); } /** * @dev Getter for the total shares held by payees. */ function totalShares() public view returns (uint256) { return _totalShares; } /** * @dev Getter for the total amount of Ether already released. */ function totalReleased() public view returns (uint256) { return _totalReleased; } /** * @dev Getter for the total amount of `token` already released. `token` should be the address of an IERC20 * contract. */ function totalReleased(IERC20 token) public view returns (uint256) { return _erc20TotalReleased[token]; } /** * @dev Getter for the amount of shares held by an account. */ function shares(address account) public view returns (uint256) { return _shares[account]; } /** * @dev Getter for the amount of Ether already released to a payee. */ function released(address account) public view returns (uint256) { return _released[account]; } /** * @dev Getter for the amount of `token` tokens already released to a payee. `token` should be the address of an * IERC20 contract. */ function released(IERC20 token, address account) public view returns (uint256) { return _erc20Released[token][account]; } /** * @dev Getter for the address of the payee number `index`. */ function payee(uint256 index) public view returns (address) { return _payees[index]; } /** * @dev Triggers a transfer to `account` of the amount of Ether they are owed, according to their percentage of the * total shares and their previous withdrawals. */ function release(address payable account) public virtual { require(_shares[account] > 0, "PaymentSplitter: account has no shares"); uint256 totalReceived = address(this).balance + totalReleased(); uint256 payment = _pendingPayment( account, totalReceived, released(account) ); require(payment != 0, "PaymentSplitter: account is not due payment"); _released[account] += payment; _totalReleased += payment; Address.sendValue(account, payment); emit PaymentReleased(account, payment); } /** * @dev Triggers a transfer to `account` of the amount of `token` tokens they are owed, according to their * percentage of the total shares and their previous withdrawals. `token` must be the address of an IERC20 * contract. */ function release(IERC20 token, address account) public virtual { require(_shares[account] > 0, "PaymentSplitter: account has no shares"); uint256 totalReceived = token.balanceOf(address(this)) + totalReleased(token); uint256 payment = _pendingPayment( account, totalReceived, released(token, account) ); require(payment != 0, "PaymentSplitter: account is not due payment"); _erc20Released[token][account] += payment; _erc20TotalReleased[token] += payment; SafeERC20.safeTransfer(token, account, payment); emit ERC20PaymentReleased(token, account, payment); } /** * @dev internal logic for computing the pending payment of an `account` given the token historical balances and * already released amounts. */ function _pendingPayment( address account, uint256 totalReceived, uint256 alreadyReleased ) private view returns (uint256) { return (totalReceived * _shares[account]) / _totalShares - alreadyReleased; } /** * @dev Add a new payee to the contract. * @param account The address of the payee to add. * @param shares_ The number of shares owned by the payee. */ function _addPayee(address account, uint256 shares_) private { require( account != address(0), "PaymentSplitter: account is the zero address" ); require(shares_ > 0, "PaymentSplitter: shares are 0"); require( _shares[account] == 0, "PaymentSplitter: account already has shares" ); _payees.push(account); _shares[account] = shares_; _totalShares = _totalShares + shares_; emit PayeeAdded(account, shares_); } } contract NODERewardManagement { using SafeMath for uint256; using IterableMapping for IterableMapping.Map; struct NodeEntity { string name; uint256 creationTime; uint256 lastClaimTime; uint256 rewardMult; uint256 nodeValue; uint256 rewardAvailable; uint256 addValueCount; } IterableMapping.Map private nodeOwners; mapping(address => NodeEntity[]) private _nodesOfUser; uint256 public nodeMinPrice; uint256 public rewardPerValue; uint256 public claimTime; address public gateKeeper; address public token; bool public autoDistri = true; bool public distribution = false; uint256 public gasForDistribution = 300000; uint256 public lastDistributionCount = 0; uint256 public lastIndexProcessed = 0; uint256[] public tierLevel = [100000,105000,110000,120000,130000,140000]; uint256[] public tierSlope = [1000,500,100,50,10,0]; uint256 public totalNodesCreated = 0; uint256 public totalRewardStaked = 0; constructor( uint256 _nodeMinPrice, uint256 _rewardPerValue, uint256 _claimTime ) { nodeMinPrice = _nodeMinPrice; rewardPerValue = _rewardPerValue; claimTime = _claimTime; gateKeeper = msg.sender; } modifier onlySentry() { require(msg.sender == token || msg.sender == gateKeeper, "Fuck off"); _; } function setToken (address token_) external onlySentry { token = token_; } function distributeRewards(uint256 gas, uint256 rewardValue) private returns ( uint256, uint256, uint256 ) { distribution = true; uint256 numberOfnodeOwners = nodeOwners.keys.length; require(numberOfnodeOwners > 0, "DISTRI REWARDS: NO NODE OWNERS"); if (numberOfnodeOwners == 0) { return (0, 0, lastIndexProcessed); } uint256 gasUsed = 0; uint256 gasLeft = gasleft(); uint256 newGasLeft; uint256 localLastIndex = lastIndexProcessed; uint256 iterations = 0; uint256 newClaimTime = block.timestamp; uint256 nodesCount; uint256 claims = 0; NodeEntity[] storage nodes; NodeEntity storage _node; while (gasUsed < gas && iterations < numberOfnodeOwners) { localLastIndex++; if (localLastIndex >= nodeOwners.keys.length) { localLastIndex = 0; } nodes = _nodesOfUser[nodeOwners.keys[localLastIndex]]; nodesCount = nodes.length; for (uint256 i = 0; i < nodesCount; i++) { _node = nodes[i]; if (claimable(_node)) { _node.rewardAvailable += rewardValue; _node.lastClaimTime = newClaimTime; totalRewardStaked += rewardValue; claims++; } } iterations++; newGasLeft = gasleft(); if (gasLeft > newGasLeft) { gasUsed = gasUsed.add(gasLeft.sub(newGasLeft)); } gasLeft = newGasLeft; } lastIndexProcessed = localLastIndex; distribution = false; return (iterations, claims, lastIndexProcessed); } function createNode(address account, string memory nodeName, uint256 _nodeInitialValue) external onlySentry { require( isNameAvailable(account, nodeName), "CREATE NODE: Name not available" ); _nodesOfUser[account].push( NodeEntity({ name: nodeName, creationTime: block.timestamp, lastClaimTime: block.timestamp, rewardMult: 100000, nodeValue: _nodeInitialValue, addValueCount: 0, rewardAvailable: rewardPerValue }) ); nodeOwners.set(account, _nodesOfUser[account].length); totalNodesCreated++; if (autoDistri && !distribution) { distributeRewards(gasForDistribution, rewardPerValue); } } function isNameAvailable(address account, string memory nodeName) private view returns (bool) { NodeEntity[] memory nodes = _nodesOfUser[account]; for (uint256 i = 0; i < nodes.length; i++) { if (keccak256(bytes(nodes[i].name)) == keccak256(bytes(nodeName))) { return false; } } return true; } function _burn(uint256 index) internal { require(index < nodeOwners.size()); nodeOwners.remove(nodeOwners.getKeyAtIndex(index)); } function _getNodeWithCreatime( NodeEntity[] storage nodes, uint256 _creationTime ) private view returns (NodeEntity storage) { uint256 numberOfNodes = nodes.length; require( numberOfNodes > 0, "CASHOUT ERROR: You don't have nodes to cash-out" ); bool found = false; int256 index = binary_search(nodes, 0, numberOfNodes, _creationTime); uint256 validIndex; if (index >= 0) { found = true; validIndex = uint256(index); } require(found, "NODE SEARCH: No NODE Found with this blocktime"); return nodes[validIndex]; } function binary_search( NodeEntity[] memory arr, uint256 low, uint256 high, uint256 x ) private view returns (int256) { if (high >= low) { uint256 mid = (high + low).div(2); if (arr[mid].creationTime == x) { return int256(mid); } else if (arr[mid].creationTime > x) { return binary_search(arr, low, mid - 1, x); } else { return binary_search(arr, mid + 1, high, x); } } else { return -1; } } function _cashoutNodeReward(address account, uint256 _creationTime) external onlySentry returns (uint256) { require(_creationTime > 0, "NODE: CREATIME must be higher than zero"); NodeEntity[] storage nodes = _nodesOfUser[account]; uint256 numberOfNodes = nodes.length; require( numberOfNodes > 0, "CASHOUT ERROR: You don't have nodes to cash-out" ); NodeEntity storage node = _getNodeWithCreatime(nodes, _creationTime); uint256 rewardNode = node.rewardAvailable.mul(node.rewardMult).mul(node.nodeValue).div(100000).div(1e18); node.rewardAvailable = 0; node.rewardMult = 100000; node.addValueCount = 0; return rewardNode; } function _cashoutAllNodesReward(address account) external onlySentry returns (uint256) { NodeEntity[] storage nodes = _nodesOfUser[account]; uint256 nodesCount = nodes.length; require(nodesCount > 0, "NODE: CREATIME must be higher than zero"); NodeEntity storage _node; uint256 rewardsTotal = 0; for (uint256 i = 0; i < nodesCount; i++) { _node = nodes[i]; rewardsTotal += _node.rewardAvailable.mul(_node.rewardMult).mul(_node.nodeValue).div(100000).div(1e18); _node.rewardAvailable = 0; _node.rewardMult = 100000; _node.addValueCount = 0; } return rewardsTotal; } function _addNodeValue(address account, uint256 _creationTime) external onlySentry returns (uint256) { require(_creationTime > 0, "NODE: CREATIME must be higher than zero"); NodeEntity[] storage nodes = _nodesOfUser[account]; uint256 numberOfNodes = nodes.length; require( numberOfNodes > 0, "CASHOUT ERROR: You don't have nodes to cash-out" ); NodeEntity storage node = _getNodeWithCreatime(nodes, _creationTime); uint256 rewardNode = node.rewardAvailable.mul(node.rewardMult).mul(node.nodeValue).div(100000).div(1e18); node.nodeValue += rewardNode; uint256 prevMult = node.rewardMult; if (rewardNode > 0) { if (prevMult >= tierLevel[5]) { node.rewardMult += tierSlope[5]; } else if (prevMult >= tierLevel[4]) { node.rewardMult += tierSlope[4]; } else if (prevMult >= tierLevel[3]) { node.rewardMult += tierSlope[2]; } else if (prevMult >= tierLevel[2]) { node.rewardMult += tierSlope[2]; } else if (prevMult >= tierLevel[1]) { node.rewardMult += tierSlope[1]; } else { node.rewardMult += tierSlope[0]; } node.rewardAvailable = 0; node.addValueCount += 1; } return rewardNode; } function _addAllNodeValue(address account) external onlySentry returns (uint256) { NodeEntity[] storage nodes = _nodesOfUser[account]; uint256 nodesCount = nodes.length; require(nodesCount > 0, "NODE: CREATIME must be higher than zero"); NodeEntity storage _node; uint256 rewardsTotal = 0; for (uint256 i = 0; i < nodesCount; i++) { _node = nodes[i]; rewardsTotal += _node.rewardAvailable.mul(_node.rewardMult).mul(_node.nodeValue).div(100000).div(1e18); _node.nodeValue += _node.rewardAvailable.mul(_node.rewardMult).mul(_node.nodeValue).div(100000).div(1e18); uint256 prevMult = _node.rewardMult; if ( _node.rewardAvailable > 0) { if (prevMult >= tierLevel[5]) { _node.rewardMult += tierSlope[5]; } else if (prevMult >= tierLevel[4]) { _node.rewardMult += tierSlope[4]; } else if (prevMult >= tierLevel[3]) { _node.rewardMult += tierSlope[2]; } else if (prevMult >= tierLevel[2]) { _node.rewardMult += tierSlope[2]; } else if (prevMult >= tierLevel[1]) { _node.rewardMult += tierSlope[1]; } else { _node.rewardMult += tierSlope[0]; } _node.rewardAvailable = 0; _node.addValueCount += 1; } } return rewardsTotal; } function claimable(NodeEntity memory node) private view returns (bool) { return node.lastClaimTime + claimTime <= block.timestamp; } function _getNodeValueOf(address account) external view returns (uint256) { require(isNodeOwner(account), "GET REWARD OF: NO NODE OWNER"); uint256 nodesCount; uint256 valueCount = 0; NodeEntity[] storage nodes = _nodesOfUser[account]; nodesCount = nodes.length; for (uint256 i = 0; i < nodesCount; i++) { valueCount += nodes[i].nodeValue; } return valueCount; } function _getNodeValueOf(address account, uint256 _creationTime) external view returns (uint256) { require(isNodeOwner(account), "GET REWARD OF: NO NODE OWNER"); require(_creationTime > 0, "NODE: CREATIME must be higher than zero"); NodeEntity[] storage nodes = _nodesOfUser[account]; uint256 numberOfNodes = nodes.length; require( numberOfNodes > 0, "CASHOUT ERROR: You don't have nodes to cash-out" ); NodeEntity storage node = _getNodeWithCreatime(nodes, _creationTime); uint256 valueNode = node.nodeValue; return valueNode; } function _getNodeValueAmountOf(address account, uint256 creationTime) external view returns (uint256) { return _getNodeWithCreatime(_nodesOfUser[account], creationTime) .nodeValue; } function _getAddValueCountOf(address account, uint256 _creationTime) external view returns (uint256) { require(isNodeOwner(account), "GET REWARD OF: NO NODE OWNER"); require(_creationTime > 0, "NODE: CREATIME must be higher than zero"); NodeEntity[] storage nodes = _nodesOfUser[account]; uint256 numberOfNodes = nodes.length; require( numberOfNodes > 0, "CASHOUT ERROR: You don't have nodes to cash-out" ); NodeEntity storage node = _getNodeWithCreatime(nodes, _creationTime); uint256 valueNode = node.addValueCount; return valueNode; } function _getRewardMultOf(address account) external view returns (uint256) { require(isNodeOwner(account), "GET REWARD OF: NO NODE OWNER"); uint256 nodesCount; uint256 valueCount = 0; uint256 totalCount = 0; uint256 rewardMult; NodeEntity[] storage nodes = _nodesOfUser[account]; nodesCount = nodes.length; for (uint256 i = 0; i < nodesCount; i++) { totalCount += nodes[i].nodeValue.mul(nodes[i].rewardMult); valueCount += nodes[i].nodeValue; } rewardMult = totalCount.div(valueCount); return rewardMult; } function _getRewardMultOf(address account, uint256 _creationTime) external view returns (uint256) { require(isNodeOwner(account), "GET REWARD OF: NO NODE OWNER"); require(_creationTime > 0, "NODE: CREATIME must be higher than zero"); NodeEntity[] storage nodes = _nodesOfUser[account]; uint256 numberOfNodes = nodes.length; require( numberOfNodes > 0, "CASHOUT ERROR: You don't have nodes to cash-out" ); NodeEntity storage node = _getNodeWithCreatime(nodes, _creationTime); uint256 valueNode = node.rewardMult; return valueNode; } function _getRewardMultAmountOf(address account, uint256 creationTime) external view returns (uint256) { return _getNodeWithCreatime(_nodesOfUser[account], creationTime) .rewardMult; } function _getRewardAmountOf(address account) external view returns (uint256) { require(isNodeOwner(account), "GET REWARD OF: NO NODE OWNER"); uint256 nodesCount; uint256 rewardCount = 0; NodeEntity[] storage nodes = _nodesOfUser[account]; nodesCount = nodes.length; for (uint256 i = 0; i < nodesCount; i++) { rewardCount += nodes[i].rewardAvailable.mul(nodes[i].rewardMult).mul(nodes[i].nodeValue).div(100000).div(1e18); } return rewardCount; } function _getRewardAmountOf(address account, uint256 _creationTime) external view returns (uint256) { require(isNodeOwner(account), "GET REWARD OF: NO NODE OWNER"); require(_creationTime > 0, "NODE: CREATIME must be higher than zero"); NodeEntity[] storage nodes = _nodesOfUser[account]; uint256 numberOfNodes = nodes.length; require( numberOfNodes > 0, "CASHOUT ERROR: You don't have nodes to cash-out" ); NodeEntity storage node = _getNodeWithCreatime(nodes, _creationTime); uint256 rewardNode = node.rewardAvailable.mul(node.rewardMult).mul(node.nodeValue).div(100000).div(1e18); return rewardNode; } function _getNodeRewardAmountOf(address account, uint256 creationTime) external view returns (uint256) { return _getNodeWithCreatime(_nodesOfUser[account], creationTime) .rewardAvailable.mul(_getNodeWithCreatime(_nodesOfUser[account], creationTime).rewardMult).mul(_getNodeWithCreatime(_nodesOfUser[account], creationTime).nodeValue).div(100000).div(1e18); } function _getNodesNames(address account) external view returns (string memory) { require(isNodeOwner(account), "GET NAMES: NO NODE OWNER"); NodeEntity[] memory nodes = _nodesOfUser[account]; uint256 nodesCount = nodes.length; NodeEntity memory _node; string memory names = nodes[0].name; string memory separator = "#"; for (uint256 i = 1; i < nodesCount; i++) { _node = nodes[i]; names = string(abi.encodePacked(names, separator, _node.name)); } return names; } function _getNodesCreationTime(address account) external view returns (string memory) { require(isNodeOwner(account), "GET CREATIME: NO NODE OWNER"); NodeEntity[] memory nodes = _nodesOfUser[account]; uint256 nodesCount = nodes.length; NodeEntity memory _node; string memory _creationTimes = uint2str(nodes[0].creationTime); string memory separator = "#"; for (uint256 i = 1; i < nodesCount; i++) { _node = nodes[i]; _creationTimes = string( abi.encodePacked( _creationTimes, separator, uint2str(_node.creationTime) ) ); } return _creationTimes; } function _getNodesRewardAvailable(address account) external view returns (string memory) { require(isNodeOwner(account), "GET REWARD: NO NODE OWNER"); NodeEntity[] memory nodes = _nodesOfUser[account]; uint256 nodesCount = nodes.length; NodeEntity memory _node; string memory _rewardsAvailable = uint2str(nodes[0].rewardAvailable.mul(nodes[0].rewardMult).mul(nodes[0].nodeValue).div(100000).div(1e18)); string memory separator = "#"; for (uint256 i = 1; i < nodesCount; i++) { _node = nodes[i]; uint256 _totalReward = _node.rewardAvailable.mul(_node.rewardMult).mul(_node.nodeValue).div(100000).div(1e18); _rewardsAvailable = string( abi.encodePacked( _rewardsAvailable, separator, uint2str(_totalReward) ) ); } return _rewardsAvailable; } function _getNodesLastClaimTime(address account) external view returns (string memory) { require(isNodeOwner(account), "LAST CLAIME TIME: NO NODE OWNER"); NodeEntity[] memory nodes = _nodesOfUser[account]; uint256 nodesCount = nodes.length; NodeEntity memory _node; string memory _lastClaimTimes = uint2str(nodes[0].lastClaimTime); string memory separator = "#"; for (uint256 i = 1; i < nodesCount; i++) { _node = nodes[i]; _lastClaimTimes = string( abi.encodePacked( _lastClaimTimes, separator, uint2str(_node.lastClaimTime) ) ); } return _lastClaimTimes; } function uint2str(uint256 _i) internal pure returns (string memory _uintAsString) { if (_i == 0) { return "0"; } uint256 j = _i; uint256 len; while (j != 0) { len++; j /= 10; } bytes memory bstr = new bytes(len); uint256 k = len; while (_i != 0) { k = k - 1; uint8 temp = (48 + uint8(_i - (_i / 10) * 10)); bytes1 b1 = bytes1(temp); bstr[k] = b1; _i /= 10; } return string(bstr); } function _changeNodeMinPrice(uint256 newNodeMinPrice) external onlySentry { nodeMinPrice = newNodeMinPrice; } function _changeRewardPerValue(uint256 newPrice) external onlySentry { rewardPerValue = newPrice; } function _changeClaimTime(uint256 newTime) external onlySentry { claimTime = newTime; } function _changeAutoDistri(bool newMode) external onlySentry { autoDistri = newMode; } function _changeTierSystem(uint256[] memory newTierLevel, uint256[] memory newTierSlope) external onlySentry { tierLevel = newTierLevel; tierSlope = newTierSlope; } function _changeGasDistri(uint256 newGasDistri) external onlySentry { gasForDistribution = newGasDistri; } function _getNodeNumberOf(address account) public view returns (uint256) { return nodeOwners.get(account); } function isNodeOwner(address account) private view returns (bool) { return nodeOwners.get(account) > 0; } function _isNodeOwner(address account) external view returns (bool) { return isNodeOwner(account); } function _distributeRewards() external onlySentry returns ( uint256, uint256, uint256 ) { return distributeRewards(gasForDistribution, rewardPerValue); } } pragma solidity ^0.8.0; contract LVT is ERC20, Ownable, PaymentSplitter { using SafeMath for uint256; NODERewardManagement public nodeRewardManager; IJoeRouter02 public uniswapV2Router; address public uniswapV2Pair; address public futurUsePool; address public distributionPool; address public devPool; address public deadWallet = 0x000000000000000000000000000000000000dEaD; uint256 public rewardsFee; uint256 public liquidityPoolFee; uint256 public futurFee; uint256 public totalFees; uint256 public cashoutFee; uint256 private rwSwap; uint256 private devShare; bool private swapping = false; bool private swapLiquify = true; uint256 public swapTokensAmount; bool private tradingOpen = false; uint256 private snipeBlockAmt; uint256 private _openTradingBlock = 0; uint256 private maxTx = 1; mapping(address => bool) public _isBlacklisted; mapping(address => bool) public automatedMarketMakerPairs; event UpdateUniswapV2Router( address indexed newAddress, address indexed oldAddress ); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event LiquidityWalletUpdated( address indexed newLiquidityWallet, address indexed oldLiquidityWallet ); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); constructor( address[] memory payees, uint256[] memory shares, address[] memory addresses, uint256[] memory balances, address uniV2Router, uint256 snipeBlkAmt ) ERC20("Louverture", "LVT") PaymentSplitter(payees, shares) { futurUsePool = addresses[4]; distributionPool = addresses[5]; devPool = addresses[6]; snipeBlockAmt = snipeBlkAmt; require(futurUsePool != address(0) && distributionPool != address(0) && devPool != address(0), "FUTUR, DEV & REWARD ADDRESS CANNOT BE ZERO"); require(uniV2Router != address(0), "ROUTER CANNOT BE ZERO"); IJoeRouter02 _uniswapV2Router = IJoeRouter02(uniV2Router); address _uniswapV2Pair = IJoeFactory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WAVAX()); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = _uniswapV2Pair; _setAutomatedMarketMakerPair(_uniswapV2Pair, true); futurFee = 20; rewardsFee = 70; liquidityPoolFee = 10; cashoutFee = 10; rwSwap = 20; devShare = 50; totalFees = rewardsFee.add(liquidityPoolFee).add(futurFee); require(addresses.length > 0 && balances.length > 0, "CONSTR: addresses array length must be greater than zero"); require(addresses.length == balances.length, "CONSTR: addresses arrays length mismatch"); for (uint256 i = 0; i < addresses.length; i++) { _mint(addresses[i], balances[i] * (10**18)); } require(totalSupply() == 1000000000e18, "CONSTR: totalSupply must equal 1 billion"); swapTokensAmount = 500 * (10**18); } function setNodeManagement(address nodeManagement) external onlyOwner { nodeRewardManager = NODERewardManagement(nodeManagement); } function updateUniswapV2Router(address newAddress) public onlyOwner { require(newAddress != address(uniswapV2Router), "TKN: The router already has that address"); emit UpdateUniswapV2Router(newAddress, address(uniswapV2Router)); uniswapV2Router = IJoeRouter02(newAddress); address _uniswapV2Pair = IJoeFactory(uniswapV2Router.factory()) .createPair(address(this), uniswapV2Router.WAVAX()); uniswapV2Pair = _uniswapV2Pair; } function updateSwapTokensAmount(uint256 newVal) external onlyOwner { swapTokensAmount = newVal; } function updateFuturWall(address payable wall) external onlyOwner { futurUsePool = wall; } function updateDevWall(address payable wall) external onlyOwner { devPool = wall; } function updateRewardsWall(address payable wall) external onlyOwner { distributionPool = wall; } function updateRewardsFee(uint256 value) external onlyOwner { rewardsFee = value; totalFees = rewardsFee.add(liquidityPoolFee).add(futurFee); } function updateLiquiditFee(uint256 value) external onlyOwner { liquidityPoolFee = value; totalFees = rewardsFee.add(liquidityPoolFee).add(futurFee); } function updateFuturFee(uint256 value) external onlyOwner { futurFee = value; totalFees = rewardsFee.add(liquidityPoolFee).add(futurFee); } function updateCashoutFee(uint256 value) external onlyOwner { cashoutFee = value; } function updateRwSwapFee(uint256 value) external onlyOwner { rwSwap = value; } function updateDevShare(uint256 value) external onlyOwner { devShare = value; } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require( pair != uniswapV2Pair, "TKN: The PancakeSwap pair cannot be removed from automatedMarketMakerPairs" ); _setAutomatedMarketMakerPair(pair, value); } function blacklistMalicious(address account, bool value) external onlyOwner { _isBlacklisted[account] = value; } function _setAutomatedMarketMakerPair(address pair, bool value) private { require( automatedMarketMakerPairs[pair] != value, "TKN: Automated market maker pair is already set to that value" ); automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function _transfer( address from, address to, uint256 amount ) internal override { require( !_isBlacklisted[from] && !_isBlacklisted[to], "Blacklisted address" ); require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if (from != owner() && to != uniswapV2Pair && to != address(uniswapV2Router) && to != address(this) && from != address(this)) { require(tradingOpen, "Trading not yet enabled."); // anti whale if (to != futurUsePool && to != distributionPool && to != devPool && from != futurUsePool && from != distributionPool && from != devPool) { uint256 totalSupply = totalSupply(); uint256 walletBalance = balanceOf(address(to)); require( amount.add(walletBalance) <= totalSupply.mul(maxTx).div(10000), "STOP TRYING TO BECOME A WHALE. WE KNOW WHO YOU ARE.") ; } } super._transfer(from, to, amount); } function swapAndSendToFee(address destination, uint256 tokens) private { uint256 initialETHBalance = address(this).balance; swapTokensForEth(tokens); uint256 newBalance = (address(this).balance).sub(initialETHBalance); payable(destination).transfer(newBalance); } function swapAndLiquify(uint256 tokens) private { uint256 half = tokens.div(2); uint256 otherHalf = tokens.sub(half); uint256 initialBalance = address(this).balance; swapTokensForEth(half); uint256 newBalance = address(this).balance.sub(initialBalance); addLiquidity(otherHalf, newBalance); emit SwapAndLiquify(half, newBalance, otherHalf); } function swapTokensForEth(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WAVAX(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForAVAXSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityAVAX{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable address(0), block.timestamp ); } function createNodeWithTokens(string memory name, uint256 _initValue) public { require( bytes(name).length > 3 && bytes(name).length < 32, "NODE CREATION: NAME SIZE INVALID" ); address sender = _msgSender(); require( sender != address(0), "NODE CREATION: creation from the zero address" ); require(!_isBlacklisted[sender], "NODE CREATION: Blacklisted address"); require( sender != futurUsePool && sender != distributionPool && sender != devPool, "NODE CREATION: futur, dev and rewardsPool cannot create node" ); uint256 nodeMinPrice = nodeRewardManager.nodeMinPrice(); uint256 nodePrice = _initValue; require( nodePrice >= nodeMinPrice, "NODE CREATION: Node Value set below nodeMinPrice" ); require( balanceOf(sender) >= nodePrice.mul(1e18), "NODE CREATION: Balance too low for creation. Use lower initValue" ); uint256 contractTokenBalance = balanceOf(address(this)); bool swapAmountOk = contractTokenBalance >= swapTokensAmount; if ( swapAmountOk && swapLiquify && !swapping && sender != owner() && !automatedMarketMakerPairs[sender] ) { swapping = true; uint256 fdTokens = contractTokenBalance.mul(futurFee).div(100); uint256 devTokens = fdTokens.mul(devShare).div(100); uint256 futurTokens = fdTokens.sub(devTokens); swapAndSendToFee(devPool, devTokens); swapAndSendToFee(futurUsePool, futurTokens); uint256 rewardsPoolTokens = contractTokenBalance .mul(rewardsFee) .div(100); uint256 rewardsTokenstoSwap = rewardsPoolTokens.mul(rwSwap).div( 100 ); swapAndSendToFee(distributionPool, rewardsTokenstoSwap); super._transfer( address(this), distributionPool, rewardsPoolTokens.sub(rewardsTokenstoSwap) ); uint256 swapTokens = contractTokenBalance.mul(liquidityPoolFee).div( 100 ); swapAndLiquify(swapTokens); swapTokensForEth(balanceOf(address(this))); swapping = false; } super._transfer(sender, address(this), nodePrice.mul(1e18)); nodeRewardManager.createNode(sender, name, _initValue.mul(1e18)); } function cashoutReward(uint256 blocktime) public { address sender = _msgSender(); require(sender != address(0), "CSHT: creation from the zero address"); require(!_isBlacklisted[sender], "MANIA CSHT: Blacklisted address"); require( sender != futurUsePool && sender != distributionPool, "CSHT: futur and rewardsPool cannot cashout rewards" ); uint256 rewardAmount = nodeRewardManager._getRewardAmountOf( sender, blocktime ); require( rewardAmount > 0, "CSHT: You don't have enough reward to cash out" ); if (swapLiquify) { uint256 feeAmount; if (cashoutFee > 0) { feeAmount = rewardAmount.mul(cashoutFee).div(100); swapAndSendToFee(futurUsePool, feeAmount); } rewardAmount -= feeAmount; } super._transfer(distributionPool, sender, rewardAmount); nodeRewardManager._cashoutNodeReward(sender, blocktime); } function cashoutAll() public { address sender = _msgSender(); require( sender != address(0), "MANIA CSHT: creation from the zero address" ); require(!_isBlacklisted[sender], "MANIA CSHT: Blacklisted address"); require( sender != futurUsePool && sender != distributionPool, "MANIA CSHT: futur and rewardsPool cannot cashout rewards" ); uint256 rewardAmount = nodeRewardManager._getRewardAmountOf(sender); require( rewardAmount > 0, "MANIA CSHT: You don't have enough reward to cash out" ); if (swapLiquify) { uint256 feeAmount; if (cashoutFee > 0) { feeAmount = rewardAmount.mul(cashoutFee).div(100); swapAndSendToFee(futurUsePool, feeAmount); } rewardAmount -= feeAmount; } super._transfer(distributionPool, sender, rewardAmount); nodeRewardManager._cashoutAllNodesReward(sender); } function addNodeValue(uint256 blocktime) public { address sender = _msgSender(); require(sender != address(0), "CSHT: creation from the zero address"); require(!_isBlacklisted[sender], "MANIA CSHT: Blacklisted address"); require( sender != futurUsePool && sender != distributionPool && sender != devPool, "CSHT: futur, dev and rewardsPool cannot compound nodes" ); uint256 rewardAmount = nodeRewardManager._getRewardAmountOf( sender, blocktime ); require( rewardAmount > 0, "CSHT: You don't have enough reward to compound your node" ); if (swapLiquify) { uint256 feeAmount; if (cashoutFee > 0) { feeAmount = rewardAmount.mul(cashoutFee).div(100); swapAndSendToFee(devPool, feeAmount); } rewardAmount -= feeAmount; } super._transfer(distributionPool, address(this), rewardAmount); nodeRewardManager._addNodeValue(sender, blocktime); } function addAllNodeValue() public { address sender = _msgSender(); require( sender != address(0), "MANIA CSHT: creation from the zero address" ); require(!_isBlacklisted[sender], "MANIA CSHT: Blacklisted address"); require( sender != futurUsePool && sender != distributionPool && sender != devPool, "MANIA CSHT: futur, dev and rewardsPool cannot cashout rewards" ); uint256 rewardAmount = nodeRewardManager._getRewardAmountOf(sender); require( rewardAmount > 0, "MANIA CSHT: You don't have enough reward to compound" ); if (swapLiquify) { uint256 feeAmount; if (cashoutFee > 0) { feeAmount = rewardAmount.mul(cashoutFee).div(100); swapAndSendToFee(devPool, feeAmount); } rewardAmount -= feeAmount; } super._transfer(distributionPool, address(this), rewardAmount); nodeRewardManager._addAllNodeValue(sender); } function getNodeMultiplier(uint256 blocktime) public view returns (uint256) { return nodeRewardManager._getRewardMultOf( _msgSender(), blocktime ); } function getNodeMultiplierOf(address account, uint256 blocktime) public view returns(uint256) { return nodeRewardManager._getRewardMultOf( account, blocktime ); } function getNodeValue(uint256 blocktime) public view returns (uint256) { return nodeRewardManager._getNodeValueOf( _msgSender(), blocktime ); } function getNodeValueOf(address account, uint256 blocktime) public view returns(uint256) { return nodeRewardManager._getNodeValueOf( account, blocktime ); } function getAllNodeValue() public view returns (uint256) { return nodeRewardManager._getNodeValueOf( _msgSender() ); } function getAllNodeValueOf(address account) public view returns (uint256) { return nodeRewardManager._getNodeValueOf( account ); } function boostReward(uint amount) public onlyOwner { if (amount > address(this).balance) amount = address(this).balance; payable(owner()).transfer(amount); } function changeSwapLiquify(bool newVal) public onlyOwner { swapLiquify = newVal; } function getNodeNumberOf(address account) public view returns (uint256) { return nodeRewardManager._getNodeNumberOf(account); } function getRewardAmountOf(address account) public view onlyOwner returns (uint256) { return nodeRewardManager._getRewardAmountOf(account); } function getRewardAmount() public view returns (uint256) { require(_msgSender() != address(0), "SENDER CAN'T BE ZERO"); require( nodeRewardManager._isNodeOwner(_msgSender()), "NO NODE OWNER" ); return nodeRewardManager._getRewardAmountOf(_msgSender()); } function changeNodeMinPrice(uint256 newNodeMinPrice) public onlyOwner { nodeRewardManager._changeNodeMinPrice(newNodeMinPrice); } function changeTierSystem(uint256[] memory newTierLevels, uint256[] memory newTierSlopes) public onlyOwner { require(newTierLevels.length == 6, "newTierLevels length has to be 6"); require(newTierSlopes.length == 6, "newTierSlopes length has to be 6"); nodeRewardManager._changeTierSystem(newTierLevels, newTierSlopes); } function getNodeMinPrice() public view returns (uint256) { return nodeRewardManager.nodeMinPrice(); } function changeRewardPerValue(uint256 newPrice) public onlyOwner { nodeRewardManager._changeRewardPerValue(newPrice); } function getRewardPerValue() public view returns (uint256) { return nodeRewardManager.rewardPerValue(); } function changeClaimTime(uint256 newTime) public onlyOwner { nodeRewardManager._changeClaimTime(newTime); } function getClaimTime() public view returns (uint256) { return nodeRewardManager.claimTime(); } function changeAutoDistri(bool newMode) public onlyOwner { nodeRewardManager._changeAutoDistri(newMode); } function getAutoDistri() public view returns (bool) { return nodeRewardManager.autoDistri(); } function changeGasDistri(uint256 newGasDistri) public onlyOwner { nodeRewardManager._changeGasDistri(newGasDistri); } function getGasDistri() public view returns (uint256) { return nodeRewardManager.gasForDistribution(); } function getDistriCount() public view returns (uint256) { return nodeRewardManager.lastDistributionCount(); } function getNodesNames() public view returns (string memory) { require(_msgSender() != address(0), "SENDER CAN'T BE ZERO"); require( nodeRewardManager._isNodeOwner(_msgSender()), "NO NODE OWNER" ); return nodeRewardManager._getNodesNames(_msgSender()); } function getNodesCreatime() public view returns (string memory) { require(_msgSender() != address(0), "SENDER CAN'T BE ZERO"); require( nodeRewardManager._isNodeOwner(_msgSender()), "NO NODE OWNER" ); return nodeRewardManager._getNodesCreationTime(_msgSender()); } function getNodesRewards() public view returns (string memory) { require(_msgSender() != address(0), "SENDER CAN'T BE ZERO"); require( nodeRewardManager._isNodeOwner(_msgSender()), "NO NODE OWNER" ); return nodeRewardManager._getNodesRewardAvailable(_msgSender()); } function getNodesLastClaims() public view returns (string memory) { require(_msgSender() != address(0), "SENDER CAN'T BE ZERO"); require( nodeRewardManager._isNodeOwner(_msgSender()), "NO NODE OWNER" ); return nodeRewardManager._getNodesLastClaimTime(_msgSender()); } function distributeRewards() public onlyOwner returns ( uint256, uint256, uint256 ) { return nodeRewardManager._distributeRewards(); } function publiDistriRewards() public { nodeRewardManager._distributeRewards(); } function getTotalStakedReward() public view returns (uint256) { return nodeRewardManager.totalRewardStaked(); } function getTotalCreatedNodes() public view returns (uint256) { return nodeRewardManager.totalNodesCreated(); } function openTrading() external onlyOwner() { require(!tradingOpen,"trading is already open"); tradingOpen = true; _openTradingBlock = block.number; } function updateMaxTxAmount(uint256 newVal) public onlyOwner { maxTx = newVal; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address[]","name":"payees","type":"address[]"},{"internalType":"uint256[]","name":"shares","type":"uint256[]"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"balances","type":"uint256[]"},{"internalType":"address","name":"uniV2Router","type":"address"},{"internalType":"uint256","name":"snipeBlkAmt","type":"uint256"}],"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":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ERC20PaymentReleased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newLiquidityWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldLiquidityWallet","type":"address"}],"name":"LiquidityWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"PayeeAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PaymentReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PaymentReleased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addAllNodeValue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocktime","type":"uint256"}],"name":"addNodeValue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"blacklistMalicious","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"boostReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cashoutAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cashoutFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocktime","type":"uint256"}],"name":"cashoutReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newMode","type":"bool"}],"name":"changeAutoDistri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTime","type":"uint256"}],"name":"changeClaimTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newGasDistri","type":"uint256"}],"name":"changeGasDistri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNodeMinPrice","type":"uint256"}],"name":"changeNodeMinPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"changeRewardPerValue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newVal","type":"bool"}],"name":"changeSwapLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"newTierLevels","type":"uint256[]"},{"internalType":"uint256[]","name":"newTierSlopes","type":"uint256[]"}],"name":"changeTierSystem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"_initValue","type":"uint256"}],"name":"createNodeWithTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributeRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distributionPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"futurFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"futurUsePool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllNodeValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAllNodeValueOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAutoDistri","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getClaimTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDistriCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGasDistri","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNodeMinPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocktime","type":"uint256"}],"name":"getNodeMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"blocktime","type":"uint256"}],"name":"getNodeMultiplierOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getNodeNumberOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocktime","type":"uint256"}],"name":"getNodeValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"blocktime","type":"uint256"}],"name":"getNodeValueOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNodesCreatime","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNodesLastClaims","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNodesNames","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNodesRewards","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getRewardAmountOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardPerValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalCreatedNodes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalStakedReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"liquidityPoolFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nodeRewardManager","outputs":[{"internalType":"contract NODERewardManagement","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"payee","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publiDistriRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"account","type":"address"}],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"released","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"released","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"nodeManagement","type":"address"}],"name":"setNodeManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"shares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"totalReleased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReleased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IJoeRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"updateCashoutFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"updateDevShare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"wall","type":"address"}],"name":"updateDevWall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"updateFuturFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"wall","type":"address"}],"name":"updateFuturWall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"updateLiquiditFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newVal","type":"uint256"}],"name":"updateMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"updateRewardsFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"wall","type":"address"}],"name":"updateRewardsWall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"updateRwSwapFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newVal","type":"uint256"}],"name":"updateSwapTokensAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateUniswapV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052601380546001600160a01b03191661dead179055601b805461ffff1916610100179055601d805460ff191690556000601f5560016020553480156200004857600080fd5b5060405162006bbb38038062006bbb8339810160408190526200006b9162000b78565b85856040518060400160405280600a8152602001694c6f757665727475726560b01b8152506040518060400160405280600381526020016213159560ea1b8152508160039080519060200190620000c4929190620009ba565b508051620000da906004906020840190620009ba565b5050506000620000ef620006c560201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080518251146200016a5760405162461bcd60e51b8152600401620001619062000ec8565b60405180910390fd5b60008251116200018e5760405162461bcd60e51b8152600401620001619062000f65565b60005b82518110156200021257620001fd838281518110620001c057634e487b7160e01b600052603260045260246000fd5b6020026020010151838381518110620001e957634e487b7160e01b600052603260045260246000fd5b6020026020010151620006c960201b60201c565b806200020981620010df565b91505062000191565b505050836004815181106200023757634e487b7160e01b600052603260045260246000fd5b6020026020010151601060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550836005815181106200028757634e487b7160e01b600052603260045260246000fd5b6020026020010151601160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555083600681518110620002d757634e487b7160e01b600052603260045260246000fd5b6020908102919091010151601280546001600160a01b0319166001600160a01b03928316179055601e82905560105416158015906200032057506011546001600160a01b031615155b80156200033757506012546001600160a01b031615155b620003565760405162461bcd60e51b8152600401620001619062000da2565b6001600160a01b0382166200037f5760405162461bcd60e51b8152600401620001619062000dec565b60008290506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620003c057600080fd5b505afa158015620003d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003fb919062000b5b565b6001600160a01b031663c9c6539630846001600160a01b03166373b295c26040518163ffffffff1660e01b815260040160206040518083038186803b1580156200044457600080fd5b505afa15801562000459573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200047f919062000b5b565b6040518363ffffffff1660e01b81526004016200049e92919062000c47565b602060405180830381600087803b158015620004b957600080fd5b505af1158015620004ce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004f4919062000b5b565b600e80546001600160a01b038086166001600160a01b031992831617909255600f805492841692909116919091179055905062000533816001620007fb565b601460168190556046808255600a6015819055601881905560198390556032601a55620005869291620005729162000891602090811b62003b0e17901c565b6200089160201b62003b0e1790919060201c565b6017558551158015906200059b575060008551115b620005ba5760405162461bcd60e51b8152600401620001619062000cc6565b8451865114620005de5760405162461bcd60e51b8152600401620001619062000e80565b60005b865181101562000671576200065c8782815181106200061057634e487b7160e01b600052603260045260246000fd5b60200260200101518783815181106200063957634e487b7160e01b600052603260045260246000fd5b6020026020010151670de0b6b3a764000062000656919062001080565b620008cc565b806200066881620010df565b915050620005e1565b506200067c620009af565b6b033b2e3c9fd0803ce800000014620006a95760405162461bcd60e51b8152600401620001619062000d23565b5050681b1ae4d6e2ef500000601c555062001129945050505050565b3390565b6001600160a01b038216620006f25760405162461bcd60e51b8152600401620001619062000c7a565b60008111620007155760405162461bcd60e51b8152600401620001619062000f9c565b6001600160a01b038216600090815260086020526040902054156200074e5760405162461bcd60e51b8152600401620001619062000f1a565b600a8054600181019091557fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319166001600160a01b0384169081179091556000908152600860205260409020819055600654620007b890829062001065565b6006556040517f40c340f65e17194d14ddddb073d3c9f888e3cb52b5aae0c6c7706b4fbc905fac90620007ef908490849062000c61565b60405180910390a15050565b6001600160a01b03821660009081526022602052604090205460ff16151581151514156200083d5760405162461bcd60e51b8152600401620001619062000e23565b6001600160a01b038216600081815260226020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b600080620008a0838562001065565b905083811015620008c55760405162461bcd60e51b8152600401620001619062000d6b565b9392505050565b6001600160a01b038216620008f55760405162461bcd60e51b8152600401620001619062000fd3565b6200090360008383620009b5565b6200091f816002546200089160201b62003b0e1790919060201c565b6002556001600160a01b038216600090815260208181526040909120546200095291839062003b0e62000891821b17901c565b6001600160a01b0383166000818152602081905260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90620009a39085906200100a565b60405180910390a35050565b60025490565b505050565b828054620009c890620010a2565b90600052602060002090601f016020900481019282620009ec576000855562000a37565b82601f1062000a0757805160ff191683800117855562000a37565b8280016001018555821562000a37579182015b8281111562000a3757825182559160200191906001019062000a1a565b5062000a4592915062000a49565b5090565b5b8082111562000a45576000815560010162000a4a565b80516001600160a01b038116811462000a7857600080fd5b919050565b600082601f83011262000a8e578081fd5b8151602062000aa762000aa1836200103f565b62001013565b828152818101908583018385028701840188101562000ac4578586fd5b855b8581101562000aed5762000ada8262000a60565b8452928401929084019060010162000ac6565b5090979650505050505050565b600082601f83011262000b0b578081fd5b8151602062000b1e62000aa1836200103f565b828152818101908583018385028701840188101562000b3b578586fd5b855b8581101562000aed5781518452928401929084019060010162000b3d565b60006020828403121562000b6d578081fd5b620008c58262000a60565b60008060008060008060c0878903121562000b91578182fd5b86516001600160401b038082111562000ba8578384fd5b62000bb68a838b0162000a7d565b9750602089015191508082111562000bcc578384fd5b62000bda8a838b0162000afa565b9650604089015191508082111562000bf0578384fd5b62000bfe8a838b0162000a7d565b9550606089015191508082111562000c14578384fd5b5062000c2389828a0162000afa565b93505062000c346080880162000a60565b915060a087015190509295509295509295565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b6020808252602c908201527f5061796d656e7453706c69747465723a206163636f756e74206973207468652060408201526b7a65726f206164647265737360a01b606082015260800190565b60208082526038908201527f434f4e5354523a20616464726573736573206172726179206c656e677468206d60408201527f7573742062652067726561746572207468616e207a65726f0000000000000000606082015260800190565b60208082526028908201527f434f4e5354523a20746f74616c537570706c79206d75737420657175616c2031604082015267103134b63634b7b760c11b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252602a908201527f46555455522c2044455620262052455741524420414444524553532043414e4e6040820152694f54204245205a45524f60b01b606082015260800190565b60208082526015908201527f524f555445522043414e4e4f54204245205a45524f0000000000000000000000604082015260600190565b6020808252603d908201527f544b4e3a204175746f6d61746564206d61726b6574206d616b6572207061697260408201527f20697320616c72656164792073657420746f20746861742076616c7565000000606082015260800190565b60208082526028908201527f434f4e5354523a2061646472657373657320617272617973206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526032908201527f5061796d656e7453706c69747465723a2070617965657320616e6420736861726040820152710cae640d8cadccee8d040dad2e6dac2e8c6d60731b606082015260800190565b6020808252602b908201527f5061796d656e7453706c69747465723a206163636f756e7420616c726561647960408201526a206861732073686172657360a81b606082015260800190565b6020808252601a908201527f5061796d656e7453706c69747465723a206e6f20706179656573000000000000604082015260600190565b6020808252601d908201527f5061796d656e7453706c69747465723a20736861726573206172652030000000604082015260600190565b6020808252601f908201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b90815260200190565b6040518181016001600160401b038111828210171562001037576200103762001113565b604052919050565b60006001600160401b038211156200105b576200105b62001113565b5060209081020190565b600082198211156200107b576200107b620010fd565b500190565b60008160001904831182151516156200109d576200109d620010fd565b500290565b600281046001821680620010b757607f821691505b60208210811415620010d957634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415620010f657620010f6620010fd565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b615a8280620011396000396000f3fe6080604052600436106105855760003560e01c80638689af84116102d1578063bdf24a531161018a578063dd62ed3e116100ec578063f7791bcf11610095578063fa41f64b1161006f578063fa41f64b14610f54578063fb0a749414610f74578063fdaaadf714610f94576105cc565b8063f7791bcf14610f0a578063f7b9f94314610f2a578063f9afc76314610f3f576105cc565b8063f2fde38b116100c6578063f2fde38b14610eb5578063f5a0725614610ed5578063f74c993414610eea576105cc565b8063dd62ed3e14610e6b578063e33b7de314610e8b578063ee1afdbf14610ea0576105cc565b8063d0f774741161014e578063d79779b211610128578063d79779b214610e16578063d892934214610e36578063da41b33314610e56576105cc565b8063d0f7747414610dcc578063d19dd86214610dec578063d766636b14610e01576105cc565b8063bdf24a5314610d4d578063c5ca7d6d14610d62578063c9567bf914610d77578063ce7c2ac214610d8c578063cf04520c14610dac576105cc565b8063a0a8fe6511610233578063ab574761116101f7578063b62496f5116101d1578063b62496f514610ced578063b96392c114610d0d578063bbc6799814610d2d576105cc565b8063ab57476114610ca3578063af15318214610cb8578063b5838a2714610cd8576105cc565b8063a0a8fe6514610c19578063a457c2d714610c2e578063a538ddf214610c4e578063a9059cbb14610c63578063a9e2374b14610c83576105cc565b80638da5cb5b116102955780639852595c1161026f5780639852595c14610bb95780639a7a23d614610bd95780639c82751c14610bf9576105cc565b80638da5cb5b14610b6f5780639349c47d14610b8457806395d89b4114610ba4576105cc565b80638689af8414610ae55780638743ef6d14610afa57806388c41d7c14610b0f5780638b83209b14610b2f5780638bc9c7b014610b4f576105cc565b8063545579731161043e5780636815a91c116103a05780637398437d116103495780638005f735116103235780638005f73514610a90578063846b8d6314610ab057806385141a7714610ad0576105cc565b80637398437d14610a3b5780637628b3d714610a5b57806377d57c3314610a70576105cc565b80636f4a2cd01161037a5780636f4a2cd0146109e257806370a0823114610a06578063715018a614610a26576105cc565b80636815a91c1461098d5780636ba550a0146109ad5780636d9ae0be146109cd576105cc565b80635b0d46741161040257806365b8dbc0116103dc57806365b8dbc01461092d57806365bfe4301461094d5780636770474b1461096d576105cc565b80635b0d4674146108e35780635f1c3182146108f85780636256d1811461090d576105cc565b8063545579731461086457806354f12f1f14610879578063576ffa031461088e578063583bd7a6146108a357806359640ed9146108c3576105cc565b806323b872dd116104e7578063406072a9116104ab57806348b750441161048557806348b750441461081a57806348e5642b1461083a57806349bd5a5e1461084f576105cc565b8063406072a9146107ba5780634195fbf3146107da57806342bc9fca146107fa576105cc565b806323b872dd1461072e5780632bb14e1d1461074e578063313ce5671461076357806339509351146107855780633a98ef39146107a5576105cc565b806313114a9d1161054957806318160ddd1161052357806318160ddd146106d957806319165587146106ee5780631cdd3be31461070e576105cc565b806313114a9d1461068d578063138a634a146106a25780631694505e146106b7576105cc565b806306fdde03146105d1578063084a6bff146105fc578063095ea7b31461061e57806309a69f571461064b5780630c08f3001461066d576105cc565b366105cc577f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be7706105b3610fb4565b346040516105c2929190614abf565b60405180910390a1005b600080fd5b3480156105dd57600080fd5b506105e6610fb8565b6040516105f39190614b8f565b60405180910390f35b34801561060857600080fd5b5061061c6106173660046149c9565b61104a565b005b34801561062a57600080fd5b5061063e61063936600461481a565b6110af565b6040516105f39190614b84565b34801561065757600080fd5b506106606110cd565b6040516105f391906157c3565b34801561067957600080fd5b5061061c61068836600461473d565b61122a565b34801561069957600080fd5b50610660611281565b3480156106ae57600080fd5b506105e6611287565b3480156106c357600080fd5b506106cc6113e4565b6040516105f39190614aab565b3480156106e557600080fd5b506106606113f3565b3480156106fa57600080fd5b5061061c61070936600461473d565b6113f9565b34801561071a57600080fd5b5061063e61072936600461473d565b611507565b34801561073a57600080fd5b5061063e6107493660046147ad565b61151c565b34801561075a57600080fd5b506106606115a4565b34801561076f57600080fd5b506107786115aa565b6040516105f39190615852565b34801561079157600080fd5b5061063e6107a036600461481a565b6115af565b3480156107b157600080fd5b506106606115fd565b3480156107c657600080fd5b506106606107d5366004614775565b611603565b3480156107e657600080fd5b5061061c6107f53660046149c9565b61162e565b34801561080657600080fd5b5061061c6108153660046149c9565b6116b2565b34801561082657600080fd5b5061061c610835366004614775565b611701565b34801561084657600080fd5b506106606118b7565b34801561085b57600080fd5b506106cc6118fc565b34801561087057600080fd5b5061061c61190b565b34801561088557600080fd5b50610660611b61565b34801561089a57600080fd5b5061061c611b67565b3480156108af57600080fd5b5061061c6108be3660046148a6565b611d7a565b3480156108cf57600080fd5b5061061c6108de3660046149c9565b611dc9565b3480156108ef57600080fd5b506105e6611e63565b34801561090457600080fd5b50610660611f50565b34801561091957600080fd5b5061061c6109283660046149c9565b611f56565b34801561093957600080fd5b5061061c61094836600461473d565b611f90565b34801561095957600080fd5b5061061c6109683660046149c9565b6121ec565b34801561097957600080fd5b5061061c6109883660046149c9565b612441565b34801561099957600080fd5b5061061c6109a83660046149c9565b61247b565b3480156109b957600080fd5b506106606109c836600461481a565b6124b5565b3480156109d957600080fd5b50610660612538565b3480156109ee57600080fd5b506109f761253e565b6040516105f39392919061583c565b348015610a1257600080fd5b50610660610a2136600461473d565b61260b565b348015610a3257600080fd5b5061061c612626565b348015610a4757600080fd5b50610660610a563660046149c9565b6126a5565b348015610a6757600080fd5b506106cc61272f565b348015610a7c57600080fd5b5061061c610a8b3660046149c9565b61273e565b348015610a9c57600080fd5b5061061c610aab3660046149c9565b6127a3565b348015610abc57600080fd5b5061061c610acb366004614845565b612808565b348015610adc57600080fd5b506106cc6128e7565b348015610af157600080fd5b506106606128f6565b348015610b0657600080fd5b5061061c61293b565b348015610b1b57600080fd5b5061061c610b2a3660046149c9565b6129c3565b348015610b3b57600080fd5b506106cc610b4a3660046149c9565b612a12565b348015610b5b57600080fd5b5061061c610b6a3660046149c9565b612a50565b348015610b7b57600080fd5b506106cc612a8a565b348015610b9057600080fd5b5061061c610b9f36600461473d565b612a99565b348015610bb057600080fd5b506105e6612af0565b348015610bc557600080fd5b50610660610bd436600461473d565b612aff565b348015610be557600080fd5b5061061c610bf43660046147ed565b612b1a565b348015610c0557600080fd5b5061061c610c143660046149c9565b612b87565b348015610c2557600080fd5b50610660612bec565b348015610c3a57600080fd5b5061063e610c4936600461481a565b612c31565b348015610c5a57600080fd5b506106cc612c99565b348015610c6f57600080fd5b5061063e610c7e36600461481a565b612ca8565b348015610c8f57600080fd5b50610660610c9e36600461473d565b612cbc565b348015610caf57600080fd5b50610660612ced565b348015610cc457600080fd5b5061061c610cd336600461473d565b612cf3565b348015610ce457600080fd5b506106cc612d4a565b348015610cf957600080fd5b5061063e610d0836600461473d565b612d59565b348015610d1957600080fd5b50610660610d2836600461473d565b612d6e565b348015610d3957600080fd5b5061061c610d4836600461494d565b612dd5565b348015610d5957600080fd5b506105e6613202565b348015610d6e57600080fd5b506106cc6132ef565b348015610d8357600080fd5b5061061c6132fe565b348015610d9857600080fd5b50610660610da736600461473d565b613369565b348015610db857600080fd5b5061061c610dc73660046149c9565b613384565b348015610dd857600080fd5b5061061c610de73660046148a6565b6133be565b348015610df857600080fd5b50610660613423565b348015610e0d57600080fd5b50610660613468565b348015610e2257600080fd5b50610660610e3136600461473d565b613484565b348015610e4257600080fd5b5061061c610e513660046147ed565b61349f565b348015610e6257600080fd5b506106606134ff565b348015610e7757600080fd5b50610660610e86366004614775565b613544565b348015610e9757600080fd5b5061066061356f565b348015610eac57600080fd5b506105e6613575565b348015610ec157600080fd5b5061061c610ed036600461473d565b613662565b348015610ee157600080fd5b50610660613719565b348015610ef657600080fd5b50610660610f0536600461473d565b61375e565b348015610f1657600080fd5b50610660610f253660046149c9565b61378f565b348015610f3657600080fd5b506106606137ab565b348015610f4b57600080fd5b5061063e6137f0565b348015610f6057600080fd5b50610660610f6f36600461481a565b61386d565b348015610f8057600080fd5b5061061c610f8f36600461473d565b6138a0565b348015610fa057600080fd5b5061061c610faf3660046149c9565b6138f7565b3390565b606060038054610fc79061594c565b80601f0160208091040260200160405190810160405280929190818152602001828054610ff39061594c565b80156110405780601f1061101557610100808354040283529160200191611040565b820191906000526020600020905b81548152906001019060200180831161102357829003601f168201915b5050505050905090565b611052610fb4565b6005546001600160a01b039081169116146110885760405162461bcd60e51b815260040161107f90615421565b60405180910390fd5b60148190556016546015546110a991906110a3908490613b0e565b90613b0e565b60175550565b60006110c36110bc610fb4565b8484613b3d565b5060015b92915050565b6000806110d8610fb4565b6001600160a01b031614156110ff5760405162461bcd60e51b815260040161107f90614e91565b600d546001600160a01b03166341ac82b0611118610fb4565b6040518263ffffffff1660e01b81526004016111349190614aab565b60206040518083038186803b15801561114c57600080fd5b505afa158015611160573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118491906148c2565b6111a05760405162461bcd60e51b815260040161107f90614c77565b600d546001600160a01b031663619a635e6111b9610fb4565b6040518263ffffffff1660e01b81526004016111d59190614aab565b60206040518083038186803b1580156111ed57600080fd5b505afa158015611201573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122591906149e1565b905090565b611232610fb4565b6005546001600160a01b0390811691161461125f5760405162461bcd60e51b815260040161107f90615421565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b60175481565b60606000611293610fb4565b6001600160a01b031614156112ba5760405162461bcd60e51b815260040161107f90614e91565b600d546001600160a01b03166341ac82b06112d3610fb4565b6040518263ffffffff1660e01b81526004016112ef9190614aab565b60206040518083038186803b15801561130757600080fd5b505afa15801561131b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061133f91906148c2565b61135b5760405162461bcd60e51b815260040161107f90614c77565b600d546001600160a01b031663334de3a2611374610fb4565b6040518263ffffffff1660e01b81526004016113909190614aab565b60006040518083038186803b1580156113a857600080fd5b505afa1580156113bc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261122591908101906148de565b600e546001600160a01b031681565b60025490565b6001600160a01b03811660009081526008602052604090205461142e5760405162461bcd60e51b815260040161107f90614ec8565b600061143861356f565b61144290476158b2565b90506000611459838361145486612aff565b613bf1565b9050806114785760405162461bcd60e51b815260040161107f90614fff565b6001600160a01b038316600090815260096020526040812080548392906114a09084906158b2565b9250508190555080600760008282546114b991906158b2565b909155506114c990508382613c37565b7fdf20fd1e76bc69d672e4814fafb2c449bba3a5369d8359adf9e05e6fde87b05683826040516114fa929190614abf565b60405180910390a1505050565b60216020526000908152604090205460ff1681565b6000611529848484613cd3565b61159984611535610fb4565b61159485604051806060016040528060288152602001615a00602891396001600160a01b038a16600090815260016020526040812090611573610fb4565b6001600160a01b031681526020810191909152604001600020549190613f22565b613b3d565b5060015b9392505050565b60145481565b601290565b60006110c36115bc610fb4565b8461159485600160006115cd610fb4565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490613b0e565b60065490565b6001600160a01b039182166000908152600c6020908152604080832093909416825291909152205490565b611636610fb4565b6005546001600160a01b039081169116146116635760405162461bcd60e51b815260040161107f90615421565b4781111561166e5750475b611676612a8a565b6001600160a01b03166108fc829081150290604051600060405180830381858888f193505050501580156116ae573d6000803e3d6000fd5b5050565b6116ba610fb4565b6005546001600160a01b039081169116146116e75760405162461bcd60e51b815260040161107f90615421565b60158190556016546014546110a991906110a39084613b0e565b6001600160a01b0381166000908152600860205260409020546117365760405162461bcd60e51b815260040161107f90614ec8565b600061174183613484565b6040516370a0823160e01b81526001600160a01b038516906370a082319061176d903090600401614aab565b60206040518083038186803b15801561178557600080fd5b505afa158015611799573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bd91906149e1565b6117c791906158b2565b905060006117da83836114548787611603565b9050806117f95760405162461bcd60e51b815260040161107f90614fff565b6001600160a01b038085166000908152600c60209081526040808320938716835292905290812080548392906118309084906158b2565b90915550506001600160a01b0384166000908152600b60205260408120805483929061185d9084906158b2565b9091555061186e9050848483613f5c565b836001600160a01b03167f3be5b7a71e84ed12875d241991c70855ac5817d847039e17a9d895c1ceb0f18a84836040516118a9929190614abf565b60405180910390a250505050565b600d54604080516345193f5560e11b815290516000926001600160a01b031691638a327eaa916004808301926020929190829003018186803b1580156111ed57600080fd5b600f546001600160a01b031681565b6000611915610fb4565b90506001600160a01b03811661193d5760405162461bcd60e51b815260040161107f906156e4565b6001600160a01b03811660009081526021602052604090205460ff16156119765760405162461bcd60e51b815260040161107f9061504a565b6010546001600160a01b038281169116148015906119a257506011546001600160a01b03828116911614155b6119be5760405162461bcd60e51b815260040161107f906152c9565b600d546040516330cd31af60e11b81526000916001600160a01b03169063619a635e906119ef908590600401614aab565b60206040518083038186803b158015611a0757600080fd5b505afa158015611a1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3f91906149e1565b905060008111611a615760405162461bcd60e51b815260040161107f90615766565b601b54610100900460ff1615611ac35760185460009015611ab557611a9c6064611a9660185485613fdf90919063ffffffff16565b90614024565b601054909150611ab5906001600160a01b031682614066565b611abf8183615909565b9150505b601154611ada906001600160a01b031683836140b5565b600d5460405163170a62c760e21b81526001600160a01b0390911690635c298b1c90611b0a908590600401614aab565b602060405180830381600087803b158015611b2457600080fd5b505af1158015611b38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5c91906149e1565b505050565b60155481565b6000611b71610fb4565b90506001600160a01b038116611b995760405162461bcd60e51b815260040161107f906156e4565b6001600160a01b03811660009081526021602052604090205460ff1615611bd25760405162461bcd60e51b815260040161107f9061504a565b6010546001600160a01b03828116911614801590611bfe57506011546001600160a01b03828116911614155b8015611c1857506012546001600160a01b03828116911614155b611c345760405162461bcd60e51b815260040161107f90614e34565b600d546040516330cd31af60e11b81526000916001600160a01b03169063619a635e90611c65908590600401614aab565b60206040518083038186803b158015611c7d57600080fd5b505afa158015611c91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb591906149e1565b905060008111611cd75760405162461bcd60e51b815260040161107f9061526c565b601b54610100900460ff1615611d335760185460009015611d2557611d0c6064611a9660185485613fdf90919063ffffffff16565b601254909150611d25906001600160a01b031682614066565b611d2f8183615909565b9150505b601154611d4a906001600160a01b031630836140b5565b600d5460405163abf0797f60e01b81526001600160a01b039091169063abf0797f90611b0a908590600401614aab565b611d82610fb4565b6005546001600160a01b03908116911614611daf5760405162461bcd60e51b815260040161107f90615421565b601b80549115156101000261ff0019909216919091179055565b611dd1610fb4565b6005546001600160a01b03908116911614611dfe5760405162461bcd60e51b815260040161107f90615421565b600d54604051631df3773160e31b81526001600160a01b039091169063ef9bb98890611e2e9084906004016157c3565b600060405180830381600087803b158015611e4857600080fd5b505af1158015611e5c573d6000803e3d6000fd5b5050505050565b60606000611e6f610fb4565b6001600160a01b03161415611e965760405162461bcd60e51b815260040161107f90614e91565b600d546001600160a01b03166341ac82b0611eaf610fb4565b6040518263ffffffff1660e01b8152600401611ecb9190614aab565b60206040518083038186803b158015611ee357600080fd5b505afa158015611ef7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1b91906148c2565b611f375760405162461bcd60e51b815260040161107f90614c77565b600d546001600160a01b0316634a389fae611374610fb4565b601c5481565b611f5e610fb4565b6005546001600160a01b03908116911614611f8b5760405162461bcd60e51b815260040161107f90615421565b602055565b611f98610fb4565b6005546001600160a01b03908116911614611fc55760405162461bcd60e51b815260040161107f90615421565b600e546001600160a01b0382811691161415611ff35760405162461bcd60e51b815260040161107f90615081565b600e546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3600e80546001600160a01b0319166001600160a01b0383811691909117918290556040805163c45a015560e01b815290516000939092169163c45a015591600480820192602092909190829003018186803b15801561208c57600080fd5b505afa1580156120a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c49190614759565b6001600160a01b031663c9c6539630600e60009054906101000a90046001600160a01b03166001600160a01b03166373b295c26040518163ffffffff1660e01b815260040160206040518083038186803b15801561212157600080fd5b505afa158015612135573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121599190614759565b6040518363ffffffff1660e01b8152600401612176929190614ad8565b602060405180830381600087803b15801561219057600080fd5b505af11580156121a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121c89190614759565b600f80546001600160a01b0319166001600160a01b03929092169190911790555050565b60006121f6610fb4565b90506001600160a01b03811661221e5760405162461bcd60e51b815260040161107f90614def565b6001600160a01b03811660009081526021602052604090205460ff16156122575760405162461bcd60e51b815260040161107f9061504a565b6010546001600160a01b0382811691161480159061228357506011546001600160a01b03828116911614155b61229f5760405162461bcd60e51b815260040161107f90614ba2565b600d546040516329b8573160e21b81526000916001600160a01b03169063a6e15cc4906122d29085908790600401614abf565b60206040518083038186803b1580156122ea57600080fd5b505afa1580156122fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061232291906149e1565b9050600081116123445760405162461bcd60e51b815260040161107f90614f6b565b601b54610100900460ff16156123a05760185460009015612392576123796064611a9660185485613fdf90919063ffffffff16565b601054909150612392906001600160a01b031682614066565b61239c8183615909565b9150505b6011546123b7906001600160a01b031683836140b5565b600d5460405163376db80160e11b81526001600160a01b0390911690636edb7002906123e99085908790600401614abf565b602060405180830381600087803b15801561240357600080fd5b505af1158015612417573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243b91906149e1565b50505050565b612449610fb4565b6005546001600160a01b039081169116146124765760405162461bcd60e51b815260040161107f90615421565b601c55565b612483610fb4565b6005546001600160a01b039081169116146124b05760405162461bcd60e51b815260040161107f90615421565b601855565b600d54604051637ce4f85f60e01b81526000916001600160a01b031690637ce4f85f906124e89086908690600401614abf565b60206040518083038186803b15801561250057600080fd5b505afa158015612514573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159d91906149e1565b60185481565b600080600061254b610fb4565b6005546001600160a01b039081169116146125785760405162461bcd60e51b815260040161107f90615421565b600d60009054906101000a90046001600160a01b03166001600160a01b03166388fe65536040518163ffffffff1660e01b8152600401606060405180830381600087803b1580156125c857600080fd5b505af11580156125dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260091906149f9565b925092509250909192565b6001600160a01b031660009081526020819052604090205490565b61262e610fb4565b6005546001600160a01b0390811691161461265b5760405162461bcd60e51b815260040161107f90615421565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b600d546000906001600160a01b0316637ce4f85f6126c1610fb4565b846040518363ffffffff1660e01b81526004016126df929190614abf565b60206040518083038186803b1580156126f757600080fd5b505afa15801561270b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c791906149e1565b600d546001600160a01b031681565b612746610fb4565b6005546001600160a01b039081169116146127735760405162461bcd60e51b815260040161107f90615421565b600d54604051633895bd8760e21b81526001600160a01b039091169063e256f61c90611e2e9084906004016157c3565b6127ab610fb4565b6005546001600160a01b039081169116146127d85760405162461bcd60e51b815260040161107f90615421565b600d5460405163174c300760e01b81526001600160a01b039091169063174c300790611e2e9084906004016157c3565b612810610fb4565b6005546001600160a01b0390811691161461283d5760405162461bcd60e51b815260040161107f90615421565b815160061461285e5760405162461bcd60e51b815260040161107f90614c42565b805160061461287f5760405162461bcd60e51b815260040161107f90615456565b600d546040516357829c6160e01b81526001600160a01b03909116906357829c61906128b19085908590600401614b5f565b600060405180830381600087803b1580156128cb57600080fd5b505af11580156128df573d6000803e3d6000fd5b505050505050565b6013546001600160a01b031681565b600d546040805163728f0b4b60e01b815290516000926001600160a01b03169163728f0b4b916004808301926020929190829003018186803b1580156111ed57600080fd5b600d60009054906101000a90046001600160a01b03166001600160a01b03166388fe65536040518163ffffffff1660e01b8152600401606060405180830381600087803b15801561298b57600080fd5b505af115801561299f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5c91906149f9565b6129cb610fb4565b6005546001600160a01b039081169116146129f85760405162461bcd60e51b815260040161107f90615421565b60168190556015546014546110a99183916110a391613b0e565b6000600a8281548110612a3557634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031692915050565b612a58610fb4565b6005546001600160a01b03908116911614612a855760405162461bcd60e51b815260040161107f90615421565b601955565b6005546001600160a01b031690565b612aa1610fb4565b6005546001600160a01b03908116911614612ace5760405162461bcd60e51b815260040161107f90615421565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b606060048054610fc79061594c565b6001600160a01b031660009081526009602052604090205490565b612b22610fb4565b6005546001600160a01b03908116911614612b4f5760405162461bcd60e51b815260040161107f90615421565b600f546001600160a01b0383811691161415612b7d5760405162461bcd60e51b815260040161107f906151ba565b6116ae82826141ca565b612b8f610fb4565b6005546001600160a01b03908116911614612bbc5760405162461bcd60e51b815260040161107f90615421565b600d5460405163d1871a8960e01b81526001600160a01b039091169063d1871a8990611e2e9084906004016157c3565b600d546040805163b8527aef60e01b815290516000926001600160a01b03169163b8527aef916004808301926020929190829003018186803b1580156111ed57600080fd5b60006110c3612c3e610fb4565b8461159485604051806060016040528060258152602001615a286025913960016000612c68610fb4565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190613f22565b6010546001600160a01b031681565b60006110c3612cb5610fb4565b8484613cd3565b600d546040516307b4ec2d60e51b81526000916001600160a01b03169063f69d85a0906126df908590600401614aab565b60165481565b612cfb610fb4565b6005546001600160a01b03908116911614612d285760405162461bcd60e51b815260040161107f90615421565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b6012546001600160a01b031681565b60226020526000908152604090205460ff1681565b6000612d78610fb4565b6005546001600160a01b03908116911614612da55760405162461bcd60e51b815260040161107f90615421565b600d546040516330cd31af60e11b81526001600160a01b039091169063619a635e906126df908590600401614aab565b60038251118015612de7575060208251105b612e035760405162461bcd60e51b815260040161107f90614c9e565b6000612e0d610fb4565b90506001600160a01b038116612e355760405162461bcd60e51b815260040161107f90615326565b6001600160a01b03811660009081526021602052604090205460ff1615612e6e5760405162461bcd60e51b815260040161107f9061522a565b6010546001600160a01b03828116911614801590612e9a57506011546001600160a01b03828116911614155b8015612eb457506012546001600160a01b03828116911614155b612ed05760405162461bcd60e51b815260040161107f90614d5b565b600d546040805163943ab26160e01b815290516000926001600160a01b03169163943ab261916004808301926020929190829003018186803b158015612f1557600080fd5b505afa158015612f29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4d91906149e1565b90508281811015612f705760405162461bcd60e51b815260040161107f906150c9565b612f8281670de0b6b3a7640000613fdf565b612f8b8461260b565b1015612fa95760405162461bcd60e51b815260040161107f9061563c565b6000612fb43061260b565b601c5490915081108015908190612fd25750601b54610100900460ff165b8015612fe15750601b5460ff16155b80156130065750612ff0612a8a565b6001600160a01b0316856001600160a01b031614155b801561302b57506001600160a01b03851660009081526022602052604090205460ff16155b1561316d57601b805460ff1916600117905560165460009061305590606490611a96908690613fdf565b905060006130736064611a96601a5485613fdf90919063ffffffff16565b90506000613081838361425d565b60125490915061309a906001600160a01b031683614066565b6010546130b0906001600160a01b031682614066565b60006130cc6064611a9660145489613fdf90919063ffffffff16565b905060006130ea6064611a9660195485613fdf90919063ffffffff16565b601154909150613103906001600160a01b031682614066565b6011546131249030906001600160a01b031661311f858561425d565b6140b5565b60006131406064611a966015548b613fdf90919063ffffffff16565b905061314b8161429f565b61315c6131573061260b565b614320565b5050601b805460ff19169055505050505b613184853061311f86670de0b6b3a7640000613fdf565b600d546001600160a01b0316639021973286896131a98a670de0b6b3a7640000613fdf565b6040518463ffffffff1660e01b81526004016131c793929190614af2565b600060405180830381600087803b1580156131e157600080fd5b505af11580156131f5573d6000803e3d6000fd5b5050505050505050505050565b6060600061320e610fb4565b6001600160a01b031614156132355760405162461bcd60e51b815260040161107f90614e91565b600d546001600160a01b03166341ac82b061324e610fb4565b6040518263ffffffff1660e01b815260040161326a9190614aab565b60206040518083038186803b15801561328257600080fd5b505afa158015613296573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132ba91906148c2565b6132d65760405162461bcd60e51b815260040161107f90614c77565b600d546001600160a01b031663c92819ce611374610fb4565b6011546001600160a01b031681565b613306610fb4565b6005546001600160a01b039081169116146133335760405162461bcd60e51b815260040161107f90615421565b601d5460ff16156133565760405162461bcd60e51b815260040161107f90615605565b601d805460ff1916600117905543601f55565b6001600160a01b031660009081526008602052604090205490565b61338c610fb4565b6005546001600160a01b039081169116146133b95760405162461bcd60e51b815260040161107f90615421565b601a55565b6133c6610fb4565b6005546001600160a01b039081169116146133f35760405162461bcd60e51b815260040161107f90615421565b600d54604051636d58441560e11b81526001600160a01b039091169063dab0882a90611e2e908490600401614b84565b600d546040805163943ab26160e01b815290516000926001600160a01b03169163943ab261916004808301926020929190829003018186803b1580156111ed57600080fd5b600d546000906001600160a01b031663f69d85a06111b9610fb4565b6001600160a01b03166000908152600b602052604090205490565b6134a7610fb4565b6005546001600160a01b039081169116146134d45760405162461bcd60e51b815260040161107f90615421565b6001600160a01b03919091166000908152602160205260409020805460ff1916911515919091179055565b600d546040805163fb10d6fb60e01b815290516000926001600160a01b03169163fb10d6fb916004808301926020929190829003018186803b1580156111ed57600080fd5b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60075490565b60606000613581610fb4565b6001600160a01b031614156135a85760405162461bcd60e51b815260040161107f90614e91565b600d546001600160a01b03166341ac82b06135c1610fb4565b6040518263ffffffff1660e01b81526004016135dd9190614aab565b60206040518083038186803b1580156135f557600080fd5b505afa158015613609573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061362d91906148c2565b6136495760405162461bcd60e51b815260040161107f90614c77565b600d546001600160a01b0316635759fb02611374610fb4565b61366a610fb4565b6005546001600160a01b039081169116146136975760405162461bcd60e51b815260040161107f90615421565b6001600160a01b0381166136bd5760405162461bcd60e51b815260040161107f90614cd3565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600d54604080516327b3bf1160e01b815290516000926001600160a01b0316916327b3bf11916004808301926020929190829003018186803b1580156111ed57600080fd5b600d5460405163112469f960e21b81526000916001600160a01b031690634491a7e4906126df908590600401614aab565b600d546000906001600160a01b031663e599ef5b6126c1610fb4565b600d5460408051636f60a39360e11b815290516000926001600160a01b03169163dec14726916004808301926020929190829003018186803b1580156111ed57600080fd5b600d54604080516385c44d9d60e01b815290516000926001600160a01b0316916385c44d9d916004808301926020929190829003018186803b15801561383557600080fd5b505afa158015613849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122591906148c2565b600d5460405163e599ef5b60e01b81526000916001600160a01b03169063e599ef5b906124e89086908690600401614abf565b6138a8610fb4565b6005546001600160a01b039081169116146138d55760405162461bcd60e51b815260040161107f90615421565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000613901610fb4565b90506001600160a01b0381166139295760405162461bcd60e51b815260040161107f90614def565b6001600160a01b03811660009081526021602052604090205460ff16156139625760405162461bcd60e51b815260040161107f9061504a565b6010546001600160a01b0382811691161480159061398e57506011546001600160a01b03828116911614155b80156139a857506012546001600160a01b03828116911614155b6139c45760405162461bcd60e51b815260040161107f9061548b565b600d546040516329b8573160e21b81526000916001600160a01b03169063a6e15cc4906139f79085908790600401614abf565b60206040518083038186803b158015613a0f57600080fd5b505afa158015613a23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a4791906149e1565b905060008111613a695760405162461bcd60e51b815260040161107f906153c4565b601b54610100900460ff1615613ac55760185460009015613ab757613a9e6064611a9660185485613fdf90919063ffffffff16565b601254909150613ab7906001600160a01b031682614066565b613ac18183615909565b9150505b601154613adc906001600160a01b031630836140b5565b600d54604051631ce9de7b60e21b81526001600160a01b03909116906373a779ec906123e99085908790600401614abf565b600080613b1b83856158b2565b90508381101561159d5760405162461bcd60e51b815260040161107f90614db8565b6001600160a01b038316613b635760405162461bcd60e51b815260040161107f9061558a565b6001600160a01b038216613b895760405162461bcd60e51b815260040161107f90614d19565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590613be49085906157c3565b60405180910390a3505050565b6006546001600160a01b03841660009081526008602052604081205490918391613c1b90866158ea565b613c2591906158ca565b613c2f9190615909565b949350505050565b80471015613c575760405162461bcd60e51b815260040161107f90614fc8565b6000826001600160a01b031682604051613c7090614aa8565b60006040518083038185875af1925050503d8060008114613cad576040519150601f19603f3d011682016040523d82523d6000602084013e613cb2565b606091505b5050905080611b5c5760405162461bcd60e51b815260040161107f90614f0e565b6001600160a01b03831660009081526021602052604090205460ff16158015613d1557506001600160a01b03821660009081526021602052604090205460ff16155b613d315760405162461bcd60e51b815260040161107f90615183565b6001600160a01b038316613d575760405162461bcd60e51b815260040161107f906154e8565b6001600160a01b038216613d7d5760405162461bcd60e51b815260040161107f90614bff565b613d85612a8a565b6001600160a01b0316836001600160a01b031614158015613db45750600f546001600160a01b03838116911614155b8015613dce5750600e546001600160a01b03838116911614155b8015613de357506001600160a01b0382163014155b8015613df857506001600160a01b0383163014155b15613f1757601d5460ff16613e1f5760405162461bcd60e51b815260040161107f9061572f565b6010546001600160a01b03838116911614801590613e4b57506011546001600160a01b03838116911614155b8015613e6557506012546001600160a01b03838116911614155b8015613e7f57506010546001600160a01b03848116911614155b8015613e9957506011546001600160a01b03848116911614155b8015613eb357506012546001600160a01b03848116911614155b15613f17576000613ec26113f3565b90506000613ecf8461260b565b9050613eec612710611a9660205485613fdf90919063ffffffff16565b613ef68483613b0e565b1115613f145760405162461bcd60e51b815260040161107f9061552d565b50505b611b5c8383836140b5565b60008184841115613f465760405162461bcd60e51b815260040161107f9190614b8f565b506000613f538486615909565b95945050505050565b611b5c8363a9059cbb60e01b8484604051602401613f7b929190614abf565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261446f565b600082613fee575060006110c7565b6000613ffa83856158ea565b90508261400785836158ca565b1461159d5760405162461bcd60e51b815260040161107f90615383565b600061159d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506144fe565b4761407082614320565b600061407c478361425d565b6040519091506001600160a01b0385169082156108fc029083906000818181858888f19350505050158015611e5c573d6000803e3d6000fd5b6001600160a01b0383166140db5760405162461bcd60e51b815260040161107f906154e8565b6001600160a01b0382166141015760405162461bcd60e51b815260040161107f90614bff565b61410c838383611b5c565b614149816040518060600160405280602681526020016159da602691396001600160a01b0386166000908152602081905260409020549190613f22565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546141789082613b0e565b6001600160a01b0380841660008181526020819052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90613be49085906157c3565b6001600160a01b03821660009081526022602052604090205460ff16151581151514156142095760405162461bcd60e51b815260040161107f90615126565b6001600160a01b038216600081815260226020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b600061159d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613f22565b60006142ac826002614024565b905060006142ba838361425d565b9050476142c683614320565b60006142d2478361425d565b90506142de838261452c565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516143119392919061583c565b60405180910390a15050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061436357634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600e54604080516339d94ae160e11b8152905191909316926373b295c2926004808301939192829003018186803b1580156143b757600080fd5b505afa1580156143cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143ef9190614759565b8160018151811061441057634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600e546144369130911684613b3d565b600e54604051633b158ab160e11b81526001600160a01b039091169063762b1562906128b19085906000908690309042906004016157cc565b60006144c4826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166145d39092919063ffffffff16565b805190915015611b5c57808060200190518101906144e291906148c2565b611b5c5760405162461bcd60e51b815260040161107f9061569a565b6000818361451f5760405162461bcd60e51b815260040161107f9190614b8f565b506000613f5384866158ca565b600e546145449030906001600160a01b031684613b3d565b600e54604051637c8d9fb960e11b81526001600160a01b039091169063f91b3f729083906145819030908790600090819081904290600401614b24565b6060604051808303818588803b15801561459a57600080fd5b505af11580156145ae573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611e5c91906149f9565b6060613c2f8484600085856145e78561467c565b6146035760405162461bcd60e51b815260040161107f906155ce565b600080866001600160a01b0316858760405161461f9190614a8c565b60006040518083038185875af1925050503d806000811461465c576040519150601f19603f3d011682016040523d82523d6000602084013e614661565b606091505b5091509150614671828286614682565b979650505050505050565b3b151590565b6060831561469157508161159d565b8251156146a15782518084602001fd5b8160405162461bcd60e51b815260040161107f9190614b8f565b600082601f8301126146cb578081fd5b8135602067ffffffffffffffff8211156146e7576146e761599d565b8082026146f5828201615860565b83815282810190868401838801850189101561470f578687fd5b8693505b85841015614731578035835260019390930192918401918401614713565b50979650505050505050565b60006020828403121561474e578081fd5b813561159d816159b3565b60006020828403121561476a578081fd5b815161159d816159b3565b60008060408385031215614787578081fd5b8235614792816159b3565b915060208301356147a2816159b3565b809150509250929050565b6000806000606084860312156147c1578081fd5b83356147cc816159b3565b925060208401356147dc816159b3565b929592945050506040919091013590565b600080604083850312156147ff578182fd5b823561480a816159b3565b915060208301356147a2816159cb565b6000806040838503121561482c578182fd5b8235614837816159b3565b946020939093013593505050565b60008060408385031215614857578182fd5b823567ffffffffffffffff8082111561486e578384fd5b61487a868387016146bb565b9350602085013591508082111561488f578283fd5b5061489c858286016146bb565b9150509250929050565b6000602082840312156148b7578081fd5b813561159d816159cb565b6000602082840312156148d3578081fd5b815161159d816159cb565b6000602082840312156148ef578081fd5b815167ffffffffffffffff811115614905578182fd5b8201601f81018413614915578182fd5b80516149286149238261588a565b615860565b81815285602083850101111561493c578384fd5b613f53826020830160208601615920565b6000806040838503121561495f578182fd5b823567ffffffffffffffff811115614975578283fd5b8301601f81018513614985578283fd5b80356149936149238261588a565b8181528660208385010111156149a7578485fd5b8160208401602083013790810160209081019490945295939092013593505050565b6000602082840312156149da578081fd5b5035919050565b6000602082840312156149f2578081fd5b5051919050565b600080600060608486031215614a0d578081fd5b8351925060208401519150604084015190509250925092565b6000815180845260208085019450808401835b83811015614a5557815187529582019590820190600101614a39565b509495945050505050565b60008151808452614a78816020860160208601615920565b601f01601f19169290920160200192915050565b60008251614a9e818460208701615920565b9190910192915050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0392831681529116602082015260400190565b60006001600160a01b038516825260606020830152614b146060830185614a60565b9050826040830152949350505050565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600060408252614b726040830185614a26565b8281036020840152613f538185614a26565b901515815260200190565b60006020825261159d6020830184614a60565b60208082526032908201527f435348543a20667574757220616e642072657761726473506f6f6c2063616e6e60408201527f6f7420636173686f757420726577617264730000000000000000000000000000606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252818101527f6e6577546965724c6576656c73206c656e6774682068617320746f2062652036604082015260600190565b6020808252600d908201526c2727902727a2229027aba722a960991b604082015260600190565b6020808252818101527f4e4f4445204352454154494f4e3a204e414d452053495a4520494e56414c4944604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252603c908201527f4e4f4445204352454154494f4e3a2066757475722c2064657620616e6420726560408201527f7761726473506f6f6c2063616e6e6f7420637265617465206e6f646500000000606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526025908201527f435348543a20206372656174696f6e2066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252603d908201527f4d414e494120435348543a2066757475722c2064657620616e6420726577617260408201527f6473506f6f6c2063616e6e6f7420636173686f75742072657761726473000000606082015260800190565b60208082526014908201527f53454e4445522043414e2754204245205a45524f000000000000000000000000604082015260600190565b60208082526026908201527f5061796d656e7453706c69747465723a206163636f756e7420686173206e6f2060408201526573686172657360d01b606082015260800190565b6020808252603a908201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260408201527f6563697069656e74206d61792068617665207265766572746564000000000000606082015260800190565b6020808252602e908201527f435348543a20596f7520646f6e2774206861766520656e6f756768207265776160408201527f726420746f2063617368206f7574000000000000000000000000000000000000606082015260800190565b6020808252601d908201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604082015260600190565b6020808252602b908201527f5061796d656e7453706c69747465723a206163636f756e74206973206e6f742060408201526a191d59481c185e5b595b9d60aa1b606082015260800190565b6020808252601f908201527f4d414e494120435348543a20426c61636b6c6973746564206164647265737300604082015260600190565b60208082526028908201527f544b4e3a2054686520726f7574657220616c7265616479206861732074686174604082015267206164647265737360c01b606082015260800190565b60208082526030908201527f4e4f4445204352454154494f4e3a204e6f64652056616c75652073657420626560408201527f6c6f77206e6f64654d696e507269636500000000000000000000000000000000606082015260800190565b6020808252603d908201527f544b4e3a204175746f6d61746564206d61726b6574206d616b6572207061697260408201527f20697320616c72656164792073657420746f20746861742076616c7565000000606082015260800190565b60208082526013908201527f426c61636b6c6973746564206164647265737300000000000000000000000000604082015260600190565b6020808252604a908201527f544b4e3a205468652050616e63616b655377617020706169722063616e6e6f7460408201527f2062652072656d6f7665642066726f6d206175746f6d617465644d61726b65746060820152694d616b6572506169727360b01b608082015260a00190565b60208082526022908201527f4e4f4445204352454154494f4e3a20426c61636b6c6973746564206164647265604082015261737360f01b606082015260800190565b60208082526034908201527f4d414e494120435348543a20596f7520646f6e2774206861766520656e6f756760408201527f682072657761726420746f20636f6d706f756e64000000000000000000000000606082015260800190565b60208082526038908201527f4d414e494120435348543a20667574757220616e642072657761726473506f6f60408201527f6c2063616e6e6f7420636173686f757420726577617264730000000000000000606082015260800190565b6020808252602e908201527f4e4f4445204352454154494f4e3a20206372656174696f6e2066726f6d20746860408201527f65207a65726f2061646472657373000000000000000000000000000000000000606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526038908201527f435348543a20596f7520646f6e2774206861766520656e6f756768207265776160408201527f726420746f20636f6d706f756e6420796f7572206e6f64650000000000000000606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252818101527f6e657754696572536c6f706573206c656e6774682068617320746f2062652036604082015260600190565b60208082526036908201527f435348543a2066757475722c2064657620616e642072657761726473506f6f6c60408201527f2063616e6e6f7420636f6d706f756e64206e6f64657300000000000000000000606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526033908201527f53544f5020545259494e4720544f204245434f4d452041205748414c452e205760408201527f45204b4e4f572057484f20594f55204152452e00000000000000000000000000606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b60208082526017908201527f74726164696e6720697320616c7265616479206f70656e000000000000000000604082015260600190565b602080825260409082018190527f4e4f4445204352454154494f4e3a2042616c616e636520746f6f206c6f772066908201527f6f72206372656174696f6e2e20557365206c6f77657220696e697456616c7565606082015260800190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252602b908201527f4d414e494120435348543a20206372656174696f6e2066726f6d20746865207a60408201526a65726f206164647265737360a81b606082015260800190565b60208082526018908201527f54726164696e67206e6f742079657420656e61626c65642e0000000000000000604082015260600190565b60208082526034908201527f4d414e494120435348543a20596f7520646f6e2774206861766520656e6f756760408201527f682072657761726420746f2063617368206f7574000000000000000000000000606082015260800190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b8181101561581b5784516001600160a01b0316835293830193918301916001016157f6565b50506001600160a01b03969096166060850152505050608001529392505050565b9283526020830191909152604082015260600190565b60ff91909116815260200190565b60405181810167ffffffffffffffff811182821017156158825761588261599d565b604052919050565b600067ffffffffffffffff8211156158a4576158a461599d565b50601f01601f191660200190565b600082198211156158c5576158c5615987565b500190565b6000826158e557634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561590457615904615987565b500290565b60008282101561591b5761591b615987565b500390565b60005b8381101561593b578181015183820152602001615923565b8381111561243b5750506000910152565b60028104600182168061596057607f821691505b6020821081141561598157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146159c857600080fd5b50565b80151581146159c857600080fdfe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212202b82c9fe6a83988a5de3a1d8ea661d6db1b7f67acafce5af99d08d4f6bdada6664736f6c6343000800003300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000060ae616a2155ee3d9a68541ba4544862310933d40000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000100000000000000000000000083afb767d827c6fbaa294e2e54494cbc5df4c0d800000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000007f6ec9b196128e5e9bf6de4cf4c92ff7bfeacddb000000000000000000000000506ddeec475b43f48786e04608b5f8d7f9c3c690000000000000000000000000a40ccdbc4a30fbf0dc3c179f07913f2fd76f36fc000000000000000000000000a8cc43ab09ee6ef2afdad7c3d4804350f4c43b99000000000000000000000000f0634fb057058e350f43a10872c88818e96c0aec000000000000000000000000051d6213f7186f31f40f3e2ac9e7c8c682fdf1c90000000000000000000000000f21e7929e33486931a788655245f9999c15c708000000000000000000000000df974829f6d977370b21e065ae445390cb9d010c000000000000000000000000024b938af25ed40e515d87366ba4cf95d38a826e00000000000000000000000083afb767d827c6fbaa294e2e54494cbc5df4c0d8000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000009896800000000000000000000000000000000000000000000000000000000000989680000000000000000000000000000000000000000000000000000000000098968000000000000000000000000000000000000000000000000000000000009896800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001443fd00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004c4b400000000000000000000000000000000000000000000000000000000000e4e1c00000000000000000000000000000000000000000000000000000000023c34600
Deployed Bytecode
0x6080604052600436106105855760003560e01c80638689af84116102d1578063bdf24a531161018a578063dd62ed3e116100ec578063f7791bcf11610095578063fa41f64b1161006f578063fa41f64b14610f54578063fb0a749414610f74578063fdaaadf714610f94576105cc565b8063f7791bcf14610f0a578063f7b9f94314610f2a578063f9afc76314610f3f576105cc565b8063f2fde38b116100c6578063f2fde38b14610eb5578063f5a0725614610ed5578063f74c993414610eea576105cc565b8063dd62ed3e14610e6b578063e33b7de314610e8b578063ee1afdbf14610ea0576105cc565b8063d0f774741161014e578063d79779b211610128578063d79779b214610e16578063d892934214610e36578063da41b33314610e56576105cc565b8063d0f7747414610dcc578063d19dd86214610dec578063d766636b14610e01576105cc565b8063bdf24a5314610d4d578063c5ca7d6d14610d62578063c9567bf914610d77578063ce7c2ac214610d8c578063cf04520c14610dac576105cc565b8063a0a8fe6511610233578063ab574761116101f7578063b62496f5116101d1578063b62496f514610ced578063b96392c114610d0d578063bbc6799814610d2d576105cc565b8063ab57476114610ca3578063af15318214610cb8578063b5838a2714610cd8576105cc565b8063a0a8fe6514610c19578063a457c2d714610c2e578063a538ddf214610c4e578063a9059cbb14610c63578063a9e2374b14610c83576105cc565b80638da5cb5b116102955780639852595c1161026f5780639852595c14610bb95780639a7a23d614610bd95780639c82751c14610bf9576105cc565b80638da5cb5b14610b6f5780639349c47d14610b8457806395d89b4114610ba4576105cc565b80638689af8414610ae55780638743ef6d14610afa57806388c41d7c14610b0f5780638b83209b14610b2f5780638bc9c7b014610b4f576105cc565b8063545579731161043e5780636815a91c116103a05780637398437d116103495780638005f735116103235780638005f73514610a90578063846b8d6314610ab057806385141a7714610ad0576105cc565b80637398437d14610a3b5780637628b3d714610a5b57806377d57c3314610a70576105cc565b80636f4a2cd01161037a5780636f4a2cd0146109e257806370a0823114610a06578063715018a614610a26576105cc565b80636815a91c1461098d5780636ba550a0146109ad5780636d9ae0be146109cd576105cc565b80635b0d46741161040257806365b8dbc0116103dc57806365b8dbc01461092d57806365bfe4301461094d5780636770474b1461096d576105cc565b80635b0d4674146108e35780635f1c3182146108f85780636256d1811461090d576105cc565b8063545579731461086457806354f12f1f14610879578063576ffa031461088e578063583bd7a6146108a357806359640ed9146108c3576105cc565b806323b872dd116104e7578063406072a9116104ab57806348b750441161048557806348b750441461081a57806348e5642b1461083a57806349bd5a5e1461084f576105cc565b8063406072a9146107ba5780634195fbf3146107da57806342bc9fca146107fa576105cc565b806323b872dd1461072e5780632bb14e1d1461074e578063313ce5671461076357806339509351146107855780633a98ef39146107a5576105cc565b806313114a9d1161054957806318160ddd1161052357806318160ddd146106d957806319165587146106ee5780631cdd3be31461070e576105cc565b806313114a9d1461068d578063138a634a146106a25780631694505e146106b7576105cc565b806306fdde03146105d1578063084a6bff146105fc578063095ea7b31461061e57806309a69f571461064b5780630c08f3001461066d576105cc565b366105cc577f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be7706105b3610fb4565b346040516105c2929190614abf565b60405180910390a1005b600080fd5b3480156105dd57600080fd5b506105e6610fb8565b6040516105f39190614b8f565b60405180910390f35b34801561060857600080fd5b5061061c6106173660046149c9565b61104a565b005b34801561062a57600080fd5b5061063e61063936600461481a565b6110af565b6040516105f39190614b84565b34801561065757600080fd5b506106606110cd565b6040516105f391906157c3565b34801561067957600080fd5b5061061c61068836600461473d565b61122a565b34801561069957600080fd5b50610660611281565b3480156106ae57600080fd5b506105e6611287565b3480156106c357600080fd5b506106cc6113e4565b6040516105f39190614aab565b3480156106e557600080fd5b506106606113f3565b3480156106fa57600080fd5b5061061c61070936600461473d565b6113f9565b34801561071a57600080fd5b5061063e61072936600461473d565b611507565b34801561073a57600080fd5b5061063e6107493660046147ad565b61151c565b34801561075a57600080fd5b506106606115a4565b34801561076f57600080fd5b506107786115aa565b6040516105f39190615852565b34801561079157600080fd5b5061063e6107a036600461481a565b6115af565b3480156107b157600080fd5b506106606115fd565b3480156107c657600080fd5b506106606107d5366004614775565b611603565b3480156107e657600080fd5b5061061c6107f53660046149c9565b61162e565b34801561080657600080fd5b5061061c6108153660046149c9565b6116b2565b34801561082657600080fd5b5061061c610835366004614775565b611701565b34801561084657600080fd5b506106606118b7565b34801561085b57600080fd5b506106cc6118fc565b34801561087057600080fd5b5061061c61190b565b34801561088557600080fd5b50610660611b61565b34801561089a57600080fd5b5061061c611b67565b3480156108af57600080fd5b5061061c6108be3660046148a6565b611d7a565b3480156108cf57600080fd5b5061061c6108de3660046149c9565b611dc9565b3480156108ef57600080fd5b506105e6611e63565b34801561090457600080fd5b50610660611f50565b34801561091957600080fd5b5061061c6109283660046149c9565b611f56565b34801561093957600080fd5b5061061c61094836600461473d565b611f90565b34801561095957600080fd5b5061061c6109683660046149c9565b6121ec565b34801561097957600080fd5b5061061c6109883660046149c9565b612441565b34801561099957600080fd5b5061061c6109a83660046149c9565b61247b565b3480156109b957600080fd5b506106606109c836600461481a565b6124b5565b3480156109d957600080fd5b50610660612538565b3480156109ee57600080fd5b506109f761253e565b6040516105f39392919061583c565b348015610a1257600080fd5b50610660610a2136600461473d565b61260b565b348015610a3257600080fd5b5061061c612626565b348015610a4757600080fd5b50610660610a563660046149c9565b6126a5565b348015610a6757600080fd5b506106cc61272f565b348015610a7c57600080fd5b5061061c610a8b3660046149c9565b61273e565b348015610a9c57600080fd5b5061061c610aab3660046149c9565b6127a3565b348015610abc57600080fd5b5061061c610acb366004614845565b612808565b348015610adc57600080fd5b506106cc6128e7565b348015610af157600080fd5b506106606128f6565b348015610b0657600080fd5b5061061c61293b565b348015610b1b57600080fd5b5061061c610b2a3660046149c9565b6129c3565b348015610b3b57600080fd5b506106cc610b4a3660046149c9565b612a12565b348015610b5b57600080fd5b5061061c610b6a3660046149c9565b612a50565b348015610b7b57600080fd5b506106cc612a8a565b348015610b9057600080fd5b5061061c610b9f36600461473d565b612a99565b348015610bb057600080fd5b506105e6612af0565b348015610bc557600080fd5b50610660610bd436600461473d565b612aff565b348015610be557600080fd5b5061061c610bf43660046147ed565b612b1a565b348015610c0557600080fd5b5061061c610c143660046149c9565b612b87565b348015610c2557600080fd5b50610660612bec565b348015610c3a57600080fd5b5061063e610c4936600461481a565b612c31565b348015610c5a57600080fd5b506106cc612c99565b348015610c6f57600080fd5b5061063e610c7e36600461481a565b612ca8565b348015610c8f57600080fd5b50610660610c9e36600461473d565b612cbc565b348015610caf57600080fd5b50610660612ced565b348015610cc457600080fd5b5061061c610cd336600461473d565b612cf3565b348015610ce457600080fd5b506106cc612d4a565b348015610cf957600080fd5b5061063e610d0836600461473d565b612d59565b348015610d1957600080fd5b50610660610d2836600461473d565b612d6e565b348015610d3957600080fd5b5061061c610d4836600461494d565b612dd5565b348015610d5957600080fd5b506105e6613202565b348015610d6e57600080fd5b506106cc6132ef565b348015610d8357600080fd5b5061061c6132fe565b348015610d9857600080fd5b50610660610da736600461473d565b613369565b348015610db857600080fd5b5061061c610dc73660046149c9565b613384565b348015610dd857600080fd5b5061061c610de73660046148a6565b6133be565b348015610df857600080fd5b50610660613423565b348015610e0d57600080fd5b50610660613468565b348015610e2257600080fd5b50610660610e3136600461473d565b613484565b348015610e4257600080fd5b5061061c610e513660046147ed565b61349f565b348015610e6257600080fd5b506106606134ff565b348015610e7757600080fd5b50610660610e86366004614775565b613544565b348015610e9757600080fd5b5061066061356f565b348015610eac57600080fd5b506105e6613575565b348015610ec157600080fd5b5061061c610ed036600461473d565b613662565b348015610ee157600080fd5b50610660613719565b348015610ef657600080fd5b50610660610f0536600461473d565b61375e565b348015610f1657600080fd5b50610660610f253660046149c9565b61378f565b348015610f3657600080fd5b506106606137ab565b348015610f4b57600080fd5b5061063e6137f0565b348015610f6057600080fd5b50610660610f6f36600461481a565b61386d565b348015610f8057600080fd5b5061061c610f8f36600461473d565b6138a0565b348015610fa057600080fd5b5061061c610faf3660046149c9565b6138f7565b3390565b606060038054610fc79061594c565b80601f0160208091040260200160405190810160405280929190818152602001828054610ff39061594c565b80156110405780601f1061101557610100808354040283529160200191611040565b820191906000526020600020905b81548152906001019060200180831161102357829003601f168201915b5050505050905090565b611052610fb4565b6005546001600160a01b039081169116146110885760405162461bcd60e51b815260040161107f90615421565b60405180910390fd5b60148190556016546015546110a991906110a3908490613b0e565b90613b0e565b60175550565b60006110c36110bc610fb4565b8484613b3d565b5060015b92915050565b6000806110d8610fb4565b6001600160a01b031614156110ff5760405162461bcd60e51b815260040161107f90614e91565b600d546001600160a01b03166341ac82b0611118610fb4565b6040518263ffffffff1660e01b81526004016111349190614aab565b60206040518083038186803b15801561114c57600080fd5b505afa158015611160573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118491906148c2565b6111a05760405162461bcd60e51b815260040161107f90614c77565b600d546001600160a01b031663619a635e6111b9610fb4565b6040518263ffffffff1660e01b81526004016111d59190614aab565b60206040518083038186803b1580156111ed57600080fd5b505afa158015611201573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122591906149e1565b905090565b611232610fb4565b6005546001600160a01b0390811691161461125f5760405162461bcd60e51b815260040161107f90615421565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b60175481565b60606000611293610fb4565b6001600160a01b031614156112ba5760405162461bcd60e51b815260040161107f90614e91565b600d546001600160a01b03166341ac82b06112d3610fb4565b6040518263ffffffff1660e01b81526004016112ef9190614aab565b60206040518083038186803b15801561130757600080fd5b505afa15801561131b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061133f91906148c2565b61135b5760405162461bcd60e51b815260040161107f90614c77565b600d546001600160a01b031663334de3a2611374610fb4565b6040518263ffffffff1660e01b81526004016113909190614aab565b60006040518083038186803b1580156113a857600080fd5b505afa1580156113bc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261122591908101906148de565b600e546001600160a01b031681565b60025490565b6001600160a01b03811660009081526008602052604090205461142e5760405162461bcd60e51b815260040161107f90614ec8565b600061143861356f565b61144290476158b2565b90506000611459838361145486612aff565b613bf1565b9050806114785760405162461bcd60e51b815260040161107f90614fff565b6001600160a01b038316600090815260096020526040812080548392906114a09084906158b2565b9250508190555080600760008282546114b991906158b2565b909155506114c990508382613c37565b7fdf20fd1e76bc69d672e4814fafb2c449bba3a5369d8359adf9e05e6fde87b05683826040516114fa929190614abf565b60405180910390a1505050565b60216020526000908152604090205460ff1681565b6000611529848484613cd3565b61159984611535610fb4565b61159485604051806060016040528060288152602001615a00602891396001600160a01b038a16600090815260016020526040812090611573610fb4565b6001600160a01b031681526020810191909152604001600020549190613f22565b613b3d565b5060015b9392505050565b60145481565b601290565b60006110c36115bc610fb4565b8461159485600160006115cd610fb4565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490613b0e565b60065490565b6001600160a01b039182166000908152600c6020908152604080832093909416825291909152205490565b611636610fb4565b6005546001600160a01b039081169116146116635760405162461bcd60e51b815260040161107f90615421565b4781111561166e5750475b611676612a8a565b6001600160a01b03166108fc829081150290604051600060405180830381858888f193505050501580156116ae573d6000803e3d6000fd5b5050565b6116ba610fb4565b6005546001600160a01b039081169116146116e75760405162461bcd60e51b815260040161107f90615421565b60158190556016546014546110a991906110a39084613b0e565b6001600160a01b0381166000908152600860205260409020546117365760405162461bcd60e51b815260040161107f90614ec8565b600061174183613484565b6040516370a0823160e01b81526001600160a01b038516906370a082319061176d903090600401614aab565b60206040518083038186803b15801561178557600080fd5b505afa158015611799573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bd91906149e1565b6117c791906158b2565b905060006117da83836114548787611603565b9050806117f95760405162461bcd60e51b815260040161107f90614fff565b6001600160a01b038085166000908152600c60209081526040808320938716835292905290812080548392906118309084906158b2565b90915550506001600160a01b0384166000908152600b60205260408120805483929061185d9084906158b2565b9091555061186e9050848483613f5c565b836001600160a01b03167f3be5b7a71e84ed12875d241991c70855ac5817d847039e17a9d895c1ceb0f18a84836040516118a9929190614abf565b60405180910390a250505050565b600d54604080516345193f5560e11b815290516000926001600160a01b031691638a327eaa916004808301926020929190829003018186803b1580156111ed57600080fd5b600f546001600160a01b031681565b6000611915610fb4565b90506001600160a01b03811661193d5760405162461bcd60e51b815260040161107f906156e4565b6001600160a01b03811660009081526021602052604090205460ff16156119765760405162461bcd60e51b815260040161107f9061504a565b6010546001600160a01b038281169116148015906119a257506011546001600160a01b03828116911614155b6119be5760405162461bcd60e51b815260040161107f906152c9565b600d546040516330cd31af60e11b81526000916001600160a01b03169063619a635e906119ef908590600401614aab565b60206040518083038186803b158015611a0757600080fd5b505afa158015611a1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3f91906149e1565b905060008111611a615760405162461bcd60e51b815260040161107f90615766565b601b54610100900460ff1615611ac35760185460009015611ab557611a9c6064611a9660185485613fdf90919063ffffffff16565b90614024565b601054909150611ab5906001600160a01b031682614066565b611abf8183615909565b9150505b601154611ada906001600160a01b031683836140b5565b600d5460405163170a62c760e21b81526001600160a01b0390911690635c298b1c90611b0a908590600401614aab565b602060405180830381600087803b158015611b2457600080fd5b505af1158015611b38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5c91906149e1565b505050565b60155481565b6000611b71610fb4565b90506001600160a01b038116611b995760405162461bcd60e51b815260040161107f906156e4565b6001600160a01b03811660009081526021602052604090205460ff1615611bd25760405162461bcd60e51b815260040161107f9061504a565b6010546001600160a01b03828116911614801590611bfe57506011546001600160a01b03828116911614155b8015611c1857506012546001600160a01b03828116911614155b611c345760405162461bcd60e51b815260040161107f90614e34565b600d546040516330cd31af60e11b81526000916001600160a01b03169063619a635e90611c65908590600401614aab565b60206040518083038186803b158015611c7d57600080fd5b505afa158015611c91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb591906149e1565b905060008111611cd75760405162461bcd60e51b815260040161107f9061526c565b601b54610100900460ff1615611d335760185460009015611d2557611d0c6064611a9660185485613fdf90919063ffffffff16565b601254909150611d25906001600160a01b031682614066565b611d2f8183615909565b9150505b601154611d4a906001600160a01b031630836140b5565b600d5460405163abf0797f60e01b81526001600160a01b039091169063abf0797f90611b0a908590600401614aab565b611d82610fb4565b6005546001600160a01b03908116911614611daf5760405162461bcd60e51b815260040161107f90615421565b601b80549115156101000261ff0019909216919091179055565b611dd1610fb4565b6005546001600160a01b03908116911614611dfe5760405162461bcd60e51b815260040161107f90615421565b600d54604051631df3773160e31b81526001600160a01b039091169063ef9bb98890611e2e9084906004016157c3565b600060405180830381600087803b158015611e4857600080fd5b505af1158015611e5c573d6000803e3d6000fd5b5050505050565b60606000611e6f610fb4565b6001600160a01b03161415611e965760405162461bcd60e51b815260040161107f90614e91565b600d546001600160a01b03166341ac82b0611eaf610fb4565b6040518263ffffffff1660e01b8152600401611ecb9190614aab565b60206040518083038186803b158015611ee357600080fd5b505afa158015611ef7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1b91906148c2565b611f375760405162461bcd60e51b815260040161107f90614c77565b600d546001600160a01b0316634a389fae611374610fb4565b601c5481565b611f5e610fb4565b6005546001600160a01b03908116911614611f8b5760405162461bcd60e51b815260040161107f90615421565b602055565b611f98610fb4565b6005546001600160a01b03908116911614611fc55760405162461bcd60e51b815260040161107f90615421565b600e546001600160a01b0382811691161415611ff35760405162461bcd60e51b815260040161107f90615081565b600e546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3600e80546001600160a01b0319166001600160a01b0383811691909117918290556040805163c45a015560e01b815290516000939092169163c45a015591600480820192602092909190829003018186803b15801561208c57600080fd5b505afa1580156120a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c49190614759565b6001600160a01b031663c9c6539630600e60009054906101000a90046001600160a01b03166001600160a01b03166373b295c26040518163ffffffff1660e01b815260040160206040518083038186803b15801561212157600080fd5b505afa158015612135573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121599190614759565b6040518363ffffffff1660e01b8152600401612176929190614ad8565b602060405180830381600087803b15801561219057600080fd5b505af11580156121a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121c89190614759565b600f80546001600160a01b0319166001600160a01b03929092169190911790555050565b60006121f6610fb4565b90506001600160a01b03811661221e5760405162461bcd60e51b815260040161107f90614def565b6001600160a01b03811660009081526021602052604090205460ff16156122575760405162461bcd60e51b815260040161107f9061504a565b6010546001600160a01b0382811691161480159061228357506011546001600160a01b03828116911614155b61229f5760405162461bcd60e51b815260040161107f90614ba2565b600d546040516329b8573160e21b81526000916001600160a01b03169063a6e15cc4906122d29085908790600401614abf565b60206040518083038186803b1580156122ea57600080fd5b505afa1580156122fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061232291906149e1565b9050600081116123445760405162461bcd60e51b815260040161107f90614f6b565b601b54610100900460ff16156123a05760185460009015612392576123796064611a9660185485613fdf90919063ffffffff16565b601054909150612392906001600160a01b031682614066565b61239c8183615909565b9150505b6011546123b7906001600160a01b031683836140b5565b600d5460405163376db80160e11b81526001600160a01b0390911690636edb7002906123e99085908790600401614abf565b602060405180830381600087803b15801561240357600080fd5b505af1158015612417573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243b91906149e1565b50505050565b612449610fb4565b6005546001600160a01b039081169116146124765760405162461bcd60e51b815260040161107f90615421565b601c55565b612483610fb4565b6005546001600160a01b039081169116146124b05760405162461bcd60e51b815260040161107f90615421565b601855565b600d54604051637ce4f85f60e01b81526000916001600160a01b031690637ce4f85f906124e89086908690600401614abf565b60206040518083038186803b15801561250057600080fd5b505afa158015612514573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159d91906149e1565b60185481565b600080600061254b610fb4565b6005546001600160a01b039081169116146125785760405162461bcd60e51b815260040161107f90615421565b600d60009054906101000a90046001600160a01b03166001600160a01b03166388fe65536040518163ffffffff1660e01b8152600401606060405180830381600087803b1580156125c857600080fd5b505af11580156125dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260091906149f9565b925092509250909192565b6001600160a01b031660009081526020819052604090205490565b61262e610fb4565b6005546001600160a01b0390811691161461265b5760405162461bcd60e51b815260040161107f90615421565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b600d546000906001600160a01b0316637ce4f85f6126c1610fb4565b846040518363ffffffff1660e01b81526004016126df929190614abf565b60206040518083038186803b1580156126f757600080fd5b505afa15801561270b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c791906149e1565b600d546001600160a01b031681565b612746610fb4565b6005546001600160a01b039081169116146127735760405162461bcd60e51b815260040161107f90615421565b600d54604051633895bd8760e21b81526001600160a01b039091169063e256f61c90611e2e9084906004016157c3565b6127ab610fb4565b6005546001600160a01b039081169116146127d85760405162461bcd60e51b815260040161107f90615421565b600d5460405163174c300760e01b81526001600160a01b039091169063174c300790611e2e9084906004016157c3565b612810610fb4565b6005546001600160a01b0390811691161461283d5760405162461bcd60e51b815260040161107f90615421565b815160061461285e5760405162461bcd60e51b815260040161107f90614c42565b805160061461287f5760405162461bcd60e51b815260040161107f90615456565b600d546040516357829c6160e01b81526001600160a01b03909116906357829c61906128b19085908590600401614b5f565b600060405180830381600087803b1580156128cb57600080fd5b505af11580156128df573d6000803e3d6000fd5b505050505050565b6013546001600160a01b031681565b600d546040805163728f0b4b60e01b815290516000926001600160a01b03169163728f0b4b916004808301926020929190829003018186803b1580156111ed57600080fd5b600d60009054906101000a90046001600160a01b03166001600160a01b03166388fe65536040518163ffffffff1660e01b8152600401606060405180830381600087803b15801561298b57600080fd5b505af115801561299f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5c91906149f9565b6129cb610fb4565b6005546001600160a01b039081169116146129f85760405162461bcd60e51b815260040161107f90615421565b60168190556015546014546110a99183916110a391613b0e565b6000600a8281548110612a3557634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031692915050565b612a58610fb4565b6005546001600160a01b03908116911614612a855760405162461bcd60e51b815260040161107f90615421565b601955565b6005546001600160a01b031690565b612aa1610fb4565b6005546001600160a01b03908116911614612ace5760405162461bcd60e51b815260040161107f90615421565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b606060048054610fc79061594c565b6001600160a01b031660009081526009602052604090205490565b612b22610fb4565b6005546001600160a01b03908116911614612b4f5760405162461bcd60e51b815260040161107f90615421565b600f546001600160a01b0383811691161415612b7d5760405162461bcd60e51b815260040161107f906151ba565b6116ae82826141ca565b612b8f610fb4565b6005546001600160a01b03908116911614612bbc5760405162461bcd60e51b815260040161107f90615421565b600d5460405163d1871a8960e01b81526001600160a01b039091169063d1871a8990611e2e9084906004016157c3565b600d546040805163b8527aef60e01b815290516000926001600160a01b03169163b8527aef916004808301926020929190829003018186803b1580156111ed57600080fd5b60006110c3612c3e610fb4565b8461159485604051806060016040528060258152602001615a286025913960016000612c68610fb4565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190613f22565b6010546001600160a01b031681565b60006110c3612cb5610fb4565b8484613cd3565b600d546040516307b4ec2d60e51b81526000916001600160a01b03169063f69d85a0906126df908590600401614aab565b60165481565b612cfb610fb4565b6005546001600160a01b03908116911614612d285760405162461bcd60e51b815260040161107f90615421565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b6012546001600160a01b031681565b60226020526000908152604090205460ff1681565b6000612d78610fb4565b6005546001600160a01b03908116911614612da55760405162461bcd60e51b815260040161107f90615421565b600d546040516330cd31af60e11b81526001600160a01b039091169063619a635e906126df908590600401614aab565b60038251118015612de7575060208251105b612e035760405162461bcd60e51b815260040161107f90614c9e565b6000612e0d610fb4565b90506001600160a01b038116612e355760405162461bcd60e51b815260040161107f90615326565b6001600160a01b03811660009081526021602052604090205460ff1615612e6e5760405162461bcd60e51b815260040161107f9061522a565b6010546001600160a01b03828116911614801590612e9a57506011546001600160a01b03828116911614155b8015612eb457506012546001600160a01b03828116911614155b612ed05760405162461bcd60e51b815260040161107f90614d5b565b600d546040805163943ab26160e01b815290516000926001600160a01b03169163943ab261916004808301926020929190829003018186803b158015612f1557600080fd5b505afa158015612f29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4d91906149e1565b90508281811015612f705760405162461bcd60e51b815260040161107f906150c9565b612f8281670de0b6b3a7640000613fdf565b612f8b8461260b565b1015612fa95760405162461bcd60e51b815260040161107f9061563c565b6000612fb43061260b565b601c5490915081108015908190612fd25750601b54610100900460ff165b8015612fe15750601b5460ff16155b80156130065750612ff0612a8a565b6001600160a01b0316856001600160a01b031614155b801561302b57506001600160a01b03851660009081526022602052604090205460ff16155b1561316d57601b805460ff1916600117905560165460009061305590606490611a96908690613fdf565b905060006130736064611a96601a5485613fdf90919063ffffffff16565b90506000613081838361425d565b60125490915061309a906001600160a01b031683614066565b6010546130b0906001600160a01b031682614066565b60006130cc6064611a9660145489613fdf90919063ffffffff16565b905060006130ea6064611a9660195485613fdf90919063ffffffff16565b601154909150613103906001600160a01b031682614066565b6011546131249030906001600160a01b031661311f858561425d565b6140b5565b60006131406064611a966015548b613fdf90919063ffffffff16565b905061314b8161429f565b61315c6131573061260b565b614320565b5050601b805460ff19169055505050505b613184853061311f86670de0b6b3a7640000613fdf565b600d546001600160a01b0316639021973286896131a98a670de0b6b3a7640000613fdf565b6040518463ffffffff1660e01b81526004016131c793929190614af2565b600060405180830381600087803b1580156131e157600080fd5b505af11580156131f5573d6000803e3d6000fd5b5050505050505050505050565b6060600061320e610fb4565b6001600160a01b031614156132355760405162461bcd60e51b815260040161107f90614e91565b600d546001600160a01b03166341ac82b061324e610fb4565b6040518263ffffffff1660e01b815260040161326a9190614aab565b60206040518083038186803b15801561328257600080fd5b505afa158015613296573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132ba91906148c2565b6132d65760405162461bcd60e51b815260040161107f90614c77565b600d546001600160a01b031663c92819ce611374610fb4565b6011546001600160a01b031681565b613306610fb4565b6005546001600160a01b039081169116146133335760405162461bcd60e51b815260040161107f90615421565b601d5460ff16156133565760405162461bcd60e51b815260040161107f90615605565b601d805460ff1916600117905543601f55565b6001600160a01b031660009081526008602052604090205490565b61338c610fb4565b6005546001600160a01b039081169116146133b95760405162461bcd60e51b815260040161107f90615421565b601a55565b6133c6610fb4565b6005546001600160a01b039081169116146133f35760405162461bcd60e51b815260040161107f90615421565b600d54604051636d58441560e11b81526001600160a01b039091169063dab0882a90611e2e908490600401614b84565b600d546040805163943ab26160e01b815290516000926001600160a01b03169163943ab261916004808301926020929190829003018186803b1580156111ed57600080fd5b600d546000906001600160a01b031663f69d85a06111b9610fb4565b6001600160a01b03166000908152600b602052604090205490565b6134a7610fb4565b6005546001600160a01b039081169116146134d45760405162461bcd60e51b815260040161107f90615421565b6001600160a01b03919091166000908152602160205260409020805460ff1916911515919091179055565b600d546040805163fb10d6fb60e01b815290516000926001600160a01b03169163fb10d6fb916004808301926020929190829003018186803b1580156111ed57600080fd5b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b60075490565b60606000613581610fb4565b6001600160a01b031614156135a85760405162461bcd60e51b815260040161107f90614e91565b600d546001600160a01b03166341ac82b06135c1610fb4565b6040518263ffffffff1660e01b81526004016135dd9190614aab565b60206040518083038186803b1580156135f557600080fd5b505afa158015613609573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061362d91906148c2565b6136495760405162461bcd60e51b815260040161107f90614c77565b600d546001600160a01b0316635759fb02611374610fb4565b61366a610fb4565b6005546001600160a01b039081169116146136975760405162461bcd60e51b815260040161107f90615421565b6001600160a01b0381166136bd5760405162461bcd60e51b815260040161107f90614cd3565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b600d54604080516327b3bf1160e01b815290516000926001600160a01b0316916327b3bf11916004808301926020929190829003018186803b1580156111ed57600080fd5b600d5460405163112469f960e21b81526000916001600160a01b031690634491a7e4906126df908590600401614aab565b600d546000906001600160a01b031663e599ef5b6126c1610fb4565b600d5460408051636f60a39360e11b815290516000926001600160a01b03169163dec14726916004808301926020929190829003018186803b1580156111ed57600080fd5b600d54604080516385c44d9d60e01b815290516000926001600160a01b0316916385c44d9d916004808301926020929190829003018186803b15801561383557600080fd5b505afa158015613849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122591906148c2565b600d5460405163e599ef5b60e01b81526000916001600160a01b03169063e599ef5b906124e89086908690600401614abf565b6138a8610fb4565b6005546001600160a01b039081169116146138d55760405162461bcd60e51b815260040161107f90615421565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000613901610fb4565b90506001600160a01b0381166139295760405162461bcd60e51b815260040161107f90614def565b6001600160a01b03811660009081526021602052604090205460ff16156139625760405162461bcd60e51b815260040161107f9061504a565b6010546001600160a01b0382811691161480159061398e57506011546001600160a01b03828116911614155b80156139a857506012546001600160a01b03828116911614155b6139c45760405162461bcd60e51b815260040161107f9061548b565b600d546040516329b8573160e21b81526000916001600160a01b03169063a6e15cc4906139f79085908790600401614abf565b60206040518083038186803b158015613a0f57600080fd5b505afa158015613a23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a4791906149e1565b905060008111613a695760405162461bcd60e51b815260040161107f906153c4565b601b54610100900460ff1615613ac55760185460009015613ab757613a9e6064611a9660185485613fdf90919063ffffffff16565b601254909150613ab7906001600160a01b031682614066565b613ac18183615909565b9150505b601154613adc906001600160a01b031630836140b5565b600d54604051631ce9de7b60e21b81526001600160a01b03909116906373a779ec906123e99085908790600401614abf565b600080613b1b83856158b2565b90508381101561159d5760405162461bcd60e51b815260040161107f90614db8565b6001600160a01b038316613b635760405162461bcd60e51b815260040161107f9061558a565b6001600160a01b038216613b895760405162461bcd60e51b815260040161107f90614d19565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590613be49085906157c3565b60405180910390a3505050565b6006546001600160a01b03841660009081526008602052604081205490918391613c1b90866158ea565b613c2591906158ca565b613c2f9190615909565b949350505050565b80471015613c575760405162461bcd60e51b815260040161107f90614fc8565b6000826001600160a01b031682604051613c7090614aa8565b60006040518083038185875af1925050503d8060008114613cad576040519150601f19603f3d011682016040523d82523d6000602084013e613cb2565b606091505b5050905080611b5c5760405162461bcd60e51b815260040161107f90614f0e565b6001600160a01b03831660009081526021602052604090205460ff16158015613d1557506001600160a01b03821660009081526021602052604090205460ff16155b613d315760405162461bcd60e51b815260040161107f90615183565b6001600160a01b038316613d575760405162461bcd60e51b815260040161107f906154e8565b6001600160a01b038216613d7d5760405162461bcd60e51b815260040161107f90614bff565b613d85612a8a565b6001600160a01b0316836001600160a01b031614158015613db45750600f546001600160a01b03838116911614155b8015613dce5750600e546001600160a01b03838116911614155b8015613de357506001600160a01b0382163014155b8015613df857506001600160a01b0383163014155b15613f1757601d5460ff16613e1f5760405162461bcd60e51b815260040161107f9061572f565b6010546001600160a01b03838116911614801590613e4b57506011546001600160a01b03838116911614155b8015613e6557506012546001600160a01b03838116911614155b8015613e7f57506010546001600160a01b03848116911614155b8015613e9957506011546001600160a01b03848116911614155b8015613eb357506012546001600160a01b03848116911614155b15613f17576000613ec26113f3565b90506000613ecf8461260b565b9050613eec612710611a9660205485613fdf90919063ffffffff16565b613ef68483613b0e565b1115613f145760405162461bcd60e51b815260040161107f9061552d565b50505b611b5c8383836140b5565b60008184841115613f465760405162461bcd60e51b815260040161107f9190614b8f565b506000613f538486615909565b95945050505050565b611b5c8363a9059cbb60e01b8484604051602401613f7b929190614abf565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261446f565b600082613fee575060006110c7565b6000613ffa83856158ea565b90508261400785836158ca565b1461159d5760405162461bcd60e51b815260040161107f90615383565b600061159d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506144fe565b4761407082614320565b600061407c478361425d565b6040519091506001600160a01b0385169082156108fc029083906000818181858888f19350505050158015611e5c573d6000803e3d6000fd5b6001600160a01b0383166140db5760405162461bcd60e51b815260040161107f906154e8565b6001600160a01b0382166141015760405162461bcd60e51b815260040161107f90614bff565b61410c838383611b5c565b614149816040518060600160405280602681526020016159da602691396001600160a01b0386166000908152602081905260409020549190613f22565b6001600160a01b0380851660009081526020819052604080822093909355908416815220546141789082613b0e565b6001600160a01b0380841660008181526020819052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90613be49085906157c3565b6001600160a01b03821660009081526022602052604090205460ff16151581151514156142095760405162461bcd60e51b815260040161107f90615126565b6001600160a01b038216600081815260226020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b600061159d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613f22565b60006142ac826002614024565b905060006142ba838361425d565b9050476142c683614320565b60006142d2478361425d565b90506142de838261452c565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516143119392919061583c565b60405180910390a15050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061436357634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600e54604080516339d94ae160e11b8152905191909316926373b295c2926004808301939192829003018186803b1580156143b757600080fd5b505afa1580156143cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143ef9190614759565b8160018151811061441057634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600e546144369130911684613b3d565b600e54604051633b158ab160e11b81526001600160a01b039091169063762b1562906128b19085906000908690309042906004016157cc565b60006144c4826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166145d39092919063ffffffff16565b805190915015611b5c57808060200190518101906144e291906148c2565b611b5c5760405162461bcd60e51b815260040161107f9061569a565b6000818361451f5760405162461bcd60e51b815260040161107f9190614b8f565b506000613f5384866158ca565b600e546145449030906001600160a01b031684613b3d565b600e54604051637c8d9fb960e11b81526001600160a01b039091169063f91b3f729083906145819030908790600090819081904290600401614b24565b6060604051808303818588803b15801561459a57600080fd5b505af11580156145ae573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611e5c91906149f9565b6060613c2f8484600085856145e78561467c565b6146035760405162461bcd60e51b815260040161107f906155ce565b600080866001600160a01b0316858760405161461f9190614a8c565b60006040518083038185875af1925050503d806000811461465c576040519150601f19603f3d011682016040523d82523d6000602084013e614661565b606091505b5091509150614671828286614682565b979650505050505050565b3b151590565b6060831561469157508161159d565b8251156146a15782518084602001fd5b8160405162461bcd60e51b815260040161107f9190614b8f565b600082601f8301126146cb578081fd5b8135602067ffffffffffffffff8211156146e7576146e761599d565b8082026146f5828201615860565b83815282810190868401838801850189101561470f578687fd5b8693505b85841015614731578035835260019390930192918401918401614713565b50979650505050505050565b60006020828403121561474e578081fd5b813561159d816159b3565b60006020828403121561476a578081fd5b815161159d816159b3565b60008060408385031215614787578081fd5b8235614792816159b3565b915060208301356147a2816159b3565b809150509250929050565b6000806000606084860312156147c1578081fd5b83356147cc816159b3565b925060208401356147dc816159b3565b929592945050506040919091013590565b600080604083850312156147ff578182fd5b823561480a816159b3565b915060208301356147a2816159cb565b6000806040838503121561482c578182fd5b8235614837816159b3565b946020939093013593505050565b60008060408385031215614857578182fd5b823567ffffffffffffffff8082111561486e578384fd5b61487a868387016146bb565b9350602085013591508082111561488f578283fd5b5061489c858286016146bb565b9150509250929050565b6000602082840312156148b7578081fd5b813561159d816159cb565b6000602082840312156148d3578081fd5b815161159d816159cb565b6000602082840312156148ef578081fd5b815167ffffffffffffffff811115614905578182fd5b8201601f81018413614915578182fd5b80516149286149238261588a565b615860565b81815285602083850101111561493c578384fd5b613f53826020830160208601615920565b6000806040838503121561495f578182fd5b823567ffffffffffffffff811115614975578283fd5b8301601f81018513614985578283fd5b80356149936149238261588a565b8181528660208385010111156149a7578485fd5b8160208401602083013790810160209081019490945295939092013593505050565b6000602082840312156149da578081fd5b5035919050565b6000602082840312156149f2578081fd5b5051919050565b600080600060608486031215614a0d578081fd5b8351925060208401519150604084015190509250925092565b6000815180845260208085019450808401835b83811015614a5557815187529582019590820190600101614a39565b509495945050505050565b60008151808452614a78816020860160208601615920565b601f01601f19169290920160200192915050565b60008251614a9e818460208701615920565b9190910192915050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0392831681529116602082015260400190565b60006001600160a01b038516825260606020830152614b146060830185614a60565b9050826040830152949350505050565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600060408252614b726040830185614a26565b8281036020840152613f538185614a26565b901515815260200190565b60006020825261159d6020830184614a60565b60208082526032908201527f435348543a20667574757220616e642072657761726473506f6f6c2063616e6e60408201527f6f7420636173686f757420726577617264730000000000000000000000000000606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252818101527f6e6577546965724c6576656c73206c656e6774682068617320746f2062652036604082015260600190565b6020808252600d908201526c2727902727a2229027aba722a960991b604082015260600190565b6020808252818101527f4e4f4445204352454154494f4e3a204e414d452053495a4520494e56414c4944604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252603c908201527f4e4f4445204352454154494f4e3a2066757475722c2064657620616e6420726560408201527f7761726473506f6f6c2063616e6e6f7420637265617465206e6f646500000000606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526025908201527f435348543a20206372656174696f6e2066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252603d908201527f4d414e494120435348543a2066757475722c2064657620616e6420726577617260408201527f6473506f6f6c2063616e6e6f7420636173686f75742072657761726473000000606082015260800190565b60208082526014908201527f53454e4445522043414e2754204245205a45524f000000000000000000000000604082015260600190565b60208082526026908201527f5061796d656e7453706c69747465723a206163636f756e7420686173206e6f2060408201526573686172657360d01b606082015260800190565b6020808252603a908201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260408201527f6563697069656e74206d61792068617665207265766572746564000000000000606082015260800190565b6020808252602e908201527f435348543a20596f7520646f6e2774206861766520656e6f756768207265776160408201527f726420746f2063617368206f7574000000000000000000000000000000000000606082015260800190565b6020808252601d908201527f416464726573733a20696e73756666696369656e742062616c616e6365000000604082015260600190565b6020808252602b908201527f5061796d656e7453706c69747465723a206163636f756e74206973206e6f742060408201526a191d59481c185e5b595b9d60aa1b606082015260800190565b6020808252601f908201527f4d414e494120435348543a20426c61636b6c6973746564206164647265737300604082015260600190565b60208082526028908201527f544b4e3a2054686520726f7574657220616c7265616479206861732074686174604082015267206164647265737360c01b606082015260800190565b60208082526030908201527f4e4f4445204352454154494f4e3a204e6f64652056616c75652073657420626560408201527f6c6f77206e6f64654d696e507269636500000000000000000000000000000000606082015260800190565b6020808252603d908201527f544b4e3a204175746f6d61746564206d61726b6574206d616b6572207061697260408201527f20697320616c72656164792073657420746f20746861742076616c7565000000606082015260800190565b60208082526013908201527f426c61636b6c6973746564206164647265737300000000000000000000000000604082015260600190565b6020808252604a908201527f544b4e3a205468652050616e63616b655377617020706169722063616e6e6f7460408201527f2062652072656d6f7665642066726f6d206175746f6d617465644d61726b65746060820152694d616b6572506169727360b01b608082015260a00190565b60208082526022908201527f4e4f4445204352454154494f4e3a20426c61636b6c6973746564206164647265604082015261737360f01b606082015260800190565b60208082526034908201527f4d414e494120435348543a20596f7520646f6e2774206861766520656e6f756760408201527f682072657761726420746f20636f6d706f756e64000000000000000000000000606082015260800190565b60208082526038908201527f4d414e494120435348543a20667574757220616e642072657761726473506f6f60408201527f6c2063616e6e6f7420636173686f757420726577617264730000000000000000606082015260800190565b6020808252602e908201527f4e4f4445204352454154494f4e3a20206372656174696f6e2066726f6d20746860408201527f65207a65726f2061646472657373000000000000000000000000000000000000606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526038908201527f435348543a20596f7520646f6e2774206861766520656e6f756768207265776160408201527f726420746f20636f6d706f756e6420796f7572206e6f64650000000000000000606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252818101527f6e657754696572536c6f706573206c656e6774682068617320746f2062652036604082015260600190565b60208082526036908201527f435348543a2066757475722c2064657620616e642072657761726473506f6f6c60408201527f2063616e6e6f7420636f6d706f756e64206e6f64657300000000000000000000606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526033908201527f53544f5020545259494e4720544f204245434f4d452041205748414c452e205760408201527f45204b4e4f572057484f20594f55204152452e00000000000000000000000000606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b60208082526017908201527f74726164696e6720697320616c7265616479206f70656e000000000000000000604082015260600190565b602080825260409082018190527f4e4f4445204352454154494f4e3a2042616c616e636520746f6f206c6f772066908201527f6f72206372656174696f6e2e20557365206c6f77657220696e697456616c7565606082015260800190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252602b908201527f4d414e494120435348543a20206372656174696f6e2066726f6d20746865207a60408201526a65726f206164647265737360a81b606082015260800190565b60208082526018908201527f54726164696e67206e6f742079657420656e61626c65642e0000000000000000604082015260600190565b60208082526034908201527f4d414e494120435348543a20596f7520646f6e2774206861766520656e6f756760408201527f682072657761726420746f2063617368206f7574000000000000000000000000606082015260800190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b8181101561581b5784516001600160a01b0316835293830193918301916001016157f6565b50506001600160a01b03969096166060850152505050608001529392505050565b9283526020830191909152604082015260600190565b60ff91909116815260200190565b60405181810167ffffffffffffffff811182821017156158825761588261599d565b604052919050565b600067ffffffffffffffff8211156158a4576158a461599d565b50601f01601f191660200190565b600082198211156158c5576158c5615987565b500190565b6000826158e557634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561590457615904615987565b500290565b60008282101561591b5761591b615987565b500390565b60005b8381101561593b578181015183820152602001615923565b8381111561243b5750506000910152565b60028104600182168061596057607f821691505b6020821081141561598157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146159c857600080fd5b50565b80151581146159c857600080fdfe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212202b82c9fe6a83988a5de3a1d8ea661d6db1b7f67acafce5af99d08d4f6bdada6664736f6c63430008000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000060ae616a2155ee3d9a68541ba4544862310933d40000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000100000000000000000000000083afb767d827c6fbaa294e2e54494cbc5df4c0d800000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000007f6ec9b196128e5e9bf6de4cf4c92ff7bfeacddb000000000000000000000000506ddeec475b43f48786e04608b5f8d7f9c3c690000000000000000000000000a40ccdbc4a30fbf0dc3c179f07913f2fd76f36fc000000000000000000000000a8cc43ab09ee6ef2afdad7c3d4804350f4c43b99000000000000000000000000f0634fb057058e350f43a10872c88818e96c0aec000000000000000000000000051d6213f7186f31f40f3e2ac9e7c8c682fdf1c90000000000000000000000000f21e7929e33486931a788655245f9999c15c708000000000000000000000000df974829f6d977370b21e065ae445390cb9d010c000000000000000000000000024b938af25ed40e515d87366ba4cf95d38a826e00000000000000000000000083afb767d827c6fbaa294e2e54494cbc5df4c0d8000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000009896800000000000000000000000000000000000000000000000000000000000989680000000000000000000000000000000000000000000000000000000000098968000000000000000000000000000000000000000000000000000000000009896800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001443fd00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004c4b400000000000000000000000000000000000000000000000000000000000e4e1c00000000000000000000000000000000000000000000000000000000023c34600
-----Decoded View---------------
Arg [0] : payees (address[]): 0x83afB767D827C6fbaa294E2e54494cBC5DF4C0D8
Arg [1] : shares (uint256[]): 1
Arg [2] : addresses (address[]): 0x7F6eC9B196128e5E9bF6DE4cF4C92FF7BfeacDdB,0x506DdEEc475b43F48786e04608b5f8D7F9C3C690,0xa40cCDbc4a30FBF0dC3c179F07913f2fd76f36Fc,0xA8cc43ab09Ee6ef2afDAd7c3D4804350F4c43B99,0xf0634Fb057058E350f43A10872c88818E96C0AEc,0x051d6213F7186F31f40f3E2aC9e7c8c682fDF1C9,0x0F21e7929e33486931A788655245f9999c15c708,0xdf974829f6D977370B21e065ae445390cb9D010C,0x024b938AF25ed40E515d87366BA4CF95D38a826E,0x83afB767D827C6fbaa294E2e54494cBC5DF4C0D8
Arg [3] : balances (uint256[]): 10000000,10000000,10000000,10000000,0,340000000,0,5000000,15000000,600000000
Arg [4] : uniV2Router (address): 0x60aE616a2155Ee3d9A68541Ba4544862310933d4
Arg [5] : snipeBlkAmt (uint256): 20
-----Encoded View---------------
32 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [3] : 00000000000000000000000000000000000000000000000000000000000002a0
Arg [4] : 00000000000000000000000060ae616a2155ee3d9a68541ba4544862310933d4
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [7] : 00000000000000000000000083afb767d827c6fbaa294e2e54494cbc5df4c0d8
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [10] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [11] : 0000000000000000000000007f6ec9b196128e5e9bf6de4cf4c92ff7bfeacddb
Arg [12] : 000000000000000000000000506ddeec475b43f48786e04608b5f8d7f9c3c690
Arg [13] : 000000000000000000000000a40ccdbc4a30fbf0dc3c179f07913f2fd76f36fc
Arg [14] : 000000000000000000000000a8cc43ab09ee6ef2afdad7c3d4804350f4c43b99
Arg [15] : 000000000000000000000000f0634fb057058e350f43a10872c88818e96c0aec
Arg [16] : 000000000000000000000000051d6213f7186f31f40f3e2ac9e7c8c682fdf1c9
Arg [17] : 0000000000000000000000000f21e7929e33486931a788655245f9999c15c708
Arg [18] : 000000000000000000000000df974829f6d977370b21e065ae445390cb9d010c
Arg [19] : 000000000000000000000000024b938af25ed40e515d87366ba4cf95d38a826e
Arg [20] : 00000000000000000000000083afb767d827c6fbaa294e2e54494cbc5df4c0d8
Arg [21] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [22] : 0000000000000000000000000000000000000000000000000000000000989680
Arg [23] : 0000000000000000000000000000000000000000000000000000000000989680
Arg [24] : 0000000000000000000000000000000000000000000000000000000000989680
Arg [25] : 0000000000000000000000000000000000000000000000000000000000989680
Arg [26] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [27] : 000000000000000000000000000000000000000000000000000000001443fd00
Arg [28] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [29] : 00000000000000000000000000000000000000000000000000000000004c4b40
Arg [30] : 0000000000000000000000000000000000000000000000000000000000e4e1c0
Arg [31] : 0000000000000000000000000000000000000000000000000000000023c34600
Deployed Bytecode Sourcemap
77127:22171:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51031:40;51047:12;:10;:12::i;:::-;51061:9;51031:40;;;;;;;:::i;:::-;;;;;;;;77127:22171;;;;;34365:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;81463:166;;;;;;;;;;-1:-1:-1;81463:166:0;;;;;:::i;:::-;;:::i;:::-;;36617:194;;;;;;;;;;-1:-1:-1;36617:194:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;94965:321::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;81128:104::-;;;;;;;;;;-1:-1:-1;81128:104:0;;;;;:::i;:::-;;:::i;77632:24::-;;;;;;;;;;;;;:::i;97083:321::-;;;;;;;;;;;;;:::i;77271:35::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;35485:108::-;;;;;;;;;;;;;:::i;52837:616::-;;;;;;;;;;-1:-1:-1;52837:616:0;;;;;:::i;:::-;;:::i;78026:46::-;;;;;;;;;;-1:-1:-1;78026:46:0;;;;;:::i;:::-;;:::i;37293:454::-;;;;;;;;;;-1:-1:-1;37293:454:0;;;;;:::i;:::-;;:::i;77532:25::-;;;;;;;;;;;;;:::i;35327:93::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;38156:288::-;;;;;;;;;;-1:-1:-1;38156:288:0;;;;;:::i;:::-;;:::i;51162:91::-;;;;;;;;;;;;;:::i;52291:155::-;;;;;;;;;;-1:-1:-1;52291:155:0;;;;;:::i;:::-;;:::i;94334:180::-;;;;;;;;;;-1:-1:-1;94334:180:0;;;;;:::i;:::-;;:::i;81637:173::-;;;;;;;;;;-1:-1:-1;81637:173:0;;;;;:::i;:::-;;:::i;53721:700::-;;;;;;;;;;-1:-1:-1;53721:700:0;;;;;:::i;:::-;;:::i;98744:125::-;;;;;;;;;;;;;:::i;77315:28::-;;;;;;;;;;;;;:::i;89841:1069::-;;;;;;;;;;;;;:::i;77564:31::-;;;;;;;;;;;;;:::i;92054:1096::-;;;;;;;;;;;;;:::i;94524:96::-;;;;;;;;;;-1:-1:-1;94524:96:0;;;;;:::i;:::-;;:::i;96687:131::-;;;;;;;;;;-1:-1:-1;96687:131:0;;;;;:::i;:::-;;:::i;97751:333::-;;;;;;;;;;;;;:::i;77833:31::-;;;;;;;;;;;;;:::i;99200:93::-;;;;;;;;;;-1:-1:-1;99200:93:0;;;;;:::i;:::-;;:::i;80519:482::-;;;;;;;;;;-1:-1:-1;80519:482:0;;;;;:::i;:::-;;:::i;88742:1091::-;;;;;;;;;;-1:-1:-1;88742:1091:0;;;;;:::i;:::-;;:::i;81009:111::-;;;;;;;;;;-1:-1:-1;81009:111:0;;;;;:::i;:::-;;:::i;81988:97::-;;;;;;;;;;-1:-1:-1;81988:97:0;;;;;:::i;:::-;;:::i;93783:205::-;;;;;;;;;;-1:-1:-1;93783:205:0;;;;;:::i;:::-;;:::i;77665:25::-;;;;;;;;;;;;;:::i;98434:200::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;35656:157::-;;;;;;;;;;-1:-1:-1;35656:157:0;;;;;:::i;:::-;;:::i;29580:148::-;;;;;;;;;;;;;:::i;93583:192::-;;;;;;;;;;-1:-1:-1;93583:192:0;;;;;:::i;:::-;;:::i;77217:45::-;;;;;;;;;;;;;:::i;95929:133::-;;;;;;;;;;-1:-1:-1;95929:133:0;;;;;:::i;:::-;;:::i;95294:143::-;;;;;;;;;;-1:-1:-1;95294:143:0;;;;;:::i;:::-;;:::i;95445:353::-;;;;;;;;;;-1:-1:-1;95445:353:0;;;;;:::i;:::-;;:::i;77453:70::-;;;;;;;;;;;;;:::i;96070:119::-;;;;;;;;;;;;;:::i;98642:94::-;;;;;;;;;;;;;:::i;81818:162::-;;;;;;;;;;-1:-1:-1;81818:162:0;;;;;:::i;:::-;;:::i;52537:100::-;;;;;;;;;;-1:-1:-1;52537:100:0;;;;;:::i;:::-;;:::i;82093:92::-;;;;;;;;;;-1:-1:-1;82093:92:0;;;;;:::i;:::-;;:::i;28938:79::-;;;;;;;;;;;;;:::i;81345:110::-;;;;;;;;;;-1:-1:-1;81345:110:0;;;;;:::i;:::-;;:::i;34584:104::-;;;;;;;;;;;;;:::i;52013:109::-;;;;;;;;;;-1:-1:-1;52013:109:0;;;;;:::i;:::-;;:::i;82294:313::-;;;;;;;;;;-1:-1:-1;82294:313:0;;;;;:::i;:::-;;:::i;96197:121::-;;;;;;;;;;-1:-1:-1;96197:121:0;;;;;:::i;:::-;;:::i;98877:125::-;;;;;;;;;;;;;:::i;38947:388::-;;;;;;;;;;-1:-1:-1;38947:388:0;;;;;:::i;:::-;;:::i;77350:27::-;;;;;;;;;;;;;:::i;36026:200::-;;;;;;;;;;-1:-1:-1;36026:200:0;;;;;:::i;:::-;;:::i;94158:166::-;;;;;;;;;;-1:-1:-1;94158:166:0;;;;;:::i;:::-;;:::i;77602:23::-;;;;;;;;;;;;;:::i;81240:97::-;;;;;;;;;;-1:-1:-1;81240:97:0;;;;;:::i;:::-;;:::i;77422:22::-;;;;;;;;;;;;;:::i;78079:57::-;;;;;;;;;;-1:-1:-1;78079:57:0;;;;;:::i;:::-;;:::i;94777:180::-;;;;;;;;;;-1:-1:-1;94777:180:0;;;;;:::i;:::-;;:::i;86085:2649::-;;;;;;;;;;-1:-1:-1;86085:2649:0;;;;;:::i;:::-;;:::i;97412:331::-;;;;;;;;;;;;;:::i;77384:31::-;;;;;;;;;;;;;:::i;99010:182::-;;;;;;;;;;;;;:::i;51809:105::-;;;;;;;;;;-1:-1:-1;51809:105:0;;;;;:::i;:::-;;:::i;82193:93::-;;;;;;;;;;-1:-1:-1;82193:93:0;;;;;:::i;:::-;;:::i;96443:120::-;;;;;;;;;;-1:-1:-1;96443:120:0;;;;;:::i;:::-;;:::i;95806:115::-;;;;;;;;;;;;;:::i;93996:154::-;;;;;;;;;;;;;:::i;51599:119::-;;;;;;;;;;-1:-1:-1;51599:119:0;;;;;:::i;:::-;;:::i;82615:141::-;;;;;;;;;;-1:-1:-1;82615:141:0;;;;;:::i;:::-;;:::i;96952:123::-;;;;;;;;;;;;;:::i;36289:181::-;;;;;;;;;;-1:-1:-1;36289:181:0;;;;;:::i;:::-;;:::i;51347:95::-;;;;;;;;;;;;;:::i;98092:334::-;;;;;;;;;;;;;:::i;29883:281::-;;;;;;;;;;-1:-1:-1;29883:281:0;;;;;:::i;:::-;;:::i;96326:109::-;;;;;;;;;;;;;:::i;94628:141::-;;;;;;;;;;-1:-1:-1;94628:141:0;;;;;:::i;:::-;;:::i;93158:198::-;;;;;;;;;;-1:-1:-1;93158:198:0;;;;;:::i;:::-;;:::i;96826:118::-;;;;;;;;;;;;;:::i;96571:108::-;;;;;;;;;;;;;:::i;93364:211::-;;;;;;;;;;-1:-1:-1;93364:211:0;;;;;:::i;:::-;;:::i;80366:145::-;;;;;;;;;;-1:-1:-1;80366:145:0;;;;;:::i;:::-;;:::i;90920:1124::-;;;;;;;;;;-1:-1:-1;90920:1124:0;;;;;:::i;:::-;;:::i;28195:98::-;28275:10;28195:98;:::o;34365:100::-;34419:13;34452:5;34445:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34365:100;:::o;81463:166::-;29160:12;:10;:12::i;:::-;29150:6;;-1:-1:-1;;;;;29150:6:0;;;:22;;;29142:67;;;;-1:-1:-1;;;29142:67:0;;;;;;;:::i;:::-;;;;;;;;;81534:10:::1;:18:::0;;;81612:8:::1;::::0;81590:16:::1;::::0;81575:46:::1;::::0;81612:8;81575:32:::1;::::0;81547:5;;81575:14:::1;:32::i;:::-;:36:::0;::::1;:46::i;:::-;81563:9;:58:::0;-1:-1:-1;81463:166:0:o;36617:194::-;36720:4;36742:39;36751:12;:10;:12::i;:::-;36765:7;36774:6;36742:8;:39::i;:::-;-1:-1:-1;36799:4:0;36617:194;;;;;:::o;94965:321::-;95013:7;;95041:12;:10;:12::i;:::-;-1:-1:-1;;;;;95041:26:0;;;95033:59;;;;-1:-1:-1;;;95033:59:0;;;;;;;:::i;:::-;95125:17;;-1:-1:-1;;;;;95125:17:0;:30;95156:12;:10;:12::i;:::-;95125:44;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;95103:107;;;;-1:-1:-1;;;95103:107:0;;;;;;;:::i;:::-;95228:17;;-1:-1:-1;;;;;95228:17:0;:36;95265:12;:10;:12::i;:::-;95228:50;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;95221:57;;94965:321;:::o;81128:104::-;29160:12;:10;:12::i;:::-;29150:6;;-1:-1:-1;;;;;29150:6:0;;;:22;;;29142:67;;;;-1:-1:-1;;;29142:67:0;;;;;;;:::i;:::-;81205:12:::1;:19:::0;;-1:-1:-1;;;;;;81205:19:0::1;-1:-1:-1::0;;;;;81205:19:0;;;::::1;::::0;;;::::1;::::0;;81128:104::o;77632:24::-;;;;:::o;97083:321::-;97129:13;97187:1;97163:12;:10;:12::i;:::-;-1:-1:-1;;;;;97163:26:0;;;97155:59;;;;-1:-1:-1;;;97155:59:0;;;;;;;:::i;:::-;97247:17;;-1:-1:-1;;;;;97247:17:0;:30;97278:12;:10;:12::i;:::-;97247:44;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;97225:107;;;;-1:-1:-1;;;97225:107:0;;;;;;;:::i;:::-;97350:17;;-1:-1:-1;;;;;97350:17:0;:32;97383:12;:10;:12::i;:::-;97350:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;97350:46:0;;;;;;;;;;;;:::i;77271:35::-;;;-1:-1:-1;;;;;77271:35:0;;:::o;35485:108::-;35573:12;;35485:108;:::o;52837:616::-;-1:-1:-1;;;;;52913:16:0;;52932:1;52913:16;;;:7;:16;;;;;;52905:71;;;;-1:-1:-1;;;52905:71:0;;;;;;;:::i;:::-;52989:21;53037:15;:13;:15::i;:::-;53013:39;;:21;:39;:::i;:::-;52989:63;;53063:15;53081:108;53111:7;53133:13;53161:17;53170:7;53161:8;:17::i;:::-;53081:15;:108::i;:::-;53063:126;-1:-1:-1;53210:12:0;53202:68;;;;-1:-1:-1;;;53202:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;53283:18:0;;;;;;:9;:18;;;;;:29;;53305:7;;53283:18;:29;;53305:7;;53283:29;:::i;:::-;;;;;;;;53341:7;53323:14;;:25;;;;;;;:::i;:::-;;;;-1:-1:-1;53361:35:0;;-1:-1:-1;53379:7:0;53388;53361:17;:35::i;:::-;53412:33;53428:7;53437;53412:33;;;;;;;:::i;:::-;;;;;;;;52837:616;;;:::o;78026:46::-;;;;;;;;;;;;;;;:::o;37293:454::-;37433:4;37450:36;37460:6;37468:9;37479:6;37450:9;:36::i;:::-;37497:220;37520:6;37541:12;:10;:12::i;:::-;37568:138;37624:6;37568:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37568:19:0;;;;;;:11;:19;;;;;;37588:12;:10;:12::i;:::-;-1:-1:-1;;;;;37568:33:0;;;;;;;;;;;;-1:-1:-1;37568:33:0;;;:138;:37;:138::i;:::-;37497:8;:220::i;:::-;-1:-1:-1;37735:4:0;37293:454;;;;;;:::o;77532:25::-;;;;:::o;35327:93::-;35410:2;35327:93;:::o;38156:288::-;38259:4;38281:133;38304:12;:10;:12::i;:::-;38331:7;38353:50;38392:10;38353:11;:25;38365:12;:10;:12::i;:::-;-1:-1:-1;;;;;38353:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;38353:25:0;;;:34;;;;;;;;;;;:38;:50::i;51162:91::-;51233:12;;51162:91;:::o;52291:155::-;-1:-1:-1;;;;;52408:21:0;;;52376:7;52408:21;;;:14;:21;;;;;;;;:30;;;;;;;;;;;;;52291:155::o;94334:180::-;29160:12;:10;:12::i;:::-;29150:6;;-1:-1:-1;;;;;29150:6:0;;;:22;;;29142:67;;;;-1:-1:-1;;;29142:67:0;;;;;;;:::i;:::-;94409:21:::1;94400:6;:30;94396:66;;;-1:-1:-1::0;94441:21:0::1;94396:66;94481:7;:5;:7::i;:::-;-1:-1:-1::0;;;;;94473:25:0::1;:33;94499:6;94473:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;94334:180:::0;:::o;81637:173::-;29160:12;:10;:12::i;:::-;29150:6;;-1:-1:-1;;;;;29150:6:0;;;:22;;;29142:67;;;;-1:-1:-1;;;29142:67:0;;;;;;;:::i;:::-;81709:16:::1;:24:::0;;;81793:8:::1;::::0;81756:10:::1;::::0;:46:::1;::::0;81793:8;81756:32:::1;::::0;81728:5;81756:14:::1;:32::i;53721:700::-:0;-1:-1:-1;;;;;53803:16:0;;53822:1;53803:16;;;:7;:16;;;;;;53795:71;;;;-1:-1:-1;;;53795:71:0;;;;;;;:::i;:::-;53879:21;53945:20;53959:5;53945:13;:20::i;:::-;53903:30;;-1:-1:-1;;;53903:30:0;;-1:-1:-1;;;;;53903:15:0;;;;;:30;;53927:4;;53903:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:62;;;;:::i;:::-;53879:86;;53976:15;53994:115;54024:7;54046:13;54074:24;54083:5;54090:7;54074:8;:24::i;53994:115::-;53976:133;-1:-1:-1;54130:12:0;54122:68;;;;-1:-1:-1;;;54122:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;54203:21:0;;;;;;;:14;:21;;;;;;;;:30;;;;;;;;;;;:41;;54237:7;;54203:21;:41;;54237:7;;54203:41;:::i;:::-;;;;-1:-1:-1;;;;;;;54255:26:0;;;;;;:19;:26;;;;;:37;;54285:7;;54255:26;:37;;54285:7;;54255:37;:::i;:::-;;;;-1:-1:-1;54305:47:0;;-1:-1:-1;54328:5:0;54335:7;54344;54305:22;:47::i;:::-;54389:5;-1:-1:-1;;;;;54368:45:0;;54396:7;54405;54368:45;;;;;;;:::i;:::-;;;;;;;;53721:700;;;;:::o;98744:125::-;98824:17;;:37;;;-1:-1:-1;;;98824:37:0;;;;98797:7;;-1:-1:-1;;;;;98824:17:0;;:35;;:37;;;;;;;;;;;;;;:17;:37;;;;;;;;;;77315:28;;;-1:-1:-1;;;;;77315:28:0;;:::o;89841:1069::-;89881:14;89898:12;:10;:12::i;:::-;89881:29;-1:-1:-1;;;;;;89943:20:0;;89921:113;;;;-1:-1:-1;;;89921:113:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;90054:22:0;;;;;;:14;:22;;;;;;;;90053:23;90045:67;;;;-1:-1:-1;;;90045:67:0;;;;;;;:::i;:::-;90155:12;;-1:-1:-1;;;;;90145:22:0;;;90155:12;;90145:22;;;;:52;;-1:-1:-1;90181:16:0;;-1:-1:-1;;;;;90171:26:0;;;90181:16;;90171:26;;90145:52;90123:158;;;;-1:-1:-1;;;90123:158:0;;;;;;;:::i;:::-;90315:17;;:44;;-1:-1:-1;;;90315:44:0;;90292:20;;-1:-1:-1;;;;;90315:17:0;;:36;;:44;;90352:6;;90315:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;90292:67;;90407:1;90392:12;:16;90370:118;;;;-1:-1:-1;;;90370:118:0;;;;;;;:::i;:::-;90503:11;;;;;;;90499:279;;;90567:10;;90531:17;;90567:14;90563:164;;90614:37;90647:3;90614:28;90631:10;;90614:12;:16;;:28;;;;:::i;:::-;:32;;:37::i;:::-;90687:12;;90602:49;;-1:-1:-1;90670:41:0;;-1:-1:-1;;;;;90687:12:0;90602:49;90670:16;:41::i;:::-;90741:25;90757:9;90741:25;;:::i;:::-;;;90499:279;;90804:16;;90788:55;;-1:-1:-1;;;;;90804:16:0;90822:6;90830:12;90788:15;:55::i;:::-;90854:17;;:48;;-1:-1:-1;;;90854:48:0;;-1:-1:-1;;;;;90854:17:0;;;;:40;;:48;;90895:6;;90854:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;89841:1069;;:::o;77564:31::-;;;;:::o;92054:1096::-;92099:14;92116:12;:10;:12::i;:::-;92099:29;-1:-1:-1;;;;;;92161:20:0;;92139:113;;;;-1:-1:-1;;;92139:113:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;92272:22:0;;;;;;:14;:22;;;;;;;;92271:23;92263:67;;;;-1:-1:-1;;;92263:67:0;;;;;;;:::i;:::-;92373:12;;-1:-1:-1;;;;;92363:22:0;;;92373:12;;92363:22;;;;:52;;-1:-1:-1;92399:16:0;;-1:-1:-1;;;;;92389:26:0;;;92399:16;;92389:26;;92363:52;:73;;;;-1:-1:-1;92429:7:0;;-1:-1:-1;;;;;92419:17:0;;;92429:7;;92419:17;;92363:73;92341:184;;;;-1:-1:-1;;;92341:184:0;;;;;;;:::i;:::-;92559:17;;:44;;-1:-1:-1;;;92559:44:0;;92536:20;;-1:-1:-1;;;;;92559:17:0;;:36;;:44;;92596:6;;92559:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;92536:67;;92651:1;92636:12;:16;92614:118;;;;-1:-1:-1;;;92614:118:0;;;;;;;:::i;:::-;92747:11;;;;;;;92743:274;;;92811:10;;92775:17;;92811:14;92807:159;;92858:37;92891:3;92858:28;92875:10;;92858:12;:16;;:28;;;;:::i;:37::-;92931:7;;92846:49;;-1:-1:-1;92914:36:0;;-1:-1:-1;;;;;92931:7:0;92846:49;92914:16;:36::i;:::-;92980:25;92996:9;92980:25;;:::i;:::-;;;92743:274;;93043:16;;93027:62;;-1:-1:-1;;;;;93043:16:0;93069:4;93076:12;93027:15;:62::i;:::-;93100:17;;:42;;-1:-1:-1;;;93100:42:0;;-1:-1:-1;;;;;93100:17:0;;;;:34;;:42;;93135:6;;93100:42;;;:::i;94524:96::-;29160:12;:10;:12::i;:::-;29150:6;;-1:-1:-1;;;;;29150:6:0;;;:22;;;29142:67;;;;-1:-1:-1;;;29142:67:0;;;;;;;:::i;:::-;94592:11:::1;:20:::0;;;::::1;;;;-1:-1:-1::0;;94592:20:0;;::::1;::::0;;;::::1;::::0;;94524:96::o;96687:131::-;29160:12;:10;:12::i;:::-;29150:6;;-1:-1:-1;;;;;29150:6:0;;;:22;;;29142:67;;;;-1:-1:-1;;;29142:67:0;;;;;;;:::i;:::-;96762:17:::1;::::0;:48:::1;::::0;-1:-1:-1;;;96762:48:0;;-1:-1:-1;;;;;96762:17:0;;::::1;::::0;:34:::1;::::0;:48:::1;::::0;96797:12;;96762:48:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;96687:131:::0;:::o;97751:333::-;97799:13;97857:1;97833:12;:10;:12::i;:::-;-1:-1:-1;;;;;97833:26:0;;;97825:59;;;;-1:-1:-1;;;97825:59:0;;;;;;;:::i;:::-;97917:17;;-1:-1:-1;;;;;97917:17:0;:30;97948:12;:10;:12::i;:::-;97917:44;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;97895:107;;;;-1:-1:-1;;;97895:107:0;;;;;;;:::i;:::-;98020:17;;-1:-1:-1;;;;;98020:17:0;:42;98063:12;:10;:12::i;77833:31::-;;;;:::o;99200:93::-;29160:12;:10;:12::i;:::-;29150:6;;-1:-1:-1;;;;;29150:6:0;;;:22;;;29142:67;;;;-1:-1:-1;;;29142:67:0;;;;;;;:::i;:::-;99271:5:::1;:14:::0;99200:93::o;80519:482::-;29160:12;:10;:12::i;:::-;29150:6;;-1:-1:-1;;;;;29150:6:0;;;:22;;;29142:67;;;;-1:-1:-1;;;29142:67:0;;;;;;;:::i;:::-;80628:15:::1;::::0;-1:-1:-1;;;;;80606:38:0;;::::1;80628:15:::0;::::1;80606:38;;80598:91;;;;-1:-1:-1::0;;;80598:91:0::1;;;;;;;:::i;:::-;80747:15;::::0;80705:59:::1;::::0;-1:-1:-1;;;;;80747:15:0;;::::1;::::0;80705:59;::::1;::::0;::::1;::::0;80747:15:::1;::::0;80705:59:::1;80775:15;:42:::0;;-1:-1:-1;;;;;;80775:42:0::1;-1:-1:-1::0;;;;;80775:42:0;;::::1;::::0;;;::::1;::::0;;;;80865:25:::1;::::0;;-1:-1:-1;;;80865:25:0;;;;-1:-1:-1;;80865:15:0;;::::1;::::0;:23:::1;::::0;:25:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;:15;:25;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;80853:59:0::1;;80921:4;80928:15;;;;;;;;;-1:-1:-1::0;;;;;80928:15:0::1;-1:-1:-1::0;;;;;80928:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;80853:99;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;80963:13;:30:::0;;-1:-1:-1;;;;;;80963:30:0::1;-1:-1:-1::0;;;;;80963:30:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;80519:482:0:o;88742:1091::-;88802:14;88819:12;:10;:12::i;:::-;88802:29;-1:-1:-1;;;;;;88850:20:0;;88842:70;;;;-1:-1:-1;;;88842:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;88932:22:0;;;;;;:14;:22;;;;;;;;88931:23;88923:67;;;;-1:-1:-1;;;88923:67:0;;;;;;;:::i;:::-;89033:12;;-1:-1:-1;;;;;89023:22:0;;;89033:12;;89023:22;;;;:52;;-1:-1:-1;89059:16:0;;-1:-1:-1;;;;;89049:26:0;;;89059:16;;89049:26;;89023:52;89001:152;;;;-1:-1:-1;;;89001:152:0;;;;;;;:::i;:::-;89187:17;;:92;;-1:-1:-1;;;89187:92:0;;89164:20;;-1:-1:-1;;;;;89187:17:0;;:36;;:92;;89238:6;;89259:9;;89187:92;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;89164:115;;89327:1;89312:12;:16;89290:112;;;;-1:-1:-1;;;89290:112:0;;;;;;;:::i;:::-;89419:11;;;;;;;89415:279;;;89483:10;;89447:17;;89483:14;89479:164;;89530:37;89563:3;89530:28;89547:10;;89530:12;:16;;:28;;;;:::i;:37::-;89603:12;;89518:49;;-1:-1:-1;89586:41:0;;-1:-1:-1;;;;;89603:12:0;89518:49;89586:16;:41::i;:::-;89657:25;89673:9;89657:25;;:::i;:::-;;;89415:279;;89720:16;;89704:55;;-1:-1:-1;;;;;89720:16:0;89738:6;89746:12;89704:15;:55::i;:::-;89770:17;;:55;;-1:-1:-1;;;89770:55:0;;-1:-1:-1;;;;;89770:17:0;;;;:36;;:55;;89807:6;;89815:9;;89770:55;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;88742:1091;;;:::o;81009:111::-;29160:12;:10;:12::i;:::-;29150:6;;-1:-1:-1;;;;;29150:6:0;;;:22;;;29142:67;;;;-1:-1:-1;;;29142:67:0;;;;;;;:::i;:::-;81087:16:::1;:25:::0;81009:111::o;81988:97::-;29160:12;:10;:12::i;:::-;29150:6;;-1:-1:-1;;;;;29150:6:0;;;:22;;;29142:67;;;;-1:-1:-1;;;29142:67:0;;;;;;;:::i;:::-;82059:10:::1;:18:::0;81988:97::o;93783:205::-;93890:17;;:90;;-1:-1:-1;;;93890:90:0;;93863:7;;-1:-1:-1;;;;;93890:17:0;;:33;;:90;;93938:7;;93960:9;;93890:90;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;77665:25::-;;;;:::o;98434:200::-;98514:7;98532;98550;29160:12;:10;:12::i;:::-;29150:6;;-1:-1:-1;;;;;29150:6:0;;;:22;;;29142:67;;;;-1:-1:-1;;;29142:67:0;;;;;;;:::i;:::-;98588:17:::1;;;;;;;;;-1:-1:-1::0;;;;;98588:17:0::1;-1:-1:-1::0;;;;;98588:36:0::1;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;98581:45;;;;;;98434:200:::0;;;:::o;35656:157::-;-1:-1:-1;;;;;35787:18:0;35755:7;35787:18;;;;;;;;;;;;35656:157::o;29580:148::-;29160:12;:10;:12::i;:::-;29150:6;;-1:-1:-1;;;;;29150:6:0;;;:22;;;29142:67;;;;-1:-1:-1;;;29142:67:0;;;;;;;:::i;:::-;29671:6:::1;::::0;29650:40:::1;::::0;29687:1:::1;::::0;-1:-1:-1;;;;;29671:6:0::1;::::0;29650:40:::1;::::0;29687:1;;29650:40:::1;29701:6;:19:::0;;-1:-1:-1;;;;;;29701:19:0::1;::::0;;29580:148::o;93583:192::-;93672:17;;93645:7;;-1:-1:-1;;;;;93672:17:0;:33;93720:12;:10;:12::i;:::-;93747:9;93672:95;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;77217:45::-;;;-1:-1:-1;;;;;77217:45:0;;:::o;95929:133::-;29160:12;:10;:12::i;:::-;29150:6;;-1:-1:-1;;;;;29150:6:0;;;:22;;;29142:67;;;;-1:-1:-1;;;29142:67:0;;;;;;;:::i;:::-;96005:17:::1;::::0;:49:::1;::::0;-1:-1:-1;;;96005:49:0;;-1:-1:-1;;;;;96005:17:0;;::::1;::::0;:39:::1;::::0;:49:::1;::::0;96045:8;;96005:49:::1;;;:::i;95294:143::-:0;29160:12;:10;:12::i;:::-;29150:6;;-1:-1:-1;;;;;29150:6:0;;;:22;;;29142:67;;;;-1:-1:-1;;;29142:67:0;;;;;;;:::i;:::-;95375:17:::1;::::0;:54:::1;::::0;-1:-1:-1;;;95375:54:0;;-1:-1:-1;;;;;95375:17:0;;::::1;::::0;:37:::1;::::0;:54:::1;::::0;95413:15;;95375:54:::1;;;:::i;95445:353::-:0;29160:12;:10;:12::i;:::-;29150:6;;-1:-1:-1;;;;;29150:6:0;;;:22;;;29142:67;;;;-1:-1:-1;;;29142:67:0;;;;;;;:::i;:::-;95571:13:::1;:20;95595:1;95571:25;95563:70;;;;-1:-1:-1::0;;;95563:70:0::1;;;;;;;:::i;:::-;95652:13;:20;95676:1;95652:25;95644:70;;;;-1:-1:-1::0;;;95644:70:0::1;;;;;;;:::i;:::-;95725:17;::::0;:65:::1;::::0;-1:-1:-1;;;95725:65:0;;-1:-1:-1;;;;;95725:17:0;;::::1;::::0;:35:::1;::::0;:65:::1;::::0;95761:13;;95776;;95725:65:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;95445:353:::0;;:::o;77453:70::-;;;-1:-1:-1;;;;;77453:70:0;;:::o;96070:119::-;96147:17;;:34;;;-1:-1:-1;;;96147:34:0;;;;96120:7;;-1:-1:-1;;;;;96147:17:0;;:32;;:34;;;;;;;;;;;;;;:17;:34;;;;;;;;;;98642:94;98690:17;;;;;;;;;-1:-1:-1;;;;;98690:17:0;-1:-1:-1;;;;;98690:36:0;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;81818:162::-;29160:12;:10;:12::i;:::-;29150:6;;-1:-1:-1;;;;;29150:6:0;;;:22;;;29142:67;;;;-1:-1:-1;;;29142:67:0;;;;;;;:::i;:::-;81887:8:::1;:16:::0;;;81941::::1;::::0;81926:10:::1;::::0;:46:::1;::::0;81898:5;;81926:32:::1;::::0;:14:::1;:32::i;52537:100::-:0;52588:7;52615;52623:5;52615:14;;;;;;-1:-1:-1;;;52615:14:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;52615:14:0;;52537:100;-1:-1:-1;;52537:100:0:o;82093:92::-;29160:12;:10;:12::i;:::-;29150:6;;-1:-1:-1;;;;;29150:6:0;;;:22;;;29142:67;;;;-1:-1:-1;;;29142:67:0;;;;;;;:::i;:::-;82163:6:::1;:14:::0;82093:92::o;28938:79::-;29003:6;;-1:-1:-1;;;;;29003:6:0;28938:79;:::o;81345:110::-;29160:12;:10;:12::i;:::-;29150:6;;-1:-1:-1;;;;;29150:6:0;;;:22;;;29142:67;;;;-1:-1:-1;;;29142:67:0;;;;;;;:::i;:::-;81424:16:::1;:23:::0;;-1:-1:-1;;;;;;81424:23:0::1;-1:-1:-1::0;;;;;81424:23:0;;;::::1;::::0;;;::::1;::::0;;81345:110::o;34584:104::-;34640:13;34673:7;34666:14;;;;;:::i;52013:109::-;-1:-1:-1;;;;;52096:18:0;52069:7;52096:18;;;:9;:18;;;;;;;52013:109::o;82294:313::-;29160:12;:10;:12::i;:::-;29150:6;;-1:-1:-1;;;;;29150:6:0;;;:22;;;29142:67;;;;-1:-1:-1;;;29142:67:0;;;;;;;:::i;:::-;82430:13:::1;::::0;-1:-1:-1;;;;;82422:21:0;;::::1;82430:13:::0;::::1;82422:21;;82400:145;;;;-1:-1:-1::0;;;82400:145:0::1;;;;;;;:::i;:::-;82558:41;82587:4;82593:5;82558:28;:41::i;96197:121::-:0;29160:12;:10;:12::i;:::-;29150:6;;-1:-1:-1;;;;;29150:6:0;;;:22;;;29142:67;;;;-1:-1:-1;;;29142:67:0;;;;;;;:::i;:::-;96267:17:::1;::::0;:43:::1;::::0;-1:-1:-1;;;96267:43:0;;-1:-1:-1;;;;;96267:17:0;;::::1;::::0;:34:::1;::::0;:43:::1;::::0;96302:7;;96267:43:::1;;;:::i;98877:125::-:0;98957:17;;:37;;;-1:-1:-1;;;98957:37:0;;;;98930:7;;-1:-1:-1;;;;;98957:17:0;;:35;;:37;;;;;;;;;;;;;;:17;:37;;;;;;;;;;38947:388;39055:4;39077:228;39100:12;:10;:12::i;:::-;39127:7;39149:145;39206:15;39149:145;;;;;;;;;;;;;;;;;:11;:25;39161:12;:10;:12::i;:::-;-1:-1:-1;;;;;39149:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;39149:25:0;;;:34;;;;;;;;;;;:145;:38;:145::i;77350:27::-;;;-1:-1:-1;;;;;77350:27:0;;:::o;36026:200::-;36132:4;36154:42;36164:12;:10;:12::i;:::-;36178:9;36189:6;36154:9;:42::i;94158:166::-;94250:17;;:66;;-1:-1:-1;;;94250:66:0;;94223:7;;-1:-1:-1;;;;;94250:17:0;;:33;;:66;;94298:7;;94250:66;;;:::i;77602:23::-;;;;:::o;81240:97::-;29160:12;:10;:12::i;:::-;29150:6;;-1:-1:-1;;;;;29150:6:0;;;:22;;;29142:67;;;;-1:-1:-1;;;29142:67:0;;;;;;;:::i;:::-;81315:7:::1;:14:::0;;-1:-1:-1;;;;;;81315:14:0::1;-1:-1:-1::0;;;;;81315:14:0;;;::::1;::::0;;;::::1;::::0;;81240:97::o;77422:22::-;;;-1:-1:-1;;;;;77422:22:0;;:::o;78079:57::-;;;;;;;;;;;;;;;:::o;94777:180::-;94872:7;29160:12;:10;:12::i;:::-;29150:6;;-1:-1:-1;;;;;29150:6:0;;;:22;;;29142:67;;;;-1:-1:-1;;;29142:67:0;;;;;;;:::i;:::-;94904:17:::1;::::0;:45:::1;::::0;-1:-1:-1;;;94904:45:0;;-1:-1:-1;;;;;94904:17:0;;::::1;::::0;:36:::1;::::0;:45:::1;::::0;94941:7;;94904:45:::1;;;:::i;86085:2649::-:0;86217:1;86202:4;86196:18;:22;:49;;;;;86243:2;86228:4;86222:18;:23;86196:49;86174:131;;;;-1:-1:-1;;;86174:131:0;;;;;;;:::i;:::-;86316:14;86333:12;:10;:12::i;:::-;86316:29;-1:-1:-1;;;;;;86378:20:0;;86356:116;;;;-1:-1:-1;;;86356:116:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;86492:22:0;;;;;;:14;:22;;;;;;;;86491:23;86483:70;;;;-1:-1:-1;;;86483:70:0;;;;;;;:::i;:::-;86596:12;;-1:-1:-1;;;;;86586:22:0;;;86596:12;;86586:22;;;;:52;;-1:-1:-1;86622:16:0;;-1:-1:-1;;;;;86612:26:0;;;86622:16;;86612:26;;86586:52;:73;;;;-1:-1:-1;86652:7:0;;-1:-1:-1;;;;;86642:17:0;;;86652:7;;86642:17;;86586:73;86564:183;;;;-1:-1:-1;;;86564:183:0;;;;;;;:::i;:::-;86787:17;;:32;;;-1:-1:-1;;;86787:32:0;;;;86764:20;;-1:-1:-1;;;;;86787:17:0;;:30;;:32;;;;;;;;;;;;;;:17;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;86764:55;-1:-1:-1;86850:10:0;86893:25;;;;86871:123;;;;-1:-1:-1;;;86871:123:0;;;;;;;:::i;:::-;87048:19;:9;87062:4;87048:13;:19::i;:::-;87027:17;87037:6;87027:9;:17::i;:::-;:40;;87005:154;;;;-1:-1:-1;;;87005:154:0;;;;;;;:::i;:::-;87170:28;87201:24;87219:4;87201:9;:24::i;:::-;87280:16;;87170:55;;-1:-1:-1;87256:40:0;;;;;;;87325;;-1:-1:-1;87354:11:0;;;;;;;87325:40;:66;;;;-1:-1:-1;87383:8:0;;;;87382:9;87325:66;:100;;;;;87418:7;:5;:7::i;:::-;-1:-1:-1;;;;;87408:17:0;:6;-1:-1:-1;;;;;87408:17:0;;;87325:100;:151;;;;-1:-1:-1;;;;;;87443:33:0;;;;;;:25;:33;;;;;;;;87442:34;87325:151;87307:1275;;;87503:8;:15;;-1:-1:-1;;87503:15:0;87514:4;87503:15;;;87579:8;;87503;;87554:43;;87593:3;;87554:34;;:20;;:24;:34::i;:43::-;87535:62;;87612:17;87632:31;87659:3;87632:22;87645:8;;87632;:12;;:22;;;;:::i;:31::-;87612:51;-1:-1:-1;87678:19:0;87700:23;:8;87612:51;87700:12;:23::i;:::-;87757:7;;87678:45;;-1:-1:-1;87740:36:0;;-1:-1:-1;;;;;87757:7:0;87766:9;87740:16;:36::i;:::-;87808:12;;87791:43;;-1:-1:-1;;;;;87808:12:0;87822:11;87791:16;:43::i;:::-;87851:25;87879:73;87948:3;87879:50;87918:10;;87879:20;:38;;:50;;;;:::i;:73::-;87851:101;;87969:27;87999:70;88051:3;87999:29;88021:6;;87999:17;:21;;:29;;;;:::i;:70::-;88103:16;;87969:100;;-1:-1:-1;88086:55:0;;-1:-1:-1;;;;;88103:16:0;87969:100;88086:16;:55::i;:::-;88222:16;;88156:158;;88198:4;;-1:-1:-1;;;;;88222:16:0;88257:42;:17;88279:19;88257:21;:42::i;:::-;88156:15;:158::i;:::-;88331:18;88352:83;88417:3;88352:42;88377:16;;88352:20;:24;;:42;;;;:::i;:83::-;88331:104;;88452:26;88467:10;88452:14;:26::i;:::-;88495:42;88512:24;88530:4;88512:9;:24::i;:::-;88495:16;:42::i;:::-;-1:-1:-1;;88554:8:0;:16;;-1:-1:-1;;88554:16:0;;;-1:-1:-1;;;;87307:1275:0;88592:59;88608:6;88624:4;88631:19;:9;88645:4;88631:13;:19::i;88592:59::-;88662:17;;-1:-1:-1;;;;;88662:17:0;:28;88691:6;88699:4;88705:20;:10;88720:4;88705:14;:20::i;:::-;88662:64;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;86085:2649;;;;;;;:::o;97412:331::-;97461:13;97519:1;97495:12;:10;:12::i;:::-;-1:-1:-1;;;;;97495:26:0;;;97487:59;;;;-1:-1:-1;;;97487:59:0;;;;;;;:::i;:::-;97579:17;;-1:-1:-1;;;;;97579:17:0;:30;97610:12;:10;:12::i;:::-;97579:44;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;97557:107;;;;-1:-1:-1;;;97557:107:0;;;;;;;:::i;:::-;97682:17;;-1:-1:-1;;;;;97682:17:0;:39;97722:12;:10;:12::i;77384:31::-;;;-1:-1:-1;;;;;77384:31:0;;:::o;99010:182::-;29160:12;:10;:12::i;:::-;29150:6;;-1:-1:-1;;;;;29150:6:0;;;:22;;;29142:67;;;;-1:-1:-1;;;29142:67:0;;;;;;;:::i;:::-;99074:11:::1;::::0;::::1;;99073:12;99065:47;;;;-1:-1:-1::0;;;99065:47:0::1;;;;;;;:::i;:::-;99123:11;:18:::0;;-1:-1:-1;;99123:18:0::1;99137:4;99123:18;::::0;;99172:12:::1;99152:17;:32:::0;99010:182::o;51809:105::-;-1:-1:-1;;;;;51890:16:0;51863:7;51890:16;;;:7;:16;;;;;;;51809:105::o;82193:93::-;29160:12;:10;:12::i;:::-;29150:6;;-1:-1:-1;;;;;29150:6:0;;;:22;;;29142:67;;;;-1:-1:-1;;;29142:67:0;;;;;;;:::i;:::-;82262:8:::1;:16:::0;82193:93::o;96443:120::-;29160:12;:10;:12::i;:::-;29150:6;;-1:-1:-1;;;;;29150:6:0;;;:22;;;29142:67;;;;-1:-1:-1;;;29142:67:0;;;;;;;:::i;:::-;96511:17:::1;::::0;:44:::1;::::0;-1:-1:-1;;;96511:44:0;;-1:-1:-1;;;;;96511:17:0;;::::1;::::0;:35:::1;::::0;:44:::1;::::0;96547:7;;96511:44:::1;;;:::i;95806:115::-:0;95881:17;;:32;;;-1:-1:-1;;;95881:32:0;;;;95854:7;;-1:-1:-1;;;;;95881:17:0;;:30;;:32;;;;;;;;;;;;;;:17;:32;;;;;;;;;;93996:154;94071:17;;94044:7;;-1:-1:-1;;;;;94071:17:0;:33;94119:12;:10;:12::i;51599:119::-;-1:-1:-1;;;;;51684:26:0;51657:7;51684:26;;;:19;:26;;;;;;;51599:119::o;82615:141::-;29160:12;:10;:12::i;:::-;29150:6;;-1:-1:-1;;;;;29150:6:0;;;:22;;;29142:67;;;;-1:-1:-1;;;29142:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;82717:23:0;;;::::1;;::::0;;;:14:::1;:23;::::0;;;;:31;;-1:-1:-1;;82717:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;82615:141::o;96952:123::-;97026:17;;:41;;;-1:-1:-1;;;97026:41:0;;;;96999:7;;-1:-1:-1;;;;;97026:17:0;;:39;;:41;;;;;;;;;;;;;;:17;:41;;;;;;;;;;36289:181;-1:-1:-1;;;;;36435:18:0;;;36403:7;36435:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;36289:181::o;51347:95::-;51420:14;;51347:95;:::o;98092:334::-;98143:13;98201:1;98177:12;:10;:12::i;:::-;-1:-1:-1;;;;;98177:26:0;;;98169:59;;;;-1:-1:-1;;;98169:59:0;;;;;;;:::i;:::-;98261:17;;-1:-1:-1;;;;;98261:17:0;:30;98292:12;:10;:12::i;:::-;98261:44;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;98239:107;;;;-1:-1:-1;;;98239:107:0;;;;;;;:::i;:::-;98364:17;;-1:-1:-1;;;;;98364:17:0;:40;98405:12;:10;:12::i;29883:281::-;29160:12;:10;:12::i;:::-;29150:6;;-1:-1:-1;;;;;29150:6:0;;;:22;;;29142:67;;;;-1:-1:-1;;;29142:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29986:22:0;::::1;29964:110;;;;-1:-1:-1::0;;;29964:110:0::1;;;;;;;:::i;:::-;30111:6;::::0;30090:38:::1;::::0;-1:-1:-1;;;;;30090:38:0;;::::1;::::0;30111:6:::1;::::0;30090:38:::1;::::0;30111:6:::1;::::0;30090:38:::1;30139:6;:17:::0;;-1:-1:-1;;;;;;30139:17:0::1;-1:-1:-1::0;;;;;30139:17:0;;;::::1;::::0;;;::::1;::::0;;29883:281::o;96326:109::-;96398:17;;:29;;;-1:-1:-1;;;96398:29:0;;;;96371:7;;-1:-1:-1;;;;;96398:17:0;;:27;;:29;;;;;;;;;;;;;;:17;:29;;;;;;;;;;94628:141;94718:17;;:43;;-1:-1:-1;;;94718:43:0;;94691:7;;-1:-1:-1;;;;;94718:17:0;;:34;;:43;;94753:7;;94718:43;;;:::i;93158:198::-;93252:17;;93225:7;;-1:-1:-1;;;;;93252:17:0;:34;93301:12;:10;:12::i;96826:118::-;96898:17;;:38;;;-1:-1:-1;;;96898:38:0;;;;96871:7;;-1:-1:-1;;;;;96898:17:0;;:36;;:38;;;;;;;;;;;;;;:17;:38;;;;;;;;;;96571:108;96641:17;;:30;;;-1:-1:-1;;;96641:30:0;;;;96617:4;;-1:-1:-1;;;;;96641:17:0;;:28;;:30;;;;;;;;;;;;;;:17;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;93364:211::-;93476:17;;:91;;-1:-1:-1;;;93476:91:0;;93449:7;;-1:-1:-1;;;;;93476:17:0;;:34;;:91;;93525:7;;93547:9;;93476:91;;;:::i;80366:145::-;29160:12;:10;:12::i;:::-;29150:6;;-1:-1:-1;;;;;29150:6:0;;;:22;;;29142:67;;;;-1:-1:-1;;;29142:67:0;;;;;;;:::i;:::-;80447:17:::1;:56:::0;;-1:-1:-1;;;;;;80447:56:0::1;-1:-1:-1::0;;;;;80447:56:0;;;::::1;::::0;;;::::1;::::0;;80366:145::o;90920:1124::-;90979:14;90996:12;:10;:12::i;:::-;90979:29;-1:-1:-1;;;;;;91027:20:0;;91019:70;;;;-1:-1:-1;;;91019:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;91109:22:0;;;;;;:14;:22;;;;;;;;91108:23;91100:67;;;;-1:-1:-1;;;91100:67:0;;;;;;;:::i;:::-;91210:12;;-1:-1:-1;;;;;91200:22:0;;;91210:12;;91200:22;;;;:52;;-1:-1:-1;91236:16:0;;-1:-1:-1;;;;;91226:26:0;;;91236:16;;91226:26;;91200:52;:73;;;;-1:-1:-1;91266:7:0;;-1:-1:-1;;;;;91256:17:0;;;91266:7;;91256:17;;91200:73;91178:177;;;;-1:-1:-1;;;91178:177:0;;;;;;;:::i;:::-;91389:17;;:92;;-1:-1:-1;;;91389:92:0;;91366:20;;-1:-1:-1;;;;;91389:17:0;;:36;;:92;;91440:6;;91461:9;;91389:92;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;91366:115;;91529:1;91514:12;:16;91492:122;;;;-1:-1:-1;;;91492:122:0;;;;;;;:::i;:::-;91631:11;;;;;;;91627:274;;;91695:10;;91659:17;;91695:14;91691:159;;91742:37;91775:3;91742:28;91759:10;;91742:12;:16;;:28;;;;:::i;:37::-;91815:7;;91730:49;;-1:-1:-1;91798:36:0;;-1:-1:-1;;;;;91815:7:0;91730:49;91798:16;:36::i;:::-;91864:25;91880:9;91864:25;;:::i;:::-;;;91627:274;;91929:16;;91913:62;;-1:-1:-1;;;;;91929:16:0;91955:4;91962:12;91913:15;:62::i;:::-;91986:17;;:50;;-1:-1:-1;;;91986:50:0;;-1:-1:-1;;;;;91986:17:0;;;;:31;;:50;;92018:6;;92026:9;;91986:50;;;:::i;3939:181::-;3997:7;;4029:5;4033:1;4029;:5;:::i;:::-;4017:17;;4058:1;4053;:6;;4045:46;;;;-1:-1:-1;;;4045:46:0;;;;;;;:::i;42326:380::-;-1:-1:-1;;;;;42462:19:0;;42454:68;;;;-1:-1:-1;;;42454:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42541:21:0;;42533:68;;;;-1:-1:-1;;;42533:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42614:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;42666:32;;;;;42644:6;;42666:32;:::i;:::-;;;;;;;;42326:380;;;:::o;54599:257::-;54818:12;;-1:-1:-1;;;;;54798:16:0;;54745:7;54798:16;;;:7;:16;;;;;;54745:7;;54833:15;;54782:32;;:13;:32;:::i;:::-;54781:49;;;;:::i;:::-;:67;;;;:::i;:::-;54765:83;54599:257;-1:-1:-1;;;;54599:257:0:o;12161:391::-;12290:6;12265:21;:31;;12243:110;;;;-1:-1:-1;;;12243:110:0;;;;;;;:::i;:::-;12367:12;12385:9;-1:-1:-1;;;;;12385:14:0;12407:6;12385:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12366:52;;;12451:7;12429:115;;;;-1:-1:-1;;;12429:115:0;;;;;;;:::i;83122:1177::-;-1:-1:-1;;;;;83269:20:0;;;;;;:14;:20;;;;;;;;83268:21;:44;;;;-1:-1:-1;;;;;;83294:18:0;;;;;;:14;:18;;;;;;;;83293:19;83268:44;83246:113;;;;-1:-1:-1;;;83246:113:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;83378:18:0;;83370:68;;;;-1:-1:-1;;;83370:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;83457:16:0;;83449:64;;;;-1:-1:-1;;;83449:64:0;;;;;;;:::i;:::-;83536:7;:5;:7::i;:::-;-1:-1:-1;;;;;83528:15:0;:4;-1:-1:-1;;;;;83528:15:0;;;:38;;;;-1:-1:-1;83553:13:0;;-1:-1:-1;;;;;83547:19:0;;;83553:13;;83547:19;;83528:38;:72;;;;-1:-1:-1;83584:15:0;;-1:-1:-1;;;;;83570:30:0;;;83584:15;;83570:30;;83528:72;:95;;;;-1:-1:-1;;;;;;83604:19:0;;83618:4;83604:19;;83528:95;:120;;;;-1:-1:-1;;;;;;83627:21:0;;83643:4;83627:21;;83528:120;83524:724;;;83673:11;;;;83665:48;;;;-1:-1:-1;;;83665:48:0;;;;;;;:::i;:::-;83767:12;;-1:-1:-1;;;;;83761:18:0;;;83767:12;;83761:18;;;;:44;;-1:-1:-1;83789:16:0;;-1:-1:-1;;;;;83783:22:0;;;83789:16;;83783:22;;83761:44;:61;;;;-1:-1:-1;83815:7:0;;-1:-1:-1;;;;;83809:13:0;;;83815:7;;83809:13;;83761:61;:85;;;;-1:-1:-1;83834:12:0;;-1:-1:-1;;;;;83826:20:0;;;83834:12;;83826:20;;83761:85;:113;;;;-1:-1:-1;83858:16:0;;-1:-1:-1;;;;;83850:24:0;;;83858:16;;83850:24;;83761:113;:132;;;;-1:-1:-1;83886:7:0;;-1:-1:-1;;;;;83878:15:0;;;83886:7;;83878:15;;83761:132;83757:480;;;83914:19;83936:13;:11;:13::i;:::-;83914:35;;83968:21;83992:22;84010:2;83992:9;:22::i;:::-;83968:46;;84092:33;84119:5;84092:22;84108:5;;84092:11;:15;;:22;;;;:::i;:33::-;84063:25;:6;84074:13;84063:10;:25::i;:::-;:62;;84033:170;;;;-1:-1:-1;;;84033:170:0;;;;;;;:::i;:::-;83757:480;;;84258:33;84274:4;84280:2;84284:6;84258:15;:33::i;4842:226::-;4962:7;4998:12;4990:6;;;;4982:29;;;;-1:-1:-1;;;4982:29:0;;;;;;;;:::i;:::-;-1:-1:-1;5022:9:0;5034:5;5038:1;5034;:5;:::i;:::-;5022:17;4842:226;-1:-1:-1;;;;;4842:226:0:o;44064:248::-;44181:123;44215:5;44258:23;;;44283:2;44287:5;44235:58;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;44235:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;44181:19;:123::i;5327:471::-;5385:7;5630:6;5626:47;;-1:-1:-1;5660:1:0;5653:8;;5626:47;5685:9;5697:5;5701:1;5697;:5;:::i;:::-;5685:17;-1:-1:-1;5730:1:0;5721:5;5725:1;5685:17;5721:5;:::i;:::-;:10;5713:56;;;;-1:-1:-1;;;5713:56:0;;;;;;;:::i;6274:132::-;6332:7;6359:39;6363:1;6366;6359:39;;;;;;;;;;;;;;;;;:3;:39::i;84307:304::-;84417:21;84449:24;84466:6;84449:16;:24::i;:::-;84484:18;84505:46;84506:21;84533:17;84505:27;:46::i;:::-;84562:41;;84484:67;;-1:-1:-1;;;;;;84562:29:0;;;:41;;;;;84484:67;;84562:41;;;;84484:67;84562:29;:41;;;;;;;;;;;;;;;;;;;39825:610;-1:-1:-1;;;;;39965:20:0;;39957:70;;;;-1:-1:-1;;;39957:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40046:23:0;;40038:71;;;;-1:-1:-1;;;40038:71:0;;;;;;;:::i;:::-;40122:47;40143:6;40151:9;40162:6;40122:20;:47::i;:::-;40202:108;40238:6;40202:108;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40202:17:0;;:9;:17;;;;;;;;;;;;:108;:21;:108::i;:::-;-1:-1:-1;;;;;40182:17:0;;;:9;:17;;;;;;;;;;;:128;;;;40344:20;;;;;;;:32;;40369:6;40344:24;:32::i;:::-;-1:-1:-1;;;;;40321:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;40392:35;;;;;;;;;;40420:6;;40392:35;:::i;82764:350::-;-1:-1:-1;;;;;82869:31:0;;;;;;:25;:31;;;;;;;;:40;;;;;;;82847:151;;;;-1:-1:-1;;;82847:151:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;83009:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;83009:39:0;;;;;;;;;;83066:40;;83009:39;;:31;83066:40;;;82764:350;;:::o;4403:136::-;4461:7;4488:43;4492:1;4495;4488:43;;;;;;;;;;;;;;;;;:3;:43::i;84619:420::-;84678:12;84693:13;:6;84704:1;84693:10;:13::i;:::-;84678:28;-1:-1:-1;84717:17:0;84737:16;:6;84678:28;84737:10;:16::i;:::-;84717:36;-1:-1:-1;84791:21:0;84825:22;84842:4;84825:16;:22::i;:::-;84860:18;84881:41;:21;84907:14;84881:25;:41::i;:::-;84860:62;;84935:35;84948:9;84959:10;84935:12;:35::i;:::-;84988:43;85003:4;85009:10;85021:9;84988:43;;;;;;;;:::i;:::-;;;;;;;;84619:420;;;;;:::o;85047:505::-;85137:16;;;85151:1;85137:16;;;;;;;;85113:21;;85137:16;;;;;;;;;;-1:-1:-1;85137:16:0;85113:40;;85182:4;85164;85169:1;85164:7;;;;;;-1:-1:-1;;;85164:7:0;;;;;;;;;-1:-1:-1;;;;;85164:23:0;;;:7;;;;;;;;;;:23;;;;85208:15;;:23;;;-1:-1:-1;;;85208:23:0;;;;:15;;;;;:21;;:23;;;;;85164:7;;85208:23;;;;;:15;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;85198:4;85203:1;85198:7;;;;;;-1:-1:-1;;;85198:7:0;;;;;;;;;-1:-1:-1;;;;;85198:33:0;;;:7;;;;;;;;;:33;85276:15;;85244:62;;85261:4;;85276:15;85294:11;85244:8;:62::i;:::-;85319:15;;:225;;-1:-1:-1;;;85319:225:0;;-1:-1:-1;;;;;85319:15:0;;;;:67;;:225;;85401:11;;85319:15;;85471:4;;85498;;85518:15;;85319:225;;;:::i;46979:802::-;47403:23;47429:106;47471:4;47429:106;;;;;;;;;;;;;;;;;47437:5;-1:-1:-1;;;;;47429:27:0;;;:106;;;;;:::i;:::-;47550:17;;47403:132;;-1:-1:-1;47550:21:0;47546:228;;47665:10;47654:30;;;;;;;;;;;;:::i;:::-;47628:134;;;;-1:-1:-1;;;47628:134:0;;;;;;;:::i;6902:312::-;7022:7;7057:12;7050:5;7042:28;;;;-1:-1:-1;;;7042:28:0;;;;;;;;:::i;:::-;-1:-1:-1;7081:9:0;7093:5;7097:1;7093;:5;:::i;85560:517::-;85740:15;;85708:62;;85725:4;;-1:-1:-1;;;;;85740:15:0;85758:11;85708:8;:62::i;:::-;85813:15;;:256;;-1:-1:-1;;;85813:256:0;;-1:-1:-1;;;;;85813:15:0;;;;:32;;85853:9;;85813:256;;85886:4;;85906:11;;85813:15;;;;;;86043;;85813:256;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;13575:229::-;13712:12;13744:52;13766:6;13774:4;13780:1;13783:12;13712;15099:18;15110:6;15099:10;:18::i;:::-;15091:60;;;;-1:-1:-1;;;15091:60:0;;;;;;;:::i;:::-;15165:12;15179:23;15206:6;-1:-1:-1;;;;;15206:11:0;15225:5;15246:4;15206:55;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15164:97;;;;15279:51;15296:7;15305:10;15317:12;15279:16;:51::i;:::-;15272:58;14767:571;-1:-1:-1;;;;;;;14767:571:0:o;11001:387::-;11324:20;11372:8;;;11001:387::o;17667:712::-;17817:12;17846:7;17842:530;;;-1:-1:-1;17877:10:0;17870:17;;17842:530;17991:17;;:21;17987:374;;18189:10;18183:17;18250:15;18237:10;18233:2;18229:19;18222:44;18137:148;18332:12;18325:20;;-1:-1:-1;;;18325:20:0;;;;;;;;:::i;14:749:1:-;;127:3;120:4;112:6;108:17;104:27;94:2;;149:5;142;135:20;94:2;189:6;176:20;215:4;238:18;234:2;231:26;228:2;;;260:18;;:::i;:::-;307:2;303;299:11;330:27;353:2;349;345:11;330:27;:::i;:::-;391:15;;;422:12;;;;454:15;;;488;;;484:24;;481:33;-1:-1:-1;478:2:1;;;531:5;524;517:20;478:2;557:5;548:14;;571:163;585:2;582:1;579:9;571:163;;;642:17;;630:30;;603:1;596:9;;;;;680:12;;;;712;;571:163;;;-1:-1:-1;752:5:1;84:679;-1:-1:-1;;;;;;;84:679:1:o;768:259::-;;880:2;868:9;859:7;855:23;851:32;848:2;;;901:6;893;886:22;848:2;945:9;932:23;964:33;991:5;964:33;:::i;1032:263::-;;1155:2;1143:9;1134:7;1130:23;1126:32;1123:2;;;1176:6;1168;1161:22;1123:2;1213:9;1207:16;1232:33;1259:5;1232:33;:::i;1572:402::-;;;1701:2;1689:9;1680:7;1676:23;1672:32;1669:2;;;1722:6;1714;1707:22;1669:2;1766:9;1753:23;1785:33;1812:5;1785:33;:::i;:::-;1837:5;-1:-1:-1;1894:2:1;1879:18;;1866:32;1907:35;1866:32;1907:35;:::i;:::-;1961:7;1951:17;;;1659:315;;;;;:::o;1979:470::-;;;;2125:2;2113:9;2104:7;2100:23;2096:32;2093:2;;;2146:6;2138;2131:22;2093:2;2190:9;2177:23;2209:33;2236:5;2209:33;:::i;:::-;2261:5;-1:-1:-1;2318:2:1;2303:18;;2290:32;2331:35;2290:32;2331:35;:::i;:::-;2083:366;;2385:7;;-1:-1:-1;;;2439:2:1;2424:18;;;;2411:32;;2083:366::o;2454:396::-;;;2580:2;2568:9;2559:7;2555:23;2551:32;2548:2;;;2601:6;2593;2586:22;2548:2;2645:9;2632:23;2664:33;2691:5;2664:33;:::i;:::-;2716:5;-1:-1:-1;2773:2:1;2758:18;;2745:32;2786;2745;2786;:::i;2855:327::-;;;2984:2;2972:9;2963:7;2959:23;2955:32;2952:2;;;3005:6;2997;2990:22;2952:2;3049:9;3036:23;3068:33;3095:5;3068:33;:::i;:::-;3120:5;3172:2;3157:18;;;;3144:32;;-1:-1:-1;;;2942:240:1:o;3187:637::-;;;3366:2;3354:9;3345:7;3341:23;3337:32;3334:2;;;3387:6;3379;3372:22;3334:2;3432:9;3419:23;3461:18;3502:2;3494:6;3491:14;3488:2;;;3523:6;3515;3508:22;3488:2;3551:67;3610:7;3601:6;3590:9;3586:22;3551:67;:::i;:::-;3541:77;;3671:2;3660:9;3656:18;3643:32;3627:48;;3700:2;3690:8;3687:16;3684:2;;;3721:6;3713;3706:22;3684:2;;3749:69;3810:7;3799:8;3788:9;3784:24;3749:69;:::i;:::-;3739:79;;;3324:500;;;;;:::o;3829:253::-;;3938:2;3926:9;3917:7;3913:23;3909:32;3906:2;;;3959:6;3951;3944:22;3906:2;4003:9;3990:23;4022:30;4046:5;4022:30;:::i;4087:257::-;;4207:2;4195:9;4186:7;4182:23;4178:32;4175:2;;;4228:6;4220;4213:22;4175:2;4265:9;4259:16;4284:30;4308:5;4284:30;:::i;5050:677::-;;5183:2;5171:9;5162:7;5158:23;5154:32;5151:2;;;5204:6;5196;5189:22;5151:2;5242:9;5236:16;5275:18;5267:6;5264:30;5261:2;;;5312:6;5304;5297:22;5261:2;5340:22;;5393:4;5385:13;;5381:27;-1:-1:-1;5371:2:1;;5427:6;5419;5412:22;5371:2;5461;5455:9;5486:50;5501:34;5532:2;5501:34;:::i;:::-;5486:50;:::i;:::-;5559:2;5552:5;5545:17;5599:7;5594:2;5589;5585;5581:11;5577:20;5574:33;5571:2;;;5625:6;5617;5610:22;5571:2;5643:54;5694:2;5689;5682:5;5678:14;5673:2;5669;5665:11;5643:54;:::i;5732:797::-;;;5871:2;5859:9;5850:7;5846:23;5842:32;5839:2;;;5892:6;5884;5877:22;5839:2;5937:9;5924:23;5970:18;5962:6;5959:30;5956:2;;;6007:6;5999;5992:22;5956:2;6035:22;;6088:4;6080:13;;6076:27;-1:-1:-1;6066:2:1;;6122:6;6114;6107:22;6066:2;6163;6150:16;6188:50;6203:34;6234:2;6203:34;:::i;6188:50::-;6261:2;6254:5;6247:17;6303:7;6296:4;6291:2;6287;6283:11;6279:22;6276:35;6273:2;;;6329:6;6321;6314:22;6273:2;6393;6386:4;6382:2;6378:13;6371:4;6364:5;6360:16;6347:49;6416:14;;;6432:4;6412:25;;;6405:41;;;;6420:5;6502:20;;;;6489:34;;-1:-1:-1;;;5829:700:1:o;6534:190::-;;6646:2;6634:9;6625:7;6621:23;6617:32;6614:2;;;6667:6;6659;6652:22;6614:2;-1:-1:-1;6695:23:1;;6604:120;-1:-1:-1;6604:120:1:o;6729:194::-;;6852:2;6840:9;6831:7;6827:23;6823:32;6820:2;;;6873:6;6865;6858:22;6820:2;-1:-1:-1;6901:16:1;;6810:113;-1:-1:-1;6810:113:1:o;6928:316::-;;;;7085:2;7073:9;7064:7;7060:23;7056:32;7053:2;;;7106:6;7098;7091:22;7053:2;7140:9;7134:16;7124:26;;7190:2;7179:9;7175:18;7169:25;7159:35;;7234:2;7223:9;7219:18;7213:25;7203:35;;7043:201;;;;;:::o;7249:443::-;;7346:5;7340:12;7373:6;7368:3;7361:19;7399:4;7428:2;7423:3;7419:12;7412:19;;7465:2;7458:5;7454:14;7486:3;7498:169;7512:6;7509:1;7506:13;7498:169;;;7573:13;;7561:26;;7607:12;;;;7642:15;;;;7534:1;7527:9;7498:169;;;-1:-1:-1;7683:3:1;;7316:376;-1:-1:-1;;;;;7316:376:1:o;7697:260::-;;7779:5;7773:12;7806:6;7801:3;7794:19;7822:63;7878:6;7871:4;7866:3;7862:14;7855:4;7848:5;7844:16;7822:63;:::i;:::-;7939:2;7918:15;-1:-1:-1;;7914:29:1;7905:39;;;;7946:4;7901:50;;7749:208;-1:-1:-1;;7749:208:1:o;7962:274::-;;8129:6;8123:13;8145:53;8191:6;8186:3;8179:4;8171:6;8167:17;8145:53;:::i;:::-;8214:16;;;;;8099:137;-1:-1:-1;;8099:137:1:o;8241:205::-;8441:3;8432:14::o;8451:226::-;-1:-1:-1;;;;;8615:55:1;;;;8597:74;;8585:2;8570:18;;8552:125::o;8682:305::-;-1:-1:-1;;;;;8882:55:1;;;;8864:74;;8969:2;8954:18;;8947:34;8852:2;8837:18;;8819:168::o;8992:327::-;-1:-1:-1;;;;;9245:15:1;;;9227:34;;9297:15;;9292:2;9277:18;;9270:43;9154:2;9139:18;;9121:198::o;9324:413::-;;-1:-1:-1;;;;;9533:6:1;9529:55;9518:9;9511:74;9621:2;9616;9605:9;9601:18;9594:30;9641:47;9684:2;9673:9;9669:18;9661:6;9641:47;:::i;:::-;9633:55;;9724:6;9719:2;9708:9;9704:18;9697:34;9501:236;;;;;;:::o;10044:630::-;-1:-1:-1;;;;;10426:15:1;;;10408:34;;10473:2;10458:18;;10451:34;;;;10516:2;10501:18;;10494:34;;;;10559:2;10544:18;;10537:34;;;;10608:15;;;10602:3;10587:19;;10580:44;10655:3;10640:19;;10633:35;;;;10334:3;10319:19;;10301:373::o;10679:477::-;;10936:2;10925:9;10918:21;10962:62;11020:2;11009:9;11005:18;10997:6;10962:62;:::i;:::-;11072:9;11064:6;11060:22;11055:2;11044:9;11040:18;11033:50;11100;11143:6;11135;11100:50;:::i;11161:187::-;11326:14;;11319:22;11301:41;;11289:2;11274:18;;11256:92::o;11865:222::-;;12014:2;12003:9;11996:21;12034:47;12077:2;12066:9;12062:18;12054:6;12034:47;:::i;12092:414::-;12294:2;12276:21;;;12333:2;12313:18;;;12306:30;12372:34;12367:2;12352:18;;12345:62;12443:20;12438:2;12423:18;;12416:48;12496:3;12481:19;;12266:240::o;12511:399::-;12713:2;12695:21;;;12752:2;12732:18;;;12725:30;12791:34;12786:2;12771:18;;12764:62;-1:-1:-1;;;12857:2:1;12842:18;;12835:33;12900:3;12885:19;;12685:225::o;12915:356::-;13117:2;13099:21;;;13136:18;;;13129:30;13195:34;13190:2;13175:18;;13168:62;13262:2;13247:18;;13089:182::o;13276:337::-;13478:2;13460:21;;;13517:2;13497:18;;;13490:30;-1:-1:-1;;;13551:2:1;13536:18;;13529:43;13604:2;13589:18;;13450:163::o;13618:356::-;13820:2;13802:21;;;13839:18;;;13832:30;13898:34;13893:2;13878:18;;13871:62;13965:2;13950:18;;13792:182::o;13979:402::-;14181:2;14163:21;;;14220:2;14200:18;;;14193:30;14259:34;14254:2;14239:18;;14232:62;-1:-1:-1;;;14325:2:1;14310:18;;14303:36;14371:3;14356:19;;14153:228::o;14386:398::-;14588:2;14570:21;;;14627:2;14607:18;;;14600:30;14666:34;14661:2;14646:18;;14639:62;-1:-1:-1;;;14732:2:1;14717:18;;14710:32;14774:3;14759:19;;14560:224::o;14789:424::-;14991:2;14973:21;;;15030:2;15010:18;;;15003:30;15069:34;15064:2;15049:18;;15042:62;15140:30;15135:2;15120:18;;15113:58;15203:3;15188:19;;14963:250::o;15218:351::-;15420:2;15402:21;;;15459:2;15439:18;;;15432:30;15498:29;15493:2;15478:18;;15471:57;15560:2;15545:18;;15392:177::o;15574:401::-;15776:2;15758:21;;;15815:2;15795:18;;;15788:30;15854:34;15849:2;15834:18;;15827:62;-1:-1:-1;;;15920:2:1;15905:18;;15898:35;15965:3;15950:19;;15748:227::o;15980:425::-;16182:2;16164:21;;;16221:2;16201:18;;;16194:30;16260:34;16255:2;16240:18;;16233:62;16331:31;16326:2;16311:18;;16304:59;16395:3;16380:19;;16154:251::o;16410:344::-;16612:2;16594:21;;;16651:2;16631:18;;;16624:30;16690:22;16685:2;16670:18;;16663:50;16745:2;16730:18;;16584:170::o;16759:402::-;16961:2;16943:21;;;17000:2;16980:18;;;16973:30;17039:34;17034:2;17019:18;;17012:62;-1:-1:-1;;;17105:2:1;17090:18;;17083:36;17151:3;17136:19;;16933:228::o;17166:422::-;17368:2;17350:21;;;17407:2;17387:18;;;17380:30;17446:34;17441:2;17426:18;;17419:62;17517:28;17512:2;17497:18;;17490:56;17578:3;17563:19;;17340:248::o;17593:410::-;17795:2;17777:21;;;17834:2;17814:18;;;17807:30;17873:34;17868:2;17853:18;;17846:62;17944:16;17939:2;17924:18;;17917:44;17993:3;17978:19;;17767:236::o;18008:353::-;18210:2;18192:21;;;18249:2;18229:18;;;18222:30;18288:31;18283:2;18268:18;;18261:59;18352:2;18337:18;;18182:179::o;18773:407::-;18975:2;18957:21;;;19014:2;18994:18;;;18987:30;19053:34;19048:2;19033:18;;19026:62;-1:-1:-1;;;19119:2:1;19104:18;;19097:41;19170:3;19155:19;;18947:233::o;19185:355::-;19387:2;19369:21;;;19426:2;19406:18;;;19399:30;19465:33;19460:2;19445:18;;19438:61;19531:2;19516:18;;19359:181::o;19545:404::-;19747:2;19729:21;;;19786:2;19766:18;;;19759:30;19825:34;19820:2;19805:18;;19798:62;-1:-1:-1;;;19891:2:1;19876:18;;19869:38;19939:3;19924:19;;19719:230::o;19954:412::-;20156:2;20138:21;;;20195:2;20175:18;;;20168:30;20234:34;20229:2;20214:18;;20207:62;20305:18;20300:2;20285:18;;20278:46;20356:3;20341:19;;20128:238::o;20371:425::-;20573:2;20555:21;;;20612:2;20592:18;;;20585:30;20651:34;20646:2;20631:18;;20624:62;20722:31;20717:2;20702:18;;20695:59;20786:3;20771:19;;20545:251::o;20801:343::-;21003:2;20985:21;;;21042:2;21022:18;;;21015:30;21081:21;21076:2;21061:18;;21054:49;21135:2;21120:18;;20975:169::o;21149:478::-;21351:2;21333:21;;;21390:2;21370:18;;;21363:30;21429:34;21424:2;21409:18;;21402:62;21500:34;21495:2;21480:18;;21473:62;-1:-1:-1;;;21566:3:1;21551:19;;21544:41;21617:3;21602:19;;21323:304::o;21632:398::-;21834:2;21816:21;;;21873:2;21853:18;;;21846:30;21912:34;21907:2;21892:18;;21885:62;-1:-1:-1;;;21978:2:1;21963:18;;21956:32;22020:3;22005:19;;21806:224::o;22035:416::-;22237:2;22219:21;;;22276:2;22256:18;;;22249:30;22315:34;22310:2;22295:18;;22288:62;22386:22;22381:2;22366:18;;22359:50;22441:3;22426:19;;22209:242::o;22456:420::-;22658:2;22640:21;;;22697:2;22677:18;;;22670:30;22736:34;22731:2;22716:18;;22709:62;22807:26;22802:2;22787:18;;22780:54;22866:3;22851:19;;22630:246::o;22881:410::-;23083:2;23065:21;;;23122:2;23102:18;;;23095:30;23161:34;23156:2;23141:18;;23134:62;23232:16;23227:2;23212:18;;23205:44;23281:3;23266:19;;23055:236::o;23296:397::-;23498:2;23480:21;;;23537:2;23517:18;;;23510:30;23576:34;23571:2;23556:18;;23549:62;-1:-1:-1;;;23642:2:1;23627:18;;23620:31;23683:3;23668:19;;23470:223::o;23698:420::-;23900:2;23882:21;;;23939:2;23919:18;;;23912:30;23978:34;23973:2;23958:18;;23951:62;24049:26;24044:2;24029:18;;24022:54;24108:3;24093:19;;23872:246::o;24123:356::-;24325:2;24307:21;;;24344:18;;;24337:30;24403:34;24398:2;24383:18;;24376:62;24470:2;24455:18;;24297:182::o;24484:356::-;24686:2;24668:21;;;24705:18;;;24698:30;24764:34;24759:2;24744:18;;24737:62;24831:2;24816:18;;24658:182::o;24845:418::-;25047:2;25029:21;;;25086:2;25066:18;;;25059:30;25125:34;25120:2;25105:18;;25098:62;25196:24;25191:2;25176:18;;25169:52;25253:3;25238:19;;25019:244::o;25268:401::-;25470:2;25452:21;;;25509:2;25489:18;;;25482:30;25548:34;25543:2;25528:18;;25521:62;-1:-1:-1;;;25614:2:1;25599:18;;25592:35;25659:3;25644:19;;25442:227::o;25674:415::-;25876:2;25858:21;;;25915:2;25895:18;;;25888:30;25954:34;25949:2;25934:18;;25927:62;26025:21;26020:2;26005:18;;25998:49;26079:3;26064:19;;25848:241::o;26094:400::-;26296:2;26278:21;;;26335:2;26315:18;;;26308:30;26374:34;26369:2;26354:18;;26347:62;-1:-1:-1;;;26440:2:1;26425:18;;26418:34;26484:3;26469:19;;26268:226::o;26499:353::-;26701:2;26683:21;;;26740:2;26720:18;;;26713:30;26779:31;26774:2;26759:18;;26752:59;26843:2;26828:18;;26673:179::o;26857:347::-;27059:2;27041:21;;;27098:2;27078:18;;;27071:30;27137:25;27132:2;27117:18;;27110:53;27195:2;27180:18;;27031:173::o;27209:428::-;27411:2;27393:21;;;27450:2;27430:18;;;27423:30;;;27489:34;27469:18;;;27462:62;27560:34;27555:2;27540:18;;27533:62;27627:3;27612:19;;27383:254::o;27642:406::-;27844:2;27826:21;;;27883:2;27863:18;;;27856:30;27922:34;27917:2;27902:18;;27895:62;-1:-1:-1;;;27988:2:1;27973:18;;27966:40;28038:3;28023:19;;27816:232::o;28053:407::-;28255:2;28237:21;;;28294:2;28274:18;;;28267:30;28333:34;28328:2;28313:18;;28306:62;-1:-1:-1;;;28399:2:1;28384:18;;28377:41;28450:3;28435:19;;28227:233::o;28465:348::-;28667:2;28649:21;;;28706:2;28686:18;;;28679:30;28745:26;28740:2;28725:18;;28718:54;28804:2;28789:18;;28639:174::o;28818:416::-;29020:2;29002:21;;;29059:2;29039:18;;;29032:30;29098:34;29093:2;29078:18;;29071:62;29169:22;29164:2;29149:18;;29142:50;29224:3;29209:19;;28992:242::o;29239:177::-;29385:25;;;29373:2;29358:18;;29340:76::o;29421:1029::-;;29731:3;29720:9;29716:19;29762:6;29751:9;29744:25;29788:2;29826:6;29821:2;29810:9;29806:18;29799:34;29869:3;29864:2;29853:9;29849:18;29842:31;29893:6;29928;29922:13;29959:6;29951;29944:22;29997:3;29986:9;29982:19;29975:26;;30036:2;30028:6;30024:15;30010:29;;30057:4;30070:218;30084:6;30081:1;30078:13;30070:218;;;30149:13;;-1:-1:-1;;;;;30145:62:1;30133:75;;30263:15;;;;30228:12;;;;30106:1;30099:9;30070:218;;;-1:-1:-1;;;;;;;30344:55:1;;;;30339:2;30324:18;;30317:83;-1:-1:-1;;;30431:3:1;30416:19;30409:35;30305:3;29692:758;-1:-1:-1;;;29692:758:1:o;30455:319::-;30657:25;;;30713:2;30698:18;;30691:34;;;;30756:2;30741:18;;30734:34;30645:2;30630:18;;30612:162::o;30779:184::-;30951:4;30939:17;;;;30921:36;;30909:2;30894:18;;30876:87::o;30968:251::-;31038:2;31032:9;31068:17;;;31115:18;31100:34;;31136:22;;;31097:62;31094:2;;;31162:18;;:::i;:::-;31198:2;31191:22;31012:207;;-1:-1:-1;31012:207:1:o;31224:191::-;;31308:18;31300:6;31297:30;31294:2;;;31330:18;;:::i;:::-;-1:-1:-1;31398:2:1;31375:17;-1:-1:-1;;31371:31:1;31404:4;31367:42;;31284:131::o;31420:128::-;;31491:1;31487:6;31484:1;31481:13;31478:2;;;31497:18;;:::i;:::-;-1:-1:-1;31533:9:1;;31468:80::o;31553:217::-;;31619:1;31609:2;;-1:-1:-1;;;31644:31:1;;31698:4;31695:1;31688:15;31726:4;31651:1;31716:15;31609:2;-1:-1:-1;31755:9:1;;31599:171::o;31775:168::-;;31881:1;31877;31873:6;31869:14;31866:1;31863:21;31858:1;31851:9;31844:17;31840:45;31837:2;;;31888:18;;:::i;:::-;-1:-1:-1;31928:9:1;;31827:116::o;31948:125::-;;32016:1;32013;32010:8;32007:2;;;32021:18;;:::i;:::-;-1:-1:-1;32058:9:1;;31997:76::o;32078:258::-;32150:1;32160:113;32174:6;32171:1;32168:13;32160:113;;;32250:11;;;32244:18;32231:11;;;32224:39;32196:2;32189:10;32160:113;;;32291:6;32288:1;32285:13;32282:2;;;-1:-1:-1;;32326:1:1;32308:16;;32301:27;32131:205::o;32341:380::-;32426:1;32416:12;;32473:1;32463:12;;;32484:2;;32538:4;32530:6;32526:17;32516:27;;32484:2;32591;32583:6;32580:14;32560:18;32557:38;32554:2;;;32637:10;32632:3;32628:20;32625:1;32618:31;32672:4;32669:1;32662:15;32700:4;32697:1;32690:15;32554:2;;32396:325;;;:::o;32726:127::-;32787:10;32782:3;32778:20;32775:1;32768:31;32818:4;32815:1;32808:15;32842:4;32839:1;32832:15;32858:127;32919:10;32914:3;32910:20;32907:1;32900:31;32950:4;32947:1;32940:15;32974:4;32971:1;32964:15;32990:156;-1:-1:-1;;;;;33071:5:1;33067:54;33060:5;33057:65;33047:2;;33136:1;33133;33126:12;33047:2;33037:109;:::o;33151:120::-;33239:5;33232:13;33225:21;33218:5;33215:32;33205:2;;33261:1;33258;33251:12
Swarm Source
ipfs://2b82c9fe6a83988a5de3a1d8ea661d6db1b7f67acafce5af99d08d4f6bdada66
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.