Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
RunescapeLoot
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2021-09-04
*/
/**
*Submitted for verification at Etherscan.io on 2021-08-21
*/
/**
*Submitted for verification at Etherscan.io on 2021-08-11
*/
/**
*Submitted for verification at Etherscan.io on 2021-08-08
*/
// Sources flattened with hardhat v2.5.0 https://hardhat.org
// File contracts/utils/introspection/IERC165.sol
// SPDX-License-Identifier: MIT
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 contracts/token/ERC721/IERC721.sol
pragma solidity ^0.8.0;
/**
* @dev Required interface of an ERC721 compliant contract.
*/
interface IERC721 is IERC165 {
/**
* @dev Emitted when `tokenId` token is transferred from `from` to `to`.
*/
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
*/
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
*/
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
/**
* @dev Returns the number of tokens in ``owner``'s account.
*/
function balanceOf(address owner) external view returns (uint256 balance);
/**
* @dev Returns the owner of the `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function ownerOf(uint256 tokenId) external view returns (address owner);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(address from, address to, uint256 tokenId) external;
/**
* @dev Transfers `tokenId` token from `from` to `to`.
*
* WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
*
* Emits a {Transfer} event.
*/
function transferFrom(address from, address to, uint256 tokenId) external;
/**
* @dev Gives permission to `to` to transfer `tokenId` token to another account.
* The approval is cleared when the token is transferred.
*
* Only a single account can be approved at a time, so approving the zero address clears previous approvals.
*
* Requirements:
*
* - The caller must own the token or be an approved operator.
* - `tokenId` must exist.
*
* Emits an {Approval} event.
*/
function approve(address to, uint256 tokenId) external;
/**
* @dev Returns the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(uint256 tokenId) external view returns (address operator);
/**
* @dev Approve or remove `operator` as an operator for the caller.
* Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
*
* Requirements:
*
* - The `operator` cannot be the caller.
*
* Emits an {ApprovalForAll} event.
*/
function setApprovalForAll(address operator, bool _approved) external;
/**
* @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
*
* See {setApprovalForAll}
*/
function isApprovedForAll(address owner, address operator) external view returns (bool);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;
}
// File contracts/token/ERC721/IERC721Receiver.sol
pragma solidity ^0.8.0;
/**
* @title ERC721 token receiver interface
* @dev Interface for any contract that wants to support safeTransfers
* from ERC721 asset contracts.
*/
interface IERC721Receiver {
/**
* @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
* by `operator` from `from`, this function is called.
*
* It must return its Solidity selector to confirm the token transfer.
* If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
*
* The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
*/
function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4);
}
// File contracts/token/ERC721/extensions/IERC721Metadata.sol
pragma solidity ^0.8.0;
/**
* @title ERC-721 Non-Fungible Token Standard, optional metadata extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
interface IERC721Metadata is IERC721 {
/**
* @dev Returns the token collection name.
*/
function name() external view returns (string memory);
/**
* @dev Returns the token collection symbol.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
*/
function tokenURI(uint256 tokenId) external view returns (string memory);
}
// File contracts/utils/Address.sol
pragma solidity ^0.8.0;
/**
* @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
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize, which returns 0 for contracts in
// construction, since the code is only stored at the end of the
// constructor execution.
uint256 size;
// solhint-disable-next-line no-inline-assembly
assembly { size := extcodesize(account) }
return size > 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");
// solhint-disable-next-line avoid-low-level-calls, avoid-call-value
(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");
// solhint-disable-next-line avoid-low-level-calls
(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");
// solhint-disable-next-line avoid-low-level-calls
(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");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.delegatecall(data);
return _verifyCallResult(success, returndata, errorMessage);
}
function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private 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
// solhint-disable-next-line no-inline-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// File contracts/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) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
// File contracts/utils/Strings.sol
pragma solidity ^0.8.0;
/**
* @dev String operations.
*/
library Strings {
bytes16 private constant alphabet = "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 Converts a `uint256` to its ASCII `string` hexadecimal representation.
*/
function toHexString(uint256 value) internal pure returns (string memory) {
if (value == 0) {
return "0x00";
}
uint256 temp = value;
uint256 length = 0;
while (temp != 0) {
length++;
temp >>= 8;
}
return toHexString(value, length);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
*/
function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
bytes memory buffer = new bytes(2 * length + 2);
buffer[0] = "0";
buffer[1] = "x";
for (uint256 i = 2 * length + 1; i > 1; --i) {
buffer[i] = alphabet[value & 0xf];
value >>= 4;
}
require(value == 0, "Strings: hex length insufficient");
return string(buffer);
}
}
// File contracts/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 contracts/token/ERC721/ERC721.sol
pragma solidity ^0.8.0;
/**
* @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
* the Metadata extension, but not including the Enumerable extension, which is available separately as
* {ERC721Enumerable}.
*/
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
using Address for address;
using Strings for uint256;
// Token name
string private _name;
// Token symbol
string private _symbol;
// Mapping from token ID to owner address
mapping (uint256 => address) private _owners;
// Mapping owner address to token count
mapping (address => uint256) private _balances;
// Mapping from token ID to approved address
mapping (uint256 => address) private _tokenApprovals;
// Mapping from owner to operator approvals
mapping (address => mapping (address => bool)) private _operatorApprovals;
/**
* @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
*/
constructor (string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
return interfaceId == type(IERC721).interfaceId
|| interfaceId == type(IERC721Metadata).interfaceId
|| super.supportsInterface(interfaceId);
}
/**
* @dev See {IERC721-balanceOf}.
*/
function balanceOf(address owner) public view virtual override returns (uint256) {
require(owner != address(0), "ERC721: balance query for the zero address");
return _balances[owner];
}
/**
* @dev See {IERC721-ownerOf}.
*/
function ownerOf(uint256 tokenId) public view virtual override returns (address) {
address owner = _owners[tokenId];
require(owner != address(0), "ERC721: owner query for nonexistent token");
return owner;
}
/**
* @dev See {IERC721Metadata-name}.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev See {IERC721Metadata-symbol}.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev See {IERC721Metadata-tokenURI}.
*/
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
string memory baseURI = _baseURI();
return bytes(baseURI).length > 0
? string(abi.encodePacked(baseURI, tokenId.toString()))
: '';
}
/**
* @dev Base URI for computing {tokenURI}. Empty by default, can be overriden
* in child contracts.
*/
function _baseURI() internal view virtual returns (string memory) {
return "";
}
/**
* @dev See {IERC721-approve}.
*/
function approve(address to, uint256 tokenId) public virtual override {
address owner = ERC721.ownerOf(tokenId);
require(to != owner, "ERC721: approval to current owner");
require(_msgSender() == owner || isApprovedForAll(owner, _msgSender()),
"ERC721: approve caller is not owner nor approved for all"
);
_approve(to, tokenId);
}
/**
* @dev See {IERC721-getApproved}.
*/
function getApproved(uint256 tokenId) public view virtual override returns (address) {
require(_exists(tokenId), "ERC721: approved query for nonexistent token");
return _tokenApprovals[tokenId];
}
/**
* @dev See {IERC721-setApprovalForAll}.
*/
function setApprovalForAll(address operator, bool approved) public virtual override {
require(operator != _msgSender(), "ERC721: approve to caller");
_operatorApprovals[_msgSender()][operator] = approved;
emit ApprovalForAll(_msgSender(), operator, approved);
}
/**
* @dev See {IERC721-isApprovedForAll}.
*/
function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
return _operatorApprovals[owner][operator];
}
/**
* @dev See {IERC721-transferFrom}.
*/
function transferFrom(address from, address to, uint256 tokenId) public virtual override {
//solhint-disable-next-line max-line-length
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
_transfer(from, to, tokenId);
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override {
safeTransferFrom(from, to, tokenId, "");
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override {
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
_safeTransfer(from, to, tokenId, _data);
}
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* `_data` is additional data, it has no specified format and it is sent in call to `to`.
*
* This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
* implement alternative mechanisms to perform token transfer, such as signature-based.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual {
_transfer(from, to, tokenId);
require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
}
/**
* @dev Returns whether `tokenId` exists.
*
* Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
*
* Tokens start existing when they are minted (`_mint`),
* and stop existing when they are burned (`_burn`).
*/
function _exists(uint256 tokenId) internal view virtual returns (bool) {
return _owners[tokenId] != address(0);
}
/**
* @dev Returns whether `spender` is allowed to manage `tokenId`.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
require(_exists(tokenId), "ERC721: operator query for nonexistent token");
address owner = ERC721.ownerOf(tokenId);
return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
}
/**
* @dev Safely mints `tokenId` and transfers it to `to`.
*
* Requirements:
*
* - `tokenId` must not exist.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function _safeMint(address to, uint256 tokenId) internal virtual {
_safeMint(to, tokenId, "");
}
/**
* @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
* forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
*/
function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual {
_mint(to, tokenId);
require(_checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
}
/**
* @dev Mints `tokenId` and transfers it to `to`.
*
* WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
*
* Requirements:
*
* - `tokenId` must not exist.
* - `to` cannot be the zero address.
*
* Emits a {Transfer} event.
*/
function _mint(address to, uint256 tokenId) internal virtual {
require(to != address(0), "ERC721: mint to the zero address");
require(!_exists(tokenId), "ERC721: token already minted");
_beforeTokenTransfer(address(0), to, tokenId);
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(address(0), to, tokenId);
}
/**
* @dev Destroys `tokenId`.
* The approval is cleared when the token is burned.
*
* Requirements:
*
* - `tokenId` must exist.
*
* Emits a {Transfer} event.
*/
function _burn(uint256 tokenId) internal virtual {
address owner = ERC721.ownerOf(tokenId);
_beforeTokenTransfer(owner, address(0), tokenId);
// Clear approvals
_approve(address(0), tokenId);
_balances[owner] -= 1;
delete _owners[tokenId];
emit Transfer(owner, address(0), tokenId);
}
/**
* @dev Transfers `tokenId` from `from` to `to`.
* As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
*
* Emits a {Transfer} event.
*/
function _transfer(address from, address to, uint256 tokenId) internal virtual {
require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
require(to != address(0), "ERC721: transfer to the zero address");
_beforeTokenTransfer(from, to, tokenId);
// Clear approvals from the previous owner
_approve(address(0), tokenId);
_balances[from] -= 1;
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(from, to, tokenId);
}
/**
* @dev Approve `to` to operate on `tokenId`
*
* Emits a {Approval} event.
*/
function _approve(address to, uint256 tokenId) internal virtual {
_tokenApprovals[tokenId] = to;
emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
}
/**
* @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
* The call is not executed if the target address is not a contract.
*
* @param from address representing the previous owner of the given token ID
* @param to target address that will receive the tokens
* @param tokenId uint256 ID of the token to be transferred
* @param _data bytes optional data to send along with the call
* @return bool whether the call correctly returned the expected magic value
*/
function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data)
private returns (bool)
{
if (to.isContract()) {
try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
return retval == IERC721Receiver(to).onERC721Received.selector;
} catch (bytes memory reason) {
if (reason.length == 0) {
revert("ERC721: transfer to non ERC721Receiver implementer");
} else {
// solhint-disable-next-line no-inline-assembly
assembly {
revert(add(32, reason), mload(reason))
}
}
}
} else {
return true;
}
}
/**
* @dev Hook that is called before any token transfer. This includes minting
* and burning.
*
* Calling conditions:
*
* - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
* transferred to `to`.
* - When `from` is zero, `tokenId` will be minted for `to`.
* - When `to` is zero, ``from``'s `tokenId` will be burned.
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { }
}
// File contracts/token/ERC721/extensions/ERC721URIStorage.sol
pragma solidity ^0.8.0;
/**
* @dev ERC721 token with storage based token URI management.
*/
abstract contract ERC721URIStorage is ERC721 {
using Strings for uint256;
// Optional mapping for token URIs
mapping (uint256 => string) private _tokenURIs;
/**
* @dev See {IERC721Metadata-tokenURI}.
*/
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token");
string memory _tokenURI = _tokenURIs[tokenId];
string memory base = _baseURI();
// If there is no base URI, return the token URI.
if (bytes(base).length == 0) {
return _tokenURI;
}
// If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).
if (bytes(_tokenURI).length > 0) {
return string(abi.encodePacked(base, _tokenURI));
}
return super.tokenURI(tokenId);
}
/**
* @dev Sets `_tokenURI` as the tokenURI of `tokenId`.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {
require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token");
_tokenURIs[tokenId] = _tokenURI;
}
/**
* @dev Destroys `tokenId`.
* The approval is cleared when the token is burned.
*
* Requirements:
*
* - `tokenId` must exist.
*
* Emits a {Transfer} event.
*/
function _burn(uint256 tokenId) internal virtual override {
super._burn(tokenId);
if (bytes(_tokenURIs[tokenId]).length != 0) {
delete _tokenURIs[tokenId];
}
}
}
// File contracts/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 () {
address msgSender = _msgSender();
_owner = msgSender;
emit OwnershipTransferred(address(0), 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 {
emit OwnershipTransferred(_owner, address(0));
_owner = address(0);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
pragma solidity ^0.8.0;
contract RunescapeLoot is ERC721URIStorage, Ownable{
event MintLoot (address indexed summoner, uint256 startWith, uint256 times);
uint256 public totalLoot;
uint256 public totalCount = 8888;
uint256 public maxBatch = 1;
uint256 public price = 0;
string public baseURI;
uint addressRegistryCount;
constructor(string memory name_, string memory symbol_, string memory baseURI_) ERC721(name_, symbol_) {
baseURI = baseURI_;
}
function totalSupply() public view virtual returns (uint256) {
return totalLoot;
}
function _baseURI() internal view virtual override returns (string memory){
return baseURI;
}
function setBaseURI(string memory _newURI) public onlyOwner {
baseURI = _newURI;
}
function setTokenURI(uint256 _tokenId, string memory _tokenURI) public onlyOwner {
_setTokenURI(_tokenId, _tokenURI);
}
function claim(uint256 _times) public {
require(_times >0 && _times <= maxBatch, "one at a time");
require(totalLoot + _times <= totalCount, "too much");
emit MintLoot(_msgSender(), totalLoot+1, _times);
for(uint256 i=0; i< _times; i++){
_mint(_msgSender(), 1 + totalLoot++);
}
}
function adminMint(uint256 _times) public onlyOwner {
emit MintLoot(_msgSender(), totalLoot+1, _times);
for(uint256 i=0; i< _times; i++){
_mint(_msgSender(), 1 + totalLoot++);
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"string","name":"baseURI_","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","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":"summoner","type":"address"},{"indexed":false,"internalType":"uint256","name":"startWith","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"times","type":"uint256"}],"name":"MintLoot","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"_times","type":"uint256"}],"name":"adminMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_times","type":"uint256"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBatch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","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":"string","name":"_newURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"string","name":"_tokenURI","type":"string"}],"name":"setTokenURI","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalLoot","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040526122b86009556001600a556000600b553480156200002157600080fd5b5060405162003c2f38038062003c2f833981810160405281019062000047919062000286565b828281600090805190602001906200006192919062000158565b5080600190805190602001906200007a92919062000158565b50505060006200008f6200015060201b60201c565b905080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35080600c90805190602001906200014692919062000158565b50505050620004c3565b600033905090565b8280546200016690620003d4565b90600052602060002090601f0160209004810192826200018a5760008555620001d6565b82601f10620001a557805160ff1916838001178555620001d6565b82800160010185558215620001d6579182015b82811115620001d5578251825591602001919060010190620001b8565b5b509050620001e59190620001e9565b5090565b5b8082111562000204576000816000905550600101620001ea565b5090565b60006200021f620002198462000368565b6200033f565b9050828152602081018484840111156200023e576200023d620004a3565b5b6200024b8482856200039e565b509392505050565b600082601f8301126200026b576200026a6200049e565b5b81516200027d84826020860162000208565b91505092915050565b600080600060608486031215620002a257620002a1620004ad565b5b600084015167ffffffffffffffff811115620002c357620002c2620004a8565b5b620002d18682870162000253565b935050602084015167ffffffffffffffff811115620002f557620002f4620004a8565b5b620003038682870162000253565b925050604084015167ffffffffffffffff811115620003275762000326620004a8565b5b620003358682870162000253565b9150509250925092565b60006200034b6200035e565b90506200035982826200040a565b919050565b6000604051905090565b600067ffffffffffffffff8211156200038657620003856200046f565b5b6200039182620004b2565b9050602081019050919050565b60005b83811015620003be578082015181840152602081019050620003a1565b83811115620003ce576000848401525b50505050565b60006002820490506001821680620003ed57607f821691505b6020821081141562000404576200040362000440565b5b50919050565b6200041582620004b2565b810181811067ffffffffffffffff821117156200043757620004366200046f565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b61375c80620004d36000396000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c806367765b87116100de578063a035b1fe11610097578063c1f2612311610071578063c1f261231461044b578063c87b56dd14610467578063e985e9c514610497578063f2fde38b146104c75761018e565b8063a035b1fe146103f5578063a22cb46514610413578063b88d4fde1461042f5761018e565b806367765b87146103435780636c0360eb1461036157806370a082311461037f578063715018a6146103af5780638da5cb5b146103b957806395d89b41146103d75761018e565b806323b872dd1161014b57806342842e0e1161012557806342842e0e146102bd57806355f804b3146102d95780636352211e146102f5578063635e99aa146103255761018e565b806323b872dd1461026757806334eafb1114610283578063379607f5146102a15761018e565b806301ffc9a71461019357806306fdde03146101c3578063081812fc146101e1578063095ea7b314610211578063162094c41461022d57806318160ddd14610249575b600080fd5b6101ad60048036038101906101a89190612516565b6104e3565b6040516101ba9190612a59565b60405180910390f35b6101cb6105c5565b6040516101d89190612a74565b60405180910390f35b6101fb60048036038101906101f691906125b9565b610657565b60405161020891906129f2565b60405180910390f35b61022b600480360381019061022691906124d6565b6106dc565b005b610247600480360381019061024291906125e6565b6107f4565b005b61025161087e565b60405161025e9190612d16565b60405180910390f35b610281600480360381019061027c91906123c0565b610888565b005b61028b6108e8565b6040516102989190612d16565b60405180910390f35b6102bb60048036038101906102b691906125b9565b6108ee565b005b6102d760048036038101906102d291906123c0565b610a4b565b005b6102f360048036038101906102ee9190612570565b610a6b565b005b61030f600480360381019061030a91906125b9565b610b01565b60405161031c91906129f2565b60405180910390f35b61032d610bb3565b60405161033a9190612d16565b60405180910390f35b61034b610bb9565b6040516103589190612d16565b60405180910390f35b610369610bbf565b6040516103769190612a74565b60405180910390f35b61039960048036038101906103949190612353565b610c4d565b6040516103a69190612d16565b60405180910390f35b6103b7610d05565b005b6103c1610e42565b6040516103ce91906129f2565b60405180910390f35b6103df610e6c565b6040516103ec9190612a74565b60405180910390f35b6103fd610efe565b60405161040a9190612d16565b60405180910390f35b61042d60048036038101906104289190612496565b610f04565b005b61044960048036038101906104449190612413565b611085565b005b610465600480360381019061046091906125b9565b6110e7565b005b610481600480360381019061047c91906125b9565b61121d565b60405161048e9190612a74565b60405180910390f35b6104b160048036038101906104ac9190612380565b61136f565b6040516104be9190612a59565b60405180910390f35b6104e160048036038101906104dc9190612353565b611403565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105ae57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105be57506105bd826115af565b5b9050919050565b6060600080546105d490612f95565b80601f016020809104026020016040519081016040528092919081815260200182805461060090612f95565b801561064d5780601f106106225761010080835404028352916020019161064d565b820191906000526020600020905b81548152906001019060200180831161063057829003601f168201915b5050505050905090565b600061066282611619565b6106a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069890612c36565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106e782610b01565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074f90612cd6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610777611685565b73ffffffffffffffffffffffffffffffffffffffff1614806107a657506107a5816107a0611685565b61136f565b5b6107e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107dc90612b76565b60405180910390fd5b6107ef838361168d565b505050565b6107fc611685565b73ffffffffffffffffffffffffffffffffffffffff1661081a610e42565b73ffffffffffffffffffffffffffffffffffffffff1614610870576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086790612c56565b60405180910390fd5b61087a8282611746565b5050565b6000600854905090565b610899610893611685565b826117ba565b6108d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cf90612cf6565b60405180910390fd5b6108e3838383611898565b505050565b60095481565b6000811180156109005750600a548111155b61093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093690612cb6565b60405180910390fd5b600954816008546109509190612e24565b1115610991576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098890612a96565b60405180910390fd5b610999611685565b73ffffffffffffffffffffffffffffffffffffffff167f7491fd4a2feb2834363c47623d8cb243dbf778855d215e4bfc495174a984599f60016008546109df9190612e24565b836040516109ee929190612d31565b60405180910390a260005b81811015610a4757610a34610a0c611685565b60086000815480929190610a1f90612ff8565b919050556001610a2f9190612e24565b611af4565b8080610a3f90612ff8565b9150506109f9565b5050565b610a6683838360405180602001604052806000815250611085565b505050565b610a73611685565b73ffffffffffffffffffffffffffffffffffffffff16610a91610e42565b73ffffffffffffffffffffffffffffffffffffffff1614610ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ade90612c56565b60405180910390fd5b80600c9080519060200190610afd929190612167565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610baa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba190612bb6565b60405180910390fd5b80915050919050565b60085481565b600a5481565b600c8054610bcc90612f95565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf890612f95565b8015610c455780601f10610c1a57610100808354040283529160200191610c45565b820191906000526020600020905b815481529060010190602001808311610c2857829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb590612b96565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d0d611685565b73ffffffffffffffffffffffffffffffffffffffff16610d2b610e42565b73ffffffffffffffffffffffffffffffffffffffff1614610d81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7890612c56565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610e7b90612f95565b80601f0160208091040260200160405190810160405280929190818152602001828054610ea790612f95565b8015610ef45780601f10610ec957610100808354040283529160200191610ef4565b820191906000526020600020905b815481529060010190602001808311610ed757829003601f168201915b5050505050905090565b600b5481565b610f0c611685565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7190612b36565b60405180910390fd5b8060056000610f87611685565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611034611685565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516110799190612a59565b60405180910390a35050565b611096611090611685565b836117ba565b6110d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cc90612cf6565b60405180910390fd5b6110e184848484611cc2565b50505050565b6110ef611685565b73ffffffffffffffffffffffffffffffffffffffff1661110d610e42565b73ffffffffffffffffffffffffffffffffffffffff1614611163576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115a90612c56565b60405180910390fd5b61116b611685565b73ffffffffffffffffffffffffffffffffffffffff167f7491fd4a2feb2834363c47623d8cb243dbf778855d215e4bfc495174a984599f60016008546111b19190612e24565b836040516111c0929190612d31565b60405180910390a260005b81811015611219576112066111de611685565b600860008154809291906111f190612ff8565b9190505560016112019190612e24565b611af4565b808061121190612ff8565b9150506111cb565b5050565b606061122882611619565b611267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125e90612c16565b60405180910390fd5b600060066000848152602001908152602001600020805461128790612f95565b80601f01602080910402602001604051908101604052809291908181526020018280546112b390612f95565b80156113005780601f106112d557610100808354040283529160200191611300565b820191906000526020600020905b8154815290600101906020018083116112e357829003601f168201915b505050505090506000611311611d1e565b905060008151141561132757819250505061136a565b60008251111561135c5780826040516020016113449291906129ce565b6040516020818303038152906040529250505061136a565b61136584611db0565b925050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61140b611685565b73ffffffffffffffffffffffffffffffffffffffff16611429610e42565b73ffffffffffffffffffffffffffffffffffffffff161461147f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147690612c56565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e690612ad6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661170083610b01565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b61174f82611619565b61178e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178590612bd6565b60405180910390fd5b806006600084815260200190815260200160002090805190602001906117b5929190612167565b505050565b60006117c582611619565b611804576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fb90612b56565b60405180910390fd5b600061180f83610b01565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061187e57508373ffffffffffffffffffffffffffffffffffffffff1661186684610657565b73ffffffffffffffffffffffffffffffffffffffff16145b8061188f575061188e818561136f565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166118b882610b01565b73ffffffffffffffffffffffffffffffffffffffff161461190e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190590612c76565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561197e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197590612b16565b60405180910390fd5b611989838383611e57565b61199460008261168d565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119e49190612eab565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a3b9190612e24565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5b90612bf6565b60405180910390fd5b611b6d81611619565b15611bad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba490612af6565b60405180910390fd5b611bb960008383611e57565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c099190612e24565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b611ccd848484611898565b611cd984848484611e5c565b611d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0f90612ab6565b60405180910390fd5b50505050565b6060600c8054611d2d90612f95565b80601f0160208091040260200160405190810160405280929190818152602001828054611d5990612f95565b8015611da65780601f10611d7b57610100808354040283529160200191611da6565b820191906000526020600020905b815481529060010190602001808311611d8957829003601f168201915b5050505050905090565b6060611dbb82611619565b611dfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df190612c96565b60405180910390fd5b6000611e04611d1e565b90506000815111611e245760405180602001604052806000815250611e4f565b80611e2e84611ff3565b604051602001611e3f9291906129ce565b6040516020818303038152906040525b915050919050565b505050565b6000611e7d8473ffffffffffffffffffffffffffffffffffffffff16612154565b15611fe6578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611ea6611685565b8786866040518563ffffffff1660e01b8152600401611ec89493929190612a0d565b602060405180830381600087803b158015611ee257600080fd5b505af1925050508015611f1357506040513d601f19601f82011682018060405250810190611f109190612543565b60015b611f96573d8060008114611f43576040519150601f19603f3d011682016040523d82523d6000602084013e611f48565b606091505b50600081511415611f8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8590612ab6565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611feb565b600190505b949350505050565b6060600082141561203b576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061214f565b600082905060005b6000821461206d57808061205690612ff8565b915050600a826120669190612e7a565b9150612043565b60008167ffffffffffffffff8111156120895761208861312e565b5b6040519080825280601f01601f1916602001820160405280156120bb5781602001600182028036833780820191505090505b5090505b60008514612148576001826120d49190612eab565b9150600a856120e39190613041565b60306120ef9190612e24565b60f81b818381518110612105576121046130ff565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856121419190612e7a565b94506120bf565b8093505050505b919050565b600080823b905060008111915050919050565b82805461217390612f95565b90600052602060002090601f01602090048101928261219557600085556121dc565b82601f106121ae57805160ff19168380011785556121dc565b828001600101855582156121dc579182015b828111156121db5782518255916020019190600101906121c0565b5b5090506121e991906121ed565b5090565b5b808211156122065760008160009055506001016121ee565b5090565b600061221d61221884612d7f565b612d5a565b90508281526020810184848401111561223957612238613162565b5b612244848285612f53565b509392505050565b600061225f61225a84612db0565b612d5a565b90508281526020810184848401111561227b5761227a613162565b5b612286848285612f53565b509392505050565b60008135905061229d816136ca565b92915050565b6000813590506122b2816136e1565b92915050565b6000813590506122c7816136f8565b92915050565b6000815190506122dc816136f8565b92915050565b600082601f8301126122f7576122f661315d565b5b813561230784826020860161220a565b91505092915050565b600082601f8301126123255761232461315d565b5b813561233584826020860161224c565b91505092915050565b60008135905061234d8161370f565b92915050565b6000602082840312156123695761236861316c565b5b60006123778482850161228e565b91505092915050565b600080604083850312156123975761239661316c565b5b60006123a58582860161228e565b92505060206123b68582860161228e565b9150509250929050565b6000806000606084860312156123d9576123d861316c565b5b60006123e78682870161228e565b93505060206123f88682870161228e565b92505060406124098682870161233e565b9150509250925092565b6000806000806080858703121561242d5761242c61316c565b5b600061243b8782880161228e565b945050602061244c8782880161228e565b935050604061245d8782880161233e565b925050606085013567ffffffffffffffff81111561247e5761247d613167565b5b61248a878288016122e2565b91505092959194509250565b600080604083850312156124ad576124ac61316c565b5b60006124bb8582860161228e565b92505060206124cc858286016122a3565b9150509250929050565b600080604083850312156124ed576124ec61316c565b5b60006124fb8582860161228e565b925050602061250c8582860161233e565b9150509250929050565b60006020828403121561252c5761252b61316c565b5b600061253a848285016122b8565b91505092915050565b6000602082840312156125595761255861316c565b5b6000612567848285016122cd565b91505092915050565b6000602082840312156125865761258561316c565b5b600082013567ffffffffffffffff8111156125a4576125a3613167565b5b6125b084828501612310565b91505092915050565b6000602082840312156125cf576125ce61316c565b5b60006125dd8482850161233e565b91505092915050565b600080604083850312156125fd576125fc61316c565b5b600061260b8582860161233e565b925050602083013567ffffffffffffffff81111561262c5761262b613167565b5b61263885828601612310565b9150509250929050565b61264b81612edf565b82525050565b61265a81612ef1565b82525050565b600061266b82612de1565b6126758185612df7565b9350612685818560208601612f62565b61268e81613171565b840191505092915050565b60006126a482612dec565b6126ae8185612e08565b93506126be818560208601612f62565b6126c781613171565b840191505092915050565b60006126dd82612dec565b6126e78185612e19565b93506126f7818560208601612f62565b80840191505092915050565b6000612710600883612e08565b915061271b82613182565b602082019050919050565b6000612733603283612e08565b915061273e826131ab565b604082019050919050565b6000612756602683612e08565b9150612761826131fa565b604082019050919050565b6000612779601c83612e08565b915061278482613249565b602082019050919050565b600061279c602483612e08565b91506127a782613272565b604082019050919050565b60006127bf601983612e08565b91506127ca826132c1565b602082019050919050565b60006127e2602c83612e08565b91506127ed826132ea565b604082019050919050565b6000612805603883612e08565b915061281082613339565b604082019050919050565b6000612828602a83612e08565b915061283382613388565b604082019050919050565b600061284b602983612e08565b9150612856826133d7565b604082019050919050565b600061286e602e83612e08565b915061287982613426565b604082019050919050565b6000612891602083612e08565b915061289c82613475565b602082019050919050565b60006128b4603183612e08565b91506128bf8261349e565b604082019050919050565b60006128d7602c83612e08565b91506128e2826134ed565b604082019050919050565b60006128fa602083612e08565b91506129058261353c565b602082019050919050565b600061291d602983612e08565b915061292882613565565b604082019050919050565b6000612940602f83612e08565b915061294b826135b4565b604082019050919050565b6000612963600d83612e08565b915061296e82613603565b602082019050919050565b6000612986602183612e08565b91506129918261362c565b604082019050919050565b60006129a9603183612e08565b91506129b48261367b565b604082019050919050565b6129c881612f49565b82525050565b60006129da82856126d2565b91506129e682846126d2565b91508190509392505050565b6000602082019050612a076000830184612642565b92915050565b6000608082019050612a226000830187612642565b612a2f6020830186612642565b612a3c60408301856129bf565b8181036060830152612a4e8184612660565b905095945050505050565b6000602082019050612a6e6000830184612651565b92915050565b60006020820190508181036000830152612a8e8184612699565b905092915050565b60006020820190508181036000830152612aaf81612703565b9050919050565b60006020820190508181036000830152612acf81612726565b9050919050565b60006020820190508181036000830152612aef81612749565b9050919050565b60006020820190508181036000830152612b0f8161276c565b9050919050565b60006020820190508181036000830152612b2f8161278f565b9050919050565b60006020820190508181036000830152612b4f816127b2565b9050919050565b60006020820190508181036000830152612b6f816127d5565b9050919050565b60006020820190508181036000830152612b8f816127f8565b9050919050565b60006020820190508181036000830152612baf8161281b565b9050919050565b60006020820190508181036000830152612bcf8161283e565b9050919050565b60006020820190508181036000830152612bef81612861565b9050919050565b60006020820190508181036000830152612c0f81612884565b9050919050565b60006020820190508181036000830152612c2f816128a7565b9050919050565b60006020820190508181036000830152612c4f816128ca565b9050919050565b60006020820190508181036000830152612c6f816128ed565b9050919050565b60006020820190508181036000830152612c8f81612910565b9050919050565b60006020820190508181036000830152612caf81612933565b9050919050565b60006020820190508181036000830152612ccf81612956565b9050919050565b60006020820190508181036000830152612cef81612979565b9050919050565b60006020820190508181036000830152612d0f8161299c565b9050919050565b6000602082019050612d2b60008301846129bf565b92915050565b6000604082019050612d4660008301856129bf565b612d5360208301846129bf565b9392505050565b6000612d64612d75565b9050612d708282612fc7565b919050565b6000604051905090565b600067ffffffffffffffff821115612d9a57612d9961312e565b5b612da382613171565b9050602081019050919050565b600067ffffffffffffffff821115612dcb57612dca61312e565b5b612dd482613171565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612e2f82612f49565b9150612e3a83612f49565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612e6f57612e6e613072565b5b828201905092915050565b6000612e8582612f49565b9150612e9083612f49565b925082612ea057612e9f6130a1565b5b828204905092915050565b6000612eb682612f49565b9150612ec183612f49565b925082821015612ed457612ed3613072565b5b828203905092915050565b6000612eea82612f29565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612f80578082015181840152602081019050612f65565b83811115612f8f576000848401525b50505050565b60006002820490506001821680612fad57607f821691505b60208210811415612fc157612fc06130d0565b5b50919050565b612fd082613171565b810181811067ffffffffffffffff82111715612fef57612fee61312e565b5b80604052505050565b600061300382612f49565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561303657613035613072565b5b600182019050919050565b600061304c82612f49565b915061305783612f49565b925082613067576130666130a1565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f746f6f206d756368000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f6f6e6520617420612074696d6500000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6136d381612edf565b81146136de57600080fd5b50565b6136ea81612ef1565b81146136f557600080fd5b50565b61370181612efd565b811461370c57600080fd5b50565b61371881612f49565b811461372357600080fd5b5056fea26469706673582212202fc7eebfb8458214bba0c5c69613ec4872f8b4f547aff567130958033ff1b37b64736f6c634300080700330000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061018e5760003560e01c806367765b87116100de578063a035b1fe11610097578063c1f2612311610071578063c1f261231461044b578063c87b56dd14610467578063e985e9c514610497578063f2fde38b146104c75761018e565b8063a035b1fe146103f5578063a22cb46514610413578063b88d4fde1461042f5761018e565b806367765b87146103435780636c0360eb1461036157806370a082311461037f578063715018a6146103af5780638da5cb5b146103b957806395d89b41146103d75761018e565b806323b872dd1161014b57806342842e0e1161012557806342842e0e146102bd57806355f804b3146102d95780636352211e146102f5578063635e99aa146103255761018e565b806323b872dd1461026757806334eafb1114610283578063379607f5146102a15761018e565b806301ffc9a71461019357806306fdde03146101c3578063081812fc146101e1578063095ea7b314610211578063162094c41461022d57806318160ddd14610249575b600080fd5b6101ad60048036038101906101a89190612516565b6104e3565b6040516101ba9190612a59565b60405180910390f35b6101cb6105c5565b6040516101d89190612a74565b60405180910390f35b6101fb60048036038101906101f691906125b9565b610657565b60405161020891906129f2565b60405180910390f35b61022b600480360381019061022691906124d6565b6106dc565b005b610247600480360381019061024291906125e6565b6107f4565b005b61025161087e565b60405161025e9190612d16565b60405180910390f35b610281600480360381019061027c91906123c0565b610888565b005b61028b6108e8565b6040516102989190612d16565b60405180910390f35b6102bb60048036038101906102b691906125b9565b6108ee565b005b6102d760048036038101906102d291906123c0565b610a4b565b005b6102f360048036038101906102ee9190612570565b610a6b565b005b61030f600480360381019061030a91906125b9565b610b01565b60405161031c91906129f2565b60405180910390f35b61032d610bb3565b60405161033a9190612d16565b60405180910390f35b61034b610bb9565b6040516103589190612d16565b60405180910390f35b610369610bbf565b6040516103769190612a74565b60405180910390f35b61039960048036038101906103949190612353565b610c4d565b6040516103a69190612d16565b60405180910390f35b6103b7610d05565b005b6103c1610e42565b6040516103ce91906129f2565b60405180910390f35b6103df610e6c565b6040516103ec9190612a74565b60405180910390f35b6103fd610efe565b60405161040a9190612d16565b60405180910390f35b61042d60048036038101906104289190612496565b610f04565b005b61044960048036038101906104449190612413565b611085565b005b610465600480360381019061046091906125b9565b6110e7565b005b610481600480360381019061047c91906125b9565b61121d565b60405161048e9190612a74565b60405180910390f35b6104b160048036038101906104ac9190612380565b61136f565b6040516104be9190612a59565b60405180910390f35b6104e160048036038101906104dc9190612353565b611403565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105ae57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105be57506105bd826115af565b5b9050919050565b6060600080546105d490612f95565b80601f016020809104026020016040519081016040528092919081815260200182805461060090612f95565b801561064d5780601f106106225761010080835404028352916020019161064d565b820191906000526020600020905b81548152906001019060200180831161063057829003601f168201915b5050505050905090565b600061066282611619565b6106a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069890612c36565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106e782610b01565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074f90612cd6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610777611685565b73ffffffffffffffffffffffffffffffffffffffff1614806107a657506107a5816107a0611685565b61136f565b5b6107e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107dc90612b76565b60405180910390fd5b6107ef838361168d565b505050565b6107fc611685565b73ffffffffffffffffffffffffffffffffffffffff1661081a610e42565b73ffffffffffffffffffffffffffffffffffffffff1614610870576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086790612c56565b60405180910390fd5b61087a8282611746565b5050565b6000600854905090565b610899610893611685565b826117ba565b6108d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cf90612cf6565b60405180910390fd5b6108e3838383611898565b505050565b60095481565b6000811180156109005750600a548111155b61093f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093690612cb6565b60405180910390fd5b600954816008546109509190612e24565b1115610991576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098890612a96565b60405180910390fd5b610999611685565b73ffffffffffffffffffffffffffffffffffffffff167f7491fd4a2feb2834363c47623d8cb243dbf778855d215e4bfc495174a984599f60016008546109df9190612e24565b836040516109ee929190612d31565b60405180910390a260005b81811015610a4757610a34610a0c611685565b60086000815480929190610a1f90612ff8565b919050556001610a2f9190612e24565b611af4565b8080610a3f90612ff8565b9150506109f9565b5050565b610a6683838360405180602001604052806000815250611085565b505050565b610a73611685565b73ffffffffffffffffffffffffffffffffffffffff16610a91610e42565b73ffffffffffffffffffffffffffffffffffffffff1614610ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ade90612c56565b60405180910390fd5b80600c9080519060200190610afd929190612167565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610baa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba190612bb6565b60405180910390fd5b80915050919050565b60085481565b600a5481565b600c8054610bcc90612f95565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf890612f95565b8015610c455780601f10610c1a57610100808354040283529160200191610c45565b820191906000526020600020905b815481529060010190602001808311610c2857829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb590612b96565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d0d611685565b73ffffffffffffffffffffffffffffffffffffffff16610d2b610e42565b73ffffffffffffffffffffffffffffffffffffffff1614610d81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7890612c56565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610e7b90612f95565b80601f0160208091040260200160405190810160405280929190818152602001828054610ea790612f95565b8015610ef45780601f10610ec957610100808354040283529160200191610ef4565b820191906000526020600020905b815481529060010190602001808311610ed757829003601f168201915b5050505050905090565b600b5481565b610f0c611685565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7190612b36565b60405180910390fd5b8060056000610f87611685565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611034611685565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516110799190612a59565b60405180910390a35050565b611096611090611685565b836117ba565b6110d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cc90612cf6565b60405180910390fd5b6110e184848484611cc2565b50505050565b6110ef611685565b73ffffffffffffffffffffffffffffffffffffffff1661110d610e42565b73ffffffffffffffffffffffffffffffffffffffff1614611163576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115a90612c56565b60405180910390fd5b61116b611685565b73ffffffffffffffffffffffffffffffffffffffff167f7491fd4a2feb2834363c47623d8cb243dbf778855d215e4bfc495174a984599f60016008546111b19190612e24565b836040516111c0929190612d31565b60405180910390a260005b81811015611219576112066111de611685565b600860008154809291906111f190612ff8565b9190505560016112019190612e24565b611af4565b808061121190612ff8565b9150506111cb565b5050565b606061122882611619565b611267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125e90612c16565b60405180910390fd5b600060066000848152602001908152602001600020805461128790612f95565b80601f01602080910402602001604051908101604052809291908181526020018280546112b390612f95565b80156113005780601f106112d557610100808354040283529160200191611300565b820191906000526020600020905b8154815290600101906020018083116112e357829003601f168201915b505050505090506000611311611d1e565b905060008151141561132757819250505061136a565b60008251111561135c5780826040516020016113449291906129ce565b6040516020818303038152906040529250505061136a565b61136584611db0565b925050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61140b611685565b73ffffffffffffffffffffffffffffffffffffffff16611429610e42565b73ffffffffffffffffffffffffffffffffffffffff161461147f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147690612c56565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e690612ad6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661170083610b01565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b61174f82611619565b61178e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178590612bd6565b60405180910390fd5b806006600084815260200190815260200160002090805190602001906117b5929190612167565b505050565b60006117c582611619565b611804576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fb90612b56565b60405180910390fd5b600061180f83610b01565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061187e57508373ffffffffffffffffffffffffffffffffffffffff1661186684610657565b73ffffffffffffffffffffffffffffffffffffffff16145b8061188f575061188e818561136f565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166118b882610b01565b73ffffffffffffffffffffffffffffffffffffffff161461190e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190590612c76565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561197e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197590612b16565b60405180910390fd5b611989838383611e57565b61199460008261168d565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119e49190612eab565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a3b9190612e24565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5b90612bf6565b60405180910390fd5b611b6d81611619565b15611bad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba490612af6565b60405180910390fd5b611bb960008383611e57565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c099190612e24565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b611ccd848484611898565b611cd984848484611e5c565b611d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0f90612ab6565b60405180910390fd5b50505050565b6060600c8054611d2d90612f95565b80601f0160208091040260200160405190810160405280929190818152602001828054611d5990612f95565b8015611da65780601f10611d7b57610100808354040283529160200191611da6565b820191906000526020600020905b815481529060010190602001808311611d8957829003601f168201915b5050505050905090565b6060611dbb82611619565b611dfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df190612c96565b60405180910390fd5b6000611e04611d1e565b90506000815111611e245760405180602001604052806000815250611e4f565b80611e2e84611ff3565b604051602001611e3f9291906129ce565b6040516020818303038152906040525b915050919050565b505050565b6000611e7d8473ffffffffffffffffffffffffffffffffffffffff16612154565b15611fe6578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611ea6611685565b8786866040518563ffffffff1660e01b8152600401611ec89493929190612a0d565b602060405180830381600087803b158015611ee257600080fd5b505af1925050508015611f1357506040513d601f19601f82011682018060405250810190611f109190612543565b60015b611f96573d8060008114611f43576040519150601f19603f3d011682016040523d82523d6000602084013e611f48565b606091505b50600081511415611f8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8590612ab6565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611feb565b600190505b949350505050565b6060600082141561203b576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061214f565b600082905060005b6000821461206d57808061205690612ff8565b915050600a826120669190612e7a565b9150612043565b60008167ffffffffffffffff8111156120895761208861312e565b5b6040519080825280601f01601f1916602001820160405280156120bb5781602001600182028036833780820191505090505b5090505b60008514612148576001826120d49190612eab565b9150600a856120e39190613041565b60306120ef9190612e24565b60f81b818381518110612105576121046130ff565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856121419190612e7a565b94506120bf565b8093505050505b919050565b600080823b905060008111915050919050565b82805461217390612f95565b90600052602060002090601f01602090048101928261219557600085556121dc565b82601f106121ae57805160ff19168380011785556121dc565b828001600101855582156121dc579182015b828111156121db5782518255916020019190600101906121c0565b5b5090506121e991906121ed565b5090565b5b808211156122065760008160009055506001016121ee565b5090565b600061221d61221884612d7f565b612d5a565b90508281526020810184848401111561223957612238613162565b5b612244848285612f53565b509392505050565b600061225f61225a84612db0565b612d5a565b90508281526020810184848401111561227b5761227a613162565b5b612286848285612f53565b509392505050565b60008135905061229d816136ca565b92915050565b6000813590506122b2816136e1565b92915050565b6000813590506122c7816136f8565b92915050565b6000815190506122dc816136f8565b92915050565b600082601f8301126122f7576122f661315d565b5b813561230784826020860161220a565b91505092915050565b600082601f8301126123255761232461315d565b5b813561233584826020860161224c565b91505092915050565b60008135905061234d8161370f565b92915050565b6000602082840312156123695761236861316c565b5b60006123778482850161228e565b91505092915050565b600080604083850312156123975761239661316c565b5b60006123a58582860161228e565b92505060206123b68582860161228e565b9150509250929050565b6000806000606084860312156123d9576123d861316c565b5b60006123e78682870161228e565b93505060206123f88682870161228e565b92505060406124098682870161233e565b9150509250925092565b6000806000806080858703121561242d5761242c61316c565b5b600061243b8782880161228e565b945050602061244c8782880161228e565b935050604061245d8782880161233e565b925050606085013567ffffffffffffffff81111561247e5761247d613167565b5b61248a878288016122e2565b91505092959194509250565b600080604083850312156124ad576124ac61316c565b5b60006124bb8582860161228e565b92505060206124cc858286016122a3565b9150509250929050565b600080604083850312156124ed576124ec61316c565b5b60006124fb8582860161228e565b925050602061250c8582860161233e565b9150509250929050565b60006020828403121561252c5761252b61316c565b5b600061253a848285016122b8565b91505092915050565b6000602082840312156125595761255861316c565b5b6000612567848285016122cd565b91505092915050565b6000602082840312156125865761258561316c565b5b600082013567ffffffffffffffff8111156125a4576125a3613167565b5b6125b084828501612310565b91505092915050565b6000602082840312156125cf576125ce61316c565b5b60006125dd8482850161233e565b91505092915050565b600080604083850312156125fd576125fc61316c565b5b600061260b8582860161233e565b925050602083013567ffffffffffffffff81111561262c5761262b613167565b5b61263885828601612310565b9150509250929050565b61264b81612edf565b82525050565b61265a81612ef1565b82525050565b600061266b82612de1565b6126758185612df7565b9350612685818560208601612f62565b61268e81613171565b840191505092915050565b60006126a482612dec565b6126ae8185612e08565b93506126be818560208601612f62565b6126c781613171565b840191505092915050565b60006126dd82612dec565b6126e78185612e19565b93506126f7818560208601612f62565b80840191505092915050565b6000612710600883612e08565b915061271b82613182565b602082019050919050565b6000612733603283612e08565b915061273e826131ab565b604082019050919050565b6000612756602683612e08565b9150612761826131fa565b604082019050919050565b6000612779601c83612e08565b915061278482613249565b602082019050919050565b600061279c602483612e08565b91506127a782613272565b604082019050919050565b60006127bf601983612e08565b91506127ca826132c1565b602082019050919050565b60006127e2602c83612e08565b91506127ed826132ea565b604082019050919050565b6000612805603883612e08565b915061281082613339565b604082019050919050565b6000612828602a83612e08565b915061283382613388565b604082019050919050565b600061284b602983612e08565b9150612856826133d7565b604082019050919050565b600061286e602e83612e08565b915061287982613426565b604082019050919050565b6000612891602083612e08565b915061289c82613475565b602082019050919050565b60006128b4603183612e08565b91506128bf8261349e565b604082019050919050565b60006128d7602c83612e08565b91506128e2826134ed565b604082019050919050565b60006128fa602083612e08565b91506129058261353c565b602082019050919050565b600061291d602983612e08565b915061292882613565565b604082019050919050565b6000612940602f83612e08565b915061294b826135b4565b604082019050919050565b6000612963600d83612e08565b915061296e82613603565b602082019050919050565b6000612986602183612e08565b91506129918261362c565b604082019050919050565b60006129a9603183612e08565b91506129b48261367b565b604082019050919050565b6129c881612f49565b82525050565b60006129da82856126d2565b91506129e682846126d2565b91508190509392505050565b6000602082019050612a076000830184612642565b92915050565b6000608082019050612a226000830187612642565b612a2f6020830186612642565b612a3c60408301856129bf565b8181036060830152612a4e8184612660565b905095945050505050565b6000602082019050612a6e6000830184612651565b92915050565b60006020820190508181036000830152612a8e8184612699565b905092915050565b60006020820190508181036000830152612aaf81612703565b9050919050565b60006020820190508181036000830152612acf81612726565b9050919050565b60006020820190508181036000830152612aef81612749565b9050919050565b60006020820190508181036000830152612b0f8161276c565b9050919050565b60006020820190508181036000830152612b2f8161278f565b9050919050565b60006020820190508181036000830152612b4f816127b2565b9050919050565b60006020820190508181036000830152612b6f816127d5565b9050919050565b60006020820190508181036000830152612b8f816127f8565b9050919050565b60006020820190508181036000830152612baf8161281b565b9050919050565b60006020820190508181036000830152612bcf8161283e565b9050919050565b60006020820190508181036000830152612bef81612861565b9050919050565b60006020820190508181036000830152612c0f81612884565b9050919050565b60006020820190508181036000830152612c2f816128a7565b9050919050565b60006020820190508181036000830152612c4f816128ca565b9050919050565b60006020820190508181036000830152612c6f816128ed565b9050919050565b60006020820190508181036000830152612c8f81612910565b9050919050565b60006020820190508181036000830152612caf81612933565b9050919050565b60006020820190508181036000830152612ccf81612956565b9050919050565b60006020820190508181036000830152612cef81612979565b9050919050565b60006020820190508181036000830152612d0f8161299c565b9050919050565b6000602082019050612d2b60008301846129bf565b92915050565b6000604082019050612d4660008301856129bf565b612d5360208301846129bf565b9392505050565b6000612d64612d75565b9050612d708282612fc7565b919050565b6000604051905090565b600067ffffffffffffffff821115612d9a57612d9961312e565b5b612da382613171565b9050602081019050919050565b600067ffffffffffffffff821115612dcb57612dca61312e565b5b612dd482613171565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612e2f82612f49565b9150612e3a83612f49565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612e6f57612e6e613072565b5b828201905092915050565b6000612e8582612f49565b9150612e9083612f49565b925082612ea057612e9f6130a1565b5b828204905092915050565b6000612eb682612f49565b9150612ec183612f49565b925082821015612ed457612ed3613072565b5b828203905092915050565b6000612eea82612f29565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612f80578082015181840152602081019050612f65565b83811115612f8f576000848401525b50505050565b60006002820490506001821680612fad57607f821691505b60208210811415612fc157612fc06130d0565b5b50919050565b612fd082613171565b810181811067ffffffffffffffff82111715612fef57612fee61312e565b5b80604052505050565b600061300382612f49565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561303657613035613072565b5b600182019050919050565b600061304c82612f49565b915061305783612f49565b925082613067576130666130a1565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f746f6f206d756368000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f6f6e6520617420612074696d6500000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6136d381612edf565b81146136de57600080fd5b50565b6136ea81612ef1565b81146136f557600080fd5b50565b61370181612efd565b811461370c57600080fd5b50565b61371881612f49565b811461372357600080fd5b5056fea26469706673582212202fc7eebfb8458214bba0c5c69613ec4872f8b4f547aff567130958033ff1b37b64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name_ (string):
Arg [1] : symbol_ (string):
Arg [2] : baseURI_ (string):
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
36960:1592:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20852:292;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21787:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23255:222;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22789:399;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37804:133;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37475:96;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24150:306;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37146:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37955:343;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24528:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37696:96;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21480:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37115:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37186:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37252:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21209:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36364:148;;;:::i;:::-;;35711:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21957:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37221:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23550:296;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24751:285;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38311:224;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33121:682;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23918:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36668:244;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20852:292;20954:4;20993:25;20978:40;;;:11;:40;;;;:105;;;;21050:33;21035:48;;;:11;:48;;;;20978:105;:158;;;;21100:36;21124:11;21100:23;:36::i;:::-;20978:158;20971:165;;20852:292;;;:::o;21787:100::-;21841:13;21874:5;21867:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21787:100;:::o;23255:222::-;23331:7;23359:16;23367:7;23359;:16::i;:::-;23351:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23445:15;:24;23461:7;23445:24;;;;;;;;;;;;;;;;;;;;;23438:31;;23255:222;;;:::o;22789:399::-;22870:13;22886:23;22901:7;22886:14;:23::i;:::-;22870:39;;22934:5;22928:11;;:2;:11;;;;22920:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23015:5;22999:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23024:37;23041:5;23048:12;:10;:12::i;:::-;23024:16;:37::i;:::-;22999:62;22991:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;23159:21;23168:2;23172:7;23159:8;:21::i;:::-;22859:329;22789:399;;:::o;37804:133::-;35943:12;:10;:12::i;:::-;35932:23;;:7;:5;:7::i;:::-;:23;;;35924:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37896:33:::1;37909:8;37919:9;37896:12;:33::i;:::-;37804:133:::0;;:::o;37475:96::-;37527:7;37554:9;;37547:16;;37475:96;:::o;24150:306::-;24311:41;24330:12;:10;:12::i;:::-;24344:7;24311:18;:41::i;:::-;24303:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24420:28;24430:4;24436:2;24440:7;24420:9;:28::i;:::-;24150:306;;;:::o;37146:32::-;;;;:::o;37955:343::-;38021:1;38013:6;:9;:31;;;;;38036:8;;38026:6;:18;;38013:31;38005:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;38103:10;;38093:6;38081:9;;:18;;;;:::i;:::-;:32;;38073:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;38151:12;:10;:12::i;:::-;38142:43;;;38175:1;38165:9;;:11;;;;:::i;:::-;38178:6;38142:43;;;;;;;:::i;:::-;;;;;;;;38200:9;38196:95;38216:6;38213:1;:9;38196:95;;;38243:36;38249:12;:10;:12::i;:::-;38267:9;;:11;;;;;;;;;:::i;:::-;;;;;38263:1;:15;;;;:::i;:::-;38243:5;:36::i;:::-;38224:3;;;;;:::i;:::-;;;;38196:95;;;;37955:343;:::o;24528:151::-;24632:39;24649:4;24655:2;24659:7;24632:39;;;;;;;;;;;;:16;:39::i;:::-;24528:151;;;:::o;37696:96::-;35943:12;:10;:12::i;:::-;35932:23;;:7;:5;:7::i;:::-;:23;;;35924:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37777:7:::1;37767;:17;;;;;;;;;;;;:::i;:::-;;37696:96:::0;:::o;21480:239::-;21552:7;21572:13;21588:7;:16;21596:7;21588:16;;;;;;;;;;;;;;;;;;;;;21572:32;;21640:1;21623:19;;:5;:19;;;;21615:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21706:5;21699:12;;;21480:239;;;:::o;37115:24::-;;;;:::o;37186:27::-;;;;:::o;37252:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21209:208::-;21281:7;21326:1;21309:19;;:5;:19;;;;21301:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21393:9;:16;21403:5;21393:16;;;;;;;;;;;;;;;;21386:23;;21209:208;;;:::o;36364:148::-;35943:12;:10;:12::i;:::-;35932:23;;:7;:5;:7::i;:::-;:23;;;35924:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36471:1:::1;36434:40;;36455:6;;;;;;;;;;;36434:40;;;;;;;;;;;;36502:1;36485:6;;:19;;;;;;;;;;;;;;;;;;36364:148::o:0;35711:87::-;35757:7;35784:6;;;;;;;;;;;35777:13;;35711:87;:::o;21957:104::-;22013:13;22046:7;22039:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21957:104;:::o;37221:24::-;;;;:::o;23550:296::-;23665:12;:10;:12::i;:::-;23653:24;;:8;:24;;;;23645:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23766:8;23721:18;:32;23740:12;:10;:12::i;:::-;23721:32;;;;;;;;;;;;;;;:42;23754:8;23721:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;23819:8;23790:48;;23805:12;:10;:12::i;:::-;23790:48;;;23829:8;23790:48;;;;;;:::i;:::-;;;;;;;;23550:296;;:::o;24751:285::-;24883:41;24902:12;:10;:12::i;:::-;24916:7;24883:18;:41::i;:::-;24875:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24989:39;25003:4;25009:2;25013:7;25022:5;24989:13;:39::i;:::-;24751:285;;;;:::o;38311:224::-;35943:12;:10;:12::i;:::-;35932:23;;:7;:5;:7::i;:::-;:23;;;35924:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38388:12:::1;:10;:12::i;:::-;38379:43;;;38412:1;38402:9;;:11;;;;:::i;:::-;38415:6;38379:43;;;;;;;:::i;:::-;;;;;;;;38437:9;38433:95;38453:6;38450:1;:9;38433:95;;;38480:36;38486:12;:10;:12::i;:::-;38504:9;;:11;;;;;;;;;:::i;:::-;;;;;38500:1;:15;;;;:::i;:::-;38480:5;:36::i;:::-;38461:3;;;;;:::i;:::-;;;;38433:95;;;;38311:224:::0;:::o;33121:682::-;33194:13;33228:16;33236:7;33228;:16::i;:::-;33220:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;33312:23;33338:10;:19;33349:7;33338:19;;;;;;;;;;;33312:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33368:18;33389:10;:8;:10::i;:::-;33368:31;;33498:1;33482:4;33476:18;:23;33472:72;;;33523:9;33516:16;;;;;;33472:72;33674:1;33654:9;33648:23;:27;33644:108;;;33723:4;33729:9;33706:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;33692:48;;;;;;33644:108;33772:23;33787:7;33772:14;:23::i;:::-;33765:30;;;;33121:682;;;;:::o;23918:164::-;24015:4;24039:18;:25;24058:5;24039:25;;;;;;;;;;;;;;;:35;24065:8;24039:35;;;;;;;;;;;;;;;;;;;;;;;;;24032:42;;23918:164;;;;:::o;36668:244::-;35943:12;:10;:12::i;:::-;35932:23;;:7;:5;:7::i;:::-;:23;;;35924:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36777:1:::1;36757:22;;:8;:22;;;;36749:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;36867:8;36838:38;;36859:6;;;;;;;;;;;36838:38;;;;;;;;;;;;36896:8;36887:6;;:17;;;;;;;;;;;;;;;;;;36668:244:::0;:::o;19345:157::-;19430:4;19469:25;19454:40;;;:11;:40;;;;19447:47;;19345:157;;;:::o;26505:127::-;26570:4;26622:1;26594:30;;:7;:16;26602:7;26594:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26587:37;;26505:127;;;:::o;16145:98::-;16198:7;16225:10;16218:17;;16145:98;:::o;30400:174::-;30502:2;30475:15;:24;30491:7;30475:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30558:7;30554:2;30520:46;;30529:23;30544:7;30529:14;:23::i;:::-;30520:46;;;;;;;;;;;;30400:174;;:::o;33960:217::-;34060:16;34068:7;34060;:16::i;:::-;34052:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;34160:9;34138:10;:19;34149:7;34138:19;;;;;;;;;;;:31;;;;;;;;;;;;:::i;:::-;;33960:217;;:::o;26800:348::-;26893:4;26918:16;26926:7;26918;:16::i;:::-;26910:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26994:13;27010:23;27025:7;27010:14;:23::i;:::-;26994:39;;27063:5;27052:16;;:7;:16;;;:51;;;;27096:7;27072:31;;:20;27084:7;27072:11;:20::i;:::-;:31;;;27052:51;:87;;;;27107:32;27124:5;27131:7;27107:16;:32::i;:::-;27052:87;27044:96;;;26800:348;;;;:::o;29733:548::-;29858:4;29831:31;;:23;29846:7;29831:14;:23::i;:::-;:31;;;29823:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;29941:1;29927:16;;:2;:16;;;;29919:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;29998:39;30019:4;30025:2;30029:7;29998:20;:39::i;:::-;30103:29;30120:1;30124:7;30103:8;:29::i;:::-;30165:1;30146:9;:15;30156:4;30146:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30194:1;30177:9;:13;30187:2;30177:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30225:2;30206:7;:16;30214:7;30206:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30265:7;30261:2;30246:27;;30255:4;30246:27;;;;;;;;;;;;29733:548;;;:::o;28416:385::-;28510:1;28496:16;;:2;:16;;;;28488:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28569:16;28577:7;28569;:16::i;:::-;28568:17;28560:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28632:45;28661:1;28665:2;28669:7;28632:20;:45::i;:::-;28708:1;28691:9;:13;28701:2;28691:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28739:2;28720:7;:16;28728:7;28720:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28785:7;28781:2;28760:33;;28777:1;28760:33;;;;;;;;;;;;28416:385;;:::o;25919:272::-;26033:28;26043:4;26049:2;26053:7;26033:9;:28::i;:::-;26080:48;26103:4;26109:2;26113:7;26122:5;26080:22;:48::i;:::-;26072:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25919:272;;;;:::o;37580:107::-;37640:13;37672:7;37665:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37580:107;:::o;22133:361::-;22206:13;22240:16;22248:7;22240;:16::i;:::-;22232:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;22322:21;22346:10;:8;:10::i;:::-;22322:34;;22398:1;22380:7;22374:21;:25;:112;;;;;;;;;;;;;;;;;22439:7;22448:18;:7;:16;:18::i;:::-;22422:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22374:112;22367:119;;;22133:361;;;:::o;32597:93::-;;;;:::o;31140:843::-;31261:4;31287:15;:2;:13;;;:15::i;:::-;31283:693;;;31339:2;31323:36;;;31360:12;:10;:12::i;:::-;31374:4;31380:7;31389:5;31323:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31319:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31586:1;31569:6;:13;:18;31565:341;;;31612:60;;;;;;;;;;:::i;:::-;;;;;;;;31565:341;31856:6;31850:13;31841:6;31837:2;31833:15;31826:38;31319:602;31456:45;;;31446:55;;;:6;:55;;;;31439:62;;;;;31283:693;31960:4;31953:11;;31140:843;;;;;;;:::o;16795:724::-;16851:13;17082:1;17073:5;:10;17069:53;;;17100:10;;;;;;;;;;;;;;;;;;;;;17069:53;17132:12;17147:5;17132:20;;17163:14;17188:78;17203:1;17195:4;:9;17188:78;;17221:8;;;;;:::i;:::-;;;;17252:2;17244:10;;;;;:::i;:::-;;;17188:78;;;17276:19;17308:6;17298:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17276:39;;17326:154;17342:1;17333:5;:10;17326:154;;17370:1;17360:11;;;;;:::i;:::-;;;17437:2;17429:5;:10;;;;:::i;:::-;17416:2;:24;;;;:::i;:::-;17403:39;;17386:6;17393;17386:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;17466:2;17457:11;;;;;:::i;:::-;;;17326:154;;;17504:6;17490:21;;;;;16795:724;;;;:::o;8253:423::-;8313:4;8522:12;8633:7;8621:20;8613:28;;8667:1;8660:4;:8;8653:15;;;8253:423;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:327::-;5678:6;5727:2;5715:9;5706:7;5702:23;5698:32;5695:119;;;5733:79;;:::i;:::-;5695:119;5853:1;5878:52;5922:7;5913:6;5902:9;5898:22;5878:52;:::i;:::-;5868:62;;5824:116;5620:327;;;;:::o;5953:349::-;6022:6;6071:2;6059:9;6050:7;6046:23;6042:32;6039:119;;;6077:79;;:::i;:::-;6039:119;6197:1;6222:63;6277:7;6268:6;6257:9;6253:22;6222:63;:::i;:::-;6212:73;;6168:127;5953:349;;;;:::o;6308:509::-;6377:6;6426:2;6414:9;6405:7;6401:23;6397:32;6394:119;;;6432:79;;:::i;:::-;6394:119;6580:1;6569:9;6565:17;6552:31;6610:18;6602:6;6599:30;6596:117;;;6632:79;;:::i;:::-;6596:117;6737:63;6792:7;6783:6;6772:9;6768:22;6737:63;:::i;:::-;6727:73;;6523:287;6308:509;;;;:::o;6823:329::-;6882:6;6931:2;6919:9;6910:7;6906:23;6902:32;6899:119;;;6937:79;;:::i;:::-;6899:119;7057:1;7082:53;7127:7;7118:6;7107:9;7103:22;7082:53;:::i;:::-;7072:63;;7028:117;6823:329;;;;:::o;7158:654::-;7236:6;7244;7293:2;7281:9;7272:7;7268:23;7264:32;7261:119;;;7299:79;;:::i;:::-;7261:119;7419:1;7444:53;7489:7;7480:6;7469:9;7465:22;7444:53;:::i;:::-;7434:63;;7390:117;7574:2;7563:9;7559:18;7546:32;7605:18;7597:6;7594:30;7591:117;;;7627:79;;:::i;:::-;7591:117;7732:63;7787:7;7778:6;7767:9;7763:22;7732:63;:::i;:::-;7722:73;;7517:288;7158:654;;;;;:::o;7818:118::-;7905:24;7923:5;7905:24;:::i;:::-;7900:3;7893:37;7818:118;;:::o;7942:109::-;8023:21;8038:5;8023:21;:::i;:::-;8018:3;8011:34;7942:109;;:::o;8057:360::-;8143:3;8171:38;8203:5;8171:38;:::i;:::-;8225:70;8288:6;8283:3;8225:70;:::i;:::-;8218:77;;8304:52;8349:6;8344:3;8337:4;8330:5;8326:16;8304:52;:::i;:::-;8381:29;8403:6;8381:29;:::i;:::-;8376:3;8372:39;8365:46;;8147:270;8057:360;;;;:::o;8423:364::-;8511:3;8539:39;8572:5;8539:39;:::i;:::-;8594:71;8658:6;8653:3;8594:71;:::i;:::-;8587:78;;8674:52;8719:6;8714:3;8707:4;8700:5;8696:16;8674:52;:::i;:::-;8751:29;8773:6;8751:29;:::i;:::-;8746:3;8742:39;8735:46;;8515:272;8423:364;;;;:::o;8793:377::-;8899:3;8927:39;8960:5;8927:39;:::i;:::-;8982:89;9064:6;9059:3;8982:89;:::i;:::-;8975:96;;9080:52;9125:6;9120:3;9113:4;9106:5;9102:16;9080:52;:::i;:::-;9157:6;9152:3;9148:16;9141:23;;8903:267;8793:377;;;;:::o;9176:365::-;9318:3;9339:66;9403:1;9398:3;9339:66;:::i;:::-;9332:73;;9414:93;9503:3;9414:93;:::i;:::-;9532:2;9527:3;9523:12;9516:19;;9176:365;;;:::o;9547:366::-;9689:3;9710:67;9774:2;9769:3;9710:67;:::i;:::-;9703:74;;9786:93;9875:3;9786:93;:::i;:::-;9904:2;9899:3;9895:12;9888:19;;9547:366;;;:::o;9919:::-;10061:3;10082:67;10146:2;10141:3;10082:67;:::i;:::-;10075:74;;10158:93;10247:3;10158:93;:::i;:::-;10276:2;10271:3;10267:12;10260:19;;9919:366;;;:::o;10291:::-;10433:3;10454:67;10518:2;10513:3;10454:67;:::i;:::-;10447:74;;10530:93;10619:3;10530:93;:::i;:::-;10648:2;10643:3;10639:12;10632:19;;10291:366;;;:::o;10663:::-;10805:3;10826:67;10890:2;10885:3;10826:67;:::i;:::-;10819:74;;10902:93;10991:3;10902:93;:::i;:::-;11020:2;11015:3;11011:12;11004:19;;10663:366;;;:::o;11035:::-;11177:3;11198:67;11262:2;11257:3;11198:67;:::i;:::-;11191:74;;11274:93;11363:3;11274:93;:::i;:::-;11392:2;11387:3;11383:12;11376:19;;11035:366;;;:::o;11407:::-;11549:3;11570:67;11634:2;11629:3;11570:67;:::i;:::-;11563:74;;11646:93;11735:3;11646:93;:::i;:::-;11764:2;11759:3;11755:12;11748:19;;11407:366;;;:::o;11779:::-;11921:3;11942:67;12006:2;12001:3;11942:67;:::i;:::-;11935:74;;12018:93;12107:3;12018:93;:::i;:::-;12136:2;12131:3;12127:12;12120:19;;11779:366;;;:::o;12151:::-;12293:3;12314:67;12378:2;12373:3;12314:67;:::i;:::-;12307:74;;12390:93;12479:3;12390:93;:::i;:::-;12508:2;12503:3;12499:12;12492:19;;12151:366;;;:::o;12523:::-;12665:3;12686:67;12750:2;12745:3;12686:67;:::i;:::-;12679:74;;12762:93;12851:3;12762:93;:::i;:::-;12880:2;12875:3;12871:12;12864:19;;12523:366;;;:::o;12895:::-;13037:3;13058:67;13122:2;13117:3;13058:67;:::i;:::-;13051:74;;13134:93;13223:3;13134:93;:::i;:::-;13252:2;13247:3;13243:12;13236:19;;12895:366;;;:::o;13267:::-;13409:3;13430:67;13494:2;13489:3;13430:67;:::i;:::-;13423:74;;13506:93;13595:3;13506:93;:::i;:::-;13624:2;13619:3;13615:12;13608:19;;13267:366;;;:::o;13639:::-;13781:3;13802:67;13866:2;13861:3;13802:67;:::i;:::-;13795:74;;13878:93;13967:3;13878:93;:::i;:::-;13996:2;13991:3;13987:12;13980:19;;13639:366;;;:::o;14011:::-;14153:3;14174:67;14238:2;14233:3;14174:67;:::i;:::-;14167:74;;14250:93;14339:3;14250:93;:::i;:::-;14368:2;14363:3;14359:12;14352:19;;14011:366;;;:::o;14383:::-;14525:3;14546:67;14610:2;14605:3;14546:67;:::i;:::-;14539:74;;14622:93;14711:3;14622:93;:::i;:::-;14740:2;14735:3;14731:12;14724:19;;14383:366;;;:::o;14755:::-;14897:3;14918:67;14982:2;14977:3;14918:67;:::i;:::-;14911:74;;14994:93;15083:3;14994:93;:::i;:::-;15112:2;15107:3;15103:12;15096:19;;14755:366;;;:::o;15127:::-;15269:3;15290:67;15354:2;15349:3;15290:67;:::i;:::-;15283:74;;15366:93;15455:3;15366:93;:::i;:::-;15484:2;15479:3;15475:12;15468:19;;15127:366;;;:::o;15499:::-;15641:3;15662:67;15726:2;15721:3;15662:67;:::i;:::-;15655:74;;15738:93;15827:3;15738:93;:::i;:::-;15856:2;15851:3;15847:12;15840:19;;15499:366;;;:::o;15871:::-;16013:3;16034:67;16098:2;16093:3;16034:67;:::i;:::-;16027:74;;16110:93;16199:3;16110:93;:::i;:::-;16228:2;16223:3;16219:12;16212:19;;15871:366;;;:::o;16243:::-;16385:3;16406:67;16470:2;16465:3;16406:67;:::i;:::-;16399:74;;16482:93;16571:3;16482:93;:::i;:::-;16600:2;16595:3;16591:12;16584:19;;16243:366;;;:::o;16615:118::-;16702:24;16720:5;16702:24;:::i;:::-;16697:3;16690:37;16615:118;;:::o;16739:435::-;16919:3;16941:95;17032:3;17023:6;16941:95;:::i;:::-;16934:102;;17053:95;17144:3;17135:6;17053:95;:::i;:::-;17046:102;;17165:3;17158:10;;16739:435;;;;;:::o;17180:222::-;17273:4;17311:2;17300:9;17296:18;17288:26;;17324:71;17392:1;17381:9;17377:17;17368:6;17324:71;:::i;:::-;17180:222;;;;:::o;17408:640::-;17603:4;17641:3;17630:9;17626:19;17618:27;;17655:71;17723:1;17712:9;17708:17;17699:6;17655:71;:::i;:::-;17736:72;17804:2;17793:9;17789:18;17780:6;17736:72;:::i;:::-;17818;17886:2;17875:9;17871:18;17862:6;17818:72;:::i;:::-;17937:9;17931:4;17927:20;17922:2;17911:9;17907:18;17900:48;17965:76;18036:4;18027:6;17965:76;:::i;:::-;17957:84;;17408:640;;;;;;;:::o;18054:210::-;18141:4;18179:2;18168:9;18164:18;18156:26;;18192:65;18254:1;18243:9;18239:17;18230:6;18192:65;:::i;:::-;18054:210;;;;:::o;18270:313::-;18383:4;18421:2;18410:9;18406:18;18398:26;;18470:9;18464:4;18460:20;18456:1;18445:9;18441:17;18434:47;18498:78;18571:4;18562:6;18498:78;:::i;:::-;18490:86;;18270:313;;;;:::o;18589:419::-;18755:4;18793:2;18782:9;18778:18;18770:26;;18842:9;18836:4;18832:20;18828:1;18817:9;18813:17;18806:47;18870:131;18996:4;18870:131;:::i;:::-;18862:139;;18589:419;;;:::o;19014:::-;19180:4;19218:2;19207:9;19203:18;19195:26;;19267:9;19261:4;19257:20;19253:1;19242:9;19238:17;19231:47;19295:131;19421:4;19295:131;:::i;:::-;19287:139;;19014:419;;;:::o;19439:::-;19605:4;19643:2;19632:9;19628:18;19620:26;;19692:9;19686:4;19682:20;19678:1;19667:9;19663:17;19656:47;19720:131;19846:4;19720:131;:::i;:::-;19712:139;;19439:419;;;:::o;19864:::-;20030:4;20068:2;20057:9;20053:18;20045:26;;20117:9;20111:4;20107:20;20103:1;20092:9;20088:17;20081:47;20145:131;20271:4;20145:131;:::i;:::-;20137:139;;19864:419;;;:::o;20289:::-;20455:4;20493:2;20482:9;20478:18;20470:26;;20542:9;20536:4;20532:20;20528:1;20517:9;20513:17;20506:47;20570:131;20696:4;20570:131;:::i;:::-;20562:139;;20289:419;;;:::o;20714:::-;20880:4;20918:2;20907:9;20903:18;20895:26;;20967:9;20961:4;20957:20;20953:1;20942:9;20938:17;20931:47;20995:131;21121:4;20995:131;:::i;:::-;20987:139;;20714:419;;;:::o;21139:::-;21305:4;21343:2;21332:9;21328:18;21320:26;;21392:9;21386:4;21382:20;21378:1;21367:9;21363:17;21356:47;21420:131;21546:4;21420:131;:::i;:::-;21412:139;;21139:419;;;:::o;21564:::-;21730:4;21768:2;21757:9;21753:18;21745:26;;21817:9;21811:4;21807:20;21803:1;21792:9;21788:17;21781:47;21845:131;21971:4;21845:131;:::i;:::-;21837:139;;21564:419;;;:::o;21989:::-;22155:4;22193:2;22182:9;22178:18;22170:26;;22242:9;22236:4;22232:20;22228:1;22217:9;22213:17;22206:47;22270:131;22396:4;22270:131;:::i;:::-;22262:139;;21989:419;;;:::o;22414:::-;22580:4;22618:2;22607:9;22603:18;22595:26;;22667:9;22661:4;22657:20;22653:1;22642:9;22638:17;22631:47;22695:131;22821:4;22695:131;:::i;:::-;22687:139;;22414:419;;;:::o;22839:::-;23005:4;23043:2;23032:9;23028:18;23020:26;;23092:9;23086:4;23082:20;23078:1;23067:9;23063:17;23056:47;23120:131;23246:4;23120:131;:::i;:::-;23112:139;;22839:419;;;:::o;23264:::-;23430:4;23468:2;23457:9;23453:18;23445:26;;23517:9;23511:4;23507:20;23503:1;23492:9;23488:17;23481:47;23545:131;23671:4;23545:131;:::i;:::-;23537:139;;23264:419;;;:::o;23689:::-;23855:4;23893:2;23882:9;23878:18;23870:26;;23942:9;23936:4;23932:20;23928:1;23917:9;23913:17;23906:47;23970:131;24096:4;23970:131;:::i;:::-;23962:139;;23689:419;;;:::o;24114:::-;24280:4;24318:2;24307:9;24303:18;24295:26;;24367:9;24361:4;24357:20;24353:1;24342:9;24338:17;24331:47;24395:131;24521:4;24395:131;:::i;:::-;24387:139;;24114:419;;;:::o;24539:::-;24705:4;24743:2;24732:9;24728:18;24720:26;;24792:9;24786:4;24782:20;24778:1;24767:9;24763:17;24756:47;24820:131;24946:4;24820:131;:::i;:::-;24812:139;;24539:419;;;:::o;24964:::-;25130:4;25168:2;25157:9;25153:18;25145:26;;25217:9;25211:4;25207:20;25203:1;25192:9;25188:17;25181:47;25245:131;25371:4;25245:131;:::i;:::-;25237:139;;24964:419;;;:::o;25389:::-;25555:4;25593:2;25582:9;25578:18;25570:26;;25642:9;25636:4;25632:20;25628:1;25617:9;25613:17;25606:47;25670:131;25796:4;25670:131;:::i;:::-;25662:139;;25389:419;;;:::o;25814:::-;25980:4;26018:2;26007:9;26003:18;25995:26;;26067:9;26061:4;26057:20;26053:1;26042:9;26038:17;26031:47;26095:131;26221:4;26095:131;:::i;:::-;26087:139;;25814:419;;;:::o;26239:::-;26405:4;26443:2;26432:9;26428:18;26420:26;;26492:9;26486:4;26482:20;26478:1;26467:9;26463:17;26456:47;26520:131;26646:4;26520:131;:::i;:::-;26512:139;;26239:419;;;:::o;26664:::-;26830:4;26868:2;26857:9;26853:18;26845:26;;26917:9;26911:4;26907:20;26903:1;26892:9;26888:17;26881:47;26945:131;27071:4;26945:131;:::i;:::-;26937:139;;26664:419;;;:::o;27089:222::-;27182:4;27220:2;27209:9;27205:18;27197:26;;27233:71;27301:1;27290:9;27286:17;27277:6;27233:71;:::i;:::-;27089:222;;;;:::o;27317:332::-;27438:4;27476:2;27465:9;27461:18;27453:26;;27489:71;27557:1;27546:9;27542:17;27533:6;27489:71;:::i;:::-;27570:72;27638:2;27627:9;27623:18;27614:6;27570:72;:::i;:::-;27317:332;;;;;:::o;27655:129::-;27689:6;27716:20;;:::i;:::-;27706:30;;27745:33;27773:4;27765:6;27745:33;:::i;:::-;27655:129;;;:::o;27790:75::-;27823:6;27856:2;27850:9;27840:19;;27790:75;:::o;27871:307::-;27932:4;28022:18;28014:6;28011:30;28008:56;;;28044:18;;:::i;:::-;28008:56;28082:29;28104:6;28082:29;:::i;:::-;28074:37;;28166:4;28160;28156:15;28148:23;;27871:307;;;:::o;28184:308::-;28246:4;28336:18;28328:6;28325:30;28322:56;;;28358:18;;:::i;:::-;28322:56;28396:29;28418:6;28396:29;:::i;:::-;28388:37;;28480:4;28474;28470:15;28462:23;;28184:308;;;:::o;28498:98::-;28549:6;28583:5;28577:12;28567:22;;28498:98;;;:::o;28602:99::-;28654:6;28688:5;28682:12;28672:22;;28602:99;;;:::o;28707:168::-;28790:11;28824:6;28819:3;28812:19;28864:4;28859:3;28855:14;28840:29;;28707:168;;;;:::o;28881:169::-;28965:11;28999:6;28994:3;28987:19;29039:4;29034:3;29030:14;29015:29;;28881:169;;;;:::o;29056:148::-;29158:11;29195:3;29180:18;;29056:148;;;;:::o;29210:305::-;29250:3;29269:20;29287:1;29269:20;:::i;:::-;29264:25;;29303:20;29321:1;29303:20;:::i;:::-;29298:25;;29457:1;29389:66;29385:74;29382:1;29379:81;29376:107;;;29463:18;;:::i;:::-;29376:107;29507:1;29504;29500:9;29493:16;;29210:305;;;;:::o;29521:185::-;29561:1;29578:20;29596:1;29578:20;:::i;:::-;29573:25;;29612:20;29630:1;29612:20;:::i;:::-;29607:25;;29651:1;29641:35;;29656:18;;:::i;:::-;29641:35;29698:1;29695;29691:9;29686:14;;29521:185;;;;:::o;29712:191::-;29752:4;29772:20;29790:1;29772:20;:::i;:::-;29767:25;;29806:20;29824:1;29806:20;:::i;:::-;29801:25;;29845:1;29842;29839:8;29836:34;;;29850:18;;:::i;:::-;29836:34;29895:1;29892;29888:9;29880:17;;29712:191;;;;:::o;29909:96::-;29946:7;29975:24;29993:5;29975:24;:::i;:::-;29964:35;;29909:96;;;:::o;30011:90::-;30045:7;30088:5;30081:13;30074:21;30063:32;;30011:90;;;:::o;30107:149::-;30143:7;30183:66;30176:5;30172:78;30161:89;;30107:149;;;:::o;30262:126::-;30299:7;30339:42;30332:5;30328:54;30317:65;;30262:126;;;:::o;30394:77::-;30431:7;30460:5;30449:16;;30394:77;;;:::o;30477:154::-;30561:6;30556:3;30551;30538:30;30623:1;30614:6;30609:3;30605:16;30598:27;30477:154;;;:::o;30637:307::-;30705:1;30715:113;30729:6;30726:1;30723:13;30715:113;;;30814:1;30809:3;30805:11;30799:18;30795:1;30790:3;30786:11;30779:39;30751:2;30748:1;30744:10;30739:15;;30715:113;;;30846:6;30843:1;30840:13;30837:101;;;30926:1;30917:6;30912:3;30908:16;30901:27;30837:101;30686:258;30637:307;;;:::o;30950:320::-;30994:6;31031:1;31025:4;31021:12;31011:22;;31078:1;31072:4;31068:12;31099:18;31089:81;;31155:4;31147:6;31143:17;31133:27;;31089:81;31217:2;31209:6;31206:14;31186:18;31183:38;31180:84;;;31236:18;;:::i;:::-;31180:84;31001:269;30950:320;;;:::o;31276:281::-;31359:27;31381:4;31359:27;:::i;:::-;31351:6;31347:40;31489:6;31477:10;31474:22;31453:18;31441:10;31438:34;31435:62;31432:88;;;31500:18;;:::i;:::-;31432:88;31540:10;31536:2;31529:22;31319:238;31276:281;;:::o;31563:233::-;31602:3;31625:24;31643:5;31625:24;:::i;:::-;31616:33;;31671:66;31664:5;31661:77;31658:103;;;31741:18;;:::i;:::-;31658:103;31788:1;31781:5;31777:13;31770:20;;31563:233;;;:::o;31802:176::-;31834:1;31851:20;31869:1;31851:20;:::i;:::-;31846:25;;31885:20;31903:1;31885:20;:::i;:::-;31880:25;;31924:1;31914:35;;31929:18;;:::i;:::-;31914:35;31970:1;31967;31963:9;31958:14;;31802:176;;;;:::o;31984:180::-;32032:77;32029:1;32022:88;32129:4;32126:1;32119:15;32153:4;32150:1;32143:15;32170:180;32218:77;32215:1;32208:88;32315:4;32312:1;32305:15;32339:4;32336:1;32329:15;32356:180;32404:77;32401:1;32394:88;32501:4;32498:1;32491:15;32525:4;32522:1;32515:15;32542:180;32590:77;32587:1;32580:88;32687:4;32684:1;32677:15;32711:4;32708:1;32701:15;32728:180;32776:77;32773:1;32766:88;32873:4;32870:1;32863:15;32897:4;32894:1;32887:15;32914:117;33023:1;33020;33013:12;33037:117;33146:1;33143;33136:12;33160:117;33269:1;33266;33259:12;33283:117;33392:1;33389;33382:12;33406:102;33447:6;33498:2;33494:7;33489:2;33482:5;33478:14;33474:28;33464:38;;33406:102;;;:::o;33514:158::-;33654:10;33650:1;33642:6;33638:14;33631:34;33514:158;:::o;33678:237::-;33818:34;33814:1;33806:6;33802:14;33795:58;33887:20;33882:2;33874:6;33870:15;33863:45;33678:237;:::o;33921:225::-;34061:34;34057:1;34049:6;34045:14;34038:58;34130:8;34125:2;34117:6;34113:15;34106:33;33921:225;:::o;34152:178::-;34292:30;34288:1;34280:6;34276:14;34269:54;34152:178;:::o;34336:223::-;34476:34;34472:1;34464:6;34460:14;34453:58;34545:6;34540:2;34532:6;34528:15;34521:31;34336:223;:::o;34565:175::-;34705:27;34701:1;34693:6;34689:14;34682:51;34565:175;:::o;34746:231::-;34886:34;34882:1;34874:6;34870:14;34863:58;34955:14;34950:2;34942:6;34938:15;34931:39;34746:231;:::o;34983:243::-;35123:34;35119:1;35111:6;35107:14;35100:58;35192:26;35187:2;35179:6;35175:15;35168:51;34983:243;:::o;35232:229::-;35372:34;35368:1;35360:6;35356:14;35349:58;35441:12;35436:2;35428:6;35424:15;35417:37;35232:229;:::o;35467:228::-;35607:34;35603:1;35595:6;35591:14;35584:58;35676:11;35671:2;35663:6;35659:15;35652:36;35467:228;:::o;35701:233::-;35841:34;35837:1;35829:6;35825:14;35818:58;35910:16;35905:2;35897:6;35893:15;35886:41;35701:233;:::o;35940:182::-;36080:34;36076:1;36068:6;36064:14;36057:58;35940:182;:::o;36128:236::-;36268:34;36264:1;36256:6;36252:14;36245:58;36337:19;36332:2;36324:6;36320:15;36313:44;36128:236;:::o;36370:231::-;36510:34;36506:1;36498:6;36494:14;36487:58;36579:14;36574:2;36566:6;36562:15;36555:39;36370:231;:::o;36607:182::-;36747:34;36743:1;36735:6;36731:14;36724:58;36607:182;:::o;36795:228::-;36935:34;36931:1;36923:6;36919:14;36912:58;37004:11;36999:2;36991:6;36987:15;36980:36;36795:228;:::o;37029:234::-;37169:34;37165:1;37157:6;37153:14;37146:58;37238:17;37233:2;37225:6;37221:15;37214:42;37029:234;:::o;37269:163::-;37409:15;37405:1;37397:6;37393:14;37386:39;37269:163;:::o;37438:220::-;37578:34;37574:1;37566:6;37562:14;37555:58;37647:3;37642:2;37634:6;37630:15;37623:28;37438:220;:::o;37664:236::-;37804:34;37800:1;37792:6;37788:14;37781:58;37873:19;37868:2;37860:6;37856:15;37849:44;37664:236;:::o;37906:122::-;37979:24;37997:5;37979:24;:::i;:::-;37972:5;37969:35;37959:63;;38018:1;38015;38008:12;37959:63;37906:122;:::o;38034:116::-;38104:21;38119:5;38104:21;:::i;:::-;38097:5;38094:32;38084:60;;38140:1;38137;38130:12;38084:60;38034:116;:::o;38156:120::-;38228:23;38245:5;38228:23;:::i;:::-;38221:5;38218:34;38208:62;;38266:1;38263;38256:12;38208:62;38156:120;:::o;38282:122::-;38355:24;38373:5;38355:24;:::i;:::-;38348:5;38345:35;38335:63;;38394:1;38391;38384:12;38335:63;38282:122;:::o
Swarm Source
ipfs://2fc7eebfb8458214bba0c5c69613ec4872f8b4f547aff567130958033ff1b37b
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.