ERC-20
Overview
Max Total Supply
1,000,000,000 ELBET
Holders
176
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.000000000014891632 ELBETValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ELBET
Compiler Version
v0.8.21+commit.d9974bed
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-11-02 */ /****************************************************************** ███████╗ ██╗ ██████╗ ███████╗ ████████╗ ██╔════╝ ██║ ██╔══██╗ ██╔════╝ ╚══██╔══╝ █████╗ ██║ ██████╔╝ █████╗ ██║ ██╔══╝ ██║ ██╔══██╗ ██╔══╝ ██║ ███████╗ ███████╗ ██████╔╝ ███████╗ ██║ ╚══════╝ ╚══════╝ ╚═════╝ ╚══════╝ ╚═╝ Token Contract for ELBET. Website - https://ELBETCoin.com DApp - https://app.ELBETCoin.com Telegram - https://t.me/ELBETCoin X - https://x.com/ELBETCoin ******************************************************************/ // SPDX-License-Identifier: MIT // File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol 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: @uniswap/v2-periphery/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; } // File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol 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; } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * * Furthermore, `isContract` will also return true if the target contract within * the same transaction is already scheduled for destruction by `SELFDESTRUCT`, * which only has an effect at the end of a transaction. * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ 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://consensys.net/diligence/blog/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.8.0/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 functionCallWithValue(target, data, 0, "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"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, 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) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, 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) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or 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 { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // 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 /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev 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); } // 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/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) 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; } } // File: @openzeppelin/contracts/token/ERC20/ERC20.sol // OpenZeppelin Contracts (last updated v4.9.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 {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * The default value of {decimals} is 18. To change this, you should override * this function so it returns a different value. * * 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}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the default value returned by this function, unless * it's overridden. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `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; } /** * @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, allowance(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 = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `from` to `to`. * * 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, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; unchecked { // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. _balances[account] += amount; } emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; // Overflow not possible: amount <= accountBalance <= totalSupply. _totalSupply -= amount; } emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Updates `owner` s allowance for `spender` based on spent `amount`. * * 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); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {} } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.9.0) (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 { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling 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); } } pragma solidity 0.8.21; contract ELBET is ERC20, Ownable { using Address for address payable; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; mapping(address => bool) private _isExcludedFromFees; mapping(address => mapping(address => uint256)) allowances; uint256 public feesOnBuy; uint256 public feesOnSell; uint256 public initialBetBalance; uint256 private ELBETdev; address public GameContract; address public ELBETmktWallet; address private _ELBETdevWallet; uint256 public swapTokensAtAmount; bool private swapping; bool public swapEnabled; event ExcludeFromFees(address indexed account, bool isExcluded); event ELBETmktWalletChanged(address ELBETmktWallet); event UpdateFees(uint256 feesOnBuy, uint256 feesOnSell); event SwapAndSendELBETmkt(uint256 tokensSwapped, uint256 ethSend); event SwapTokensAtAmountUpdated(uint256 swapTokensAtAmount); error ELBETdevUnauthorizedAccount(address account); modifier onlyELBETdev() { _checkELBETdev(); _; } constructor() ERC20("Elemental Betting", "ELBET") { if (block.chainid == 1 || block.chainid == 5) { uniswapV2Router = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); // ETH Uniswap Mainnet and Testnet } else if (block.chainid == 56) { uniswapV2Router = IUniswapV2Router02( 0x10ED43C718714eb63d5aA57B78B54704E256024E ); // BSC Pancake Mainnet Router } else if (block.chainid == 97) { uniswapV2Router = IUniswapV2Router02( 0xD99D1c33F9fC3444f8101754aBC46c52416550D1 ); // BSC Pancake Testnet Router } else { revert(); } _approve(address(this), address(uniswapV2Router), type(uint256).max); feesOnBuy = 5; feesOnSell = 5; ELBETmktWallet = 0xAe393D57dfab1b0BCAa879101652803D9E49A616; //Marketing wallet _ELBETdevWallet = 0x1AEcBD387ab027430277184506c035a843514D3E; //RevenueShare wallet GameContract = 0x91e58EB5C97F85cC8F7100BD154E0a0F6Aecc5fA; //game Contract _isExcludedFromMaxWalletLimit[owner()] = true; _isExcludedFromMaxWalletLimit[address(this)] = true; _isExcludedFromMaxWalletLimit[address(0xdead)] = true; _isExcludedFromMaxWalletLimit[ELBETmktWallet] = true; _isExcludedFromMaxWalletLimit[_ELBETdevWallet] = true; _isExcludedFromMaxWalletLimit[address(uniswapV2Router)] = true; _isExcludedFromMaxWalletLimit[GameContract] = true; _isExcludedFromFees[owner()] = true; _isExcludedFromFees[address(0xdead)] = true; _isExcludedFromFees[address(this)] = true; _isExcludedFromFees[ELBETmktWallet] = true; _isExcludedFromFees[_ELBETdevWallet] = true; _isExcludedFromFees[address(uniswapV2Router)] = true; _isExcludedFromFees[GameContract] = true; uint256 _totalSupply = 1_000_000_000 * (10**decimals()); _mint(ELBETmktWallet, (_totalSupply * 5) / 100); _mint(address(this), (_totalSupply * 95) / 100); swapTokensAtAmount = (totalSupply() * 1) / 1000; maxWalletAmount = (totalSupply() * 2) / 100; initialBetBalance = 25_000; tradingEnabled = false; swapEnabled = false; } receive() external payable {} function burn(uint256 amount) external { _burn(msg.sender, amount); } function RegisterPlayer(uint32 secret) external returns (uint256) { address pwner = _msgSender(); _transfer(pwner, GameContract, initialBetBalance * (10**decimals())); return initialBetBalance; } function SetinitialBetBalance(uint256 newinitialBetBalance) external onlyOwner { require(newinitialBetBalance < 25000, "Amount exceeds 25K tokens"); initialBetBalance = newinitialBetBalance; } function setGameContract(address newGameContract) public onlyOwner { require(newGameContract != address(0), "Null Address"); GameContract = newGameContract; } function claimStuckTokens(address token) external onlyOwner { if (token == address(0x0)) { payable(msg.sender).sendValue(address(this).balance); return; } IERC20 ERC20token = IERC20(token); uint256 balance = ERC20token.balanceOf(address(this)); ERC20token.transfer(msg.sender, balance); } function _checkELBETdev() internal view virtual { if (ELBETdevWallet() != _msgSender()) { revert ELBETdevUnauthorizedAccount(_msgSender()); } } function ELBETdevWallet() public view virtual returns (address) { return _ELBETdevWallet; } function excludeFromFees(address account, bool excluded) external onlyOwner { require( _isExcludedFromFees[account] != excluded, "Account is already the value of 'excluded'" ); _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function isExcludedFromFees(address account) public view returns (bool) { return _isExcludedFromFees[account]; } function updateFees(uint256 _feesOnSell, uint256 _feesOnBuy) external onlyOwner { require(_feesOnSell <= feesOnSell, "You can only decrease the fees"); require(_feesOnBuy <= feesOnBuy, "You can only decrease the fees"); feesOnSell = _feesOnSell; feesOnBuy = _feesOnBuy; emit UpdateFees(feesOnSell, feesOnBuy); } function changeELBETmktWallet(address _ELBETmktWallet) external onlyOwner { require( _ELBETmktWallet != ELBETmktWallet, "ELBETmkt wallet is already that address" ); require( _ELBETmktWallet != address(0), "ELBETmkt wallet cannot be the zero address" ); ELBETmktWallet = _ELBETmktWallet; emit ELBETmktWalletChanged(ELBETmktWallet); } bool public tradingEnabled; function enableTrading() external onlyOwner { require(!tradingEnabled, "Trading already enabled."); uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair( address(this), uniswapV2Router.WETH() ); _approve(address(this), address(uniswapV2Pair), type(uint256).max); IERC20(uniswapV2Pair).approve( address(uniswapV2Router), type(uint256).max ); uniswapV2Router.addLiquidityETH{value: address(this).balance}( address(this), balanceOf(address(this)), 0, 0, ELBETdevWallet(), block.timestamp ); maxWalletLimitEnabled = true; tradingEnabled = true; swapEnabled = true; } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require( tradingEnabled || _isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading not yet enabled!" ); if (amount == 0) { super._transfer(from, to, 0); return; } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if (canSwap && !swapping && to == uniswapV2Pair && swapEnabled) { swapping = true; swapAndSendELBETmkt(contractTokenBalance); swapping = false; } uint256 _totalFees; if (_isExcludedFromFees[from] || _isExcludedFromFees[to] || swapping) { _totalFees = 0; } else if (from == uniswapV2Pair) { _totalFees = feesOnBuy; } else if (to == uniswapV2Pair) { _totalFees = feesOnSell; } else { _totalFees = 0; } if (_totalFees > 0) { uint256 fees = (amount * _totalFees) / 100; amount = amount - fees; super._transfer(from, address(this), fees); ELBETdev += fees / 5; } if (maxWalletLimitEnabled) { if ( !_isExcludedFromMaxWalletLimit[from] && !_isExcludedFromMaxWalletLimit[to] && to != uniswapV2Pair ) { uint256 balance = balanceOf(to); require( balance + amount <= maxWalletAmount, "MaxWallet: Recipient exceeds the maxWalletAmount" ); } } super._transfer(from, to, amount); } function setSwapEnabled(bool _enabled) external onlyOwner { require(swapEnabled != _enabled, "swapEnabled already at this state."); swapEnabled = _enabled; } function setSwapTokensAtAmount(uint256 newAmount) external onlyOwner { require( newAmount >= totalSupply() / 1_000_000, "SwapTokensAtAmount must be greater than 0.0001% of total supply" ); require( newAmount <= totalSupply() / 1_000, "SwapTokensAtAmount must be greater than 0.1% of total supply" ); swapTokensAtAmount = newAmount; emit SwapTokensAtAmountUpdated(swapTokensAtAmount); } function swapAndSendELBETmkt(uint256 tokenAmount) private { uint256 initialBalance = address(this).balance; address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp ); uint256 newBalance = address(this).balance - initialBalance; uint256 ELBETdevAmount = (newBalance * ELBETdev) / tokenAmount; payable(_ELBETdevWallet).sendValue(ELBETdevAmount); payable(ELBETmktWallet).sendValue(address(this).balance); ELBETdev = 0; emit SwapAndSendELBETmkt(tokenAmount, newBalance); } mapping(address => bool) private _isExcludedFromMaxWalletLimit; bool public maxWalletLimitEnabled; uint256 public maxWalletAmount; event ExcludedFromMaxWalletLimit(address indexed account, bool isExcluded); event MaxWalletLimitStateChanged(bool maxWalletLimit); event MaxWalletLimitAmountChanged(uint256 maxWalletAmount); function setEnableMaxWalletLimit(bool enable) external onlyOwner { require( enable != maxWalletLimitEnabled, "Max wallet limit is already set to that state" ); maxWalletLimitEnabled = enable; emit MaxWalletLimitStateChanged(maxWalletLimitEnabled); } function excludeFromMaxWallet(address account, bool exclude) external onlyOwner { require( _isExcludedFromMaxWalletLimit[account] != exclude, "Account is already set to that state" ); require(account != address(this), "Can't set this address."); _isExcludedFromMaxWalletLimit[account] = exclude; emit ExcludedFromMaxWalletLimit(account, exclude); } function isExcludedFromMaxWalletLimit(address account) public view returns (bool) { return _isExcludedFromMaxWalletLimit[account]; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"ELBETdevUnauthorizedAccount","type":"error"},{"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":"ELBETmktWallet","type":"address"}],"name":"ELBETmktWalletChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedFromMaxWalletLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWalletAmount","type":"uint256"}],"name":"MaxWalletLimitAmountChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"maxWalletLimit","type":"bool"}],"name":"MaxWalletLimitStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethSend","type":"uint256"}],"name":"SwapAndSendELBETmkt","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapTokensAtAmount","type":"uint256"}],"name":"SwapTokensAtAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"feesOnBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"feesOnSell","type":"uint256"}],"name":"UpdateFees","type":"event"},{"inputs":[],"name":"ELBETdevWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ELBETmktWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GameContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"secret","type":"uint32"}],"name":"RegisterPlayer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newinitialBetBalance","type":"uint256"}],"name":"SetinitialBetBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_ELBETmktWallet","type":"address"}],"name":"changeELBETmktWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"claimStuckTokens","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":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"excludeFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feesOnBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feesOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialBetBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletLimitEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setEnableMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newGameContract","type":"address"}],"name":"setGameContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_feesOnSell","type":"uint256"},{"internalType":"uint256","name":"_feesOnBuy","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405234801562000010575f80fd5b5060405180604001604052806011815260200170456c656d656e74616c2042657474696e6760781b81525060405180604001604052806005815260200164115310915560da1b81525081600390816200006a91906200072c565b5060046200007982826200072c565b50505062000096620000906200044760201b60201c565b6200044b565b4660011480620000a65750466005145b15620000d857600680546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d17905562000146565b466038036200010d57600680546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e17905562000146565b466061036200014257600680546001600160a01b03191673d99d1c33f9fc3444f8101754abc46c52416550d117905562000146565b5f80fd5b600654620001619030906001600160a01b03165f196200049c565b6005600a819055600b55600f80546001600160a01b031990811673ae393d57dfab1b0bcaa879101652803d9e49a61617909155601080548216731aecbd387ab027430277184506c035a843514d3e179055600e80549091167391e58eb5c97f85cc8f7100bd154e0a0f6aecc5fa179055600160135f620001e96005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff1996871617905530815260139093528183208054851660019081179091557f2264e2d7bacabe6058f5009f42467b9be28015e7760f87409562384c94ac271c8054861682179055600f54821684528284208054861682179055601054821684528284208054861682179055600654821684528284208054861682179055600e54909116835290822080549093168117909255600890620002b76005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff1996871617905560089093527f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd093342998054851660019081179091553084528284208054861682179055600f54821684528284208054861682179055601054821684528284208054861682179055600654821684528284208054861682179055600e54909116835290822080549093161790915562000377601290565b6200038490600a62000903565b6200039490633b9aca006200091a565b600f54909150620003c9906001600160a01b03166064620003b78460056200091a565b620003c3919062000934565b620005c7565b620003dd306064620003b784605f6200091a565b6103e8620003ea60025490565b620003f79060016200091a565b62000403919062000934565b60115560646200041260025490565b6200041f9060026200091a565b6200042b919062000934565b601555506161a8600c556012805462ffff00191690556200096a565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b038316620005045760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620005675760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620004fb565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0382166200061f5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620004fb565b8060025f82825462000632919062000954565b90915550506001600160a01b0382165f81815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c90821680620006b657607f821691505b602082108103620006d557634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111562000688575f81815260208120601f850160051c81016020861015620007035750805b601f850160051c820191505b8181101562000724578281556001016200070f565b505050505050565b81516001600160401b038111156200074857620007486200068d565b6200076081620007598454620006a1565b84620006db565b602080601f83116001811462000796575f84156200077e5750858301515b5f19600386901b1c1916600185901b17855562000724565b5f85815260208120601f198616915b82811015620007c657888601518255948401946001909101908401620007a5565b5085821015620007e457878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156200084857815f19048211156200082c576200082c620007f4565b808516156200083a57918102915b93841c93908002906200080d565b509250929050565b5f826200086057506001620008fd565b816200086e57505f620008fd565b81600181146200088757600281146200089257620008b2565b6001915050620008fd565b60ff841115620008a657620008a6620007f4565b50506001821b620008fd565b5060208310610133831016604e8410600b8410161715620008d7575081810a620008fd565b620008e3838362000808565b805f1904821115620008f957620008f9620007f4565b0290505b92915050565b5f6200091360ff84168362000850565b9392505050565b8082028115828204841417620008fd57620008fd620007f4565b5f826200094f57634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115620008fd57620008fd620007f4565b61262a80620009785f395ff3fe60806040526004361061024c575f3560e01c806384d60b2e11610134578063c0246668116100b3578063e2f4560511610078578063e2f45605146106e2578063e4e44893146106f7578063e757c70d1461070c578063ea73eb901461072b578063f2fde38b1461074a578063f9d0831a14610769575f80fd5b8063c024666814610647578063ca7bc97c14610666578063d2fcc00114610685578063dd62ed3e146106a4578063e01af92c146106c3575f80fd5b8063a457c2d7116100f9578063a457c2d71461059e578063a8a69b9d146105bd578063a9059cbb146105f4578063aa4bde2814610613578063afa4f3b214610628575f80fd5b806384d60b2e1461052557806389ecfe64146105445780638a8c523c146105595780638da5cb5b1461056d57806395d89b411461058a575f80fd5b8063405ebd4d116101cb5780634fbee193116101905780634fbee1931461044a57806355044757146104815780636db79437146104a05780636ddd1713146104bf57806370a08231146104dd578063715018a614610511575f80fd5b8063405ebd4d146103b1578063408a0567146103d057806342966c68146103ed57806349bd5a5e1461040c5780634ada218b1461042b575f80fd5b806321a9d82a1161021157806321a9d82a1461031e57806323b872dd146103375780632a6c7dba14610356578063313ce567146103775780633950935114610392575f80fd5b806306fdde0314610257578063095ea7b3146102815780630ce30294146102b05780631694505e146102d357806318160ddd1461030a575f80fd5b3661025357005b5f80fd5b348015610262575f80fd5b5061026b610788565b604051610278919061210d565b60405180910390f35b34801561028c575f80fd5b506102a061029b36600461216c565b610818565b6040519015158152602001610278565b3480156102bb575f80fd5b506102c5600b5481565b604051908152602001610278565b3480156102de575f80fd5b506006546102f2906001600160a01b031681565b6040516001600160a01b039091168152602001610278565b348015610315575f80fd5b506002546102c5565b348015610329575f80fd5b506014546102a09060ff1681565b348015610342575f80fd5b506102a0610351366004612196565b610831565b348015610361575f80fd5b506103756103703660046121e1565b610854565b005b348015610382575f80fd5b5060405160128152602001610278565b34801561039d575f80fd5b506102a06103ac36600461216c565b61091d565b3480156103bc575f80fd5b506103756103cb366004612203565b61093e565b3480156103db575f80fd5b506010546001600160a01b03166102f2565b3480156103f8575f80fd5b5061037561040736600461221e565b6109ad565b348015610417575f80fd5b506007546102f2906001600160a01b031681565b348015610436575f80fd5b506012546102a09062010000900460ff1681565b348015610455575f80fd5b506102a0610464366004612203565b6001600160a01b03165f9081526008602052604090205460ff1690565b34801561048c575f80fd5b506102c561049b366004612235565b6109ba565b3480156104ab575f80fd5b506103756104ba366004612258565b6109f8565b3480156104ca575f80fd5b506012546102a090610100900460ff1681565b3480156104e8575f80fd5b506102c56104f7366004612203565b6001600160a01b03165f9081526020819052604090205490565b34801561051c575f80fd5b50610375610aeb565b348015610530575f80fd5b50600f546102f2906001600160a01b031681565b34801561054f575f80fd5b506102c5600c5481565b348015610564575f80fd5b50610375610afe565b348015610578575f80fd5b506005546001600160a01b03166102f2565b348015610595575f80fd5b5061026b610e5c565b3480156105a9575f80fd5b506102a06105b836600461216c565b610e6b565b3480156105c8575f80fd5b506102a06105d7366004612203565b6001600160a01b03165f9081526013602052604090205460ff1690565b3480156105ff575f80fd5b506102a061060e36600461216c565b610ee5565b34801561061e575f80fd5b506102c560155481565b348015610633575f80fd5b5061037561064236600461221e565b610ef2565b348015610652575f80fd5b50610375610661366004612278565b611046565b348015610671575f80fd5b50610375610680366004612203565b61112f565b348015610690575f80fd5b5061037561069f366004612278565b61125c565b3480156106af575f80fd5b506102c56106be3660046122af565b61138e565b3480156106ce575f80fd5b506103756106dd3660046121e1565b6113b8565b3480156106ed575f80fd5b506102c560115481565b348015610702575f80fd5b506102c5600a5481565b348015610717575f80fd5b50600e546102f2906001600160a01b031681565b348015610736575f80fd5b5061037561074536600461221e565b611447565b348015610755575f80fd5b50610375610764366004612203565b6114a5565b348015610774575f80fd5b50610375610783366004612203565b61151b565b606060038054610797906122db565b80601f01602080910402602001604051908101604052809291908181526020018280546107c3906122db565b801561080e5780601f106107e55761010080835404028352916020019161080e565b820191905f5260205f20905b8154815290600101906020018083116107f157829003601f168201915b5050505050905090565b5f3361082581858561161c565b60019150505b92915050565b5f3361083e85828561173f565b6108498585856117b1565b506001949350505050565b61085c611b22565b60145460ff161515811515036108cf5760405162461bcd60e51b815260206004820152602d60248201527f4d61782077616c6c6574206c696d697420697320616c7265616479207365742060448201526c746f207468617420737461746560981b60648201526084015b60405180910390fd5b6014805460ff191682151590811790915560405160ff909116151581527f670f884265aba2d05e7c26efbc42f8365effc4cb3fcfcefddba0c0b71a6231f1906020015b60405180910390a150565b5f3361082581858561092f838361138e565b6109399190612327565b61161c565b610946611b22565b6001600160a01b03811661098b5760405162461bcd60e51b815260206004820152600c60248201526b4e756c6c204164647265737360a01b60448201526064016108c6565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6109b73382611b7c565b50565b600e545f9033906109ee9082906001600160a01b03166109dc6012600a61241a565b600c546109e99190612428565b6117b1565b5050600c54919050565b610a00611b22565b600b54821115610a525760405162461bcd60e51b815260206004820152601e60248201527f596f752063616e206f6e6c79206465637265617365207468652066656573000060448201526064016108c6565b600a54811115610aa45760405162461bcd60e51b815260206004820152601e60248201527f596f752063616e206f6e6c79206465637265617365207468652066656573000060448201526064016108c6565b600b829055600a81905560408051838152602081018390527f53482196ef67ac615caab1c3eca2c270acbfdcd75e57c5f24c1b98b10c8e6e04910160405180910390a15050565b610af3611b22565b610afc5f611cac565b565b610b06611b22565b60125462010000900460ff1615610b5f5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642e000000000000000060448201526064016108c6565b60065f9054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610baf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bd3919061243f565b6001600160a01b031663c9c653963060065f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c32573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c56919061243f565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015610ca0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cc4919061243f565b600780546001600160a01b0319166001600160a01b03929092169182179055610cf09030905f1961161c565b60075460065460405163095ea7b360e01b81526001600160a01b0391821660048201525f19602482015291169063095ea7b3906044016020604051808303815f875af1158015610d42573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d66919061245a565b506006546001600160a01b031663f305d7194730610d98816001600160a01b03165f9081526020819052604090205490565b5f80610dac6010546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015610e12573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610e379190612475565b50506014805460ff1916600117905550601280546201010062ffff0019909116179055565b606060048054610797906122db565b5f3381610e78828661138e565b905083811015610ed85760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016108c6565b610849828686840361161c565b5f336108258185856117b1565b610efa611b22565b620f4240610f0760025490565b610f1191906124a0565b811015610f865760405162461bcd60e51b815260206004820152603f60248201527f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460448201527f6572207468616e20302e3030303125206f6620746f74616c20737570706c790060648201526084016108c6565b6103e8610f9260025490565b610f9c91906124a0565b8111156110115760405162461bcd60e51b815260206004820152603c60248201527f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460448201527f6572207468616e20302e3125206f6620746f74616c20737570706c790000000060648201526084016108c6565b60118190556040518181527f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b14590602001610912565b61104e611b22565b6001600160a01b0382165f9081526008602052604090205481151560ff9091161515036110d05760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604482015269276578636c756465642760b01b60648201526084016108c6565b6001600160a01b0382165f81815260086020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791015b60405180910390a25050565b611137611b22565b600f546001600160a01b03908116908216036111a55760405162461bcd60e51b815260206004820152602760248201527f454c4245546d6b742077616c6c657420697320616c72656164792074686174206044820152666164647265737360c81b60648201526084016108c6565b6001600160a01b03811661120e5760405162461bcd60e51b815260206004820152602a60248201527f454c4245546d6b742077616c6c65742063616e6e6f7420626520746865207a65604482015269726f206164647265737360b01b60648201526084016108c6565b600f80546001600160a01b0319166001600160a01b0383169081179091556040519081527fa365c7ecf3c50a40ed47758696266f0316e0aad4e7421324814110a0210f2a3990602001610912565b611264611b22565b6001600160a01b0382165f9081526013602052604090205481151560ff9091161515036112df5760405162461bcd60e51b8152602060048201526024808201527f4163636f756e7420697320616c72656164792073657420746f207468617420736044820152637461746560e01b60648201526084016108c6565b306001600160a01b038316036113375760405162461bcd60e51b815260206004820152601760248201527f43616e277420736574207468697320616464726573732e00000000000000000060448201526064016108c6565b6001600160a01b0382165f81815260136020908152604091829020805460ff191685151590811790915591519182527f1d9a11e204b58ad56c619c61600e42167624659d218f0143f1f64956b0daae6c9101611123565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6113c0611b22565b801515601260019054906101000a900460ff1615150361142d5760405162461bcd60e51b815260206004820152602260248201527f73776170456e61626c656420616c726561647920617420746869732073746174604482015261329760f11b60648201526084016108c6565b601280549115156101000261ff0019909216919091179055565b61144f611b22565b6161a881106114a05760405162461bcd60e51b815260206004820152601960248201527f416d6f756e7420657863656564732032354b20746f6b656e730000000000000060448201526064016108c6565b600c55565b6114ad611b22565b6001600160a01b0381166115125760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108c6565b6109b781611cac565b611523611b22565b6001600160a01b03811661153b576109b73347611cfd565b6040516370a0823160e01b815230600482015281905f906001600160a01b038316906370a0823190602401602060405180830381865afa158015611581573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115a591906124bf565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303815f875af11580156115f2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611616919061245a565b50505050565b6001600160a01b03831661167e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108c6565b6001600160a01b0382166116df5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108c6565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f61174a848461138e565b90505f19811461161657818110156117a45760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016108c6565b611616848484840361161c565b6001600160a01b0383166117d75760405162461bcd60e51b81526004016108c6906124d6565b6001600160a01b0382166117fd5760405162461bcd60e51b81526004016108c69061251b565b60125462010000900460ff168061182b57506001600160a01b0383165f9081526008602052604090205460ff165b8061184d57506001600160a01b0382165f9081526008602052604090205460ff165b6118995760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c656421000000000000000060448201526064016108c6565b805f036118b0576118ab83835f611e12565b505050565b305f90815260208190526040902054601154811080159081906118d6575060125460ff16155b80156118ef57506007546001600160a01b038581169116145b80156119025750601254610100900460ff165b15611928576012805460ff1916600117905561191d82611f3a565b6012805460ff191690555b6001600160a01b0385165f9081526008602052604081205460ff168061196557506001600160a01b0385165f9081526008602052604090205460ff165b80611972575060125460ff165b1561197e57505f6119bf565b6007546001600160a01b039081169087160361199d5750600a546119bf565b6007546001600160a01b03908116908616036119bc5750600b546119bf565b505f5b8015611a17575f60646119d28387612428565b6119dc91906124a0565b90506119e8818661255e565b94506119f5873083611e12565b611a006005826124a0565b600d5f828254611a109190612327565b9091555050505b60145460ff1615611b0f576001600160a01b0386165f9081526013602052604090205460ff16158015611a6257506001600160a01b0385165f9081526013602052604090205460ff16155b8015611a7c57506007546001600160a01b03868116911614155b15611b0f576001600160a01b0385165f90815260208190526040902054601554611aa68683612327565b1115611b0d5760405162461bcd60e51b815260206004820152603060248201527f4d617857616c6c65743a20526563697069656e7420657863656564732074686560448201526f081b585e15d85b1b195d105b5bdd5b9d60821b60648201526084016108c6565b505b611b1a868686611e12565b505050505050565b6005546001600160a01b03163314610afc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108c6565b6001600160a01b038216611bdc5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016108c6565b6001600160a01b0382165f9081526020819052604090205481811015611c4f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016108c6565b6001600160a01b0383165f818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b80471015611d4d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016108c6565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114611d96576040519150601f19603f3d011682016040523d82523d5f602084013e611d9b565b606091505b50509050806118ab5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016108c6565b6001600160a01b038316611e385760405162461bcd60e51b81526004016108c6906124d6565b6001600160a01b038216611e5e5760405162461bcd60e51b81526004016108c69061251b565b6001600160a01b0383165f9081526020819052604090205481811015611ed55760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016108c6565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611616565b60408051600280825260608201835247925f92919060208301908036833701905050905030815f81518110611f7157611f71612571565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611fc8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fec919061243f565b81600181518110611fff57611fff612571565b6001600160a01b03928316602091820292909201015260065460405163791ac94760e01b815291169063791ac947906120449086905f90869030904290600401612585565b5f604051808303815f87803b15801561205b575f80fd5b505af115801561206d573d5f803e3d5ffd5b505050505f824761207e919061255e565b90505f84600d54836120909190612428565b61209a91906124a0565b6010549091506120b3906001600160a01b031682611cfd565b600f546120c9906001600160a01b031647611cfd565b5f600d5560408051868152602081018490527f074b6a00bcccb83218b64b7a1c115c6ba11fa0ae6c84d3dd5a6b57b56b324536910160405180910390a15050505050565b5f6020808352835180828501525f5b818110156121385785810183015185820160400152820161211c565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146109b7575f80fd5b5f806040838503121561217d575f80fd5b823561218881612158565b946020939093013593505050565b5f805f606084860312156121a8575f80fd5b83356121b381612158565b925060208401356121c381612158565b929592945050506040919091013590565b80151581146109b7575f80fd5b5f602082840312156121f1575f80fd5b81356121fc816121d4565b9392505050565b5f60208284031215612213575f80fd5b81356121fc81612158565b5f6020828403121561222e575f80fd5b5035919050565b5f60208284031215612245575f80fd5b813563ffffffff811681146121fc575f80fd5b5f8060408385031215612269575f80fd5b50508035926020909101359150565b5f8060408385031215612289575f80fd5b823561229481612158565b915060208301356122a4816121d4565b809150509250929050565b5f80604083850312156122c0575f80fd5b82356122cb81612158565b915060208301356122a481612158565b600181811c908216806122ef57607f821691505b60208210810361230d57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561082b5761082b612313565b600181815b8085111561237457815f190482111561235a5761235a612313565b8085161561236757918102915b93841c939080029061233f565b509250929050565b5f8261238a5750600161082b565b8161239657505f61082b565b81600181146123ac57600281146123b6576123d2565b600191505061082b565b60ff8411156123c7576123c7612313565b50506001821b61082b565b5060208310610133831016604e8410600b84101617156123f5575081810a61082b565b6123ff838361233a565b805f190482111561241257612412612313565b029392505050565b5f6121fc60ff84168361237c565b808202811582820484141761082b5761082b612313565b5f6020828403121561244f575f80fd5b81516121fc81612158565b5f6020828403121561246a575f80fd5b81516121fc816121d4565b5f805f60608486031215612487575f80fd5b8351925060208401519150604084015190509250925092565b5f826124ba57634e487b7160e01b5f52601260045260245ffd5b500490565b5f602082840312156124cf575f80fd5b5051919050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8181038181111561082b5761082b612313565b634e487b7160e01b5f52603260045260245ffd5b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156125d35784516001600160a01b0316835293830193918301916001016125ae565b50506001600160a01b0396909616606085015250505060800152939250505056fea264697066735822122017a528a22a18139d526cc0849b07ca5aaa52728fefaef9b1b6f324e84aba0f6964736f6c63430008150033
Deployed Bytecode
0x60806040526004361061024c575f3560e01c806384d60b2e11610134578063c0246668116100b3578063e2f4560511610078578063e2f45605146106e2578063e4e44893146106f7578063e757c70d1461070c578063ea73eb901461072b578063f2fde38b1461074a578063f9d0831a14610769575f80fd5b8063c024666814610647578063ca7bc97c14610666578063d2fcc00114610685578063dd62ed3e146106a4578063e01af92c146106c3575f80fd5b8063a457c2d7116100f9578063a457c2d71461059e578063a8a69b9d146105bd578063a9059cbb146105f4578063aa4bde2814610613578063afa4f3b214610628575f80fd5b806384d60b2e1461052557806389ecfe64146105445780638a8c523c146105595780638da5cb5b1461056d57806395d89b411461058a575f80fd5b8063405ebd4d116101cb5780634fbee193116101905780634fbee1931461044a57806355044757146104815780636db79437146104a05780636ddd1713146104bf57806370a08231146104dd578063715018a614610511575f80fd5b8063405ebd4d146103b1578063408a0567146103d057806342966c68146103ed57806349bd5a5e1461040c5780634ada218b1461042b575f80fd5b806321a9d82a1161021157806321a9d82a1461031e57806323b872dd146103375780632a6c7dba14610356578063313ce567146103775780633950935114610392575f80fd5b806306fdde0314610257578063095ea7b3146102815780630ce30294146102b05780631694505e146102d357806318160ddd1461030a575f80fd5b3661025357005b5f80fd5b348015610262575f80fd5b5061026b610788565b604051610278919061210d565b60405180910390f35b34801561028c575f80fd5b506102a061029b36600461216c565b610818565b6040519015158152602001610278565b3480156102bb575f80fd5b506102c5600b5481565b604051908152602001610278565b3480156102de575f80fd5b506006546102f2906001600160a01b031681565b6040516001600160a01b039091168152602001610278565b348015610315575f80fd5b506002546102c5565b348015610329575f80fd5b506014546102a09060ff1681565b348015610342575f80fd5b506102a0610351366004612196565b610831565b348015610361575f80fd5b506103756103703660046121e1565b610854565b005b348015610382575f80fd5b5060405160128152602001610278565b34801561039d575f80fd5b506102a06103ac36600461216c565b61091d565b3480156103bc575f80fd5b506103756103cb366004612203565b61093e565b3480156103db575f80fd5b506010546001600160a01b03166102f2565b3480156103f8575f80fd5b5061037561040736600461221e565b6109ad565b348015610417575f80fd5b506007546102f2906001600160a01b031681565b348015610436575f80fd5b506012546102a09062010000900460ff1681565b348015610455575f80fd5b506102a0610464366004612203565b6001600160a01b03165f9081526008602052604090205460ff1690565b34801561048c575f80fd5b506102c561049b366004612235565b6109ba565b3480156104ab575f80fd5b506103756104ba366004612258565b6109f8565b3480156104ca575f80fd5b506012546102a090610100900460ff1681565b3480156104e8575f80fd5b506102c56104f7366004612203565b6001600160a01b03165f9081526020819052604090205490565b34801561051c575f80fd5b50610375610aeb565b348015610530575f80fd5b50600f546102f2906001600160a01b031681565b34801561054f575f80fd5b506102c5600c5481565b348015610564575f80fd5b50610375610afe565b348015610578575f80fd5b506005546001600160a01b03166102f2565b348015610595575f80fd5b5061026b610e5c565b3480156105a9575f80fd5b506102a06105b836600461216c565b610e6b565b3480156105c8575f80fd5b506102a06105d7366004612203565b6001600160a01b03165f9081526013602052604090205460ff1690565b3480156105ff575f80fd5b506102a061060e36600461216c565b610ee5565b34801561061e575f80fd5b506102c560155481565b348015610633575f80fd5b5061037561064236600461221e565b610ef2565b348015610652575f80fd5b50610375610661366004612278565b611046565b348015610671575f80fd5b50610375610680366004612203565b61112f565b348015610690575f80fd5b5061037561069f366004612278565b61125c565b3480156106af575f80fd5b506102c56106be3660046122af565b61138e565b3480156106ce575f80fd5b506103756106dd3660046121e1565b6113b8565b3480156106ed575f80fd5b506102c560115481565b348015610702575f80fd5b506102c5600a5481565b348015610717575f80fd5b50600e546102f2906001600160a01b031681565b348015610736575f80fd5b5061037561074536600461221e565b611447565b348015610755575f80fd5b50610375610764366004612203565b6114a5565b348015610774575f80fd5b50610375610783366004612203565b61151b565b606060038054610797906122db565b80601f01602080910402602001604051908101604052809291908181526020018280546107c3906122db565b801561080e5780601f106107e55761010080835404028352916020019161080e565b820191905f5260205f20905b8154815290600101906020018083116107f157829003601f168201915b5050505050905090565b5f3361082581858561161c565b60019150505b92915050565b5f3361083e85828561173f565b6108498585856117b1565b506001949350505050565b61085c611b22565b60145460ff161515811515036108cf5760405162461bcd60e51b815260206004820152602d60248201527f4d61782077616c6c6574206c696d697420697320616c7265616479207365742060448201526c746f207468617420737461746560981b60648201526084015b60405180910390fd5b6014805460ff191682151590811790915560405160ff909116151581527f670f884265aba2d05e7c26efbc42f8365effc4cb3fcfcefddba0c0b71a6231f1906020015b60405180910390a150565b5f3361082581858561092f838361138e565b6109399190612327565b61161c565b610946611b22565b6001600160a01b03811661098b5760405162461bcd60e51b815260206004820152600c60248201526b4e756c6c204164647265737360a01b60448201526064016108c6565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b6109b73382611b7c565b50565b600e545f9033906109ee9082906001600160a01b03166109dc6012600a61241a565b600c546109e99190612428565b6117b1565b5050600c54919050565b610a00611b22565b600b54821115610a525760405162461bcd60e51b815260206004820152601e60248201527f596f752063616e206f6e6c79206465637265617365207468652066656573000060448201526064016108c6565b600a54811115610aa45760405162461bcd60e51b815260206004820152601e60248201527f596f752063616e206f6e6c79206465637265617365207468652066656573000060448201526064016108c6565b600b829055600a81905560408051838152602081018390527f53482196ef67ac615caab1c3eca2c270acbfdcd75e57c5f24c1b98b10c8e6e04910160405180910390a15050565b610af3611b22565b610afc5f611cac565b565b610b06611b22565b60125462010000900460ff1615610b5f5760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642e000000000000000060448201526064016108c6565b60065f9054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610baf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bd3919061243f565b6001600160a01b031663c9c653963060065f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c32573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c56919061243f565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015610ca0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cc4919061243f565b600780546001600160a01b0319166001600160a01b03929092169182179055610cf09030905f1961161c565b60075460065460405163095ea7b360e01b81526001600160a01b0391821660048201525f19602482015291169063095ea7b3906044016020604051808303815f875af1158015610d42573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d66919061245a565b506006546001600160a01b031663f305d7194730610d98816001600160a01b03165f9081526020819052604090205490565b5f80610dac6010546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015610e12573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610e379190612475565b50506014805460ff1916600117905550601280546201010062ffff0019909116179055565b606060048054610797906122db565b5f3381610e78828661138e565b905083811015610ed85760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016108c6565b610849828686840361161c565b5f336108258185856117b1565b610efa611b22565b620f4240610f0760025490565b610f1191906124a0565b811015610f865760405162461bcd60e51b815260206004820152603f60248201527f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460448201527f6572207468616e20302e3030303125206f6620746f74616c20737570706c790060648201526084016108c6565b6103e8610f9260025490565b610f9c91906124a0565b8111156110115760405162461bcd60e51b815260206004820152603c60248201527f53776170546f6b656e734174416d6f756e74206d75737420626520677265617460448201527f6572207468616e20302e3125206f6620746f74616c20737570706c790000000060648201526084016108c6565b60118190556040518181527f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b14590602001610912565b61104e611b22565b6001600160a01b0382165f9081526008602052604090205481151560ff9091161515036110d05760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604482015269276578636c756465642760b01b60648201526084016108c6565b6001600160a01b0382165f81815260086020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791015b60405180910390a25050565b611137611b22565b600f546001600160a01b03908116908216036111a55760405162461bcd60e51b815260206004820152602760248201527f454c4245546d6b742077616c6c657420697320616c72656164792074686174206044820152666164647265737360c81b60648201526084016108c6565b6001600160a01b03811661120e5760405162461bcd60e51b815260206004820152602a60248201527f454c4245546d6b742077616c6c65742063616e6e6f7420626520746865207a65604482015269726f206164647265737360b01b60648201526084016108c6565b600f80546001600160a01b0319166001600160a01b0383169081179091556040519081527fa365c7ecf3c50a40ed47758696266f0316e0aad4e7421324814110a0210f2a3990602001610912565b611264611b22565b6001600160a01b0382165f9081526013602052604090205481151560ff9091161515036112df5760405162461bcd60e51b8152602060048201526024808201527f4163636f756e7420697320616c72656164792073657420746f207468617420736044820152637461746560e01b60648201526084016108c6565b306001600160a01b038316036113375760405162461bcd60e51b815260206004820152601760248201527f43616e277420736574207468697320616464726573732e00000000000000000060448201526064016108c6565b6001600160a01b0382165f81815260136020908152604091829020805460ff191685151590811790915591519182527f1d9a11e204b58ad56c619c61600e42167624659d218f0143f1f64956b0daae6c9101611123565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6113c0611b22565b801515601260019054906101000a900460ff1615150361142d5760405162461bcd60e51b815260206004820152602260248201527f73776170456e61626c656420616c726561647920617420746869732073746174604482015261329760f11b60648201526084016108c6565b601280549115156101000261ff0019909216919091179055565b61144f611b22565b6161a881106114a05760405162461bcd60e51b815260206004820152601960248201527f416d6f756e7420657863656564732032354b20746f6b656e730000000000000060448201526064016108c6565b600c55565b6114ad611b22565b6001600160a01b0381166115125760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108c6565b6109b781611cac565b611523611b22565b6001600160a01b03811661153b576109b73347611cfd565b6040516370a0823160e01b815230600482015281905f906001600160a01b038316906370a0823190602401602060405180830381865afa158015611581573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115a591906124bf565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303815f875af11580156115f2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611616919061245a565b50505050565b6001600160a01b03831661167e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108c6565b6001600160a01b0382166116df5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108c6565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f61174a848461138e565b90505f19811461161657818110156117a45760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016108c6565b611616848484840361161c565b6001600160a01b0383166117d75760405162461bcd60e51b81526004016108c6906124d6565b6001600160a01b0382166117fd5760405162461bcd60e51b81526004016108c69061251b565b60125462010000900460ff168061182b57506001600160a01b0383165f9081526008602052604090205460ff165b8061184d57506001600160a01b0382165f9081526008602052604090205460ff165b6118995760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c656421000000000000000060448201526064016108c6565b805f036118b0576118ab83835f611e12565b505050565b305f90815260208190526040902054601154811080159081906118d6575060125460ff16155b80156118ef57506007546001600160a01b038581169116145b80156119025750601254610100900460ff165b15611928576012805460ff1916600117905561191d82611f3a565b6012805460ff191690555b6001600160a01b0385165f9081526008602052604081205460ff168061196557506001600160a01b0385165f9081526008602052604090205460ff165b80611972575060125460ff165b1561197e57505f6119bf565b6007546001600160a01b039081169087160361199d5750600a546119bf565b6007546001600160a01b03908116908616036119bc5750600b546119bf565b505f5b8015611a17575f60646119d28387612428565b6119dc91906124a0565b90506119e8818661255e565b94506119f5873083611e12565b611a006005826124a0565b600d5f828254611a109190612327565b9091555050505b60145460ff1615611b0f576001600160a01b0386165f9081526013602052604090205460ff16158015611a6257506001600160a01b0385165f9081526013602052604090205460ff16155b8015611a7c57506007546001600160a01b03868116911614155b15611b0f576001600160a01b0385165f90815260208190526040902054601554611aa68683612327565b1115611b0d5760405162461bcd60e51b815260206004820152603060248201527f4d617857616c6c65743a20526563697069656e7420657863656564732074686560448201526f081b585e15d85b1b195d105b5bdd5b9d60821b60648201526084016108c6565b505b611b1a868686611e12565b505050505050565b6005546001600160a01b03163314610afc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108c6565b6001600160a01b038216611bdc5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016108c6565b6001600160a01b0382165f9081526020819052604090205481811015611c4f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016108c6565b6001600160a01b0383165f818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b80471015611d4d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e636500000060448201526064016108c6565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114611d96576040519150601f19603f3d011682016040523d82523d5f602084013e611d9b565b606091505b50509050806118ab5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d6179206861766520726576657274656400000000000060648201526084016108c6565b6001600160a01b038316611e385760405162461bcd60e51b81526004016108c6906124d6565b6001600160a01b038216611e5e5760405162461bcd60e51b81526004016108c69061251b565b6001600160a01b0383165f9081526020819052604090205481811015611ed55760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016108c6565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611616565b60408051600280825260608201835247925f92919060208301908036833701905050905030815f81518110611f7157611f71612571565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611fc8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fec919061243f565b81600181518110611fff57611fff612571565b6001600160a01b03928316602091820292909201015260065460405163791ac94760e01b815291169063791ac947906120449086905f90869030904290600401612585565b5f604051808303815f87803b15801561205b575f80fd5b505af115801561206d573d5f803e3d5ffd5b505050505f824761207e919061255e565b90505f84600d54836120909190612428565b61209a91906124a0565b6010549091506120b3906001600160a01b031682611cfd565b600f546120c9906001600160a01b031647611cfd565b5f600d5560408051868152602081018490527f074b6a00bcccb83218b64b7a1c115c6ba11fa0ae6c84d3dd5a6b57b56b324536910160405180910390a15050505050565b5f6020808352835180828501525f5b818110156121385785810183015185820160400152820161211c565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146109b7575f80fd5b5f806040838503121561217d575f80fd5b823561218881612158565b946020939093013593505050565b5f805f606084860312156121a8575f80fd5b83356121b381612158565b925060208401356121c381612158565b929592945050506040919091013590565b80151581146109b7575f80fd5b5f602082840312156121f1575f80fd5b81356121fc816121d4565b9392505050565b5f60208284031215612213575f80fd5b81356121fc81612158565b5f6020828403121561222e575f80fd5b5035919050565b5f60208284031215612245575f80fd5b813563ffffffff811681146121fc575f80fd5b5f8060408385031215612269575f80fd5b50508035926020909101359150565b5f8060408385031215612289575f80fd5b823561229481612158565b915060208301356122a4816121d4565b809150509250929050565b5f80604083850312156122c0575f80fd5b82356122cb81612158565b915060208301356122a481612158565b600181811c908216806122ef57607f821691505b60208210810361230d57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561082b5761082b612313565b600181815b8085111561237457815f190482111561235a5761235a612313565b8085161561236757918102915b93841c939080029061233f565b509250929050565b5f8261238a5750600161082b565b8161239657505f61082b565b81600181146123ac57600281146123b6576123d2565b600191505061082b565b60ff8411156123c7576123c7612313565b50506001821b61082b565b5060208310610133831016604e8410600b84101617156123f5575081810a61082b565b6123ff838361233a565b805f190482111561241257612412612313565b029392505050565b5f6121fc60ff84168361237c565b808202811582820484141761082b5761082b612313565b5f6020828403121561244f575f80fd5b81516121fc81612158565b5f6020828403121561246a575f80fd5b81516121fc816121d4565b5f805f60608486031215612487575f80fd5b8351925060208401519150604084015190509250925092565b5f826124ba57634e487b7160e01b5f52601260045260245ffd5b500490565b5f602082840312156124cf575f80fd5b5051919050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8181038181111561082b5761082b612313565b634e487b7160e01b5f52603260045260245ffd5b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156125d35784516001600160a01b0316835293830193918301916001016125ae565b50506001600160a01b0396909616606085015250505060800152939250505056fea264697066735822122017a528a22a18139d526cc0849b07ca5aaa52728fefaef9b1b6f324e84aba0f6964736f6c63430008150033
Deployed Bytecode Sourcemap
36958:12029:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23241:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25601:201;;;;;;;;;;-1:-1:-1;25601:201:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;25601:201:0;1023:187:1;37282:25:0;;;;;;;;;;;;;;;;;;;1361::1;;;1349:2;1334:18;37282:25:0;1215:177:1;37040:41:0;;;;;;;;;;-1:-1:-1;37040:41:0;;;;-1:-1:-1;;;;;37040:41:0;;;;;;-1:-1:-1;;;;;1587:32:1;;;1569:51;;1557:2;1542:18;37040:41:0;1397:229:1;24370:108:0;;;;;;;;;;-1:-1:-1;24458:12:0;;24370:108;;47734:33;;;;;;;;;;-1:-1:-1;47734:33:0;;;;;;;;26382:261;;;;;;;;;;-1:-1:-1;26382:261:0;;;;;:::i;:::-;;:::i;48021:318::-;;;;;;;;;;-1:-1:-1;48021:318:0;;;;;:::i;:::-;;:::i;:::-;;24212:93;;;;;;;;;;-1:-1:-1;24212:93:0;;24295:2;2603:36:1;;2591:2;2576:18;24212:93:0;2461:184:1;27052:238:0;;;;;;;;;;-1:-1:-1;27052:238:0;;;;;:::i;:::-;;:::i;41018:181::-;;;;;;;;;;-1:-1:-1;41018:181:0;;;;;:::i;:::-;;:::i;41766:105::-;;;;;;;;;;-1:-1:-1;41848:15:0;;-1:-1:-1;;;;;41848:15:0;41766:105;;40472:83;;;;;;;;;;-1:-1:-1;40472:83:0;;;;;:::i;:::-;;:::i;37088:28::-;;;;;;;;;;-1:-1:-1;37088:28:0;;;;-1:-1:-1;;;;;37088:28:0;;;43222:26;;;;;;;;;;-1:-1:-1;43222:26:0;;;;;;;;;;;42239:126;;;;;;;;;;-1:-1:-1;42239:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;42329:28:0;42305:4;42329:28;;;:19;:28;;;;;;;;;42239:126;40563:230;;;;;;;;;;-1:-1:-1;40563:230:0;;;;;:::i;:::-;;:::i;42373:388::-;;;;;;;;;;-1:-1:-1;42373:388:0;;;;;:::i;:::-;;:::i;37570:23::-;;;;;;;;;;-1:-1:-1;37570:23:0;;;;;;;;;;;24541:127;;;;;;;;;;-1:-1:-1;24541:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;24642:18:0;24615:7;24642:18;;;;;;;;;;;;24541:127;36110:103;;;;;;;;;;;;;:::i;37424:29::-;;;;;;;;;;-1:-1:-1;37424:29:0;;;;-1:-1:-1;;;;;37424:29:0;;;37314:32;;;;;;;;;;;;;;;;43257:821;;;;;;;;;;;;;:::i;35469:87::-;;;;;;;;;;-1:-1:-1;35542:6:0;;-1:-1:-1;;;;;35542:6:0;35469:87;;23460:104;;;;;;;;;;;;;:::i;27793:436::-;;;;;;;;;;-1:-1:-1;27793:436:0;;;;;:::i;:::-;;:::i;48806:178::-;;;;;;;;;;-1:-1:-1;48806:178:0;;;;;:::i;:::-;-1:-1:-1;;;;;48938:38:0;48909:4;48938:38;;;:29;:38;;;;;;;;;48806:178;24874:193;;;;;;;;;;-1:-1:-1;24874:193:0;;;;;:::i;:::-;;:::i;47774:30::-;;;;;;;;;;;;;;;;46314:498;;;;;;;;;;-1:-1:-1;46314:498:0;;;;;:::i;:::-;;:::i;41879:352::-;;;;;;;;;;-1:-1:-1;41879:352:0;;;;;:::i;:::-;;:::i;42769:445::-;;;;;;;;;;-1:-1:-1;42769:445:0;;;;;:::i;:::-;;:::i;48347:451::-;;;;;;;;;;-1:-1:-1;48347:451:0;;;;;:::i;:::-;;:::i;25130:151::-;;;;;;;;;;-1:-1:-1;25130:151:0;;;;;:::i;:::-;;:::i;46126:180::-;;;;;;;;;;-1:-1:-1;46126:180:0;;;;;:::i;:::-;;:::i;37500:33::-;;;;;;;;;;;;;;;;37251:24;;;;;;;;;;;;;;;;37388:27;;;;;;;;;;-1:-1:-1;37388:27:0;;;;-1:-1:-1;;;;;37388:27:0;;;40801:209;;;;;;;;;;-1:-1:-1;40801:209:0;;;;;:::i;:::-;;:::i;36368:201::-;;;;;;;;;;-1:-1:-1;36368:201:0;;;;;:::i;:::-;;:::i;41207:364::-;;;;;;;;;;-1:-1:-1;41207:364:0;;;;;:::i;:::-;;:::i;23241:100::-;23295:13;23328:5;23321:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23241:100;:::o;25601:201::-;25684:4;20959:10;25740:32;20959:10;25756:7;25765:6;25740:8;:32::i;:::-;25790:4;25783:11;;;25601:201;;;;;:::o;26382:261::-;26479:4;20959:10;26537:38;26553:4;20959:10;26568:6;26537:15;:38::i;:::-;26586:27;26596:4;26602:2;26606:6;26586:9;:27::i;:::-;-1:-1:-1;26631:4:0;;26382:261;-1:-1:-1;;;;26382:261:0:o;48021:318::-;35355:13;:11;:13::i;:::-;48129:21:::1;::::0;::::1;;48119:31;;::::0;::::1;;::::0;48097:126:::1;;;::::0;-1:-1:-1;;;48097:126:0;;5196:2:1;48097:126:0::1;::::0;::::1;5178:21:1::0;5235:2;5215:18;;;5208:30;5274:34;5254:18;;;5247:62;-1:-1:-1;;;5325:18:1;;;5318:43;5378:19;;48097:126:0::1;;;;;;;;;48234:21;:30:::0;;-1:-1:-1;;48234:30:0::1;::::0;::::1;;::::0;;::::1;::::0;;;48282:49:::1;::::0;48234:30:::1;48309:21:::0;;;1188:14:1;1181:22;1163:41;;48282:49:0::1;::::0;1151:2:1;1136:18;48282:49:0::1;;;;;;;;48021:318:::0;:::o;27052:238::-;27140:4;20959:10;27196:64;20959:10;27212:7;27249:10;27221:25;20959:10;27212:7;27221:9;:25::i;:::-;:38;;;;:::i;:::-;27196:8;:64::i;41018:181::-;35355:13;:11;:13::i;:::-;-1:-1:-1;;;;;41104:29:0;::::1;41096:54;;;::::0;-1:-1:-1;;;41096:54:0;;5872:2:1;41096:54:0::1;::::0;::::1;5854:21:1::0;5911:2;5891:18;;;5884:30;-1:-1:-1;;;5930:18:1;;;5923:42;5982:18;;41096:54:0::1;5670:336:1::0;41096:54:0::1;41161:12;:30:::0;;-1:-1:-1;;;;;;41161:30:0::1;-1:-1:-1::0;;;;;41161:30:0;;;::::1;::::0;;;::::1;::::0;;41018:181::o;40472:83::-;40522:25;40528:10;40540:6;40522:5;:25::i;:::-;40472:83;:::o;40563:230::-;40696:12;;40620:7;;20959:10;;40679:69;;20959:10;;-1:-1:-1;;;;;40696:12:0;40732:14;24295:2;40732;:14;:::i;:::-;40710:17;;:37;;;;:::i;:::-;40679:9;:69::i;:::-;-1:-1:-1;;40768:17:0;;;40563:230;-1:-1:-1;40563:230:0:o;42373:388::-;35355:13;:11;:13::i;:::-;42510:10:::1;;42495:11;:25;;42487:68;;;::::0;-1:-1:-1;;;42487:68:0;;7769:2:1;42487:68:0::1;::::0;::::1;7751:21:1::0;7808:2;7788:18;;;7781:30;7847:32;7827:18;;;7820:60;7897:18;;42487:68:0::1;7567:354:1::0;42487:68:0::1;42588:9;;42574:10;:23;;42566:66;;;::::0;-1:-1:-1;;;42566:66:0;;7769:2:1;42566:66:0::1;::::0;::::1;7751:21:1::0;7808:2;7788:18;;;7781:30;7847:32;7827:18;;;7820:60;7897:18;;42566:66:0::1;7567:354:1::0;42566:66:0::1;42645:10;:24:::0;;;42680:9:::1;:22:::0;;;42720:33:::1;::::0;;8100:25:1;;;8156:2;8141:18;;8134:34;;;42720:33:0::1;::::0;8073:18:1;42720:33:0::1;;;;;;;42373:388:::0;;:::o;36110:103::-;35355:13;:11;:13::i;:::-;36175:30:::1;36202:1;36175:18;:30::i;:::-;36110:103::o:0;43257:821::-;35355:13;:11;:13::i;:::-;43321:14:::1;::::0;;;::::1;;;43320:15;43312:52;;;::::0;-1:-1:-1;;;43312:52:0;;8381:2:1;43312:52:0::1;::::0;::::1;8363:21:1::0;8420:2;8400:18;;;8393:30;8459:26;8439:18;;;8432:54;8503:18;;43312:52:0::1;8179:348:1::0;43312:52:0::1;43411:15;;;;;;;;;-1:-1:-1::0;;;;;43411:15:0::1;-1:-1:-1::0;;;;;43411:23:0::1;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;43393:55:0::1;;43471:4;43491:15;;;;;;;;;-1:-1:-1::0;;;;;43491:15:0::1;-1:-1:-1::0;;;;;43491:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43393:131;::::0;-1:-1:-1;;;;;;43393:131:0::1;::::0;;;;;;-1:-1:-1;;;;;9018:15:1;;;43393:131:0::1;::::0;::::1;9000:34:1::0;9070:15;;9050:18;;;9043:43;8935:18;;43393:131:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43377:13;:147:::0;;-1:-1:-1;;;;;;43377:147:0::1;-1:-1:-1::0;;;;;43377:147:0;;;::::1;::::0;;::::1;::::0;;43535:66:::1;::::0;43552:4:::1;::::0;-1:-1:-1;;43535:8:0::1;:66::i;:::-;43619:13;::::0;43664:15:::1;::::0;43612:111:::1;::::0;-1:-1:-1;;;43612:111:0;;-1:-1:-1;;;;;43664:15:0;;::::1;43612:111;::::0;::::1;9271:51:1::0;-1:-1:-1;;9338:18:1;;;9331:34;43619:13:0;::::1;::::0;43612:29:::1;::::0;9244:18:1;;43612:111:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;43736:15:0::1;::::0;-1:-1:-1;;;;;43736:15:0::1;:31;43775:21;43820:4;43840:24;43820:4:::0;-1:-1:-1;;;;;24642:18:0;24615:7;24642:18;;;;;;;;;;;;24541:127;43840:24:::1;43879:1;43895::::0;43911:16:::1;41848:15:::0;;-1:-1:-1;;;;;41848:15:0;;41766:105;43911:16:::1;43736:232;::::0;::::1;::::0;;;-1:-1:-1;;;;;;43736:232:0;;;-1:-1:-1;;;;;9985:15:1;;;43736:232:0::1;::::0;::::1;9967:34:1::0;10017:18;;;10010:34;;;;10060:18;;;10053:34;;;;10103:18;;;10096:34;10167:15;;;10146:19;;;10139:44;43942:15:0::1;10199:19:1::0;;;10192:35;9901:19;;43736:232:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;43981:21:0::1;:28:::0;;-1:-1:-1;;43981:28:0::1;44005:4;43981:28;::::0;;-1:-1:-1;44020:14:0::1;:21:::0;;44052:18;-1:-1:-1;;44052:18:0;;;;;;43257:821::o;23460:104::-;23516:13;23549:7;23542:14;;;;;:::i;27793:436::-;27886:4;20959:10;27886:4;27969:25;20959:10;27986:7;27969:9;:25::i;:::-;27942:52;;28033:15;28013:16;:35;;28005:85;;;;-1:-1:-1;;;28005:85:0;;10751:2:1;28005:85:0;;;10733:21:1;10790:2;10770:18;;;10763:30;10829:34;10809:18;;;10802:62;-1:-1:-1;;;10880:18:1;;;10873:35;10925:19;;28005:85:0;10549:401:1;28005:85:0;28126:60;28135:5;28142:7;28170:15;28151:16;:34;28126:8;:60::i;24874:193::-;24953:4;20959:10;25009:28;20959:10;25026:2;25030:6;25009:9;:28::i;46314:498::-;35355:13;:11;:13::i;:::-;46445:9:::1;46429:13;24458:12:::0;;;24370:108;46429:13:::1;:25;;;;:::i;:::-;46416:9;:38;;46394:151;;;::::0;-1:-1:-1;;;46394:151:0;;11379:2:1;46394:151:0::1;::::0;::::1;11361:21:1::0;11418:2;11398:18;;;11391:30;11457:34;11437:18;;;11430:62;11528:33;11508:18;;;11501:61;11579:19;;46394:151:0::1;11177:427:1::0;46394:151:0::1;46607:5;46591:13;24458:12:::0;;;24370:108;46591:13:::1;:21;;;;:::i;:::-;46578:9;:34;;46556:144;;;::::0;-1:-1:-1;;;46556:144:0;;11811:2:1;46556:144:0::1;::::0;::::1;11793:21:1::0;11850:2;11830:18;;;11823:30;11889:34;11869:18;;;11862:62;11960:30;11940:18;;;11933:58;12008:19;;46556:144:0::1;11609:424:1::0;46556:144:0::1;46711:18;:30:::0;;;46759:45:::1;::::0;1361:25:1;;;46759:45:0::1;::::0;1349:2:1;1334:18;46759:45:0::1;1215:177:1::0;41879:352:0;35355:13;:11;:13::i;:::-;-1:-1:-1;;;;;42011:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;:40;::::1;;:28;::::0;;::::1;:40;;::::0;41989:132:::1;;;::::0;-1:-1:-1;;;41989:132:0;;12240:2:1;41989:132:0::1;::::0;::::1;12222:21:1::0;12279:2;12259:18;;;12252:30;12318:34;12298:18;;;12291:62;-1:-1:-1;;;12369:18:1;;;12362:40;12419:19;;41989:132:0::1;12038:406:1::0;41989:132:0::1;-1:-1:-1::0;;;;;42132:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;42132:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;42189:34;;1163:41:1;;;42189:34:0::1;::::0;1136:18:1;42189:34:0::1;;;;;;;;41879:352:::0;;:::o;42769:445::-;35355:13;:11;:13::i;:::-;42895:14:::1;::::0;-1:-1:-1;;;;;42895:14:0;;::::1;42876:33:::0;;::::1;::::0;42854:122:::1;;;::::0;-1:-1:-1;;;42854:122:0;;12651:2:1;42854:122:0::1;::::0;::::1;12633:21:1::0;12690:2;12670:18;;;12663:30;12729:34;12709:18;;;12702:62;-1:-1:-1;;;12780:18:1;;;12773:37;12827:19;;42854:122:0::1;12449:403:1::0;42854:122:0::1;-1:-1:-1::0;;;;;43009:29:0;::::1;42987:121;;;::::0;-1:-1:-1;;;42987:121:0;;13059:2:1;42987:121:0::1;::::0;::::1;13041:21:1::0;13098:2;13078:18;;;13071:30;13137:34;13117:18;;;13110:62;-1:-1:-1;;;13188:18:1;;;13181:40;13238:19;;42987:121:0::1;12857:406:1::0;42987:121:0::1;43119:14;:32:::0;;-1:-1:-1;;;;;;43119:32:0::1;-1:-1:-1::0;;;;;43119:32:0;::::1;::::0;;::::1;::::0;;;43169:37:::1;::::0;1569:51:1;;;43169:37:0::1;::::0;1557:2:1;1542:18;43169:37:0::1;1397:229:1::0;48347:451:0;35355:13;:11;:13::i;:::-;-1:-1:-1;;;;;48483:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:49;::::1;;:38;::::0;;::::1;:49;;::::0;48461:135:::1;;;::::0;-1:-1:-1;;;48461:135:0;;13470:2:1;48461:135:0::1;::::0;::::1;13452:21:1::0;13509:2;13489:18;;;13482:30;13548:34;13528:18;;;13521:62;-1:-1:-1;;;13599:18:1;;;13592:34;13643:19;;48461:135:0::1;13268:400:1::0;48461:135:0::1;48634:4;-1:-1:-1::0;;;;;48615:24:0;::::1;::::0;48607:60:::1;;;::::0;-1:-1:-1;;;48607:60:0;;13875:2:1;48607:60:0::1;::::0;::::1;13857:21:1::0;13914:2;13894:18;;;13887:30;13953:25;13933:18;;;13926:53;13996:18;;48607:60:0::1;13673:347:1::0;48607:60:0::1;-1:-1:-1::0;;;;;48680:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:48;;-1:-1:-1;;48680:48:0::1;::::0;::::1;;::::0;;::::1;::::0;;;48746:44;;1163:41:1;;;48746:44:0::1;::::0;1136:18:1;48746:44:0::1;1023:187:1::0;25130:151:0;-1:-1:-1;;;;;25246:18:0;;;25219:7;25246:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;25130:151::o;46126:180::-;35355:13;:11;:13::i;:::-;46218:8:::1;46203:23;;:11;;;;;;;;;;;:23;;::::0;46195:70:::1;;;::::0;-1:-1:-1;;;46195:70:0;;14227:2:1;46195:70:0::1;::::0;::::1;14209:21:1::0;14266:2;14246:18;;;14239:30;14305:34;14285:18;;;14278:62;-1:-1:-1;;;14356:18:1;;;14349:32;14398:19;;46195:70:0::1;14025:398:1::0;46195:70:0::1;46276:11;:22:::0;;;::::1;;;;-1:-1:-1::0;;46276:22:0;;::::1;::::0;;;::::1;::::0;;46126:180::o;40801:209::-;35355:13;:11;:13::i;:::-;40919:5:::1;40896:20;:28;40888:66;;;::::0;-1:-1:-1;;;40888:66:0;;14630:2:1;40888:66:0::1;::::0;::::1;14612:21:1::0;14669:2;14649:18;;;14642:30;14708:27;14688:18;;;14681:55;14753:18;;40888:66:0::1;14428:349:1::0;40888:66:0::1;40961:17;:40:::0;40801:209::o;36368:201::-;35355:13;:11;:13::i;:::-;-1:-1:-1;;;;;36457:22:0;::::1;36449:73;;;::::0;-1:-1:-1;;;36449:73:0;;14984:2:1;36449:73:0::1;::::0;::::1;14966:21:1::0;15023:2;15003:18;;;14996:30;15062:34;15042:18;;;15035:62;-1:-1:-1;;;15113:18:1;;;15106:36;15159:19;;36449:73:0::1;14782:402:1::0;36449:73:0::1;36533:28;36552:8;36533:18;:28::i;41207:364::-:0;35355:13;:11;:13::i;:::-;-1:-1:-1;;;;;41282:21:0;::::1;41278:127;;41320:52;41328:10;41350:21;41320:29;:52::i;41278:127::-;41477:35;::::0;-1:-1:-1;;;41477:35:0;;41506:4:::1;41477:35;::::0;::::1;1569:51:1::0;41442:5:0;;41415:17:::1;::::0;-1:-1:-1;;;;;41477:20:0;::::1;::::0;::::1;::::0;1542:18:1;;41477:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41523:40;::::0;-1:-1:-1;;;41523:40:0;;41543:10:::1;41523:40;::::0;::::1;9271:51:1::0;9338:18;;;9331:34;;;41459:53:0;;-1:-1:-1;;;;;;41523:19:0;::::1;::::0;::::1;::::0;9244:18:1;;41523:40:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;41267:304;;41207:364:::0;:::o;31786:346::-;-1:-1:-1;;;;;31888:19:0;;31880:68;;;;-1:-1:-1;;;31880:68:0;;15580:2:1;31880:68:0;;;15562:21:1;15619:2;15599:18;;;15592:30;15658:34;15638:18;;;15631:62;-1:-1:-1;;;15709:18:1;;;15702:34;15753:19;;31880:68:0;15378:400:1;31880:68:0;-1:-1:-1;;;;;31967:21:0;;31959:68;;;;-1:-1:-1;;;31959:68:0;;15985:2:1;31959:68:0;;;15967:21:1;16024:2;16004:18;;;15997:30;16063:34;16043:18;;;16036:62;-1:-1:-1;;;16114:18:1;;;16107:32;16156:19;;31959:68:0;15783:398:1;31959:68:0;-1:-1:-1;;;;;32040:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;32092:32;;1361:25:1;;;32092:32:0;;1334:18:1;32092:32:0;;;;;;;31786:346;;;:::o;32423:419::-;32524:24;32551:25;32561:5;32568:7;32551:9;:25::i;:::-;32524:52;;-1:-1:-1;;32591:16:0;:37;32587:248;;32673:6;32653:16;:26;;32645:68;;;;-1:-1:-1;;;32645:68:0;;16388:2:1;32645:68:0;;;16370:21:1;16427:2;16407:18;;;16400:30;16466:31;16446:18;;;16439:59;16515:18;;32645:68:0;16186:353:1;32645:68:0;32757:51;32766:5;32773:7;32801:6;32782:16;:25;32757:8;:51::i;44086:2032::-;-1:-1:-1;;;;;44218:18:0;;44210:68;;;;-1:-1:-1;;;44210:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44297:16:0;;44289:64;;;;-1:-1:-1;;;44289:64:0;;;;;;;:::i;:::-;44386:14;;;;;;;;:60;;-1:-1:-1;;;;;;44421:25:0;;;;;;:19;:25;;;;;;;;44386:60;:104;;;-1:-1:-1;;;;;;44467:23:0;;;;;;:19;:23;;;;;;;;44386:104;44364:178;;;;-1:-1:-1;;;44364:178:0;;17556:2:1;44364:178:0;;;17538:21:1;17595:2;17575:18;;;17568:30;17634:26;17614:18;;;17607:54;17678:18;;44364:178:0;17354:348:1;44364:178:0;44559:6;44569:1;44559:11;44555:93;;44587:28;44603:4;44609:2;44613:1;44587:15;:28::i;:::-;44086:2032;;;:::o;44555:93::-;44709:4;44660:28;24642:18;;;;;;;;;;;44767;;44743:42;;;;;;;44802:20;;-1:-1:-1;44814:8:0;;;;44813:9;44802:20;:43;;;;-1:-1:-1;44832:13:0;;-1:-1:-1;;;;;44826:19:0;;;44832:13;;44826:19;44802:43;:58;;;;-1:-1:-1;44849:11:0;;;;;;;44802:58;44798:197;;;44877:8;:15;;-1:-1:-1;;44877:15:0;44888:4;44877:15;;;44909:41;44929:20;44909:19;:41::i;:::-;44967:8;:16;;-1:-1:-1;;44967:16:0;;;44798:197;-1:-1:-1;;;;;45040:25:0;;45007:18;45040:25;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;45069:23:0;;;;;;:19;:23;;;;;;;;45040:52;:64;;;-1:-1:-1;45096:8:0;;;;45040:64;45036:321;;;-1:-1:-1;45134:1:0;45036:321;;;45165:13;;-1:-1:-1;;;;;45165:13:0;;;45157:21;;;;45153:204;;-1:-1:-1;45208:9:0;;45153:204;;;45245:13;;-1:-1:-1;;;;;45245:13:0;;;45239:19;;;;45235:122;;-1:-1:-1;45288:10:0;;45235:122;;;-1:-1:-1;45344:1:0;45235:122;45373:14;;45369:220;;45404:12;45443:3;45420:19;45429:10;45420:6;:19;:::i;:::-;45419:27;;;;:::i;:::-;45404:42;-1:-1:-1;45470:13:0;45404:42;45470:6;:13;:::i;:::-;45461:22;;45498:42;45514:4;45528;45535;45498:15;:42::i;:::-;45569:8;45576:1;45569:4;:8;:::i;:::-;45557;;:20;;;;;;;:::i;:::-;;;;-1:-1:-1;;;45369:220:0;45605:21;;;;45601:464;;;-1:-1:-1;;;;;45666:35:0;;;;;;:29;:35;;;;;;;;45665:36;:91;;;;-1:-1:-1;;;;;;45723:33:0;;;;;;:29;:33;;;;;;;;45722:34;45665:91;:131;;;;-1:-1:-1;45783:13:0;;-1:-1:-1;;;;;45777:19:0;;;45783:13;;45777:19;;45665:131;45643:411;;;-1:-1:-1;;;;;24642:18:0;;45831:15;24642:18;;;;;;;;;;;45931:15;;45911:16;45921:6;24642:18;45911:16;:::i;:::-;:35;;45881:157;;;;-1:-1:-1;;;45881:157:0;;18042:2:1;45881:157:0;;;18024:21:1;18081:2;18061:18;;;18054:30;18120:34;18100:18;;;18093:62;-1:-1:-1;;;18171:18:1;;;18164:46;18227:19;;45881:157:0;17840:412:1;45881:157:0;45812:242;45643:411;46077:33;46093:4;46099:2;46103:6;46077:15;:33::i;:::-;44199:1919;;;44086:2032;;;:::o;35634:132::-;35542:6;;-1:-1:-1;;;;;35542:6:0;20959:10;35698:23;35690:68;;;;-1:-1:-1;;;35690:68:0;;18459:2:1;35690:68:0;;;18441:21:1;;;18478:18;;;18471:30;18537:34;18517:18;;;18510:62;18589:18;;35690:68:0;18257:356:1;30673:675:0;-1:-1:-1;;;;;30757:21:0;;30749:67;;;;-1:-1:-1;;;30749:67:0;;18820:2:1;30749:67:0;;;18802:21:1;18859:2;18839:18;;;18832:30;18898:34;18878:18;;;18871:62;-1:-1:-1;;;18949:18:1;;;18942:31;18990:19;;30749:67:0;18618:397:1;30749:67:0;-1:-1:-1;;;;;30916:18:0;;30891:22;30916:18;;;;;;;;;;;30953:24;;;;30945:71;;;;-1:-1:-1;;;30945:71:0;;19222:2:1;30945:71:0;;;19204:21:1;19261:2;19241:18;;;19234:30;19300:34;19280:18;;;19273:62;-1:-1:-1;;;19351:18:1;;;19344:32;19393:19;;30945:71:0;19020:398:1;30945:71:0;-1:-1:-1;;;;;31052:18:0;;:9;:18;;;;;;;;;;;31073:23;;;31052:44;;31191:12;:22;;;;;;;31242:37;1361:25:1;;;31052:9:0;;:18;31242:37;;1334:18:1;31242:37:0;;;;;;;44086:2032;;;:::o;36729:191::-;36822:6;;;-1:-1:-1;;;;;36839:17:0;;;-1:-1:-1;;;;;;36839:17:0;;;;;;;36872:40;;36822:6;;;36839:17;36822:6;;36872:40;;36803:16;;36872:40;36792:128;36729:191;:::o;9720:317::-;9835:6;9810:21;:31;;9802:73;;;;-1:-1:-1;;;9802:73:0;;19625:2:1;9802:73:0;;;19607:21:1;19664:2;19644:18;;;19637:30;19703:31;19683:18;;;19676:59;19752:18;;9802:73:0;19423:353:1;9802:73:0;9889:12;9907:9;-1:-1:-1;;;;;9907:14:0;9929:6;9907:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9888:52;;;9959:7;9951:78;;;;-1:-1:-1;;;9951:78:0;;20193:2:1;9951:78:0;;;20175:21:1;20232:2;20212:18;;;20205:30;20271:34;20251:18;;;20244:62;20342:28;20322:18;;;20315:56;20388:19;;9951:78:0;19991:422:1;28699:806:0;-1:-1:-1;;;;;28796:18:0;;28788:68;;;;-1:-1:-1;;;28788:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28875:16:0;;28867:64;;;;-1:-1:-1;;;28867:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29017:15:0;;28995:19;29017:15;;;;;;;;;;;29051:21;;;;29043:72;;;;-1:-1:-1;;;29043:72:0;;20620:2:1;29043:72:0;;;20602:21:1;20659:2;20639:18;;;20632:30;20698:34;20678:18;;;20671:62;-1:-1:-1;;;20749:18:1;;;20742:36;20795:19;;29043:72:0;20418:402:1;29043:72:0;-1:-1:-1;;;;;29151:15:0;;;:9;:15;;;;;;;;;;;29169:20;;;29151:38;;29369:13;;;;;;;;;;:23;;;;;;29421:26;;1361:25:1;;;29369:13:0;;29421:26;;1334:18:1;29421:26:0;;;;;;;29460:37;44086:2032;46820:837;46972:16;;;46986:1;46972:16;;;;;;;;46914:21;;46889:22;;46972:16;46986:1;46972:16;;;;;;;;;;-1:-1:-1;46972:16:0;46948:40;;47017:4;46999;47004:1;46999:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;46999:23:0;;;:7;;;;;;;;;;:23;;;;47043:15;;:22;;;-1:-1:-1;;;47043:22:0;;;;:15;;;;;:20;;:22;;;;;46999:7;;47043:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47033:4;47038:1;47033:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;47033:32:0;;;:7;;;;;;;;;:32;47078:15;;:196;;-1:-1:-1;;;47078:196:0;;:15;;;:66;;:196;;47159:11;;47078:15;;47201:4;;47228;;47248:15;;47078:196;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47287:18;47332:14;47308:21;:38;;;;:::i;:::-;47287:59;;47357:22;47421:11;47396:8;;47383:10;:21;;;;:::i;:::-;47382:50;;;;:::i;:::-;47453:15;;47357:75;;-1:-1:-1;47445:50:0;;-1:-1:-1;;;;;47453:15:0;47357:75;47445:34;:50::i;:::-;47514:14;;47506:56;;-1:-1:-1;;;;;47514:14:0;47540:21;47506:33;:56::i;:::-;47586:1;47575:8;:12;47605:44;;;8100:25:1;;;8156:2;8141:18;;8134:34;;;47605:44:0;;8073:18:1;47605:44:0;;;;;;;46878:779;;;;46820:837;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1631:456::-;1708:6;1716;1724;1777:2;1765:9;1756:7;1752:23;1748:32;1745:52;;;1793:1;1790;1783:12;1745:52;1832:9;1819:23;1851:31;1876:5;1851:31;:::i;:::-;1901:5;-1:-1:-1;1958:2:1;1943:18;;1930:32;1971:33;1930:32;1971:33;:::i;:::-;1631:456;;2023:7;;-1:-1:-1;;;2077:2:1;2062:18;;;;2049:32;;1631:456::o;2092:118::-;2178:5;2171:13;2164:21;2157:5;2154:32;2144:60;;2200:1;2197;2190:12;2215:241;2271:6;2324:2;2312:9;2303:7;2299:23;2295:32;2292:52;;;2340:1;2337;2330:12;2292:52;2379:9;2366:23;2398:28;2420:5;2398:28;:::i;:::-;2445:5;2215:241;-1:-1:-1;;;2215:241:1:o;2650:247::-;2709:6;2762:2;2750:9;2741:7;2737:23;2733:32;2730:52;;;2778:1;2775;2768:12;2730:52;2817:9;2804:23;2836:31;2861:5;2836:31;:::i;3110:180::-;3169:6;3222:2;3210:9;3201:7;3197:23;3193:32;3190:52;;;3238:1;3235;3228:12;3190:52;-1:-1:-1;3261:23:1;;3110:180;-1:-1:-1;3110:180:1:o;3295:276::-;3353:6;3406:2;3394:9;3385:7;3381:23;3377:32;3374:52;;;3422:1;3419;3412:12;3374:52;3461:9;3448:23;3511:10;3504:5;3500:22;3493:5;3490:33;3480:61;;3537:1;3534;3527:12;3576:248;3644:6;3652;3705:2;3693:9;3684:7;3680:23;3676:32;3673:52;;;3721:1;3718;3711:12;3673:52;-1:-1:-1;;3744:23:1;;;3814:2;3799:18;;;3786:32;;-1:-1:-1;3576:248:1:o;3829:382::-;3894:6;3902;3955:2;3943:9;3934:7;3930:23;3926:32;3923:52;;;3971:1;3968;3961:12;3923:52;4010:9;3997:23;4029:31;4054:5;4029:31;:::i;:::-;4079:5;-1:-1:-1;4136:2:1;4121:18;;4108:32;4149:30;4108:32;4149:30;:::i;:::-;4198:7;4188:17;;;3829:382;;;;;:::o;4216:388::-;4284:6;4292;4345:2;4333:9;4324:7;4320:23;4316:32;4313:52;;;4361:1;4358;4351:12;4313:52;4400:9;4387:23;4419:31;4444:5;4419:31;:::i;:::-;4469:5;-1:-1:-1;4526:2:1;4511:18;;4498:32;4539:33;4498:32;4539:33;:::i;4609:380::-;4688:1;4684:12;;;;4731;;;4752:61;;4806:4;4798:6;4794:17;4784:27;;4752:61;4859:2;4851:6;4848:14;4828:18;4825:38;4822:161;;4905:10;4900:3;4896:20;4893:1;4886:31;4940:4;4937:1;4930:15;4968:4;4965:1;4958:15;4822:161;;4609:380;;;:::o;5408:127::-;5469:10;5464:3;5460:20;5457:1;5450:31;5500:4;5497:1;5490:15;5524:4;5521:1;5514:15;5540:125;5605:9;;;5626:10;;;5623:36;;;5639:18;;:::i;6011:422::-;6100:1;6143:5;6100:1;6157:270;6178:7;6168:8;6165:21;6157:270;;;6237:4;6233:1;6229:6;6225:17;6219:4;6216:27;6213:53;;;6246:18;;:::i;:::-;6296:7;6286:8;6282:22;6279:55;;;6316:16;;;;6279:55;6395:22;;;;6355:15;;;;6157:270;;;6161:3;6011:422;;;;;:::o;6438:806::-;6487:5;6517:8;6507:80;;-1:-1:-1;6558:1:1;6572:5;;6507:80;6606:4;6596:76;;-1:-1:-1;6643:1:1;6657:5;;6596:76;6688:4;6706:1;6701:59;;;;6774:1;6769:130;;;;6681:218;;6701:59;6731:1;6722:10;;6745:5;;;6769:130;6806:3;6796:8;6793:17;6790:43;;;6813:18;;:::i;:::-;-1:-1:-1;;6869:1:1;6855:16;;6884:5;;6681:218;;6983:2;6973:8;6970:16;6964:3;6958:4;6955:13;6951:36;6945:2;6935:8;6932:16;6927:2;6921:4;6918:12;6914:35;6911:77;6908:159;;;-1:-1:-1;7020:19:1;;;7052:5;;6908:159;7099:34;7124:8;7118:4;7099:34;:::i;:::-;7169:6;7165:1;7161:6;7157:19;7148:7;7145:32;7142:58;;;7180:18;;:::i;:::-;7218:20;;6438:806;-1:-1:-1;;;6438:806:1:o;7249:140::-;7307:5;7336:47;7377:4;7367:8;7363:19;7357:4;7336:47;:::i;7394:168::-;7467:9;;;7498;;7515:15;;;7509:22;;7495:37;7485:71;;7536:18;;:::i;8532:251::-;8602:6;8655:2;8643:9;8634:7;8630:23;8626:32;8623:52;;;8671:1;8668;8661:12;8623:52;8703:9;8697:16;8722:31;8747:5;8722:31;:::i;9376:245::-;9443:6;9496:2;9484:9;9475:7;9471:23;9467:32;9464:52;;;9512:1;9509;9502:12;9464:52;9544:9;9538:16;9563:28;9585:5;9563:28;:::i;10238:306::-;10326:6;10334;10342;10395:2;10383:9;10374:7;10370:23;10366:32;10363:52;;;10411:1;10408;10401:12;10363:52;10440:9;10434:16;10424:26;;10490:2;10479:9;10475:18;10469:25;10459:35;;10534:2;10523:9;10519:18;10513:25;10503:35;;10238:306;;;;;:::o;10955:217::-;10995:1;11021;11011:132;;11065:10;11060:3;11056:20;11053:1;11046:31;11100:4;11097:1;11090:15;11128:4;11125:1;11118:15;11011:132;-1:-1:-1;11157:9:1;;10955:217::o;15189:184::-;15259:6;15312:2;15300:9;15291:7;15287:23;15283:32;15280:52;;;15328:1;15325;15318:12;15280:52;-1:-1:-1;15351:16:1;;15189:184;-1:-1:-1;15189:184:1:o;16544:401::-;16746:2;16728:21;;;16785:2;16765:18;;;16758:30;16824:34;16819:2;16804:18;;16797:62;-1:-1:-1;;;16890:2:1;16875:18;;16868:35;16935:3;16920:19;;16544:401::o;16950:399::-;17152:2;17134:21;;;17191:2;17171:18;;;17164:30;17230:34;17225:2;17210:18;;17203:62;-1:-1:-1;;;17296:2:1;17281:18;;17274:33;17339:3;17324:19;;16950:399::o;17707:128::-;17774:9;;;17795:11;;;17792:37;;;17809:18;;:::i;20957:127::-;21018:10;21013:3;21009:20;21006:1;20999:31;21049:4;21046:1;21039:15;21073:4;21070:1;21063:15;21089:980;21351:4;21399:3;21388:9;21384:19;21430:6;21419:9;21412:25;21456:2;21494:6;21489:2;21478:9;21474:18;21467:34;21537:3;21532:2;21521:9;21517:18;21510:31;21561:6;21596;21590:13;21627:6;21619;21612:22;21665:3;21654:9;21650:19;21643:26;;21704:2;21696:6;21692:15;21678:29;;21725:1;21735:195;21749:6;21746:1;21743:13;21735:195;;;21814:13;;-1:-1:-1;;;;;21810:39:1;21798:52;;21905:15;;;;21870:12;;;;21846:1;21764:9;21735:195;;;-1:-1:-1;;;;;;;21986:32:1;;;;21981:2;21966:18;;21959:60;-1:-1:-1;;;22050:3:1;22035:19;22028:35;21947:3;21089:980;-1:-1:-1;;;21089:980:1:o
Swarm Source
ipfs://17a528a22a18139d526cc0849b07ca5aaa52728fefaef9b1b6f324e84aba0f69
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.