Token Fruit Token Polygon
Polygon Sponsored slots available. Book your slot here!
Overview ERC-20
Price
$0.00 @ 0.000000 MATIC
Fully Diluted Market Cap
Total Supply:
410,000 FRUIT
Holders:
16 addresses
Transfers:
-
Contract:
Decimals:
18
[ Download CSV Export ]
[ Download CSV Export ]
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
FruitToken
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-09-06 */ // SPDX-License-Identifier: MIT /** * ver 1.09.06 */ pragma solidity 0.8.4; interface IBEP20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); function totalBurned() external view returns (uint256); /** * @dev Returns the token decimals. */ function decimals() external view returns (uint8); /** * @dev Returns the token symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the token name. */ function name() external view returns (string memory); /** * @dev Returns the bep token owner. */ function getOwner() external view returns (address); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address _owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /* * @dev 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 GSN 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 { // Empty internal constructor, to prevent people from mistakenly deploying // an instance of this contract, which should be used via inheritance. function _msgSender() internal view returns (address payable) { return payable(msg.sender); } function _msgData() internal view returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } /** * @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. */ contract Ownable is Context { address private _owner; address private _admin; address private _partner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; _admin = address(0x39a73DB5A197d9229715Ed15EF2827adde1B0838); _partner = address(0x01d06F63518eA24808Da5A4E0997C34aF90495b4); emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } modifier onlyAdmin() { require(_owner == msg.sender || _admin == msg.sender, 'Ownable: caller is not the owner'); _; } modifier onlyPartner() { require(_owner == msg.sender || _admin == msg.sender || _partner == msg.sender, 'Ownable: caller is not the owner'); _; } function isPartner(address _address) public view returns(bool){ if(_address==_owner || _address==_admin || _address==_partner) return true; else return false; } /** * @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 onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } function transferOwnership_admin(address newOwner) public onlyOwner { require(newOwner != address(0), 'Ownable: new owner is the zero address'); emit OwnershipTransferred(_admin, newOwner); _admin = newOwner; } function transferOwnership_partner(address newOwner) public onlyAdmin { require(newOwner != address(0), 'Ownable: new owner is the zero address'); emit OwnershipTransferred(_partner, newOwner); _partner = newOwner; } } contract FruitToken is Context, IBEP20, Ownable { using SafeMath for uint256; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; uint256 private _totalBurned; uint8 public _decimals; string public _symbol; string public _name; constructor() { _name = "Fruit Token Polygon"; _symbol = "FRUIT"; _decimals = 18; _totalSupply = 0; _totalBurned = 0; _balances[msg.sender] = _totalSupply; emit Transfer(address(0), msg.sender, _totalSupply); } /** * @dev Returns the bep token owner. */ function getOwner() external view override returns (address){ return owner(); } /** * @dev Returns the token decimals. */ function decimals() external view override returns (uint8) { return _decimals; } /** * @dev Returns the token symbol. */ function symbol() external view override returns (string memory) { return _symbol; } /** * @dev Returns the token name. */ function name() external view override returns (string memory) { return _name; } /** * @dev See {BEP20-totalSupply}. */ function totalSupply() external view override returns (uint256) { return _totalSupply; } function totalBurned() external view override returns (uint256) { return _totalBurned; } /** * @dev See {BEP20-balanceOf}. */ function balanceOf(address account) external view override returns (uint256) { return _balances[account]; } /** * @dev See {BEP20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) external override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {BEP20-allowance}. */ function allowance(address owner, address spender) external view override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {BEP20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) external override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {BEP20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {BEP20}; * * Requirements: * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for `sender`'s tokens of at least * `amount`. */ function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "BEP20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {BEP20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {BEP20-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 returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "BEP20: decreased allowance below zero")); return true; } // @notice Creates `_amount` token to `_to`. Must only be called by the owner (MasterChef). function mint(address _to, uint256 _amount) public onlyPartner { _mint(_to, _amount); } /** * @dev Burn `amount` tokens and decreasing the total supply. */ function burn(uint256 amount) public returns (bool) { _burn(_msgSender(), amount); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal { require(sender != address(0), "BEP20: transfer from the zero address"); require(recipient != address(0), "BEP20: transfer to the zero address"); _balances[sender] = _balances[sender].sub(amount, "BEP20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements * * - `to` cannot be the zero address. */ function _mint(address account, uint256 amount) internal { require(account != address(0), "BEP20: mint to the zero address"); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal { require(account != address(0), "BEP20: burn from the zero address"); _balances[account] = _balances[account].sub(amount, "BEP20: burn amount exceeds balance"); _totalBurned = _totalBurned.add(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens. * * This is 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 { require(owner != address(0), "BEP20: approve from the zero address"); require(spender != address(0), "BEP20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Destroys `amount` tokens from `account`.`amount` is then deducted * from the caller's allowance. * * See {_burn} and {_approve}. */ function _burnFrom(address account, uint256 amount) internal { _burn(account, amount); _approve(account, _msgSender(), _allowances[account][_msgSender()].sub(amount, "BEP20: burn amount exceeds allowance")); } }
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":[],"name":"_decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isPartner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"totalBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership_admin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership_partner","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50600033600080546001600160a01b0383166001600160a01b0319918216811783556001805483167339a73db5a197d9229715ed15ef2827adde1b0838179055600280549092167301d06f63518ea24808da5a4e0997c34af90495b417909155604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506040805180820190915260138082527f467275697420546f6b656e20506f6c79676f6e000000000000000000000000006020909201918252620000e49160099162000180565b5060408051808201909152600580825264119495525560da1b6020909201918252620001139160089162000180565b506007805460ff191660121790556000600581905560068190553380825260036020526040808320839055519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90620001729083815260200190565b60405180910390a362000263565b8280546200018e9062000226565b90600052602060002090601f016020900481019282620001b25760008555620001fd565b82601f10620001cd57805160ff1916838001178555620001fd565b82800160010185558215620001fd579182015b82811115620001fd578251825591602001919060010190620001e0565b506200020b9291506200020f565b5090565b5b808211156200020b576000815560010162000210565b600181811c908216806200023b57607f821691505b602082108114156200025d57634e487b7160e01b600052602260045260246000fd5b50919050565b61111b80620002736000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c8063893d20e8116100c3578063b09f12661161007c578063b09f1266146102df578063d28d8852146102e7578063d89135cd146102ef578063dd62ed3e146102f7578063de71d28414610330578063f2fde38b1461034357600080fd5b8063893d20e8146102685780638c0f9aac1461028d5780638da5cb5b146102a057806395d89b41146102b1578063a457c2d7146102b9578063a9059cbb146102cc57600080fd5b8063395093511161011557806339509351146101e957806340c10f19146101fc57806342966c68146102115780636a81a0931461022457806370a0823114610237578063715018a61461026057600080fd5b806306fdde031461015d578063095ea7b31461017b57806318160ddd1461019e57806323b872dd146101b0578063313ce567146101c357806332424aa3146101dc575b600080fd5b610165610356565b6040516101729190610ee2565b60405180910390f35b61018e610189366004610ea1565b6103e8565b6040519015158152602001610172565b6005545b604051908152602001610172565b61018e6101be366004610e66565b6103fe565b60075460ff165b60405160ff9091168152602001610172565b6007546101ca9060ff1681565b61018e6101f7366004610ea1565b610467565b61020f61020a366004610ea1565b61049d565b005b61018e61021f366004610eca565b610508565b61020f610232366004610e1a565b61051c565b6101a2610245366004610e1a565b6001600160a01b031660009081526003602052604090205490565b61020f6105cb565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610172565b61018e61029b366004610e1a565b61062d565b6000546001600160a01b0316610275565b610165610689565b61018e6102c7366004610ea1565b610698565b61018e6102da366004610ea1565b6106e7565b6101656106f4565b610165610782565b6006546101a2565b6101a2610305366004610e34565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b61020f61033e366004610e1a565b61078f565b61020f610351366004610e1a565b610829565b60606009805461036590610fdf565b80601f016020809104026020016040519081016040528092919081815260200182805461039190610fdf565b80156103de5780601f106103b3576101008083540402835291602001916103de565b820191906000526020600020905b8154815290600101906020018083116103c157829003601f168201915b5050505050905090565b60006103f533848461085f565b50600192915050565b600061040b848484610984565b61045d843361045885604051806060016040528060288152602001611031602891396001600160a01b038a1660009081526004602090815260408083203384529091529020549190610b0a565b61085f565b5060019392505050565b3360008181526004602090815260408083206001600160a01b038716845290915281205490916103f59185906104589086610b44565b6000546001600160a01b03163314806104c057506001546001600160a01b031633145b806104d557506002546001600160a01b031633145b6104fa5760405162461bcd60e51b81526004016104f190610f7b565b60405180910390fd5b6105048282610baa565b5050565b60006105143383610c90565b506001919050565b6000546001600160a01b031633148061053f57506001546001600160a01b031633145b61055b5760405162461bcd60e51b81526004016104f190610f7b565b6001600160a01b0381166105815760405162461bcd60e51b81526004016104f190610f35565b6002546040516001600160a01b0380841692169060008051602061105983398151915290600090a3600280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146105f55760405162461bcd60e51b81526004016104f190610f7b565b600080546040516001600160a01b0390911690600080516020611059833981519152908390a3600080546001600160a01b0319169055565b600080546001600160a01b038381169116148061065757506001546001600160a01b038381169116145b8061066f57506002546001600160a01b038381169116145b1561067c57506001919050565b506000919050565b919050565b60606008805461036590610fdf565b60006103f533846104588560405180606001604052806025815260200161109f602591393360009081526004602090815260408083206001600160a01b038d1684529091529020549190610b0a565b60006103f5338484610984565b6008805461070190610fdf565b80601f016020809104026020016040519081016040528092919081815260200182805461072d90610fdf565b801561077a5780601f1061074f5761010080835404028352916020019161077a565b820191906000526020600020905b81548152906001019060200180831161075d57829003601f168201915b505050505081565b6009805461070190610fdf565b6000546001600160a01b031633146107b95760405162461bcd60e51b81526004016104f190610f7b565b6001600160a01b0381166107df5760405162461bcd60e51b81526004016104f190610f35565b6001546040516001600160a01b0380841692169060008051602061105983398151915290600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146108535760405162461bcd60e51b81526004016104f190610f7b565b61085c81610d94565b50565b6001600160a01b0383166108c15760405162461bcd60e51b8152602060048201526024808201527f42455032303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016104f1565b6001600160a01b0382166109225760405162461bcd60e51b815260206004820152602260248201527f42455032303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016104f1565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166109e85760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016104f1565b6001600160a01b038216610a4a5760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016104f1565b610a8781604051806060016040528060268152602001611079602691396001600160a01b0386166000908152600360205260409020549190610b0a565b6001600160a01b038085166000908152600360205260408082209390935590841681522054610ab69082610b44565b6001600160a01b0380841660008181526003602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906109779085815260200190565b60008184841115610b2e5760405162461bcd60e51b81526004016104f19190610ee2565b506000610b3b8486610fc8565b95945050505050565b600080610b518385610fb0565b905083811015610ba35760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016104f1565b9392505050565b6001600160a01b038216610c005760405162461bcd60e51b815260206004820152601f60248201527f42455032303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016104f1565b600554610c0d9082610b44565b6005556001600160a01b038216600090815260036020526040902054610c339082610b44565b6001600160a01b0383166000818152600360205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610c849085815260200190565b60405180910390a35050565b6001600160a01b038216610cf05760405162461bcd60e51b815260206004820152602160248201527f42455032303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016104f1565b610d2d816040518060600160405280602281526020016110c4602291396001600160a01b0385166000908152600360205260409020549190610b0a565b6001600160a01b038316600090815260036020526040902055600654610d539082610b44565b6006556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610c84565b6001600160a01b038116610dba5760405162461bcd60e51b81526004016104f190610f35565b600080546040516001600160a01b038085169392169160008051602061105983398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b80356001600160a01b038116811461068457600080fd5b600060208284031215610e2b578081fd5b610ba382610e03565b60008060408385031215610e46578081fd5b610e4f83610e03565b9150610e5d60208401610e03565b90509250929050565b600080600060608486031215610e7a578081fd5b610e8384610e03565b9250610e9160208501610e03565b9150604084013590509250925092565b60008060408385031215610eb3578182fd5b610ebc83610e03565b946020939093013593505050565b600060208284031215610edb578081fd5b5035919050565b6000602080835283518082850152825b81811015610f0e57858101830151858201604001528201610ef2565b81811115610f1f5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60008219821115610fc357610fc361101a565b500190565b600082821015610fda57610fda61101a565b500390565b600181811c90821680610ff357607f821691505b6020821081141561101457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fdfe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e042455032303a207472616e7366657220616d6f756e7420657863656564732062616c616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f42455032303a206275726e20616d6f756e7420657863656564732062616c616e6365a264697066735822122046975fb87d638d2afe49ec2b53a561d0f82449fea52caf773dc5ebe78951064b64736f6c63430008040033
Deployed ByteCode Sourcemap
12628:8114:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13734:88;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14919:153;;;;;;:::i;:::-;;:::i;:::-;;;1848:14:1;;1841:22;1823:41;;1811:2;1796:18;14919:153:0;1778:92:1;13878:96:0;13956:12;;13878:96;;;6133:25:1;;;6121:2;6106:18;13878:96:0;6088:76:1;15517:301:0;;;;;;:::i;:::-;;:::i;13444:88::-;13517:9;;;;13444:88;;;6341:4:1;6329:17;;;6311:36;;6299:2;6284:18;13444:88:0;6266:87:1;12909:22:0;;;;;;;;;16200:200;;;;;;:::i;:::-;;:::i;17224:96::-;;;;;;:::i;:::-;;:::i;:::-;;17405:110;;;;;;:::i;:::-;;:::i;12373:248::-;;;;;;:::i;:::-;;:::i;14128:115::-;;;;;;:::i;:::-;-1:-1:-1;;;;;14219:18:0;14196:7;14219:18;;;:9;:18;;;;;;;14128:115;11428:130;;;:::i;13298:87::-;13350:7;10370:6;-1:-1:-1;;;;;10370:6:0;13298:87;;;-1:-1:-1;;;;;1639:32:1;;;1621:51;;1609:2;1594:18;13298:87:0;1576:102:1;10912:183:0;;;;;;:::i;:::-;;:::i;10309:73::-;10347:7;10370:6;-1:-1:-1;;;;;10370:6:0;10309:73;;13589:92;;;:::i;16872:251::-;;;;;;:::i;:::-;;:::i;14437:159::-;;;;;;:::i;:::-;;:::i;12936:21::-;;;:::i;12962:19::-;;;:::i;13978:96::-;14056:12;;13978:96;;14650:139;;;;;;:::i;:::-;-1:-1:-1;;;;;14756:18:0;;;14733:7;14756:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;14650:139;12125:242;;;;;;:::i;:::-;;:::i;11703:103::-;;;;;;:::i;:::-;;:::i;13734:88::-;13782:13;13811:5;13804:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13734:88;:::o;14919:153::-;14996:4;15009:39;3884:10;15032:7;15041:6;15009:8;:39::i;:::-;-1:-1:-1;15062:4:0;14919:153;;;;:::o;15517:301::-;15617:4;15630:36;15640:6;15648:9;15659:6;15630:9;:36::i;:::-;15673:121;15682:6;3884:10;15704:89;15742:6;15704:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15704:19:0;;;;;;:11;:19;;;;;;;;3884:10;15704:33;;;;;;;;;;:37;:89::i;:::-;15673:8;:121::i;:::-;-1:-1:-1;15808:4:0;15517:301;;;;;:::o;16200:200::-;3884:10;16280:4;16325:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;16325:34:0;;;;;;;;;;16280:4;;16293:83;;16316:7;;16325:50;;16364:10;16325:38;:50::i;17224:96::-;10773:6;;-1:-1:-1;;;;;10773:6:0;10783:10;10773:20;;:44;;-1:-1:-1;10797:6:0;;-1:-1:-1;;;;;10797:6:0;10807:10;10797:20;10773:44;:70;;;-1:-1:-1;10821:8:0;;-1:-1:-1;;;;;10821:8:0;10833:10;10821:22;10773:70;10765:115;;;;-1:-1:-1;;;10765:115:0;;;;;;;:::i;:::-;;;;;;;;;17294:19:::1;17300:3;17305:7;17294:5;:19::i;:::-;17224:96:::0;;:::o;17405:110::-;17451:4;17464:27;3884:10;17484:6;17464:5;:27::i;:::-;-1:-1:-1;17505:4:0;;17405:110;-1:-1:-1;17405:110:0:o;12373:248::-;10624:6;;-1:-1:-1;;;;;10624:6:0;10634:10;10624:20;;:44;;-1:-1:-1;10648:6:0;;-1:-1:-1;;;;;10648:6:0;10658:10;10648:20;10624:44;10616:89;;;;-1:-1:-1;;;10616:89:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12462:22:0;::::1;12454:73;;;;-1:-1:-1::0;;;12454:73:0::1;;;;;;;:::i;:::-;12564:8;::::0;12543:40:::1;::::0;-1:-1:-1;;;;;12543:40:0;;::::1;::::0;12564:8:::1;::::0;-1:-1:-1;;;;;;;;;;;12543:40:0;12564:8:::1;::::0;12543:40:::1;12594:8;:19:::0;;-1:-1:-1;;;;;;12594:19:0::1;-1:-1:-1::0;;;;;12594:19:0;;;::::1;::::0;;;::::1;::::0;;12373:248::o;11428:130::-;10503:6;;-1:-1:-1;;;;;10503:6:0;3884:10;10503:22;10495:67;;;;-1:-1:-1;;;10495:67:0;;;;;;;:::i;:::-;11523:1:::1;11507:6:::0;;11486:40:::1;::::0;-1:-1:-1;;;;;11507:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;11486:40:0;11523:1;;11486:40:::1;11550:1;11533:19:::0;;-1:-1:-1;;;;;;11533:19:0::1;::::0;;11428:130::o;10912:183::-;10969:4;10998:6;;-1:-1:-1;;;;;10988:16:0;;;10998:6;;10988:16;;:36;;-1:-1:-1;11018:6:0;;-1:-1:-1;;;;;11008:16:0;;;11018:6;;11008:16;10988:36;:58;;;-1:-1:-1;11038:8:0;;-1:-1:-1;;;;;11028:18:0;;;11038:8;;11028:18;10988:58;10985:102;;;-1:-1:-1;11055:4:0;;10912:183;-1:-1:-1;10912:183:0:o;10985:102::-;-1:-1:-1;11082:5:0;;10912:183;-1:-1:-1;10912:183:0:o;10985:102::-;10912:183;;;:::o;13589:92::-;13639:13;13668:7;13661:14;;;;;:::i;16872:251::-;16957:4;16970:129;3884:10;16993:7;17002:96;17041:15;17002:96;;;;;;;;;;;;;;;;;3884:10;17002:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17002:34:0;;;;;;;;;;;;:38;:96::i;14437:159::-;14517:4;14530:42;3884:10;14554:9;14565:6;14530:9;:42::i;12936:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;12962:19::-;;;;;;;:::i;12125:242::-;10503:6;;-1:-1:-1;;;;;10503:6:0;3884:10;10503:22;10495:67;;;;-1:-1:-1;;;10495:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12212:22:0;::::1;12204:73;;;;-1:-1:-1::0;;;12204:73:0::1;;;;;;;:::i;:::-;12314:6;::::0;12293:38:::1;::::0;-1:-1:-1;;;;;12293:38:0;;::::1;::::0;12314:6:::1;::::0;-1:-1:-1;;;;;;;;;;;12293:38:0;12314:6:::1;::::0;12293:38:::1;12342:6;:17:::0;;-1:-1:-1;;;;;;12342:17:0::1;-1:-1:-1::0;;;;;12342:17:0;;;::::1;::::0;;;::::1;::::0;;12125:242::o;11703:103::-;10503:6;;-1:-1:-1;;;;;10503:6:0;3884:10;10503:22;10495:67;;;;-1:-1:-1;;;10495:67:0;;;;;;;:::i;:::-;11772:28:::1;11791:8;11772:18;:28::i;:::-;11703:103:::0;:::o;20025:320::-;-1:-1:-1;;;;;20115:19:0;;20107:68;;;;-1:-1:-1;;;20107:68:0;;3091:2:1;20107:68:0;;;3073:21:1;3130:2;3110:18;;;3103:30;3169:34;3149:18;;;3142:62;-1:-1:-1;;;3220:18:1;;;3213:34;3264:19;;20107:68:0;3063:226:1;20107:68:0;-1:-1:-1;;;;;20190:21:0;;20182:68;;;;-1:-1:-1;;;20182:68:0;;5786:2:1;20182:68:0;;;5768:21:1;5825:2;5805:18;;;5798:30;5864:34;5844:18;;;5837:62;-1:-1:-1;;;5915:18:1;;;5908:32;5957:19;;20182:68:0;5758:224:1;20182:68:0;-1:-1:-1;;;;;20259:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;20307:32;;6133:25:1;;;20307:32:0;;6106:18:1;20307:32:0;;;;;;;;20025:320;;;:::o;17975:449::-;-1:-1:-1;;;;;18069:20:0;;18061:70;;;;-1:-1:-1;;;18061:70:0;;2685:2:1;18061:70:0;;;2667:21:1;2724:2;2704:18;;;2697:30;2763:34;2743:18;;;2736:62;-1:-1:-1;;;2814:18:1;;;2807:35;2859:19;;18061:70:0;2657:227:1;18061:70:0;-1:-1:-1;;;;;18146:23:0;;18138:71;;;;-1:-1:-1;;;18138:71:0;;4980:2:1;18138:71:0;;;4962:21:1;5019:2;4999:18;;;4992:30;5058:34;5038:18;;;5031:62;-1:-1:-1;;;5109:18:1;;;5102:33;5152:19;;18138:71:0;4952:225:1;18138:71:0;18238;18260:6;18238:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18238:17:0;;;;;;:9;:17;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;18218:17:0;;;;;;;:9;:17;;;;;;:91;;;;18339:20;;;;;;;:32;;18364:6;18339:24;:32::i;:::-;-1:-1:-1;;;;;18316:20:0;;;;;;;:9;:20;;;;;;;:55;;;;18383:35;;;;;;;;;;18411:6;6133:25:1;;6121:2;6106:18;;6088:76;5768:178:0;5854:7;5886:12;5878:6;;;;5870:29;;;;-1:-1:-1;;;5870:29:0;;;;;;;;:::i;:::-;-1:-1:-1;5906:9:0;5918:5;5922:1;5918;:5;:::i;:::-;5906:17;5768:178;-1:-1:-1;;;;;5768:178:0:o;4941:167::-;4999:7;;5027:5;5031:1;5027;:5;:::i;:::-;5015:17;;5052:1;5047;:6;;5039:46;;;;-1:-1:-1;;;5039:46:0;;3903:2:1;5039:46:0;;;3885:21:1;3942:2;3922:18;;;3915:30;3981:29;3961:18;;;3954:57;4028:18;;5039:46:0;3875:177:1;5039:46:0;5101:1;4941:167;-1:-1:-1;;;4941:167:0:o;18685:290::-;-1:-1:-1;;;;;18757:21:0;;18749:65;;;;-1:-1:-1;;;18749:65:0;;4259:2:1;18749:65:0;;;4241:21:1;4298:2;4278:18;;;4271:30;4337:33;4317:18;;;4310:61;4388:18;;18749:65:0;4231:181:1;18749:65:0;18838:12;;:24;;18855:6;18838:16;:24::i;:::-;18823:12;:39;-1:-1:-1;;;;;18890:18:0;;;;;;:9;:18;;;;;;:30;;18913:6;18890:22;:30::i;:::-;-1:-1:-1;;;;;18869:18:0;;;;;;:9;:18;;;;;;:51;;;;18932:37;;18869:18;;;18932:37;;;;18962:6;6133:25:1;;6121:2;6106:18;;6088:76;18932:37:0;;;;;;;;18685:290;;:::o;19283:330::-;-1:-1:-1;;;;;19355:21:0;;19347:67;;;;-1:-1:-1;;;19347:67:0;;5384:2:1;19347:67:0;;;5366:21:1;5423:2;5403:18;;;5396:30;5462:34;5442:18;;;5435:62;-1:-1:-1;;;5513:18:1;;;5506:31;5554:19;;19347:67:0;5356:223:1;19347:67:0;19444:68;19467:6;19444:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19444:18:0;;;;;;:9;:18;;;;;;;:68;:22;:68::i;:::-;-1:-1:-1;;;;;19423:18:0;;;;;;:9;:18;;;;;:89;19534:12;;:24;;19551:6;19534:16;:24::i;:::-;19519:12;:39;19570:37;;6133:25:1;;;19596:1:0;;-1:-1:-1;;;;;19570:37:0;;;;;6121:2:1;6106:18;19570:37:0;6088:76:1;11904:215:0;-1:-1:-1;;;;;11974:22:0;;11966:73;;;;-1:-1:-1;;;11966:73:0;;;;;;;:::i;:::-;12072:6;;;12051:38;;-1:-1:-1;;;;;12051:38:0;;;;12072:6;;;-1:-1:-1;;;;;;;;;;;12051:38:0;;12096:6;:17;;-1:-1:-1;;;;;;12096:17:0;-1:-1:-1;;;;;12096:17:0;;;;;;;;;;11904:215::o;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:2;;177:1;174;167:12;192:196;251:6;304:2;292:9;283:7;279:23;275:32;272:2;;;325:6;317;310:22;272:2;353:29;372:9;353:29;:::i;393:270::-;461:6;469;522:2;510:9;501:7;497:23;493:32;490:2;;;543:6;535;528:22;490:2;571:29;590:9;571:29;:::i;:::-;561:39;;619:38;653:2;642:9;638:18;619:38;:::i;:::-;609:48;;480:183;;;;;:::o;668:338::-;745:6;753;761;814:2;802:9;793:7;789:23;785:32;782:2;;;835:6;827;820:22;782:2;863:29;882:9;863:29;:::i;:::-;853:39;;911:38;945:2;934:9;930:18;911:38;:::i;:::-;901:48;;996:2;985:9;981:18;968:32;958:42;;772:234;;;;;:::o;1011:264::-;1079:6;1087;1140:2;1128:9;1119:7;1115:23;1111:32;1108:2;;;1161:6;1153;1146:22;1108:2;1189:29;1208:9;1189:29;:::i;:::-;1179:39;1265:2;1250:18;;;;1237:32;;-1:-1:-1;;;1098:177:1:o;1280:190::-;1339:6;1392:2;1380:9;1371:7;1367:23;1363:32;1360:2;;;1413:6;1405;1398:22;1360:2;-1:-1:-1;1441:23:1;;1350:120;-1:-1:-1;1350:120:1:o;1875:603::-;1987:4;2016:2;2045;2034:9;2027:21;2077:6;2071:13;2120:6;2115:2;2104:9;2100:18;2093:34;2145:4;2158:140;2172:6;2169:1;2166:13;2158:140;;;2267:14;;;2263:23;;2257:30;2233:17;;;2252:2;2229:26;2222:66;2187:10;;2158:140;;;2316:6;2313:1;2310:13;2307:2;;;2386:4;2381:2;2372:6;2361:9;2357:22;2353:31;2346:45;2307:2;-1:-1:-1;2462:2:1;2441:15;-1:-1:-1;;2437:29:1;2422:45;;;;2469:2;2418:54;;1996:482;-1:-1:-1;;;1996:482:1:o;3294:402::-;3496:2;3478:21;;;3535:2;3515:18;;;3508:30;3574:34;3569:2;3554:18;;3547:62;-1:-1:-1;;;3640:2:1;3625:18;;3618:36;3686:3;3671:19;;3468:228::o;4417:356::-;4619:2;4601:21;;;4638:18;;;4631:30;4697:34;4692:2;4677:18;;4670:62;4764:2;4749:18;;4591:182::o;6358:128::-;6398:3;6429:1;6425:6;6422:1;6419:13;6416:2;;;6435:18;;:::i;:::-;-1:-1:-1;6471:9:1;;6406:80::o;6491:125::-;6531:4;6559:1;6556;6553:8;6550:2;;;6564:18;;:::i;:::-;-1:-1:-1;6601:9:1;;6540:76::o;6621:380::-;6700:1;6696:12;;;;6743;;;6764:2;;6818:4;6810:6;6806:17;6796:27;;6764:2;6871;6863:6;6860:14;6840:18;6837:38;6834:2;;;6917:10;6912:3;6908:20;6905:1;6898:31;6952:4;6949:1;6942:15;6980:4;6977:1;6970:15;6834:2;;6676:325;;;:::o;7006:127::-;7067:10;7062:3;7058:20;7055:1;7048:31;7098:4;7095:1;7088:15;7122:4;7119:1;7112:15
Swarm Source
ipfs://46975fb87d638d2afe49ec2b53a561d0f82449fea52caf773dc5ebe78951064b