ERC-1155
Overview
Max Total Supply
16 KABUTO
Holders
15
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Kabuto
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-04-19 */ // Sources flattened with hardhat v2.9.3 https://hardhat.org // File @openzeppelin/contracts/utils/introspection/[email protected] // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File @openzeppelin/contracts/token/ERC1155/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } // File @openzeppelin/contracts/token/ERC1155/[email protected] // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } // File @openzeppelin/contracts/token/ERC1155/extensions/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol) pragma solidity ^0.8.0; /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/utils/[email protected] // 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/utils/introspection/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File @openzeppelin/contracts/access/[email protected] // 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 contracts/kabuto.sol pragma solidity ^0.8.0; library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function initialize(Counter storage counter, uint256 _value) internal { counter._value = _value; } function reset(Counter storage counter) internal { counter._value = 0; } } /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } } /** * @dev These functions deal with verification of Merkle trees (hash trees), */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = keccak256( abi.encodePacked(computedHash, proofElement) ); } else { // Hash(current element of the proof + current computed hash) computedHash = keccak256( abi.encodePacked(proofElement, computedHash) ); } } // Check if the computed hash (root) is equal to the provided root return computedHash == root; } } interface Shiburai { function balanceOf(address account) external view returns (uint256); } interface Kimono { function onMintingWithKimono(address _samurai) external; function canClaimWithKimono(address _samurai) external view returns (bool); function kimonosMintedFor(address _samurai) external view returns (uint256[] memory); function useKimonoDiscount(address _samurai) external returns (bool); function usedKimonoDiscounts(address _samurai) external view returns (uint256); } interface SHIBURAIVESTKEEPER { function remainingVestedBalance(address _address) external view returns (uint256); } /** * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 * * _Available since v3.1._ */ contract Kabuto is ERC165, IERC1155, IERC1155MetadataURI, Ownable { using Strings for uint256; using Address for address; using Counters for Counters.Counter; uint256 public constant FIRST_GIFTS = 51; uint256 public constant MAX_SUPPLY_PLUS_ONE = 302; bytes32 public merkleRoot = 0x99f984a0a18cb56a8fa7927b3d847c11dbfc1ea22c551fd765827bfc55f98679; Counters.Counter private _tokenIdCounter; Counters.Counter private _giftedIdCounter; address public kimono; address public shiburai = 0x275EB4F541b372EfF2244A444395685C32485368; address public vestKeeper = 0x9f83c3ddd69CCb205eaA2bac013E6851d59E7B43; address[MAX_SUPPLY_PLUS_ONE] internal _owners; // start counting at 1 // Mapping from account to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; mapping(address => bool) public rewardClaimed; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; uint256 public price = 0.3 ether; uint256 public shiburaiDiscountAtAmount = 4000 * 10**9; // Track mints per wallet to restrict to a given number mapping(address => uint256) private _mintsPerWallet; // Mapping owner address to token count mapping(address => uint256) private _balances; // Tracking mint status bool private _paused = true; // Contract name string public name; // Contract symbol string public symbol; /** * @dev See {_setURI}. */ constructor( string memory uri_, string memory name_, string memory symbol_, address _kimono ) { _tokenIdCounter.initialize(FIRST_GIFTS); name = name_; symbol = symbol_; _setURI(uri_); kimono = _kimono; } function setKimono(address _kimono) public onlyOwner { kimono = _kimono; } function setVestKeeper(address _vestKeeper) public onlyOwner { vestKeeper = _vestKeeper; } function claimWithKimono() public returns (uint256) { require(tx.origin == msg.sender, "Kabuto: Samurai only."); require( _tokenIdCounter.current() + 1 < MAX_SUPPLY_PLUS_ONE, "Kabuto: Max supply exceeded" ); Kimono(kimono).onMintingWithKimono(msg.sender); _tokenIdCounter.increment(); uint256 nextTokenId = _tokenIdCounter.current(); _mint(_msgSender(), nextTokenId, 1, ""); return nextTokenId; } function setShiburaiDiscountAtAmount( address _shiburai, uint256 _shiburaiDiscountAtAmount ) external onlyOwner { shiburai = _shiburai; shiburaiDiscountAtAmount = _shiburaiDiscountAtAmount; } function priceToPay(address _samurai, uint256 amount) public view returns (uint256) { if ( Shiburai(shiburai).balanceOf(_samurai) + SHIBURAIVESTKEEPER(vestKeeper).remainingVestedBalance( _samurai ) >= shiburaiDiscountAtAmount ) { return (price / 2) * amount; } else { uint256 _current = _tokenIdCounter.current() - FIRST_GIFTS; uint256 toPay; for (uint256 i; i < amount; i++) { if (_current + i < 25) { toPay += price / 2; } else { uint256 usedKimonoDiscounts; if (Kimono(kimono).kimonosMintedFor(_samurai).length == 0) { usedKimonoDiscounts = 3; } else { usedKimonoDiscounts = Kimono(kimono) .usedKimonoDiscounts(_samurai); } for (uint256 j = i; j < amount; j++) { if (usedKimonoDiscounts + (j - i) < 3) { toPay += price / 2; } else { toPay += price; } } break; } } return toPay; } } function canClaimWithKimono(address _samurai) external view returns (bool) { return Kimono(kimono).canClaimWithKimono(_samurai); } function verifyClaim( address _account, uint256 _amount, bytes32[] calldata _merkleProof ) public view returns (bool) { bytes32 node = keccak256(abi.encodePacked(_amount, _account)); return MerkleProof.verify(_merkleProof, merkleRoot, node); } function claim(uint256 _amount, bytes32[] calldata _merkleProof) public { require(tx.origin == msg.sender, "Kabuto: Samurai only."); require(_paused == false, "Kabuto: Minting is paused"); require( verifyClaim(_msgSender(), _amount, _merkleProof), "Kabuto: Not eligible for a claim" ); require(!rewardClaimed[_msgSender()], "Kabuto: Reward already claimed"); rewardClaimed[_msgSender()] = true; _giftedIdCounter.increment(); uint256 nextTokenId = _giftedIdCounter.current(); require(nextTokenId <= FIRST_GIFTS, "Kabuto: No more rewards"); _mint(_msgSender(), nextTokenId, 1, ""); for (uint256 i = 1; i < _amount; i++) { if (_giftedIdCounter.current() + 1 > FIRST_GIFTS) { break; } else { _giftedIdCounter.increment(); _mint(_msgSender(), _giftedIdCounter.current(), 1, ""); } } } /** * Sets a new mint price for the public mint. */ function setMintPrice(uint256 newPrice) public onlyOwner { price = newPrice; } /** * Returns the paused state for the contract. */ function isPaused() public view returns (bool) { return _paused; } /** * Sets the paused state for the contract. * * Pausing the contract also stops all minting options. */ function setPaused(bool paused_) public onlyOwner { _paused = paused_; } /** * @dev See {_setURI} */ function setUri(string memory newUri) public onlyOwner { _setURI(newUri); } /** * Public Mint */ function mintPublic(uint256 amount) public payable { require(tx.origin == msg.sender, "Katana: Samurai only."); uint256 totalPrice = priceToPay(msg.sender, amount); require(msg.value == totalPrice, "Katana: Wrong mint price"); if (totalPrice < amount * price) { if ( Shiburai(shiburai).balanceOf(msg.sender) + SHIBURAIVESTKEEPER(vestKeeper).remainingVestedBalance( msg.sender ) < shiburaiDiscountAtAmount ) { uint256 until = _tokenIdCounter.current() + amount - FIRST_GIFTS; if (until > 25) { uint256 overDiscount = until - 25; uint256 discountsLeft = 3 - Kimono(kimono).usedKimonoDiscounts(msg.sender); overDiscount = overDiscount < discountsLeft ? overDiscount : discountsLeft; for (uint256 i = 0; i < overDiscount; i++) { Kimono(kimono).useKimonoDiscount(msg.sender); } } } } require( _tokenIdCounter.current() + amount < MAX_SUPPLY_PLUS_ONE, "Katana: Max supply exceeded" ); uint256 nextTokenId; for (uint256 i = 0; i < amount; i++) { _tokenIdCounter.increment(); nextTokenId = _tokenIdCounter.current(); _mint(_msgSender(), nextTokenId, 1, ""); } } /** * Mint Giveaways (only Owner) * * Option for the owner to mint leftover token to be used in giveaways. */ function mintGiveaway(address to_, uint256 amount) public onlyOwner { require(_paused == false, "Kabuto: Minting is paused"); require( _tokenIdCounter.current() < MAX_SUPPLY_PLUS_ONE, "Kabuto: Max supply exceeded" ); uint256 nextTokenId; for (uint256 i = 0; i < amount; i++) { _tokenIdCounter.increment(); nextTokenId = _tokenIdCounter.current(); _mint(to_, nextTokenId, 1, ""); } } /** * Withdraws all retrieved funds into the project team wallets. * * Splits the funds 90/10 for owner/dev. */ function withdraw() public onlyOwner { Address.sendValue(payable(_msgSender()), address(this).balance); } /** * Returns the number of minted tokens. */ function totalSupply() public view returns (uint256) { return _tokenIdCounter.current() + _giftedIdCounter.current() - FIRST_GIFTS; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || interfaceId == type(IERC1155MetadataURI).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the same URI for *all* token types. It relies * on the token type ID substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * Clients calling this function must replace the `\{id\}` substring with the * actual token type ID. */ function uri(uint256 tokenId) public view virtual override returns (string memory) { return string(abi.encodePacked(_uri, tokenId.toString())); } /** * @dev See {IERC1155-balanceOf}. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) public view virtual override returns (uint256) { require( account != address(0), "ERC1155: balance query for the zero address" ); require(id < MAX_SUPPLY_PLUS_ONE, "ERC1155D: id exceeds maximum"); return _owners[id] == account ? 1 : 0; } function erc721BalanceOf(address owner) public view virtual returns (uint256) { require( owner != address(0), "ERC721: address zero is not a valid owner" ); return _balances[owner]; } /** * @dev See {IERC1155-balanceOfBatch}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] memory accounts, uint256[] memory ids) public view virtual override returns (uint256[] memory) { require( accounts.length == ids.length, "ERC1155: accounts and ids length mismatch" ); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } /** * @dev See {IERC1155-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not owner nor approved" ); _safeTransferFrom(from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: transfer caller is not owner nor approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, to, ids, amounts, data); require( _owners[id] == from && amount < 2, "ERC1155: insufficient balance for transfer" ); // The ERC1155 spec allows for transfering zero tokens, but we are still expected // to run the other checks and emit the event. But we don't want an ownership change // in that case if (amount == 1) { _owners[id] = to; _balances[to] = _balances[to] + 1; _balances[from] = _balances[from] - 1; } emit TransferSingle(operator, from, to, id, amount); _afterTokenTransfer(operator, from, to, ids, amounts, data); _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require( ids.length == amounts.length, "ERC1155: ids and amounts length mismatch" ); require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, ids, amounts, data); uint256 transfered; for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; require( _owners[id] == from && amounts[i] < 2, "ERC1155: insufficient balance for transfer" ); if (amounts[i] == 1) { _owners[id] == to; transfered = transfered + 1; } } _balances[to] = _balances[to] + transfered; _balances[from] = _balances[from] - transfered; emit TransferBatch(operator, from, to, ids, amounts); _afterTokenTransfer(operator, from, to, ids, amounts, data); _doSafeBatchTransferAcceptanceCheck( operator, from, to, ids, amounts, data ); } /** * @dev Sets a new URI for all token types, by relying on the token type ID * substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * By this mechanism, any occurrence of the `\{id\}` substring in either the * URI or any of the amounts in the JSON file at said URI will be replaced by * clients with the token type ID. * * For example, the `https://token-cdn-domain/\{id\}.json` URI would be * interpreted by clients as * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` * for token type ID 0x4cce0. * * See {uri}. * * Because these URIs cannot be meaningfully represented by the {URI} event, * this function emits no events. */ function _setURI(string memory newuri) internal virtual { _uri = newuri; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint( address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); require(amount < 2, "ERC1155D: exceeds supply"); require(id < MAX_SUPPLY_PLUS_ONE, "ERC1155D: invalid id"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); // The ERC1155 spec allows for transfering zero tokens, but we are still expected // to run the other checks and emit the event. But we don't want an ownership change // in that case if (amount == 1) { _owners[id] = to; _balances[to] = _balances[to] + 1; } emit TransferSingle(operator, address(0), to, id, amount); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeTransferAcceptanceCheck( operator, address(0), to, id, amount, data ); } /** * @dev Destroys `amount` tokens of token type `id` from `from` * * Requirements: * * - `from` cannot be the zero address. * - `from` must have at least `amount` tokens of token type `id`. */ function _burn( address from, uint256 id, uint256 amount ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); require( _owners[id] == from && amount < 2, "ERC1155: burn amount exceeds balance" ); if (amount == 1) { _owners[id] = address(0); } emit TransferSingle(operator, from, address(0), id, amount); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch( address from, uint256[] memory ids, uint256[] memory amounts ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); require( ids.length == amounts.length, "ERC1155: ids and amounts length mismatch" ); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); for (uint256 i = 0; i < ids.length; i++) { uint256 id = ids[i]; require( _owners[id] == from && amounts[i] < 2, "ERC1155: burn amount exceeds balance" ); if (amounts[i] == 1) { _owners[id] = address(0); } } emit TransferBatch(operator, from, address(0), ids, amounts); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner_, address operator, bool approved ) internal virtual { require( owner_ != operator, "ERC1155: setting approval status for self" ); _operatorApprovals[owner_][operator] = approved; emit ApprovalForAll(owner_, operator, approved); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} /** * @dev Hook that is called after any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155Received( operator, from, id, amount, data ) returns (bytes4 response) { if (response != IERC1155Receiver.onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived( operator, from, ids, amounts, data ) returns (bytes4 response) { if ( response != IERC1155Receiver.onERC1155BatchReceived.selector ) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) internal pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } function getOwnershipRecordOffChain() external view returns (address[MAX_SUPPLY_PLUS_ONE] memory) { return _owners; } function ownerOfERC721Like(uint256 id) external view returns (address) { require(id < _owners.length, "ERC1155D: id exceeds maximum"); address owner_ = _owners[id]; require( owner_ != address(0), "ERC1155D: owner query for nonexistent token" ); return owner_; } function getERC721BalanceOffChain(address _address) external view returns (uint256) { uint256 counter = 0; for (uint256 i; i < _owners.length; i++) { if (_owners[i] == _address) { counter++; } } return counter; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"uri_","type":"string"},{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"address","name":"_kimono","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","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":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[],"name":"FIRST_GIFTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY_PLUS_ONE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_samurai","type":"address"}],"name":"canClaimWithKimono","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimWithKimono","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"erc721BalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getERC721BalanceOffChain","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwnershipRecordOffChain","outputs":[{"internalType":"address[302]","name":"","type":"address[302]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"kimono","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to_","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintGiveaway","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintPublic","outputs":[],"stateMutability":"payable","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":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"ownerOfERC721Like","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_samurai","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"priceToPay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_kimono","type":"address"}],"name":"setKimono","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"paused_","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_shiburai","type":"address"},{"internalType":"uint256","name":"_shiburaiDiscountAtAmount","type":"uint256"}],"name":"setShiburaiDiscountAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newUri","type":"string"}],"name":"setUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_vestKeeper","type":"address"}],"name":"setVestKeeper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shiburai","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"shiburaiDiscountAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"verifyClaim","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vestKeeper","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040527f99f984a0a18cb56a8fa7927b3d847c11dbfc1ea22c551fd765827bfc55f986796001908155600580546001600160a01b031990811673275eb4f541b372eff2244a444395685c324853681790915560068054909116739f83c3ddd69ccb205eaa2bac013e6851d59e7b43179055670429d069189e0000610138556503a3529440006101395561013c805460ff19169091179055348015620000a557600080fd5b5060405162003a9338038062003a93833981016040819052620000c8916200031d565b620000d33362000152565b620000ef60336002620001a260201b62001c181790919060201c565b8251620001059061013d906020860190620001c0565b5081516200011c9061013e906020850190620001c0565b506200012884620001a6565b600480546001600160a01b0319166001600160a01b03929092169190911790555062000423915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b9055565b8051620001bc90610137906020840190620001c0565b5050565b828054620001ce90620003d0565b90600052602060002090601f016020900481019282620001f257600085556200023d565b82601f106200020d57805160ff19168380011785556200023d565b828001600101855582156200023d579182015b828111156200023d57825182559160200191906001019062000220565b506200024b9291506200024f565b5090565b5b808211156200024b576000815560010162000250565b600082601f8301126200027857600080fd5b81516001600160401b03808211156200029557620002956200040d565b604051601f8301601f19908116603f01168101908282118183101715620002c057620002c06200040d565b81604052838152602092508683858801011115620002dd57600080fd5b600091505b83821015620003015785820183015181830184015290820190620002e2565b83821115620003135760008385830101525b9695505050505050565b600080600080608085870312156200033457600080fd5b84516001600160401b03808211156200034c57600080fd5b6200035a8883890162000266565b955060208701519150808211156200037157600080fd5b6200037f8883890162000266565b945060408701519150808211156200039657600080fd5b50620003a58782880162000266565b606087015190935090506001600160a01b0381168114620003c557600080fd5b939692955090935050565b600181811c90821680620003e557607f821691505b602082108114156200040757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b61366080620004336000396000f3fe6080604052600436106101e05760003560e01c8062fdd58e146101e557806301ffc9a71461021857806303ed32241461024857806306fdde031461026a5780630e89341c1461028c57806316c38b3c146102ac57806318160ddd146102cc5780631b60efb0146102e157806329e19704146103015780632eb2c2d6146103325780632eb4a7ab146103525780632f52ebb71461036857806339f81d8b146103885780633ccfd60b146103a85780634e1273f4146103bd57806356e695ed146103ea578063585028031461040c57806363160bf2146104235780636b337e57146104435780636f97a21314610463578063715018a6146104905780637df332e7146104a557806382d5b249146104c55780638da5cb5b146104db5780638e477789146104f057806395d89b411461051057806396df31a5146105255780639b642de114610545578063a035b1fe14610565578063a22cb4651461057c578063a6bd25b91461059c578063aa2945db146105b1578063b187bd26146105d1578063b3f9ea34146105ea578063cde5e0fa1461060a578063d33a65e51461062a578063de181bab1461063f578063e985e9c51461065f578063efd0cbf9146106a9578063f242432a146106bc578063f2fde38b146106dc578063f4a0a528146106fc575b600080fd5b3480156101f157600080fd5b50610205610200366004612c34565b61071c565b6040519081526020015b60405180910390f35b34801561022457600080fd5b50610238610233366004612e62565b6107f2565b604051901515815260200161020f565b34801561025457600080fd5b50610268610263366004612c34565b610842565b005b34801561027657600080fd5b5061027f610898565b60405161020f91906131b6565b34801561029857600080fd5b5061027f6102a7366004612ee4565b610927565b3480156102b857600080fd5b506102686102c7366004612e28565b61095c565b3480156102d857600080fd5b5061020561099f565b3480156102ed57600080fd5b506102686102fc366004612c34565b6109c8565b34801561030d57600080fd5b5061023861031c366004612aa2565b6101366020526000908152604090205460ff1681565b34801561033e57600080fd5b5061026861034d366004612af0565b610a97565b34801561035e57600080fd5b5061020560015481565b34801561037457600080fd5b50610268610383366004612f16565b610b2e565b34801561039457600080fd5b506102056103a3366004612aa2565b610d25565b3480156103b457600080fd5b50610268610d8a565b3480156103c957600080fd5b506103dd6103d8366004612cb7565b610dc5565b60405161020f919061317e565b3480156103f657600080fd5b506103ff610eee565b60405161020f9190613142565b34801561041857600080fd5b506102056101395481565b34801561042f57600080fd5b5061026861043e366004612aa2565b610f35565b34801561044f57600080fd5b5061023861045e366004612aa2565b610f86565b34801561046f57600080fd5b50600454610483906001600160a01b031681565b60405161020f919061308b565b34801561049c57600080fd5b50610268611008565b3480156104b157600080fd5b50600654610483906001600160a01b031681565b3480156104d157600080fd5b5061020561012e81565b3480156104e757600080fd5b50610483611041565b3480156104fc57600080fd5b5061048361050b366004612ee4565b611050565b34801561051c57600080fd5b5061027f6110f7565b34801561053157600080fd5b50600554610483906001600160a01b031681565b34801561055157600080fd5b50610268610560366004612e9c565b611105565b34801561057157600080fd5b506102056101385481565b34801561058857600080fd5b50610268610597366004612bfd565b611140565b3480156105a857600080fd5b50610205603381565b3480156105bd57600080fd5b506102386105cc366004612c5e565b61114f565b3480156105dd57600080fd5b5061013c5460ff16610238565b3480156105f657600080fd5b50610205610605366004612aa2565b6111de565b34801561061657600080fd5b50610268610625366004612aa2565b611265565b34801561063657600080fd5b506102056112b6565b34801561064b57600080fd5b5061020561065a366004612c34565b611395565b34801561066b57600080fd5b5061023861067a366004612abd565b6001600160a01b0391821660009081526101356020908152604080832093909416825291909152205460ff1690565b6102686106b7366004612ee4565b6116c6565b3480156106c857600080fd5b506102686106d7366004612b99565b611abf565b3480156106e857600080fd5b506102686106f7366004612aa2565b611b46565b34801561070857600080fd5b50610268610717366004612ee4565b611be3565b60006001600160a01b03831661078d5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b61012e82106107ae5760405162461bcd60e51b815260040161078490613211565b826001600160a01b031660078361012e81106107cc576107cc613515565b01546001600160a01b0316146107e35760006107e6565b60015b60ff1690505b92915050565b60006001600160e01b03198216636cdb3d1360e11b148061082357506001600160e01b031982166303a24d0760e21b145b806107ec57506301ffc9a760e01b6001600160e01b03198316146107ec565b3361084b611041565b6001600160a01b0316146108715760405162461bcd60e51b81526004016107849061330b565b600580546001600160a01b0319166001600160a01b03939093169290921790915561013955565b61013d80546108a690613453565b80601f01602080910402602001604051908101604052809291908181526020018280546108d290613453565b801561091f5780601f106108f45761010080835404028352916020019161091f565b820191906000526020600020905b81548152906001019060200180831161090257829003601f168201915b505050505081565b606061013761093583611c1c565b604051602001610946929190612fe4565b6040516020818303038152906040529050919050565b33610965611041565b6001600160a01b03161461098b5760405162461bcd60e51b81526004016107849061330b565b61013c805460ff1916911515919091179055565b600060336109ac60035490565b6002546109b991906133c5565b6109c39190613410565b905090565b336109d1611041565b6001600160a01b0316146109f75760405162461bcd60e51b81526004016107849061330b565b61013c5460ff1615610a1b5760405162461bcd60e51b81526004016107849061336f565b61012e610a2760025490565b10610a445760405162461bcd60e51b81526004016107849061328c565b6000805b82811015610a9157610a5e600280546001019055565b6002549150610a7f8483600160405180602001604052806000815250611d21565b80610a89816134ba565b915050610a48565b50505050565b6001600160a01b038516331480610ab35750610ab3853361067a565b610b1a5760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b6064820152608401610784565b610b278585858585611ef2565b5050505050565b323314610b4d5760405162461bcd60e51b815260040161078490613340565b61013c5460ff1615610b715760405162461bcd60e51b81526004016107849061336f565b610b7d3384848461114f565b610bc95760405162461bcd60e51b815260206004820181905260248201527f4b616275746f3a204e6f7420656c696769626c6520666f72206120636c61696d6044820152606401610784565b336000908152610136602052604090205460ff1615610c2a5760405162461bcd60e51b815260206004820152601e60248201527f4b616275746f3a2052657761726420616c726561647920636c61696d656400006044820152606401610784565b33600090815261013660205260409020805460ff1916600190811790915560038054909101908190556033811115610c9e5760405162461bcd60e51b81526020600482015260176024820152764b616275746f3a204e6f206d6f7265207265776172647360481b6044820152606401610784565b610cbb335b82600160405180602001604052806000815250611d21565b60015b84811015610b27576033610cd160035490565b610cdc9060016133c5565b1115610ce757610b27565b610cf5600380546001019055565b610d1333600354600160405180602001604052806000815250611d21565b80610d1d816134ba565b915050610cbe565b600080805b61012e811015610d8357836001600160a01b031660078261012e8110610d5257610d52613515565b01546001600160a01b03161415610d715781610d6d816134ba565b9250505b80610d7b816134ba565b915050610d2a565b5092915050565b33610d93611041565b6001600160a01b031614610db95760405162461bcd60e51b81526004016107849061330b565b610dc3334761213b565b565b60608151835114610e2a5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610784565b600083516001600160401b03811115610e4557610e4561352b565b604051908082528060200260200182016040528015610e6e578160200160208202803683370190505b50905060005b8451811015610ee657610eb9858281518110610e9257610e92613515565b6020026020010151858381518110610eac57610eac613515565b602002602001015161071c565b828281518110610ecb57610ecb613515565b6020908102919091010152610edf816134ba565b9050610e74565b509392505050565b610ef661288c565b604080516125c08101918290529060079061012e9082845b81546001600160a01b03168152600190910190602001808311610f0e575050505050905090565b33610f3e611041565b6001600160a01b031614610f645760405162461bcd60e51b81526004016107849061330b565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b60048054604051636b337e5760e01b81526000926001600160a01b0390921691636b337e5791610fb89186910161308b565b60206040518083038186803b158015610fd057600080fd5b505afa158015610fe4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ec9190612e45565b33611011611041565b6001600160a01b0316146110375760405162461bcd60e51b81526004016107849061330b565b610dc36000612256565b6000546001600160a01b031690565b600061012e82106110735760405162461bcd60e51b815260040161078490613211565b600060078361012e811061108957611089613515565b01546001600160a01b03169050806107ec5760405162461bcd60e51b815260206004820152602b60248201527f45524331313535443a206f776e657220717565727920666f72206e6f6e65786960448201526a39ba32b73a103a37b5b2b760a91b6064820152608401610784565b61013e80546108a690613453565b3361110e611041565b6001600160a01b0316146111345760405162461bcd60e51b81526004016107849061330b565b61113d816122a6565b50565b61114b3383836122ba565b5050565b600080848660405160200161117b92919091825260601b6001600160601b031916602082015260340190565b6040516020818303038152906040528051906020012090506111d484848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600154915084905061239c565b9695505050505050565b60006001600160a01b0382166112485760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610784565b506001600160a01b0316600090815261013b602052604090205490565b3361126e611041565b6001600160a01b0316146112945760405162461bcd60e51b81526004016107849061330b565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b60003233146112d75760405162461bcd60e51b815260040161078490613340565b61012e6112e360025490565b6112ee9060016133c5565b1061130b5760405162461bcd60e51b81526004016107849061328c565b600480546040516306e8531160e51b81526001600160a01b039091169163dd0a62209161133a9133910161308b565b600060405180830381600087803b15801561135457600080fd5b505af1158015611368573d6000803e3d6000fd5b5050505061137a600280546001019055565b600061138560025490565b905061139033610ca3565b919050565b6101395460065460405163a70dade760e01b8152600092916001600160a01b03169063a70dade7906113cb90879060040161308b565b60206040518083038186803b1580156113e357600080fd5b505afa1580156113f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061141b9190612efd565b6005546040516370a0823160e01b81526001600160a01b03909116906370a082319061144b90889060040161308b565b60206040518083038186803b15801561146357600080fd5b505afa158015611477573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149b9190612efd565b6114a591906133c5565b106114cc57816002610138546114bb91906133dd565b6114c591906133f1565b90506107ec565b600060336114d960025490565b6114e39190613410565b90506000805b848110156116bc5760196114fd82856133c5565b10156115245760026101385461151391906133dd565b61151d90836133c5565b91506116aa565b6004805460405163141e783560e21b81526000926001600160a01b0390921691635079e0d491611556918b910161308b565b60006040518083038186803b15801561156e57600080fd5b505afa158015611582573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115aa9190810190612d87565b516115b757506003611639565b6004805460405163532f0e6760e11b81526001600160a01b039091169163a65e1cce916115e6918b910161308b565b60206040518083038186803b1580156115fe57600080fd5b505afa158015611612573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116369190612efd565b90505b815b868110156116a357600361164f8483613410565b61165990846133c5565b10156116805760026101385461166f91906133dd565b61167990856133c5565b9350611691565b6101385461168e90856133c5565b93505b8061169b816134ba565b91505061163b565b50506116bc565b806116b4816134ba565b9150506114e9565b5091506107ec9050565b32331461170d5760405162461bcd60e51b815260206004820152601560248201527425b0ba30b7309d1029b0b6bab930b49037b7363c9760591b6044820152606401610784565b60006117193383611395565b90508034146117655760405162461bcd60e51b81526020600482015260186024820152774b6174616e613a2057726f6e67206d696e7420707269636560401b6044820152606401610784565b6101385461177390836133f1565b811015611a10576101395460065460405163a70dade760e01b81526001600160a01b039091169063a70dade7906117ae90339060040161308b565b60206040518083038186803b1580156117c657600080fd5b505afa1580156117da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117fe9190612efd565b6005546040516370a0823160e01b81526001600160a01b03909116906370a082319061182e90339060040161308b565b60206040518083038186803b15801561184657600080fd5b505afa15801561185a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061187e9190612efd565b61188891906133c5565b1015611a1057600060338361189c60025490565b6118a691906133c5565b6118b09190613410565b90506019811115611a0e5760006118c8601983613410565b6004805460405163532f0e6760e11b81529293506000926001600160a01b039091169163a65e1cce916118fd9133910161308b565b60206040518083038186803b15801561191557600080fd5b505afa158015611929573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194d9190612efd565b611958906003613410565b90508082106119675780611969565b815b915060005b82811015611a0a576004805460405163650c092d60e01b81526001600160a01b039091169163650c092d916119a59133910161308b565b602060405180830381600087803b1580156119bf57600080fd5b505af11580156119d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f79190612e45565b5080611a02816134ba565b91505061196e565b5050505b505b61012e82611a1d60025490565b611a2791906133c5565b10611a725760405162461bcd60e51b815260206004820152601b60248201527a12d85d185b984e8813585e081cdd5c1c1b1e48195e18d959591959602a1b6044820152606401610784565b6000805b83811015610a9157611a8c600280546001019055565b6002549150611aad3383600160405180602001604052806000815250611d21565b80611ab7816134ba565b915050611a76565b6001600160a01b038516331480611adb5750611adb853361067a565b611b395760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b6064820152608401610784565b610b27858585858561244b565b33611b4f611041565b6001600160a01b031614611b755760405162461bcd60e51b81526004016107849061330b565b6001600160a01b038116611bda5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610784565b61113d81612256565b33611bec611041565b6001600160a01b031614611c125760405162461bcd60e51b81526004016107849061330b565b61013855565b9055565b606081611c405750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611c6a5780611c54816134ba565b9150611c639050600a836133dd565b9150611c44565b6000816001600160401b03811115611c8457611c8461352b565b6040519080825280601f01601f191660200182016040528015611cae576020820181803683370190505b5090505b8415611d1957611cc3600183613410565b9150611cd0600a866134d5565b611cdb9060306133c5565b60f81b818381518110611cf057611cf0613515565b60200101906001600160f81b031916908160001a905350611d12600a866133dd565b9450611cb2565b949350505050565b6001600160a01b038416611d815760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610784565b60028210611dcc5760405162461bcd60e51b815260206004820152601860248201527745524331313535443a206578636565647320737570706c7960401b6044820152606401610784565b61012e8310611e145760405162461bcd60e51b8152602060048201526014602482015273115490cc4c4d4d510e881a5b9d985b1a59081a5960621b6044820152606401610784565b336000611e20856125e7565b90506000611e2d856125e7565b90508460011415611ea0578660078761012e8110611e4d57611e4d613515565b0180546001600160a01b0319166001600160a01b039283161790558716600090815261013b6020526040902054611e859060016133c5565b6001600160a01b038816600090815261013b60205260409020555b60408051878152602081018790526001600160a01b03808a16926000929187169160008051602061360b833981519152910160405180910390a4611ee98360008989898961263a565b50505050505050565b8151835114611f545760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b6064820152608401610784565b6001600160a01b038416611f7a5760405162461bcd60e51b815260040161078490613247565b336000805b8551811015612075576000868281518110611f9c57611f9c613515565b60200260200101519050886001600160a01b031660078261012e8110611fc457611fc4613515565b01546001600160a01b0316148015611ff557506002868381518110611feb57611feb613515565b6020026020010151105b6120115760405162461bcd60e51b8152600401610784906132c1565b85828151811061202357612023613515565b60200260200101516001141561206457876001600160a01b031660078261012e811061205157612051613515565b50612061915084905060016133c5565b92505b5061206e816134ba565b9050611f7f565b506001600160a01b038616600090815261013b602052604090205461209b9082906133c5565b6001600160a01b03808816600090815261013b602052604080822093909355908916815220546120cc908290613410565b6001600160a01b03808916600081815261013b60205260409081902093909355915188821692918516907f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb90612125908a908a90613191565b60405180910390a4611ee98288888888886127ac565b8047101561218b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610784565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146121d8576040519150601f19603f3d011682016040523d82523d6000602084013e6121dd565b606091505b50509050806122515760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c20726044820152791958da5c1a595b9d081b585e481a185d99481c995d995c9d195960321b6064820152608401610784565b505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b805161114b906101379060208401906128ac565b816001600160a01b0316836001600160a01b0316141561232e5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610784565b6001600160a01b0383811660008181526101356020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b600081815b85518110156124405760008682815181106123be576123be613515565b6020026020010151905080831161240057604080516020810185905290810182905260600160405160208183030381529060405280519060200120925061242d565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b5080612438816134ba565b9150506123a1565b509092149392505050565b6001600160a01b0384166124715760405162461bcd60e51b815260040161078490613247565b33600061247d856125e7565b9050600061248a856125e7565b9050876001600160a01b031660078761012e81106124aa576124aa613515565b01546001600160a01b03161480156124c25750600285105b6124de5760405162461bcd60e51b8152600401610784906132c1565b8460011415612581578660078761012e81106124fc576124fc613515565b0180546001600160a01b0319166001600160a01b039283161790558716600090815261013b60205260409020546125349060016133c5565b6001600160a01b03808916600090815261013b602052604080822093909355908a168152205461256690600190613410565b6001600160a01b038916600090815261013b60205260409020555b866001600160a01b0316886001600160a01b0316846001600160a01b031660008051602061360b83398151915289896040516125c7929190918252602082015260400190565b60405180910390a46125dd83898989898961263a565b5050505050505050565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061262157612621613515565b602090810291909101015292915050565b505050505050565b61264c846001600160a01b031661287d565b156126325760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061268590899089908890889088906004016130fd565b602060405180830381600087803b15801561269f57600080fd5b505af19250505080156126cf575060408051601f3d908101601f191682019092526126cc91810190612e7f565b60015b61277c576126db613541565b806308c379a0141561271557506126f061355d565b806126fb5750612717565b8060405162461bcd60e51b815260040161078491906131b6565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610784565b6001600160e01b0319811663f23a6e6160e01b14611ee95760405162461bcd60e51b8152600401610784906131c9565b6127be846001600160a01b031661287d565b156126325760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906127f7908990899088908890889060040161309f565b602060405180830381600087803b15801561281157600080fd5b505af1925050508015612841575060408051601f3d908101601f1916820190925261283e91810190612e7f565b60015b61284d576126db613541565b6001600160e01b0319811663bc197c8160e01b14611ee95760405162461bcd60e51b8152600401610784906131c9565b6001600160a01b03163b151590565b604051806125c0016040528061012e906020820280368337509192915050565b8280546128b890613453565b90600052602060002090601f0160209004810192826128da5760008555612920565b82601f106128f357805160ff1916838001178555612920565b82800160010185558215612920579182015b82811115612920578251825591602001919060010190612905565b5061292c929150612930565b5090565b5b8082111561292c5760008155600101612931565b60006001600160401b0383111561295e5761295e61352b565b604051612975601f8501601f19166020018261348e565b80915083815284848401111561298a57600080fd5b83836020830137600060208583010152509392505050565b80356001600160a01b038116811461139057600080fd5b60008083601f8401126129cb57600080fd5b5081356001600160401b038111156129e257600080fd5b6020830191508360208260051b85010111156129fd57600080fd5b9250929050565b600082601f830112612a1557600080fd5b81356020612a22826133a2565b604051612a2f828261348e565b8381528281019150858301600585901b87018401881015612a4f57600080fd5b60005b85811015612a6e57813584529284019290840190600101612a52565b5090979650505050505050565b600082601f830112612a8c57600080fd5b612a9b83833560208501612945565b9392505050565b600060208284031215612ab457600080fd5b612a9b826129a2565b60008060408385031215612ad057600080fd5b612ad9836129a2565b9150612ae7602084016129a2565b90509250929050565b600080600080600060a08688031215612b0857600080fd5b612b11866129a2565b9450612b1f602087016129a2565b935060408601356001600160401b0380821115612b3b57600080fd5b612b4789838a01612a04565b94506060880135915080821115612b5d57600080fd5b612b6989838a01612a04565b93506080880135915080821115612b7f57600080fd5b50612b8c88828901612a7b565b9150509295509295909350565b600080600080600060a08688031215612bb157600080fd5b612bba866129a2565b9450612bc8602087016129a2565b9350604086013592506060860135915060808601356001600160401b03811115612bf157600080fd5b612b8c88828901612a7b565b60008060408385031215612c1057600080fd5b612c19836129a2565b91506020830135612c29816135e6565b809150509250929050565b60008060408385031215612c4757600080fd5b612c50836129a2565b946020939093013593505050565b60008060008060608587031215612c7457600080fd5b612c7d856129a2565b93506020850135925060408501356001600160401b03811115612c9f57600080fd5b612cab878288016129b9565b95989497509550505050565b60008060408385031215612cca57600080fd5b82356001600160401b0380821115612ce157600080fd5b818501915085601f830112612cf557600080fd5b81356020612d02826133a2565b604051612d0f828261348e565b8381528281019150858301600585901b870184018b1015612d2f57600080fd5b600096505b84871015612d5957612d45816129a2565b835260019690960195918301918301612d34565b5096505086013592505080821115612d7057600080fd5b50612d7d85828601612a04565b9150509250929050565b60006020808385031215612d9a57600080fd5b82516001600160401b03811115612db057600080fd5b8301601f81018513612dc157600080fd5b8051612dcc816133a2565b604051612dd9828261348e565b8281528481019150838501600584901b85018601891015612df957600080fd5b600094505b83851015612e1c578051835260019490940193918501918501612dfe565b50979650505050505050565b600060208284031215612e3a57600080fd5b8135612a9b816135e6565b600060208284031215612e5757600080fd5b8151612a9b816135e6565b600060208284031215612e7457600080fd5b8135612a9b816135f4565b600060208284031215612e9157600080fd5b8151612a9b816135f4565b600060208284031215612eae57600080fd5b81356001600160401b03811115612ec457600080fd5b8201601f81018413612ed557600080fd5b611d1984823560208401612945565b600060208284031215612ef657600080fd5b5035919050565b600060208284031215612f0f57600080fd5b5051919050565b600080600060408486031215612f2b57600080fd5b8335925060208401356001600160401b03811115612f4857600080fd5b612f54868287016129b9565b9497909650939450505050565b600081518084526020808501945080840160005b83811015612f9157815187529582019590820190600101612f75565b509495945050505050565b60008151808452612fb4816020860160208601613427565b601f01601f19169290920160200192915050565b60008151612fda818560208601613427565b9290920192915050565b600080845481600182811c91508083168061300057607f831692505b602080841082141561302057634e487b7160e01b86526022600452602486fd5b818015613034576001811461304557613072565b60ff19861689528489019650613072565b60008b81526020902060005b8681101561306a5781548b820152908501908301613051565b505084890196505b5050505050506130828185612fc8565b95945050505050565b6001600160a01b0391909116815260200190565b6001600160a01b0386811682528516602082015260a0604082018190526000906130cb90830186612f61565b82810360608401526130dd8186612f61565b905082810360808401526130f18185612f9c565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061313790830184612f9c565b979650505050505050565b6125c08101818360005b61012e8110156131755781516001600160a01b031683526020928301929091019060010161314c565b50505092915050565b602081526000612a9b6020830184612f61565b6040815260006131a46040830185612f61565b82810360208401526130828185612f61565b602081526000612a9b6020830184612f9c565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6020808252601c908201527b45524331313535443a2069642065786365656473206d6178696d756d60201b604082015260600190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252601b908201527a12d8589d5d1bce8813585e081cdd5c1c1b1e48195e18d959591959602a1b604082015260600190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526015908201527425b0b13aba379d1029b0b6bab930b49037b7363c9760591b604082015260600190565b60208082526019908201527812d8589d5d1bce88135a5b9d1a5b99c81a5cc81c185d5cd959603a1b604082015260600190565b60006001600160401b038211156133bb576133bb61352b565b5060051b60200190565b600082198211156133d8576133d86134e9565b500190565b6000826133ec576133ec6134ff565b500490565b600081600019048311821515161561340b5761340b6134e9565b500290565b600082821015613422576134226134e9565b500390565b60005b8381101561344257818101518382015260200161342a565b83811115610a915750506000910152565b600181811c9082168061346757607f821691505b6020821081141561348857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f191681016001600160401b03811182821017156134b3576134b361352b565b6040525050565b60006000198214156134ce576134ce6134e9565b5060010190565b6000826134e4576134e46134ff565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d111561355a5760046000803e5060005160e01c5b90565b600060443d101561356b5790565b6040516003193d81016004833e81513d6001600160401b03808311602484018310171561359a57505050505090565b82850191508151818111156135b25750505050505090565b843d87010160208285010111156135cc5750505050505090565b6135db6020828601018761348e565b509095945050505050565b801515811461113d57600080fd5b6001600160e01b03198116811461113d57600080fdfec3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62a26469706673582212205b7de95a9495bdca8649ed5cd31233e00dc80ad2cece72aab1004ff6e5934eac64736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000026be1b45564ab3b1f20f421bb5fb5899f7c802c3000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d6362733872636a366b677146683578734a645657367461775746477077573448374432506d756451645039342f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f5368696275726169204b616275746f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064b414255544f0000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106101e05760003560e01c8062fdd58e146101e557806301ffc9a71461021857806303ed32241461024857806306fdde031461026a5780630e89341c1461028c57806316c38b3c146102ac57806318160ddd146102cc5780631b60efb0146102e157806329e19704146103015780632eb2c2d6146103325780632eb4a7ab146103525780632f52ebb71461036857806339f81d8b146103885780633ccfd60b146103a85780634e1273f4146103bd57806356e695ed146103ea578063585028031461040c57806363160bf2146104235780636b337e57146104435780636f97a21314610463578063715018a6146104905780637df332e7146104a557806382d5b249146104c55780638da5cb5b146104db5780638e477789146104f057806395d89b411461051057806396df31a5146105255780639b642de114610545578063a035b1fe14610565578063a22cb4651461057c578063a6bd25b91461059c578063aa2945db146105b1578063b187bd26146105d1578063b3f9ea34146105ea578063cde5e0fa1461060a578063d33a65e51461062a578063de181bab1461063f578063e985e9c51461065f578063efd0cbf9146106a9578063f242432a146106bc578063f2fde38b146106dc578063f4a0a528146106fc575b600080fd5b3480156101f157600080fd5b50610205610200366004612c34565b61071c565b6040519081526020015b60405180910390f35b34801561022457600080fd5b50610238610233366004612e62565b6107f2565b604051901515815260200161020f565b34801561025457600080fd5b50610268610263366004612c34565b610842565b005b34801561027657600080fd5b5061027f610898565b60405161020f91906131b6565b34801561029857600080fd5b5061027f6102a7366004612ee4565b610927565b3480156102b857600080fd5b506102686102c7366004612e28565b61095c565b3480156102d857600080fd5b5061020561099f565b3480156102ed57600080fd5b506102686102fc366004612c34565b6109c8565b34801561030d57600080fd5b5061023861031c366004612aa2565b6101366020526000908152604090205460ff1681565b34801561033e57600080fd5b5061026861034d366004612af0565b610a97565b34801561035e57600080fd5b5061020560015481565b34801561037457600080fd5b50610268610383366004612f16565b610b2e565b34801561039457600080fd5b506102056103a3366004612aa2565b610d25565b3480156103b457600080fd5b50610268610d8a565b3480156103c957600080fd5b506103dd6103d8366004612cb7565b610dc5565b60405161020f919061317e565b3480156103f657600080fd5b506103ff610eee565b60405161020f9190613142565b34801561041857600080fd5b506102056101395481565b34801561042f57600080fd5b5061026861043e366004612aa2565b610f35565b34801561044f57600080fd5b5061023861045e366004612aa2565b610f86565b34801561046f57600080fd5b50600454610483906001600160a01b031681565b60405161020f919061308b565b34801561049c57600080fd5b50610268611008565b3480156104b157600080fd5b50600654610483906001600160a01b031681565b3480156104d157600080fd5b5061020561012e81565b3480156104e757600080fd5b50610483611041565b3480156104fc57600080fd5b5061048361050b366004612ee4565b611050565b34801561051c57600080fd5b5061027f6110f7565b34801561053157600080fd5b50600554610483906001600160a01b031681565b34801561055157600080fd5b50610268610560366004612e9c565b611105565b34801561057157600080fd5b506102056101385481565b34801561058857600080fd5b50610268610597366004612bfd565b611140565b3480156105a857600080fd5b50610205603381565b3480156105bd57600080fd5b506102386105cc366004612c5e565b61114f565b3480156105dd57600080fd5b5061013c5460ff16610238565b3480156105f657600080fd5b50610205610605366004612aa2565b6111de565b34801561061657600080fd5b50610268610625366004612aa2565b611265565b34801561063657600080fd5b506102056112b6565b34801561064b57600080fd5b5061020561065a366004612c34565b611395565b34801561066b57600080fd5b5061023861067a366004612abd565b6001600160a01b0391821660009081526101356020908152604080832093909416825291909152205460ff1690565b6102686106b7366004612ee4565b6116c6565b3480156106c857600080fd5b506102686106d7366004612b99565b611abf565b3480156106e857600080fd5b506102686106f7366004612aa2565b611b46565b34801561070857600080fd5b50610268610717366004612ee4565b611be3565b60006001600160a01b03831661078d5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084015b60405180910390fd5b61012e82106107ae5760405162461bcd60e51b815260040161078490613211565b826001600160a01b031660078361012e81106107cc576107cc613515565b01546001600160a01b0316146107e35760006107e6565b60015b60ff1690505b92915050565b60006001600160e01b03198216636cdb3d1360e11b148061082357506001600160e01b031982166303a24d0760e21b145b806107ec57506301ffc9a760e01b6001600160e01b03198316146107ec565b3361084b611041565b6001600160a01b0316146108715760405162461bcd60e51b81526004016107849061330b565b600580546001600160a01b0319166001600160a01b03939093169290921790915561013955565b61013d80546108a690613453565b80601f01602080910402602001604051908101604052809291908181526020018280546108d290613453565b801561091f5780601f106108f45761010080835404028352916020019161091f565b820191906000526020600020905b81548152906001019060200180831161090257829003601f168201915b505050505081565b606061013761093583611c1c565b604051602001610946929190612fe4565b6040516020818303038152906040529050919050565b33610965611041565b6001600160a01b03161461098b5760405162461bcd60e51b81526004016107849061330b565b61013c805460ff1916911515919091179055565b600060336109ac60035490565b6002546109b991906133c5565b6109c39190613410565b905090565b336109d1611041565b6001600160a01b0316146109f75760405162461bcd60e51b81526004016107849061330b565b61013c5460ff1615610a1b5760405162461bcd60e51b81526004016107849061336f565b61012e610a2760025490565b10610a445760405162461bcd60e51b81526004016107849061328c565b6000805b82811015610a9157610a5e600280546001019055565b6002549150610a7f8483600160405180602001604052806000815250611d21565b80610a89816134ba565b915050610a48565b50505050565b6001600160a01b038516331480610ab35750610ab3853361067a565b610b1a5760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b6064820152608401610784565b610b278585858585611ef2565b5050505050565b323314610b4d5760405162461bcd60e51b815260040161078490613340565b61013c5460ff1615610b715760405162461bcd60e51b81526004016107849061336f565b610b7d3384848461114f565b610bc95760405162461bcd60e51b815260206004820181905260248201527f4b616275746f3a204e6f7420656c696769626c6520666f72206120636c61696d6044820152606401610784565b336000908152610136602052604090205460ff1615610c2a5760405162461bcd60e51b815260206004820152601e60248201527f4b616275746f3a2052657761726420616c726561647920636c61696d656400006044820152606401610784565b33600090815261013660205260409020805460ff1916600190811790915560038054909101908190556033811115610c9e5760405162461bcd60e51b81526020600482015260176024820152764b616275746f3a204e6f206d6f7265207265776172647360481b6044820152606401610784565b610cbb335b82600160405180602001604052806000815250611d21565b60015b84811015610b27576033610cd160035490565b610cdc9060016133c5565b1115610ce757610b27565b610cf5600380546001019055565b610d1333600354600160405180602001604052806000815250611d21565b80610d1d816134ba565b915050610cbe565b600080805b61012e811015610d8357836001600160a01b031660078261012e8110610d5257610d52613515565b01546001600160a01b03161415610d715781610d6d816134ba565b9250505b80610d7b816134ba565b915050610d2a565b5092915050565b33610d93611041565b6001600160a01b031614610db95760405162461bcd60e51b81526004016107849061330b565b610dc3334761213b565b565b60608151835114610e2a5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610784565b600083516001600160401b03811115610e4557610e4561352b565b604051908082528060200260200182016040528015610e6e578160200160208202803683370190505b50905060005b8451811015610ee657610eb9858281518110610e9257610e92613515565b6020026020010151858381518110610eac57610eac613515565b602002602001015161071c565b828281518110610ecb57610ecb613515565b6020908102919091010152610edf816134ba565b9050610e74565b509392505050565b610ef661288c565b604080516125c08101918290529060079061012e9082845b81546001600160a01b03168152600190910190602001808311610f0e575050505050905090565b33610f3e611041565b6001600160a01b031614610f645760405162461bcd60e51b81526004016107849061330b565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b60048054604051636b337e5760e01b81526000926001600160a01b0390921691636b337e5791610fb89186910161308b565b60206040518083038186803b158015610fd057600080fd5b505afa158015610fe4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ec9190612e45565b33611011611041565b6001600160a01b0316146110375760405162461bcd60e51b81526004016107849061330b565b610dc36000612256565b6000546001600160a01b031690565b600061012e82106110735760405162461bcd60e51b815260040161078490613211565b600060078361012e811061108957611089613515565b01546001600160a01b03169050806107ec5760405162461bcd60e51b815260206004820152602b60248201527f45524331313535443a206f776e657220717565727920666f72206e6f6e65786960448201526a39ba32b73a103a37b5b2b760a91b6064820152608401610784565b61013e80546108a690613453565b3361110e611041565b6001600160a01b0316146111345760405162461bcd60e51b81526004016107849061330b565b61113d816122a6565b50565b61114b3383836122ba565b5050565b600080848660405160200161117b92919091825260601b6001600160601b031916602082015260340190565b6040516020818303038152906040528051906020012090506111d484848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600154915084905061239c565b9695505050505050565b60006001600160a01b0382166112485760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610784565b506001600160a01b0316600090815261013b602052604090205490565b3361126e611041565b6001600160a01b0316146112945760405162461bcd60e51b81526004016107849061330b565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b60003233146112d75760405162461bcd60e51b815260040161078490613340565b61012e6112e360025490565b6112ee9060016133c5565b1061130b5760405162461bcd60e51b81526004016107849061328c565b600480546040516306e8531160e51b81526001600160a01b039091169163dd0a62209161133a9133910161308b565b600060405180830381600087803b15801561135457600080fd5b505af1158015611368573d6000803e3d6000fd5b5050505061137a600280546001019055565b600061138560025490565b905061139033610ca3565b919050565b6101395460065460405163a70dade760e01b8152600092916001600160a01b03169063a70dade7906113cb90879060040161308b565b60206040518083038186803b1580156113e357600080fd5b505afa1580156113f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061141b9190612efd565b6005546040516370a0823160e01b81526001600160a01b03909116906370a082319061144b90889060040161308b565b60206040518083038186803b15801561146357600080fd5b505afa158015611477573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149b9190612efd565b6114a591906133c5565b106114cc57816002610138546114bb91906133dd565b6114c591906133f1565b90506107ec565b600060336114d960025490565b6114e39190613410565b90506000805b848110156116bc5760196114fd82856133c5565b10156115245760026101385461151391906133dd565b61151d90836133c5565b91506116aa565b6004805460405163141e783560e21b81526000926001600160a01b0390921691635079e0d491611556918b910161308b565b60006040518083038186803b15801561156e57600080fd5b505afa158015611582573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115aa9190810190612d87565b516115b757506003611639565b6004805460405163532f0e6760e11b81526001600160a01b039091169163a65e1cce916115e6918b910161308b565b60206040518083038186803b1580156115fe57600080fd5b505afa158015611612573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116369190612efd565b90505b815b868110156116a357600361164f8483613410565b61165990846133c5565b10156116805760026101385461166f91906133dd565b61167990856133c5565b9350611691565b6101385461168e90856133c5565b93505b8061169b816134ba565b91505061163b565b50506116bc565b806116b4816134ba565b9150506114e9565b5091506107ec9050565b32331461170d5760405162461bcd60e51b815260206004820152601560248201527425b0ba30b7309d1029b0b6bab930b49037b7363c9760591b6044820152606401610784565b60006117193383611395565b90508034146117655760405162461bcd60e51b81526020600482015260186024820152774b6174616e613a2057726f6e67206d696e7420707269636560401b6044820152606401610784565b6101385461177390836133f1565b811015611a10576101395460065460405163a70dade760e01b81526001600160a01b039091169063a70dade7906117ae90339060040161308b565b60206040518083038186803b1580156117c657600080fd5b505afa1580156117da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117fe9190612efd565b6005546040516370a0823160e01b81526001600160a01b03909116906370a082319061182e90339060040161308b565b60206040518083038186803b15801561184657600080fd5b505afa15801561185a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061187e9190612efd565b61188891906133c5565b1015611a1057600060338361189c60025490565b6118a691906133c5565b6118b09190613410565b90506019811115611a0e5760006118c8601983613410565b6004805460405163532f0e6760e11b81529293506000926001600160a01b039091169163a65e1cce916118fd9133910161308b565b60206040518083038186803b15801561191557600080fd5b505afa158015611929573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194d9190612efd565b611958906003613410565b90508082106119675780611969565b815b915060005b82811015611a0a576004805460405163650c092d60e01b81526001600160a01b039091169163650c092d916119a59133910161308b565b602060405180830381600087803b1580156119bf57600080fd5b505af11580156119d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f79190612e45565b5080611a02816134ba565b91505061196e565b5050505b505b61012e82611a1d60025490565b611a2791906133c5565b10611a725760405162461bcd60e51b815260206004820152601b60248201527a12d85d185b984e8813585e081cdd5c1c1b1e48195e18d959591959602a1b6044820152606401610784565b6000805b83811015610a9157611a8c600280546001019055565b6002549150611aad3383600160405180602001604052806000815250611d21565b80611ab7816134ba565b915050611a76565b6001600160a01b038516331480611adb5750611adb853361067a565b611b395760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b6064820152608401610784565b610b27858585858561244b565b33611b4f611041565b6001600160a01b031614611b755760405162461bcd60e51b81526004016107849061330b565b6001600160a01b038116611bda5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610784565b61113d81612256565b33611bec611041565b6001600160a01b031614611c125760405162461bcd60e51b81526004016107849061330b565b61013855565b9055565b606081611c405750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611c6a5780611c54816134ba565b9150611c639050600a836133dd565b9150611c44565b6000816001600160401b03811115611c8457611c8461352b565b6040519080825280601f01601f191660200182016040528015611cae576020820181803683370190505b5090505b8415611d1957611cc3600183613410565b9150611cd0600a866134d5565b611cdb9060306133c5565b60f81b818381518110611cf057611cf0613515565b60200101906001600160f81b031916908160001a905350611d12600a866133dd565b9450611cb2565b949350505050565b6001600160a01b038416611d815760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610784565b60028210611dcc5760405162461bcd60e51b815260206004820152601860248201527745524331313535443a206578636565647320737570706c7960401b6044820152606401610784565b61012e8310611e145760405162461bcd60e51b8152602060048201526014602482015273115490cc4c4d4d510e881a5b9d985b1a59081a5960621b6044820152606401610784565b336000611e20856125e7565b90506000611e2d856125e7565b90508460011415611ea0578660078761012e8110611e4d57611e4d613515565b0180546001600160a01b0319166001600160a01b039283161790558716600090815261013b6020526040902054611e859060016133c5565b6001600160a01b038816600090815261013b60205260409020555b60408051878152602081018790526001600160a01b03808a16926000929187169160008051602061360b833981519152910160405180910390a4611ee98360008989898961263a565b50505050505050565b8151835114611f545760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b6064820152608401610784565b6001600160a01b038416611f7a5760405162461bcd60e51b815260040161078490613247565b336000805b8551811015612075576000868281518110611f9c57611f9c613515565b60200260200101519050886001600160a01b031660078261012e8110611fc457611fc4613515565b01546001600160a01b0316148015611ff557506002868381518110611feb57611feb613515565b6020026020010151105b6120115760405162461bcd60e51b8152600401610784906132c1565b85828151811061202357612023613515565b60200260200101516001141561206457876001600160a01b031660078261012e811061205157612051613515565b50612061915084905060016133c5565b92505b5061206e816134ba565b9050611f7f565b506001600160a01b038616600090815261013b602052604090205461209b9082906133c5565b6001600160a01b03808816600090815261013b602052604080822093909355908916815220546120cc908290613410565b6001600160a01b03808916600081815261013b60205260409081902093909355915188821692918516907f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb90612125908a908a90613191565b60405180910390a4611ee98288888888886127ac565b8047101561218b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610784565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146121d8576040519150601f19603f3d011682016040523d82523d6000602084013e6121dd565b606091505b50509050806122515760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c20726044820152791958da5c1a595b9d081b585e481a185d99481c995d995c9d195960321b6064820152608401610784565b505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b805161114b906101379060208401906128ac565b816001600160a01b0316836001600160a01b0316141561232e5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610784565b6001600160a01b0383811660008181526101356020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b600081815b85518110156124405760008682815181106123be576123be613515565b6020026020010151905080831161240057604080516020810185905290810182905260600160405160208183030381529060405280519060200120925061242d565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b5080612438816134ba565b9150506123a1565b509092149392505050565b6001600160a01b0384166124715760405162461bcd60e51b815260040161078490613247565b33600061247d856125e7565b9050600061248a856125e7565b9050876001600160a01b031660078761012e81106124aa576124aa613515565b01546001600160a01b03161480156124c25750600285105b6124de5760405162461bcd60e51b8152600401610784906132c1565b8460011415612581578660078761012e81106124fc576124fc613515565b0180546001600160a01b0319166001600160a01b039283161790558716600090815261013b60205260409020546125349060016133c5565b6001600160a01b03808916600090815261013b602052604080822093909355908a168152205461256690600190613410565b6001600160a01b038916600090815261013b60205260409020555b866001600160a01b0316886001600160a01b0316846001600160a01b031660008051602061360b83398151915289896040516125c7929190918252602082015260400190565b60405180910390a46125dd83898989898961263a565b5050505050505050565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061262157612621613515565b602090810291909101015292915050565b505050505050565b61264c846001600160a01b031661287d565b156126325760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061268590899089908890889088906004016130fd565b602060405180830381600087803b15801561269f57600080fd5b505af19250505080156126cf575060408051601f3d908101601f191682019092526126cc91810190612e7f565b60015b61277c576126db613541565b806308c379a0141561271557506126f061355d565b806126fb5750612717565b8060405162461bcd60e51b815260040161078491906131b6565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610784565b6001600160e01b0319811663f23a6e6160e01b14611ee95760405162461bcd60e51b8152600401610784906131c9565b6127be846001600160a01b031661287d565b156126325760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906127f7908990899088908890889060040161309f565b602060405180830381600087803b15801561281157600080fd5b505af1925050508015612841575060408051601f3d908101601f1916820190925261283e91810190612e7f565b60015b61284d576126db613541565b6001600160e01b0319811663bc197c8160e01b14611ee95760405162461bcd60e51b8152600401610784906131c9565b6001600160a01b03163b151590565b604051806125c0016040528061012e906020820280368337509192915050565b8280546128b890613453565b90600052602060002090601f0160209004810192826128da5760008555612920565b82601f106128f357805160ff1916838001178555612920565b82800160010185558215612920579182015b82811115612920578251825591602001919060010190612905565b5061292c929150612930565b5090565b5b8082111561292c5760008155600101612931565b60006001600160401b0383111561295e5761295e61352b565b604051612975601f8501601f19166020018261348e565b80915083815284848401111561298a57600080fd5b83836020830137600060208583010152509392505050565b80356001600160a01b038116811461139057600080fd5b60008083601f8401126129cb57600080fd5b5081356001600160401b038111156129e257600080fd5b6020830191508360208260051b85010111156129fd57600080fd5b9250929050565b600082601f830112612a1557600080fd5b81356020612a22826133a2565b604051612a2f828261348e565b8381528281019150858301600585901b87018401881015612a4f57600080fd5b60005b85811015612a6e57813584529284019290840190600101612a52565b5090979650505050505050565b600082601f830112612a8c57600080fd5b612a9b83833560208501612945565b9392505050565b600060208284031215612ab457600080fd5b612a9b826129a2565b60008060408385031215612ad057600080fd5b612ad9836129a2565b9150612ae7602084016129a2565b90509250929050565b600080600080600060a08688031215612b0857600080fd5b612b11866129a2565b9450612b1f602087016129a2565b935060408601356001600160401b0380821115612b3b57600080fd5b612b4789838a01612a04565b94506060880135915080821115612b5d57600080fd5b612b6989838a01612a04565b93506080880135915080821115612b7f57600080fd5b50612b8c88828901612a7b565b9150509295509295909350565b600080600080600060a08688031215612bb157600080fd5b612bba866129a2565b9450612bc8602087016129a2565b9350604086013592506060860135915060808601356001600160401b03811115612bf157600080fd5b612b8c88828901612a7b565b60008060408385031215612c1057600080fd5b612c19836129a2565b91506020830135612c29816135e6565b809150509250929050565b60008060408385031215612c4757600080fd5b612c50836129a2565b946020939093013593505050565b60008060008060608587031215612c7457600080fd5b612c7d856129a2565b93506020850135925060408501356001600160401b03811115612c9f57600080fd5b612cab878288016129b9565b95989497509550505050565b60008060408385031215612cca57600080fd5b82356001600160401b0380821115612ce157600080fd5b818501915085601f830112612cf557600080fd5b81356020612d02826133a2565b604051612d0f828261348e565b8381528281019150858301600585901b870184018b1015612d2f57600080fd5b600096505b84871015612d5957612d45816129a2565b835260019690960195918301918301612d34565b5096505086013592505080821115612d7057600080fd5b50612d7d85828601612a04565b9150509250929050565b60006020808385031215612d9a57600080fd5b82516001600160401b03811115612db057600080fd5b8301601f81018513612dc157600080fd5b8051612dcc816133a2565b604051612dd9828261348e565b8281528481019150838501600584901b85018601891015612df957600080fd5b600094505b83851015612e1c578051835260019490940193918501918501612dfe565b50979650505050505050565b600060208284031215612e3a57600080fd5b8135612a9b816135e6565b600060208284031215612e5757600080fd5b8151612a9b816135e6565b600060208284031215612e7457600080fd5b8135612a9b816135f4565b600060208284031215612e9157600080fd5b8151612a9b816135f4565b600060208284031215612eae57600080fd5b81356001600160401b03811115612ec457600080fd5b8201601f81018413612ed557600080fd5b611d1984823560208401612945565b600060208284031215612ef657600080fd5b5035919050565b600060208284031215612f0f57600080fd5b5051919050565b600080600060408486031215612f2b57600080fd5b8335925060208401356001600160401b03811115612f4857600080fd5b612f54868287016129b9565b9497909650939450505050565b600081518084526020808501945080840160005b83811015612f9157815187529582019590820190600101612f75565b509495945050505050565b60008151808452612fb4816020860160208601613427565b601f01601f19169290920160200192915050565b60008151612fda818560208601613427565b9290920192915050565b600080845481600182811c91508083168061300057607f831692505b602080841082141561302057634e487b7160e01b86526022600452602486fd5b818015613034576001811461304557613072565b60ff19861689528489019650613072565b60008b81526020902060005b8681101561306a5781548b820152908501908301613051565b505084890196505b5050505050506130828185612fc8565b95945050505050565b6001600160a01b0391909116815260200190565b6001600160a01b0386811682528516602082015260a0604082018190526000906130cb90830186612f61565b82810360608401526130dd8186612f61565b905082810360808401526130f18185612f9c565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061313790830184612f9c565b979650505050505050565b6125c08101818360005b61012e8110156131755781516001600160a01b031683526020928301929091019060010161314c565b50505092915050565b602081526000612a9b6020830184612f61565b6040815260006131a46040830185612f61565b82810360208401526130828185612f61565b602081526000612a9b6020830184612f9c565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6020808252601c908201527b45524331313535443a2069642065786365656473206d6178696d756d60201b604082015260600190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252601b908201527a12d8589d5d1bce8813585e081cdd5c1c1b1e48195e18d959591959602a1b604082015260600190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526015908201527425b0b13aba379d1029b0b6bab930b49037b7363c9760591b604082015260600190565b60208082526019908201527812d8589d5d1bce88135a5b9d1a5b99c81a5cc81c185d5cd959603a1b604082015260600190565b60006001600160401b038211156133bb576133bb61352b565b5060051b60200190565b600082198211156133d8576133d86134e9565b500190565b6000826133ec576133ec6134ff565b500490565b600081600019048311821515161561340b5761340b6134e9565b500290565b600082821015613422576134226134e9565b500390565b60005b8381101561344257818101518382015260200161342a565b83811115610a915750506000910152565b600181811c9082168061346757607f821691505b6020821081141561348857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f191681016001600160401b03811182821017156134b3576134b361352b565b6040525050565b60006000198214156134ce576134ce6134e9565b5060010190565b6000826134e4576134e46134ff565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d111561355a5760046000803e5060005160e01c5b90565b600060443d101561356b5790565b6040516003193d81016004833e81513d6001600160401b03808311602484018310171561359a57505050505090565b82850191508151818111156135b25750505050505090565b843d87010160208285010111156135cc5750505050505090565b6135db6020828601018761348e565b509095945050505050565b801515811461113d57600080fd5b6001600160e01b03198116811461113d57600080fdfec3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62a26469706673582212205b7de95a9495bdca8649ed5cd31233e00dc80ad2cece72aab1004ff6e5934eac64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000026be1b45564ab3b1f20f421bb5fb5899f7c802c3000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d6362733872636a366b677146683578734a645657367461775746477077573448374432506d756451645039342f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f5368696275726169204b616275746f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064b414255544f0000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : uri_ (string): https://gateway.pinata.cloud/ipfs/Qmcbs8rcj6kgqFh5xsJdVW6tawWFGpwW4H7D2PmudQdP94/
Arg [1] : name_ (string): Shiburai Kabuto
Arg [2] : symbol_ (string): KABUTO
Arg [3] : _kimono (address): 0x26Be1B45564Ab3B1F20F421bb5FB5899f7c802C3
-----Encoded View---------------
12 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [3] : 00000000000000000000000026be1b45564ab3b1f20f421bb5fb5899f7c802c3
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000051
Arg [5] : 68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066
Arg [6] : 732f516d6362733872636a366b677146683578734a6456573674617757464770
Arg [7] : 77573448374432506d756451645039342f000000000000000000000000000000
Arg [8] : 000000000000000000000000000000000000000000000000000000000000000f
Arg [9] : 5368696275726169204b616275746f0000000000000000000000000000000000
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [11] : 4b414255544f0000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
25935:27585:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36525:404;;;;;;;;;;-1:-1:-1;36525:404:0;;;;;:::i;:::-;;:::i;:::-;;;15737:25:1;;;15725:2;15710:18;36525:404:0;;;;;;;;35394:360;;;;;;;;;;-1:-1:-1;35394:360:0;;;;;:::i;:::-;;:::i;:::-;;;15564:14:1;;15557:22;15539:41;;15527:2;15512:18;35394:360:0;15399:187:1;28570:237:0;;;;;;;;;;-1:-1:-1;28570:237:0;;;;;:::i;:::-;;:::i;:::-;;27426:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;36165:209::-;;;;;;;;;;-1:-1:-1;36165:209:0;;;;;:::i;:::-;;:::i;32213:86::-;;;;;;;;;;-1:-1:-1;32213:86:0;;;;;:::i;:::-;;:::i;35136:186::-;;;;;;;;;;;;;:::i;34289:508::-;;;;;;;;;;-1:-1:-1;34289:508:0;;;;;:::i;:::-;;:::i;26820:45::-;;;;;;;;;;-1:-1:-1;26820:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;39046:442;;;;;;;;;;-1:-1:-1;39046:442:0;;;;;:::i;:::-;;:::i;26223:103::-;;;;;;;;;;;;;;;;30730:1014;;;;;;;;;;-1:-1:-1;30730:1014:0;;;;;:::i;:::-;;:::i;53189:328::-;;;;;;;;;;-1:-1:-1;53189:328:0;;;;;:::i;:::-;;:::i;34946:119::-;;;;;;;;;;;;;:::i;37385:561::-;;;;;;;;;;-1:-1:-1;37385:561:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;52673:163::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;27056:54::-;;;;;;;;;;;;;;;;27949:104;;;;;;;;;;-1:-1:-1;27949:104:0;;;;;:::i;:::-;;:::i;30272:144::-;;;;;;;;;;-1:-1:-1;30272:144:0;;;;;:::i;:::-;;:::i;26432:21::-;;;;;;;;;;-1:-1:-1;26432:21:0;;;;-1:-1:-1;;;;;26432:21:0;;;;;;;;;;:::i;20639:103::-;;;;;;;;;;;;;:::i;26535:70::-;;;;;;;;;;-1:-1:-1;26535:70:0;;;;-1:-1:-1;;;;;26535:70:0;;;26165:49;;;;;;;;;;;;26211:3;26165:49;;19988:87;;;;;;;;;;;;;:::i;52844:337::-;;;;;;;;;;-1:-1:-1;52844:337:0;;;;;:::i;:::-;;:::i;27475:20::-;;;;;;;;;;;;;:::i;26460:68::-;;;;;;;;;;-1:-1:-1;26460:68:0;;;;-1:-1:-1;;;;;26460:68:0;;;32352:89;;;;;;;;;;-1:-1:-1;32352:89:0;;;;;:::i;:::-;;:::i;27017:32::-;;;;;;;;;;;;;;;;38019:187;;;;;;;;;;-1:-1:-1;38019:187:0;;;;;:::i;:::-;;:::i;26118:40::-;;;;;;;;;;;;26156:2;26118:40;;30424:298;;;;;;;;;;-1:-1:-1;30424:298:0;;;;;:::i;:::-;;:::i;31990:80::-;;;;;;;;;;-1:-1:-1;32055:7:0;;;;31990:80;;36937:282;;;;;;;;;;-1:-1:-1;36937:282:0;;;;;:::i;:::-;;:::i;27853:88::-;;;;;;;;;;-1:-1:-1;27853:88:0;;;;;:::i;:::-;;:::i;28061:501::-;;;;;;;;;;;;;:::i;28815:1449::-;;;;;;;;;;-1:-1:-1;28815:1449:0;;;;;:::i;:::-;;:::i;38278:218::-;;;;;;;;;;-1:-1:-1;38278:218:0;;;;;:::i;:::-;-1:-1:-1;;;;;38451:27:0;;;38422:4;38451:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;38278:218;32487:1655;;;;;;:::i;:::-;;:::i;38568:401::-;;;;;;;;;;-1:-1:-1;38568:401:0;;;;;:::i;:::-;;:::i;20897:201::-;;;;;;;;;;-1:-1:-1;20897:201:0;;;;;:::i;:::-;;:::i;31821:92::-;;;;;;;;;;-1:-1:-1;31821:92:0;;;;;:::i;:::-;;:::i;36525:404::-;36656:7;-1:-1:-1;;;;;36703:21:0;;36681:114;;;;-1:-1:-1;;;36681:114:0;;17029:2:1;36681:114:0;;;17011:21:1;17068:2;17048:18;;;17041:30;17107:34;17087:18;;;17080:62;-1:-1:-1;;;17158:18:1;;;17151:41;17209:19;;36681:114:0;;;;;;;;;26211:3;36814:2;:24;36806:65;;;;-1:-1:-1;;;36806:65:0;;;;;;;:::i;:::-;36906:7;-1:-1:-1;;;;;36891:22:0;:7;36899:2;36891:11;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;36891:11:0;:22;:30;;36920:1;36891:30;;;36916:1;36891:30;36884:37;;;;36525:404;;;;;:::o;35394:360::-;35541:4;-1:-1:-1;;;;;;35583:41:0;;-1:-1:-1;;;35583:41:0;;:110;;-1:-1:-1;;;;;;;35641:52:0;;-1:-1:-1;;;35641:52:0;35583:110;:163;;;-1:-1:-1;;;;;;;;;;18867:40:0;;;35710:36;18758:157;28570:237;17755:10;20208:7;:5;:7::i;:::-;-1:-1:-1;;;;;20208:23:0;;20200:68;;;;-1:-1:-1;;;20200:68:0;;;;;;;:::i;:::-;28716:8:::1;:20:::0;;-1:-1:-1;;;;;;28716:20:0::1;-1:-1:-1::0;;;;;28716:20:0;;;::::1;::::0;;;::::1;::::0;;;28747:24:::1;:52:::0;28570:237::o;27426:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;36165:209::-;36278:13;36340:4;36346:18;:7;:16;:18::i;:::-;36323:42;;;;;;;;;:::i;:::-;;;;;;;;;;;;;36309:57;;36165:209;;;:::o;32213:86::-;17755:10;20208:7;:5;:7::i;:::-;-1:-1:-1;;;;;20208:23:0;;20200:68;;;;-1:-1:-1;;;20200:68:0;;;;;;;:::i;:::-;32274:7:::1;:17:::0;;-1:-1:-1;;32274:17:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32213:86::o;35136:186::-;35180:7;26156:2;35261:26;:16;22034:14;;21942:114;35261:26;35220:15;22034:14;35220:67;;;;:::i;:::-;:94;;;;:::i;:::-;35200:114;;35136:186;:::o;34289:508::-;17755:10;20208:7;:5;:7::i;:::-;-1:-1:-1;;;;;20208:23:0;;20200:68;;;;-1:-1:-1;;;20200:68:0;;;;;;;:::i;:::-;34376:7:::1;::::0;::::1;;:16;34368:54;;;;-1:-1:-1::0;;;34368:54:0::1;;;;;;;:::i;:::-;26211:3;34455:25;:15;22034:14:::0;;21942:114;34455:25:::1;:47;34433:124;;;;-1:-1:-1::0;;;34433:124:0::1;;;;;;;:::i;:::-;34568:19;::::0;34600:190:::1;34624:6;34620:1;:10;34600:190;;;34652:27;:15;22153:19:::0;;22171:1;22153:19;;;22064:127;34652:27:::1;34708:15;22034:14:::0;34694:39:::1;;34748:30;34754:3;34759:11;34772:1;34748:30;;;;;;;;;;;::::0;:5:::1;:30::i;:::-;34632:3:::0;::::1;::::0;::::1;:::i;:::-;;;;34600:190;;;;34357:440;34289:508:::0;;:::o;39046:442::-;-1:-1:-1;;;;;39279:20:0;;17755:10;39279:20;;:60;;-1:-1:-1;39303:36:0;39320:4;17755:10;38278:218;:::i;39303:36::-;39257:160;;;;-1:-1:-1;;;39257:160:0;;21620:2:1;39257:160:0;;;21602:21:1;21659:2;21639:18;;;21632:30;21698:34;21678:18;;;21671:62;-1:-1:-1;;;21749:18:1;;;21742:48;21807:19;;39257:160:0;21418:414:1;39257:160:0;39428:52;39451:4;39457:2;39461:3;39466:7;39475:4;39428:22;:52::i;:::-;39046:442;;;;;:::o;30730:1014::-;30821:9;30834:10;30821:23;30813:57;;;;-1:-1:-1;;;30813:57:0;;;;;;;:::i;:::-;30889:7;;;;:16;30881:54;;;;-1:-1:-1;;;30881:54:0;;;;;;;:::i;:::-;30968:48;17755:10;30994:7;31003:12;;30968:11;:48::i;:::-;30946:130;;;;-1:-1:-1;;;30946:130:0;;23165:2:1;30946:130:0;;;23147:21:1;;;23184:18;;;23177:30;23243:34;23223:18;;;23216:62;23295:18;;30946:130:0;22963:356:1;30946:130:0;17755:10;31096:27;;;;:13;:27;;;;;;;;31095:28;31087:71;;;;-1:-1:-1;;;31087:71:0;;22395:2:1;31087:71:0;;;22377:21:1;22434:2;22414:18;;;22407:30;22473:32;22453:18;;;22446:60;22523:18;;31087:71:0;22193:354:1;31087:71:0;17755:10;31171:27;;;;:13;:27;;;;;:34;;-1:-1:-1;;31171:34:0;31201:4;31171:34;;;;;;31216:16;22153:19;;;;;;;;;26156:2;31324:26;;;31316:62;;;;-1:-1:-1;;;31316:62:0;;18258:2:1;31316:62:0;;;18240:21:1;18297:2;18277:18;;;18270:30;-1:-1:-1;;;18316:18:1;;;18309:53;18379:18;;31316:62:0;18056:347:1;31316:62:0;31389:39;17755:10;31395:12;31409:11;31422:1;31389:39;;;;;;;;;;;;:5;:39::i;:::-;31458:1;31441:296;31465:7;31461:1;:11;31441:296;;;26156:2;31498:26;:16;22034:14;;21942:114;31498:26;:30;;31527:1;31498:30;:::i;:::-;:44;31494:232;;;31563:5;;31494:232;31609:28;:16;22153:19;;22171:1;22153:19;;;22064:127;31609:28;31656:54;17755:10;31676:16;22034:14;31704:1;31656:54;;;;;;;;;;;;:5;:54::i;:::-;31474:3;;;;:::i;:::-;;;;31441:296;;53189:328;53291:7;;;53346:139;53366:14;53362:1;:18;53346:139;;;53420:8;-1:-1:-1;;;;;53406:22:0;:7;53414:1;53406:10;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;53406:10:0;:22;53402:72;;;53449:9;;;;:::i;:::-;;;;53402:72;53382:3;;;;:::i;:::-;;;;53346:139;;;-1:-1:-1;53502:7:0;53189:328;-1:-1:-1;;53189:328:0:o;34946:119::-;17755:10;20208:7;:5;:7::i;:::-;-1:-1:-1;;;;;20208:23:0;;20200:68;;;;-1:-1:-1;;;20200:68:0;;;;;;;:::i;:::-;34994:63:::1;17755:10:::0;35035:21:::1;34994:17;:63::i;:::-;34946:119::o:0;37385:561::-;37541:16;37616:3;:10;37597:8;:15;:29;37575:120;;;;-1:-1:-1;;;37575:120:0;;26122:2:1;37575:120:0;;;26104:21:1;26161:2;26141:18;;;26134:30;26200:34;26180:18;;;26173:62;-1:-1:-1;;;26251:18:1;;;26244:39;26300:19;;37575:120:0;25920:405:1;37575:120:0;37708:30;37755:8;:15;-1:-1:-1;;;;;37741:30:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37741:30:0;;37708:63;;37789:9;37784:122;37808:8;:15;37804:1;:19;37784:122;;;37864:30;37874:8;37883:1;37874:11;;;;;;;;:::i;:::-;;;;;;;37887:3;37891:1;37887:6;;;;;;;;:::i;:::-;;;;;;;37864:9;:30::i;:::-;37845:13;37859:1;37845:16;;;;;;;;:::i;:::-;;;;;;;;;;:49;37825:3;;;:::i;:::-;;;37784:122;;;-1:-1:-1;37925:13:0;37385:561;-1:-1:-1;;;37385:561:0:o;52673:163::-;52761:35;;:::i;:::-;52814:14;;;;;;;;;;;52821:7;;52814:14;;52821:7;52814:14;;;;-1:-1:-1;;;;;52814:14:0;;;;;;;;;;;;;;;;;;;;;;52673:163;:::o;27949:104::-;17755:10;20208:7;:5;:7::i;:::-;-1:-1:-1;;;;;20208:23:0;;20200:68;;;;-1:-1:-1;;;20200:68:0;;;;;;;:::i;:::-;28021:10:::1;:24:::0;;-1:-1:-1;;;;;;28021:24:0::1;-1:-1:-1::0;;;;;28021:24:0;;;::::1;::::0;;;::::1;::::0;;27949:104::o;30272:144::-;30372:6;;;30365:43;;-1:-1:-1;;;30365:43:0;;30341:4;;-1:-1:-1;;;;;30372:6:0;;;;30365:33;;:43;;30399:8;;30365:43;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;20639:103::-;17755:10;20208:7;:5;:7::i;:::-;-1:-1:-1;;;;;20208:23:0;;20200:68;;;;-1:-1:-1;;;20200:68:0;;;;;;;:::i;:::-;20704:30:::1;20731:1;20704:18;:30::i;19988:87::-:0;20034:7;20061:6;-1:-1:-1;;;;;20061:6:0;;19988:87::o;52844:337::-;52906:7;52939:14;52934:2;:19;52926:60;;;;-1:-1:-1;;;52926:60:0;;;;;;;:::i;:::-;52997:14;53014:7;53022:2;53014:11;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;53014:11:0;;-1:-1:-1;53058:20:0;53036:113;;;;-1:-1:-1;;;53036:113:0;;24590:2:1;53036:113:0;;;24572:21:1;24629:2;24609:18;;;24602:30;24668:34;24648:18;;;24641:62;-1:-1:-1;;;24719:18:1;;;24712:41;24770:19;;53036:113:0;24388:407:1;27475:20:0;;;;;;;:::i;32352:89::-;17755:10;20208:7;:5;:7::i;:::-;-1:-1:-1;;;;;20208:23:0;;20200:68;;;;-1:-1:-1;;;20200:68:0;;;;;;;:::i;:::-;32418:15:::1;32426:6;32418:7;:15::i;:::-;32352:89:::0;:::o;38019:187::-;38146:52;17755:10;38179:8;38189;38146:18;:52::i;:::-;38019:187;;:::o;30424:298::-;30568:4;30585:12;30627:7;30636:8;30610:35;;;;;;;;12392:19:1;;;12474:2;12445:15;-1:-1:-1;;;;;;12441:45:1;12436:2;12427:12;;12420:67;12512:2;12503:12;;12235:286;30610:35:0;;;;;;;;;;;;;30600:46;;;;;;30585:61;;30664:50;30683:12;;30664:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;30697:10:0;;;-1:-1:-1;30709:4:0;;-1:-1:-1;30664:18:0;:50::i;:::-;30657:57;30424:298;-1:-1:-1;;;;;;30424:298:0:o;36937:282::-;37042:7;-1:-1:-1;;;;;37089:19:0;;37067:110;;;;-1:-1:-1;;;37067:110:0;;20447:2:1;37067:110:0;;;20429:21:1;20486:2;20466:18;;;20459:30;20525:34;20505:18;;;20498:62;-1:-1:-1;;;20576:18:1;;;20569:39;20625:19;;37067:110:0;20245:405:1;37067:110:0;-1:-1:-1;;;;;;37195:16:0;;;;;:9;:16;;;;;;;36937:282::o;27853:88::-;17755:10;20208:7;:5;:7::i;:::-;-1:-1:-1;;;;;20208:23:0;;20200:68;;;;-1:-1:-1;;;20200:68:0;;;;;;;:::i;:::-;27917:6:::1;:16:::0;;-1:-1:-1;;;;;;27917:16:0::1;-1:-1:-1::0;;;;;27917:16:0;;;::::1;::::0;;;::::1;::::0;;27853:88::o;28061:501::-;28104:7;28132:9;28145:10;28132:23;28124:57;;;;-1:-1:-1;;;28124:57:0;;;;;;;:::i;:::-;26211:3;28214:25;:15;22034:14;;21942:114;28214:25;:29;;28242:1;28214:29;:::i;:::-;:51;28192:128;;;;-1:-1:-1;;;28192:128:0;;;;;;;:::i;:::-;28338:6;;;28331:46;;-1:-1:-1;;;28331:46:0;;-1:-1:-1;;;;;28338:6:0;;;;28331:34;;:46;;28366:10;;28331:46;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28390:27;:15;22153:19;;22171:1;22153:19;;;22064:127;28390:27;28428:19;28450:25;:15;22034:14;;21942:114;28450:25;28428:47;-1:-1:-1;28486:39:0;17755:10;28492:12;17675:98;28486:39;28543:11;28061:501;-1:-1:-1;28061:501:0:o;28815:1449::-;29138:24;;29037:10;;29018:103;;-1:-1:-1;;;29018:103:0;;28917:7;;29138:24;-1:-1:-1;;;;;29037:10:0;;29018:53;;:103;;29094:8;;29018:103;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28969:8;;28960:38;;-1:-1:-1;;;28960:38:0;;-1:-1:-1;;;;;28969:8:0;;;;28960:28;;:38;;28989:8;;28960:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:161;;;;:::i;:::-;:202;28942:1315;;29210:6;29205:1;29197:5;;:9;;;;:::i;:::-;29196:20;;;;:::i;:::-;29189:27;;;;28942:1315;29249:16;26156:2;29268:25;:15;22034:14;;21942:114;29268:25;:39;;;;:::i;:::-;29249:58;;29322:13;29355:9;29350:869;29370:6;29366:1;:10;29350:869;;;29421:2;29406:12;29417:1;29406:8;:12;:::i;:::-;:17;29402:802;;;29465:1;29457:5;;:9;;;;:::i;:::-;29448:18;;;;:::i;:::-;;;29402:802;;;29576:6;;;29569:41;;-1:-1:-1;;;29569:41:0;;29515:27;;-1:-1:-1;;;;;29576:6:0;;;;29569:31;;:41;;29601:8;;29569:41;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29569:41:0;;;;;;;;;;;;:::i;:::-;:48;29565:286;;-1:-1:-1;29673:1:0;29565:286;;;29760:6;;;29753:74;;-1:-1:-1;;;29753:74:0;;-1:-1:-1;;;;;29760:6:0;;;;29753:64;;:74;;29818:8;;29753:74;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29731:96;;29565:286;29892:1;29875:282;29899:6;29895:1;:10;29875:282;;;29975:1;29966:5;29970:1;29966;:5;:::i;:::-;29943:29;;:19;:29;:::i;:::-;:33;29939:195;;;30026:1;30018:5;;:9;;;;:::i;:::-;30009:18;;;;:::i;:::-;;;29939:195;;;30101:5;;30092:14;;;;:::i;:::-;;;29939:195;29907:3;;;;:::i;:::-;;;;29875:282;;;;30179:5;;;29402:802;29378:3;;;;:::i;:::-;;;;29350:869;;;-1:-1:-1;30240:5:0;-1:-1:-1;30233:12:0;;-1:-1:-1;30233:12:0;32487:1655;32557:9;32570:10;32557:23;32549:57;;;;-1:-1:-1;;;32549:57:0;;20097:2:1;32549:57:0;;;20079:21:1;20136:2;20116:18;;;20109:30;-1:-1:-1;;;20155:18:1;;;20148:51;20216:18;;32549:57:0;19895:345:1;32549:57:0;32617:18;32638:30;32649:10;32661:6;32638:10;:30::i;:::-;32617:51;;32700:10;32687:9;:23;32679:60;;;;-1:-1:-1;;;32679:60:0;;23887:2:1;32679:60:0;;;23869:21:1;23926:2;23906:18;;;23899:30;-1:-1:-1;;;23945:18:1;;;23938:54;24009:18;;32679:60:0;23685:348:1;32679:60:0;32776:5;;32767:14;;:6;:14;:::i;:::-;32754:10;:27;32750:998;;;33017:24;;32903:10;;32884:113;;-1:-1:-1;;;32884:113:0;;-1:-1:-1;;;;;32903:10:0;;;;32884:53;;:113;;32964:10;;32884:113;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32829:8;;32820:40;;-1:-1:-1;;;32820:40:0;;-1:-1:-1;;;;;32829:8:0;;;;32820:28;;:40;;32849:10;;32820:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:177;;;;:::i;:::-;:221;32798:939;;;33076:13;26156:2;33141:6;33092:25;:15;22034:14;;21942:114;33092:25;:55;;;;:::i;:::-;:90;;;;:::i;:::-;33076:106;;33213:2;33205:5;:10;33201:521;;;33240:20;33263:10;33271:2;33263:5;:10;:::i;:::-;33356:6;;;33349:46;;-1:-1:-1;;;33349:46:0;;33240:33;;-1:-1:-1;33296:21:0;;-1:-1:-1;;;;;33356:6:0;;;;33349:34;;:46;;33384:10;;33349:46;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33320:75;;:1;:75;:::i;:::-;33296:99;;33448:13;33433:12;:28;:109;;33529:13;33433:109;;;33489:12;33433:109;33418:124;;33570:9;33565:138;33589:12;33585:1;:16;33565:138;;;33642:6;;;33635:44;;-1:-1:-1;;;33635:44:0;;-1:-1:-1;;;;;33642:6:0;;;;33635:32;;:44;;33668:10;;33635:44;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;33603:3:0;;;;:::i;:::-;;;;33565:138;;;;33217:505;;33201:521;33057:680;32798:939;26211:3;33810:6;33782:25;:15;22034:14;;21942:114;33782:25;:34;;;;:::i;:::-;:56;33760:133;;;;-1:-1:-1;;;33760:133:0;;25002:2:1;33760:133:0;;;24984:21:1;25041:2;25021:18;;;25014:30;-1:-1:-1;;;25060:18:1;;;25053:57;25127:18;;33760:133:0;24800:351:1;33760:133:0;33904:19;;33936:199;33960:6;33956:1;:10;33936:199;;;33988:27;:15;22153:19;;22171:1;22153:19;;;22064:127;33988:27;34044:15;22034:14;34030:39;-1:-1:-1;34084:39:0;17755:10;34104:11;34117:1;34084:39;;;;;;;;;;;;:5;:39::i;:::-;33968:3;;;;:::i;:::-;;;;33936:199;;38568:401;-1:-1:-1;;;;;38776:20:0;;17755:10;38776:20;;:60;;-1:-1:-1;38800:36:0;38817:4;17755:10;38278:218;:::i;38800:36::-;38754:151;;;;-1:-1:-1;;;38754:151:0;;17848:2:1;38754:151:0;;;17830:21:1;17887:2;17867:18;;;17860:30;17926:34;17906:18;;;17899:62;-1:-1:-1;;;17977:18:1;;;17970:39;18026:19;;38754:151:0;17646:405:1;38754:151:0;38916:45;38934:4;38940:2;38944;38948:6;38956:4;38916:17;:45::i;20897:201::-;17755:10;20208:7;:5;:7::i;:::-;-1:-1:-1;;;;;20208:23:0;;20200:68;;;;-1:-1:-1;;;20200:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20986:22:0;::::1;20978:73;;;::::0;-1:-1:-1;;;20978:73:0;;17441:2:1;20978:73:0::1;::::0;::::1;17423:21:1::0;17480:2;17460:18;;;17453:30;17519:34;17499:18;;;17492:62;-1:-1:-1;;;17570:18:1;;;17563:36;17616:19;;20978:73:0::1;17239:402:1::0;20978:73:0::1;21062:28;21081:8;21062:18;:28::i;31821:92::-:0;17755:10;20208:7;:5;:7::i;:::-;-1:-1:-1;;;;;20208:23:0;;20200:68;;;;-1:-1:-1;;;20200:68:0;;;;;;;:::i;:::-;31889:5:::1;:16:::0;31821:92::o;22442:112::-;22523:23;;22442:112::o;22881:723::-;22937:13;23158:10;23154:53;;-1:-1:-1;;23185:10:0;;;;;;;;;;;;-1:-1:-1;;;23185:10:0;;;;;22881:723::o;23154:53::-;23232:5;23217:12;23273:78;23280:9;;23273:78;;23306:8;;;;:::i;:::-;;-1:-1:-1;23329:10:0;;-1:-1:-1;23337:2:0;23329:10;;:::i;:::-;;;23273:78;;;23361:19;23393:6;-1:-1:-1;;;;;23383:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23383:17:0;;23361:39;;23411:154;23418:10;;23411:154;;23445:11;23455:1;23445:11;;:::i;:::-;;-1:-1:-1;23514:10:0;23522:2;23514:5;:10;:::i;:::-;23501:24;;:2;:24;:::i;:::-;23488:39;;23471:6;23478;23471:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;23471:56:0;;;;;;;;-1:-1:-1;23542:11:0;23551:2;23542:11;;:::i;:::-;;;23411:154;;;23589:6;22881:723;-1:-1:-1;;;;22881:723:0:o;44224:1236::-;-1:-1:-1;;;;;44377:16:0;;44369:62;;;;-1:-1:-1;;;44369:62:0;;26941:2:1;44369:62:0;;;26923:21:1;26980:2;26960:18;;;26953:30;27019:34;26999:18;;;26992:62;-1:-1:-1;;;27070:18:1;;;27063:31;27111:19;;44369:62:0;26739:397:1;44369:62:0;44459:1;44450:6;:10;44442:47;;;;-1:-1:-1;;;44442:47:0;;18610:2:1;44442:47:0;;;18592:21:1;18649:2;18629:18;;;18622:30;-1:-1:-1;;;18668:18:1;;;18661:54;18732:18;;44442:47:0;18408:348:1;44442:47:0;26211:3;44508:2;:24;44500:57;;;;-1:-1:-1;;;44500:57:0;;19390:2:1;44500:57:0;;;19372:21:1;19429:2;19409:18;;;19402:30;-1:-1:-1;;;19448:18:1;;;19441:50;19508:18;;44500:57:0;19188:344:1;44500:57:0;17755:10;44570:16;44635:21;44653:2;44635:17;:21::i;:::-;44612:44;;44667:24;44694:25;44712:6;44694:17;:25::i;:::-;44667:52;;45025:6;45035:1;45025:11;45021:108;;;45067:2;45053:7;45061:2;45053:11;;;;;;;:::i;:::-;;:16;;-1:-1:-1;;;;;;45053:16:0;-1:-1:-1;;;;;45053:16:0;;;;;;45100:13;;-1:-1:-1;45100:13:0;;;:9;:13;;;;;;:17;;-1:-1:-1;45100:17:0;:::i;:::-;-1:-1:-1;;;;;45084:13:0;;;;;;:9;:13;;;;;:33;45021:108;45146:52;;;27497:25:1;;;27553:2;27538:18;;27531:34;;;-1:-1:-1;;;;;45146:52:0;;;;45179:1;;45146:52;;;;-1:-1:-1;;;;;;;;;;;45146:52:0;27470:18:1;45146:52:0;;;;;;;45289:163;45334:8;45365:1;45382:2;45399;45416:6;45437:4;45289:30;:163::i;:::-;44358:1102;;;44224:1236;;;;:::o;41536:1368::-;41777:7;:14;41763:3;:10;:28;41741:118;;;;-1:-1:-1;;;41741:118:0;;26532:2:1;41741:118:0;;;26514:21:1;26571:2;26551:18;;;26544:30;26610:34;26590:18;;;26583:62;-1:-1:-1;;;26661:18:1;;;26654:38;26709:19;;41741:118:0;26330:404:1;41741:118:0;-1:-1:-1;;;;;41878:16:0;;41870:66;;;;-1:-1:-1;;;41870:66:0;;;;;;;:::i;:::-;17755:10;41949:16;;42093:380;42117:3;:10;42113:1;:14;42093:380;;;42149:10;42162:3;42166:1;42162:6;;;;;;;;:::i;:::-;;;;;;;42149:19;;42226:4;-1:-1:-1;;;;;42211:19:0;:7;42219:2;42211:11;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;42211:11:0;:19;:37;;;;;42247:1;42234:7;42242:1;42234:10;;;;;;;;:::i;:::-;;;;;;;:14;42211:37;42185:141;;;;-1:-1:-1;;;42185:141:0;;;;;;;:::i;:::-;42347:7;42355:1;42347:10;;;;;;;;:::i;:::-;;;;;;;42361:1;42347:15;42343:119;;;42398:2;-1:-1:-1;;;;;42383:17:0;:7;42391:2;42383:11;;;;;;;:::i;:::-;-1:-1:-1;42432:14:0;;-1:-1:-1;42432:10:0;;-1:-1:-1;42383:11:0;42432:14;:::i;:::-;42419:27;;42343:119;-1:-1:-1;42129:3:0;;;:::i;:::-;;;42093:380;;;-1:-1:-1;;;;;;42499:13:0;;;;;;:9;:13;;;;;;:26;;42515:10;;42499:26;:::i;:::-;-1:-1:-1;;;;;42483:13:0;;;;;;;:9;:13;;;;;;:42;;;;42554:15;;;;;;;:28;;42572:10;;42554:28;:::i;:::-;-1:-1:-1;;;;;42536:15:0;;;;;;;:9;:15;;;;;;;:46;;;;42600:47;;;;;;42536:15;42600:47;;;;;;;42634:3;;42639:7;;42600:47;:::i;:::-;;;;;;;;42732:164;42782:8;42805:4;42824:2;42841:3;42859:7;42881:4;42732:35;:164::i;10981:317::-;11096:6;11071:21;:31;;11063:73;;;;-1:-1:-1;;;11063:73:0;;19739:2:1;11063:73:0;;;19721:21:1;19778:2;19758:18;;;19751:30;19817:31;19797:18;;;19790:59;19866:18;;11063:73:0;19537:353:1;11063:73:0;11150:12;11168:9;-1:-1:-1;;;;;11168:14:0;11190:6;11168:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11149:52;;;11220:7;11212:78;;;;-1:-1:-1;;;11212:78:0;;18963:2:1;11212:78:0;;;18945:21:1;19002:2;18982:18;;;18975:30;19041:34;19021:18;;;19014:62;-1:-1:-1;;;19092:18:1;;;19085:56;19158:19;;11212:78:0;18761:422:1;11212:78:0;11052:246;10981:317;;:::o;21258:191::-;21332:16;21351:6;;-1:-1:-1;;;;;21368:17:0;;;-1:-1:-1;;;;;;21368:17:0;;;;;;21401:40;;21351:6;;;;;;;21401:40;;21332:16;21401:40;21321:128;21258:191;:::o;43748:88::-;43815:13;;;;:4;;:13;;;;;:::i;47813:372::-;47984:8;-1:-1:-1;;;;;47974:18:0;:6;-1:-1:-1;;;;;47974:18:0;;;47952:109;;;;-1:-1:-1;;;47952:109:0;;25712:2:1;47952:109:0;;;25694:21:1;25751:2;25731:18;;;25724:30;25790:34;25770:18;;;25763:62;-1:-1:-1;;;25841:18:1;;;25834:39;25890:19;;47952:109:0;25510:405:1;47952:109:0;-1:-1:-1;;;;;48072:26:0;;;;;;;:18;:26;;;;;;;;:36;;;;;;;;;;;;;:47;;-1:-1:-1;;48072:47:0;;;;;;;;;;48135:42;;15539:41:1;;;48135:42:0;;15512:18:1;48135:42:0;;;;;;;47813:372;;;:::o;24060:910::-;24185:4;24225;24185;24242:605;24266:5;:12;24262:1;:16;24242:605;;;24300:20;24323:5;24329:1;24323:8;;;;;;;;:::i;:::-;;;;;;;24300:31;;24368:12;24352;:28;24348:488;;24527:44;;;;;;10751:19:1;;;10786:12;;;10779:28;;;10823:12;;24527:44:0;;;;;;;;;;;;24495:95;;;;;;24480:110;;24348:488;;;24757:44;;;;;;10751:19:1;;;10786:12;;;10779:28;;;10823:12;;24757:44:0;;;;;;;;;;;;24725:95;;;;;;24710:110;;24348:488;-1:-1:-1;24280:3:0;;;;:::i;:::-;;;;24242:605;;;-1:-1:-1;24942:20:0;;;;24060:910;-1:-1:-1;;;24060:910:0:o;39952:1226::-;-1:-1:-1;;;;;40140:16:0;;40132:66;;;;-1:-1:-1;;;40132:66:0;;;;;;;:::i;:::-;17755:10;40211:16;40276:21;40294:2;40276:17;:21::i;:::-;40253:44;;40308:24;40335:25;40353:6;40335:17;:25::i;:::-;40308:52;;40483:4;-1:-1:-1;;;;;40468:19:0;:7;40476:2;40468:11;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;40468:11:0;:19;:33;;;;;40500:1;40491:6;:10;40468:33;40446:125;;;;-1:-1:-1;;;40446:125:0;;;;;;;:::i;:::-;40798:6;40808:1;40798:11;40794:160;;;40840:2;40826:7;40834:2;40826:11;;;;;;;:::i;:::-;;:16;;-1:-1:-1;;;;;;40826:16:0;-1:-1:-1;;;;;40826:16:0;;;;;;40873:13;;-1:-1:-1;40873:13:0;;;:9;:13;;;;;;:17;;-1:-1:-1;40873:17:0;:::i;:::-;-1:-1:-1;;;;;40857:13:0;;;;;;;:9;:13;;;;;;:33;;;;40923:15;;;;;;;:19;;40941:1;;40923:19;:::i;:::-;-1:-1:-1;;;;;40905:15:0;;;;;;:9;:15;;;;;:37;40794:160;41002:2;-1:-1:-1;;;;;40971:46:0;40996:4;-1:-1:-1;;;;;40971:46:0;40986:8;-1:-1:-1;;;;;40971:46:0;-1:-1:-1;;;;;;;;;;;41006:2:0;41010:6;40971:46;;;;;;27497:25:1;;;27553:2;27538:18;;27531:34;27485:2;27470:18;;27323:248;40971:46:0;;;;;;;;41102:68;41133:8;41143:4;41149:2;41153;41157:6;41165:4;41102:30;:68::i;:::-;40121:1057;;;39952:1226;;;;;:::o;52434:231::-;52587:16;;;52601:1;52587:16;;;;;;;;;52528;;52562:22;;52587:16;;;;;;;;;;;;-1:-1:-1;52587:16:0;52562:41;;52625:7;52614:5;52620:1;52614:8;;;;;;;;:::i;:::-;;;;;;;;;;:18;52652:5;52434:231;-1:-1:-1;;52434:231:0:o;49141:221::-;;;;;;;:::o;50545:898::-;50760:15;:2;-1:-1:-1;;;;;50760:13:0;;:15::i;:::-;50756:680;;;50813:196;;-1:-1:-1;;;50813:196:0;;-1:-1:-1;;;;;50813:38:0;;;;;:196;;50874:8;;50905:4;;50932:2;;50957:6;;50986:4;;50813:196;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50813:196:0;;;;;;;;-1:-1:-1;;50813:196:0;;;;;;;;;;;;:::i;:::-;;;50792:633;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;51298:6;51291:14;;-1:-1:-1;;;51291:14:0;;;;;;;;:::i;50792:633::-;;;51347:62;;-1:-1:-1;;;51347:62:0;;16199:2:1;51347:62:0;;;16181:21:1;16238:2;16218:18;;;16211:30;16277:34;16257:18;;;16250:62;-1:-1:-1;;;16328:18:1;;;16321:50;16388:19;;51347:62:0;15997:416:1;50792:633:0;-1:-1:-1;;;;;;51072:55:0;;-1:-1:-1;;;51072:55:0;51068:154;;51152:50;;-1:-1:-1;;;51152:50:0;;;;;;;:::i;51451:975::-;51691:15;:2;-1:-1:-1;;;;;51691:13:0;;:15::i;:::-;51687:732;;;51744:203;;-1:-1:-1;;;51744:203:0;;-1:-1:-1;;;;;51744:43:0;;;;;:203;;51810:8;;51841:4;;51868:3;;51894:7;;51924:4;;51744:203;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51744:203:0;;;;;;;;-1:-1:-1;;51744:203:0;;;;;;;;;;;;:::i;:::-;;;51723:685;;;;:::i;:::-;-1:-1:-1;;;;;;52032:60:0;;-1:-1:-1;;;52032:60:0;52006:199;;52135:50;;-1:-1:-1;;;52135:50:0;;;;;;;:::i;9720:326::-;-1:-1:-1;;;;;10015:19:0;;:23;;;9720:326::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:468:1;78:5;-1:-1:-1;;;;;101:30:1;;98:56;;;134:18;;:::i;:::-;183:2;177:9;195:69;252:2;231:15;;-1:-1:-1;;227:29:1;258:4;223:40;177:9;195:69;:::i;:::-;282:6;273:15;;312:6;304;297:22;352:3;343:6;338:3;334:16;331:25;328:45;;;369:1;366;359:12;328:45;419:6;414:3;407:4;399:6;395:17;382:44;474:1;467:4;458:6;450;446:19;442:30;435:41;;14:468;;;;;:::o;487:173::-;555:20;;-1:-1:-1;;;;;604:31:1;;594:42;;584:70;;650:1;647;640:12;665:367;728:8;738:6;792:3;785:4;777:6;773:17;769:27;759:55;;810:1;807;800:12;759:55;-1:-1:-1;833:20:1;;-1:-1:-1;;;;;865:30:1;;862:50;;;908:1;905;898:12;862:50;945:4;937:6;933:17;921:29;;1005:3;998:4;988:6;985:1;981:14;973:6;969:27;965:38;962:47;959:67;;;1022:1;1019;1012:12;959:67;665:367;;;;;:::o;1037:735::-;1091:5;1144:3;1137:4;1129:6;1125:17;1121:27;1111:55;;1162:1;1159;1152:12;1111:55;1198:6;1185:20;1224:4;1247:43;1287:2;1247:43;:::i;:::-;1319:2;1313:9;1331:31;1359:2;1351:6;1331:31;:::i;:::-;1397:18;;;1431:15;;;;-1:-1:-1;1466:15:1;;;1516:1;1512:10;;;1500:23;;1496:32;;1493:41;-1:-1:-1;1490:61:1;;;1547:1;1544;1537:12;1490:61;1569:1;1579:163;1593:2;1590:1;1587:9;1579:163;;;1650:17;;1638:30;;1688:12;;;;1720;;;;1611:1;1604:9;1579:163;;;-1:-1:-1;1760:6:1;;1037:735;-1:-1:-1;;;;;;;1037:735:1:o;1777:220::-;1819:5;1872:3;1865:4;1857:6;1853:17;1849:27;1839:55;;1890:1;1887;1880:12;1839:55;1912:79;1987:3;1978:6;1965:20;1958:4;1950:6;1946:17;1912:79;:::i;:::-;1903:88;1777:220;-1:-1:-1;;;1777:220:1:o;2002:186::-;2061:6;2114:2;2102:9;2093:7;2089:23;2085:32;2082:52;;;2130:1;2127;2120:12;2082:52;2153:29;2172:9;2153:29;:::i;2193:260::-;2261:6;2269;2322:2;2310:9;2301:7;2297:23;2293:32;2290:52;;;2338:1;2335;2328:12;2290:52;2361:29;2380:9;2361:29;:::i;:::-;2351:39;;2409:38;2443:2;2432:9;2428:18;2409:38;:::i;:::-;2399:48;;2193:260;;;;;:::o;2458:943::-;2612:6;2620;2628;2636;2644;2697:3;2685:9;2676:7;2672:23;2668:33;2665:53;;;2714:1;2711;2704:12;2665:53;2737:29;2756:9;2737:29;:::i;:::-;2727:39;;2785:38;2819:2;2808:9;2804:18;2785:38;:::i;:::-;2775:48;-1:-1:-1;2874:2:1;2859:18;;2846:32;-1:-1:-1;;;;;2927:14:1;;;2924:34;;;2954:1;2951;2944:12;2924:34;2977:61;3030:7;3021:6;3010:9;3006:22;2977:61;:::i;:::-;2967:71;;3091:2;3080:9;3076:18;3063:32;3047:48;;3120:2;3110:8;3107:16;3104:36;;;3136:1;3133;3126:12;3104:36;3159:63;3214:7;3203:8;3192:9;3188:24;3159:63;:::i;:::-;3149:73;;3275:3;3264:9;3260:19;3247:33;3231:49;;3305:2;3295:8;3292:16;3289:36;;;3321:1;3318;3311:12;3289:36;;3344:51;3387:7;3376:8;3365:9;3361:24;3344:51;:::i;:::-;3334:61;;;2458:943;;;;;;;;:::o;3406:606::-;3510:6;3518;3526;3534;3542;3595:3;3583:9;3574:7;3570:23;3566:33;3563:53;;;3612:1;3609;3602:12;3563:53;3635:29;3654:9;3635:29;:::i;:::-;3625:39;;3683:38;3717:2;3706:9;3702:18;3683:38;:::i;:::-;3673:48;-1:-1:-1;3768:2:1;3753:18;;3740:32;;-1:-1:-1;3819:2:1;3804:18;;3791:32;;-1:-1:-1;3874:3:1;3859:19;;3846:33;-1:-1:-1;;;;;3891:30:1;;3888:50;;;3934:1;3931;3924:12;3888:50;3957:49;3998:7;3989:6;3978:9;3974:22;3957:49;:::i;4017:315::-;4082:6;4090;4143:2;4131:9;4122:7;4118:23;4114:32;4111:52;;;4159:1;4156;4149:12;4111:52;4182:29;4201:9;4182:29;:::i;:::-;4172:39;;4261:2;4250:9;4246:18;4233:32;4274:28;4296:5;4274:28;:::i;:::-;4321:5;4311:15;;;4017:315;;;;;:::o;4337:254::-;4405:6;4413;4466:2;4454:9;4445:7;4441:23;4437:32;4434:52;;;4482:1;4479;4472:12;4434:52;4505:29;4524:9;4505:29;:::i;:::-;4495:39;4581:2;4566:18;;;;4553:32;;-1:-1:-1;;;4337:254:1:o;4596:579::-;4700:6;4708;4716;4724;4777:2;4765:9;4756:7;4752:23;4748:32;4745:52;;;4793:1;4790;4783:12;4745:52;4816:29;4835:9;4816:29;:::i;:::-;4806:39;-1:-1:-1;4892:2:1;4877:18;;4864:32;;-1:-1:-1;4947:2:1;4932:18;;4919:32;-1:-1:-1;;;;;4963:30:1;;4960:50;;;5006:1;5003;4996:12;4960:50;5045:70;5107:7;5098:6;5087:9;5083:22;5045:70;:::i;:::-;4596:579;;;;-1:-1:-1;5134:8:1;-1:-1:-1;;;;4596:579:1:o;5180:1219::-;5298:6;5306;5359:2;5347:9;5338:7;5334:23;5330:32;5327:52;;;5375:1;5372;5365:12;5327:52;5402:23;;-1:-1:-1;;;;;5474:14:1;;;5471:34;;;5501:1;5498;5491:12;5471:34;5539:6;5528:9;5524:22;5514:32;;5584:7;5577:4;5573:2;5569:13;5565:27;5555:55;;5606:1;5603;5596:12;5555:55;5642:2;5629:16;5664:4;5687:43;5727:2;5687:43;:::i;:::-;5759:2;5753:9;5771:31;5799:2;5791:6;5771:31;:::i;:::-;5837:18;;;5871:15;;;;-1:-1:-1;5906:11:1;;;5948:1;5944:10;;;5936:19;;5932:28;;5929:41;-1:-1:-1;5926:61:1;;;5983:1;5980;5973:12;5926:61;6005:1;5996:10;;6015:169;6029:2;6026:1;6023:9;6015:169;;;6086:23;6105:3;6086:23;:::i;:::-;6074:36;;6047:1;6040:9;;;;;6130:12;;;;6162;;6015:169;;;-1:-1:-1;6203:6:1;-1:-1:-1;;6247:18:1;;6234:32;;-1:-1:-1;;6278:16:1;;;6275:36;;;6307:1;6304;6297:12;6275:36;;6330:63;6385:7;6374:8;6363:9;6359:24;6330:63;:::i;:::-;6320:73;;;5180:1219;;;;;:::o;6404:954::-;6499:6;6530:2;6573;6561:9;6552:7;6548:23;6544:32;6541:52;;;6589:1;6586;6579:12;6541:52;6616:16;;-1:-1:-1;;;;;6644:30:1;;6641:50;;;6687:1;6684;6677:12;6641:50;6710:22;;6763:4;6755:13;;6751:27;-1:-1:-1;6741:55:1;;6792:1;6789;6782:12;6741:55;6821:2;6815:9;6843:43;6883:2;6843:43;:::i;:::-;6915:2;6909:9;6927:31;6955:2;6947:6;6927:31;:::i;:::-;6993:18;;;7027:15;;;;-1:-1:-1;7062:11:1;;;7104:1;7100:10;;;7092:19;;7088:28;;7085:41;-1:-1:-1;7082:61:1;;;7139:1;7136;7129:12;7082:61;7161:1;7152:10;;7171:156;7185:2;7182:1;7179:9;7171:156;;;7242:10;;7230:23;;7203:1;7196:9;;;;;7273:12;;;;7305;;7171:156;;;-1:-1:-1;7346:6:1;6404:954;-1:-1:-1;;;;;;;6404:954:1:o;7363:241::-;7419:6;7472:2;7460:9;7451:7;7447:23;7443:32;7440:52;;;7488:1;7485;7478:12;7440:52;7527:9;7514:23;7546:28;7568:5;7546:28;:::i;7609:245::-;7676:6;7729:2;7717:9;7708:7;7704:23;7700:32;7697:52;;;7745:1;7742;7735:12;7697:52;7777:9;7771:16;7796:28;7818:5;7796:28;:::i;7859:245::-;7917:6;7970:2;7958:9;7949:7;7945:23;7941:32;7938:52;;;7986:1;7983;7976:12;7938:52;8025:9;8012:23;8044:30;8068:5;8044:30;:::i;8109:249::-;8178:6;8231:2;8219:9;8210:7;8206:23;8202:32;8199:52;;;8247:1;8244;8237:12;8199:52;8279:9;8273:16;8298:30;8322:5;8298:30;:::i;8363:450::-;8432:6;8485:2;8473:9;8464:7;8460:23;8456:32;8453:52;;;8501:1;8498;8491:12;8453:52;8528:23;;-1:-1:-1;;;;;8563:30:1;;8560:50;;;8606:1;8603;8596:12;8560:50;8629:22;;8682:4;8674:13;;8670:27;-1:-1:-1;8660:55:1;;8711:1;8708;8701:12;8660:55;8734:73;8799:7;8794:2;8781:16;8776:2;8772;8768:11;8734:73;:::i;8818:180::-;8877:6;8930:2;8918:9;8909:7;8905:23;8901:32;8898:52;;;8946:1;8943;8936:12;8898:52;-1:-1:-1;8969:23:1;;8818:180;-1:-1:-1;8818:180:1:o;9003:184::-;9073:6;9126:2;9114:9;9105:7;9101:23;9097:32;9094:52;;;9142:1;9139;9132:12;9094:52;-1:-1:-1;9165:16:1;;9003:184;-1:-1:-1;9003:184:1:o;9192:505::-;9287:6;9295;9303;9356:2;9344:9;9335:7;9331:23;9327:32;9324:52;;;9372:1;9369;9362:12;9324:52;9395:23;;;-1:-1:-1;9469:2:1;9454:18;;9441:32;-1:-1:-1;;;;;9485:30:1;;9482:50;;;9528:1;9525;9518:12;9482:50;9567:70;9629:7;9620:6;9609:9;9605:22;9567:70;:::i;:::-;9192:505;;9656:8;;-1:-1:-1;9541:96:1;;-1:-1:-1;;;;9192:505:1:o;9702:435::-;9755:3;9793:5;9787:12;9820:6;9815:3;9808:19;9846:4;9875:2;9870:3;9866:12;9859:19;;9912:2;9905:5;9901:14;9933:1;9943:169;9957:6;9954:1;9951:13;9943:169;;;10018:13;;10006:26;;10052:12;;;;10087:15;;;;9979:1;9972:9;9943:169;;;-1:-1:-1;10128:3:1;;9702:435;-1:-1:-1;;;;;9702:435:1:o;10142:257::-;10183:3;10221:5;10215:12;10248:6;10243:3;10236:19;10264:63;10320:6;10313:4;10308:3;10304:14;10297:4;10290:5;10286:16;10264:63;:::i;:::-;10381:2;10360:15;-1:-1:-1;;10356:29:1;10347:39;;;;10388:4;10343:50;;10142:257;-1:-1:-1;;10142:257:1:o;10404:185::-;10446:3;10484:5;10478:12;10499:52;10544:6;10539:3;10532:4;10525:5;10521:16;10499:52;:::i;:::-;10567:16;;;;;10404:185;-1:-1:-1;;10404:185:1:o;10846:1174::-;11022:3;11051:1;11084:6;11078:13;11114:3;11136:1;11164:9;11160:2;11156:18;11146:28;;11224:2;11213:9;11209:18;11246;11236:61;;11290:4;11282:6;11278:17;11268:27;;11236:61;11316:2;11364;11356:6;11353:14;11333:18;11330:38;11327:165;;;-1:-1:-1;;;11391:33:1;;11447:4;11444:1;11437:15;11477:4;11398:3;11465:17;11327:165;11508:18;11535:104;;;;11653:1;11648:320;;;;11501:467;;11535:104;-1:-1:-1;;11568:24:1;;11556:37;;11613:16;;;;-1:-1:-1;11535:104:1;;11648:320;27837:1;27830:14;;;27874:4;27861:18;;11743:1;11757:165;11771:6;11768:1;11765:13;11757:165;;;11849:14;;11836:11;;;11829:35;11892:16;;;;11786:10;;11757:165;;;11761:3;;11951:6;11946:3;11942:16;11935:23;;11501:467;;;;;;;11984:30;12010:3;12002:6;11984:30;:::i;:::-;11977:37;10846:1174;-1:-1:-1;;;;;10846:1174:1:o;12526:203::-;-1:-1:-1;;;;;12690:32:1;;;;12672:51;;12660:2;12645:18;;12526:203::o;12734:826::-;-1:-1:-1;;;;;13131:15:1;;;13113:34;;13183:15;;13178:2;13163:18;;13156:43;13093:3;13230:2;13215:18;;13208:31;;;13056:4;;13262:57;;13299:19;;13291:6;13262:57;:::i;:::-;13367:9;13359:6;13355:22;13350:2;13339:9;13335:18;13328:50;13401:44;13438:6;13430;13401:44;:::i;:::-;13387:58;;13494:9;13486:6;13482:22;13476:3;13465:9;13461:19;13454:51;13522:32;13547:6;13539;13522:32;:::i;:::-;13514:40;12734:826;-1:-1:-1;;;;;;;;12734:826:1:o;13565:560::-;-1:-1:-1;;;;;13862:15:1;;;13844:34;;13914:15;;13909:2;13894:18;;13887:43;13961:2;13946:18;;13939:34;;;14004:2;13989:18;;13982:34;;;13824:3;14047;14032:19;;14025:32;;;13787:4;;14074:45;;14099:19;;14091:6;14074:45;:::i;:::-;14066:53;13565:560;-1:-1:-1;;;;;;;13565:560:1:o;14130:528::-;14314:4;14299:20;;14303:9;14396:6;14272:4;14430:222;14444:6;14441:1;14438:13;14430:222;;;14509:13;;-1:-1:-1;;;;;14505:39:1;14493:52;;14568:4;14592:12;;;;14627:15;;;;14541:1;14459:9;14430:222;;;14434:3;;;14130:528;;;;:::o;14663:261::-;14842:2;14831:9;14824:21;14805:4;14862:56;14914:2;14903:9;14899:18;14891:6;14862:56;:::i;14929:465::-;15186:2;15175:9;15168:21;15149:4;15212:56;15264:2;15253:9;15249:18;15241:6;15212:56;:::i;:::-;15316:9;15308:6;15304:22;15299:2;15288:9;15284:18;15277:50;15344:44;15381:6;15373;15344:44;:::i;15773:219::-;15922:2;15911:9;15904:21;15885:4;15942:44;15982:2;15971:9;15967:18;15959:6;15942:44;:::i;16418:404::-;16620:2;16602:21;;;16659:2;16639:18;;;16632:30;16698:34;16693:2;16678:18;;16671:62;-1:-1:-1;;;16764:2:1;16749:18;;16742:38;16812:3;16797:19;;16418:404::o;20655:352::-;20857:2;20839:21;;;20896:2;20876:18;;;20869:30;-1:-1:-1;;;20930:2:1;20915:18;;20908:58;20998:2;20983:18;;20655:352::o;21012:401::-;21214:2;21196:21;;;21253:2;21233:18;;;21226:30;21292:34;21287:2;21272:18;;21265:62;-1:-1:-1;;;21358:2:1;21343:18;;21336:35;21403:3;21388:19;;21012:401::o;21837:351::-;22039:2;22021:21;;;22078:2;22058:18;;;22051:30;-1:-1:-1;;;22112:2:1;22097:18;;22090:57;22179:2;22164:18;;21837:351::o;22552:406::-;22754:2;22736:21;;;22793:2;22773:18;;;22766:30;22832:34;22827:2;22812:18;;22805:62;-1:-1:-1;;;22898:2:1;22883:18;;22876:40;22948:3;22933:19;;22552:406::o;23324:356::-;23526:2;23508:21;;;23545:18;;;23538:30;23604:34;23599:2;23584:18;;23577:62;23671:2;23656:18;;23324:356::o;24038:345::-;24240:2;24222:21;;;24279:2;24259:18;;;24252:30;-1:-1:-1;;;24313:2:1;24298:18;;24291:51;24374:2;24359:18;;24038:345::o;25156:349::-;25358:2;25340:21;;;25397:2;25377:18;;;25370:30;-1:-1:-1;;;25431:2:1;25416:18;;25409:55;25496:2;25481:18;;25156:349::o;27576:183::-;27636:4;-1:-1:-1;;;;;27658:30:1;;27655:56;;;27691:18;;:::i;:::-;-1:-1:-1;27736:1:1;27732:14;27748:4;27728:25;;27576:183::o;27890:128::-;27930:3;27961:1;27957:6;27954:1;27951:13;27948:39;;;27967:18;;:::i;:::-;-1:-1:-1;28003:9:1;;27890:128::o;28023:120::-;28063:1;28089;28079:35;;28094:18;;:::i;:::-;-1:-1:-1;28128:9:1;;28023:120::o;28148:168::-;28188:7;28254:1;28250;28246:6;28242:14;28239:1;28236:21;28231:1;28224:9;28217:17;28213:45;28210:71;;;28261:18;;:::i;:::-;-1:-1:-1;28301:9:1;;28148:168::o;28321:125::-;28361:4;28389:1;28386;28383:8;28380:34;;;28394:18;;:::i;:::-;-1:-1:-1;28431:9:1;;28321:125::o;28451:258::-;28523:1;28533:113;28547:6;28544:1;28541:13;28533:113;;;28623:11;;;28617:18;28604:11;;;28597:39;28569:2;28562:10;28533:113;;;28664:6;28661:1;28658:13;28655:48;;;-1:-1:-1;;28699:1:1;28681:16;;28674:27;28451:258::o;28714:380::-;28793:1;28789:12;;;;28836;;;28857:61;;28911:4;28903:6;28899:17;28889:27;;28857:61;28964:2;28956:6;28953:14;28933:18;28930:38;28927:161;;;29010:10;29005:3;29001:20;28998:1;28991:31;29045:4;29042:1;29035:15;29073:4;29070:1;29063:15;28927:161;;28714:380;;;:::o;29099:249::-;29209:2;29190:13;;-1:-1:-1;;29186:27:1;29174:40;;-1:-1:-1;;;;;29229:34:1;;29265:22;;;29226:62;29223:88;;;29291:18;;:::i;:::-;29327:2;29320:22;-1:-1:-1;;29099:249:1:o;29353:135::-;29392:3;-1:-1:-1;;29413:17:1;;29410:43;;;29433:18;;:::i;:::-;-1:-1:-1;29480:1:1;29469:13;;29353:135::o;29493:112::-;29525:1;29551;29541:35;;29556:18;;:::i;:::-;-1:-1:-1;29590:9:1;;29493:112::o;29610:127::-;29671:10;29666:3;29662:20;29659:1;29652:31;29702:4;29699:1;29692:15;29726:4;29723:1;29716:15;29742:127;29803:10;29798:3;29794:20;29791:1;29784:31;29834:4;29831:1;29824:15;29858:4;29855:1;29848:15;29874:127;29935:10;29930:3;29926:20;29923:1;29916:31;29966:4;29963:1;29956:15;29990:4;29987:1;29980:15;30006:127;30067:10;30062:3;30058:20;30055:1;30048:31;30098:4;30095:1;30088:15;30122:4;30119:1;30112:15;30138:179;30173:3;30215:1;30197:16;30194:23;30191:120;;;30261:1;30258;30255;30240:23;-1:-1:-1;30298:1:1;30292:8;30287:3;30283:18;30191:120;30138:179;:::o;30322:671::-;30361:3;30403:4;30385:16;30382:26;30379:39;;;30322:671;:::o;30379:39::-;30445:2;30439:9;-1:-1:-1;;30510:16:1;30506:25;;30503:1;30439:9;30482:50;30555:11;;30585:16;-1:-1:-1;;;;;30653:14:1;;;30684:4;30672:17;;30669:25;-1:-1:-1;30650:45:1;30647:58;;;30698:5;;;;;30322:671;:::o;30647:58::-;30735:6;30729:4;30725:17;30714:28;;30771:3;30765:10;30798:2;30790:6;30787:14;30784:27;;;30804:5;;;;;;30322:671;:::o;30784:27::-;30888:2;30869:16;30863:4;30859:27;30855:36;30848:4;30839:6;30834:3;30830:16;30826:27;30823:69;30820:82;;;30895:5;;;;;;30322:671;:::o;30820:82::-;30911:57;30962:4;30953:6;30945;30941:19;30937:30;30931:4;30911:57;:::i;:::-;-1:-1:-1;30984:3:1;;30322:671;-1:-1:-1;;;;;30322:671:1:o;30998:118::-;31084:5;31077:13;31070:21;31063:5;31060:32;31050:60;;31106:1;31103;31096:12;31121:131;-1:-1:-1;;;;;;31195:32:1;;31185:43;;31175:71;;31242:1;31239;31232:12
Swarm Source
ipfs://5b7de95a9495bdca8649ed5cd31233e00dc80ad2cece72aab1004ff6e5934eac
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.