More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 47 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer | 18318098 | 56 days ago | IN | 0 CRO | 0.20709671 | ||||
Approve | 18318097 | 56 days ago | IN | 0 CRO | 0.17918283 | ||||
Approve | 18227895 | 62 days ago | IN | 0 CRO | 0.17918283 | ||||
Approve | 17903170 | 83 days ago | IN | 0 CRO | 0.505 | ||||
Approve | 17898296 | 83 days ago | IN | 0 CRO | 0.23883948 | ||||
Approve | 17896875 | 83 days ago | IN | 0 CRO | 0.23883948 | ||||
Approve | 17896826 | 83 days ago | IN | 0 CRO | 0.23883948 | ||||
Approve | 17894100 | 83 days ago | IN | 0 CRO | 0.23883948 | ||||
Approve | 17875292 | 85 days ago | IN | 0 CRO | 0.23891045 | ||||
Approve | 17861385 | 86 days ago | IN | 0 CRO | 0.23891045 | ||||
Approve | 17861361 | 86 days ago | IN | 0 CRO | 0.23891045 | ||||
Buy Ticket | 17848744 | 86 days ago | IN | 0 CRO | 0.4068886 | ||||
Buy Ticket | 17848591 | 86 days ago | IN | 0 CRO | 1.42372748 | ||||
Buy Ticket | 17848586 | 86 days ago | IN | 0 CRO | 0.40670716 | ||||
Buy Ticket | 17848582 | 86 days ago | IN | 0 CRO | 0.40658994 | ||||
Buy Ticket | 17848576 | 86 days ago | IN | 0 CRO | 0.40670716 | ||||
Buy Ticket | 17848571 | 86 days ago | IN | 0 CRO | 0.40676774 | ||||
Buy Ticket | 17848565 | 86 days ago | IN | 0 CRO | 0.40670716 | ||||
Approve | 17848563 | 86 days ago | IN | 0 CRO | 0.23732493 | ||||
Buy Ticket | 17845865 | 87 days ago | IN | 0 CRO | 0.406828 | ||||
Approve | 17842131 | 87 days ago | IN | 0 CRO | 0.26280149 | ||||
Buy Ticket | 17836384 | 87 days ago | IN | 0 CRO | 0.406828 | ||||
Transfer | 17836371 | 87 days ago | IN | 0 CRO | 0.18971335 | ||||
Buy Ticket | 17836268 | 87 days ago | IN | 0 CRO | 0.406828 | ||||
Approve | 17836266 | 87 days ago | IN | 0 CRO | 0.23739545 |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
CROSINO
Compiler Version
v0.8.24+commit.e11b9ed9
Contract Source Code (Solidity)
/** *Submitted for verification at cronoscan.com on 2025-01-25 */ /** ░▒▓██████▓▒░░▒▓███████▓▒░ ░▒▓██████▓▒░ ░▒▓███████▓▒░▒▓█▓▒░▒▓███████▓▒░ ░▒▓██████▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░ ░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░ ░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓███████▓▒░░▒▓█▓▒░░▒▓█▓▒░░▒▓██████▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░ ░▒▓██████▓▒░░▒▓█▓▒░░▒▓█▓▒░░▒▓██████▓▒░░▒▓███████▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░░▒▓██████▓▒░ Telegram: https://t.me/crosinocro x: https://x.com/crosinoo */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; /** * @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; } function _contextSuffixLength() internal view virtual returns (uint256) { return 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. * * The initial owner is set to the address provided by the deployer. 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; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @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 { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @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 { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _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); } } interface IERC20Errors { /** * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. * @param balance Current balance for the interacting account. * @param needed Minimum amount required to perform a transfer. */ error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed); /** * @dev Indicates a failure with the token `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. */ error ERC20InvalidSender(address sender); /** * @dev Indicates a failure with the token `receiver`. Used in transfers. * @param receiver Address to which tokens are being transferred. */ error ERC20InvalidReceiver(address receiver); /** * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers. * @param spender Address that may be allowed to operate on tokens without being their owner. * @param allowance Amount of tokens a `spender` is allowed to operate with. * @param needed Minimum amount required to perform a transfer. */ error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed); /** * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals. * @param approver Address initiating an approval operation. */ error ERC20InvalidApprover(address approver); /** * @dev Indicates a failure with the `spender` to be approved. Used in approvals. * @param spender Address that may be allowed to operate on tokens without being their owner. */ error ERC20InvalidSpender(address spender); } /** * @dev Standard ERC-721 Errors * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens. */ interface IERC721Errors { /** * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20. * Used in balance queries. * @param owner Address of the current owner of a token. */ error ERC721InvalidOwner(address owner); /** * @dev Indicates a `tokenId` whose `owner` is the zero address. * @param tokenId Identifier number of a token. */ error ERC721NonexistentToken(uint256 tokenId); /** * @dev Indicates an error related to the ownership over a particular token. Used in transfers. * @param sender Address whose tokens are being transferred. * @param tokenId Identifier number of a token. * @param owner Address of the current owner of a token. */ error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner); /** * @dev Indicates a failure with the token `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. */ error ERC721InvalidSender(address sender); /** * @dev Indicates a failure with the token `receiver`. Used in transfers. * @param receiver Address to which tokens are being transferred. */ error ERC721InvalidReceiver(address receiver); /** * @dev Indicates a failure with the `operator`’s approval. Used in transfers. * @param operator Address that may be allowed to operate on tokens without being their owner. * @param tokenId Identifier number of a token. */ error ERC721InsufficientApproval(address operator, uint256 tokenId); /** * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals. * @param approver Address initiating an approval operation. */ error ERC721InvalidApprover(address approver); /** * @dev Indicates a failure with the `operator` to be approved. Used in approvals. * @param operator Address that may be allowed to operate on tokens without being their owner. */ error ERC721InvalidOperator(address operator); } /** * @dev Standard ERC-1155 Errors * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens. */ interface IERC1155Errors { /** * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. * @param balance Current balance for the interacting account. * @param needed Minimum amount required to perform a transfer. * @param tokenId Identifier number of a token. */ error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId); /** * @dev Indicates a failure with the token `sender`. Used in transfers. * @param sender Address whose tokens are being transferred. */ error ERC1155InvalidSender(address sender); /** * @dev Indicates a failure with the token `receiver`. Used in transfers. * @param receiver Address to which tokens are being transferred. */ error ERC1155InvalidReceiver(address receiver); /** * @dev Indicates a failure with the `operator`’s approval. Used in transfers. * @param operator Address that may be allowed to operate on tokens without being their owner. * @param owner Address of the current owner of a token. */ error ERC1155MissingApprovalForAll(address operator, address owner); /** * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals. * @param approver Address initiating an approval operation. */ error ERC1155InvalidApprover(address approver); /** * @dev Indicates a failure with the `operator` to be approved. Used in approvals. * @param operator Address that may be allowed to operate on tokens without being their owner. */ error ERC1155InvalidOperator(address operator); /** * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation. * Used in batch transfers. * @param idsLength Length of the array of token identifiers * @param valuesLength Length of the array of token amounts */ error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength); } /** * @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}. * * 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 ERC-20 * 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 ERC may not emit * these events, as it isn't required by the specification. */ /** * @dev Interface of the ERC-20 standard as defined in the ERC. */ 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 value of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the value of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves a `value` amount of 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 value) 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 a `value` amount of tokens 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 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the * allowance mechanism. `value` 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 value) external returns (bool); } /** * @dev Interface for the optional metadata functions from the ERC-20 standard. */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors { mapping(address account => uint256) private _balances; mapping(address account => mapping(address spender => 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 returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual 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 returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual 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 `value`. */ function transfer(address to, uint256 value) public virtual returns (bool) { address owner = _msgSender(); _transfer(owner, to, value); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `value` 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 value) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, value); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the ERC. 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 `value`. * - the caller must have allowance for ``from``'s tokens of at least * `value`. */ function transferFrom(address from, address to, uint256 value) public virtual returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, value); _transfer(from, to, value); return true; } /** * @dev Moves a `value` 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. * * NOTE: This function is not virtual, {_update} should be overridden instead. */ function _transfer(address from, address to, uint256 value) internal { if (from == address(0)) { revert ERC20InvalidSender(address(0)); } if (to == address(0)) { revert ERC20InvalidReceiver(address(0)); } _update(from, to, value); } /** * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from` * (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding * this function. * * Emits a {Transfer} event. */ function _update(address from, address to, uint256 value) internal virtual { if (from == address(0)) { // Overflow check required: The rest of the code assumes that totalSupply never overflows _totalSupply += value; } else { uint256 fromBalance = _balances[from]; if (fromBalance < value) { revert ERC20InsufficientBalance(from, fromBalance, value); } unchecked { // Overflow not possible: value <= fromBalance <= totalSupply. _balances[from] = fromBalance - value; } } if (to == address(0)) { unchecked { // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply. _totalSupply -= value; } } else { unchecked { // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256. _balances[to] += value; } } emit Transfer(from, to, value); } /** * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0). * Relies on the `_update` mechanism * * Emits a {Transfer} event with `from` set to the zero address. * * NOTE: This function is not virtual, {_update} should be overridden instead. */ function _mint(address account, uint256 value) internal { if (account == address(0)) { revert ERC20InvalidReceiver(address(0)); } _update(address(0), account, value); } /** * @dev Destroys a `value` amount of tokens from `account`, lowering the total supply. * Relies on the `_update` mechanism. * * Emits a {Transfer} event with `to` set to the zero address. * * NOTE: This function is not virtual, {_update} should be overridden instead */ function _burn(address account, uint256 value) internal { if (account == address(0)) { revert ERC20InvalidSender(address(0)); } _update(account, address(0), value); } /** * @dev Sets `value` 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. * * Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument. */ function _approve(address owner, address spender, uint256 value) internal { _approve(owner, spender, value, true); } /** * @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event. * * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any * `Approval` event during `transferFrom` operations. * * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to * true using the following override: * ``` * function _approve(address owner, address spender, uint256 value, bool) internal virtual override { * super._approve(owner, spender, value, true); * } * ``` * * Requirements are the same as {_approve}. */ function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual { if (owner == address(0)) { revert ERC20InvalidApprover(address(0)); } if (spender == address(0)) { revert ERC20InvalidSpender(address(0)); } _allowances[owner][spender] = value; if (emitEvent) { emit Approval(owner, spender, value); } } /** * @dev Updates `owner` s allowance for `spender` based on spent `value`. * * Does not update the allowance value in case of infinite allowance. * Revert if not enough allowance is available. * * Does not emit an {Approval} event. */ function _spendAllowance(address owner, address spender, uint256 value) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { if (currentAllowance < value) { revert ERC20InsufficientAllowance(spender, currentAllowance, value); } unchecked { _approve(owner, spender, currentAllowance - value, false); } } } } contract CROSINO is ERC20, Ownable(msg.sender) { // Lottery data uint256 private constant littlePrice = 100 * 10 ** 18; uint256 private constant mediumPrice = 500 * 10 ** 18; uint256 private constant highPrice = 1000 * 10 ** 18; uint256 private constant minPlayer = 10; uint256[] private tierPrices = [littlePrice, mediumPrice, highPrice]; // Player arrays address payable[] private littlePlayers; address payable[] private mediumPlayers; address payable[] private highPlayers; // Winners array address payable[] private winners; // Token data bool public maxWallet = true; address public liquidityPool; constructor() ERC20("CROSINO", "CROSINO") { _mint(msg.sender, 1000000 * 10 ** 18); } // Function to set maxWallet state function setmaxWallet(bool _state) external onlyOwner { maxWallet = _state; } // Define the LP address to enable trading! function setLiquidityPool(address _liquidityPool) external onlyOwner { liquidityPool = _liquidityPool; } // Override _update function to include maxWallet logic (previously _beforeTokenTransfer) function _update(address from, address to, uint256 amount) internal virtual override { super._update(from, to, amount); // If liquidityPool is address(0) we've not yet enabled trading. Liquidity Loading.... if(liquidityPool == address(0)) { require(from == owner() || to == owner(), "Patience - Trading Not Started Yet!"); return; } // Allow deployer (owner) to send/receive any amount and the liquidityPool to receive any amount. // This allows for loading of the LP, and for people to sell tokens into the LP whilst maxWallet in progress. if (maxWallet && from != owner() && to != liquidityPool && from != address(this)) { // Require that a receiving wallet will not hold more than 1% of supply after a transfer whilst maxWallet is in effect require( balanceOf(to) <= totalSupply() / 200, "Just getting warmed up, limit of 0.5% of CROSINO until maxWallet is complete!" ); } } // Renounce the contract and pass ownership to address(0) to lock the contract forever more. function renounceTokenOwnership() public onlyOwner { renounceOwnership(); } // Lottery functions modifier checkAllowance(uint256 amount) { require(this.allowance(msg.sender, address(this)) >= amount, "Error: Insufficient Allowance"); _; } // Buy functions function buyTicket(uint tier) external payable checkAllowance(tierPrices[tier]) { require(tier >= 0 && tier < 3, "Error : Invalid Tier"); require(this.balanceOf(msg.sender) >= tierPrices[tier], "Error : Insufficient Balance"); this.transferFrom(msg.sender, address(this), tierPrices[tier]); player[tier].push(payable(msg.sender)); if (player[tier].length >= minPlayer) { runLottery(player[tier], player[tier][0], tier); } } // Lottery function (optimized) function runLottery(address payable[] memory players, address payable winner, uint tier) internal { require(players.length >= minPlayer, "Error : Not Enough Players"); address[] memory playersAsAddress = new address[](players.length); for (uint256 i = 0; i < players.length; i++) { playersAsAddress[i] = address(players[i]); } uint256 winnerIndex = Random(playersAsAddress) % playersAsAddress.length; winner = players[winnerIndex]; // Update winner efficiently // Optimized payouts this.transfer(winner, tierPrices[tier] * 2); // Use price from last tier and remove winner for (uint256 i = 0; i < players.length; i++) { if (i != winnerIndex) { this.transfer(players[i], tierPrices[tier] * 80 / 100); // Use price and remove player from last tier } } player[tier] = new address payable[](0); //Reset players playersWinners[tier].push(winner); // Add winner to combined list if (playersWinners[tier].length > 10) { for (uint i = 0; i < playersWinners[tier].length - 1; i++) { playersWinners[tier][i] = playersWinners[tier][i + 1]; } playersWinners[tier].pop(); } this.transfer(address(0x000000000000000000000000000000000000dEaD), tierPrices[tier] * players.length - (tierPrices[tier] * 2) - (tierPrices[tier] * 80 / 100 * (players.length - 1))); // Burn token } // Random function function Random(address[] memory playerList) internal view returns (uint256) { return uint256(keccak256(abi.encodePacked(blockhash(block.number - 1), block.timestamp, playerList.length))); } function getPlayers(uint tier) public view returns (address payable[] memory) { return player[tier]; } // New getter function for winner history function getTierWinnerHistory(uint tier) public view returns (address payable[] memory) { return playersWinners[tier]; } // Mapping for players and winner history mapping(uint => address payable[]) private player; mapping(uint => address payable[]) private playersWinners; }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","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":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","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":"tier","type":"uint256"}],"name":"buyTicket","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tier","type":"uint256"}],"name":"getPlayers","outputs":[{"internalType":"address payable[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tier","type":"uint256"}],"name":"getTierWinnerHistory","outputs":[{"internalType":"address payable[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","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":[],"name":"renounceTokenOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_liquidityPool","type":"address"}],"name":"setLiquidityPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setmaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","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":"value","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"}]
Contract Creation Code
6080604052604051806060016040528068056bc75e2d631000008152602001681b1ae4d6e2ef5000008152602001683635c9adc5dea0000081525060069060036200004c92919062000853565b506001600b60006101000a81548160ff0219169083151502179055503480156200007557600080fd5b50336040518060400160405280600781526020017f43524f53494e4f000000000000000000000000000000000000000000000000008152506040518060400160405280600781526020017f43524f53494e4f000000000000000000000000000000000000000000000000008152508160039081620000f4919062000b3e565b50806004908162000106919062000b3e565b505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200017e5760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040162000175919062000c6a565b60405180910390fd5b6200018f81620001b260201b60201c565b50620001ac3369d3c21bcecceda10000006200027860201b60201c565b62000f2a565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620002ed5760006040517fec442f05000000000000000000000000000000000000000000000000000000008152600401620002e4919062000c6a565b60405180910390fd5b62000301600083836200030560201b60201c565b5050565b62000318838383620005a760201b60201c565b600073ffffffffffffffffffffffffffffffffffffffff16600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036200043b576200037f620007d760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480620003f35750620003c4620007d760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b62000435576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200042c9062000d0e565b60405180910390fd5b620005a2565b600b60009054906101000a900460ff16801562000493575062000463620007d760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015620004ee5750600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156200052757503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15620005a15760c86200053f6200080160201b60201c565b6200054b919062000d8e565b6200055c836200080b60201b60201c565b1115620005a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005979062000e62565b60405180910390fd5b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620005fd578060026000828254620005f0919062000e84565b92505081905550620006d3565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156200068c578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401620006839392919062000ed0565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200071e57806002600082825403925050819055506200076b565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620007ca919062000f0d565b60405180910390a3505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600254905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b82805482825590600052602060002090810192821562000892579160200282015b828111156200089157825182559160200191906001019062000874565b5b509050620008a19190620008a5565b5090565b5b80821115620008c0576000816000905550600101620008a6565b5090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200094657607f821691505b6020821081036200095c576200095b620008fe565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620009c67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000987565b620009d2868362000987565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000a1f62000a1962000a1384620009ea565b620009f4565b620009ea565b9050919050565b6000819050919050565b62000a3b83620009fe565b62000a5362000a4a8262000a26565b84845462000994565b825550505050565b600090565b62000a6a62000a5b565b62000a7781848462000a30565b505050565b5b8181101562000a9f5762000a9360008262000a60565b60018101905062000a7d565b5050565b601f82111562000aee5762000ab88162000962565b62000ac38462000977565b8101602085101562000ad3578190505b62000aeb62000ae28562000977565b83018262000a7c565b50505b505050565b600082821c905092915050565b600062000b136000198460080262000af3565b1980831691505092915050565b600062000b2e838362000b00565b9150826002028217905092915050565b62000b4982620008c4565b67ffffffffffffffff81111562000b655762000b64620008cf565b5b62000b7182546200092d565b62000b7e82828562000aa3565b600060209050601f83116001811462000bb6576000841562000ba1578287015190505b62000bad858262000b20565b86555062000c1d565b601f19841662000bc68662000962565b60005b8281101562000bf05784890151825560018201915060208501945060208101905062000bc9565b8683101562000c10578489015162000c0c601f89168262000b00565b8355505b6001600288020188555050505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000c528262000c25565b9050919050565b62000c648162000c45565b82525050565b600060208201905062000c81600083018462000c59565b92915050565b600082825260208201905092915050565b7f50617469656e6365202d2054726164696e67204e6f742053746172746564205960008201527f6574210000000000000000000000000000000000000000000000000000000000602082015250565b600062000cf660238362000c87565b915062000d038262000c98565b604082019050919050565b6000602082019050818103600083015262000d298162000ce7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000d9b82620009ea565b915062000da883620009ea565b92508262000dbb5762000dba62000d30565b5b828204905092915050565b7f4a7573742067657474696e67207761726d65642075702c206c696d6974206f6660008201527f20302e3525206f662043524f53494e4f20756e74696c206d617857616c6c657460208201527f20697320636f6d706c6574652100000000000000000000000000000000000000604082015250565b600062000e4a604d8362000c87565b915062000e578262000dc6565b606082019050919050565b6000602082019050818103600083015262000e7d8162000e3b565b9050919050565b600062000e9182620009ea565b915062000e9e83620009ea565b925082820190508082111562000eb95762000eb862000d5f565b5b92915050565b62000eca81620009ea565b82525050565b600060608201905062000ee7600083018662000c59565b62000ef6602083018562000ebf565b62000f05604083018462000ebf565b949350505050565b600060208201905062000f24600083018462000ebf565b92915050565b612b4d8062000f3a6000396000f3fe60806040526004361061011f5760003560e01c806370a08231116100a0578063a9059cbb11610064578063a9059cbb146103dc578063dd62ed3e14610419578063e14f08d514610456578063f2fde38b1461046d578063f8b45b05146104965761011f565b806370a0823114610309578063715018a61461034657806381dcd3981461035d5780638da5cb5b1461038657806395d89b41146103b15761011f565b806323b872dd116100e757806323b872dd1461021d578063313ce5671461025a578063460e204914610285578063665a11ca146102c257806367dd74ca146102ed5761011f565b8063018770201461012457806306fdde031461014d578063095ea7b31461017857806309fbf915146101b557806318160ddd146101f2575b600080fd5b34801561013057600080fd5b5061014b60048036038101906101469190611f50565b6104c1565b005b34801561015957600080fd5b5061016261050d565b60405161016f919061200d565b60405180910390f35b34801561018457600080fd5b5061019f600480360381019061019a9190612065565b61059f565b6040516101ac91906120c0565b60405180910390f35b3480156101c157600080fd5b506101dc60048036038101906101d791906120db565b6105c2565b6040516101e991906121d8565b60405180910390f35b3480156101fe57600080fd5b50610207610663565b6040516102149190612209565b60405180910390f35b34801561022957600080fd5b50610244600480360381019061023f9190612224565b61066d565b60405161025191906120c0565b60405180910390f35b34801561026657600080fd5b5061026f61069c565b60405161027c9190612293565b60405180910390f35b34801561029157600080fd5b506102ac60048036038101906102a791906120db565b6106a5565b6040516102b991906121d8565b60405180910390f35b3480156102ce57600080fd5b506102d7610746565b6040516102e491906122bd565b60405180910390f35b610307600480360381019061030291906120db565b61076c565b005b34801561031557600080fd5b50610330600480360381019061032b9190611f50565b610b9b565b60405161033d9190612209565b60405180910390f35b34801561035257600080fd5b5061035b610be3565b005b34801561036957600080fd5b50610384600480360381019061037f9190612304565b610bf7565b005b34801561039257600080fd5b5061039b610c1c565b6040516103a891906122bd565b60405180910390f35b3480156103bd57600080fd5b506103c6610c46565b6040516103d3919061200d565b60405180910390f35b3480156103e857600080fd5b5061040360048036038101906103fe9190612065565b610cd8565b60405161041091906120c0565b60405180910390f35b34801561042557600080fd5b50610440600480360381019061043b9190612331565b610cfb565b60405161044d9190612209565b60405180910390f35b34801561046257600080fd5b5061046b610d82565b005b34801561047957600080fd5b50610494600480360381019061048f9190611f50565b610d94565b005b3480156104a257600080fd5b506104ab610e1a565b6040516104b891906120c0565b60405180910390f35b6104c9610e2d565b80600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606003805461051c906123a0565b80601f0160208091040260200160405190810160405280929190818152602001828054610548906123a0565b80156105955780601f1061056a57610100808354040283529160200191610595565b820191906000526020600020905b81548152906001019060200180831161057857829003601f168201915b5050505050905090565b6000806105aa610eb4565b90506105b7818585610ebc565b600191505092915050565b6060600d600083815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561065757602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161060d575b50505050509050919050565b6000600254905090565b600080610678610eb4565b9050610685858285610ece565b610690858585610f62565b60019150509392505050565b60006012905090565b6060600c600083815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561073a57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116106f0575b50505050509050919050565b600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600681815481106107805761077f6123d1565b5b9060005260206000200154803073ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b81526004016107c7929190612400565b602060405180830381865afa1580156107e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610808919061243e565b1015610849576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610840906124b7565b60405180910390fd5b6000821015801561085a5750600382105b610899576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089090612523565b60405180910390fd5b600682815481106108ad576108ac6123d1565b5b90600052602060002001543073ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016108f191906122bd565b602060405180830381865afa15801561090e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610932919061243e565b1015610973576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096a9061258f565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff166323b872dd3330600686815481106109a5576109a46123d1565b5b90600052602060002001546040518463ffffffff1660e01b81526004016109ce939291906125af565b6020604051808303816000875af11580156109ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1191906125fb565b50600c6000838152602001908152602001600020339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a600c60008481526020019081526020016000208054905010610b9757610b96600c6000848152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610b3a57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610af0575b5050505050600c6000858152602001908152602001600020600081548110610b6557610b646123d1565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611056565b5b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610beb610e2d565b610bf560006116dc565b565b610bff610e2d565b80600b60006101000a81548160ff02191690831515021790555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610c55906123a0565b80601f0160208091040260200160405190810160405280929190818152602001828054610c81906123a0565b8015610cce5780601f10610ca357610100808354040283529160200191610cce565b820191906000526020600020905b815481529060010190602001808311610cb157829003601f168201915b5050505050905090565b600080610ce3610eb4565b9050610cf0818585610f62565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610d8a610e2d565b610d92610be3565b565b610d9c610e2d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e0e5760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610e0591906122bd565b60405180910390fd5b610e17816116dc565b50565b600b60009054906101000a900460ff1681565b610e35610eb4565b73ffffffffffffffffffffffffffffffffffffffff16610e53610c1c565b73ffffffffffffffffffffffffffffffffffffffff1614610eb257610e76610eb4565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610ea991906122bd565b60405180910390fd5b565b600033905090565b610ec983838360016117a2565b505050565b6000610eda8484610cfb565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610f5c5781811015610f4c578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610f4393929190612628565b60405180910390fd5b610f5b848484840360006117a2565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610fd45760006040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610fcb91906122bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110465760006040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161103d91906122bd565b60405180910390fd5b611051838383611979565b505050565b600a8351101561109b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611092906126ab565b60405180910390fd5b6000835167ffffffffffffffff8111156110b8576110b76126cb565b5b6040519080825280602002602001820160405280156110e65781602001602082028036833780820191505090505b50905060005b845181101561116a57848181518110611108576111076123d1565b5b6020026020010151828281518110611123576111226123d1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505080806001019150506110ec565b506000815161117883611bdc565b6111829190612729565b9050848181518110611197576111966123d1565b5b602002602001015193503073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb856002600687815481106111d4576111d36123d1565b5b90600052602060002001546111e99190612789565b6040518363ffffffff1660e01b815260040161120692919061282a565b6020604051808303816000875af1158015611225573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124991906125fb565b5060005b855181101561133a5781811461132d573073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb87838151811061128c5761128b6123d1565b5b602002602001015160646050600689815481106112ac576112ab6123d1565b5b90600052602060002001546112c19190612789565b6112cb9190612853565b6040518363ffffffff1660e01b81526004016112e892919061282a565b6020604051808303816000875af1158015611307573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132b91906125fb565b505b808060010191505061124d565b50600067ffffffffffffffff811115611356576113556126cb565b5b6040519080825280602002602001820160405280156113845781602001602082028036833780820191505090505b50600c600085815260200190815260200160002090805190602001906113ab929190611e46565b50600d6000848152602001908152602001600020849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a600d600085815260200190815260200160002080549050111561159c5760005b6001600d6000868152602001908152602001600020805490506114659190612884565b81101561154257600d600085815260200190815260200160002060018261148c91906128b8565b8154811061149d5761149c6123d1565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d600086815260200190815260200160002082815481106114ed576114ec6123d1565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508080600101915050611442565b50600d6000848152602001908152602001600020805480611566576115656128ec565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590555b3073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61dead600188516115c99190612884565b60646050600689815481106115e1576115e06123d1565b5b90600052602060002001546115f69190612789565b6116009190612853565b61160a9190612789565b6002600688815481106116205761161f6123d1565b5b90600052602060002001546116359190612789565b89516006898154811061164b5761164a6123d1565b5b90600052602060002001546116609190612789565b61166a9190612884565b6116749190612884565b6040518363ffffffff1660e01b815260040161169192919061291b565b6020604051808303816000875af11580156116b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d491906125fb565b505050505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036118145760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161180b91906122bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118865760006040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161187d91906122bd565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015611973578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161196a9190612209565b60405180910390a35b50505050565b611984838383611c21565b600073ffffffffffffffffffffffffffffffffffffffff16600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611a91576119e2610c1c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480611a4d5750611a1e610c1c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b611a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a83906129b6565b60405180910390fd5b611bd7565b600b60009054906101000a900460ff168015611ae05750611ab0610c1c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015611b3a5750600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611b7257503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611bd65760c8611b81610663565b611b8b9190612853565b611b9483610b9b565b1115611bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcc90612a6e565b60405180910390fd5b5b5b505050565b6000600143611beb9190612884565b40428351604051602001611c0193929190612ada565b6040516020818303038152906040528051906020012060001c9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c73578060026000828254611c6791906128b8565b92505081905550611d46565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611cff578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401611cf693929190612628565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d8f5780600260008282540392505081905550611ddc565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611e399190612209565b60405180910390a3505050565b828054828255906000526020600020908101928215611ebf579160200282015b82811115611ebe5782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190611e66565b5b509050611ecc9190611ed0565b5090565b5b80821115611ee9576000816000905550600101611ed1565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611f1d82611ef2565b9050919050565b611f2d81611f12565b8114611f3857600080fd5b50565b600081359050611f4a81611f24565b92915050565b600060208284031215611f6657611f65611eed565b5b6000611f7484828501611f3b565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611fb7578082015181840152602081019050611f9c565b60008484015250505050565b6000601f19601f8301169050919050565b6000611fdf82611f7d565b611fe98185611f88565b9350611ff9818560208601611f99565b61200281611fc3565b840191505092915050565b600060208201905081810360008301526120278184611fd4565b905092915050565b6000819050919050565b6120428161202f565b811461204d57600080fd5b50565b60008135905061205f81612039565b92915050565b6000806040838503121561207c5761207b611eed565b5b600061208a85828601611f3b565b925050602061209b85828601612050565b9150509250929050565b60008115159050919050565b6120ba816120a5565b82525050565b60006020820190506120d560008301846120b1565b92915050565b6000602082840312156120f1576120f0611eed565b5b60006120ff84828501612050565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600061213f82611ef2565b9050919050565b61214f81612134565b82525050565b60006121618383612146565b60208301905092915050565b6000602082019050919050565b600061218582612108565b61218f8185612113565b935061219a83612124565b8060005b838110156121cb5781516121b28882612155565b97506121bd8361216d565b92505060018101905061219e565b5085935050505092915050565b600060208201905081810360008301526121f2818461217a565b905092915050565b6122038161202f565b82525050565b600060208201905061221e60008301846121fa565b92915050565b60008060006060848603121561223d5761223c611eed565b5b600061224b86828701611f3b565b935050602061225c86828701611f3b565b925050604061226d86828701612050565b9150509250925092565b600060ff82169050919050565b61228d81612277565b82525050565b60006020820190506122a86000830184612284565b92915050565b6122b781611f12565b82525050565b60006020820190506122d260008301846122ae565b92915050565b6122e1816120a5565b81146122ec57600080fd5b50565b6000813590506122fe816122d8565b92915050565b60006020828403121561231a57612319611eed565b5b6000612328848285016122ef565b91505092915050565b6000806040838503121561234857612347611eed565b5b600061235685828601611f3b565b925050602061236785828601611f3b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806123b857607f821691505b6020821081036123cb576123ca612371565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060408201905061241560008301856122ae565b61242260208301846122ae565b9392505050565b60008151905061243881612039565b92915050565b60006020828403121561245457612453611eed565b5b600061246284828501612429565b91505092915050565b7f4572726f723a20496e73756666696369656e7420416c6c6f77616e6365000000600082015250565b60006124a1601d83611f88565b91506124ac8261246b565b602082019050919050565b600060208201905081810360008301526124d081612494565b9050919050565b7f4572726f72203a20496e76616c69642054696572000000000000000000000000600082015250565b600061250d601483611f88565b9150612518826124d7565b602082019050919050565b6000602082019050818103600083015261253c81612500565b9050919050565b7f4572726f72203a20496e73756666696369656e742042616c616e636500000000600082015250565b6000612579601c83611f88565b915061258482612543565b602082019050919050565b600060208201905081810360008301526125a88161256c565b9050919050565b60006060820190506125c460008301866122ae565b6125d160208301856122ae565b6125de60408301846121fa565b949350505050565b6000815190506125f5816122d8565b92915050565b60006020828403121561261157612610611eed565b5b600061261f848285016125e6565b91505092915050565b600060608201905061263d60008301866122ae565b61264a60208301856121fa565b61265760408301846121fa565b949350505050565b7f4572726f72203a204e6f7420456e6f75676820506c6179657273000000000000600082015250565b6000612695601a83611f88565b91506126a08261265f565b602082019050919050565b600060208201905081810360008301526126c481612688565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006127348261202f565b915061273f8361202f565b92508261274f5761274e6126fa565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006127948261202f565b915061279f8361202f565b92508282026127ad8161202f565b915082820484148315176127c4576127c361275a565b5b5092915050565b6000819050919050565b60006127f06127eb6127e684611ef2565b6127cb565b611ef2565b9050919050565b6000612802826127d5565b9050919050565b6000612814826127f7565b9050919050565b61282481612809565b82525050565b600060408201905061283f600083018561281b565b61284c60208301846121fa565b9392505050565b600061285e8261202f565b91506128698361202f565b925082612879576128786126fa565b5b828204905092915050565b600061288f8261202f565b915061289a8361202f565b92508282039050818111156128b2576128b161275a565b5b92915050565b60006128c38261202f565b91506128ce8361202f565b92508282019050808211156128e6576128e561275a565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600060408201905061293060008301856122ae565b61293d60208301846121fa565b9392505050565b7f50617469656e6365202d2054726164696e67204e6f742053746172746564205960008201527f6574210000000000000000000000000000000000000000000000000000000000602082015250565b60006129a0602383611f88565b91506129ab82612944565b604082019050919050565b600060208201905081810360008301526129cf81612993565b9050919050565b7f4a7573742067657474696e67207761726d65642075702c206c696d6974206f6660008201527f20302e3525206f662043524f53494e4f20756e74696c206d617857616c6c657460208201527f20697320636f6d706c6574652100000000000000000000000000000000000000604082015250565b6000612a58604d83611f88565b9150612a63826129d6565b606082019050919050565b60006020820190508181036000830152612a8781612a4b565b9050919050565b6000819050919050565b6000819050919050565b612ab3612aae82612a8e565b612a98565b82525050565b6000819050919050565b612ad4612acf8261202f565b612ab9565b82525050565b6000612ae68286612aa2565b602082019150612af68285612ac3565b602082019150612b068284612ac3565b60208201915081905094935050505056fea264697066735822122033e3b3b4e59562ce4eecc48503f63b82c90c571b56f03354f1fe87c4619721fb64736f6c63430008180033
Deployed Bytecode
0x60806040526004361061011f5760003560e01c806370a08231116100a0578063a9059cbb11610064578063a9059cbb146103dc578063dd62ed3e14610419578063e14f08d514610456578063f2fde38b1461046d578063f8b45b05146104965761011f565b806370a0823114610309578063715018a61461034657806381dcd3981461035d5780638da5cb5b1461038657806395d89b41146103b15761011f565b806323b872dd116100e757806323b872dd1461021d578063313ce5671461025a578063460e204914610285578063665a11ca146102c257806367dd74ca146102ed5761011f565b8063018770201461012457806306fdde031461014d578063095ea7b31461017857806309fbf915146101b557806318160ddd146101f2575b600080fd5b34801561013057600080fd5b5061014b60048036038101906101469190611f50565b6104c1565b005b34801561015957600080fd5b5061016261050d565b60405161016f919061200d565b60405180910390f35b34801561018457600080fd5b5061019f600480360381019061019a9190612065565b61059f565b6040516101ac91906120c0565b60405180910390f35b3480156101c157600080fd5b506101dc60048036038101906101d791906120db565b6105c2565b6040516101e991906121d8565b60405180910390f35b3480156101fe57600080fd5b50610207610663565b6040516102149190612209565b60405180910390f35b34801561022957600080fd5b50610244600480360381019061023f9190612224565b61066d565b60405161025191906120c0565b60405180910390f35b34801561026657600080fd5b5061026f61069c565b60405161027c9190612293565b60405180910390f35b34801561029157600080fd5b506102ac60048036038101906102a791906120db565b6106a5565b6040516102b991906121d8565b60405180910390f35b3480156102ce57600080fd5b506102d7610746565b6040516102e491906122bd565b60405180910390f35b610307600480360381019061030291906120db565b61076c565b005b34801561031557600080fd5b50610330600480360381019061032b9190611f50565b610b9b565b60405161033d9190612209565b60405180910390f35b34801561035257600080fd5b5061035b610be3565b005b34801561036957600080fd5b50610384600480360381019061037f9190612304565b610bf7565b005b34801561039257600080fd5b5061039b610c1c565b6040516103a891906122bd565b60405180910390f35b3480156103bd57600080fd5b506103c6610c46565b6040516103d3919061200d565b60405180910390f35b3480156103e857600080fd5b5061040360048036038101906103fe9190612065565b610cd8565b60405161041091906120c0565b60405180910390f35b34801561042557600080fd5b50610440600480360381019061043b9190612331565b610cfb565b60405161044d9190612209565b60405180910390f35b34801561046257600080fd5b5061046b610d82565b005b34801561047957600080fd5b50610494600480360381019061048f9190611f50565b610d94565b005b3480156104a257600080fd5b506104ab610e1a565b6040516104b891906120c0565b60405180910390f35b6104c9610e2d565b80600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606003805461051c906123a0565b80601f0160208091040260200160405190810160405280929190818152602001828054610548906123a0565b80156105955780601f1061056a57610100808354040283529160200191610595565b820191906000526020600020905b81548152906001019060200180831161057857829003601f168201915b5050505050905090565b6000806105aa610eb4565b90506105b7818585610ebc565b600191505092915050565b6060600d600083815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561065757602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161060d575b50505050509050919050565b6000600254905090565b600080610678610eb4565b9050610685858285610ece565b610690858585610f62565b60019150509392505050565b60006012905090565b6060600c600083815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561073a57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116106f0575b50505050509050919050565b600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600681815481106107805761077f6123d1565b5b9060005260206000200154803073ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b81526004016107c7929190612400565b602060405180830381865afa1580156107e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610808919061243e565b1015610849576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610840906124b7565b60405180910390fd5b6000821015801561085a5750600382105b610899576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089090612523565b60405180910390fd5b600682815481106108ad576108ac6123d1565b5b90600052602060002001543073ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016108f191906122bd565b602060405180830381865afa15801561090e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610932919061243e565b1015610973576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096a9061258f565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff166323b872dd3330600686815481106109a5576109a46123d1565b5b90600052602060002001546040518463ffffffff1660e01b81526004016109ce939291906125af565b6020604051808303816000875af11580156109ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1191906125fb565b50600c6000838152602001908152602001600020339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a600c60008481526020019081526020016000208054905010610b9757610b96600c6000848152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610b3a57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610af0575b5050505050600c6000858152602001908152602001600020600081548110610b6557610b646123d1565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611056565b5b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610beb610e2d565b610bf560006116dc565b565b610bff610e2d565b80600b60006101000a81548160ff02191690831515021790555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610c55906123a0565b80601f0160208091040260200160405190810160405280929190818152602001828054610c81906123a0565b8015610cce5780601f10610ca357610100808354040283529160200191610cce565b820191906000526020600020905b815481529060010190602001808311610cb157829003601f168201915b5050505050905090565b600080610ce3610eb4565b9050610cf0818585610f62565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610d8a610e2d565b610d92610be3565b565b610d9c610e2d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e0e5760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610e0591906122bd565b60405180910390fd5b610e17816116dc565b50565b600b60009054906101000a900460ff1681565b610e35610eb4565b73ffffffffffffffffffffffffffffffffffffffff16610e53610c1c565b73ffffffffffffffffffffffffffffffffffffffff1614610eb257610e76610eb4565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610ea991906122bd565b60405180910390fd5b565b600033905090565b610ec983838360016117a2565b505050565b6000610eda8484610cfb565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610f5c5781811015610f4c578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610f4393929190612628565b60405180910390fd5b610f5b848484840360006117a2565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610fd45760006040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610fcb91906122bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110465760006040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161103d91906122bd565b60405180910390fd5b611051838383611979565b505050565b600a8351101561109b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611092906126ab565b60405180910390fd5b6000835167ffffffffffffffff8111156110b8576110b76126cb565b5b6040519080825280602002602001820160405280156110e65781602001602082028036833780820191505090505b50905060005b845181101561116a57848181518110611108576111076123d1565b5b6020026020010151828281518110611123576111226123d1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505080806001019150506110ec565b506000815161117883611bdc565b6111829190612729565b9050848181518110611197576111966123d1565b5b602002602001015193503073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb856002600687815481106111d4576111d36123d1565b5b90600052602060002001546111e99190612789565b6040518363ffffffff1660e01b815260040161120692919061282a565b6020604051808303816000875af1158015611225573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124991906125fb565b5060005b855181101561133a5781811461132d573073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb87838151811061128c5761128b6123d1565b5b602002602001015160646050600689815481106112ac576112ab6123d1565b5b90600052602060002001546112c19190612789565b6112cb9190612853565b6040518363ffffffff1660e01b81526004016112e892919061282a565b6020604051808303816000875af1158015611307573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132b91906125fb565b505b808060010191505061124d565b50600067ffffffffffffffff811115611356576113556126cb565b5b6040519080825280602002602001820160405280156113845781602001602082028036833780820191505090505b50600c600085815260200190815260200160002090805190602001906113ab929190611e46565b50600d6000848152602001908152602001600020849080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a600d600085815260200190815260200160002080549050111561159c5760005b6001600d6000868152602001908152602001600020805490506114659190612884565b81101561154257600d600085815260200190815260200160002060018261148c91906128b8565b8154811061149d5761149c6123d1565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d600086815260200190815260200160002082815481106114ed576114ec6123d1565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508080600101915050611442565b50600d6000848152602001908152602001600020805480611566576115656128ec565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590555b3073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61dead600188516115c99190612884565b60646050600689815481106115e1576115e06123d1565b5b90600052602060002001546115f69190612789565b6116009190612853565b61160a9190612789565b6002600688815481106116205761161f6123d1565b5b90600052602060002001546116359190612789565b89516006898154811061164b5761164a6123d1565b5b90600052602060002001546116609190612789565b61166a9190612884565b6116749190612884565b6040518363ffffffff1660e01b815260040161169192919061291b565b6020604051808303816000875af11580156116b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d491906125fb565b505050505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036118145760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161180b91906122bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118865760006040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161187d91906122bd565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508015611973578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161196a9190612209565b60405180910390a35b50505050565b611984838383611c21565b600073ffffffffffffffffffffffffffffffffffffffff16600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611a91576119e2610c1c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480611a4d5750611a1e610c1c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b611a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a83906129b6565b60405180910390fd5b611bd7565b600b60009054906101000a900460ff168015611ae05750611ab0610c1c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015611b3a5750600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611b7257503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611bd65760c8611b81610663565b611b8b9190612853565b611b9483610b9b565b1115611bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcc90612a6e565b60405180910390fd5b5b5b505050565b6000600143611beb9190612884565b40428351604051602001611c0193929190612ada565b6040516020818303038152906040528051906020012060001c9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c73578060026000828254611c6791906128b8565b92505081905550611d46565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611cff578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401611cf693929190612628565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d8f5780600260008282540392505081905550611ddc565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611e399190612209565b60405180910390a3505050565b828054828255906000526020600020908101928215611ebf579160200282015b82811115611ebe5782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190611e66565b5b509050611ecc9190611ed0565b5090565b5b80821115611ee9576000816000905550600101611ed1565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611f1d82611ef2565b9050919050565b611f2d81611f12565b8114611f3857600080fd5b50565b600081359050611f4a81611f24565b92915050565b600060208284031215611f6657611f65611eed565b5b6000611f7484828501611f3b565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611fb7578082015181840152602081019050611f9c565b60008484015250505050565b6000601f19601f8301169050919050565b6000611fdf82611f7d565b611fe98185611f88565b9350611ff9818560208601611f99565b61200281611fc3565b840191505092915050565b600060208201905081810360008301526120278184611fd4565b905092915050565b6000819050919050565b6120428161202f565b811461204d57600080fd5b50565b60008135905061205f81612039565b92915050565b6000806040838503121561207c5761207b611eed565b5b600061208a85828601611f3b565b925050602061209b85828601612050565b9150509250929050565b60008115159050919050565b6120ba816120a5565b82525050565b60006020820190506120d560008301846120b1565b92915050565b6000602082840312156120f1576120f0611eed565b5b60006120ff84828501612050565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600061213f82611ef2565b9050919050565b61214f81612134565b82525050565b60006121618383612146565b60208301905092915050565b6000602082019050919050565b600061218582612108565b61218f8185612113565b935061219a83612124565b8060005b838110156121cb5781516121b28882612155565b97506121bd8361216d565b92505060018101905061219e565b5085935050505092915050565b600060208201905081810360008301526121f2818461217a565b905092915050565b6122038161202f565b82525050565b600060208201905061221e60008301846121fa565b92915050565b60008060006060848603121561223d5761223c611eed565b5b600061224b86828701611f3b565b935050602061225c86828701611f3b565b925050604061226d86828701612050565b9150509250925092565b600060ff82169050919050565b61228d81612277565b82525050565b60006020820190506122a86000830184612284565b92915050565b6122b781611f12565b82525050565b60006020820190506122d260008301846122ae565b92915050565b6122e1816120a5565b81146122ec57600080fd5b50565b6000813590506122fe816122d8565b92915050565b60006020828403121561231a57612319611eed565b5b6000612328848285016122ef565b91505092915050565b6000806040838503121561234857612347611eed565b5b600061235685828601611f3b565b925050602061236785828601611f3b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806123b857607f821691505b6020821081036123cb576123ca612371565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060408201905061241560008301856122ae565b61242260208301846122ae565b9392505050565b60008151905061243881612039565b92915050565b60006020828403121561245457612453611eed565b5b600061246284828501612429565b91505092915050565b7f4572726f723a20496e73756666696369656e7420416c6c6f77616e6365000000600082015250565b60006124a1601d83611f88565b91506124ac8261246b565b602082019050919050565b600060208201905081810360008301526124d081612494565b9050919050565b7f4572726f72203a20496e76616c69642054696572000000000000000000000000600082015250565b600061250d601483611f88565b9150612518826124d7565b602082019050919050565b6000602082019050818103600083015261253c81612500565b9050919050565b7f4572726f72203a20496e73756666696369656e742042616c616e636500000000600082015250565b6000612579601c83611f88565b915061258482612543565b602082019050919050565b600060208201905081810360008301526125a88161256c565b9050919050565b60006060820190506125c460008301866122ae565b6125d160208301856122ae565b6125de60408301846121fa565b949350505050565b6000815190506125f5816122d8565b92915050565b60006020828403121561261157612610611eed565b5b600061261f848285016125e6565b91505092915050565b600060608201905061263d60008301866122ae565b61264a60208301856121fa565b61265760408301846121fa565b949350505050565b7f4572726f72203a204e6f7420456e6f75676820506c6179657273000000000000600082015250565b6000612695601a83611f88565b91506126a08261265f565b602082019050919050565b600060208201905081810360008301526126c481612688565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006127348261202f565b915061273f8361202f565b92508261274f5761274e6126fa565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006127948261202f565b915061279f8361202f565b92508282026127ad8161202f565b915082820484148315176127c4576127c361275a565b5b5092915050565b6000819050919050565b60006127f06127eb6127e684611ef2565b6127cb565b611ef2565b9050919050565b6000612802826127d5565b9050919050565b6000612814826127f7565b9050919050565b61282481612809565b82525050565b600060408201905061283f600083018561281b565b61284c60208301846121fa565b9392505050565b600061285e8261202f565b91506128698361202f565b925082612879576128786126fa565b5b828204905092915050565b600061288f8261202f565b915061289a8361202f565b92508282039050818111156128b2576128b161275a565b5b92915050565b60006128c38261202f565b91506128ce8361202f565b92508282019050808211156128e6576128e561275a565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600060408201905061293060008301856122ae565b61293d60208301846121fa565b9392505050565b7f50617469656e6365202d2054726164696e67204e6f742053746172746564205960008201527f6574210000000000000000000000000000000000000000000000000000000000602082015250565b60006129a0602383611f88565b91506129ab82612944565b604082019050919050565b600060208201905081810360008301526129cf81612993565b9050919050565b7f4a7573742067657474696e67207761726d65642075702c206c696d6974206f6660008201527f20302e3525206f662043524f53494e4f20756e74696c206d617857616c6c657460208201527f20697320636f6d706c6574652100000000000000000000000000000000000000604082015250565b6000612a58604d83611f88565b9150612a63826129d6565b606082019050919050565b60006020820190508181036000830152612a8781612a4b565b9050919050565b6000819050919050565b6000819050919050565b612ab3612aae82612a8e565b612a98565b82525050565b6000819050919050565b612ad4612acf8261202f565b612ab9565b82525050565b6000612ae68286612aa2565b602082019150612af68285612ac3565b602082019150612b068284612ac3565b60208201915081905094935050505056fea264697066735822122033e3b3b4e59562ce4eecc48503f63b82c90c571b56f03354f1fe87c4619721fb64736f6c63430008180033
Deployed Bytecode Sourcemap
26586:5477:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27575:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17254:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19547:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31757:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18356:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20315:249;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18207:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31586:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27244:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29272:498;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18518:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4986:103;;;;;;;;;;;;;:::i;:::-;;27427:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4311:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17464:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18841:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19086:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28953:89;;;;;;;;;;;;;:::i;:::-;;5244:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27209:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27575:118;4197:13;:11;:13::i;:::-;27671:14:::1;27655:13;;:30;;;;;;;;;;;;;;;;;;27575:118:::0;:::o;17254:91::-;17299:13;17332:5;17325:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17254:91;:::o;19547:190::-;19620:4;19637:13;19653:12;:10;:12::i;:::-;19637:28;;19676:31;19685:5;19692:7;19701:5;19676:8;:31::i;:::-;19725:4;19718:11;;;19547:190;;;;:::o;31757:134::-;31819:24;31863:14;:20;31878:4;31863:20;;;;;;;;;;;31856:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31757:134;;;:::o;18356:99::-;18408:7;18435:12;;18428:19;;18356:99;:::o;20315:249::-;20402:4;20419:15;20437:12;:10;:12::i;:::-;20419:30;;20460:37;20476:4;20482:7;20491:5;20460:15;:37::i;:::-;20508:26;20518:4;20524:2;20528:5;20508:9;:26::i;:::-;20552:4;20545:11;;;20315:249;;;;;:::o;18207:84::-;18256:5;18281:2;18274:9;;18207:84;:::o;31586:116::-;31638:24;31682:6;:12;31689:4;31682:12;;;;;;;;;;;31675:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31586:116;;;:::o;27244:28::-;;;;;;;;;;;;;:::o;29272:498::-;29334:10;29345:4;29334:16;;;;;;;;:::i;:::-;;;;;;;;;;29182:6;29137:4;:14;;;29152:10;29172:4;29137:41;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:51;;29129:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;29379:1:::1;29371:4;:9;;:21;;;;;29391:1;29384:4;:8;29371:21;29363:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;29466:10;29477:4;29466:16;;;;;;;;:::i;:::-;;;;;;;;;;29436:4;:14;;;29451:10;29436:26;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46;;29428:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;29526:4;:17;;;29544:10;29564:4;29571:10;29582:4;29571:16;;;;;;;;:::i;:::-;;;;;;;;;;29526:62;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29599:6;:12;29606:4;29599:12;;;;;;;;;;;29625:10;29599:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26879:2;29654:6;:12;29661:4;29654:12;;;;;;;;;;;:19;;;;:32;29650:113;;29703:47;29714:6;:12;29721:4;29714:12;;;;;;;;;;;29703:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29728:6;:12;29735:4;29728:12;;;;;;;;;;;29741:1;29728:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29745:4;29703:10;:47::i;:::-;29650:113;29272:498:::0;;:::o;18518:118::-;18583:7;18610:9;:18;18620:7;18610:18;;;;;;;;;;;;;;;;18603:25;;18518:118;;;:::o;4986:103::-;4197:13;:11;:13::i;:::-;5051:30:::1;5078:1;5051:18;:30::i;:::-;4986:103::o:0;27427:91::-;4197:13;:11;:13::i;:::-;27504:6:::1;27492:9;;:18;;;;;;;;;;;;;;;;;;27427:91:::0;:::o;4311:87::-;4357:7;4384:6;;;;;;;;;;;4377:13;;4311:87;:::o;17464:95::-;17511:13;17544:7;17537:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17464:95;:::o;18841:182::-;18910:4;18927:13;18943:12;:10;:12::i;:::-;18927:28;;18966:27;18976:5;18983:2;18987:5;18966:9;:27::i;:::-;19011:4;19004:11;;;18841:182;;;;:::o;19086:142::-;19166:7;19193:11;:18;19205:5;19193:18;;;;;;;;;;;;;;;:27;19212:7;19193:27;;;;;;;;;;;;;;;;19186:34;;19086:142;;;;:::o;28953:89::-;4197:13;:11;:13::i;:::-;29015:19:::1;:17;:19::i;:::-;28953:89::o:0;5244:220::-;4197:13;:11;:13::i;:::-;5349:1:::1;5329:22;;:8;:22;;::::0;5325:93:::1;;5403:1;5375:31;;;;;;;;;;;:::i;:::-;;;;;;;;5325:93;5428:28;5447:8;5428:18;:28::i;:::-;5244:220:::0;:::o;27209:28::-;;;;;;;;;;;;;:::o;4476:166::-;4547:12;:10;:12::i;:::-;4536:23;;:7;:5;:7::i;:::-;:23;;;4532:103;;4610:12;:10;:12::i;:::-;4583:40;;;;;;;;;;;:::i;:::-;;;;;;;;4532:103;4476:166::o;2479:98::-;2532:7;2559:10;2552:17;;2479:98;:::o;24374:130::-;24459:37;24468:5;24475:7;24484:5;24491:4;24459:8;:37::i;:::-;24374:130;;;:::o;26090:487::-;26190:24;26217:25;26227:5;26234:7;26217:9;:25::i;:::-;26190:52;;26277:17;26257:16;:37;26253:317;;26334:5;26315:16;:24;26311:132;;;26394:7;26403:16;26421:5;26367:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;26311:132;26486:57;26495:5;26502:7;26530:5;26511:16;:24;26537:5;26486:8;:57::i;:::-;26253:317;26179:398;26090:487;;;:::o;20949:308::-;21049:1;21033:18;;:4;:18;;;21029:88;;21102:1;21075:30;;;;;;;;;;;:::i;:::-;;;;;;;;21029:88;21145:1;21131:16;;:2;:16;;;21127:88;;21200:1;21171:32;;;;;;;;;;;:::i;:::-;;;;;;;;21127:88;21225:24;21233:4;21239:2;21243:5;21225:7;:24::i;:::-;20949:308;;;:::o;29815:1527::-;26879:2;29932:7;:14;:27;;29924:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;30001:33;30051:7;:14;30037:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30001:65;;30082:9;30077:113;30101:7;:14;30097:1;:18;30077:113;;;30167:7;30175:1;30167:10;;;;;;;;:::i;:::-;;;;;;;;30137:16;30154:1;30137:19;;;;;;;;:::i;:::-;;;;;;;:41;;;;;;;;;;;30117:3;;;;;;;30077:113;;;;30200:19;30249:16;:23;30222:24;30229:16;30222:6;:24::i;:::-;:50;;;;:::i;:::-;30200:72;;30292:7;30300:11;30292:20;;;;;;;;:::i;:::-;;;;;;;;30283:29;;30384:4;:13;;;30398:6;30425:1;30406:10;30417:4;30406:16;;;;;;;;:::i;:::-;;;;;;;;;;:20;;;;:::i;:::-;30384:43;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30489:9;30484:228;30508:7;:14;30504:1;:18;30484:228;;;30553:11;30548:1;:16;30544:157;;30585:4;:13;;;30599:7;30607:1;30599:10;;;;;;;;:::i;:::-;;;;;;;;30635:3;30630:2;30611:10;30622:4;30611:16;;;;;;;;:::i;:::-;;;;;;;;;;:21;;;;:::i;:::-;:27;;;;:::i;:::-;30585:54;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30544:157;30524:3;;;;;;;30484:228;;;;30761:1;30739:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30724:6;:12;30731:4;30724:12;;;;;;;;;;;:39;;;;;;;;;;;;:::i;:::-;;30790:14;:20;30805:4;30790:20;;;;;;;;;;;30816:6;30790:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30899:2;30869:14;:20;30884:4;30869:20;;;;;;;;;;;:27;;;;:32;30865:252;;;30923:6;30918:147;30969:1;30939:14;:20;30954:4;30939:20;;;;;;;;;;;:27;;;;:31;;;;:::i;:::-;30935:1;:35;30918:147;;;31022:14;:20;31037:4;31022:20;;;;;;;;;;;31047:1;31043;:5;;;;:::i;:::-;31022:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30996:14;:20;31011:4;30996:20;;;;;;;;;;;31017:1;30996:23;;;;;;;;:::i;:::-;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;30972:3;;;;;;;30918:147;;;;31079:14;:20;31094:4;31079:20;;;;;;;;;;;:26;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;30865:252;31129:4;:13;;;31151:42;31306:1;31289:7;:14;:18;;;;:::i;:::-;31282:3;31277:2;31258:10;31269:4;31258:16;;;;;;;;:::i;:::-;;;;;;;;;;:21;;;;:::i;:::-;:27;;;;:::i;:::-;:50;;;;:::i;:::-;31252:1;31233:10;31244:4;31233:16;;;;;;;;:::i;:::-;;;;;;;;;;:20;;;;:::i;:::-;31215:7;:14;31196:10;31207:4;31196:16;;;;;;;;:::i;:::-;;;;;;;;;;:33;;;;:::i;:::-;:58;;;;:::i;:::-;:113;;;;:::i;:::-;31129:181;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29913:1429;;29815:1527;;;:::o;5624:191::-;5698:16;5717:6;;;;;;;;;;;5698:25;;5743:8;5734:6;;:17;;;;;;;;;;;;;;;;;;5798:8;5767:40;;5788:8;5767:40;;;;;;;;;;;;5687:128;5624:191;:::o;25355:443::-;25485:1;25468:19;;:5;:19;;;25464:91;;25540:1;25511:32;;;;;;;;;;;:::i;:::-;;;;;;;;25464:91;25588:1;25569:21;;:7;:21;;;25565:92;;25642:1;25614:31;;;;;;;;;;;:::i;:::-;;;;;;;;25565:92;25697:5;25667:11;:18;25679:5;25667:18;;;;;;;;;;;;;;;:27;25686:7;25667:27;;;;;;;;;;;;;;;:35;;;;25717:9;25713:78;;;25764:7;25748:31;;25757:5;25748:31;;;25773:5;25748:31;;;;;;:::i;:::-;;;;;;;;25713:78;25355:443;;;;:::o;27796:1053::-;27892:31;27906:4;27912:2;27916:6;27892:13;:31::i;:::-;28058:1;28033:27;;:13;;;;;;;;;;;:27;;;28030:160;;28093:7;:5;:7::i;:::-;28085:15;;:4;:15;;;:32;;;;28110:7;:5;:7::i;:::-;28104:13;;:2;:13;;;28085:32;28077:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;28172:7;;28030:160;28430:9;;;;;;;;;;;:28;;;;;28451:7;:5;:7::i;:::-;28443:15;;:4;:15;;;;28430:28;:51;;;;;28468:13;;;;;;;;;;;28462:19;;:2;:19;;;;28430:51;:76;;;;;28501:4;28485:21;;:4;:21;;;;28430:76;28426:416;;;28714:3;28698:13;:11;:13::i;:::-;:19;;;;:::i;:::-;28681:13;28691:2;28681:9;:13::i;:::-;:36;;28655:175;;;;;;;;;;;;:::i;:::-;;;;;;;;;28426:416;27796:1053;;;;:::o;31374:204::-;31442:7;31529:1;31514:12;:16;;;;:::i;:::-;31504:27;31533:15;31550:10;:17;31487:81;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;31477:92;;;;;;31469:101;;31462:108;;31374:204;;;:::o;21581:1135::-;21687:1;21671:18;;:4;:18;;;21667:552;;21825:5;21809:12;;:21;;;;;;;:::i;:::-;;;;;;;;21667:552;;;21863:19;21885:9;:15;21895:4;21885:15;;;;;;;;;;;;;;;;21863:37;;21933:5;21919:11;:19;21915:117;;;21991:4;21997:11;22010:5;21966:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;21915:117;22187:5;22173:11;:19;22155:9;:15;22165:4;22155:15;;;;;;;;;;;;;;;:37;;;;21848:371;21667:552;22249:1;22235:16;;:2;:16;;;22231:435;;22417:5;22401:12;;:21;;;;;;;;;;;22231:435;;;22634:5;22617:9;:13;22627:2;22617:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;22231:435;22698:2;22683:25;;22692:4;22683:25;;;22702:5;22683:25;;;;;;:::i;:::-;;;;;;;;21581:1135;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;88:117:1:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:99::-;1228:6;1262:5;1256:12;1246:22;;1176:99;;;:::o;1281:169::-;1365:11;1399:6;1394:3;1387:19;1439:4;1434:3;1430:14;1415:29;;1281:169;;;;:::o;1456:246::-;1537:1;1547:113;1561:6;1558:1;1555:13;1547:113;;;1646:1;1641:3;1637:11;1631:18;1627:1;1622:3;1618:11;1611:39;1583:2;1580:1;1576:10;1571:15;;1547:113;;;1694:1;1685:6;1680:3;1676:16;1669:27;1518:184;1456:246;;;:::o;1708:102::-;1749:6;1800:2;1796:7;1791:2;1784:5;1780:14;1776:28;1766:38;;1708:102;;;:::o;1816:377::-;1904:3;1932:39;1965:5;1932:39;:::i;:::-;1987:71;2051:6;2046:3;1987:71;:::i;:::-;1980:78;;2067:65;2125:6;2120:3;2113:4;2106:5;2102:16;2067:65;:::i;:::-;2157:29;2179:6;2157:29;:::i;:::-;2152:3;2148:39;2141:46;;1908:285;1816:377;;;;:::o;2199:313::-;2312:4;2350:2;2339:9;2335:18;2327:26;;2399:9;2393:4;2389:20;2385:1;2374:9;2370:17;2363:47;2427:78;2500:4;2491:6;2427:78;:::i;:::-;2419:86;;2199:313;;;;:::o;2518:77::-;2555:7;2584:5;2573:16;;2518:77;;;:::o;2601:122::-;2674:24;2692:5;2674:24;:::i;:::-;2667:5;2664:35;2654:63;;2713:1;2710;2703:12;2654:63;2601:122;:::o;2729:139::-;2775:5;2813:6;2800:20;2791:29;;2829:33;2856:5;2829:33;:::i;:::-;2729:139;;;;:::o;2874:474::-;2942:6;2950;2999:2;2987:9;2978:7;2974:23;2970:32;2967:119;;;3005:79;;:::i;:::-;2967:119;3125:1;3150:53;3195:7;3186:6;3175:9;3171:22;3150:53;:::i;:::-;3140:63;;3096:117;3252:2;3278:53;3323:7;3314:6;3303:9;3299:22;3278:53;:::i;:::-;3268:63;;3223:118;2874:474;;;;;:::o;3354:90::-;3388:7;3431:5;3424:13;3417:21;3406:32;;3354:90;;;:::o;3450:109::-;3531:21;3546:5;3531:21;:::i;:::-;3526:3;3519:34;3450:109;;:::o;3565:210::-;3652:4;3690:2;3679:9;3675:18;3667:26;;3703:65;3765:1;3754:9;3750:17;3741:6;3703:65;:::i;:::-;3565:210;;;;:::o;3781:329::-;3840:6;3889:2;3877:9;3868:7;3864:23;3860:32;3857:119;;;3895:79;;:::i;:::-;3857:119;4015:1;4040:53;4085:7;4076:6;4065:9;4061:22;4040:53;:::i;:::-;4030:63;;3986:117;3781:329;;;;:::o;4116:122::-;4191:6;4225:5;4219:12;4209:22;;4116:122;;;:::o;4244:192::-;4351:11;4385:6;4380:3;4373:19;4425:4;4420:3;4416:14;4401:29;;4244:192;;;;:::o;4442:140::-;4517:4;4540:3;4532:11;;4570:4;4565:3;4561:14;4553:22;;4442:140;;;:::o;4588:104::-;4633:7;4662:24;4680:5;4662:24;:::i;:::-;4651:35;;4588:104;;;:::o;4698:132::-;4791:32;4817:5;4791:32;:::i;:::-;4786:3;4779:45;4698:132;;:::o;4836:211::-;4921:10;4942:62;5000:3;4992:6;4942:62;:::i;:::-;5036:4;5031:3;5027:14;5013:28;;4836:211;;;;:::o;5053:121::-;5131:4;5163;5158:3;5154:14;5146:22;;5053:121;;;:::o;5226:796::-;5361:3;5390:62;5446:5;5390:62;:::i;:::-;5468:94;5555:6;5550:3;5468:94;:::i;:::-;5461:101;;5586:64;5644:5;5586:64;:::i;:::-;5673:7;5704:1;5689:308;5714:6;5711:1;5708:13;5689:308;;;5790:6;5784:13;5817:79;5892:3;5877:13;5817:79;:::i;:::-;5810:86;;5919:68;5980:6;5919:68;:::i;:::-;5909:78;;5749:248;5736:1;5733;5729:9;5724:14;;5689:308;;;5693:14;6013:3;6006:10;;5366:656;;;5226:796;;;;:::o;6028:405::-;6187:4;6225:2;6214:9;6210:18;6202:26;;6274:9;6268:4;6264:20;6260:1;6249:9;6245:17;6238:47;6302:124;6421:4;6412:6;6302:124;:::i;:::-;6294:132;;6028:405;;;;:::o;6439:118::-;6526:24;6544:5;6526:24;:::i;:::-;6521:3;6514:37;6439:118;;:::o;6563:222::-;6656:4;6694:2;6683:9;6679:18;6671:26;;6707:71;6775:1;6764:9;6760:17;6751:6;6707:71;:::i;:::-;6563:222;;;;:::o;6791:619::-;6868:6;6876;6884;6933:2;6921:9;6912:7;6908:23;6904:32;6901:119;;;6939:79;;:::i;:::-;6901:119;7059:1;7084:53;7129:7;7120:6;7109:9;7105:22;7084:53;:::i;:::-;7074:63;;7030:117;7186:2;7212:53;7257:7;7248:6;7237:9;7233:22;7212:53;:::i;:::-;7202:63;;7157:118;7314:2;7340:53;7385:7;7376:6;7365:9;7361:22;7340:53;:::i;:::-;7330:63;;7285:118;6791:619;;;;;:::o;7416:86::-;7451:7;7491:4;7484:5;7480:16;7469:27;;7416:86;;;:::o;7508:112::-;7591:22;7607:5;7591:22;:::i;:::-;7586:3;7579:35;7508:112;;:::o;7626:214::-;7715:4;7753:2;7742:9;7738:18;7730:26;;7766:67;7830:1;7819:9;7815:17;7806:6;7766:67;:::i;:::-;7626:214;;;;:::o;7846:118::-;7933:24;7951:5;7933:24;:::i;:::-;7928:3;7921:37;7846:118;;:::o;7970:222::-;8063:4;8101:2;8090:9;8086:18;8078:26;;8114:71;8182:1;8171:9;8167:17;8158:6;8114:71;:::i;:::-;7970:222;;;;:::o;8198:116::-;8268:21;8283:5;8268:21;:::i;:::-;8261:5;8258:32;8248:60;;8304:1;8301;8294:12;8248:60;8198:116;:::o;8320:133::-;8363:5;8401:6;8388:20;8379:29;;8417:30;8441:5;8417:30;:::i;:::-;8320:133;;;;:::o;8459:323::-;8515:6;8564:2;8552:9;8543:7;8539:23;8535:32;8532:119;;;8570:79;;:::i;:::-;8532:119;8690:1;8715:50;8757:7;8748:6;8737:9;8733:22;8715:50;:::i;:::-;8705:60;;8661:114;8459:323;;;;:::o;8788:474::-;8856:6;8864;8913:2;8901:9;8892:7;8888:23;8884:32;8881:119;;;8919:79;;:::i;:::-;8881:119;9039:1;9064:53;9109:7;9100:6;9089:9;9085:22;9064:53;:::i;:::-;9054:63;;9010:117;9166:2;9192:53;9237:7;9228:6;9217:9;9213:22;9192:53;:::i;:::-;9182:63;;9137:118;8788:474;;;;;:::o;9268:180::-;9316:77;9313:1;9306:88;9413:4;9410:1;9403:15;9437:4;9434:1;9427:15;9454:320;9498:6;9535:1;9529:4;9525:12;9515:22;;9582:1;9576:4;9572:12;9603:18;9593:81;;9659:4;9651:6;9647:17;9637:27;;9593:81;9721:2;9713:6;9710:14;9690:18;9687:38;9684:84;;9740:18;;:::i;:::-;9684:84;9505:269;9454:320;;;:::o;9780:180::-;9828:77;9825:1;9818:88;9925:4;9922:1;9915:15;9949:4;9946:1;9939:15;9966:332;10087:4;10125:2;10114:9;10110:18;10102:26;;10138:71;10206:1;10195:9;10191:17;10182:6;10138:71;:::i;:::-;10219:72;10287:2;10276:9;10272:18;10263:6;10219:72;:::i;:::-;9966:332;;;;;:::o;10304:143::-;10361:5;10392:6;10386:13;10377:22;;10408:33;10435:5;10408:33;:::i;:::-;10304:143;;;;:::o;10453:351::-;10523:6;10572:2;10560:9;10551:7;10547:23;10543:32;10540:119;;;10578:79;;:::i;:::-;10540:119;10698:1;10723:64;10779:7;10770:6;10759:9;10755:22;10723:64;:::i;:::-;10713:74;;10669:128;10453:351;;;;:::o;10810:179::-;10950:31;10946:1;10938:6;10934:14;10927:55;10810:179;:::o;10995:366::-;11137:3;11158:67;11222:2;11217:3;11158:67;:::i;:::-;11151:74;;11234:93;11323:3;11234:93;:::i;:::-;11352:2;11347:3;11343:12;11336:19;;10995:366;;;:::o;11367:419::-;11533:4;11571:2;11560:9;11556:18;11548:26;;11620:9;11614:4;11610:20;11606:1;11595:9;11591:17;11584:47;11648:131;11774:4;11648:131;:::i;:::-;11640:139;;11367:419;;;:::o;11792:170::-;11932:22;11928:1;11920:6;11916:14;11909:46;11792:170;:::o;11968:366::-;12110:3;12131:67;12195:2;12190:3;12131:67;:::i;:::-;12124:74;;12207:93;12296:3;12207:93;:::i;:::-;12325:2;12320:3;12316:12;12309:19;;11968:366;;;:::o;12340:419::-;12506:4;12544:2;12533:9;12529:18;12521:26;;12593:9;12587:4;12583:20;12579:1;12568:9;12564:17;12557:47;12621:131;12747:4;12621:131;:::i;:::-;12613:139;;12340:419;;;:::o;12765:178::-;12905:30;12901:1;12893:6;12889:14;12882:54;12765:178;:::o;12949:366::-;13091:3;13112:67;13176:2;13171:3;13112:67;:::i;:::-;13105:74;;13188:93;13277:3;13188:93;:::i;:::-;13306:2;13301:3;13297:12;13290:19;;12949:366;;;:::o;13321:419::-;13487:4;13525:2;13514:9;13510:18;13502:26;;13574:9;13568:4;13564:20;13560:1;13549:9;13545:17;13538:47;13602:131;13728:4;13602:131;:::i;:::-;13594:139;;13321:419;;;:::o;13746:442::-;13895:4;13933:2;13922:9;13918:18;13910:26;;13946:71;14014:1;14003:9;13999:17;13990:6;13946:71;:::i;:::-;14027:72;14095:2;14084:9;14080:18;14071:6;14027:72;:::i;:::-;14109;14177:2;14166:9;14162:18;14153:6;14109:72;:::i;:::-;13746:442;;;;;;:::o;14194:137::-;14248:5;14279:6;14273:13;14264:22;;14295:30;14319:5;14295:30;:::i;:::-;14194:137;;;;:::o;14337:345::-;14404:6;14453:2;14441:9;14432:7;14428:23;14424:32;14421:119;;;14459:79;;:::i;:::-;14421:119;14579:1;14604:61;14657:7;14648:6;14637:9;14633:22;14604:61;:::i;:::-;14594:71;;14550:125;14337:345;;;;:::o;14688:442::-;14837:4;14875:2;14864:9;14860:18;14852:26;;14888:71;14956:1;14945:9;14941:17;14932:6;14888:71;:::i;:::-;14969:72;15037:2;15026:9;15022:18;15013:6;14969:72;:::i;:::-;15051;15119:2;15108:9;15104:18;15095:6;15051:72;:::i;:::-;14688:442;;;;;;:::o;15136:176::-;15276:28;15272:1;15264:6;15260:14;15253:52;15136:176;:::o;15318:366::-;15460:3;15481:67;15545:2;15540:3;15481:67;:::i;:::-;15474:74;;15557:93;15646:3;15557:93;:::i;:::-;15675:2;15670:3;15666:12;15659:19;;15318:366;;;:::o;15690:419::-;15856:4;15894:2;15883:9;15879:18;15871:26;;15943:9;15937:4;15933:20;15929:1;15918:9;15914:17;15907:47;15971:131;16097:4;15971:131;:::i;:::-;15963:139;;15690:419;;;:::o;16115:180::-;16163:77;16160:1;16153:88;16260:4;16257:1;16250:15;16284:4;16281:1;16274:15;16301:180;16349:77;16346:1;16339:88;16446:4;16443:1;16436:15;16470:4;16467:1;16460:15;16487:176;16519:1;16536:20;16554:1;16536:20;:::i;:::-;16531:25;;16570:20;16588:1;16570:20;:::i;:::-;16565:25;;16609:1;16599:35;;16614:18;;:::i;:::-;16599:35;16655:1;16652;16648:9;16643:14;;16487:176;;;;:::o;16669:180::-;16717:77;16714:1;16707:88;16814:4;16811:1;16804:15;16838:4;16835:1;16828:15;16855:410;16895:7;16918:20;16936:1;16918:20;:::i;:::-;16913:25;;16952:20;16970:1;16952:20;:::i;:::-;16947:25;;17007:1;17004;17000:9;17029:30;17047:11;17029:30;:::i;:::-;17018:41;;17208:1;17199:7;17195:15;17192:1;17189:22;17169:1;17162:9;17142:83;17119:139;;17238:18;;:::i;:::-;17119:139;16903:362;16855:410;;;;:::o;17271:60::-;17299:3;17320:5;17313:12;;17271:60;;;:::o;17337:142::-;17387:9;17420:53;17438:34;17447:24;17465:5;17447:24;:::i;:::-;17438:34;:::i;:::-;17420:53;:::i;:::-;17407:66;;17337:142;;;:::o;17485:126::-;17535:9;17568:37;17599:5;17568:37;:::i;:::-;17555:50;;17485:126;;;:::o;17617:134::-;17675:9;17708:37;17739:5;17708:37;:::i;:::-;17695:50;;17617:134;;;:::o;17757:147::-;17852:45;17891:5;17852:45;:::i;:::-;17847:3;17840:58;17757:147;;:::o;17910:348::-;18039:4;18077:2;18066:9;18062:18;18054:26;;18090:79;18166:1;18155:9;18151:17;18142:6;18090:79;:::i;:::-;18179:72;18247:2;18236:9;18232:18;18223:6;18179:72;:::i;:::-;17910:348;;;;;:::o;18264:185::-;18304:1;18321:20;18339:1;18321:20;:::i;:::-;18316:25;;18355:20;18373:1;18355:20;:::i;:::-;18350:25;;18394:1;18384:35;;18399:18;;:::i;:::-;18384:35;18441:1;18438;18434:9;18429:14;;18264:185;;;;:::o;18455:194::-;18495:4;18515:20;18533:1;18515:20;:::i;:::-;18510:25;;18549:20;18567:1;18549:20;:::i;:::-;18544:25;;18593:1;18590;18586:9;18578:17;;18617:1;18611:4;18608:11;18605:37;;;18622:18;;:::i;:::-;18605:37;18455:194;;;;:::o;18655:191::-;18695:3;18714:20;18732:1;18714:20;:::i;:::-;18709:25;;18748:20;18766:1;18748:20;:::i;:::-;18743:25;;18791:1;18788;18784:9;18777:16;;18812:3;18809:1;18806:10;18803:36;;;18819:18;;:::i;:::-;18803:36;18655:191;;;;:::o;18852:180::-;18900:77;18897:1;18890:88;18997:4;18994:1;18987:15;19021:4;19018:1;19011:15;19038:332;19159:4;19197:2;19186:9;19182:18;19174:26;;19210:71;19278:1;19267:9;19263:17;19254:6;19210:71;:::i;:::-;19291:72;19359:2;19348:9;19344:18;19335:6;19291:72;:::i;:::-;19038:332;;;;;:::o;19376:222::-;19516:34;19512:1;19504:6;19500:14;19493:58;19585:5;19580:2;19572:6;19568:15;19561:30;19376:222;:::o;19604:366::-;19746:3;19767:67;19831:2;19826:3;19767:67;:::i;:::-;19760:74;;19843:93;19932:3;19843:93;:::i;:::-;19961:2;19956:3;19952:12;19945:19;;19604:366;;;:::o;19976:419::-;20142:4;20180:2;20169:9;20165:18;20157:26;;20229:9;20223:4;20219:20;20215:1;20204:9;20200:17;20193:47;20257:131;20383:4;20257:131;:::i;:::-;20249:139;;19976:419;;;:::o;20401:301::-;20541:34;20537:1;20529:6;20525:14;20518:58;20610:34;20605:2;20597:6;20593:15;20586:59;20679:15;20674:2;20666:6;20662:15;20655:40;20401:301;:::o;20708:366::-;20850:3;20871:67;20935:2;20930:3;20871:67;:::i;:::-;20864:74;;20947:93;21036:3;20947:93;:::i;:::-;21065:2;21060:3;21056:12;21049:19;;20708:366;;;:::o;21080:419::-;21246:4;21284:2;21273:9;21269:18;21261:26;;21333:9;21327:4;21323:20;21319:1;21308:9;21304:17;21297:47;21361:131;21487:4;21361:131;:::i;:::-;21353:139;;21080:419;;;:::o;21505:77::-;21542:7;21571:5;21560:16;;21505:77;;;:::o;21588:79::-;21627:7;21656:5;21645:16;;21588:79;;;:::o;21673:157::-;21778:45;21798:24;21816:5;21798:24;:::i;:::-;21778:45;:::i;:::-;21773:3;21766:58;21673:157;;:::o;21836:79::-;21875:7;21904:5;21893:16;;21836:79;;;:::o;21921:157::-;22026:45;22046:24;22064:5;22046:24;:::i;:::-;22026:45;:::i;:::-;22021:3;22014:58;21921:157;;:::o;22084:538::-;22252:3;22267:75;22338:3;22329:6;22267:75;:::i;:::-;22367:2;22362:3;22358:12;22351:19;;22380:75;22451:3;22442:6;22380:75;:::i;:::-;22480:2;22475:3;22471:12;22464:19;;22493:75;22564:3;22555:6;22493:75;:::i;:::-;22593:2;22588:3;22584:12;22577:19;;22613:3;22606:10;;22084:538;;;;;;:::o
Swarm Source
ipfs://33e3b3b4e59562ce4eecc48503f63b82c90c571b56f03354f1fe87c4619721fb
Loading...
Loading
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.