ERC-721
Overview
Max Total Supply
29 DICE
Holders
16
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 DICELoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Dice
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-09-05 */ /** *Submitted for verification at Etherscan.io on 2021-08-27 */ // 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); } /** * @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; } /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev 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] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } /** * @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() { _setOwner(_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 { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } /** * @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); } /** * @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); } /** * @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; 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"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } 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 assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @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; } } /** * @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}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. 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 { 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` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @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 override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } contract Dice is ERC721Enumerable, ReentrancyGuard, Ownable { uint256 private maxSides = 20; string[] private dice = [ "Lumpy Dice", "Holy Dice", "Ornate Dice", "Heavy Dice", "Ivory Dice", "Demon's Dice", "Weighted Dice", "Wooden Dice", "Cursed Dice", "Divine Dice", "Ancient Dice", "Flaming Dice", "Bone Dice" ]; string[] private suffixes = [ "of Power", "of Giants", "of Titans", "of Skill", "of Perfection", "of Brilliance", "of Enlightenment", "of Protection", "of Anger", "of Rage", "of Fury", "of Vitriol", "of the Fox", "of Detection", "of Reflection", "of the Twins" ]; string[] private namePrefixes = [ "Agony", "Apocalypse", "Armageddon", "Beast", "Behemoth", "Blight", "Blood", "Bramble", "Brimstone", "Brood", "Carrion", "Cataclysm", "Chimeric", "Corpse", "Corruption", "Damnation", "Death", "Demon", "Dire", "Dragon", "Dread", "Doom", "Dusk", "Eagle", "Empyrean", "Fate", "Foe", "Gale", "Ghoul", "Gloom", "Glyph", "Golem", "Grim", "Hate", "Havoc", "Honour", "Horror", "Hypnotic", "Kraken", "Loath", "Maelstrom", "Mind", "Miracle", "Morbid", "Oblivion", "Onslaught", "Pain", "Pandemonium", "Phoenix", "Plague", "Rage", "Rapture", "Rune", "Skull", "Sol", "Soul", "Sorrow", "Spirit", "Storm", "Tempest", "Torment", "Vengeance", "Victory", "Viper", "Vortex", "Woe", "Wrath", "Light's", "Shimmering" ]; string[] private nameSuffixes = [ "Bane", "Root", "Bite", "Song", "Roar", "Grasp", "Instrument", "Glow", "Bender", "Shadow", "Whisper", "Shout", "Growl", "Tear", "Peak", "Form", "Sun", "Moon" ]; function random(string memory input) internal pure returns (uint256) { return uint256(keccak256(abi.encodePacked(input))); } function getName(uint256 tokenId) public view returns (string memory) { return pluck(tokenId); } function getSideWeight(uint256 tokenId, uint256 side) public pure returns (uint256) { // Special dice if (tokenId > 8000 && tokenId <= 8888) { return 20 + side; } return 20 + getVariation(tokenId, side); } function getVariation(uint256 tokenId, uint256 side) public pure returns (uint256) { return random(string(abi.encodePacked(side, toString(tokenId)))) % 5; } // Roll the n sided die from your set // Seed can be an additional sources of entropy function roll(uint256 tokenId, uint256 sideCount, uint256 seed) public view returns (uint256) { require(_msgSender() == ownerOf(tokenId)); require(sideCount == 4 || sideCount == 6 || sideCount == 8 || sideCount == 10 || sideCount == 12 || sideCount == 20); uint256 pseudoRandom = uint256(keccak256(abi.encodePacked(seed, block.basefee, blockhash(block.number-1), msg.sender, address(this)))); uint256 total = 0; // Add up all side weights for sides considered for (uint256 i = 1; i <= sideCount; i++) { total = total + getSideWeight(tokenId, i); } pseudoRandom = pseudoRandom % total + 1; for (uint256 i = 1; i <= sideCount; i++) { uint256 sideWeight = getSideWeight(tokenId, i); if (pseudoRandom <= sideWeight) { return i; } pseudoRandom = pseudoRandom - sideWeight; } revert(); } function pluck(uint256 tokenId) internal view returns (string memory) { uint256 rand = random(string(abi.encodePacked("DICE", toString(tokenId)))); string memory output = dice[rand % dice.length]; // Special dice if (tokenId > 8000 && tokenId <= 8888) { output = "Lucky Dice"; } uint256 greatness = rand % 21; if (greatness > 14) { output = string(abi.encodePacked(output, " ", suffixes[rand % suffixes.length])); } if (greatness >= 19) { string[2] memory name; name[0] = namePrefixes[rand % namePrefixes.length]; name[1] = nameSuffixes[rand % nameSuffixes.length]; if (greatness == 19) { output = string(abi.encodePacked('"', name[0], ' ', name[1], '" ', output)); } else { output = string(abi.encodePacked('"', name[0], ' ', name[1], '" ', output, " +1")); } } return output; } function tokenURI(uint256 tokenId) override public view returns (string memory) { string[25] memory parts; parts[0] = '<svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMinYMin meet" viewBox="0 0 450 450"><style>.base { fill: white; font-family: serif; font-size: 14px; } .stats { fill: white; font-family: serif; font-size: 10px; }</style><rect width="100%" height="100%" fill="black" /><text x="10" y="20" class="base">'; parts[1] = getName(tokenId); parts[2] = '</text><text x="10" y="40" class="stats">Probability Distribution</text>'; for (uint256 i = 1; i <= maxSides; i++) { parts[2+i] = string(abi.encodePacked('<text x="10" y="', toString(40 + 20 * i),'" class="stats">', toString(i), '</text><rect x="25" y="', toString((40 + 20 * i) - 10), '" width="', toString(getSideWeight(tokenId, i)*10), '" height="15" stroke="black" stroke-width="6" fill="white"/>')); } parts[maxSides + 3] = '</svg>'; string memory output = string(abi.encodePacked(parts[0], parts[1], parts[2], parts[3], parts[4], parts[5], parts[6], parts[7], parts[8])); output = string(abi.encodePacked(output, parts[9], parts[10], parts[11], parts[12], parts[13], parts[14], parts[15], parts[16])); output = string(abi.encodePacked(output, parts[17], parts[18], parts[19], parts[20], parts[21], parts[22], parts[23], parts[24])); string memory json = Base64.encode(bytes(string(abi.encodePacked('{"name": "Dice Set #', toString(tokenId), '", "description": "Every adventurer needs Dice. Feel free to use Dice in any way you want.", "image": "data:image/svg+xml;base64,', Base64.encode(bytes(output)), '"}')))); output = string(abi.encodePacked('data:application/json;base64,', json)); return output; } function claim(uint256 tokenId) public nonReentrant { require(tokenId > 0 && tokenId < 7778, "Token ID invalid"); _safeMint(_msgSender(), tokenId); } function ownerClaim(uint256 tokenId) public nonReentrant onlyOwner { require(tokenId > 7777 && tokenId < 8001, "Token ID invalid"); _safeMint(owner(), tokenId); } // Requires an existing dice to claim function claimSpecial(uint256 tokenId, uint256 existingTokenId) public nonReentrant { require(roll(existingTokenId, 20, tokenId) >= 18); require(tokenId > 8000 && tokenId <= 8888, "Token ID invalid"); _safeMint(_msgSender(), tokenId); } function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT license // 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); } constructor() ERC721("Dice", "DICE") Ownable() {} } /// [MIT License] /// @title Base64 /// @notice Provides a function for encoding some bytes in base64 /// @author Brecht Devos <[email protected]> library Base64 { bytes internal constant TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; /// @notice Encodes some bytes to the base64 representation function encode(bytes memory data) internal pure returns (string memory) { uint256 len = data.length; if (len == 0) return ""; // multiply by 4/3 rounded up uint256 encodedLen = 4 * ((len + 2) / 3); // Add some extra buffer at the end bytes memory result = new bytes(encodedLen + 32); bytes memory table = TABLE; assembly { let tablePtr := add(table, 1) let resultPtr := add(result, 32) for { let i := 0 } lt(i, len) { } { i := add(i, 3) let input := and(mload(add(data, i)), 0xffffff) let out := mload(add(tablePtr, and(shr(18, input), 0x3F))) out := shl(8, out) out := add(out, and(mload(add(tablePtr, and(shr(12, input), 0x3F))), 0xFF)) out := shl(8, out) out := add(out, and(mload(add(tablePtr, and(shr(6, input), 0x3F))), 0xFF)) out := shl(8, out) out := add(out, and(mload(add(tablePtr, and(input, 0x3F))), 0xFF)) out := shl(224, out) mstore(resultPtr, out) resultPtr := add(resultPtr, 4) } switch mod(len, 3) case 1 { mstore(sub(resultPtr, 2), shl(240, 0x3d3d)) } case 2 { mstore(sub(resultPtr, 1), shl(248, 0x3d)) } mstore(result, encodedLen) } return string(result); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"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":"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":"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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"existingTokenId","type":"uint256"}],"name":"claimSpecial","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":"uint256","name":"tokenId","type":"uint256"}],"name":"getName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"side","type":"uint256"}],"name":"getSideWeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"side","type":"uint256"}],"name":"getVariation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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":"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":"ownerClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"sideCount","type":"uint256"},{"internalType":"uint256","name":"seed","type":"uint256"}],"name":"roll","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":"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":"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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"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
60806040526014600c55604051806101a001604052806040518060400160405280600a81526020017f4c756d707920446963650000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f486f6c792044696365000000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f4f726e617465204469636500000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f486561767920446963650000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f49766f727920446963650000000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f44656d6f6e27732044696365000000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f576569676874656420446963650000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f576f6f64656e204469636500000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f437572736564204469636500000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f446976696e65204469636500000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f416e6369656e742044696365000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f466c616d696e672044696365000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f426f6e6520446963650000000000000000000000000000000000000000000000815250815250600d90600d6200032492919062001ce3565b506040518061020001604052806040518060400160405280600881526020017f6f6620506f77657200000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f6f66204769616e7473000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f6f6620546974616e73000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f6f6620536b696c6c00000000000000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f6f662050657266656374696f6e0000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f6f66204272696c6c69616e63650000000000000000000000000000000000000081525081526020016040518060400160405280601081526020017f6f6620456e6c69676874656e6d656e740000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f6f662050726f74656374696f6e0000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f6f6620416e67657200000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f6f6620526167650000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f6f6620467572790000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f6f662056697472696f6c0000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f6f662074686520466f780000000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f6f6620446574656374696f6e000000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f6f66205265666c656374696f6e0000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f6f6620746865205477696e730000000000000000000000000000000000000000815250815250600e906010620006f192919062001d4a565b50604051806108a001604052806040518060400160405280600581526020017f41676f6e7900000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f41706f63616c797073650000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f41726d61676564646f6e0000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f426561737400000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f426568656d6f746800000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f426c69676874000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f426c6f6f6400000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f4272616d626c650000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f4272696d73746f6e65000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f42726f6f6400000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f43617272696f6e0000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f43617461636c79736d000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f4368696d6572696300000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f436f72707365000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f436f7272757074696f6e0000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f44616d6e6174696f6e000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f446561746800000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f44656d6f6e00000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f446972650000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f447261676f6e000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f447265616400000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f446f6f6d0000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f4475736b0000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f4561676c6500000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f456d70797265616e00000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f466174650000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600381526020017f466f65000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f47616c650000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f47686f756c00000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f476c6f6f6d00000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f476c79706800000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f476f6c656d00000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f4772696d0000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f486174650000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f4861766f6300000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f486f6e6f7572000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f486f72726f72000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f4879706e6f74696300000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f4b72616b656e000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f4c6f61746800000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f4d61656c7374726f6d000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f4d696e640000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f4d697261636c650000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f4d6f72626964000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f4f626c6976696f6e00000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f4f6e736c6175676874000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f5061696e0000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f50616e64656d6f6e69756d00000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f50686f656e69780000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f506c61677565000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f526167650000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f526170747572650000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f52756e650000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f536b756c6c00000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600381526020017f536f6c000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f536f756c0000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f536f72726f77000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f537069726974000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f53746f726d00000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f54656d706573740000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f546f726d656e740000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f56656e6765616e6365000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f566963746f72790000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f566970657200000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f566f72746578000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600381526020017f576f65000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f577261746800000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f4c6967687427730000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f5368696d6d6572696e6700000000000000000000000000000000000000000000815250815250600f906045620016f592919062001db1565b506040518061024001604052806040518060400160405280600481526020017f42616e650000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f526f6f740000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f426974650000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f536f6e670000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f526f61720000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f477261737000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f496e737472756d656e740000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f476c6f770000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f42656e646572000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f536861646f77000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f576869737065720000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f53686f757400000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f47726f776c00000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f546561720000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f5065616b0000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f466f726d0000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600381526020017f53756e000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f4d6f6f6e00000000000000000000000000000000000000000000000000000000815250815250601090601262001b3892919062001e18565b5034801562001b4657600080fd5b506040518060400160405280600481526020017f44696365000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4449434500000000000000000000000000000000000000000000000000000000815250816000908051906020019062001bcb92919062001e7f565b50806001908051906020019062001be492919062001e7f565b5050506001600a8190555062001c0f62001c0362001c1560201b60201c565b62001c1d60201b60201c565b62002002565b600033905090565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b82805482825590600052602060002090810192821562001d37579160200282015b8281111562001d3657825182908051906020019062001d2592919062001e7f565b509160200191906001019062001d04565b5b50905062001d46919062001f10565b5090565b82805482825590600052602060002090810192821562001d9e579160200282015b8281111562001d9d57825182908051906020019062001d8c92919062001e7f565b509160200191906001019062001d6b565b5b50905062001dad919062001f10565b5090565b82805482825590600052602060002090810192821562001e05579160200282015b8281111562001e0457825182908051906020019062001df392919062001e7f565b509160200191906001019062001dd2565b5b50905062001e14919062001f10565b5090565b82805482825590600052602060002090810192821562001e6c579160200282015b8281111562001e6b57825182908051906020019062001e5a92919062001e7f565b509160200191906001019062001e39565b5b50905062001e7b919062001f10565b5090565b82805462001e8d9062001f9d565b90600052602060002090601f01602090048101928262001eb1576000855562001efd565b82601f1062001ecc57805160ff191683800117855562001efd565b8280016001018555821562001efd579182015b8281111562001efc57825182559160200191906001019062001edf565b5b50905062001f0c919062001f38565b5090565b5b8082111562001f34576000818162001f2a919062001f57565b5060010162001f11565b5090565b5b8082111562001f5357600081600090555060010162001f39565b5090565b50805462001f659062001f9d565b6000825580601f1062001f79575062001f9a565b601f01602090049060005260206000209081019062001f99919062001f38565b5b50565b6000600282049050600182168062001fb657607f821691505b6020821081141562001fcd5762001fcc62001fd3565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614f7c80620020126000396000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c80636b8ff574116100de57806395d89b4111610097578063c87b56dd11610071578063c87b56dd146104a5578063e8bb2b06146104d5578063e985e9c514610505578063f2fde38b146105355761018e565b806395d89b411461044f578063a22cb4651461046d578063b88d4fde146104895761018e565b80636b8ff5741461037b5780637047007c146103ab57806370a08231146103db578063715018a61461040b57806374986e17146104155780638da5cb5b146104315761018e565b806323b872dd1161014b57806342842e0e1161012557806342842e0e146102e3578063434f48c4146102ff5780634f6ccce71461031b5780636352211e1461034b5761018e565b806323b872dd1461027b5780632f745c5914610297578063379607f5146102c75761018e565b806301ffc9a71461019357806306fdde03146101c3578063081812fc146101e1578063095ea7b3146102115780630f1946cc1461022d57806318160ddd1461025d575b600080fd5b6101ad60048036038101906101a89190613306565b610551565b6040516101ba9190613d97565b60405180910390f35b6101cb6105cb565b6040516101d89190613db2565b60405180910390f35b6101fb60048036038101906101f69190613360565b61065d565b6040516102089190613d30565b60405180910390f35b61022b600480360381019061022691906132c6565b6106e2565b005b610247600480360381019061024291906133cd565b6107fa565b6040516102549190614034565b60405180910390f35b61026561097c565b6040516102729190614034565b60405180910390f35b610295600480360381019061029091906131b0565b610989565b005b6102b160048036038101906102ac91906132c6565b6109e9565b6040516102be9190614034565b60405180910390f35b6102e160048036038101906102dc9190613360565b610a8e565b005b6102fd60048036038101906102f891906131b0565b610b48565b005b61031960048036038101906103149190613360565b610b68565b005b61033560048036038101906103309190613360565b610c9f565b6040516103429190614034565b60405180910390f35b61036560048036038101906103609190613360565b610d10565b6040516103729190613d30565b60405180910390f35b61039560048036038101906103909190613360565b610dc2565b6040516103a29190613db2565b60405180910390f35b6103c560048036038101906103c0919061338d565b610dd4565b6040516103d29190614034565b60405180910390f35b6103f560048036038101906103f09190613143565b610e1c565b6040516104029190614034565b60405180910390f35b610413610ed4565b005b61042f600480360381019061042a919061338d565b610f5c565b005b610439611032565b6040516104469190613d30565b60405180910390f35b61045761105c565b6040516104649190613db2565b60405180910390f35b61048760048036038101906104829190613286565b6110ee565b005b6104a3600480360381019061049e9190613203565b61126f565b005b6104bf60048036038101906104ba9190613360565b6112d1565b6040516104cc9190613db2565b60405180910390f35b6104ef60048036038101906104ea919061338d565b611809565b6040516104fc9190614034565b60405180910390f35b61051f600480360381019061051a9190613170565b611856565b60405161052c9190613d97565b60405180910390f35b61054f600480360381019061054a9190613143565b6118ea565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105c457506105c3826119e2565b5b9050919050565b6060600080546105da906142d2565b80601f0160208091040260200160405190810160405280929190818152602001828054610606906142d2565b80156106535780601f1061062857610100808354040283529160200191610653565b820191906000526020600020905b81548152906001019060200180831161063657829003601f168201915b5050505050905090565b600061066882611ac4565b6106a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069e90613f34565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106ed82610d10565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561075e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075590613fb4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661077d611b30565b73ffffffffffffffffffffffffffffffffffffffff1614806107ac57506107ab816107a6611b30565b611856565b5b6107eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e290613eb4565b60405180910390fd5b6107f58383611b38565b505050565b600061080584610d10565b73ffffffffffffffffffffffffffffffffffffffff16610823611b30565b73ffffffffffffffffffffffffffffffffffffffff161461084357600080fd5b60048314806108525750600683145b8061085d5750600883145b806108685750600a83145b806108735750600c83145b8061087e5750601483145b61088757600080fd5b6000824860014361089891906141de565b4033306040516020016108af959493929190613cd1565b6040516020818303038152906040528051906020012060001c9050600080600190505b858111610903576108e38782611809565b826108ee91906140fd565b915080806108fb90614335565b9150506108d2565b506001818361091291906143b6565b61091c91906140fd565b91506000600190505b85811161096f5760006109388883611809565b905080841161094d5781945050505050610975565b808461095991906141de565b935050808061096790614335565b915050610925565b50600080fd5b9392505050565b6000600880549050905090565b61099a610994611b30565b82611bf1565b6109d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d090613fd4565b60405180910390fd5b6109e4838383611ccf565b505050565b60006109f483610e1c565b8210610a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2c90613dd4565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6002600a541415610ad4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acb90614014565b60405180910390fd5b6002600a81905550600081118015610aed5750611e6281105b610b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2390613f74565b60405180910390fd5b610b3d610b37611b30565b82611f2b565b6001600a8190555050565b610b638383836040518060200160405280600081525061126f565b505050565b6002600a541415610bae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba590614014565b60405180910390fd5b6002600a81905550610bbe611b30565b73ffffffffffffffffffffffffffffffffffffffff16610bdc611032565b73ffffffffffffffffffffffffffffffffffffffff1614610c32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2990613f54565b60405180910390fd5b611e6181118015610c445750611f4181105b610c83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7a90613f74565b60405180910390fd5b610c94610c8e611032565b82611f2b565b6001600a8190555050565b6000610ca961097c565b8210610cea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce190613ff4565b60405180910390fd5b60088281548110610cfe57610cfd6144a3565b5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610db9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db090613ef4565b60405180910390fd5b80915050919050565b6060610dcd82611f49565b9050919050565b60006005610e0a83610de586612371565b604051602001610df6929190613ca9565b6040516020818303038152906040526124d2565b610e1491906143b6565b905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8490613ed4565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610edc611b30565b73ffffffffffffffffffffffffffffffffffffffff16610efa611032565b73ffffffffffffffffffffffffffffffffffffffff1614610f50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4790613f54565b60405180910390fd5b610f5a6000612505565b565b6002600a541415610fa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9990614014565b60405180910390fd5b6002600a819055506012610fb8826014856107fa565b1015610fc357600080fd5b611f4082118015610fd657506122b88211155b611015576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100c90613f74565b60405180910390fd5b611026611020611b30565b83611f2b565b6001600a819055505050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461106b906142d2565b80601f0160208091040260200160405190810160405280929190818152602001828054611097906142d2565b80156110e45780601f106110b9576101008083540402835291602001916110e4565b820191906000526020600020905b8154815290600101906020018083116110c757829003601f168201915b5050505050905090565b6110f6611b30565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115b90613e74565b60405180910390fd5b8060056000611171611b30565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661121e611b30565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516112639190613d97565b60405180910390a35050565b61128061127a611b30565b83611bf1565b6112bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b690613fd4565b60405180910390fd5b6112cb848484846125cb565b50505050565b60606112db61301b565b60405180610160016040528061013a8152602001614e0d61013a91398160006019811061130b5761130a6144a3565b5b602002018190525061131c83610dc2565b816001601981106113305761132f6144a3565b5b6020020181905250604051806080016040528060488152602001614d856048913981600260198110611365576113646144a3565b5b60200201819052506000600190505b600c54811161144e5761139e81601461138d9190614184565b602861139991906140fd565b612371565b6113a782612371565b6113d4600a8460146113b99190614184565b60286113c591906140fd565b6113cf91906141de565b612371565b6113f2600a6113e38987611809565b6113ed9190614184565b612371565b6040516020016114059493929190613b41565b6040516020818303038152906040528282600261142291906140fd565b60198110611433576114326144a3565b5b6020020181905250808061144690614335565b915050611374565b506040518060400160405280600681526020017f3c2f7376673e0000000000000000000000000000000000000000000000000000815250816003600c5461149591906140fd565b601981106114a6576114a56144a3565b5b60200201819052506000816000601981106114c4576114c36144a3565b5b6020020151826001601981106114dd576114dc6144a3565b5b6020020151836002601981106114f6576114f56144a3565b5b60200201518460036019811061150f5761150e6144a3565b5b602002015185600460198110611528576115276144a3565b5b602002015186600560198110611541576115406144a3565b5b60200201518760066019811061155a576115596144a3565b5b602002015188600760198110611573576115726144a3565b5b60200201518960086019811061158c5761158b6144a3565b5b60200201516040516020016115a999989796959493929190613a4e565b604051602081830303815290604052905080826009601981106115cf576115ce6144a3565b5b602002015183600a601981106115e8576115e76144a3565b5b602002015184600b60198110611601576116006144a3565b5b602002015185600c6019811061161a576116196144a3565b5b602002015186600d60198110611633576116326144a3565b5b602002015187600e6019811061164c5761164b6144a3565b5b602002015188600f60198110611665576116646144a3565b5b60200201518960106019811061167e5761167d6144a3565b5b602002015160405160200161169b99989796959493929190613a4e565b604051602081830303815290604052905080826011601981106116c1576116c06144a3565b5b6020020151836012601981106116da576116d96144a3565b5b6020020151846013601981106116f3576116f26144a3565b5b60200201518560146019811061170c5761170b6144a3565b5b602002015186601560198110611725576117246144a3565b5b60200201518760166019811061173e5761173d6144a3565b5b602002015188601760198110611757576117566144a3565b5b6020020151896018601981106117705761176f6144a3565b5b602002015160405160200161178d99989796959493929190613a4e565b604051602081830303815290604052905060006117da6117ac86612371565b6117b584612627565b6040516020016117c6929190613afc565b604051602081830303815290604052612627565b9050806040516020016117ed9190613c87565b6040516020818303038152906040529150819350505050919050565b6000611f408311801561181e57506122b88311155b156118375781601461183091906140fd565b9050611850565b6118418383610dd4565b601461184d91906140fd565b90505b92915050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6118f2611b30565b73ffffffffffffffffffffffffffffffffffffffff16611910611032565b73ffffffffffffffffffffffffffffffffffffffff1614611966576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195d90613f54565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cd90613e14565b60405180910390fd5b6119df81612505565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611aad57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611abd5750611abc826127bf565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611bab83610d10565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611bfc82611ac4565b611c3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3290613e94565b60405180910390fd5b6000611c4683610d10565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611cb557508373ffffffffffffffffffffffffffffffffffffffff16611c9d8461065d565b73ffffffffffffffffffffffffffffffffffffffff16145b80611cc65750611cc58185611856565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611cef82610d10565b73ffffffffffffffffffffffffffffffffffffffff1614611d45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3c90613f94565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dac90613e54565b60405180910390fd5b611dc0838383612829565b611dcb600082611b38565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e1b91906141de565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e7291906140fd565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611f4582826040518060200160405280600081525061293d565b5050565b60606000611f7d611f5984612371565b604051602001611f699190613c65565b6040516020818303038152906040526124d2565b90506000600d808054905083611f9391906143b6565b81548110611fa457611fa36144a3565b5b906000526020600020018054611fb9906142d2565b80601f0160208091040260200160405190810160405280929190818152602001828054611fe5906142d2565b80156120325780601f1061200757610100808354040283529160200191612032565b820191906000526020600020905b81548152906001019060200180831161201557829003601f168201915b50505050509050611f408411801561204c57506122b88411155b1561208a576040518060400160405280600a81526020017f4c75636b7920446963650000000000000000000000000000000000000000000081525090505b600060158361209991906143b6565b9050600e8111156120f55781600e8080549050856120b791906143b6565b815481106120c8576120c76144a3565b5b906000526020600020016040516020016120e3929190613acd565b60405160208183030381529060405291505b6013811061236657612105613043565b600f80805490508561211791906143b6565b81548110612128576121276144a3565b5b90600052602060002001805461213d906142d2565b80601f0160208091040260200160405190810160405280929190818152602001828054612169906142d2565b80156121b65780601f1061218b576101008083540402835291602001916121b6565b820191906000526020600020905b81548152906001019060200180831161219957829003601f168201915b5050505050816000600281106121cf576121ce6144a3565b5b602002018190525060108080549050856121e991906143b6565b815481106121fa576121f96144a3565b5b90600052602060002001805461220f906142d2565b80601f016020809104026020016040519081016040528092919081815260200182805461223b906142d2565b80156122885780601f1061225d57610100808354040283529160200191612288565b820191906000526020600020905b81548152906001019060200180831161226b57829003601f168201915b5050505050816001600281106122a1576122a06144a3565b5b6020020181905250601382141561230d57806000600281106122c6576122c56144a3565b5b6020020151816001600281106122df576122de6144a3565b5b6020020151846040516020016122f793929190613bb6565b6040516020818303038152906040529250612364565b80600060028110612321576123206144a3565b5b60200201518160016002811061233a576123396144a3565b5b60200201518460405160200161235293929190613c08565b60405160208183030381529060405292505b505b819350505050919050565b606060008214156123b9576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506124cd565b600082905060005b600082146123eb5780806123d490614335565b915050600a826123e49190614153565b91506123c1565b60008167ffffffffffffffff811115612407576124066144d2565b5b6040519080825280601f01601f1916602001820160405280156124395781602001600182028036833780820191505090505b5090505b600085146124c65760018261245291906141de565b9150600a8561246191906143b6565b603061246d91906140fd565b60f81b818381518110612483576124826144a3565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856124bf9190614153565b945061243d565b8093505050505b919050565b6000816040516020016124e59190613a37565b6040516020818303038152906040528051906020012060001c9050919050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6125d6848484611ccf565b6125e284848484612998565b612621576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261890613df4565b60405180910390fd5b50505050565b6060600082519050600081141561265057604051806020016040528060008152509150506127ba565b6000600360028361266191906140fd565b61266b9190614153565b60046126779190614184565b9050600060208261268891906140fd565b67ffffffffffffffff8111156126a1576126a06144d2565b5b6040519080825280601f01601f1916602001820160405280156126d35781602001600182028036833780820191505090505b5090506000604051806060016040528060408152602001614dcd604091399050600181016020830160005b868110156127775760038101905062ffffff818a015116603f8160121c168401518060081b905060ff603f83600c1c1686015116810190508060081b905060ff603f8360061c1686015116810190508060081b905060ff603f831686015116810190508060e01b905080845260048401935050506126fe565b50600386066001811461279157600281146127a1576127ac565b613d3d60f01b60028303526127ac565b603d60f81b60018303525b508484525050819450505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612834838383612b2f565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128775761287281612b34565b6128b6565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146128b5576128b48382612b7d565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128f9576128f481612cea565b612938565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612937576129368282612dbb565b5b5b505050565b6129478383612e3a565b6129546000848484612998565b612993576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298a90613df4565b60405180910390fd5b505050565b60006129b98473ffffffffffffffffffffffffffffffffffffffff16613008565b15612b22578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026129e2611b30565b8786866040518563ffffffff1660e01b8152600401612a049493929190613d4b565b602060405180830381600087803b158015612a1e57600080fd5b505af1925050508015612a4f57506040513d601f19601f82011682018060405250810190612a4c9190613333565b60015b612ad2573d8060008114612a7f576040519150601f19603f3d011682016040523d82523d6000602084013e612a84565b606091505b50600081511415612aca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac190613df4565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612b27565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612b8a84610e1c565b612b9491906141de565b9050600060076000848152602001908152602001600020549050818114612c79576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612cfe91906141de565b9050600060096000848152602001908152602001600020549050600060088381548110612d2e57612d2d6144a3565b5b906000526020600020015490508060088381548110612d5057612d4f6144a3565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612d9f57612d9e614474565b5b6001900381819060005260206000200160009055905550505050565b6000612dc683610e1c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612eaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea190613f14565b60405180910390fd5b612eb381611ac4565b15612ef3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eea90613e34565b60405180910390fd5b612eff60008383612829565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f4f91906140fd565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b6040518061032001604052806019905b606081526020019060019003908161302b5790505090565b60405180604001604052806002905b60608152602001906001900390816130525790505090565b600061307d61307884614074565b61404f565b90508281526020810184848401111561309957613098614506565b5b6130a4848285614290565b509392505050565b6000813590506130bb81614d28565b92915050565b6000813590506130d081614d3f565b92915050565b6000813590506130e581614d56565b92915050565b6000815190506130fa81614d56565b92915050565b600082601f83011261311557613114614501565b5b813561312584826020860161306a565b91505092915050565b60008135905061313d81614d6d565b92915050565b60006020828403121561315957613158614510565b5b6000613167848285016130ac565b91505092915050565b6000806040838503121561318757613186614510565b5b6000613195858286016130ac565b92505060206131a6858286016130ac565b9150509250929050565b6000806000606084860312156131c9576131c8614510565b5b60006131d7868287016130ac565b93505060206131e8868287016130ac565b92505060406131f98682870161312e565b9150509250925092565b6000806000806080858703121561321d5761321c614510565b5b600061322b878288016130ac565b945050602061323c878288016130ac565b935050604061324d8782880161312e565b925050606085013567ffffffffffffffff81111561326e5761326d61450b565b5b61327a87828801613100565b91505092959194509250565b6000806040838503121561329d5761329c614510565b5b60006132ab858286016130ac565b92505060206132bc858286016130c1565b9150509250929050565b600080604083850312156132dd576132dc614510565b5b60006132eb858286016130ac565b92505060206132fc8582860161312e565b9150509250929050565b60006020828403121561331c5761331b614510565b5b600061332a848285016130d6565b91505092915050565b60006020828403121561334957613348614510565b5b6000613357848285016130eb565b91505092915050565b60006020828403121561337657613375614510565b5b60006133848482850161312e565b91505092915050565b600080604083850312156133a4576133a3614510565b5b60006133b28582860161312e565b92505060206133c38582860161312e565b9150509250929050565b6000806000606084860312156133e6576133e5614510565b5b60006133f48682870161312e565b93505060206134058682870161312e565b92505060406134168682870161312e565b9150509250925092565b61342981614212565b82525050565b61344061343b82614212565b61437e565b82525050565b61344f81614224565b82525050565b61346661346182614230565b614390565b82525050565b6000613477826140ba565b61348181856140d0565b935061349181856020860161429f565b61349a81614515565b840191505092915050565b60006134b0826140c5565b6134ba81856140e1565b93506134ca81856020860161429f565b6134d381614515565b840191505092915050565b60006134e9826140c5565b6134f381856140f2565b935061350381856020860161429f565b80840191505092915050565b6000815461351c816142d2565b61352681866140f2565b94506001821660008114613541576001811461355257613585565b60ff19831686528186019350613585565b61355b856140a5565b60005b8381101561357d5781548189015260018201915060208101905061355e565b838801955050505b50505092915050565b600061359b6014836140f2565b91506135a682614533565b601482019050919050565b60006135be6010836140f2565b91506135c98261455c565b601082019050919050565b60006135e1602b836140e1565b91506135ec82614585565b604082019050919050565b60006136046032836140e1565b915061360f826145d4565b604082019050919050565b60006136276026836140e1565b915061363282614623565b604082019050919050565b600061364a6010836140f2565b915061365582614672565b601082019050919050565b600061366d601c836140e1565b91506136788261469b565b602082019050919050565b60006136906024836140e1565b915061369b826146c4565b604082019050919050565b60006136b36019836140e1565b91506136be82614713565b602082019050919050565b60006136d66017836140f2565b91506136e18261473c565b601782019050919050565b60006136f96002836140f2565b915061370482614765565b600282019050919050565b600061371c602c836140e1565b91506137278261478e565b604082019050919050565b600061373f6001836140f2565b915061374a826147dd565b600182019050919050565b60006137626038836140e1565b915061376d82614806565b604082019050919050565b60006137856001836140f2565b915061379082614855565b600182019050919050565b60006137a8602a836140e1565b91506137b38261487e565b604082019050919050565b60006137cb6029836140e1565b91506137d6826148cd565b604082019050919050565b60006137ee6002836140f2565b91506137f98261491c565b600282019050919050565b60006138116020836140e1565b915061381c82614945565b602082019050919050565b60006138346004836140f2565b915061383f8261496e565b600482019050919050565b6000613857602c836140e1565b915061386282614997565b604082019050919050565b600061387a6020836140e1565b9150613885826149e6565b602082019050919050565b600061389d6010836140e1565b91506138a882614a0f565b602082019050919050565b60006138c06029836140e1565b91506138cb82614a38565b604082019050919050565b60006138e3603c836140f2565b91506138ee82614a87565b603c82019050919050565b60006139066081836140f2565b915061391182614ad6565b608182019050919050565b60006139296021836140e1565b915061393482614b97565b604082019050919050565b600061394c601d836140f2565b915061395782614be6565b601d82019050919050565b600061396f6003836140f2565b915061397a82614c0f565b600382019050919050565b60006139926031836140e1565b915061399d82614c38565b604082019050919050565b60006139b5602c836140e1565b91506139c082614c87565b604082019050919050565b60006139d8601f836140e1565b91506139e382614cd6565b602082019050919050565b60006139fb6009836140f2565b9150613a0682614cff565b600982019050919050565b613a1a81614286565b82525050565b613a31613a2c82614286565b6143ac565b82525050565b6000613a4382846134de565b915081905092915050565b6000613a5a828c6134de565b9150613a66828b6134de565b9150613a72828a6134de565b9150613a7e82896134de565b9150613a8a82886134de565b9150613a9682876134de565b9150613aa282866134de565b9150613aae82856134de565b9150613aba82846134de565b91508190509a9950505050505050505050565b6000613ad982856134de565b9150613ae482613732565b9150613af0828461350f565b91508190509392505050565b6000613b078261358e565b9150613b1382856134de565b9150613b1e826138f9565b9150613b2a82846134de565b9150613b35826137e1565b91508190509392505050565b6000613b4c826135b1565b9150613b5882876134de565b9150613b638261363d565b9150613b6f82866134de565b9150613b7a826136c9565b9150613b8682856134de565b9150613b91826139ee565b9150613b9d82846134de565b9150613ba8826138d6565b915081905095945050505050565b6000613bc182613778565b9150613bcd82866134de565b9150613bd882613732565b9150613be482856134de565b9150613bef826136ec565b9150613bfb82846134de565b9150819050949350505050565b6000613c1382613778565b9150613c1f82866134de565b9150613c2a82613732565b9150613c3682856134de565b9150613c41826136ec565b9150613c4d82846134de565b9150613c5882613962565b9150819050949350505050565b6000613c7082613827565b9150613c7c82846134de565b915081905092915050565b6000613c928261393f565b9150613c9e82846134de565b915081905092915050565b6000613cb58285613a20565b602082019150613cc582846134de565b91508190509392505050565b6000613cdd8288613a20565b602082019150613ced8287613a20565b602082019150613cfd8286613455565b602082019150613d0d828561342f565b601482019150613d1d828461342f565b6014820191508190509695505050505050565b6000602082019050613d456000830184613420565b92915050565b6000608082019050613d606000830187613420565b613d6d6020830186613420565b613d7a6040830185613a11565b8181036060830152613d8c818461346c565b905095945050505050565b6000602082019050613dac6000830184613446565b92915050565b60006020820190508181036000830152613dcc81846134a5565b905092915050565b60006020820190508181036000830152613ded816135d4565b9050919050565b60006020820190508181036000830152613e0d816135f7565b9050919050565b60006020820190508181036000830152613e2d8161361a565b9050919050565b60006020820190508181036000830152613e4d81613660565b9050919050565b60006020820190508181036000830152613e6d81613683565b9050919050565b60006020820190508181036000830152613e8d816136a6565b9050919050565b60006020820190508181036000830152613ead8161370f565b9050919050565b60006020820190508181036000830152613ecd81613755565b9050919050565b60006020820190508181036000830152613eed8161379b565b9050919050565b60006020820190508181036000830152613f0d816137be565b9050919050565b60006020820190508181036000830152613f2d81613804565b9050919050565b60006020820190508181036000830152613f4d8161384a565b9050919050565b60006020820190508181036000830152613f6d8161386d565b9050919050565b60006020820190508181036000830152613f8d81613890565b9050919050565b60006020820190508181036000830152613fad816138b3565b9050919050565b60006020820190508181036000830152613fcd8161391c565b9050919050565b60006020820190508181036000830152613fed81613985565b9050919050565b6000602082019050818103600083015261400d816139a8565b9050919050565b6000602082019050818103600083015261402d816139cb565b9050919050565b60006020820190506140496000830184613a11565b92915050565b600061405961406a565b90506140658282614304565b919050565b6000604051905090565b600067ffffffffffffffff82111561408f5761408e6144d2565b5b61409882614515565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061410882614286565b915061411383614286565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614148576141476143e7565b5b828201905092915050565b600061415e82614286565b915061416983614286565b92508261417957614178614416565b5b828204905092915050565b600061418f82614286565b915061419a83614286565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156141d3576141d26143e7565b5b828202905092915050565b60006141e982614286565b91506141f483614286565b925082821015614207576142066143e7565b5b828203905092915050565b600061421d82614266565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156142bd5780820151818401526020810190506142a2565b838111156142cc576000848401525b50505050565b600060028204905060018216806142ea57607f821691505b602082108114156142fe576142fd614445565b5b50919050565b61430d82614515565b810181811067ffffffffffffffff8211171561432c5761432b6144d2565b5b80604052505050565b600061434082614286565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614373576143726143e7565b5b600182019050919050565b60006143898261439a565b9050919050565b6000819050919050565b60006143a582614526565b9050919050565b6000819050919050565b60006143c182614286565b91506143cc83614286565b9250826143dc576143db614416565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f7b226e616d65223a202244696365205365742023000000000000000000000000600082015250565b7f3c7465787420783d2231302220793d2200000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f2220636c6173733d227374617473223e00000000000000000000000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f3c2f746578743e3c7265637420783d2232352220793d22000000000000000000600082015250565b7f2220000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2000000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f2200000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4449434500000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f546f6b656e20494420696e76616c696400000000000000000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f22206865696768743d22313522207374726f6b653d22626c61636b222073747260008201527f6f6b652d77696474683d2236222066696c6c3d227768697465222f3e00000000602082015250565b7f222c20226465736372697074696f6e223a2022457665727920616476656e747560008201527f726572206e6565647320446963652e204665656c206672656520746f2075736560208201527f204469636520696e20616e792077617920796f752077616e742e222c2022696d60408201527f616765223a2022646174613a696d6167652f7376672b786d6c3b62617365363460608201527f2c00000000000000000000000000000000000000000000000000000000000000608082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b7f202b310000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f222077696474683d220000000000000000000000000000000000000000000000600082015250565b614d3181614212565b8114614d3c57600080fd5b50565b614d4881614224565b8114614d5357600080fd5b50565b614d5f8161423a565b8114614d6a57600080fd5b50565b614d7681614286565b8114614d8157600080fd5b5056fe3c2f746578743e3c7465787420783d2231302220793d2234302220636c6173733d227374617473223e50726f626162696c69747920446973747269627574696f6e3c2f746578743e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207072657365727665417370656374526174696f3d22784d696e594d696e206d656574222076696577426f783d223020302034353020343530223e3c7374796c653e2e62617365207b2066696c6c3a2077686974653b20666f6e742d66616d696c793a2073657269663b20666f6e742d73697a653a20313470783b207d202e7374617473207b2066696c6c3a2077686974653b20666f6e742d66616d696c793a2073657269663b20666f6e742d73697a653a20313070783b207d3c2f7374796c653e3c726563742077696474683d223130302522206865696768743d2231303025222066696c6c3d22626c61636b22202f3e3c7465787420783d2231302220793d2232302220636c6173733d2262617365223ea2646970667358221220b375ba43f6c9a718a33441289b6f6096b26800783e0438182f21a539080eea6a64736f6c63430008070033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061018e5760003560e01c80636b8ff574116100de57806395d89b4111610097578063c87b56dd11610071578063c87b56dd146104a5578063e8bb2b06146104d5578063e985e9c514610505578063f2fde38b146105355761018e565b806395d89b411461044f578063a22cb4651461046d578063b88d4fde146104895761018e565b80636b8ff5741461037b5780637047007c146103ab57806370a08231146103db578063715018a61461040b57806374986e17146104155780638da5cb5b146104315761018e565b806323b872dd1161014b57806342842e0e1161012557806342842e0e146102e3578063434f48c4146102ff5780634f6ccce71461031b5780636352211e1461034b5761018e565b806323b872dd1461027b5780632f745c5914610297578063379607f5146102c75761018e565b806301ffc9a71461019357806306fdde03146101c3578063081812fc146101e1578063095ea7b3146102115780630f1946cc1461022d57806318160ddd1461025d575b600080fd5b6101ad60048036038101906101a89190613306565b610551565b6040516101ba9190613d97565b60405180910390f35b6101cb6105cb565b6040516101d89190613db2565b60405180910390f35b6101fb60048036038101906101f69190613360565b61065d565b6040516102089190613d30565b60405180910390f35b61022b600480360381019061022691906132c6565b6106e2565b005b610247600480360381019061024291906133cd565b6107fa565b6040516102549190614034565b60405180910390f35b61026561097c565b6040516102729190614034565b60405180910390f35b610295600480360381019061029091906131b0565b610989565b005b6102b160048036038101906102ac91906132c6565b6109e9565b6040516102be9190614034565b60405180910390f35b6102e160048036038101906102dc9190613360565b610a8e565b005b6102fd60048036038101906102f891906131b0565b610b48565b005b61031960048036038101906103149190613360565b610b68565b005b61033560048036038101906103309190613360565b610c9f565b6040516103429190614034565b60405180910390f35b61036560048036038101906103609190613360565b610d10565b6040516103729190613d30565b60405180910390f35b61039560048036038101906103909190613360565b610dc2565b6040516103a29190613db2565b60405180910390f35b6103c560048036038101906103c0919061338d565b610dd4565b6040516103d29190614034565b60405180910390f35b6103f560048036038101906103f09190613143565b610e1c565b6040516104029190614034565b60405180910390f35b610413610ed4565b005b61042f600480360381019061042a919061338d565b610f5c565b005b610439611032565b6040516104469190613d30565b60405180910390f35b61045761105c565b6040516104649190613db2565b60405180910390f35b61048760048036038101906104829190613286565b6110ee565b005b6104a3600480360381019061049e9190613203565b61126f565b005b6104bf60048036038101906104ba9190613360565b6112d1565b6040516104cc9190613db2565b60405180910390f35b6104ef60048036038101906104ea919061338d565b611809565b6040516104fc9190614034565b60405180910390f35b61051f600480360381019061051a9190613170565b611856565b60405161052c9190613d97565b60405180910390f35b61054f600480360381019061054a9190613143565b6118ea565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105c457506105c3826119e2565b5b9050919050565b6060600080546105da906142d2565b80601f0160208091040260200160405190810160405280929190818152602001828054610606906142d2565b80156106535780601f1061062857610100808354040283529160200191610653565b820191906000526020600020905b81548152906001019060200180831161063657829003601f168201915b5050505050905090565b600061066882611ac4565b6106a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069e90613f34565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106ed82610d10565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561075e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075590613fb4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661077d611b30565b73ffffffffffffffffffffffffffffffffffffffff1614806107ac57506107ab816107a6611b30565b611856565b5b6107eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e290613eb4565b60405180910390fd5b6107f58383611b38565b505050565b600061080584610d10565b73ffffffffffffffffffffffffffffffffffffffff16610823611b30565b73ffffffffffffffffffffffffffffffffffffffff161461084357600080fd5b60048314806108525750600683145b8061085d5750600883145b806108685750600a83145b806108735750600c83145b8061087e5750601483145b61088757600080fd5b6000824860014361089891906141de565b4033306040516020016108af959493929190613cd1565b6040516020818303038152906040528051906020012060001c9050600080600190505b858111610903576108e38782611809565b826108ee91906140fd565b915080806108fb90614335565b9150506108d2565b506001818361091291906143b6565b61091c91906140fd565b91506000600190505b85811161096f5760006109388883611809565b905080841161094d5781945050505050610975565b808461095991906141de565b935050808061096790614335565b915050610925565b50600080fd5b9392505050565b6000600880549050905090565b61099a610994611b30565b82611bf1565b6109d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d090613fd4565b60405180910390fd5b6109e4838383611ccf565b505050565b60006109f483610e1c565b8210610a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2c90613dd4565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6002600a541415610ad4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acb90614014565b60405180910390fd5b6002600a81905550600081118015610aed5750611e6281105b610b2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2390613f74565b60405180910390fd5b610b3d610b37611b30565b82611f2b565b6001600a8190555050565b610b638383836040518060200160405280600081525061126f565b505050565b6002600a541415610bae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba590614014565b60405180910390fd5b6002600a81905550610bbe611b30565b73ffffffffffffffffffffffffffffffffffffffff16610bdc611032565b73ffffffffffffffffffffffffffffffffffffffff1614610c32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2990613f54565b60405180910390fd5b611e6181118015610c445750611f4181105b610c83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7a90613f74565b60405180910390fd5b610c94610c8e611032565b82611f2b565b6001600a8190555050565b6000610ca961097c565b8210610cea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce190613ff4565b60405180910390fd5b60088281548110610cfe57610cfd6144a3565b5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610db9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db090613ef4565b60405180910390fd5b80915050919050565b6060610dcd82611f49565b9050919050565b60006005610e0a83610de586612371565b604051602001610df6929190613ca9565b6040516020818303038152906040526124d2565b610e1491906143b6565b905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8490613ed4565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610edc611b30565b73ffffffffffffffffffffffffffffffffffffffff16610efa611032565b73ffffffffffffffffffffffffffffffffffffffff1614610f50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4790613f54565b60405180910390fd5b610f5a6000612505565b565b6002600a541415610fa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9990614014565b60405180910390fd5b6002600a819055506012610fb8826014856107fa565b1015610fc357600080fd5b611f4082118015610fd657506122b88211155b611015576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100c90613f74565b60405180910390fd5b611026611020611b30565b83611f2b565b6001600a819055505050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461106b906142d2565b80601f0160208091040260200160405190810160405280929190818152602001828054611097906142d2565b80156110e45780601f106110b9576101008083540402835291602001916110e4565b820191906000526020600020905b8154815290600101906020018083116110c757829003601f168201915b5050505050905090565b6110f6611b30565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115b90613e74565b60405180910390fd5b8060056000611171611b30565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661121e611b30565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516112639190613d97565b60405180910390a35050565b61128061127a611b30565b83611bf1565b6112bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b690613fd4565b60405180910390fd5b6112cb848484846125cb565b50505050565b60606112db61301b565b60405180610160016040528061013a8152602001614e0d61013a91398160006019811061130b5761130a6144a3565b5b602002018190525061131c83610dc2565b816001601981106113305761132f6144a3565b5b6020020181905250604051806080016040528060488152602001614d856048913981600260198110611365576113646144a3565b5b60200201819052506000600190505b600c54811161144e5761139e81601461138d9190614184565b602861139991906140fd565b612371565b6113a782612371565b6113d4600a8460146113b99190614184565b60286113c591906140fd565b6113cf91906141de565b612371565b6113f2600a6113e38987611809565b6113ed9190614184565b612371565b6040516020016114059493929190613b41565b6040516020818303038152906040528282600261142291906140fd565b60198110611433576114326144a3565b5b6020020181905250808061144690614335565b915050611374565b506040518060400160405280600681526020017f3c2f7376673e0000000000000000000000000000000000000000000000000000815250816003600c5461149591906140fd565b601981106114a6576114a56144a3565b5b60200201819052506000816000601981106114c4576114c36144a3565b5b6020020151826001601981106114dd576114dc6144a3565b5b6020020151836002601981106114f6576114f56144a3565b5b60200201518460036019811061150f5761150e6144a3565b5b602002015185600460198110611528576115276144a3565b5b602002015186600560198110611541576115406144a3565b5b60200201518760066019811061155a576115596144a3565b5b602002015188600760198110611573576115726144a3565b5b60200201518960086019811061158c5761158b6144a3565b5b60200201516040516020016115a999989796959493929190613a4e565b604051602081830303815290604052905080826009601981106115cf576115ce6144a3565b5b602002015183600a601981106115e8576115e76144a3565b5b602002015184600b60198110611601576116006144a3565b5b602002015185600c6019811061161a576116196144a3565b5b602002015186600d60198110611633576116326144a3565b5b602002015187600e6019811061164c5761164b6144a3565b5b602002015188600f60198110611665576116646144a3565b5b60200201518960106019811061167e5761167d6144a3565b5b602002015160405160200161169b99989796959493929190613a4e565b604051602081830303815290604052905080826011601981106116c1576116c06144a3565b5b6020020151836012601981106116da576116d96144a3565b5b6020020151846013601981106116f3576116f26144a3565b5b60200201518560146019811061170c5761170b6144a3565b5b602002015186601560198110611725576117246144a3565b5b60200201518760166019811061173e5761173d6144a3565b5b602002015188601760198110611757576117566144a3565b5b6020020151896018601981106117705761176f6144a3565b5b602002015160405160200161178d99989796959493929190613a4e565b604051602081830303815290604052905060006117da6117ac86612371565b6117b584612627565b6040516020016117c6929190613afc565b604051602081830303815290604052612627565b9050806040516020016117ed9190613c87565b6040516020818303038152906040529150819350505050919050565b6000611f408311801561181e57506122b88311155b156118375781601461183091906140fd565b9050611850565b6118418383610dd4565b601461184d91906140fd565b90505b92915050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6118f2611b30565b73ffffffffffffffffffffffffffffffffffffffff16611910611032565b73ffffffffffffffffffffffffffffffffffffffff1614611966576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195d90613f54565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cd90613e14565b60405180910390fd5b6119df81612505565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611aad57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611abd5750611abc826127bf565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611bab83610d10565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611bfc82611ac4565b611c3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3290613e94565b60405180910390fd5b6000611c4683610d10565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611cb557508373ffffffffffffffffffffffffffffffffffffffff16611c9d8461065d565b73ffffffffffffffffffffffffffffffffffffffff16145b80611cc65750611cc58185611856565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611cef82610d10565b73ffffffffffffffffffffffffffffffffffffffff1614611d45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3c90613f94565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dac90613e54565b60405180910390fd5b611dc0838383612829565b611dcb600082611b38565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e1b91906141de565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e7291906140fd565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611f4582826040518060200160405280600081525061293d565b5050565b60606000611f7d611f5984612371565b604051602001611f699190613c65565b6040516020818303038152906040526124d2565b90506000600d808054905083611f9391906143b6565b81548110611fa457611fa36144a3565b5b906000526020600020018054611fb9906142d2565b80601f0160208091040260200160405190810160405280929190818152602001828054611fe5906142d2565b80156120325780601f1061200757610100808354040283529160200191612032565b820191906000526020600020905b81548152906001019060200180831161201557829003601f168201915b50505050509050611f408411801561204c57506122b88411155b1561208a576040518060400160405280600a81526020017f4c75636b7920446963650000000000000000000000000000000000000000000081525090505b600060158361209991906143b6565b9050600e8111156120f55781600e8080549050856120b791906143b6565b815481106120c8576120c76144a3565b5b906000526020600020016040516020016120e3929190613acd565b60405160208183030381529060405291505b6013811061236657612105613043565b600f80805490508561211791906143b6565b81548110612128576121276144a3565b5b90600052602060002001805461213d906142d2565b80601f0160208091040260200160405190810160405280929190818152602001828054612169906142d2565b80156121b65780601f1061218b576101008083540402835291602001916121b6565b820191906000526020600020905b81548152906001019060200180831161219957829003601f168201915b5050505050816000600281106121cf576121ce6144a3565b5b602002018190525060108080549050856121e991906143b6565b815481106121fa576121f96144a3565b5b90600052602060002001805461220f906142d2565b80601f016020809104026020016040519081016040528092919081815260200182805461223b906142d2565b80156122885780601f1061225d57610100808354040283529160200191612288565b820191906000526020600020905b81548152906001019060200180831161226b57829003601f168201915b5050505050816001600281106122a1576122a06144a3565b5b6020020181905250601382141561230d57806000600281106122c6576122c56144a3565b5b6020020151816001600281106122df576122de6144a3565b5b6020020151846040516020016122f793929190613bb6565b6040516020818303038152906040529250612364565b80600060028110612321576123206144a3565b5b60200201518160016002811061233a576123396144a3565b5b60200201518460405160200161235293929190613c08565b60405160208183030381529060405292505b505b819350505050919050565b606060008214156123b9576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506124cd565b600082905060005b600082146123eb5780806123d490614335565b915050600a826123e49190614153565b91506123c1565b60008167ffffffffffffffff811115612407576124066144d2565b5b6040519080825280601f01601f1916602001820160405280156124395781602001600182028036833780820191505090505b5090505b600085146124c65760018261245291906141de565b9150600a8561246191906143b6565b603061246d91906140fd565b60f81b818381518110612483576124826144a3565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856124bf9190614153565b945061243d565b8093505050505b919050565b6000816040516020016124e59190613a37565b6040516020818303038152906040528051906020012060001c9050919050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6125d6848484611ccf565b6125e284848484612998565b612621576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261890613df4565b60405180910390fd5b50505050565b6060600082519050600081141561265057604051806020016040528060008152509150506127ba565b6000600360028361266191906140fd565b61266b9190614153565b60046126779190614184565b9050600060208261268891906140fd565b67ffffffffffffffff8111156126a1576126a06144d2565b5b6040519080825280601f01601f1916602001820160405280156126d35781602001600182028036833780820191505090505b5090506000604051806060016040528060408152602001614dcd604091399050600181016020830160005b868110156127775760038101905062ffffff818a015116603f8160121c168401518060081b905060ff603f83600c1c1686015116810190508060081b905060ff603f8360061c1686015116810190508060081b905060ff603f831686015116810190508060e01b905080845260048401935050506126fe565b50600386066001811461279157600281146127a1576127ac565b613d3d60f01b60028303526127ac565b603d60f81b60018303525b508484525050819450505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612834838383612b2f565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128775761287281612b34565b6128b6565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146128b5576128b48382612b7d565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128f9576128f481612cea565b612938565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612937576129368282612dbb565b5b5b505050565b6129478383612e3a565b6129546000848484612998565b612993576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298a90613df4565b60405180910390fd5b505050565b60006129b98473ffffffffffffffffffffffffffffffffffffffff16613008565b15612b22578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026129e2611b30565b8786866040518563ffffffff1660e01b8152600401612a049493929190613d4b565b602060405180830381600087803b158015612a1e57600080fd5b505af1925050508015612a4f57506040513d601f19601f82011682018060405250810190612a4c9190613333565b60015b612ad2573d8060008114612a7f576040519150601f19603f3d011682016040523d82523d6000602084013e612a84565b606091505b50600081511415612aca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac190613df4565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612b27565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612b8a84610e1c565b612b9491906141de565b9050600060076000848152602001908152602001600020549050818114612c79576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612cfe91906141de565b9050600060096000848152602001908152602001600020549050600060088381548110612d2e57612d2d6144a3565b5b906000526020600020015490508060088381548110612d5057612d4f6144a3565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612d9f57612d9e614474565b5b6001900381819060005260206000200160009055905550505050565b6000612dc683610e1c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612eaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea190613f14565b60405180910390fd5b612eb381611ac4565b15612ef3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eea90613e34565b60405180910390fd5b612eff60008383612829565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f4f91906140fd565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b6040518061032001604052806019905b606081526020019060019003908161302b5790505090565b60405180604001604052806002905b60608152602001906001900390816130525790505090565b600061307d61307884614074565b61404f565b90508281526020810184848401111561309957613098614506565b5b6130a4848285614290565b509392505050565b6000813590506130bb81614d28565b92915050565b6000813590506130d081614d3f565b92915050565b6000813590506130e581614d56565b92915050565b6000815190506130fa81614d56565b92915050565b600082601f83011261311557613114614501565b5b813561312584826020860161306a565b91505092915050565b60008135905061313d81614d6d565b92915050565b60006020828403121561315957613158614510565b5b6000613167848285016130ac565b91505092915050565b6000806040838503121561318757613186614510565b5b6000613195858286016130ac565b92505060206131a6858286016130ac565b9150509250929050565b6000806000606084860312156131c9576131c8614510565b5b60006131d7868287016130ac565b93505060206131e8868287016130ac565b92505060406131f98682870161312e565b9150509250925092565b6000806000806080858703121561321d5761321c614510565b5b600061322b878288016130ac565b945050602061323c878288016130ac565b935050604061324d8782880161312e565b925050606085013567ffffffffffffffff81111561326e5761326d61450b565b5b61327a87828801613100565b91505092959194509250565b6000806040838503121561329d5761329c614510565b5b60006132ab858286016130ac565b92505060206132bc858286016130c1565b9150509250929050565b600080604083850312156132dd576132dc614510565b5b60006132eb858286016130ac565b92505060206132fc8582860161312e565b9150509250929050565b60006020828403121561331c5761331b614510565b5b600061332a848285016130d6565b91505092915050565b60006020828403121561334957613348614510565b5b6000613357848285016130eb565b91505092915050565b60006020828403121561337657613375614510565b5b60006133848482850161312e565b91505092915050565b600080604083850312156133a4576133a3614510565b5b60006133b28582860161312e565b92505060206133c38582860161312e565b9150509250929050565b6000806000606084860312156133e6576133e5614510565b5b60006133f48682870161312e565b93505060206134058682870161312e565b92505060406134168682870161312e565b9150509250925092565b61342981614212565b82525050565b61344061343b82614212565b61437e565b82525050565b61344f81614224565b82525050565b61346661346182614230565b614390565b82525050565b6000613477826140ba565b61348181856140d0565b935061349181856020860161429f565b61349a81614515565b840191505092915050565b60006134b0826140c5565b6134ba81856140e1565b93506134ca81856020860161429f565b6134d381614515565b840191505092915050565b60006134e9826140c5565b6134f381856140f2565b935061350381856020860161429f565b80840191505092915050565b6000815461351c816142d2565b61352681866140f2565b94506001821660008114613541576001811461355257613585565b60ff19831686528186019350613585565b61355b856140a5565b60005b8381101561357d5781548189015260018201915060208101905061355e565b838801955050505b50505092915050565b600061359b6014836140f2565b91506135a682614533565b601482019050919050565b60006135be6010836140f2565b91506135c98261455c565b601082019050919050565b60006135e1602b836140e1565b91506135ec82614585565b604082019050919050565b60006136046032836140e1565b915061360f826145d4565b604082019050919050565b60006136276026836140e1565b915061363282614623565b604082019050919050565b600061364a6010836140f2565b915061365582614672565b601082019050919050565b600061366d601c836140e1565b91506136788261469b565b602082019050919050565b60006136906024836140e1565b915061369b826146c4565b604082019050919050565b60006136b36019836140e1565b91506136be82614713565b602082019050919050565b60006136d66017836140f2565b91506136e18261473c565b601782019050919050565b60006136f96002836140f2565b915061370482614765565b600282019050919050565b600061371c602c836140e1565b91506137278261478e565b604082019050919050565b600061373f6001836140f2565b915061374a826147dd565b600182019050919050565b60006137626038836140e1565b915061376d82614806565b604082019050919050565b60006137856001836140f2565b915061379082614855565b600182019050919050565b60006137a8602a836140e1565b91506137b38261487e565b604082019050919050565b60006137cb6029836140e1565b91506137d6826148cd565b604082019050919050565b60006137ee6002836140f2565b91506137f98261491c565b600282019050919050565b60006138116020836140e1565b915061381c82614945565b602082019050919050565b60006138346004836140f2565b915061383f8261496e565b600482019050919050565b6000613857602c836140e1565b915061386282614997565b604082019050919050565b600061387a6020836140e1565b9150613885826149e6565b602082019050919050565b600061389d6010836140e1565b91506138a882614a0f565b602082019050919050565b60006138c06029836140e1565b91506138cb82614a38565b604082019050919050565b60006138e3603c836140f2565b91506138ee82614a87565b603c82019050919050565b60006139066081836140f2565b915061391182614ad6565b608182019050919050565b60006139296021836140e1565b915061393482614b97565b604082019050919050565b600061394c601d836140f2565b915061395782614be6565b601d82019050919050565b600061396f6003836140f2565b915061397a82614c0f565b600382019050919050565b60006139926031836140e1565b915061399d82614c38565b604082019050919050565b60006139b5602c836140e1565b91506139c082614c87565b604082019050919050565b60006139d8601f836140e1565b91506139e382614cd6565b602082019050919050565b60006139fb6009836140f2565b9150613a0682614cff565b600982019050919050565b613a1a81614286565b82525050565b613a31613a2c82614286565b6143ac565b82525050565b6000613a4382846134de565b915081905092915050565b6000613a5a828c6134de565b9150613a66828b6134de565b9150613a72828a6134de565b9150613a7e82896134de565b9150613a8a82886134de565b9150613a9682876134de565b9150613aa282866134de565b9150613aae82856134de565b9150613aba82846134de565b91508190509a9950505050505050505050565b6000613ad982856134de565b9150613ae482613732565b9150613af0828461350f565b91508190509392505050565b6000613b078261358e565b9150613b1382856134de565b9150613b1e826138f9565b9150613b2a82846134de565b9150613b35826137e1565b91508190509392505050565b6000613b4c826135b1565b9150613b5882876134de565b9150613b638261363d565b9150613b6f82866134de565b9150613b7a826136c9565b9150613b8682856134de565b9150613b91826139ee565b9150613b9d82846134de565b9150613ba8826138d6565b915081905095945050505050565b6000613bc182613778565b9150613bcd82866134de565b9150613bd882613732565b9150613be482856134de565b9150613bef826136ec565b9150613bfb82846134de565b9150819050949350505050565b6000613c1382613778565b9150613c1f82866134de565b9150613c2a82613732565b9150613c3682856134de565b9150613c41826136ec565b9150613c4d82846134de565b9150613c5882613962565b9150819050949350505050565b6000613c7082613827565b9150613c7c82846134de565b915081905092915050565b6000613c928261393f565b9150613c9e82846134de565b915081905092915050565b6000613cb58285613a20565b602082019150613cc582846134de565b91508190509392505050565b6000613cdd8288613a20565b602082019150613ced8287613a20565b602082019150613cfd8286613455565b602082019150613d0d828561342f565b601482019150613d1d828461342f565b6014820191508190509695505050505050565b6000602082019050613d456000830184613420565b92915050565b6000608082019050613d606000830187613420565b613d6d6020830186613420565b613d7a6040830185613a11565b8181036060830152613d8c818461346c565b905095945050505050565b6000602082019050613dac6000830184613446565b92915050565b60006020820190508181036000830152613dcc81846134a5565b905092915050565b60006020820190508181036000830152613ded816135d4565b9050919050565b60006020820190508181036000830152613e0d816135f7565b9050919050565b60006020820190508181036000830152613e2d8161361a565b9050919050565b60006020820190508181036000830152613e4d81613660565b9050919050565b60006020820190508181036000830152613e6d81613683565b9050919050565b60006020820190508181036000830152613e8d816136a6565b9050919050565b60006020820190508181036000830152613ead8161370f565b9050919050565b60006020820190508181036000830152613ecd81613755565b9050919050565b60006020820190508181036000830152613eed8161379b565b9050919050565b60006020820190508181036000830152613f0d816137be565b9050919050565b60006020820190508181036000830152613f2d81613804565b9050919050565b60006020820190508181036000830152613f4d8161384a565b9050919050565b60006020820190508181036000830152613f6d8161386d565b9050919050565b60006020820190508181036000830152613f8d81613890565b9050919050565b60006020820190508181036000830152613fad816138b3565b9050919050565b60006020820190508181036000830152613fcd8161391c565b9050919050565b60006020820190508181036000830152613fed81613985565b9050919050565b6000602082019050818103600083015261400d816139a8565b9050919050565b6000602082019050818103600083015261402d816139cb565b9050919050565b60006020820190506140496000830184613a11565b92915050565b600061405961406a565b90506140658282614304565b919050565b6000604051905090565b600067ffffffffffffffff82111561408f5761408e6144d2565b5b61409882614515565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061410882614286565b915061411383614286565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614148576141476143e7565b5b828201905092915050565b600061415e82614286565b915061416983614286565b92508261417957614178614416565b5b828204905092915050565b600061418f82614286565b915061419a83614286565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156141d3576141d26143e7565b5b828202905092915050565b60006141e982614286565b91506141f483614286565b925082821015614207576142066143e7565b5b828203905092915050565b600061421d82614266565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156142bd5780820151818401526020810190506142a2565b838111156142cc576000848401525b50505050565b600060028204905060018216806142ea57607f821691505b602082108114156142fe576142fd614445565b5b50919050565b61430d82614515565b810181811067ffffffffffffffff8211171561432c5761432b6144d2565b5b80604052505050565b600061434082614286565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614373576143726143e7565b5b600182019050919050565b60006143898261439a565b9050919050565b6000819050919050565b60006143a582614526565b9050919050565b6000819050919050565b60006143c182614286565b91506143cc83614286565b9250826143dc576143db614416565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f7b226e616d65223a202244696365205365742023000000000000000000000000600082015250565b7f3c7465787420783d2231302220793d2200000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f2220636c6173733d227374617473223e00000000000000000000000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f3c2f746578743e3c7265637420783d2232352220793d22000000000000000000600082015250565b7f2220000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2000000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f2200000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4449434500000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f546f6b656e20494420696e76616c696400000000000000000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f22206865696768743d22313522207374726f6b653d22626c61636b222073747260008201527f6f6b652d77696474683d2236222066696c6c3d227768697465222f3e00000000602082015250565b7f222c20226465736372697074696f6e223a2022457665727920616476656e747560008201527f726572206e6565647320446963652e204665656c206672656520746f2075736560208201527f204469636520696e20616e792077617920796f752077616e742e222c2022696d60408201527f616765223a2022646174613a696d6167652f7376672b786d6c3b62617365363460608201527f2c00000000000000000000000000000000000000000000000000000000000000608082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b7f202b310000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f222077696474683d220000000000000000000000000000000000000000000000600082015250565b614d3181614212565b8114614d3c57600080fd5b50565b614d4881614224565b8114614d5357600080fd5b50565b614d5f8161423a565b8114614d6a57600080fd5b50565b614d7681614286565b8114614d8157600080fd5b5056fe3c2f746578743e3c7465787420783d2231302220793d2234302220636c6173733d227374617473223e50726f626162696c69747920446973747269627574696f6e3c2f746578743e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207072657365727665417370656374526174696f3d22784d696e594d696e206d656574222076696577426f783d223020302034353020343530223e3c7374796c653e2e62617365207b2066696c6c3a2077686974653b20666f6e742d66616d696c793a2073657269663b20666f6e742d73697a653a20313470783b207d202e7374617473207b2066696c6c3a2077686974653b20666f6e742d66616d696c793a2073657269663b20666f6e742d73697a653a20313070783b207d3c2f7374796c653e3c726563742077696474683d223130302522206865696768743d2231303025222066696c6c3d22626c61636b22202f3e3c7465787420783d2231302220793d2232302220636c6173733d2262617365223ea2646970667358221220b375ba43f6c9a718a33441289b6f6096b26800783e0438182f21a539080eea6a64736f6c63430008070033
Deployed Bytecode Sourcemap
44571:8348:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38421:224;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25535:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27094:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26617:411;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47483:1052;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39061:113;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27984:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38729:256;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51440:172;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28394:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51624;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39251:233;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25229:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46812:110;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47205:170;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24959:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9927:94;;;:::i;:::-;;51860:268;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9276:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25704:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27387:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28650:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49580:1852;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46934:259;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27753:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10176:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38421:224;38523:4;38562:35;38547:50;;;:11;:50;;;;:90;;;;38601:36;38625:11;38601:23;:36::i;:::-;38547:90;38540:97;;38421:224;;;:::o;25535:100::-;25589:13;25622:5;25615:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25535:100;:::o;27094:221::-;27170:7;27198:16;27206:7;27198;:16::i;:::-;27190:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27283:15;:24;27299:7;27283:24;;;;;;;;;;;;;;;;;;;;;27276:31;;27094:221;;;:::o;26617:411::-;26698:13;26714:23;26729:7;26714:14;:23::i;:::-;26698:39;;26762:5;26756:11;;:2;:11;;;;26748:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;26856:5;26840:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;26865:37;26882:5;26889:12;:10;:12::i;:::-;26865:16;:37::i;:::-;26840:62;26818:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;26999:21;27008:2;27012:7;26999:8;:21::i;:::-;26687:341;26617:411;;:::o;47483:1052::-;47568:7;47612:16;47620:7;47612;:16::i;:::-;47596:32;;:12;:10;:12::i;:::-;:32;;;47588:41;;;;;;47661:1;47648:9;:14;:49;;;;47696:1;47683:9;:14;47648:49;:84;;;;47731:1;47718:9;:14;47648:84;:120;;;;47766:2;47753:9;:15;47648:120;:156;;;;47802:2;47789:9;:15;47648:156;:192;;;;47838:2;47825:9;:15;47648:192;47640:201;;;;;;47852:20;47910:4;47916:13;47954:1;47941:12;:14;;;;:::i;:::-;47931:25;47958:10;47978:4;47893:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47883:102;;;;;;47875:111;;47852:134;;47997:13;48087:9;48099:1;48087:13;;48082:109;48107:9;48102:1;:14;48082:109;;48154:25;48168:7;48177:1;48154:13;:25::i;:::-;48146:5;:33;;;;:::i;:::-;48138:41;;48118:3;;;;;:::i;:::-;;;;48082:109;;;;48239:1;48231:5;48216:12;:20;;;;:::i;:::-;:24;;;;:::i;:::-;48201:39;;48256:9;48268:1;48256:13;;48251:258;48276:9;48271:1;:14;48251:258;;48307:18;48328:25;48342:7;48351:1;48328:13;:25::i;:::-;48307:46;;48388:10;48372:12;:26;48368:75;;48426:1;48419:8;;;;;;;;48368:75;48487:10;48472:12;:25;;;;:::i;:::-;48457:40;;48292:217;48287:3;;;;;:::i;:::-;;;;48251:258;;;;48519:8;;;47483:1052;;;;;;:::o;39061:113::-;39122:7;39149:10;:17;;;;39142:24;;39061:113;:::o;27984:339::-;28179:41;28198:12;:10;:12::i;:::-;28212:7;28179:18;:41::i;:::-;28171:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28287:28;28297:4;28303:2;28307:7;28287:9;:28::i;:::-;27984:339;;;:::o;38729:256::-;38826:7;38862:23;38879:5;38862:16;:23::i;:::-;38854:5;:31;38846:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;38951:12;:19;38964:5;38951:19;;;;;;;;;;;;;;;:26;38971:5;38951:26;;;;;;;;;;;;38944:33;;38729:256;;;;:::o;51440:172::-;12215:1;12811:7;;:19;;12803:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;12215:1;12944:7;:18;;;;51521:1:::1;51511:7;:11;:29;;;;;51536:4;51526:7;:14;51511:29;51503:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;51572:32;51582:12;:10;:12::i;:::-;51596:7;51572:9;:32::i;:::-;12171:1:::0;13123:7;:22;;;;51440:172;:::o;28394:185::-;28532:39;28549:4;28555:2;28559:7;28532:39;;;;;;;;;;;;:16;:39::i;:::-;28394:185;;;:::o;51624:::-;12215:1;12811:7;;:19;;12803:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;12215:1;12944:7;:18;;;;9507:12:::1;:10;:12::i;:::-;9496:23;;:7;:5;:7::i;:::-;:23;;;9488:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51720:4:::2;51710:7;:14;:32;;;;;51738:4;51728:7;:14;51710:32;51702:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;51774:27;51784:7;:5;:7::i;:::-;51793;51774:9;:27::i;:::-;12171:1:::0;13123:7;:22;;;;51624:185;:::o;39251:233::-;39326:7;39362:30;:28;:30::i;:::-;39354:5;:38;39346:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;39459:10;39470:5;39459:17;;;;;;;;:::i;:::-;;;;;;;;;;39452:24;;39251:233;;;:::o;25229:239::-;25301:7;25321:13;25337:7;:16;25345:7;25337:16;;;;;;;;;;;;;;;;;;;;;25321:32;;25389:1;25372:19;;:5;:19;;;;25364:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25455:5;25448:12;;;25229:239;;;:::o;46812:110::-;46867:13;46900:14;46906:7;46900:5;:14::i;:::-;46893:21;;46812:110;;;:::o;47205:170::-;47279:7;47366:1;47306:57;47337:4;47343:17;47352:7;47343:8;:17::i;:::-;47320:41;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47306:6;:57::i;:::-;:61;;;;:::i;:::-;47299:68;;47205:170;;;;:::o;24959:208::-;25031:7;25076:1;25059:19;;:5;:19;;;;25051:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25143:9;:16;25153:5;25143:16;;;;;;;;;;;;;;;;25136:23;;24959:208;;;:::o;9927:94::-;9507:12;:10;:12::i;:::-;9496:23;;:7;:5;:7::i;:::-;:23;;;9488:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9992:21:::1;10010:1;9992:9;:21::i;:::-;9927:94::o:0;51860:268::-;12215:1;12811:7;;:19;;12803:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;12215:1;12944:7;:18;;;;52001:2:::1;51963:34;51968:15;51985:2;51989:7;51963:4;:34::i;:::-;:40;;51955:49;;;::::0;::::1;;52033:4;52023:7;:14;:33;;;;;52052:4;52041:7;:15;;52023:33;52015:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;52088:32;52098:12;:10;:12::i;:::-;52112:7;52088:9;:32::i;:::-;12171:1:::0;13123:7;:22;;;;51860:268;;:::o;9276:87::-;9322:7;9349:6;;;;;;;;;;;9342:13;;9276:87;:::o;25704:104::-;25760:13;25793:7;25786:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25704:104;:::o;27387:295::-;27502:12;:10;:12::i;:::-;27490:24;;:8;:24;;;;27482:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;27602:8;27557:18;:32;27576:12;:10;:12::i;:::-;27557:32;;;;;;;;;;;;;;;:42;27590:8;27557:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;27655:8;27626:48;;27641:12;:10;:12::i;:::-;27626:48;;;27665:8;27626:48;;;;;;:::i;:::-;;;;;;;;27387:295;;:::o;28650:328::-;28825:41;28844:12;:10;:12::i;:::-;28858:7;28825:18;:41::i;:::-;28817:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28931:39;28945:4;28951:2;28955:7;28964:5;28931:13;:39::i;:::-;28650:328;;;;:::o;49580:1852::-;49645:13;49671:23;;:::i;:::-;49705:327;;;;;;;;;;;;;;;;;:5;49711:1;49705:8;;;;;;;:::i;:::-;;;;;:327;;;;50056:16;50064:7;50056;:16::i;:::-;50045:5;50051:1;50045:8;;;;;;;:::i;:::-;;;;;:27;;;;50085:85;;;;;;;;;;;;;;;;;:5;50091:1;50085:8;;;;;;;:::i;:::-;;;;;:85;;;;50188:9;50200:1;50188:13;;50183:353;50208:8;;50203:1;:13;50183:353;;50295:21;50314:1;50309:2;:6;;;;:::i;:::-;50304:2;:11;;;;:::i;:::-;50295:8;:21::i;:::-;50337:11;50346:1;50337:8;:11::i;:::-;50377:28;50402:2;50397:1;50392:2;:6;;;;:::i;:::-;50387:2;:11;;;;:::i;:::-;50386:18;;;;:::i;:::-;50377:8;:28::i;:::-;50420:38;50455:2;50429:25;50443:7;50452:1;50429:13;:25::i;:::-;:28;;;;:::i;:::-;50420:8;:38::i;:::-;50258:265;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50238:5;50246:1;50244;:3;;;;:::i;:::-;50238:10;;;;;;;:::i;:::-;;;;;:286;;;;50218:3;;;;;:::i;:::-;;;;50183:353;;;;50548:30;;;;;;;;;;;;;;;;;:5;50565:1;50554:8;;:12;;;;:::i;:::-;50548:19;;;;;;;:::i;:::-;;;;;:30;;;;50599:20;50646:5;50652:1;50646:8;;;;;;;:::i;:::-;;;;;;50656:5;50662:1;50656:8;;;;;;;:::i;:::-;;;;;;50666:5;50672:1;50666:8;;;;;;;:::i;:::-;;;;;;50676:5;50682:1;50676:8;;;;;;;:::i;:::-;;;;;;50686:5;50692:1;50686:8;;;;;;;:::i;:::-;;;;;;50696:5;50702:1;50696:8;;;;;;;:::i;:::-;;;;;;50706:5;50712:1;50706:8;;;;;;;:::i;:::-;;;;;;50716:5;50722:1;50716:8;;;;;;;:::i;:::-;;;;;;50726:5;50732:1;50726:8;;;;;;;:::i;:::-;;;;;;50629:106;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50599:137;;50780:6;50788:5;50794:1;50788:8;;;;;;;:::i;:::-;;;;;;50798:5;50804:2;50798:9;;;;;;;:::i;:::-;;;;;;50809:5;50815:2;50809:9;;;;;;;:::i;:::-;;;;;;50820:5;50826:2;50820:9;;;;;;;:::i;:::-;;;;;;50831:5;50837:2;50831:9;;;;;;;:::i;:::-;;;;;;50842:5;50848:2;50842:9;;;;;;;:::i;:::-;;;;;;50853:5;50859:2;50853:9;;;;;;;:::i;:::-;;;;;;50864:5;50870:2;50864:9;;;;;;;:::i;:::-;;;;;;50763:111;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50747:128;;50919:6;50927:5;50933:2;50927:9;;;;;;;:::i;:::-;;;;;;50938:5;50944:2;50938:9;;;;;;;:::i;:::-;;;;;;50949:5;50955:2;50949:9;;;;;;;:::i;:::-;;;;;;50960:5;50966:2;50960:9;;;;;;;:::i;:::-;;;;;;50971:5;50977:2;50971:9;;;;;;;:::i;:::-;;;;;;50982:5;50988:2;50982:9;;;;;;;:::i;:::-;;;;;;50993:5;50999:2;50993:9;;;;;;;:::i;:::-;;;;;;51004:5;51010:2;51004:9;;;;;;;:::i;:::-;;;;;;50902:112;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50886:129;;51036:18;51057:258;51125:17;51134:7;51125:8;:17::i;:::-;51277:28;51297:6;51277:13;:28::i;:::-;51084:228;;;;;;;;;:::i;:::-;;;;;;;;;;;;;51057:13;:258::i;:::-;51036:279;;51392:4;51342:55;;;;;;;;:::i;:::-;;;;;;;;;;;;;51326:72;;51418:6;51411:13;;;;;49580:1852;;;:::o;46934:259::-;47009:7;47068:4;47058:7;:14;:33;;;;;47087:4;47076:7;:15;;47058:33;47054:82;;;47120:4;47115:2;:9;;;;:::i;:::-;47108:16;;;;47054:82;47158:27;47171:7;47180:4;47158:12;:27::i;:::-;47153:2;:32;;;;:::i;:::-;47146:39;;46934:259;;;;;:::o;27753:164::-;27850:4;27874:18;:25;27893:5;27874:25;;;;;;;;;;;;;;;:35;27900:8;27874:35;;;;;;;;;;;;;;;;;;;;;;;;;27867:42;;27753:164;;;;:::o;10176:192::-;9507:12;:10;:12::i;:::-;9496:23;;:7;:5;:7::i;:::-;:23;;;9488:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10285:1:::1;10265:22;;:8;:22;;;;10257:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;10341:19;10351:8;10341:9;:19::i;:::-;10176:192:::0;:::o;24590:305::-;24692:4;24744:25;24729:40;;;:11;:40;;;;:105;;;;24801:33;24786:48;;;:11;:48;;;;24729:105;:158;;;;24851:36;24875:11;24851:23;:36::i;:::-;24729:158;24709:178;;24590:305;;;:::o;30488:127::-;30553:4;30605:1;30577:30;;:7;:16;30585:7;30577:16;;;;;;;;;;;;;;;;;;;;;:30;;;;30570:37;;30488:127;;;:::o;8136:98::-;8189:7;8216:10;8209:17;;8136:98;:::o;34470:174::-;34572:2;34545:15;:24;34561:7;34545:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;34628:7;34624:2;34590:46;;34599:23;34614:7;34599:14;:23::i;:::-;34590:46;;;;;;;;;;;;34470:174;;:::o;30782:348::-;30875:4;30900:16;30908:7;30900;:16::i;:::-;30892:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30976:13;30992:23;31007:7;30992:14;:23::i;:::-;30976:39;;31045:5;31034:16;;:7;:16;;;:51;;;;31078:7;31054:31;;:20;31066:7;31054:11;:20::i;:::-;:31;;;31034:51;:87;;;;31089:32;31106:5;31113:7;31089:16;:32::i;:::-;31034:87;31026:96;;;30782:348;;;;:::o;33774:578::-;33933:4;33906:31;;:23;33921:7;33906:14;:23::i;:::-;:31;;;33898:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;34016:1;34002:16;;:2;:16;;;;33994:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34072:39;34093:4;34099:2;34103:7;34072:20;:39::i;:::-;34176:29;34193:1;34197:7;34176:8;:29::i;:::-;34237:1;34218:9;:15;34228:4;34218:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34266:1;34249:9;:13;34259:2;34249:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34297:2;34278:7;:16;34286:7;34278:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34336:7;34332:2;34317:27;;34326:4;34317:27;;;;;;;;;;;;33774:578;;;:::o;31472:110::-;31548:26;31558:2;31562:7;31548:26;;;;;;;;;;;;:9;:26::i;:::-;31472:110;;:::o;48547:1025::-;48602:13;48628:12;48643:59;48682:17;48691:7;48682:8;:17::i;:::-;48657:43;;;;;;;;:::i;:::-;;;;;;;;;;;;;48643:6;:59::i;:::-;48628:74;;48713:20;48736:4;48748;:11;;;;48741:4;:18;;;;:::i;:::-;48736:24;;;;;;;;:::i;:::-;;;;;;;;;48713:47;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48812:4;48802:7;:14;:33;;;;;48831:4;48820:7;:15;;48802:33;48798:87;;;48852:21;;;;;;;;;;;;;;;;;;;48798:87;48897:17;48924:2;48917:4;:9;;;;:::i;:::-;48897:29;;48953:2;48941:9;:14;48937:127;;;49005:6;49018:8;49034;:15;;;;49027:4;:22;;;;:::i;:::-;49018:32;;;;;;;;:::i;:::-;;;;;;;;;48988:63;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48972:80;;48937:127;49091:2;49078:9;:15;49074:467;;49110:21;;:::i;:::-;49156:12;49176;:19;;;;49169:4;:26;;;;:::i;:::-;49156:40;;;;;;;;:::i;:::-;;;;;;;;;49146:50;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:4;49151:1;49146:7;;;;;;;:::i;:::-;;;;;:50;;;;49221:12;49241;:19;;;;49234:4;:26;;;;:::i;:::-;49221:40;;;;;;;;:::i;:::-;;;;;;;;;49211:50;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:4;49216:1;49211:7;;;;;;;:::i;:::-;;;;;:50;;;;49293:2;49280:9;:15;49276:254;;;49354:4;49359:1;49354:7;;;;;;;:::i;:::-;;;;;;49368:4;49373:1;49368:7;;;;;;;:::i;:::-;;;;;;49383:6;49332:58;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49316:75;;49276:254;;;49470:4;49475:1;49470:7;;;;;;;:::i;:::-;;;;;;49484:4;49489:1;49484:7;;;;;;;:::i;:::-;;;;;;49499:6;49448:65;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49432:82;;49276:254;49095:446;49074:467;49558:6;49551:13;;;;;48547:1025;;;:::o;52140:715::-;52196:13;52418:1;52409:5;:10;52405:53;;;52436:10;;;;;;;;;;;;;;;;;;;;;52405:53;52468:12;52483:5;52468:20;;52499:14;52524:78;52539:1;52531:4;:9;52524:78;;52557:8;;;;;:::i;:::-;;;;52588:2;52580:10;;;;;:::i;:::-;;;52524:78;;;52612:19;52644:6;52634:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52612:39;;52662:154;52678:1;52669:5;:10;52662:154;;52706:1;52696:11;;;;;:::i;:::-;;;52773:2;52765:5;:10;;;;:::i;:::-;52752:2;:24;;;;:::i;:::-;52739:39;;52722:6;52729;52722:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;52802:2;52793:11;;;;;:::i;:::-;;;52662:154;;;52840:6;52826:21;;;;;52140:715;;;;:::o;46662:138::-;46722:7;46784:5;46767:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;46757:34;;;;;;46749:43;;46742:50;;46662:138;;;:::o;10376:173::-;10432:16;10451:6;;;;;;;;;;;10432:25;;10477:8;10468:6;;:17;;;;;;;;;;;;;;;;;;10532:8;10501:40;;10522:8;10501:40;;;;;;;;;;;;10421:128;10376:173;:::o;29860:315::-;30017:28;30027:4;30033:2;30037:7;30017:9;:28::i;:::-;30064:48;30087:4;30093:2;30097:7;30106:5;30064:22;:48::i;:::-;30056:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;29860:315;;;;:::o;53270:1607::-;53328:13;53354:11;53368:4;:11;53354:25;;53401:1;53394:3;:8;53390:23;;;53404:9;;;;;;;;;;;;;;;;;53390:23;53465:18;53503:1;53498;53492:3;:7;;;;:::i;:::-;53491:13;;;;:::i;:::-;53486:1;:19;;;;:::i;:::-;53465:40;;53563:19;53608:2;53595:10;:15;;;;:::i;:::-;53585:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53563:48;;53624:18;53645:5;;;;;;;;;;;;;;;;;53624:26;;53714:1;53707:5;53703:13;53759:2;53751:6;53747:15;53810:1;53778:777;53833:3;53830:1;53827:10;53778:777;;;53888:1;53885;53881:9;53876:14;;53946:8;53941:1;53935:4;53931:12;53925:19;53921:34;54026:4;54018:5;54014:2;54010:14;54006:25;53996:8;53992:40;53986:47;54065:3;54062:1;54058:11;54051:18;;54156:4;54147;54139:5;54135:2;54131:14;54127:25;54117:8;54113:40;54107:47;54103:58;54098:3;54094:68;54087:75;;54194:3;54191:1;54187:11;54180:18;;54284:4;54275;54267:5;54264:1;54260:13;54256:24;54246:8;54242:39;54236:46;54232:57;54227:3;54223:67;54216:74;;54322:3;54319:1;54315:11;54308:18;;54404:4;54395;54388:5;54384:16;54374:8;54370:31;54364:38;54360:49;54355:3;54351:59;54344:66;;54444:3;54439;54435:13;54428:20;;54486:3;54475:9;54468:22;54538:1;54527:9;54523:17;54510:30;;53857:698;;53778:777;;;53782:44;54587:1;54582:3;54578:11;54608:1;54603:84;;;;54706:1;54701:82;;;;54571:212;;54603:84;54664:6;54659:3;54655:16;54651:1;54640:9;54636:17;54629:43;54603:84;;54701:82;54762:4;54757:3;54753:14;54749:1;54738:9;54734:17;54727:41;54571:212;;54814:10;54806:6;54799:26;53672:1164;;54862:6;54848:21;;;;;;53270:1607;;;;:::o;23197:157::-;23282:4;23321:25;23306:40;;;:11;:40;;;;23299:47;;23197:157;;;:::o;40097:589::-;40241:45;40268:4;40274:2;40278:7;40241:26;:45::i;:::-;40319:1;40303:18;;:4;:18;;;40299:187;;;40338:40;40370:7;40338:31;:40::i;:::-;40299:187;;;40408:2;40400:10;;:4;:10;;;40396:90;;40427:47;40460:4;40466:7;40427:32;:47::i;:::-;40396:90;40299:187;40514:1;40500:16;;:2;:16;;;40496:183;;;40533:45;40570:7;40533:36;:45::i;:::-;40496:183;;;40606:4;40600:10;;:2;:10;;;40596:83;;40627:40;40655:2;40659:7;40627:27;:40::i;:::-;40596:83;40496:183;40097:589;;;:::o;31809:321::-;31939:18;31945:2;31949:7;31939:5;:18::i;:::-;31990:54;32021:1;32025:2;32029:7;32038:5;31990:22;:54::i;:::-;31968:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;31809:321;;;:::o;35209:803::-;35364:4;35385:15;:2;:13;;;:15::i;:::-;35381:624;;;35437:2;35421:36;;;35458:12;:10;:12::i;:::-;35472:4;35478:7;35487:5;35421:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35417:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35684:1;35667:6;:13;:18;35663:272;;;35710:60;;;;;;;;;;:::i;:::-;;;;;;;;35663:272;35885:6;35879:13;35870:6;35866:2;35862:15;35855:38;35417:533;35554:45;;;35544:55;;;:6;:55;;;;35537:62;;;;;35381:624;35989:4;35982:11;;35209:803;;;;;;;:::o;36584:126::-;;;;:::o;41409:164::-;41513:10;:17;;;;41486:15;:24;41502:7;41486:24;;;;;;;;;;;:44;;;;41541:10;41557:7;41541:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41409:164;:::o;42200:988::-;42466:22;42516:1;42491:22;42508:4;42491:16;:22::i;:::-;:26;;;;:::i;:::-;42466:51;;42528:18;42549:17;:26;42567:7;42549:26;;;;;;;;;;;;42528:47;;42696:14;42682:10;:28;42678:328;;42727:19;42749:12;:18;42762:4;42749:18;;;;;;;;;;;;;;;:34;42768:14;42749:34;;;;;;;;;;;;42727:56;;42833:11;42800:12;:18;42813:4;42800:18;;;;;;;;;;;;;;;:30;42819:10;42800:30;;;;;;;;;;;:44;;;;42950:10;42917:17;:30;42935:11;42917:30;;;;;;;;;;;:43;;;;42712:294;42678:328;43102:17;:26;43120:7;43102:26;;;;;;;;;;;43095:33;;;43146:12;:18;43159:4;43146:18;;;;;;;;;;;;;;;:34;43165:14;43146:34;;;;;;;;;;;43139:41;;;42281:907;;42200:988;;:::o;43483:1079::-;43736:22;43781:1;43761:10;:17;;;;:21;;;;:::i;:::-;43736:46;;43793:18;43814:15;:24;43830:7;43814:24;;;;;;;;;;;;43793:45;;44165:19;44187:10;44198:14;44187:26;;;;;;;;:::i;:::-;;;;;;;;;;44165:48;;44251:11;44226:10;44237;44226:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;44362:10;44331:15;:28;44347:11;44331:28;;;;;;;;;;;:41;;;;44503:15;:24;44519:7;44503:24;;;;;;;;;;;44496:31;;;44538:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;43554:1008;;;43483:1079;:::o;40987:221::-;41072:14;41089:20;41106:2;41089:16;:20::i;:::-;41072:37;;41147:7;41120:12;:16;41133:2;41120:16;;;;;;;;;;;;;;;:24;41137:6;41120:24;;;;;;;;;;;:34;;;;41194:6;41165:17;:26;41183:7;41165:26;;;;;;;;;;;:35;;;;41061:147;40987:221;;:::o;32466:382::-;32560:1;32546:16;;:2;:16;;;;32538:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;32619:16;32627:7;32619;:16::i;:::-;32618:17;32610:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32681:45;32710:1;32714:2;32718:7;32681:20;:45::i;:::-;32756:1;32739:9;:13;32749:2;32739:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32787:2;32768:7;:16;32776:7;32768:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32832:7;32828:2;32807:33;;32824:1;32807:33;;;;;;;;;;;;32466:382;;:::o;15369:387::-;15429:4;15637:12;15704:7;15692:20;15684:28;;15747:1;15740:4;:8;15733:15;;;15369:387;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::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:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;568:133::-;611:5;649:6;636:20;627:29;;665:30;689:5;665:30;:::i;:::-;568:133;;;;:::o;707:137::-;752:5;790:6;777:20;768:29;;806:32;832:5;806:32;:::i;:::-;707:137;;;;:::o;850:141::-;906:5;937:6;931:13;922:22;;953:32;979:5;953:32;:::i;:::-;850:141;;;;:::o;1010:338::-;1065:5;1114:3;1107:4;1099:6;1095:17;1091:27;1081:122;;1122:79;;:::i;:::-;1081:122;1239:6;1226:20;1264:78;1338:3;1330:6;1323:4;1315:6;1311:17;1264:78;:::i;:::-;1255:87;;1071:277;1010:338;;;;:::o;1354:139::-;1400:5;1438:6;1425:20;1416:29;;1454:33;1481:5;1454:33;:::i;:::-;1354:139;;;;:::o;1499:329::-;1558:6;1607:2;1595:9;1586:7;1582:23;1578:32;1575:119;;;1613:79;;:::i;:::-;1575:119;1733:1;1758:53;1803:7;1794:6;1783:9;1779:22;1758:53;:::i;:::-;1748:63;;1704:117;1499:329;;;;:::o;1834:474::-;1902:6;1910;1959:2;1947:9;1938:7;1934:23;1930:32;1927:119;;;1965:79;;:::i;:::-;1927:119;2085:1;2110:53;2155:7;2146:6;2135:9;2131:22;2110:53;:::i;:::-;2100:63;;2056:117;2212:2;2238:53;2283:7;2274:6;2263:9;2259:22;2238:53;:::i;:::-;2228:63;;2183:118;1834:474;;;;;:::o;2314:619::-;2391:6;2399;2407;2456:2;2444:9;2435:7;2431:23;2427:32;2424:119;;;2462:79;;:::i;:::-;2424:119;2582:1;2607:53;2652:7;2643:6;2632:9;2628:22;2607:53;:::i;:::-;2597:63;;2553:117;2709:2;2735:53;2780:7;2771:6;2760:9;2756:22;2735:53;:::i;:::-;2725:63;;2680:118;2837:2;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2808:118;2314:619;;;;;:::o;2939:943::-;3034:6;3042;3050;3058;3107:3;3095:9;3086:7;3082:23;3078:33;3075:120;;;3114:79;;:::i;:::-;3075:120;3234:1;3259:53;3304:7;3295:6;3284:9;3280:22;3259:53;:::i;:::-;3249:63;;3205:117;3361:2;3387:53;3432:7;3423:6;3412:9;3408:22;3387:53;:::i;:::-;3377:63;;3332:118;3489:2;3515:53;3560:7;3551:6;3540:9;3536:22;3515:53;:::i;:::-;3505:63;;3460:118;3645:2;3634:9;3630:18;3617:32;3676:18;3668:6;3665:30;3662:117;;;3698:79;;:::i;:::-;3662:117;3803:62;3857:7;3848:6;3837:9;3833:22;3803:62;:::i;:::-;3793:72;;3588:287;2939:943;;;;;;;:::o;3888:468::-;3953:6;3961;4010:2;3998:9;3989:7;3985:23;3981:32;3978:119;;;4016:79;;:::i;:::-;3978:119;4136:1;4161:53;4206:7;4197:6;4186:9;4182:22;4161:53;:::i;:::-;4151:63;;4107:117;4263:2;4289:50;4331:7;4322:6;4311:9;4307:22;4289:50;:::i;:::-;4279:60;;4234:115;3888:468;;;;;:::o;4362:474::-;4430:6;4438;4487:2;4475:9;4466:7;4462:23;4458:32;4455:119;;;4493:79;;:::i;:::-;4455:119;4613:1;4638:53;4683:7;4674:6;4663:9;4659:22;4638:53;:::i;:::-;4628:63;;4584:117;4740:2;4766:53;4811:7;4802:6;4791:9;4787:22;4766:53;:::i;:::-;4756:63;;4711:118;4362:474;;;;;:::o;4842:327::-;4900:6;4949:2;4937:9;4928:7;4924:23;4920:32;4917:119;;;4955:79;;:::i;:::-;4917:119;5075:1;5100:52;5144:7;5135:6;5124:9;5120:22;5100:52;:::i;:::-;5090:62;;5046:116;4842:327;;;;:::o;5175:349::-;5244:6;5293:2;5281:9;5272:7;5268:23;5264:32;5261:119;;;5299:79;;:::i;:::-;5261:119;5419:1;5444:63;5499:7;5490:6;5479:9;5475:22;5444:63;:::i;:::-;5434:73;;5390:127;5175:349;;;;:::o;5530:329::-;5589:6;5638:2;5626:9;5617:7;5613:23;5609:32;5606:119;;;5644:79;;:::i;:::-;5606:119;5764:1;5789:53;5834:7;5825:6;5814:9;5810:22;5789:53;:::i;:::-;5779:63;;5735:117;5530:329;;;;:::o;5865:474::-;5933:6;5941;5990:2;5978:9;5969:7;5965:23;5961:32;5958:119;;;5996:79;;:::i;:::-;5958:119;6116:1;6141:53;6186:7;6177:6;6166:9;6162:22;6141:53;:::i;:::-;6131:63;;6087:117;6243:2;6269:53;6314:7;6305:6;6294:9;6290:22;6269:53;:::i;:::-;6259:63;;6214:118;5865:474;;;;;:::o;6345:619::-;6422:6;6430;6438;6487:2;6475:9;6466:7;6462:23;6458:32;6455:119;;;6493:79;;:::i;:::-;6455:119;6613:1;6638:53;6683:7;6674:6;6663:9;6659:22;6638:53;:::i;:::-;6628:63;;6584:117;6740:2;6766:53;6811:7;6802:6;6791:9;6787:22;6766:53;:::i;:::-;6756:63;;6711:118;6868:2;6894:53;6939:7;6930:6;6919:9;6915:22;6894:53;:::i;:::-;6884:63;;6839:118;6345:619;;;;;:::o;6970:118::-;7057:24;7075:5;7057:24;:::i;:::-;7052:3;7045:37;6970:118;;:::o;7094:157::-;7199:45;7219:24;7237:5;7219:24;:::i;:::-;7199:45;:::i;:::-;7194:3;7187:58;7094:157;;:::o;7257:109::-;7338:21;7353:5;7338:21;:::i;:::-;7333:3;7326:34;7257:109;;:::o;7372:157::-;7477:45;7497:24;7515:5;7497:24;:::i;:::-;7477:45;:::i;:::-;7472:3;7465:58;7372:157;;:::o;7535:360::-;7621:3;7649:38;7681:5;7649:38;:::i;:::-;7703:70;7766:6;7761:3;7703:70;:::i;:::-;7696:77;;7782:52;7827:6;7822:3;7815:4;7808:5;7804:16;7782:52;:::i;:::-;7859:29;7881:6;7859:29;:::i;:::-;7854:3;7850:39;7843:46;;7625:270;7535:360;;;;:::o;7901:364::-;7989:3;8017:39;8050:5;8017:39;:::i;:::-;8072:71;8136:6;8131:3;8072:71;:::i;:::-;8065:78;;8152:52;8197:6;8192:3;8185:4;8178:5;8174:16;8152:52;:::i;:::-;8229:29;8251:6;8229:29;:::i;:::-;8224:3;8220:39;8213:46;;7993:272;7901:364;;;;:::o;8271:377::-;8377:3;8405:39;8438:5;8405:39;:::i;:::-;8460:89;8542:6;8537:3;8460:89;:::i;:::-;8453:96;;8558:52;8603:6;8598:3;8591:4;8584:5;8580:16;8558:52;:::i;:::-;8635:6;8630:3;8626:16;8619:23;;8381:267;8271:377;;;;:::o;8678:845::-;8781:3;8818:5;8812:12;8847:36;8873:9;8847:36;:::i;:::-;8899:89;8981:6;8976:3;8899:89;:::i;:::-;8892:96;;9019:1;9008:9;9004:17;9035:1;9030:137;;;;9181:1;9176:341;;;;8997:520;;9030:137;9114:4;9110:9;9099;9095:25;9090:3;9083:38;9150:6;9145:3;9141:16;9134:23;;9030:137;;9176:341;9243:38;9275:5;9243:38;:::i;:::-;9303:1;9317:154;9331:6;9328:1;9325:13;9317:154;;;9405:7;9399:14;9395:1;9390:3;9386:11;9379:35;9455:1;9446:7;9442:15;9431:26;;9353:4;9350:1;9346:12;9341:17;;9317:154;;;9500:6;9495:3;9491:16;9484:23;;9183:334;;8997:520;;8785:738;;8678:845;;;;:::o;9529:402::-;9689:3;9710:85;9792:2;9787:3;9710:85;:::i;:::-;9703:92;;9804:93;9893:3;9804:93;:::i;:::-;9922:2;9917:3;9913:12;9906:19;;9529:402;;;:::o;9937:::-;10097:3;10118:85;10200:2;10195:3;10118:85;:::i;:::-;10111:92;;10212:93;10301:3;10212:93;:::i;:::-;10330:2;10325:3;10321:12;10314:19;;9937:402;;;:::o;10345:366::-;10487:3;10508:67;10572:2;10567:3;10508:67;:::i;:::-;10501:74;;10584:93;10673:3;10584:93;:::i;:::-;10702:2;10697:3;10693:12;10686:19;;10345:366;;;:::o;10717:::-;10859:3;10880:67;10944:2;10939:3;10880:67;:::i;:::-;10873:74;;10956:93;11045:3;10956:93;:::i;:::-;11074:2;11069:3;11065:12;11058:19;;10717:366;;;:::o;11089:::-;11231:3;11252:67;11316:2;11311:3;11252:67;:::i;:::-;11245:74;;11328:93;11417:3;11328:93;:::i;:::-;11446:2;11441:3;11437:12;11430:19;;11089:366;;;:::o;11461:402::-;11621:3;11642:85;11724:2;11719:3;11642:85;:::i;:::-;11635:92;;11736:93;11825:3;11736:93;:::i;:::-;11854:2;11849:3;11845:12;11838:19;;11461:402;;;:::o;11869:366::-;12011:3;12032:67;12096:2;12091:3;12032:67;:::i;:::-;12025:74;;12108:93;12197:3;12108:93;:::i;:::-;12226:2;12221:3;12217:12;12210:19;;11869:366;;;:::o;12241:::-;12383:3;12404:67;12468:2;12463:3;12404:67;:::i;:::-;12397:74;;12480:93;12569:3;12480:93;:::i;:::-;12598:2;12593:3;12589:12;12582:19;;12241:366;;;:::o;12613:::-;12755:3;12776:67;12840:2;12835:3;12776:67;:::i;:::-;12769:74;;12852:93;12941:3;12852:93;:::i;:::-;12970:2;12965:3;12961:12;12954:19;;12613:366;;;:::o;12985:402::-;13145:3;13166:85;13248:2;13243:3;13166:85;:::i;:::-;13159:92;;13260:93;13349:3;13260:93;:::i;:::-;13378:2;13373:3;13369:12;13362:19;;12985:402;;;:::o;13393:400::-;13553:3;13574:84;13656:1;13651:3;13574:84;:::i;:::-;13567:91;;13667:93;13756:3;13667:93;:::i;:::-;13785:1;13780:3;13776:11;13769:18;;13393:400;;;:::o;13799:366::-;13941:3;13962:67;14026:2;14021:3;13962:67;:::i;:::-;13955:74;;14038:93;14127:3;14038:93;:::i;:::-;14156:2;14151:3;14147:12;14140:19;;13799:366;;;:::o;14171:400::-;14331:3;14352:84;14434:1;14429:3;14352:84;:::i;:::-;14345:91;;14445:93;14534:3;14445:93;:::i;:::-;14563:1;14558:3;14554:11;14547:18;;14171:400;;;:::o;14577:366::-;14719:3;14740:67;14804:2;14799:3;14740:67;:::i;:::-;14733:74;;14816:93;14905:3;14816:93;:::i;:::-;14934:2;14929:3;14925:12;14918:19;;14577:366;;;:::o;14949:400::-;15109:3;15130:84;15212:1;15207:3;15130:84;:::i;:::-;15123:91;;15223:93;15312:3;15223:93;:::i;:::-;15341:1;15336:3;15332:11;15325:18;;14949:400;;;:::o;15355:366::-;15497:3;15518:67;15582:2;15577:3;15518:67;:::i;:::-;15511:74;;15594:93;15683:3;15594:93;:::i;:::-;15712:2;15707:3;15703:12;15696:19;;15355:366;;;:::o;15727:::-;15869:3;15890:67;15954:2;15949:3;15890:67;:::i;:::-;15883:74;;15966:93;16055:3;15966:93;:::i;:::-;16084:2;16079:3;16075:12;16068:19;;15727:366;;;:::o;16099:400::-;16259:3;16280:84;16362:1;16357:3;16280:84;:::i;:::-;16273:91;;16373:93;16462:3;16373:93;:::i;:::-;16491:1;16486:3;16482:11;16475:18;;16099:400;;;:::o;16505:366::-;16647:3;16668:67;16732:2;16727:3;16668:67;:::i;:::-;16661:74;;16744:93;16833:3;16744:93;:::i;:::-;16862:2;16857:3;16853:12;16846:19;;16505:366;;;:::o;16877:400::-;17037:3;17058:84;17140:1;17135:3;17058:84;:::i;:::-;17051:91;;17151:93;17240:3;17151:93;:::i;:::-;17269:1;17264:3;17260:11;17253:18;;16877:400;;;:::o;17283:366::-;17425:3;17446:67;17510:2;17505:3;17446:67;:::i;:::-;17439:74;;17522:93;17611:3;17522:93;:::i;:::-;17640:2;17635:3;17631:12;17624:19;;17283:366;;;:::o;17655:::-;17797:3;17818:67;17882:2;17877:3;17818:67;:::i;:::-;17811:74;;17894:93;17983:3;17894:93;:::i;:::-;18012:2;18007:3;18003:12;17996:19;;17655:366;;;:::o;18027:::-;18169:3;18190:67;18254:2;18249:3;18190:67;:::i;:::-;18183:74;;18266:93;18355:3;18266:93;:::i;:::-;18384:2;18379:3;18375:12;18368:19;;18027:366;;;:::o;18399:::-;18541:3;18562:67;18626:2;18621:3;18562:67;:::i;:::-;18555:74;;18638:93;18727:3;18638:93;:::i;:::-;18756:2;18751:3;18747:12;18740:19;;18399:366;;;:::o;18771:402::-;18931:3;18952:85;19034:2;19029:3;18952:85;:::i;:::-;18945:92;;19046:93;19135:3;19046:93;:::i;:::-;19164:2;19159:3;19155:12;19148:19;;18771:402;;;:::o;19179:404::-;19339:3;19360:86;19442:3;19437;19360:86;:::i;:::-;19353:93;;19455;19544:3;19455:93;:::i;:::-;19573:3;19568;19564:13;19557:20;;19179:404;;;:::o;19589:366::-;19731:3;19752:67;19816:2;19811:3;19752:67;:::i;:::-;19745:74;;19828:93;19917:3;19828:93;:::i;:::-;19946:2;19941:3;19937:12;19930:19;;19589:366;;;:::o;19961:402::-;20121:3;20142:85;20224:2;20219:3;20142:85;:::i;:::-;20135:92;;20236:93;20325:3;20236:93;:::i;:::-;20354:2;20349:3;20345:12;20338:19;;19961:402;;;:::o;20369:400::-;20529:3;20550:84;20632:1;20627:3;20550:84;:::i;:::-;20543:91;;20643:93;20732:3;20643:93;:::i;:::-;20761:1;20756:3;20752:11;20745:18;;20369:400;;;:::o;20775:366::-;20917:3;20938:67;21002:2;20997:3;20938:67;:::i;:::-;20931:74;;21014:93;21103:3;21014:93;:::i;:::-;21132:2;21127:3;21123:12;21116:19;;20775:366;;;:::o;21147:::-;21289:3;21310:67;21374:2;21369:3;21310:67;:::i;:::-;21303:74;;21386:93;21475:3;21386:93;:::i;:::-;21504:2;21499:3;21495:12;21488:19;;21147:366;;;:::o;21519:::-;21661:3;21682:67;21746:2;21741:3;21682:67;:::i;:::-;21675:74;;21758:93;21847:3;21758:93;:::i;:::-;21876:2;21871:3;21867:12;21860:19;;21519:366;;;:::o;21891:400::-;22051:3;22072:84;22154:1;22149:3;22072:84;:::i;:::-;22065:91;;22165:93;22254:3;22165:93;:::i;:::-;22283:1;22278:3;22274:11;22267:18;;21891:400;;;:::o;22297:118::-;22384:24;22402:5;22384:24;:::i;:::-;22379:3;22372:37;22297:118;;:::o;22421:157::-;22526:45;22546:24;22564:5;22546:24;:::i;:::-;22526:45;:::i;:::-;22521:3;22514:58;22421:157;;:::o;22584:275::-;22716:3;22738:95;22829:3;22820:6;22738:95;:::i;:::-;22731:102;;22850:3;22843:10;;22584:275;;;;:::o;22865:1555::-;23381:3;23403:95;23494:3;23485:6;23403:95;:::i;:::-;23396:102;;23515:95;23606:3;23597:6;23515:95;:::i;:::-;23508:102;;23627:95;23718:3;23709:6;23627:95;:::i;:::-;23620:102;;23739:95;23830:3;23821:6;23739:95;:::i;:::-;23732:102;;23851:95;23942:3;23933:6;23851:95;:::i;:::-;23844:102;;23963:95;24054:3;24045:6;23963:95;:::i;:::-;23956:102;;24075:95;24166:3;24157:6;24075:95;:::i;:::-;24068:102;;24187:95;24278:3;24269:6;24187:95;:::i;:::-;24180:102;;24299:95;24390:3;24381:6;24299:95;:::i;:::-;24292:102;;24411:3;24404:10;;22865:1555;;;;;;;;;;;;:::o;24426:695::-;24704:3;24726:95;24817:3;24808:6;24726:95;:::i;:::-;24719:102;;24838:148;24982:3;24838:148;:::i;:::-;24831:155;;25003:92;25091:3;25082:6;25003:92;:::i;:::-;24996:99;;25112:3;25105:10;;24426:695;;;;;:::o;25127:1233::-;25610:3;25632:148;25776:3;25632:148;:::i;:::-;25625:155;;25797:95;25888:3;25879:6;25797:95;:::i;:::-;25790:102;;25909:148;26053:3;25909:148;:::i;:::-;25902:155;;26074:95;26165:3;26156:6;26074:95;:::i;:::-;26067:102;;26186:148;26330:3;26186:148;:::i;:::-;26179:155;;26351:3;26344:10;;25127:1233;;;;;:::o;26366:2085::-;27147:3;27169:148;27313:3;27169:148;:::i;:::-;27162:155;;27334:95;27425:3;27416:6;27334:95;:::i;:::-;27327:102;;27446:148;27590:3;27446:148;:::i;:::-;27439:155;;27611:95;27702:3;27693:6;27611:95;:::i;:::-;27604:102;;27723:148;27867:3;27723:148;:::i;:::-;27716:155;;27888:95;27979:3;27970:6;27888:95;:::i;:::-;27881:102;;28000:148;28144:3;28000:148;:::i;:::-;27993:155;;28165:95;28256:3;28247:6;28165:95;:::i;:::-;28158:102;;28277:148;28421:3;28277:148;:::i;:::-;28270:155;;28442:3;28435:10;;26366:2085;;;;;;;:::o;28457:1393::-;28988:3;29010:148;29154:3;29010:148;:::i;:::-;29003:155;;29175:95;29266:3;29257:6;29175:95;:::i;:::-;29168:102;;29287:148;29431:3;29287:148;:::i;:::-;29280:155;;29452:95;29543:3;29534:6;29452:95;:::i;:::-;29445:102;;29564:148;29708:3;29564:148;:::i;:::-;29557:155;;29729:95;29820:3;29811:6;29729:95;:::i;:::-;29722:102;;29841:3;29834:10;;28457:1393;;;;;;:::o;29856:1659::-;30488:3;30510:148;30654:3;30510:148;:::i;:::-;30503:155;;30675:95;30766:3;30757:6;30675:95;:::i;:::-;30668:102;;30787:148;30931:3;30787:148;:::i;:::-;30780:155;;30952:95;31043:3;31034:6;30952:95;:::i;:::-;30945:102;;31064:148;31208:3;31064:148;:::i;:::-;31057:155;;31229:95;31320:3;31311:6;31229:95;:::i;:::-;31222:102;;31341:148;31485:3;31341:148;:::i;:::-;31334:155;;31506:3;31499:10;;29856:1659;;;;;;:::o;31521:541::-;31754:3;31776:148;31920:3;31776:148;:::i;:::-;31769:155;;31941:95;32032:3;32023:6;31941:95;:::i;:::-;31934:102;;32053:3;32046:10;;31521:541;;;;:::o;32068:::-;32301:3;32323:148;32467:3;32323:148;:::i;:::-;32316:155;;32488:95;32579:3;32570:6;32488:95;:::i;:::-;32481:102;;32600:3;32593:10;;32068:541;;;;:::o;32615:416::-;32775:3;32790:75;32861:3;32852:6;32790:75;:::i;:::-;32890:2;32885:3;32881:12;32874:19;;32910:95;33001:3;32992:6;32910:95;:::i;:::-;32903:102;;33022:3;33015:10;;32615:416;;;;;:::o;33037:820::-;33261:3;33276:75;33347:3;33338:6;33276:75;:::i;:::-;33376:2;33371:3;33367:12;33360:19;;33389:75;33460:3;33451:6;33389:75;:::i;:::-;33489:2;33484:3;33480:12;33473:19;;33502:75;33573:3;33564:6;33502:75;:::i;:::-;33602:2;33597:3;33593:12;33586:19;;33615:75;33686:3;33677:6;33615:75;:::i;:::-;33715:2;33710:3;33706:12;33699:19;;33728:75;33799:3;33790:6;33728:75;:::i;:::-;33828:2;33823:3;33819:12;33812:19;;33848:3;33841:10;;33037:820;;;;;;;;:::o;33863:222::-;33956:4;33994:2;33983:9;33979:18;33971:26;;34007:71;34075:1;34064:9;34060:17;34051:6;34007:71;:::i;:::-;33863:222;;;;:::o;34091:640::-;34286:4;34324:3;34313:9;34309:19;34301:27;;34338:71;34406:1;34395:9;34391:17;34382:6;34338:71;:::i;:::-;34419:72;34487:2;34476:9;34472:18;34463:6;34419:72;:::i;:::-;34501;34569:2;34558:9;34554:18;34545:6;34501:72;:::i;:::-;34620:9;34614:4;34610:20;34605:2;34594:9;34590:18;34583:48;34648:76;34719:4;34710:6;34648:76;:::i;:::-;34640:84;;34091:640;;;;;;;:::o;34737:210::-;34824:4;34862:2;34851:9;34847:18;34839:26;;34875:65;34937:1;34926:9;34922:17;34913:6;34875:65;:::i;:::-;34737:210;;;;:::o;34953:313::-;35066:4;35104:2;35093:9;35089:18;35081:26;;35153:9;35147:4;35143:20;35139:1;35128:9;35124:17;35117:47;35181:78;35254:4;35245:6;35181:78;:::i;:::-;35173:86;;34953:313;;;;:::o;35272:419::-;35438:4;35476:2;35465:9;35461:18;35453:26;;35525:9;35519:4;35515:20;35511:1;35500:9;35496:17;35489:47;35553:131;35679:4;35553:131;:::i;:::-;35545:139;;35272:419;;;:::o;35697:::-;35863:4;35901:2;35890:9;35886:18;35878:26;;35950:9;35944:4;35940:20;35936:1;35925:9;35921:17;35914:47;35978:131;36104:4;35978:131;:::i;:::-;35970:139;;35697:419;;;:::o;36122:::-;36288:4;36326:2;36315:9;36311:18;36303:26;;36375:9;36369:4;36365:20;36361:1;36350:9;36346:17;36339:47;36403:131;36529:4;36403:131;:::i;:::-;36395:139;;36122:419;;;:::o;36547:::-;36713:4;36751:2;36740:9;36736:18;36728:26;;36800:9;36794:4;36790:20;36786:1;36775:9;36771:17;36764:47;36828:131;36954:4;36828:131;:::i;:::-;36820:139;;36547:419;;;:::o;36972:::-;37138:4;37176:2;37165:9;37161:18;37153:26;;37225:9;37219:4;37215:20;37211:1;37200:9;37196:17;37189:47;37253:131;37379:4;37253:131;:::i;:::-;37245:139;;36972:419;;;:::o;37397:::-;37563:4;37601:2;37590:9;37586:18;37578:26;;37650:9;37644:4;37640:20;37636:1;37625:9;37621:17;37614:47;37678:131;37804:4;37678:131;:::i;:::-;37670:139;;37397:419;;;:::o;37822:::-;37988:4;38026:2;38015:9;38011:18;38003:26;;38075:9;38069:4;38065:20;38061:1;38050:9;38046:17;38039:47;38103:131;38229:4;38103:131;:::i;:::-;38095:139;;37822:419;;;:::o;38247:::-;38413:4;38451:2;38440:9;38436:18;38428:26;;38500:9;38494:4;38490:20;38486:1;38475:9;38471:17;38464:47;38528:131;38654:4;38528:131;:::i;:::-;38520:139;;38247:419;;;:::o;38672:::-;38838:4;38876:2;38865:9;38861:18;38853:26;;38925:9;38919:4;38915:20;38911:1;38900:9;38896:17;38889:47;38953:131;39079:4;38953:131;:::i;:::-;38945:139;;38672:419;;;:::o;39097:::-;39263:4;39301:2;39290:9;39286:18;39278:26;;39350:9;39344:4;39340:20;39336:1;39325:9;39321:17;39314:47;39378:131;39504:4;39378:131;:::i;:::-;39370:139;;39097:419;;;:::o;39522:::-;39688:4;39726:2;39715:9;39711:18;39703:26;;39775:9;39769:4;39765:20;39761:1;39750:9;39746:17;39739:47;39803:131;39929:4;39803:131;:::i;:::-;39795:139;;39522:419;;;:::o;39947:::-;40113:4;40151:2;40140:9;40136:18;40128:26;;40200:9;40194:4;40190:20;40186:1;40175:9;40171:17;40164:47;40228:131;40354:4;40228:131;:::i;:::-;40220:139;;39947:419;;;:::o;40372:::-;40538:4;40576:2;40565:9;40561:18;40553:26;;40625:9;40619:4;40615:20;40611:1;40600:9;40596:17;40589:47;40653:131;40779:4;40653:131;:::i;:::-;40645:139;;40372:419;;;:::o;40797:::-;40963:4;41001:2;40990:9;40986:18;40978:26;;41050:9;41044:4;41040:20;41036:1;41025:9;41021:17;41014:47;41078:131;41204:4;41078:131;:::i;:::-;41070:139;;40797:419;;;:::o;41222:::-;41388:4;41426:2;41415:9;41411:18;41403:26;;41475:9;41469:4;41465:20;41461:1;41450:9;41446:17;41439:47;41503:131;41629:4;41503:131;:::i;:::-;41495:139;;41222:419;;;:::o;41647:::-;41813:4;41851:2;41840:9;41836:18;41828:26;;41900:9;41894:4;41890:20;41886:1;41875:9;41871:17;41864:47;41928:131;42054:4;41928:131;:::i;:::-;41920:139;;41647:419;;;:::o;42072:::-;42238:4;42276:2;42265:9;42261:18;42253:26;;42325:9;42319:4;42315:20;42311:1;42300:9;42296:17;42289:47;42353:131;42479:4;42353:131;:::i;:::-;42345:139;;42072:419;;;:::o;42497:::-;42663:4;42701:2;42690:9;42686:18;42678:26;;42750:9;42744:4;42740:20;42736:1;42725:9;42721:17;42714:47;42778:131;42904:4;42778:131;:::i;:::-;42770:139;;42497:419;;;:::o;42922:::-;43088:4;43126:2;43115:9;43111:18;43103:26;;43175:9;43169:4;43165:20;43161:1;43150:9;43146:17;43139:47;43203:131;43329:4;43203:131;:::i;:::-;43195:139;;42922:419;;;:::o;43347:222::-;43440:4;43478:2;43467:9;43463:18;43455:26;;43491:71;43559:1;43548:9;43544:17;43535:6;43491:71;:::i;:::-;43347:222;;;;:::o;43575:129::-;43609:6;43636:20;;:::i;:::-;43626:30;;43665:33;43693:4;43685:6;43665:33;:::i;:::-;43575:129;;;:::o;43710:75::-;43743:6;43776:2;43770:9;43760:19;;43710:75;:::o;43791:307::-;43852:4;43942:18;43934:6;43931:30;43928:56;;;43964:18;;:::i;:::-;43928:56;44002:29;44024:6;44002:29;:::i;:::-;43994:37;;44086:4;44080;44076:15;44068:23;;43791:307;;;:::o;44104:141::-;44153:4;44176:3;44168:11;;44199:3;44196:1;44189:14;44233:4;44230:1;44220:18;44212:26;;44104:141;;;:::o;44251:98::-;44302:6;44336:5;44330:12;44320:22;;44251:98;;;:::o;44355:99::-;44407:6;44441:5;44435:12;44425:22;;44355:99;;;:::o;44460:168::-;44543:11;44577:6;44572:3;44565:19;44617:4;44612:3;44608:14;44593:29;;44460:168;;;;:::o;44634:169::-;44718:11;44752:6;44747:3;44740:19;44792:4;44787:3;44783:14;44768:29;;44634:169;;;;:::o;44809:148::-;44911:11;44948:3;44933:18;;44809:148;;;;:::o;44963:305::-;45003:3;45022:20;45040:1;45022:20;:::i;:::-;45017:25;;45056:20;45074:1;45056:20;:::i;:::-;45051:25;;45210:1;45142:66;45138:74;45135:1;45132:81;45129:107;;;45216:18;;:::i;:::-;45129:107;45260:1;45257;45253:9;45246:16;;44963:305;;;;:::o;45274:185::-;45314:1;45331:20;45349:1;45331:20;:::i;:::-;45326:25;;45365:20;45383:1;45365:20;:::i;:::-;45360:25;;45404:1;45394:35;;45409:18;;:::i;:::-;45394:35;45451:1;45448;45444:9;45439:14;;45274:185;;;;:::o;45465:348::-;45505:7;45528:20;45546:1;45528:20;:::i;:::-;45523:25;;45562:20;45580:1;45562:20;:::i;:::-;45557:25;;45750:1;45682:66;45678:74;45675:1;45672:81;45667:1;45660:9;45653:17;45649:105;45646:131;;;45757:18;;:::i;:::-;45646:131;45805:1;45802;45798:9;45787:20;;45465:348;;;;:::o;45819:191::-;45859:4;45879:20;45897:1;45879:20;:::i;:::-;45874:25;;45913:20;45931:1;45913:20;:::i;:::-;45908:25;;45952:1;45949;45946:8;45943:34;;;45957:18;;:::i;:::-;45943:34;46002:1;45999;45995:9;45987:17;;45819:191;;;;:::o;46016:96::-;46053:7;46082:24;46100:5;46082:24;:::i;:::-;46071:35;;46016:96;;;:::o;46118:90::-;46152:7;46195:5;46188:13;46181:21;46170:32;;46118:90;;;:::o;46214:77::-;46251:7;46280:5;46269:16;;46214:77;;;:::o;46297:149::-;46333:7;46373:66;46366:5;46362:78;46351:89;;46297:149;;;:::o;46452:126::-;46489:7;46529:42;46522:5;46518:54;46507:65;;46452:126;;;:::o;46584:77::-;46621:7;46650:5;46639:16;;46584:77;;;:::o;46667:154::-;46751:6;46746:3;46741;46728:30;46813:1;46804:6;46799:3;46795:16;46788:27;46667:154;;;:::o;46827:307::-;46895:1;46905:113;46919:6;46916:1;46913:13;46905:113;;;47004:1;46999:3;46995:11;46989:18;46985:1;46980:3;46976:11;46969:39;46941:2;46938:1;46934:10;46929:15;;46905:113;;;47036:6;47033:1;47030:13;47027:101;;;47116:1;47107:6;47102:3;47098:16;47091:27;47027:101;46876:258;46827:307;;;:::o;47140:320::-;47184:6;47221:1;47215:4;47211:12;47201:22;;47268:1;47262:4;47258:12;47289:18;47279:81;;47345:4;47337:6;47333:17;47323:27;;47279:81;47407:2;47399:6;47396:14;47376:18;47373:38;47370:84;;;47426:18;;:::i;:::-;47370:84;47191:269;47140:320;;;:::o;47466:281::-;47549:27;47571:4;47549:27;:::i;:::-;47541:6;47537:40;47679:6;47667:10;47664:22;47643:18;47631:10;47628:34;47625:62;47622:88;;;47690:18;;:::i;:::-;47622:88;47730:10;47726:2;47719:22;47509:238;47466:281;;:::o;47753:233::-;47792:3;47815:24;47833:5;47815:24;:::i;:::-;47806:33;;47861:66;47854:5;47851:77;47848:103;;;47931:18;;:::i;:::-;47848:103;47978:1;47971:5;47967:13;47960:20;;47753:233;;;:::o;47992:100::-;48031:7;48060:26;48080:5;48060:26;:::i;:::-;48049:37;;47992:100;;;:::o;48098:79::-;48137:7;48166:5;48155:16;;48098:79;;;:::o;48183:94::-;48222:7;48251:20;48265:5;48251:20;:::i;:::-;48240:31;;48183:94;;;:::o;48283:79::-;48322:7;48351:5;48340:16;;48283:79;;;:::o;48368:176::-;48400:1;48417:20;48435:1;48417:20;:::i;:::-;48412:25;;48451:20;48469:1;48451:20;:::i;:::-;48446:25;;48490:1;48480:35;;48495:18;;:::i;:::-;48480:35;48536:1;48533;48529:9;48524:14;;48368:176;;;;:::o;48550:180::-;48598:77;48595:1;48588:88;48695:4;48692:1;48685:15;48719:4;48716:1;48709:15;48736:180;48784:77;48781:1;48774:88;48881:4;48878:1;48871:15;48905:4;48902:1;48895:15;48922:180;48970:77;48967:1;48960:88;49067:4;49064:1;49057:15;49091:4;49088:1;49081:15;49108:180;49156:77;49153:1;49146:88;49253:4;49250:1;49243:15;49277:4;49274:1;49267:15;49294:180;49342:77;49339:1;49332:88;49439:4;49436:1;49429:15;49463:4;49460:1;49453:15;49480:180;49528:77;49525:1;49518:88;49625:4;49622:1;49615:15;49649:4;49646:1;49639:15;49666:117;49775:1;49772;49765:12;49789:117;49898:1;49895;49888:12;49912:117;50021:1;50018;50011:12;50035:117;50144:1;50141;50134:12;50158:102;50199:6;50250:2;50246:7;50241:2;50234:5;50230:14;50226:28;50216:38;;50158:102;;;:::o;50266:94::-;50299:8;50347:5;50343:2;50339:14;50318:35;;50266:94;;;:::o;50366:214::-;50506:66;50502:1;50494:6;50490:14;50483:90;50366:214;:::o;50586:::-;50726:66;50722:1;50714:6;50710:14;50703:90;50586:214;:::o;50806:230::-;50946:34;50942:1;50934:6;50930:14;50923:58;51015:13;51010:2;51002:6;50998:15;50991:38;50806:230;:::o;51042:237::-;51182:34;51178:1;51170:6;51166:14;51159:58;51251:20;51246:2;51238:6;51234:15;51227:45;51042:237;:::o;51285:225::-;51425:34;51421:1;51413:6;51409:14;51402:58;51494:8;51489:2;51481:6;51477:15;51470:33;51285:225;:::o;51516:214::-;51656:66;51652:1;51644:6;51640:14;51633:90;51516:214;:::o;51736:178::-;51876:30;51872:1;51864:6;51860:14;51853:54;51736:178;:::o;51920:223::-;52060:34;52056:1;52048:6;52044:14;52037:58;52129:6;52124:2;52116:6;52112:15;52105:31;51920:223;:::o;52149:175::-;52289:27;52285:1;52277:6;52273:14;52266:51;52149:175;:::o;52330:214::-;52470:66;52466:1;52458:6;52454:14;52447:90;52330:214;:::o;52550:::-;52690:66;52686:1;52678:6;52674:14;52667:90;52550:214;:::o;52770:231::-;52910:34;52906:1;52898:6;52894:14;52887:58;52979:14;52974:2;52966:6;52962:15;52955:39;52770:231;:::o;53007:151::-;53147:3;53143:1;53135:6;53131:14;53124:27;53007:151;:::o;53164:243::-;53304:34;53300:1;53292:6;53288:14;53281:58;53373:26;53368:2;53360:6;53356:15;53349:51;53164:243;:::o;53413:214::-;53553:66;53549:1;53541:6;53537:14;53530:90;53413:214;:::o;53633:229::-;53773:34;53769:1;53761:6;53757:14;53750:58;53842:12;53837:2;53829:6;53825:15;53818:37;53633:229;:::o;53868:228::-;54008:34;54004:1;53996:6;53992:14;53985:58;54077:11;54072:2;54064:6;54060:15;54053:36;53868:228;:::o;54102:214::-;54242:66;54238:1;54230:6;54226:14;54219:90;54102:214;:::o;54322:182::-;54462:34;54458:1;54450:6;54446:14;54439:58;54322:182;:::o;54510:154::-;54650:6;54646:1;54638:6;54634:14;54627:30;54510:154;:::o;54670:231::-;54810:34;54806:1;54798:6;54794:14;54787:58;54879:14;54874:2;54866:6;54862:15;54855:39;54670:231;:::o;54907:182::-;55047:34;55043:1;55035:6;55031:14;55024:58;54907:182;:::o;55095:166::-;55235:18;55231:1;55223:6;55219:14;55212:42;55095:166;:::o;55267:228::-;55407:34;55403:1;55395:6;55391:14;55384:58;55476:11;55471:2;55463:6;55459:15;55452:36;55267:228;:::o;55501:315::-;55641:66;55637:1;55629:6;55625:14;55618:90;55742:66;55737:2;55729:6;55725:15;55718:91;55501:315;:::o;55822:524::-;55962:66;55958:1;55950:6;55946:14;55939:90;56063:34;56058:2;56050:6;56046:15;56039:59;56132:66;56127:2;56119:6;56115:15;56108:91;56233:66;56228:2;56220:6;56216:15;56209:91;56335:3;56329;56321:6;56317:16;56310:29;55822:524;:::o;56352:220::-;56492:34;56488:1;56480:6;56476:14;56469:58;56561:3;56556:2;56548:6;56544:15;56537:28;56352:220;:::o;56578:179::-;56718:31;56714:1;56706:6;56702:14;56695:55;56578:179;:::o;56763:153::-;56903:5;56899:1;56891:6;56887:14;56880:29;56763:153;:::o;56922:236::-;57062:34;57058:1;57050:6;57046:14;57039:58;57131:19;57126:2;57118:6;57114:15;57107:44;56922:236;:::o;57164:231::-;57304:34;57300:1;57292:6;57288:14;57281:58;57373:14;57368:2;57360:6;57356:15;57349:39;57164:231;:::o;57401:181::-;57541:33;57537:1;57529:6;57525:14;57518:57;57401:181;:::o;57588:214::-;57728:66;57724:1;57716:6;57712:14;57705:90;57588:214;:::o;57808:122::-;57881:24;57899:5;57881:24;:::i;:::-;57874:5;57871:35;57861:63;;57920:1;57917;57910:12;57861:63;57808:122;:::o;57936:116::-;58006:21;58021:5;58006:21;:::i;:::-;57999:5;57996:32;57986:60;;58042:1;58039;58032:12;57986:60;57936:116;:::o;58058:120::-;58130:23;58147:5;58130:23;:::i;:::-;58123:5;58120:34;58110:62;;58168:1;58165;58158:12;58110:62;58058:120;:::o;58184:122::-;58257:24;58275:5;58257:24;:::i;:::-;58250:5;58247:35;58237:63;;58296:1;58293;58286:12;58237:63;58184:122;:::o
Swarm Source
ipfs://b375ba43f6c9a718a33441289b6f6096b26800783e0438182f21a539080eea6a
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.