Token Lollipop
Overview ERC-20
Price
$0.00 @ 0.000000 MATIC
Fully Diluted Market Cap
Total Supply:
1,000,000 loll
Holders:
54 addresses
Transfers:
-
Contract:
Decimals:
18
[ Download CSV Export ]
[ Download CSV Export ]
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Lollipop
Compiler Version
v0.8.8+commit.dddeac2f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-03-26 */ // Sources flattened with hardhat v2.8.4 https://hardhat.org // File @openzeppelin/contracts/token/ERC20/[email protected] // ''-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); } // File @openzeppelin/contracts/token/ERC20/extensions/[email protected] // ''-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File @openzeppelin/contracts/utils/[email protected] // ''-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/token/ERC20/[email protected] // ''-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, _allowances[owner][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = _allowances[owner][spender]; require( currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero" ); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require( fromBalance >= amount, "ERC20: transfer amount exceeds balance" ); unchecked { _balances[from] = fromBalance - amount; } _balances[to] += amount; emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Spend `amount` form the allowance of `owner` toward `spender`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require( currentAllowance >= amount, "ERC20: insufficient allowance" ); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } // File @openzeppelin/contracts/access/[email protected] // ''-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File @openzeppelin/contracts/token/ERC20/extensions/[email protected] // ''-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/ERC20Capped.sol) pragma solidity ^0.8.0; /** * @dev Extension of {ERC20} that adds a cap to the supply of tokens. */ abstract contract ERC20Capped is ERC20 { uint256 private immutable _cap; /** * @dev Sets the value of the `cap`. This value is immutable, it can only be * set once during construction. */ constructor(uint256 cap_) { require(cap_ > 0, "ERC20Capped: cap is 0"); _cap = cap_; } /** * @dev Returns the cap on the token's total supply. */ function cap() public view virtual returns (uint256) { return _cap; } /** * @dev See {ERC20-_mint}. */ function _mint(address account, uint256 amount) internal virtual override { require( ERC20.totalSupply() + amount <= cap(), "ERC20Capped: cap exceeded" ); super._mint(account, amount); } } // File contracts/Lollipop.sol // SPDX-License-Identifier: MIT pragma solidity ^0.8.8; contract Lollipop is ERC20, Ownable { uint256 private immutable _cap = 1000000 * 10**decimals(); constructor() ERC20("Lollipop", "loll") { _mint(msg.sender, cap()); } /** * @dev Returns the cap on the token's total supply. */ function cap() public view virtual returns (uint256) { return _cap; } function mint(address to, uint256 amount) public onlyOwner { require( ERC20.totalSupply() + amount <= cap(), "ERC20Capped: cap exceeded" ); _mint(to, amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","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":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a0604052620000146200012d60201b60201c565b600a620000229190620005db565b620f42406200003291906200062c565b6080908152503480156200004557600080fd5b506040518060400160405280600881526020017f4c6f6c6c69706f700000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f6c6f6c6c000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000ca92919062000391565b508060049080519060200190620000e392919062000391565b50505062000106620000fa6200013660201b60201c565b6200013e60201b60201c565b62000127336200011b6200020460201b60201c565b6200020e60201b60201c565b62000800565b60006012905090565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000608051905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000281576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200027890620006ee565b60405180910390fd5b62000295600083836200038760201b60201c565b8060026000828254620002a9919062000710565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000300919062000710565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200036791906200077e565b60405180910390a362000383600083836200038c60201b60201c565b5050565b505050565b505050565b8280546200039f90620007ca565b90600052602060002090601f016020900481019282620003c357600085556200040f565b82601f10620003de57805160ff19168380011785556200040f565b828001600101855582156200040f579182015b828111156200040e578251825591602001919060010190620003f1565b5b5090506200041e919062000422565b5090565b5b808211156200043d57600081600090555060010162000423565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620004cf57808604811115620004a757620004a662000441565b5b6001851615620004b75780820291505b8081029050620004c78562000470565b945062000487565b94509492505050565b600082620004ea5760019050620005bd565b81620004fa5760009050620005bd565b81600181146200051357600281146200051e5762000554565b6001915050620005bd565b60ff84111562000533576200053262000441565b5b8360020a9150848211156200054d576200054c62000441565b5b50620005bd565b5060208310610133831016604e8410600b84101617156200058e5782820a90508381111562000588576200058762000441565b5b620005bd565b6200059d84848460016200047d565b92509050818404811115620005b757620005b662000441565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b6000620005e882620005c4565b9150620005f583620005ce565b9250620006247fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620004d8565b905092915050565b60006200063982620005c4565b91506200064683620005c4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000682576200068162000441565b5b828202905092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620006d6601f836200068d565b9150620006e3826200069e565b602082019050919050565b600060208201905081810360008301526200070981620006c7565b9050919050565b60006200071d82620005c4565b91506200072a83620005c4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000762576200076162000441565b5b828201905092915050565b6200077881620005c4565b82525050565b60006020820190506200079560008301846200076d565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620007e357607f821691505b60208210811415620007fa57620007f96200079b565b5b50919050565b608051611b016200081c60003960006104460152611b016000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c806370a0823111610097578063a457c2d711610066578063a457c2d71461029f578063a9059cbb146102cf578063dd62ed3e146102ff578063f2fde38b1461032f57610100565b806370a0823114610229578063715018a6146102595780638da5cb5b1461026357806395d89b411461028157610100565b8063313ce567116100d3578063313ce567146101a1578063355274ea146101bf57806339509351146101dd57806340c10f191461020d57610100565b806306fdde0314610105578063095ea7b31461012357806318160ddd1461015357806323b872dd14610171575b600080fd5b61010d61034b565b60405161011a91906111bb565b60405180910390f35b61013d60048036038101906101389190611276565b6103dd565b60405161014a91906112d1565b60405180910390f35b61015b610400565b60405161016891906112fb565b60405180910390f35b61018b60048036038101906101869190611316565b61040a565b60405161019891906112d1565b60405180910390f35b6101a9610439565b6040516101b69190611385565b60405180910390f35b6101c7610442565b6040516101d491906112fb565b60405180910390f35b6101f760048036038101906101f29190611276565b61046a565b60405161020491906112d1565b60405180910390f35b61022760048036038101906102229190611276565b610514565b005b610243600480360381019061023e91906113a0565b6105fa565b60405161025091906112fb565b60405180910390f35b610261610642565b005b61026b6106ca565b60405161027891906113dc565b60405180910390f35b6102896106f4565b60405161029691906111bb565b60405180910390f35b6102b960048036038101906102b49190611276565b610786565b6040516102c691906112d1565b60405180910390f35b6102e960048036038101906102e49190611276565b610870565b6040516102f691906112d1565b60405180910390f35b610319600480360381019061031491906113f7565b610893565b60405161032691906112fb565b60405180910390f35b610349600480360381019061034491906113a0565b61091a565b005b60606003805461035a90611466565b80601f016020809104026020016040519081016040528092919081815260200182805461038690611466565b80156103d35780601f106103a8576101008083540402835291602001916103d3565b820191906000526020600020905b8154815290600101906020018083116103b657829003601f168201915b5050505050905090565b6000806103e8610a12565b90506103f5818585610a1a565b600191505092915050565b6000600254905090565b600080610415610a12565b9050610422858285610be5565b61042d858585610c71565b60019150509392505050565b60006012905090565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b600080610475610a12565b9050610509818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461050491906114c7565b610a1a565b600191505092915050565b61051c610a12565b73ffffffffffffffffffffffffffffffffffffffff1661053a6106ca565b73ffffffffffffffffffffffffffffffffffffffff1614610590576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161058790611569565b60405180910390fd5b610598610442565b816105a1610400565b6105ab91906114c7565b11156105ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105e3906115d5565b60405180910390fd5b6105f68282610ef2565b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61064a610a12565b73ffffffffffffffffffffffffffffffffffffffff166106686106ca565b73ffffffffffffffffffffffffffffffffffffffff16146106be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b590611569565b60405180910390fd5b6106c86000611052565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461070390611466565b80601f016020809104026020016040519081016040528092919081815260200182805461072f90611466565b801561077c5780601f106107515761010080835404028352916020019161077c565b820191906000526020600020905b81548152906001019060200180831161075f57829003601f168201915b5050505050905090565b600080610791610a12565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015610857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084e90611667565b60405180910390fd5b6108648286868403610a1a565b60019250505092915050565b60008061087b610a12565b9050610888818585610c71565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610922610a12565b73ffffffffffffffffffffffffffffffffffffffff166109406106ca565b73ffffffffffffffffffffffffffffffffffffffff1614610996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098d90611569565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fd906116f9565b60405180910390fd5b610a0f81611052565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a819061178b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610afa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af19061181d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610bd891906112fb565b60405180910390a3505050565b6000610bf18484610893565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610c6b5781811015610c5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5490611889565b60405180910390fd5b610c6a8484848403610a1a565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd89061191b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d48906119ad565b60405180910390fd5b610d5c838383611118565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610de2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd990611a3f565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e7591906114c7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610ed991906112fb565b60405180910390a3610eec84848461111d565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5990611aab565b60405180910390fd5b610f6e60008383611118565b8060026000828254610f8091906114c7565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610fd591906114c7565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161103a91906112fb565b60405180910390a361104e6000838361111d565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561115c578082015181840152602081019050611141565b8381111561116b576000848401525b50505050565b6000601f19601f8301169050919050565b600061118d82611122565b611197818561112d565b93506111a781856020860161113e565b6111b081611171565b840191505092915050565b600060208201905081810360008301526111d58184611182565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061120d826111e2565b9050919050565b61121d81611202565b811461122857600080fd5b50565b60008135905061123a81611214565b92915050565b6000819050919050565b61125381611240565b811461125e57600080fd5b50565b6000813590506112708161124a565b92915050565b6000806040838503121561128d5761128c6111dd565b5b600061129b8582860161122b565b92505060206112ac85828601611261565b9150509250929050565b60008115159050919050565b6112cb816112b6565b82525050565b60006020820190506112e660008301846112c2565b92915050565b6112f581611240565b82525050565b600060208201905061131060008301846112ec565b92915050565b60008060006060848603121561132f5761132e6111dd565b5b600061133d8682870161122b565b935050602061134e8682870161122b565b925050604061135f86828701611261565b9150509250925092565b600060ff82169050919050565b61137f81611369565b82525050565b600060208201905061139a6000830184611376565b92915050565b6000602082840312156113b6576113b56111dd565b5b60006113c48482850161122b565b91505092915050565b6113d681611202565b82525050565b60006020820190506113f160008301846113cd565b92915050565b6000806040838503121561140e5761140d6111dd565b5b600061141c8582860161122b565b925050602061142d8582860161122b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061147e57607f821691505b6020821081141561149257611491611437565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006114d282611240565b91506114dd83611240565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561151257611511611498565b5b828201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061155360208361112d565b915061155e8261151d565b602082019050919050565b6000602082019050818103600083015261158281611546565b9050919050565b7f45524332304361707065643a2063617020657863656564656400000000000000600082015250565b60006115bf60198361112d565b91506115ca82611589565b602082019050919050565b600060208201905081810360008301526115ee816115b2565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061165160258361112d565b915061165c826115f5565b604082019050919050565b6000602082019050818103600083015261168081611644565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006116e360268361112d565b91506116ee82611687565b604082019050919050565b60006020820190508181036000830152611712816116d6565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061177560248361112d565b915061178082611719565b604082019050919050565b600060208201905081810360008301526117a481611768565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061180760228361112d565b9150611812826117ab565b604082019050919050565b60006020820190508181036000830152611836816117fa565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000611873601d8361112d565b915061187e8261183d565b602082019050919050565b600060208201905081810360008301526118a281611866565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061190560258361112d565b9150611910826118a9565b604082019050919050565b60006020820190508181036000830152611934816118f8565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061199760238361112d565b91506119a28261193b565b604082019050919050565b600060208201905081810360008301526119c68161198a565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000611a2960268361112d565b9150611a34826119cd565b604082019050919050565b60006020820190508181036000830152611a5881611a1c565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000611a95601f8361112d565b9150611aa082611a5f565b602082019050919050565b60006020820190508181036000830152611ac481611a88565b905091905056fea26469706673582212204063db4e23d7467463365ff406b2ec574bc4a86f32013d80a7ba3b0660a3af4f64736f6c63430008080033
Deployed ByteCode Sourcemap
21898:590:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6910:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9402:242;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8030:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10224:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7872:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22176:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10928:272;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22267:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8201:177;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19845:103;;;:::i;:::-;;19194:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7129:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11703:507;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8584:234;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8881:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20103:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6910:100;6964:13;6997:5;6990:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6910:100;:::o;9402:242::-;9521:4;9543:13;9559:12;:10;:12::i;:::-;9543:28;;9582:32;9591:5;9598:7;9607:6;9582:8;:32::i;:::-;9632:4;9625:11;;;9402:242;;;;:::o;8030:108::-;8091:7;8118:12;;8111:19;;8030:108;:::o;10224:295::-;10355:4;10372:15;10390:12;:10;:12::i;:::-;10372:30;;10413:38;10429:4;10435:7;10444:6;10413:15;:38::i;:::-;10462:27;10472:4;10478:2;10482:6;10462:9;:27::i;:::-;10507:4;10500:11;;;10224:295;;;;;:::o;7872:93::-;7930:5;7955:2;7948:9;;7872:93;:::o;22176:83::-;22220:7;22247:4;22240:11;;22176:83;:::o;10928:272::-;11043:4;11065:13;11081:12;:10;:12::i;:::-;11065:28;;11104:66;11113:5;11120:7;11159:10;11129:11;:18;11141:5;11129:18;;;;;;;;;;;;;;;:27;11148:7;11129:27;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;11104:8;:66::i;:::-;11188:4;11181:11;;;10928:272;;;;:::o;22267:218::-;19425:12;:10;:12::i;:::-;19414:23;;:7;:5;:7::i;:::-;:23;;;19406:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22391:5:::1;:3;:5::i;:::-;22381:6;22359:19;:17;:19::i;:::-;:28;;;;:::i;:::-;:37;;22337:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;22460:17;22466:2;22470:6;22460:5;:17::i;:::-;22267:218:::0;;:::o;8201:177::-;8320:7;8352:9;:18;8362:7;8352:18;;;;;;;;;;;;;;;;8345:25;;8201:177;;;:::o;19845:103::-;19425:12;:10;:12::i;:::-;19414:23;;:7;:5;:7::i;:::-;:23;;;19406:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19910:30:::1;19937:1;19910:18;:30::i;:::-;19845:103::o:0;19194:87::-;19240:7;19267:6;;;;;;;;;;;19260:13;;19194:87;:::o;7129:104::-;7185:13;7218:7;7211:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7129:104;:::o;11703:507::-;11823:4;11845:13;11861:12;:10;:12::i;:::-;11845:28;;11884:24;11911:11;:18;11923:5;11911:18;;;;;;;;;;;;;;;:27;11930:7;11911:27;;;;;;;;;;;;;;;;11884:54;;11991:15;11971:16;:35;;11949:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;12107:60;12116:5;12123:7;12151:15;12132:16;:34;12107:8;:60::i;:::-;12198:4;12191:11;;;;11703:507;;;;:::o;8584:234::-;8699:4;8721:13;8737:12;:10;:12::i;:::-;8721:28;;8760;8770:5;8777:2;8781:6;8760:9;:28::i;:::-;8806:4;8799:11;;;8584:234;;;;:::o;8881:201::-;9015:7;9047:11;:18;9059:5;9047:18;;;;;;;;;;;;;;;:27;9066:7;9047:27;;;;;;;;;;;;;;;;9040:34;;8881:201;;;;:::o;20103:238::-;19425:12;:10;:12::i;:::-;19414:23;;:7;:5;:7::i;:::-;:23;;;19406:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20226:1:::1;20206:22;;:8;:22;;;;20184:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;20305:28;20324:8;20305:18;:28::i;:::-;20103:238:::0;:::o;4521:98::-;4574:7;4601:10;4594:17;;4521:98;:::o;15445:380::-;15598:1;15581:19;;:5;:19;;;;15573:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15679:1;15660:21;;:7;:21;;;;15652:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15763:6;15733:11;:18;15745:5;15733:18;;;;;;;;;;;;;;;:27;15752:7;15733:27;;;;;;;;;;;;;;;:36;;;;15801:7;15785:32;;15794:5;15785:32;;;15810:6;15785:32;;;;;;:::i;:::-;;;;;;;;15445:380;;;:::o;16112:502::-;16247:24;16274:25;16284:5;16291:7;16274:9;:25::i;:::-;16247:52;;16334:17;16314:16;:37;16310:297;;16414:6;16394:16;:26;;16368:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;16529:51;16538:5;16545:7;16573:6;16554:16;:25;16529:8;:51::i;:::-;16310:297;16236:378;16112:502;;;:::o;12689:708::-;12836:1;12820:18;;:4;:18;;;;12812:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12913:1;12899:16;;:2;:16;;;;12891:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;12968:38;12989:4;12995:2;12999:6;12968:20;:38::i;:::-;13019:19;13041:9;:15;13051:4;13041:15;;;;;;;;;;;;;;;;13019:37;;13104:6;13089:11;:21;;13067:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;13244:6;13230:11;:20;13212:9;:15;13222:4;13212:15;;;;;;;;;;;;;;;:38;;;;13289:6;13272:9;:13;13282:2;13272:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;13328:2;13313:26;;13322:4;13313:26;;;13332:6;13313:26;;;;;;:::i;:::-;;;;;;;;13352:37;13372:4;13378:2;13382:6;13352:19;:37::i;:::-;12801:596;12689:708;;;:::o;13684:399::-;13787:1;13768:21;;:7;:21;;;;13760:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;13838:49;13867:1;13871:7;13880:6;13838:20;:49::i;:::-;13916:6;13900:12;;:22;;;;;;;:::i;:::-;;;;;;;;13955:6;13933:9;:18;13943:7;13933:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;13998:7;13977:37;;13994:1;13977:37;;;14007:6;13977:37;;;;;;:::i;:::-;;;;;;;;14027:48;14055:1;14059:7;14068:6;14027:19;:48::i;:::-;13684:399;;:::o;20501:191::-;20575:16;20594:6;;;;;;;;;;;20575:25;;20620:8;20611:6;;:17;;;;;;;;;;;;;;;;;;20675:8;20644:40;;20665:8;20644:40;;;;;;;;;;;;20564:128;20501:191;:::o;17214:125::-;;;;:::o;17943:124::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:118::-;3581:24;3599:5;3581:24;:::i;:::-;3576:3;3569:37;3494:118;;:::o;3618:222::-;3711:4;3749:2;3738:9;3734:18;3726:26;;3762:71;3830:1;3819:9;3815:17;3806:6;3762:71;:::i;:::-;3618:222;;;;:::o;3846:619::-;3923:6;3931;3939;3988:2;3976:9;3967:7;3963:23;3959:32;3956:119;;;3994:79;;:::i;:::-;3956:119;4114:1;4139:53;4184:7;4175:6;4164:9;4160:22;4139:53;:::i;:::-;4129:63;;4085:117;4241:2;4267:53;4312:7;4303:6;4292:9;4288:22;4267:53;:::i;:::-;4257:63;;4212:118;4369:2;4395:53;4440:7;4431:6;4420:9;4416:22;4395:53;:::i;:::-;4385:63;;4340:118;3846:619;;;;;:::o;4471:86::-;4506:7;4546:4;4539:5;4535:16;4524:27;;4471:86;;;:::o;4563:112::-;4646:22;4662:5;4646:22;:::i;:::-;4641:3;4634:35;4563:112;;:::o;4681:214::-;4770:4;4808:2;4797:9;4793:18;4785:26;;4821:67;4885:1;4874:9;4870:17;4861:6;4821:67;:::i;:::-;4681:214;;;;:::o;4901:329::-;4960:6;5009:2;4997:9;4988:7;4984:23;4980:32;4977:119;;;5015:79;;:::i;:::-;4977:119;5135:1;5160:53;5205:7;5196:6;5185:9;5181:22;5160:53;:::i;:::-;5150:63;;5106:117;4901:329;;;;:::o;5236:118::-;5323:24;5341:5;5323:24;:::i;:::-;5318:3;5311:37;5236:118;;:::o;5360:222::-;5453:4;5491:2;5480:9;5476:18;5468:26;;5504:71;5572:1;5561:9;5557:17;5548:6;5504:71;:::i;:::-;5360:222;;;;:::o;5588:474::-;5656:6;5664;5713:2;5701:9;5692:7;5688:23;5684:32;5681:119;;;5719:79;;:::i;:::-;5681:119;5839:1;5864:53;5909:7;5900:6;5889:9;5885:22;5864:53;:::i;:::-;5854:63;;5810:117;5966:2;5992:53;6037:7;6028:6;6017:9;6013:22;5992:53;:::i;:::-;5982:63;;5937:118;5588:474;;;;;:::o;6068:180::-;6116:77;6113:1;6106:88;6213:4;6210:1;6203:15;6237:4;6234:1;6227:15;6254:320;6298:6;6335:1;6329:4;6325:12;6315:22;;6382:1;6376:4;6372:12;6403:18;6393:81;;6459:4;6451:6;6447:17;6437:27;;6393:81;6521:2;6513:6;6510:14;6490:18;6487:38;6484:84;;;6540:18;;:::i;:::-;6484:84;6305:269;6254:320;;;:::o;6580:180::-;6628:77;6625:1;6618:88;6725:4;6722:1;6715:15;6749:4;6746:1;6739:15;6766:305;6806:3;6825:20;6843:1;6825:20;:::i;:::-;6820:25;;6859:20;6877:1;6859:20;:::i;:::-;6854:25;;7013:1;6945:66;6941:74;6938:1;6935:81;6932:107;;;7019:18;;:::i;:::-;6932:107;7063:1;7060;7056:9;7049:16;;6766:305;;;;:::o;7077:182::-;7217:34;7213:1;7205:6;7201:14;7194:58;7077:182;:::o;7265:366::-;7407:3;7428:67;7492:2;7487:3;7428:67;:::i;:::-;7421:74;;7504:93;7593:3;7504:93;:::i;:::-;7622:2;7617:3;7613:12;7606:19;;7265:366;;;:::o;7637:419::-;7803:4;7841:2;7830:9;7826:18;7818:26;;7890:9;7884:4;7880:20;7876:1;7865:9;7861:17;7854:47;7918:131;8044:4;7918:131;:::i;:::-;7910:139;;7637:419;;;:::o;8062:175::-;8202:27;8198:1;8190:6;8186:14;8179:51;8062:175;:::o;8243:366::-;8385:3;8406:67;8470:2;8465:3;8406:67;:::i;:::-;8399:74;;8482:93;8571:3;8482:93;:::i;:::-;8600:2;8595:3;8591:12;8584:19;;8243:366;;;:::o;8615:419::-;8781:4;8819:2;8808:9;8804:18;8796:26;;8868:9;8862:4;8858:20;8854:1;8843:9;8839:17;8832:47;8896:131;9022:4;8896:131;:::i;:::-;8888:139;;8615:419;;;:::o;9040:224::-;9180:34;9176:1;9168:6;9164:14;9157:58;9249:7;9244:2;9236:6;9232:15;9225:32;9040:224;:::o;9270:366::-;9412:3;9433:67;9497:2;9492:3;9433:67;:::i;:::-;9426:74;;9509:93;9598:3;9509:93;:::i;:::-;9627:2;9622:3;9618:12;9611:19;;9270:366;;;:::o;9642:419::-;9808:4;9846:2;9835:9;9831:18;9823:26;;9895:9;9889:4;9885:20;9881:1;9870:9;9866:17;9859:47;9923:131;10049:4;9923:131;:::i;:::-;9915:139;;9642:419;;;:::o;10067:225::-;10207:34;10203:1;10195:6;10191:14;10184:58;10276:8;10271:2;10263:6;10259:15;10252:33;10067:225;:::o;10298:366::-;10440:3;10461:67;10525:2;10520:3;10461:67;:::i;:::-;10454:74;;10537:93;10626:3;10537:93;:::i;:::-;10655:2;10650:3;10646:12;10639:19;;10298:366;;;:::o;10670:419::-;10836:4;10874:2;10863:9;10859:18;10851:26;;10923:9;10917:4;10913:20;10909:1;10898:9;10894:17;10887:47;10951:131;11077:4;10951:131;:::i;:::-;10943:139;;10670:419;;;:::o;11095:223::-;11235:34;11231:1;11223:6;11219:14;11212:58;11304:6;11299:2;11291:6;11287:15;11280:31;11095:223;:::o;11324:366::-;11466:3;11487:67;11551:2;11546:3;11487:67;:::i;:::-;11480:74;;11563:93;11652:3;11563:93;:::i;:::-;11681:2;11676:3;11672:12;11665:19;;11324:366;;;:::o;11696:419::-;11862:4;11900:2;11889:9;11885:18;11877:26;;11949:9;11943:4;11939:20;11935:1;11924:9;11920:17;11913:47;11977:131;12103:4;11977:131;:::i;:::-;11969:139;;11696:419;;;:::o;12121:221::-;12261:34;12257:1;12249:6;12245:14;12238:58;12330:4;12325:2;12317:6;12313:15;12306:29;12121:221;:::o;12348:366::-;12490:3;12511:67;12575:2;12570:3;12511:67;:::i;:::-;12504:74;;12587:93;12676:3;12587:93;:::i;:::-;12705:2;12700:3;12696:12;12689:19;;12348:366;;;:::o;12720:419::-;12886:4;12924:2;12913:9;12909:18;12901:26;;12973:9;12967:4;12963:20;12959:1;12948:9;12944:17;12937:47;13001:131;13127:4;13001:131;:::i;:::-;12993:139;;12720:419;;;:::o;13145:179::-;13285:31;13281:1;13273:6;13269:14;13262:55;13145:179;:::o;13330:366::-;13472:3;13493:67;13557:2;13552:3;13493:67;:::i;:::-;13486:74;;13569:93;13658:3;13569:93;:::i;:::-;13687:2;13682:3;13678:12;13671:19;;13330:366;;;:::o;13702:419::-;13868:4;13906:2;13895:9;13891:18;13883:26;;13955:9;13949:4;13945:20;13941:1;13930:9;13926:17;13919:47;13983:131;14109:4;13983:131;:::i;:::-;13975:139;;13702:419;;;:::o;14127:224::-;14267:34;14263:1;14255:6;14251:14;14244:58;14336:7;14331:2;14323:6;14319:15;14312:32;14127:224;:::o;14357:366::-;14499:3;14520:67;14584:2;14579:3;14520:67;:::i;:::-;14513:74;;14596:93;14685:3;14596:93;:::i;:::-;14714:2;14709:3;14705:12;14698:19;;14357:366;;;:::o;14729:419::-;14895:4;14933:2;14922:9;14918:18;14910:26;;14982:9;14976:4;14972:20;14968:1;14957:9;14953:17;14946:47;15010:131;15136:4;15010:131;:::i;:::-;15002:139;;14729:419;;;:::o;15154:222::-;15294:34;15290:1;15282:6;15278:14;15271:58;15363:5;15358:2;15350:6;15346:15;15339:30;15154:222;:::o;15382:366::-;15524:3;15545:67;15609:2;15604:3;15545:67;:::i;:::-;15538:74;;15621:93;15710:3;15621:93;:::i;:::-;15739:2;15734:3;15730:12;15723:19;;15382:366;;;:::o;15754:419::-;15920:4;15958:2;15947:9;15943:18;15935:26;;16007:9;16001:4;15997:20;15993:1;15982:9;15978:17;15971:47;16035:131;16161:4;16035:131;:::i;:::-;16027:139;;15754:419;;;:::o;16179:225::-;16319:34;16315:1;16307:6;16303:14;16296:58;16388:8;16383:2;16375:6;16371:15;16364:33;16179:225;:::o;16410:366::-;16552:3;16573:67;16637:2;16632:3;16573:67;:::i;:::-;16566:74;;16649:93;16738:3;16649:93;:::i;:::-;16767:2;16762:3;16758:12;16751:19;;16410:366;;;:::o;16782:419::-;16948:4;16986:2;16975:9;16971:18;16963:26;;17035:9;17029:4;17025:20;17021:1;17010:9;17006:17;16999:47;17063:131;17189:4;17063:131;:::i;:::-;17055:139;;16782:419;;;:::o;17207:181::-;17347:33;17343:1;17335:6;17331:14;17324:57;17207:181;:::o;17394:366::-;17536:3;17557:67;17621:2;17616:3;17557:67;:::i;:::-;17550:74;;17633:93;17722:3;17633:93;:::i;:::-;17751:2;17746:3;17742:12;17735:19;;17394:366;;;:::o;17766:419::-;17932:4;17970:2;17959:9;17955:18;17947:26;;18019:9;18013:4;18009:20;18005:1;17994:9;17990:17;17983:47;18047:131;18173:4;18047:131;:::i;:::-;18039:139;;17766:419;;;:::o
Swarm Source
ipfs://4063db4e23d7467463365ff406b2ec574bc4a86f32013d80a7ba3b0660a3af4f