ERC-721
Overview
Max Total Supply
3,499 PartyPolarBears
Holders
1,208
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
4 PartyPolarBearsLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
PartyPolarBears
Compiler Version
v0.8.5+commit.a4f2e591
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-09-06 */ // Sources flattened with hardhat v2.5.0 https://hardhat.org // File @openzeppelin/contracts/utils/introspection/[email protected] // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File @openzeppelin/contracts/token/ERC721/[email protected] /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File @openzeppelin/contracts/token/ERC721/[email protected] /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File @openzeppelin/contracts/utils/[email protected] /** * @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); } } } } // File @openzeppelin/contracts/utils/[email protected] /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/utils/[email protected] /** * @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); } } // File @openzeppelin/contracts/utils/introspection/[email protected] /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File @openzeppelin/contracts/token/ERC721/[email protected] /** * @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 {} } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] /** * @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); } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] /** * @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(); } } // File @openzeppelin/contracts/access/[email protected] /** * @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); } } // File @openzeppelin/contracts/utils/[email protected] /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File contracts/PartyPolarBears.sol abstract contract PartyPenguins { function balanceOf(address owner) external virtual view returns (uint256 balance); function tokenOfOwnerByIndex(address owner, uint256 index) public virtual view returns (uint256); } contract PartyPolarBears is ERC721Enumerable, Ownable { string _baseTokenURI; uint256 private _maxMint = 20; uint256 private _price = 606 * 10**14; //0.0606 ETH; bool public _saleActive = false; bool public _claimActive = false; bool public _preSaleActive = false; uint public constant MAX_ENTRIES = 6060; mapping(uint256 => bool) public _claimedIds; struct UnclaimedItems { uint unclaimedItemCount; uint256[] unclaimedItemIds; } uint public constant MAX_CLAIMABLE = 3030; using Counters for Counters.Counter; Counters.Counter private _tokenClaimedTracker; PartyPenguins private party_penguins; constructor(string memory baseURI) ERC721("Party Polar Bears", "PartyPolarBears") { setBaseURI(baseURI); party_penguins = PartyPenguins(0x31F3bba9b71cB1D5e96cD62F0bA3958C034b55E9); // team gets first 40 mint(msg.sender, 40); } function _totalClaimed() public view returns (uint) { return _tokenClaimedTracker.current(); } function _unclaimedItemIds(address _inputAddress) public view returns(UnclaimedItems memory) { uint tokenCount = party_penguins.balanceOf(_inputAddress); UnclaimedItems memory result = UnclaimedItems(0, new uint256[](tokenCount)); for(uint256 i; i < tokenCount; i++){ uint tokenId = party_penguins.tokenOfOwnerByIndex(_inputAddress, i); if (_claimedIds[tokenId] == false) { result.unclaimedItemIds[result.unclaimedItemCount] = tokenId; result.unclaimedItemCount +=1; } } return result; } function claim(uint256 num) public { if(msg.sender != owner()) { require(_claimActive, "Claim is not Active, wait for your turn"); } uint256 _claimable_supply = _totalClaimed(); require (_claimable_supply + num < (MAX_CLAIMABLE+1), "Exceeds maximum free supply" ); uint256 _total_supply = totalSupply(); require( _total_supply + num < (MAX_ENTRIES+1), "Exceeds maximum supply" ); UnclaimedItems memory uc_items = _unclaimedItemIds(msg.sender); require (num*2 < (uc_items.unclaimedItemCount+1) , "You can only claim 1 free Polar Bear for 2 Party Penguins"); for(uint256 i; i < num; i++) { _tokenClaimedTracker.increment(); /** update the mapping of claimed penguin ids */ _claimedIds[uc_items.unclaimedItemIds[i*2]] = true; _claimedIds[uc_items.unclaimedItemIds[i*2+1]] = true; _safeMint( msg.sender, _total_supply + i ); } } function mint(address _to, uint256 num) public payable { uint256 supply = totalSupply(); if(msg.sender != owner()) { if (party_penguins.balanceOf(msg.sender) < 1) { require(_saleActive, "Sale not Active"); } require(_preSaleActive, "Pre Sale not Active"); require( num < (_maxMint+1),"You can mint a maximum of 20 Polar Bears" ); require( msg.value >= _price * num,"Ether sent is not correct" ); } require( supply + num < (MAX_ENTRIES+1), "Exceeds maximum supply" ); for(uint256 i; i < num; i++){ _safeMint( _to, supply + i ); } } function walletOfOwner(address _owner) public view returns(uint256[] memory) { uint256 tokenCount = balanceOf(_owner); uint256[] memory tokensId = new uint256[](tokenCount); for(uint256 i; i < tokenCount; i++){ tokensId[i] = tokenOfOwnerByIndex(_owner, i); } return tokensId; } function getPrice() public view returns (uint256){ if(msg.sender == owner()) { return 0; } return _price; } // Just in case Eth does some crazy stuff function setPrice(uint256 _newPrice) public onlyOwner() { _price = _newPrice; } function getMaxMint() public view returns (uint256){ return _maxMint; } function setMaxMint(uint256 _newMaxMint) public onlyOwner() { _maxMint = _newMaxMint; } function _baseURI() internal view virtual override returns (string memory) { return _baseTokenURI; } function setBaseURI(string memory baseURI) public onlyOwner { _baseTokenURI = baseURI; } function setsaleBool(bool val) public onlyOwner { _saleActive = val; } function setclaimBool(bool val) public onlyOwner { _claimActive = val; } function setpresaleBool(bool val) public onlyOwner { _preSaleActive = val; } function withdrawAll() public payable onlyOwner { require(payable(msg.sender).send(address(this).balance)); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":[],"name":"MAX_CLAIMABLE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_ENTRIES","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_claimActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_claimedIds","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_preSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_saleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_inputAddress","type":"address"}],"name":"_unclaimedItemIds","outputs":[{"components":[{"internalType":"uint256","name":"unclaimedItemCount","type":"uint256"},{"internalType":"uint256[]","name":"unclaimedItemIds","type":"uint256[]"}],"internalType":"struct PartyPolarBears.UnclaimedItems","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"num","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"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":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMaxMint","type":"uint256"}],"name":"setMaxMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"val","type":"bool"}],"name":"setclaimBool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"val","type":"bool"}],"name":"setpresaleBool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"val","type":"bool"}],"name":"setsaleBool","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"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526014600c5566d74b6101638000600d556000600e60006101000a81548160ff0219169083151502179055506000600e60016101000a81548160ff0219169083151502179055506000600e60026101000a81548160ff0219169083151502179055503480156200007257600080fd5b5060405162006a9738038062006a97833981810160405281019062000098919062001208565b6040518060400160405280601181526020017f506172747920506f6c61722042656172730000000000000000000000000000008152506040518060400160405280600f81526020017f5061727479506f6c61724265617273000000000000000000000000000000000081525081600090805190602001906200011c9291906200107a565b508060019080519060200190620001359291906200107a565b505050620001586200014c620001d860201b60201c565b620001e060201b60201c565b6200016981620002a660201b60201c565b7331f3bba9b71cb1d5e96cd62f0ba3958c034b55e9601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001d13360286200035160201b60201c565b5062001c68565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002b6620001d860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002dc6200065b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000335576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200032c90620015b1565b60405180910390fd5b80600b90805190602001906200034d9291906200107a565b5050565b6000620003636200068560201b60201c565b9050620003756200065b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614620005b2576001601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040162000407919062001474565b60206040518083038186803b1580156200042057600080fd5b505afa15801562000435573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200045b919062001259565b1015620004b557600e60009054906101000a900460ff16620004b4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004ab90620015d3565b60405180910390fd5b5b600e60029054906101000a900460ff1662000507576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004fe9062001507565b60405180910390fd5b6001600c54620005189190620016c5565b82106200055c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000553906200154b565b60405180910390fd5b81600d546200056c919062001722565b341015620005b1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005a89062001617565b60405180910390fd5b5b60016117ac620005c39190620016c5565b8282620005d19190620016c5565b1062000614576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200060b90620015f5565b60405180910390fd5b60005b8281101562000655576200063f848284620006339190620016c5565b6200069260201b60201c565b80806200064c90620018ca565b91505062000617565b50505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600880549050905090565b620006b4828260405180602001604052806000815250620006b860201b60201c565b5050565b620006ca83836200072660201b60201c565b620006df60008484846200090c60201b60201c565b62000721576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200071890620014e5565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000799576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000790906200158f565b60405180910390fd5b620007aa8162000ac660201b60201c565b15620007ed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007e49062001529565b60405180910390fd5b620008016000838362000b3260201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620008539190620016c5565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60006200093a8473ffffffffffffffffffffffffffffffffffffffff1662000c7960201b620021d01760201c565b1562000ab9578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026200096c620001d860201b60201c565b8786866040518563ffffffff1660e01b815260040162000990949392919062001491565b602060405180830381600087803b158015620009ab57600080fd5b505af1925050508015620009df57506040513d601f19601f82011682018060405250810190620009dc9190620011d6565b60015b62000a68573d806000811462000a12576040519150601f19603f3d011682016040523d82523d6000602084013e62000a17565b606091505b5060008151141562000a60576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a5790620014e5565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505062000abe565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b62000b4a83838362000c8c60201b620021e31760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000b975762000b918162000c9160201b60201c565b62000bdf565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462000bde5762000bdd838262000cda60201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000c2c5762000c268162000e5760201b60201c565b62000c74565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000c735762000c72828262000f3360201b60201c565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600162000cf48462000fbf60201b620019441760201c565b62000d00919062001783565b905060006007600084815260200190815260200160002054905081811462000de6576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062000e6d919062001783565b905060006009600084815260200190815260200160002054905060006008838154811062000ea05762000e9f620019a5565b5b90600052602060002001549050806008838154811062000ec55762000ec4620019a5565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062000f175762000f1662001976565b5b6001900381819060005260206000200160009055905550505050565b600062000f4b8362000fbf60201b620019441760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562001033576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200102a906200156d565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b82805462001088906200185e565b90600052602060002090601f016020900481019282620010ac5760008555620010f8565b82601f10620010c757805160ff1916838001178555620010f8565b82800160010185558215620010f8579182015b82811115620010f7578251825591602001919060010190620010da565b5b5090506200110791906200110b565b5090565b5b80821115620011265760008160009055506001016200110c565b5090565b6000620011416200113b8462001662565b62001639565b90508281526020810184848401111562001160576200115f62001a08565b5b6200116d84828562001828565b509392505050565b600081519050620011868162001c34565b92915050565b600082601f830112620011a457620011a362001a03565b5b8151620011b68482602086016200112a565b91505092915050565b600081519050620011d08162001c4e565b92915050565b600060208284031215620011ef57620011ee62001a12565b5b6000620011ff8482850162001175565b91505092915050565b60006020828403121562001221576200122062001a12565b5b600082015167ffffffffffffffff81111562001242576200124162001a0d565b5b62001250848285016200118c565b91505092915050565b60006020828403121562001272576200127162001a12565b5b60006200128284828501620011bf565b91505092915050565b6200129681620017be565b82525050565b6000620012a98262001698565b620012b58185620016a3565b9350620012c781856020860162001828565b620012d28162001a17565b840191505092915050565b6000620012ec603283620016b4565b9150620012f98262001a28565b604082019050919050565b600062001313601383620016b4565b9150620013208262001a77565b602082019050919050565b60006200133a601c83620016b4565b9150620013478262001aa0565b602082019050919050565b600062001361602883620016b4565b91506200136e8262001ac9565b604082019050919050565b600062001388602a83620016b4565b9150620013958262001b18565b604082019050919050565b6000620013af602083620016b4565b9150620013bc8262001b67565b602082019050919050565b6000620013d6602083620016b4565b9150620013e38262001b90565b602082019050919050565b6000620013fd600f83620016b4565b91506200140a8262001bb9565b602082019050919050565b600062001424601683620016b4565b9150620014318262001be2565b602082019050919050565b60006200144b601983620016b4565b9150620014588262001c0b565b602082019050919050565b6200146e816200181e565b82525050565b60006020820190506200148b60008301846200128b565b92915050565b6000608082019050620014a860008301876200128b565b620014b760208301866200128b565b620014c6604083018562001463565b8181036060830152620014da81846200129c565b905095945050505050565b600060208201905081810360008301526200150081620012dd565b9050919050565b60006020820190508181036000830152620015228162001304565b9050919050565b6000602082019050818103600083015262001544816200132b565b9050919050565b60006020820190508181036000830152620015668162001352565b9050919050565b60006020820190508181036000830152620015888162001379565b9050919050565b60006020820190508181036000830152620015aa81620013a0565b9050919050565b60006020820190508181036000830152620015cc81620013c7565b9050919050565b60006020820190508181036000830152620015ee81620013ee565b9050919050565b60006020820190508181036000830152620016108162001415565b9050919050565b6000602082019050818103600083015262001632816200143c565b9050919050565b60006200164562001658565b905062001653828262001894565b919050565b6000604051905090565b600067ffffffffffffffff82111562001680576200167f620019d4565b5b6200168b8262001a17565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000620016d2826200181e565b9150620016df836200181e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562001717576200171662001918565b5b828201905092915050565b60006200172f826200181e565b91506200173c836200181e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001778576200177762001918565b5b828202905092915050565b600062001790826200181e565b91506200179d836200181e565b925082821015620017b357620017b262001918565b5b828203905092915050565b6000620017cb82620017fe565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b83811015620018485780820151818401526020810190506200182b565b8381111562001858576000848401525b50505050565b600060028204905060018216806200187757607f821691505b602082108114156200188e576200188d62001947565b5b50919050565b6200189f8262001a17565b810181811067ffffffffffffffff82111715620018c157620018c0620019d4565b5b80604052505050565b6000620018d7826200181e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156200190d576200190c62001918565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f5072652053616c65206e6f742041637469766500000000000000000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f596f752063616e206d696e742061206d6178696d756d206f6620323020506f6c60008201527f6172204265617273000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f53616c65206e6f74204163746976650000000000000000000000000000000000600082015250565b7f45786365656473206d6178696d756d20737570706c7900000000000000000000600082015250565b7f45746865722073656e74206973206e6f7420636f727265637400000000000000600082015250565b62001c3f81620017d2565b811462001c4b57600080fd5b50565b62001c59816200181e565b811462001c6557600080fd5b50565b614e1f8062001c786000396000f3fe6080604052600436106102305760003560e01c80635ae5cce01161012e57806395d89b41116100ab578063c87b56dd1161006f578063c87b56dd14610831578063cd519e9a1461086e578063e985e9c514610899578063f2fde38b146108d6578063fd515e38146108ff57610230565b806395d89b411461075e57806398d5fdca14610789578063a22cb465146107b4578063ae30b66e146107dd578063b88d4fde1461080857610230565b80637d4cb964116100f25780637d4cb96414610698578063849b35d3146106c3578063853828b6146107005780638da5cb5b1461070a57806391b7f5ed1461073557610230565b80635ae5cce0146105a15780636352211e146105de57806370a082311461061b578063715018a6146106585780637896e99f1461066f57610230565b80632c2c852f116101bc578063438b630011610180578063438b6300146104ac5780634f6ccce7146104e9578063527733d914610526578063547520fe1461054f57806355f804b31461057857610230565b80632c2c852f146103d65780632f745c5914610401578063379607f51461043e57806340c10f191461046757806342842e0e1461048357610230565b806318160ddd1161020357806318160ddd146103035780631bfb60ce1461032e5780631cdf72c9146103575780631f46452f1461038257806323b872dd146103ad57610230565b806301ffc9a71461023557806306fdde0314610272578063081812fc1461029d578063095ea7b3146102da575b600080fd5b34801561024157600080fd5b5061025c600480360381019061025791906136d7565b61092a565b6040516102699190613e28565b60405180910390f35b34801561027e57600080fd5b506102876109a4565b6040516102949190613e43565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf919061377a565b610a36565b6040516102d19190613d76565b60405180910390f35b3480156102e657600080fd5b5061030160048036038101906102fc919061366a565b610abb565b005b34801561030f57600080fd5b50610318610bd3565b60405161032591906141c7565b60405180910390f35b34801561033a57600080fd5b50610355600480360381019061035091906136aa565b610be0565b005b34801561036357600080fd5b5061036c610c79565b6040516103799190613e28565b60405180910390f35b34801561038e57600080fd5b50610397610c8c565b6040516103a491906141c7565b60405180910390f35b3480156103b957600080fd5b506103d460048036038101906103cf9190613554565b610c96565b005b3480156103e257600080fd5b506103eb610cf6565b6040516103f89190613e28565b60405180910390f35b34801561040d57600080fd5b506104286004803603810190610423919061366a565b610d09565b60405161043591906141c7565b60405180910390f35b34801561044a57600080fd5b506104656004803603810190610460919061377a565b610dae565b005b610481600480360381019061047c919061366a565b61106d565b005b34801561048f57600080fd5b506104aa60048036038101906104a59190613554565b61133a565b005b3480156104b857600080fd5b506104d360048036038101906104ce91906134e7565b61135a565b6040516104e09190613e06565b60405180910390f35b3480156104f557600080fd5b50610510600480360381019061050b919061377a565b611408565b60405161051d91906141c7565b60405180910390f35b34801561053257600080fd5b5061054d600480360381019061054891906136aa565b611479565b005b34801561055b57600080fd5b506105766004803603810190610571919061377a565b611512565b005b34801561058457600080fd5b5061059f600480360381019061059a9190613731565b611598565b005b3480156105ad57600080fd5b506105c860048036038101906105c391906134e7565b61162e565b6040516105d591906141a5565b60405180910390f35b3480156105ea57600080fd5b506106056004803603810190610600919061377a565b611892565b6040516106129190613d76565b60405180910390f35b34801561062757600080fd5b50610642600480360381019061063d91906134e7565b611944565b60405161064f91906141c7565b60405180910390f35b34801561066457600080fd5b5061066d6119fc565b005b34801561067b57600080fd5b50610696600480360381019061069191906136aa565b611a84565b005b3480156106a457600080fd5b506106ad611b1d565b6040516106ba91906141c7565b60405180910390f35b3480156106cf57600080fd5b506106ea60048036038101906106e5919061377a565b611b23565b6040516106f79190613e28565b60405180910390f35b610708611b43565b005b34801561071657600080fd5b5061071f611bff565b60405161072c9190613d76565b60405180910390f35b34801561074157600080fd5b5061075c6004803603810190610757919061377a565b611c29565b005b34801561076a57600080fd5b50610773611caf565b6040516107809190613e43565b60405180910390f35b34801561079557600080fd5b5061079e611d41565b6040516107ab91906141c7565b60405180910390f35b3480156107c057600080fd5b506107db60048036038101906107d6919061362a565b611d90565b005b3480156107e957600080fd5b506107f2611f11565b6040516107ff9190613e28565b60405180910390f35b34801561081457600080fd5b5061082f600480360381019061082a91906135a7565b611f24565b005b34801561083d57600080fd5b506108586004803603810190610853919061377a565b611f86565b6040516108659190613e43565b60405180910390f35b34801561087a57600080fd5b5061088361202d565b60405161089091906141c7565b60405180910390f35b3480156108a557600080fd5b506108c060048036038101906108bb9190613514565b612033565b6040516108cd9190613e28565b60405180910390f35b3480156108e257600080fd5b506108fd60048036038101906108f891906134e7565b6120c7565b005b34801561090b57600080fd5b506109146121bf565b60405161092191906141c7565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061099d575061099c826121e8565b5b9050919050565b6060600080546109b3906144c1565b80601f01602080910402602001604051908101604052809291908181526020018280546109df906144c1565b8015610a2c5780601f10610a0157610100808354040283529160200191610a2c565b820191906000526020600020905b815481529060010190602001808311610a0f57829003601f168201915b5050505050905090565b6000610a41826122ca565b610a80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7790614045565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ac682611892565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2e906140e5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b56612336565b73ffffffffffffffffffffffffffffffffffffffff161480610b855750610b8481610b7f612336565b612033565b5b610bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbb90613f85565b60405180910390fd5b610bce838361233e565b505050565b6000600880549050905090565b610be8612336565b73ffffffffffffffffffffffffffffffffffffffff16610c06611bff565b73ffffffffffffffffffffffffffffffffffffffff1614610c5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5390614065565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b600e60019054906101000a900460ff1681565b6000600c54905090565b610ca7610ca1612336565b826123f7565b610ce6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdd90614145565b60405180910390fd5b610cf18383836124d5565b505050565b600e60009054906101000a900460ff1681565b6000610d1483611944565b8210610d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4c90613e65565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610db6611bff565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e3857600e60019054906101000a900460ff16610e37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2e90614185565b60405180910390fd5b5b6000610e426121bf565b90506001610bd6610e5391906142f6565b8282610e5f91906142f6565b10610e9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9690613f65565b60405180910390fd5b6000610ea9610bd3565b905060016117ac610eba91906142f6565b8382610ec691906142f6565b10610f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efd90614105565b60405180910390fd5b6000610f113361162e565b905060018160000151610f2491906142f6565b600285610f31919061437d565b10610f71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6890614025565b60405180910390fd5b60005b8481101561106657610f866010612731565b6001600f60008460200151600285610f9e919061437d565b81518110610faf57610fae61465a565b5b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f600084602001516001600286610ff6919061437d565b61100091906142f6565b815181106110115761101061465a565b5b6020026020010151815260200190815260200160002060006101000a81548160ff02191690831515021790555061105333828561104e91906142f6565b612747565b808061105e90614524565b915050610f74565b5050505050565b6000611077610bd3565b9050611081611bff565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112a6576001601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016111109190613d76565b60206040518083038186803b15801561112857600080fd5b505afa15801561113c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116091906137a7565b10156111b657600e60009054906101000a900460ff166111b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ac906140c5565b60405180910390fd5b5b600e60029054906101000a900460ff16611205576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fc90613ea5565b60405180910390fd5b6001600c5461121491906142f6565b8210611255576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124c90613fa5565b60405180910390fd5b81600d54611263919061437d565b3410156112a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129c90614125565b60405180910390fd5b5b60016117ac6112b591906142f6565b82826112c191906142f6565b10611301576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f890614105565b60405180910390fd5b60005b828110156113345761132184828461131c91906142f6565b612747565b808061132c90614524565b915050611304565b50505050565b61135583838360405180602001604052806000815250611f24565b505050565b6060600061136783611944565b905060008167ffffffffffffffff81111561138557611384614689565b5b6040519080825280602002602001820160405280156113b35781602001602082028036833780820191505090505b50905060005b828110156113fd576113cb8582610d09565b8282815181106113de576113dd61465a565b5b60200260200101818152505080806113f590614524565b9150506113b9565b508092505050919050565b6000611412610bd3565b8210611453576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144a90614165565b60405180910390fd5b600882815481106114675761146661465a565b5b90600052602060002001549050919050565b611481612336565b73ffffffffffffffffffffffffffffffffffffffff1661149f611bff565b73ffffffffffffffffffffffffffffffffffffffff16146114f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ec90614065565b60405180910390fd5b80600e60016101000a81548160ff02191690831515021790555050565b61151a612336565b73ffffffffffffffffffffffffffffffffffffffff16611538611bff565b73ffffffffffffffffffffffffffffffffffffffff161461158e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158590614065565b60405180910390fd5b80600c8190555050565b6115a0612336565b73ffffffffffffffffffffffffffffffffffffffff166115be611bff565b73ffffffffffffffffffffffffffffffffffffffff1614611614576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160b90614065565b60405180910390fd5b80600b908051906020019061162a9291906132cc565b5050565b611636613352565b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b81526004016116939190613d76565b60206040518083038186803b1580156116ab57600080fd5b505afa1580156116bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e391906137a7565b905060006040518060400160405280600081526020018367ffffffffffffffff81111561171357611712614689565b5b6040519080825280602002602001820160405280156117415781602001602082028036833780820191505090505b50815250905060005b82811015611887576000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c5987846040518363ffffffff1660e01b81526004016117b1929190613ddd565b60206040518083038186803b1580156117c957600080fd5b505afa1580156117dd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061180191906137a7565b905060001515600f600083815260200190815260200160002060009054906101000a900460ff16151514156118735780836020015184600001518151811061184c5761184b61465a565b5b60200260200101818152505060018360000181815161186b91906142f6565b915081815250505b50808061187f90614524565b91505061174a565b508092505050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561193b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193290613fe5565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ac90613fc5565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a04612336565b73ffffffffffffffffffffffffffffffffffffffff16611a22611bff565b73ffffffffffffffffffffffffffffffffffffffff1614611a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6f90614065565b60405180910390fd5b611a826000612765565b565b611a8c612336565b73ffffffffffffffffffffffffffffffffffffffff16611aaa611bff565b73ffffffffffffffffffffffffffffffffffffffff1614611b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af790614065565b60405180910390fd5b80600e60026101000a81548160ff02191690831515021790555050565b6117ac81565b600f6020528060005260406000206000915054906101000a900460ff1681565b611b4b612336565b73ffffffffffffffffffffffffffffffffffffffff16611b69611bff565b73ffffffffffffffffffffffffffffffffffffffff1614611bbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb690614065565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050611bfd57600080fd5b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611c31612336565b73ffffffffffffffffffffffffffffffffffffffff16611c4f611bff565b73ffffffffffffffffffffffffffffffffffffffff1614611ca5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9c90614065565b60405180910390fd5b80600d8190555050565b606060018054611cbe906144c1565b80601f0160208091040260200160405190810160405280929190818152602001828054611cea906144c1565b8015611d375780601f10611d0c57610100808354040283529160200191611d37565b820191906000526020600020905b815481529060010190602001808311611d1a57829003601f168201915b5050505050905090565b6000611d4b611bff565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611d875760009050611d8d565b600d5490505b90565b611d98612336565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfd90613f25565b60405180910390fd5b8060056000611e13612336565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611ec0612336565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611f059190613e28565b60405180910390a35050565b600e60029054906101000a900460ff1681565b611f35611f2f612336565b836123f7565b611f74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6b90614145565b60405180910390fd5b611f808484848461282b565b50505050565b6060611f91826122ca565b611fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc7906140a5565b60405180910390fd5b6000611fda612887565b90506000815111611ffa5760405180602001604052806000815250612025565b8061200484612919565b604051602001612015929190613d52565b6040516020818303038152906040525b915050919050565b610bd681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120cf612336565b73ffffffffffffffffffffffffffffffffffffffff166120ed611bff565b73ffffffffffffffffffffffffffffffffffffffff1614612143576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213a90614065565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121aa90613ec5565b60405180910390fd5b6121bc81612765565b50565b60006121cb6010612a7a565b905090565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806122b357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806122c357506122c282612a88565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166123b183611892565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612402826122ca565b612441576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243890613f45565b60405180910390fd5b600061244c83611892565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806124bb57508373ffffffffffffffffffffffffffffffffffffffff166124a384610a36565b73ffffffffffffffffffffffffffffffffffffffff16145b806124cc57506124cb8185612033565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166124f582611892565b73ffffffffffffffffffffffffffffffffffffffff161461254b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254290614085565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b290613f05565b60405180910390fd5b6125c6838383612af2565b6125d160008261233e565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461262191906143d7565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461267891906142f6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6001816000016000828254019250508190555050565b612761828260405180602001604052806000815250612c06565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6128368484846124d5565b61284284848484612c61565b612881576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287890613e85565b60405180910390fd5b50505050565b6060600b8054612896906144c1565b80601f01602080910402602001604051908101604052809291908181526020018280546128c2906144c1565b801561290f5780601f106128e45761010080835404028352916020019161290f565b820191906000526020600020905b8154815290600101906020018083116128f257829003601f168201915b5050505050905090565b60606000821415612961576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612a75565b600082905060005b6000821461299357808061297c90614524565b915050600a8261298c919061434c565b9150612969565b60008167ffffffffffffffff8111156129af576129ae614689565b5b6040519080825280601f01601f1916602001820160405280156129e15781602001600182028036833780820191505090505b5090505b60008514612a6e576001826129fa91906143d7565b9150600a85612a09919061456d565b6030612a1591906142f6565b60f81b818381518110612a2b57612a2a61465a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612a67919061434c565b94506129e5565b8093505050505b919050565b600081600001549050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612afd8383836121e3565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b4057612b3b81612df8565b612b7f565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612b7e57612b7d8382612e41565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bc257612bbd81612fae565b612c01565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612c0057612bff828261307f565b5b5b505050565b612c1083836130fe565b612c1d6000848484612c61565b612c5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5390613e85565b60405180910390fd5b505050565b6000612c828473ffffffffffffffffffffffffffffffffffffffff166121d0565b15612deb578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612cab612336565b8786866040518563ffffffff1660e01b8152600401612ccd9493929190613d91565b602060405180830381600087803b158015612ce757600080fd5b505af1925050508015612d1857506040513d601f19601f82011682018060405250810190612d159190613704565b60015b612d9b573d8060008114612d48576040519150601f19603f3d011682016040523d82523d6000602084013e612d4d565b606091505b50600081511415612d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8a90613e85565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612df0565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612e4e84611944565b612e5891906143d7565b9050600060076000848152602001908152602001600020549050818114612f3d576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612fc291906143d7565b9050600060096000848152602001908152602001600020549050600060088381548110612ff257612ff161465a565b5b9060005260206000200154905080600883815481106130145761301361465a565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806130635761306261462b565b5b6001900381819060005260206000200160009055905550505050565b600061308a83611944565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561316e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316590614005565b60405180910390fd5b613177816122ca565b156131b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ae90613ee5565b60405180910390fd5b6131c360008383612af2565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461321391906142f6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546132d8906144c1565b90600052602060002090601f0160209004810192826132fa5760008555613341565b82601f1061331357805160ff1916838001178555613341565b82800160010185558215613341579182015b82811115613340578251825591602001919060010190613325565b5b50905061334e919061336c565b5090565b604051806040016040528060008152602001606081525090565b5b8082111561338557600081600090555060010161336d565b5090565b600061339c61339784614207565b6141e2565b9050828152602081018484840111156133b8576133b76146bd565b5b6133c384828561447f565b509392505050565b60006133de6133d984614238565b6141e2565b9050828152602081018484840111156133fa576133f96146bd565b5b61340584828561447f565b509392505050565b60008135905061341c81614d8d565b92915050565b60008135905061343181614da4565b92915050565b60008135905061344681614dbb565b92915050565b60008151905061345b81614dbb565b92915050565b600082601f830112613476576134756146b8565b5b8135613486848260208601613389565b91505092915050565b600082601f8301126134a4576134a36146b8565b5b81356134b48482602086016133cb565b91505092915050565b6000813590506134cc81614dd2565b92915050565b6000815190506134e181614dd2565b92915050565b6000602082840312156134fd576134fc6146c7565b5b600061350b8482850161340d565b91505092915050565b6000806040838503121561352b5761352a6146c7565b5b60006135398582860161340d565b925050602061354a8582860161340d565b9150509250929050565b60008060006060848603121561356d5761356c6146c7565b5b600061357b8682870161340d565b935050602061358c8682870161340d565b925050604061359d868287016134bd565b9150509250925092565b600080600080608085870312156135c1576135c06146c7565b5b60006135cf8782880161340d565b94505060206135e08782880161340d565b93505060406135f1878288016134bd565b925050606085013567ffffffffffffffff811115613612576136116146c2565b5b61361e87828801613461565b91505092959194509250565b60008060408385031215613641576136406146c7565b5b600061364f8582860161340d565b925050602061366085828601613422565b9150509250929050565b60008060408385031215613681576136806146c7565b5b600061368f8582860161340d565b92505060206136a0858286016134bd565b9150509250929050565b6000602082840312156136c0576136bf6146c7565b5b60006136ce84828501613422565b91505092915050565b6000602082840312156136ed576136ec6146c7565b5b60006136fb84828501613437565b91505092915050565b60006020828403121561371a576137196146c7565b5b60006137288482850161344c565b91505092915050565b600060208284031215613747576137466146c7565b5b600082013567ffffffffffffffff811115613765576137646146c2565b5b6137718482850161348f565b91505092915050565b6000602082840312156137905761378f6146c7565b5b600061379e848285016134bd565b91505092915050565b6000602082840312156137bd576137bc6146c7565b5b60006137cb848285016134d2565b91505092915050565b60006137e08383613d34565b60208301905092915050565b6137f58161440b565b82525050565b600061380682614279565b61381081856142a7565b935061381b83614269565b8060005b8381101561384c57815161383388826137d4565b975061383e8361429a565b92505060018101905061381f565b5085935050505092915050565b600061386482614279565b61386e81856142b8565b935061387983614269565b8060005b838110156138aa57815161389188826137d4565b975061389c8361429a565b92505060018101905061387d565b5085935050505092915050565b6138c08161441d565b82525050565b60006138d182614284565b6138db81856142c9565b93506138eb81856020860161448e565b6138f4816146cc565b840191505092915050565b600061390a8261428f565b61391481856142da565b935061392481856020860161448e565b61392d816146cc565b840191505092915050565b60006139438261428f565b61394d81856142eb565b935061395d81856020860161448e565b80840191505092915050565b6000613976602b836142da565b9150613981826146dd565b604082019050919050565b60006139996032836142da565b91506139a48261472c565b604082019050919050565b60006139bc6013836142da565b91506139c78261477b565b602082019050919050565b60006139df6026836142da565b91506139ea826147a4565b604082019050919050565b6000613a02601c836142da565b9150613a0d826147f3565b602082019050919050565b6000613a256024836142da565b9150613a308261481c565b604082019050919050565b6000613a486019836142da565b9150613a538261486b565b602082019050919050565b6000613a6b602c836142da565b9150613a7682614894565b604082019050919050565b6000613a8e601b836142da565b9150613a99826148e3565b602082019050919050565b6000613ab16038836142da565b9150613abc8261490c565b604082019050919050565b6000613ad46028836142da565b9150613adf8261495b565b604082019050919050565b6000613af7602a836142da565b9150613b02826149aa565b604082019050919050565b6000613b1a6029836142da565b9150613b25826149f9565b604082019050919050565b6000613b3d6020836142da565b9150613b4882614a48565b602082019050919050565b6000613b606039836142da565b9150613b6b82614a71565b604082019050919050565b6000613b83602c836142da565b9150613b8e82614ac0565b604082019050919050565b6000613ba66020836142da565b9150613bb182614b0f565b602082019050919050565b6000613bc96029836142da565b9150613bd482614b38565b604082019050919050565b6000613bec602f836142da565b9150613bf782614b87565b604082019050919050565b6000613c0f600f836142da565b9150613c1a82614bd6565b602082019050919050565b6000613c326021836142da565b9150613c3d82614bff565b604082019050919050565b6000613c556016836142da565b9150613c6082614c4e565b602082019050919050565b6000613c786019836142da565b9150613c8382614c77565b602082019050919050565b6000613c9b6031836142da565b9150613ca682614ca0565b604082019050919050565b6000613cbe602c836142da565b9150613cc982614cef565b604082019050919050565b6000613ce16027836142da565b9150613cec82614d3e565b604082019050919050565b6000604083016000830151613d0f6000860182613d34565b5060208301518482036020860152613d2782826137fb565b9150508091505092915050565b613d3d81614475565b82525050565b613d4c81614475565b82525050565b6000613d5e8285613938565b9150613d6a8284613938565b91508190509392505050565b6000602082019050613d8b60008301846137ec565b92915050565b6000608082019050613da660008301876137ec565b613db360208301866137ec565b613dc06040830185613d43565b8181036060830152613dd281846138c6565b905095945050505050565b6000604082019050613df260008301856137ec565b613dff6020830184613d43565b9392505050565b60006020820190508181036000830152613e208184613859565b905092915050565b6000602082019050613e3d60008301846138b7565b92915050565b60006020820190508181036000830152613e5d81846138ff565b905092915050565b60006020820190508181036000830152613e7e81613969565b9050919050565b60006020820190508181036000830152613e9e8161398c565b9050919050565b60006020820190508181036000830152613ebe816139af565b9050919050565b60006020820190508181036000830152613ede816139d2565b9050919050565b60006020820190508181036000830152613efe816139f5565b9050919050565b60006020820190508181036000830152613f1e81613a18565b9050919050565b60006020820190508181036000830152613f3e81613a3b565b9050919050565b60006020820190508181036000830152613f5e81613a5e565b9050919050565b60006020820190508181036000830152613f7e81613a81565b9050919050565b60006020820190508181036000830152613f9e81613aa4565b9050919050565b60006020820190508181036000830152613fbe81613ac7565b9050919050565b60006020820190508181036000830152613fde81613aea565b9050919050565b60006020820190508181036000830152613ffe81613b0d565b9050919050565b6000602082019050818103600083015261401e81613b30565b9050919050565b6000602082019050818103600083015261403e81613b53565b9050919050565b6000602082019050818103600083015261405e81613b76565b9050919050565b6000602082019050818103600083015261407e81613b99565b9050919050565b6000602082019050818103600083015261409e81613bbc565b9050919050565b600060208201905081810360008301526140be81613bdf565b9050919050565b600060208201905081810360008301526140de81613c02565b9050919050565b600060208201905081810360008301526140fe81613c25565b9050919050565b6000602082019050818103600083015261411e81613c48565b9050919050565b6000602082019050818103600083015261413e81613c6b565b9050919050565b6000602082019050818103600083015261415e81613c8e565b9050919050565b6000602082019050818103600083015261417e81613cb1565b9050919050565b6000602082019050818103600083015261419e81613cd4565b9050919050565b600060208201905081810360008301526141bf8184613cf7565b905092915050565b60006020820190506141dc6000830184613d43565b92915050565b60006141ec6141fd565b90506141f882826144f3565b919050565b6000604051905090565b600067ffffffffffffffff82111561422257614221614689565b5b61422b826146cc565b9050602081019050919050565b600067ffffffffffffffff82111561425357614252614689565b5b61425c826146cc565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061430182614475565b915061430c83614475565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156143415761434061459e565b5b828201905092915050565b600061435782614475565b915061436283614475565b925082614372576143716145cd565b5b828204905092915050565b600061438882614475565b915061439383614475565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156143cc576143cb61459e565b5b828202905092915050565b60006143e282614475565b91506143ed83614475565b925082821015614400576143ff61459e565b5b828203905092915050565b600061441682614455565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156144ac578082015181840152602081019050614491565b838111156144bb576000848401525b50505050565b600060028204905060018216806144d957607f821691505b602082108114156144ed576144ec6145fc565b5b50919050565b6144fc826146cc565b810181811067ffffffffffffffff8211171561451b5761451a614689565b5b80604052505050565b600061452f82614475565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156145625761456161459e565b5b600182019050919050565b600061457882614475565b915061458383614475565b925082614593576145926145cd565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f5072652053616c65206e6f742041637469766500000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f45786365656473206d6178696d756d206672656520737570706c790000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f596f752063616e206d696e742061206d6178696d756d206f6620323020506f6c60008201527f6172204265617273000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f596f752063616e206f6e6c7920636c61696d2031206672656520506f6c61722060008201527f4265617220666f7220322050617274792050656e6775696e7300000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f53616c65206e6f74204163746976650000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d6178696d756d20737570706c7900000000000000000000600082015250565b7f45746865722073656e74206973206e6f7420636f727265637400000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f436c61696d206973206e6f74204163746976652c207761697420666f7220796f60008201527f7572207475726e00000000000000000000000000000000000000000000000000602082015250565b614d968161440b565b8114614da157600080fd5b50565b614dad8161441d565b8114614db857600080fd5b50565b614dc481614429565b8114614dcf57600080fd5b50565b614ddb81614475565b8114614de657600080fd5b5056fea26469706673582212204625aaed91b4b2ecedc5db222ddc610da90fc6a9501c10e0bf2f419d7a6672bb64736f6c634300080500330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002968747470733a2f2f706172747970656e6775696e732e636c75622f6170692f706f6c6172626561722f0000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102305760003560e01c80635ae5cce01161012e57806395d89b41116100ab578063c87b56dd1161006f578063c87b56dd14610831578063cd519e9a1461086e578063e985e9c514610899578063f2fde38b146108d6578063fd515e38146108ff57610230565b806395d89b411461075e57806398d5fdca14610789578063a22cb465146107b4578063ae30b66e146107dd578063b88d4fde1461080857610230565b80637d4cb964116100f25780637d4cb96414610698578063849b35d3146106c3578063853828b6146107005780638da5cb5b1461070a57806391b7f5ed1461073557610230565b80635ae5cce0146105a15780636352211e146105de57806370a082311461061b578063715018a6146106585780637896e99f1461066f57610230565b80632c2c852f116101bc578063438b630011610180578063438b6300146104ac5780634f6ccce7146104e9578063527733d914610526578063547520fe1461054f57806355f804b31461057857610230565b80632c2c852f146103d65780632f745c5914610401578063379607f51461043e57806340c10f191461046757806342842e0e1461048357610230565b806318160ddd1161020357806318160ddd146103035780631bfb60ce1461032e5780631cdf72c9146103575780631f46452f1461038257806323b872dd146103ad57610230565b806301ffc9a71461023557806306fdde0314610272578063081812fc1461029d578063095ea7b3146102da575b600080fd5b34801561024157600080fd5b5061025c600480360381019061025791906136d7565b61092a565b6040516102699190613e28565b60405180910390f35b34801561027e57600080fd5b506102876109a4565b6040516102949190613e43565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf919061377a565b610a36565b6040516102d19190613d76565b60405180910390f35b3480156102e657600080fd5b5061030160048036038101906102fc919061366a565b610abb565b005b34801561030f57600080fd5b50610318610bd3565b60405161032591906141c7565b60405180910390f35b34801561033a57600080fd5b50610355600480360381019061035091906136aa565b610be0565b005b34801561036357600080fd5b5061036c610c79565b6040516103799190613e28565b60405180910390f35b34801561038e57600080fd5b50610397610c8c565b6040516103a491906141c7565b60405180910390f35b3480156103b957600080fd5b506103d460048036038101906103cf9190613554565b610c96565b005b3480156103e257600080fd5b506103eb610cf6565b6040516103f89190613e28565b60405180910390f35b34801561040d57600080fd5b506104286004803603810190610423919061366a565b610d09565b60405161043591906141c7565b60405180910390f35b34801561044a57600080fd5b506104656004803603810190610460919061377a565b610dae565b005b610481600480360381019061047c919061366a565b61106d565b005b34801561048f57600080fd5b506104aa60048036038101906104a59190613554565b61133a565b005b3480156104b857600080fd5b506104d360048036038101906104ce91906134e7565b61135a565b6040516104e09190613e06565b60405180910390f35b3480156104f557600080fd5b50610510600480360381019061050b919061377a565b611408565b60405161051d91906141c7565b60405180910390f35b34801561053257600080fd5b5061054d600480360381019061054891906136aa565b611479565b005b34801561055b57600080fd5b506105766004803603810190610571919061377a565b611512565b005b34801561058457600080fd5b5061059f600480360381019061059a9190613731565b611598565b005b3480156105ad57600080fd5b506105c860048036038101906105c391906134e7565b61162e565b6040516105d591906141a5565b60405180910390f35b3480156105ea57600080fd5b506106056004803603810190610600919061377a565b611892565b6040516106129190613d76565b60405180910390f35b34801561062757600080fd5b50610642600480360381019061063d91906134e7565b611944565b60405161064f91906141c7565b60405180910390f35b34801561066457600080fd5b5061066d6119fc565b005b34801561067b57600080fd5b50610696600480360381019061069191906136aa565b611a84565b005b3480156106a457600080fd5b506106ad611b1d565b6040516106ba91906141c7565b60405180910390f35b3480156106cf57600080fd5b506106ea60048036038101906106e5919061377a565b611b23565b6040516106f79190613e28565b60405180910390f35b610708611b43565b005b34801561071657600080fd5b5061071f611bff565b60405161072c9190613d76565b60405180910390f35b34801561074157600080fd5b5061075c6004803603810190610757919061377a565b611c29565b005b34801561076a57600080fd5b50610773611caf565b6040516107809190613e43565b60405180910390f35b34801561079557600080fd5b5061079e611d41565b6040516107ab91906141c7565b60405180910390f35b3480156107c057600080fd5b506107db60048036038101906107d6919061362a565b611d90565b005b3480156107e957600080fd5b506107f2611f11565b6040516107ff9190613e28565b60405180910390f35b34801561081457600080fd5b5061082f600480360381019061082a91906135a7565b611f24565b005b34801561083d57600080fd5b506108586004803603810190610853919061377a565b611f86565b6040516108659190613e43565b60405180910390f35b34801561087a57600080fd5b5061088361202d565b60405161089091906141c7565b60405180910390f35b3480156108a557600080fd5b506108c060048036038101906108bb9190613514565b612033565b6040516108cd9190613e28565b60405180910390f35b3480156108e257600080fd5b506108fd60048036038101906108f891906134e7565b6120c7565b005b34801561090b57600080fd5b506109146121bf565b60405161092191906141c7565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061099d575061099c826121e8565b5b9050919050565b6060600080546109b3906144c1565b80601f01602080910402602001604051908101604052809291908181526020018280546109df906144c1565b8015610a2c5780601f10610a0157610100808354040283529160200191610a2c565b820191906000526020600020905b815481529060010190602001808311610a0f57829003601f168201915b5050505050905090565b6000610a41826122ca565b610a80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7790614045565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ac682611892565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2e906140e5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b56612336565b73ffffffffffffffffffffffffffffffffffffffff161480610b855750610b8481610b7f612336565b612033565b5b610bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbb90613f85565b60405180910390fd5b610bce838361233e565b505050565b6000600880549050905090565b610be8612336565b73ffffffffffffffffffffffffffffffffffffffff16610c06611bff565b73ffffffffffffffffffffffffffffffffffffffff1614610c5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5390614065565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b600e60019054906101000a900460ff1681565b6000600c54905090565b610ca7610ca1612336565b826123f7565b610ce6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdd90614145565b60405180910390fd5b610cf18383836124d5565b505050565b600e60009054906101000a900460ff1681565b6000610d1483611944565b8210610d55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4c90613e65565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610db6611bff565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e3857600e60019054906101000a900460ff16610e37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2e90614185565b60405180910390fd5b5b6000610e426121bf565b90506001610bd6610e5391906142f6565b8282610e5f91906142f6565b10610e9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9690613f65565b60405180910390fd5b6000610ea9610bd3565b905060016117ac610eba91906142f6565b8382610ec691906142f6565b10610f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efd90614105565b60405180910390fd5b6000610f113361162e565b905060018160000151610f2491906142f6565b600285610f31919061437d565b10610f71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6890614025565b60405180910390fd5b60005b8481101561106657610f866010612731565b6001600f60008460200151600285610f9e919061437d565b81518110610faf57610fae61465a565b5b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f600084602001516001600286610ff6919061437d565b61100091906142f6565b815181106110115761101061465a565b5b6020026020010151815260200190815260200160002060006101000a81548160ff02191690831515021790555061105333828561104e91906142f6565b612747565b808061105e90614524565b915050610f74565b5050505050565b6000611077610bd3565b9050611081611bff565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112a6576001601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016111109190613d76565b60206040518083038186803b15801561112857600080fd5b505afa15801561113c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116091906137a7565b10156111b657600e60009054906101000a900460ff166111b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ac906140c5565b60405180910390fd5b5b600e60029054906101000a900460ff16611205576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fc90613ea5565b60405180910390fd5b6001600c5461121491906142f6565b8210611255576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124c90613fa5565b60405180910390fd5b81600d54611263919061437d565b3410156112a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129c90614125565b60405180910390fd5b5b60016117ac6112b591906142f6565b82826112c191906142f6565b10611301576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f890614105565b60405180910390fd5b60005b828110156113345761132184828461131c91906142f6565b612747565b808061132c90614524565b915050611304565b50505050565b61135583838360405180602001604052806000815250611f24565b505050565b6060600061136783611944565b905060008167ffffffffffffffff81111561138557611384614689565b5b6040519080825280602002602001820160405280156113b35781602001602082028036833780820191505090505b50905060005b828110156113fd576113cb8582610d09565b8282815181106113de576113dd61465a565b5b60200260200101818152505080806113f590614524565b9150506113b9565b508092505050919050565b6000611412610bd3565b8210611453576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144a90614165565b60405180910390fd5b600882815481106114675761146661465a565b5b90600052602060002001549050919050565b611481612336565b73ffffffffffffffffffffffffffffffffffffffff1661149f611bff565b73ffffffffffffffffffffffffffffffffffffffff16146114f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ec90614065565b60405180910390fd5b80600e60016101000a81548160ff02191690831515021790555050565b61151a612336565b73ffffffffffffffffffffffffffffffffffffffff16611538611bff565b73ffffffffffffffffffffffffffffffffffffffff161461158e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158590614065565b60405180910390fd5b80600c8190555050565b6115a0612336565b73ffffffffffffffffffffffffffffffffffffffff166115be611bff565b73ffffffffffffffffffffffffffffffffffffffff1614611614576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160b90614065565b60405180910390fd5b80600b908051906020019061162a9291906132cc565b5050565b611636613352565b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b81526004016116939190613d76565b60206040518083038186803b1580156116ab57600080fd5b505afa1580156116bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e391906137a7565b905060006040518060400160405280600081526020018367ffffffffffffffff81111561171357611712614689565b5b6040519080825280602002602001820160405280156117415781602001602082028036833780820191505090505b50815250905060005b82811015611887576000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c5987846040518363ffffffff1660e01b81526004016117b1929190613ddd565b60206040518083038186803b1580156117c957600080fd5b505afa1580156117dd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061180191906137a7565b905060001515600f600083815260200190815260200160002060009054906101000a900460ff16151514156118735780836020015184600001518151811061184c5761184b61465a565b5b60200260200101818152505060018360000181815161186b91906142f6565b915081815250505b50808061187f90614524565b91505061174a565b508092505050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561193b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193290613fe5565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ac90613fc5565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a04612336565b73ffffffffffffffffffffffffffffffffffffffff16611a22611bff565b73ffffffffffffffffffffffffffffffffffffffff1614611a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6f90614065565b60405180910390fd5b611a826000612765565b565b611a8c612336565b73ffffffffffffffffffffffffffffffffffffffff16611aaa611bff565b73ffffffffffffffffffffffffffffffffffffffff1614611b00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af790614065565b60405180910390fd5b80600e60026101000a81548160ff02191690831515021790555050565b6117ac81565b600f6020528060005260406000206000915054906101000a900460ff1681565b611b4b612336565b73ffffffffffffffffffffffffffffffffffffffff16611b69611bff565b73ffffffffffffffffffffffffffffffffffffffff1614611bbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb690614065565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050611bfd57600080fd5b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611c31612336565b73ffffffffffffffffffffffffffffffffffffffff16611c4f611bff565b73ffffffffffffffffffffffffffffffffffffffff1614611ca5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9c90614065565b60405180910390fd5b80600d8190555050565b606060018054611cbe906144c1565b80601f0160208091040260200160405190810160405280929190818152602001828054611cea906144c1565b8015611d375780601f10611d0c57610100808354040283529160200191611d37565b820191906000526020600020905b815481529060010190602001808311611d1a57829003601f168201915b5050505050905090565b6000611d4b611bff565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611d875760009050611d8d565b600d5490505b90565b611d98612336565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfd90613f25565b60405180910390fd5b8060056000611e13612336565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611ec0612336565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611f059190613e28565b60405180910390a35050565b600e60029054906101000a900460ff1681565b611f35611f2f612336565b836123f7565b611f74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6b90614145565b60405180910390fd5b611f808484848461282b565b50505050565b6060611f91826122ca565b611fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc7906140a5565b60405180910390fd5b6000611fda612887565b90506000815111611ffa5760405180602001604052806000815250612025565b8061200484612919565b604051602001612015929190613d52565b6040516020818303038152906040525b915050919050565b610bd681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120cf612336565b73ffffffffffffffffffffffffffffffffffffffff166120ed611bff565b73ffffffffffffffffffffffffffffffffffffffff1614612143576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213a90614065565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121aa90613ec5565b60405180910390fd5b6121bc81612765565b50565b60006121cb6010612a7a565b905090565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806122b357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806122c357506122c282612a88565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166123b183611892565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612402826122ca565b612441576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243890613f45565b60405180910390fd5b600061244c83611892565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806124bb57508373ffffffffffffffffffffffffffffffffffffffff166124a384610a36565b73ffffffffffffffffffffffffffffffffffffffff16145b806124cc57506124cb8185612033565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166124f582611892565b73ffffffffffffffffffffffffffffffffffffffff161461254b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254290614085565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b290613f05565b60405180910390fd5b6125c6838383612af2565b6125d160008261233e565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461262191906143d7565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461267891906142f6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6001816000016000828254019250508190555050565b612761828260405180602001604052806000815250612c06565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6128368484846124d5565b61284284848484612c61565b612881576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287890613e85565b60405180910390fd5b50505050565b6060600b8054612896906144c1565b80601f01602080910402602001604051908101604052809291908181526020018280546128c2906144c1565b801561290f5780601f106128e45761010080835404028352916020019161290f565b820191906000526020600020905b8154815290600101906020018083116128f257829003601f168201915b5050505050905090565b60606000821415612961576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612a75565b600082905060005b6000821461299357808061297c90614524565b915050600a8261298c919061434c565b9150612969565b60008167ffffffffffffffff8111156129af576129ae614689565b5b6040519080825280601f01601f1916602001820160405280156129e15781602001600182028036833780820191505090505b5090505b60008514612a6e576001826129fa91906143d7565b9150600a85612a09919061456d565b6030612a1591906142f6565b60f81b818381518110612a2b57612a2a61465a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612a67919061434c565b94506129e5565b8093505050505b919050565b600081600001549050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612afd8383836121e3565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b4057612b3b81612df8565b612b7f565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612b7e57612b7d8382612e41565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bc257612bbd81612fae565b612c01565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612c0057612bff828261307f565b5b5b505050565b612c1083836130fe565b612c1d6000848484612c61565b612c5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5390613e85565b60405180910390fd5b505050565b6000612c828473ffffffffffffffffffffffffffffffffffffffff166121d0565b15612deb578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612cab612336565b8786866040518563ffffffff1660e01b8152600401612ccd9493929190613d91565b602060405180830381600087803b158015612ce757600080fd5b505af1925050508015612d1857506040513d601f19601f82011682018060405250810190612d159190613704565b60015b612d9b573d8060008114612d48576040519150601f19603f3d011682016040523d82523d6000602084013e612d4d565b606091505b50600081511415612d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8a90613e85565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612df0565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612e4e84611944565b612e5891906143d7565b9050600060076000848152602001908152602001600020549050818114612f3d576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612fc291906143d7565b9050600060096000848152602001908152602001600020549050600060088381548110612ff257612ff161465a565b5b9060005260206000200154905080600883815481106130145761301361465a565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806130635761306261462b565b5b6001900381819060005260206000200160009055905550505050565b600061308a83611944565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561316e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316590614005565b60405180910390fd5b613177816122ca565b156131b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ae90613ee5565b60405180910390fd5b6131c360008383612af2565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461321391906142f6565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546132d8906144c1565b90600052602060002090601f0160209004810192826132fa5760008555613341565b82601f1061331357805160ff1916838001178555613341565b82800160010185558215613341579182015b82811115613340578251825591602001919060010190613325565b5b50905061334e919061336c565b5090565b604051806040016040528060008152602001606081525090565b5b8082111561338557600081600090555060010161336d565b5090565b600061339c61339784614207565b6141e2565b9050828152602081018484840111156133b8576133b76146bd565b5b6133c384828561447f565b509392505050565b60006133de6133d984614238565b6141e2565b9050828152602081018484840111156133fa576133f96146bd565b5b61340584828561447f565b509392505050565b60008135905061341c81614d8d565b92915050565b60008135905061343181614da4565b92915050565b60008135905061344681614dbb565b92915050565b60008151905061345b81614dbb565b92915050565b600082601f830112613476576134756146b8565b5b8135613486848260208601613389565b91505092915050565b600082601f8301126134a4576134a36146b8565b5b81356134b48482602086016133cb565b91505092915050565b6000813590506134cc81614dd2565b92915050565b6000815190506134e181614dd2565b92915050565b6000602082840312156134fd576134fc6146c7565b5b600061350b8482850161340d565b91505092915050565b6000806040838503121561352b5761352a6146c7565b5b60006135398582860161340d565b925050602061354a8582860161340d565b9150509250929050565b60008060006060848603121561356d5761356c6146c7565b5b600061357b8682870161340d565b935050602061358c8682870161340d565b925050604061359d868287016134bd565b9150509250925092565b600080600080608085870312156135c1576135c06146c7565b5b60006135cf8782880161340d565b94505060206135e08782880161340d565b93505060406135f1878288016134bd565b925050606085013567ffffffffffffffff811115613612576136116146c2565b5b61361e87828801613461565b91505092959194509250565b60008060408385031215613641576136406146c7565b5b600061364f8582860161340d565b925050602061366085828601613422565b9150509250929050565b60008060408385031215613681576136806146c7565b5b600061368f8582860161340d565b92505060206136a0858286016134bd565b9150509250929050565b6000602082840312156136c0576136bf6146c7565b5b60006136ce84828501613422565b91505092915050565b6000602082840312156136ed576136ec6146c7565b5b60006136fb84828501613437565b91505092915050565b60006020828403121561371a576137196146c7565b5b60006137288482850161344c565b91505092915050565b600060208284031215613747576137466146c7565b5b600082013567ffffffffffffffff811115613765576137646146c2565b5b6137718482850161348f565b91505092915050565b6000602082840312156137905761378f6146c7565b5b600061379e848285016134bd565b91505092915050565b6000602082840312156137bd576137bc6146c7565b5b60006137cb848285016134d2565b91505092915050565b60006137e08383613d34565b60208301905092915050565b6137f58161440b565b82525050565b600061380682614279565b61381081856142a7565b935061381b83614269565b8060005b8381101561384c57815161383388826137d4565b975061383e8361429a565b92505060018101905061381f565b5085935050505092915050565b600061386482614279565b61386e81856142b8565b935061387983614269565b8060005b838110156138aa57815161389188826137d4565b975061389c8361429a565b92505060018101905061387d565b5085935050505092915050565b6138c08161441d565b82525050565b60006138d182614284565b6138db81856142c9565b93506138eb81856020860161448e565b6138f4816146cc565b840191505092915050565b600061390a8261428f565b61391481856142da565b935061392481856020860161448e565b61392d816146cc565b840191505092915050565b60006139438261428f565b61394d81856142eb565b935061395d81856020860161448e565b80840191505092915050565b6000613976602b836142da565b9150613981826146dd565b604082019050919050565b60006139996032836142da565b91506139a48261472c565b604082019050919050565b60006139bc6013836142da565b91506139c78261477b565b602082019050919050565b60006139df6026836142da565b91506139ea826147a4565b604082019050919050565b6000613a02601c836142da565b9150613a0d826147f3565b602082019050919050565b6000613a256024836142da565b9150613a308261481c565b604082019050919050565b6000613a486019836142da565b9150613a538261486b565b602082019050919050565b6000613a6b602c836142da565b9150613a7682614894565b604082019050919050565b6000613a8e601b836142da565b9150613a99826148e3565b602082019050919050565b6000613ab16038836142da565b9150613abc8261490c565b604082019050919050565b6000613ad46028836142da565b9150613adf8261495b565b604082019050919050565b6000613af7602a836142da565b9150613b02826149aa565b604082019050919050565b6000613b1a6029836142da565b9150613b25826149f9565b604082019050919050565b6000613b3d6020836142da565b9150613b4882614a48565b602082019050919050565b6000613b606039836142da565b9150613b6b82614a71565b604082019050919050565b6000613b83602c836142da565b9150613b8e82614ac0565b604082019050919050565b6000613ba66020836142da565b9150613bb182614b0f565b602082019050919050565b6000613bc96029836142da565b9150613bd482614b38565b604082019050919050565b6000613bec602f836142da565b9150613bf782614b87565b604082019050919050565b6000613c0f600f836142da565b9150613c1a82614bd6565b602082019050919050565b6000613c326021836142da565b9150613c3d82614bff565b604082019050919050565b6000613c556016836142da565b9150613c6082614c4e565b602082019050919050565b6000613c786019836142da565b9150613c8382614c77565b602082019050919050565b6000613c9b6031836142da565b9150613ca682614ca0565b604082019050919050565b6000613cbe602c836142da565b9150613cc982614cef565b604082019050919050565b6000613ce16027836142da565b9150613cec82614d3e565b604082019050919050565b6000604083016000830151613d0f6000860182613d34565b5060208301518482036020860152613d2782826137fb565b9150508091505092915050565b613d3d81614475565b82525050565b613d4c81614475565b82525050565b6000613d5e8285613938565b9150613d6a8284613938565b91508190509392505050565b6000602082019050613d8b60008301846137ec565b92915050565b6000608082019050613da660008301876137ec565b613db360208301866137ec565b613dc06040830185613d43565b8181036060830152613dd281846138c6565b905095945050505050565b6000604082019050613df260008301856137ec565b613dff6020830184613d43565b9392505050565b60006020820190508181036000830152613e208184613859565b905092915050565b6000602082019050613e3d60008301846138b7565b92915050565b60006020820190508181036000830152613e5d81846138ff565b905092915050565b60006020820190508181036000830152613e7e81613969565b9050919050565b60006020820190508181036000830152613e9e8161398c565b9050919050565b60006020820190508181036000830152613ebe816139af565b9050919050565b60006020820190508181036000830152613ede816139d2565b9050919050565b60006020820190508181036000830152613efe816139f5565b9050919050565b60006020820190508181036000830152613f1e81613a18565b9050919050565b60006020820190508181036000830152613f3e81613a3b565b9050919050565b60006020820190508181036000830152613f5e81613a5e565b9050919050565b60006020820190508181036000830152613f7e81613a81565b9050919050565b60006020820190508181036000830152613f9e81613aa4565b9050919050565b60006020820190508181036000830152613fbe81613ac7565b9050919050565b60006020820190508181036000830152613fde81613aea565b9050919050565b60006020820190508181036000830152613ffe81613b0d565b9050919050565b6000602082019050818103600083015261401e81613b30565b9050919050565b6000602082019050818103600083015261403e81613b53565b9050919050565b6000602082019050818103600083015261405e81613b76565b9050919050565b6000602082019050818103600083015261407e81613b99565b9050919050565b6000602082019050818103600083015261409e81613bbc565b9050919050565b600060208201905081810360008301526140be81613bdf565b9050919050565b600060208201905081810360008301526140de81613c02565b9050919050565b600060208201905081810360008301526140fe81613c25565b9050919050565b6000602082019050818103600083015261411e81613c48565b9050919050565b6000602082019050818103600083015261413e81613c6b565b9050919050565b6000602082019050818103600083015261415e81613c8e565b9050919050565b6000602082019050818103600083015261417e81613cb1565b9050919050565b6000602082019050818103600083015261419e81613cd4565b9050919050565b600060208201905081810360008301526141bf8184613cf7565b905092915050565b60006020820190506141dc6000830184613d43565b92915050565b60006141ec6141fd565b90506141f882826144f3565b919050565b6000604051905090565b600067ffffffffffffffff82111561422257614221614689565b5b61422b826146cc565b9050602081019050919050565b600067ffffffffffffffff82111561425357614252614689565b5b61425c826146cc565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061430182614475565b915061430c83614475565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156143415761434061459e565b5b828201905092915050565b600061435782614475565b915061436283614475565b925082614372576143716145cd565b5b828204905092915050565b600061438882614475565b915061439383614475565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156143cc576143cb61459e565b5b828202905092915050565b60006143e282614475565b91506143ed83614475565b925082821015614400576143ff61459e565b5b828203905092915050565b600061441682614455565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156144ac578082015181840152602081019050614491565b838111156144bb576000848401525b50505050565b600060028204905060018216806144d957607f821691505b602082108114156144ed576144ec6145fc565b5b50919050565b6144fc826146cc565b810181811067ffffffffffffffff8211171561451b5761451a614689565b5b80604052505050565b600061452f82614475565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156145625761456161459e565b5b600182019050919050565b600061457882614475565b915061458383614475565b925082614593576145926145cd565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f5072652053616c65206e6f742041637469766500000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f45786365656473206d6178696d756d206672656520737570706c790000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f596f752063616e206d696e742061206d6178696d756d206f6620323020506f6c60008201527f6172204265617273000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f596f752063616e206f6e6c7920636c61696d2031206672656520506f6c61722060008201527f4265617220666f7220322050617274792050656e6775696e7300000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f53616c65206e6f74204163746976650000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d6178696d756d20737570706c7900000000000000000000600082015250565b7f45746865722073656e74206973206e6f7420636f727265637400000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f436c61696d206973206e6f74204163746976652c207761697420666f7220796f60008201527f7572207475726e00000000000000000000000000000000000000000000000000602082015250565b614d968161440b565b8114614da157600080fd5b50565b614dad8161441d565b8114614db857600080fd5b50565b614dc481614429565b8114614dcf57600080fd5b50565b614ddb81614475565b8114614de657600080fd5b5056fea26469706673582212204625aaed91b4b2ecedc5db222ddc610da90fc6a9501c10e0bf2f419d7a6672bb64736f6c63430008050033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002968747470733a2f2f706172747970656e6775696e732e636c75622f6170692f706f6c6172626561722f0000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : baseURI (string): https://partypenguins.club/api/polarbear/
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000029
Arg [2] : 68747470733a2f2f706172747970656e6775696e732e636c75622f6170692f70
Arg [3] : 6f6c6172626561722f0000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
44444:4691:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34372:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21311:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22870:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22393:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35012:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48747:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44654:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48337:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23760:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44618:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34680:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46092:963;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47061:648;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24170:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47715:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35202:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48833:82;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48424:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48643:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45484:602;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21005:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20735:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42148:94;;;;;;;;;;;;;:::i;:::-;;48921:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44730:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44776:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49013:119;;;:::i;:::-;;41497:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48242:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21480:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48049:142;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23163:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44691:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24426:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21655:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44927:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23529:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42397:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45372:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34372:224;34474:4;34513:35;34498:50;;;:11;:50;;;;:90;;;;34552:36;34576:11;34552:23;:36::i;:::-;34498:90;34491:97;;34372:224;;;:::o;21311:100::-;21365:13;21398:5;21391:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21311:100;:::o;22870:221::-;22946:7;22974:16;22982:7;22974;:16::i;:::-;22966:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23059:15;:24;23075:7;23059:24;;;;;;;;;;;;;;;;;;;;;23052:31;;22870:221;;;:::o;22393:411::-;22474:13;22490:23;22505:7;22490:14;:23::i;:::-;22474:39;;22538:5;22532:11;;:2;:11;;;;22524:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22632:5;22616:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;22641:37;22658:5;22665:12;:10;:12::i;:::-;22641:16;:37::i;:::-;22616:62;22594:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;22775:21;22784:2;22788:7;22775:8;:21::i;:::-;22463:341;22393:411;;:::o;35012:113::-;35073:7;35100:10;:17;;;;35093:24;;35012:113;:::o;48747:80::-;41728:12;:10;:12::i;:::-;41717:23;;:7;:5;:7::i;:::-;:23;;;41709:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48818:3:::1;48804:11;;:17;;;;;;;;;;;;;;;;;;48747:80:::0;:::o;44654:32::-;;;;;;;;;;;;;:::o;48337:81::-;48380:7;48404:8;;48397:15;;48337:81;:::o;23760:339::-;23955:41;23974:12;:10;:12::i;:::-;23988:7;23955:18;:41::i;:::-;23947:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24063:28;24073:4;24079:2;24083:7;24063:9;:28::i;:::-;23760:339;;;:::o;44618:31::-;;;;;;;;;;;;;:::o;34680:256::-;34777:7;34813:23;34830:5;34813:16;:23::i;:::-;34805:5;:31;34797:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;34902:12;:19;34915:5;34902:19;;;;;;;;;;;;;;;:26;34922:5;34902:26;;;;;;;;;;;;34895:33;;34680:256;;;;:::o;46092:963::-;46153:7;:5;:7::i;:::-;46139:21;;:10;:21;;;46136:111;;46181:12;;;;;;;;;;;46173:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;46136:111;46257:25;46285:15;:13;:15::i;:::-;46257:43;;46359:1;44964:4;46345:15;;;;:::i;:::-;46338:3;46318:17;:23;;;;:::i;:::-;:43;46309:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;46405:21;46429:13;:11;:13::i;:::-;46405:37;;46495:1;44765:4;46483:13;;;;:::i;:::-;46476:3;46460:13;:19;;;;:::i;:::-;:37;46451:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;46536:30;46569:29;46587:10;46569:17;:29::i;:::-;46536:62;;46653:1;46625:8;:27;;;:29;;;;:::i;:::-;46620:1;46616:3;:5;;;;:::i;:::-;:39;46607:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;46733:9;46729:321;46748:3;46744:1;:7;46729:321;;;46769:32;:20;:30;:32::i;:::-;46918:4;46872:11;:43;46884:8;:25;;;46912:1;46910;:3;;;;:::i;:::-;46884:30;;;;;;;;:::i;:::-;;;;;;;;46872:43;;;;;;;;;;;;:50;;;;;;;;;;;;;;;;;;46981:4;46933:11;:45;46945:8;:25;;;46975:1;46973;46971;:3;;;;:::i;:::-;:5;;;;:::i;:::-;46945:32;;;;;;;;:::i;:::-;;;;;;;;46933:45;;;;;;;;;;;;:52;;;;;;;;;;;;;;;;;;46998:42;47009:10;47037:1;47021:13;:17;;;;:::i;:::-;46998:9;:42::i;:::-;46753:3;;;;;:::i;:::-;;;;46729:321;;;;46127:928;;;46092:963;:::o;47061:648::-;47125:14;47142:13;:11;:13::i;:::-;47125:30;;47183:7;:5;:7::i;:::-;47169:21;;:10;:21;;;47166:373;;47246:1;47207:14;;;;;;;;;;;:24;;;47232:10;47207:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;47203:112;;;47272:11;;;;;;;;;;;47264:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;47203:112;47333:14;;;;;;;;;;;47325:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;47407:1;47398:8;;:10;;;;:::i;:::-;47391:3;:18;47382:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;47496:3;47487:6;;:12;;;;:::i;:::-;47474:9;:25;;47465:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;47166:373;47586:1;44765:4;47574:13;;;;:::i;:::-;47567:3;47558:6;:12;;;;:::i;:::-;:30;47549:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;47631:9;47627:77;47646:3;47642:1;:7;47627:77;;;47666:28;47677:3;47691:1;47682:6;:10;;;;:::i;:::-;47666:9;:28::i;:::-;47651:3;;;;;:::i;:::-;;;;47627:77;;;;47116:593;47061:648;;:::o;24170:185::-;24308:39;24325:4;24331:2;24335:7;24308:39;;;;;;;;;;;;:16;:39::i;:::-;24170:185;;;:::o;47715:328::-;47774:16;47801:18;47822:17;47832:6;47822:9;:17::i;:::-;47801:38;;47850:25;47892:10;47878:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47850:53;;47916:9;47912:102;47931:10;47927:1;:14;47912:102;;;47974:30;47994:6;48002:1;47974:19;:30::i;:::-;47960:8;47969:1;47960:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;47943:3;;;;;:::i;:::-;;;;47912:102;;;;48029:8;48022:15;;;;47715:328;;;:::o;35202:233::-;35277:7;35313:30;:28;:30::i;:::-;35305:5;:38;35297:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;35410:10;35421:5;35410:17;;;;;;;;:::i;:::-;;;;;;;;;;35403:24;;35202:233;;;:::o;48833:82::-;41728:12;:10;:12::i;:::-;41717:23;;:7;:5;:7::i;:::-;:23;;;41709:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48906:3:::1;48891:12;;:18;;;;;;;;;;;;;;;;;;48833:82:::0;:::o;48424:97::-;41728:12;:10;:12::i;:::-;41717:23;;:7;:5;:7::i;:::-;:23;;;41709:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48504:11:::1;48493:8;:22;;;;48424:97:::0;:::o;48643:98::-;41728:12;:10;:12::i;:::-;41717:23;;:7;:5;:7::i;:::-;:23;;;41709:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48728:7:::1;48712:13;:23;;;;;;;;;;;;:::i;:::-;;48643:98:::0;:::o;45484:602::-;45554:21;;:::i;:::-;45586:15;45604:14;;;;;;;;;;;:24;;;45629:13;45604:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45586:57;;45654:28;45685:44;;;;;;;;45700:1;45685:44;;;;45717:10;45703:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45685:44;;;45654:75;;45742:9;45738:321;45757:10;45753:1;:14;45738:321;;;45788:12;45803:14;;;;;;;;;;;:34;;;45838:13;45853:1;45803:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45788:67;;45898:5;45874:29;;:11;:20;45886:7;45874:20;;;;;;;;;;;;;;;;;;;;;:29;;;45870:178;;;45977:7;45924:6;:23;;;45948:6;:25;;;45924:50;;;;;;;;:::i;:::-;;;;;;;:60;;;;;46031:1;46003:6;:25;;:29;;;;;;;:::i;:::-;;;;;;;;45870:178;45773:286;45769:3;;;;;:::i;:::-;;;;45738:321;;;;46074:6;46067:13;;;;45484:602;;;:::o;21005:239::-;21077:7;21097:13;21113:7;:16;21121:7;21113:16;;;;;;;;;;;;;;;;;;;;;21097:32;;21165:1;21148:19;;:5;:19;;;;21140:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21231:5;21224:12;;;21005:239;;;:::o;20735:208::-;20807:7;20852:1;20835:19;;:5;:19;;;;20827:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;20919:9;:16;20929:5;20919:16;;;;;;;;;;;;;;;;20912:23;;20735:208;;;:::o;42148:94::-;41728:12;:10;:12::i;:::-;41717:23;;:7;:5;:7::i;:::-;:23;;;41709:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42213:21:::1;42231:1;42213:9;:21::i;:::-;42148:94::o:0;48921:86::-;41728:12;:10;:12::i;:::-;41717:23;;:7;:5;:7::i;:::-;:23;;;41709:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48998:3:::1;48981:14;;:20;;;;;;;;;;;;;;;;;;48921:86:::0;:::o;44730:39::-;44765:4;44730:39;:::o;44776:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;49013:119::-;41728:12;:10;:12::i;:::-;41717:23;;:7;:5;:7::i;:::-;:23;;;41709:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49086:10:::1;49078:24;;:47;49103:21;49078:47;;;;;;;;;;;;;;;;;;;;;;;49070:56;;;::::0;::::1;;49013:119::o:0;41497:87::-;41543:7;41570:6;;;;;;;;;;;41563:13;;41497:87;:::o;48242:89::-;41728:12;:10;:12::i;:::-;41717:23;;:7;:5;:7::i;:::-;:23;;;41709:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48316:9:::1;48307:6;:18;;;;48242:89:::0;:::o;21480:104::-;21536:13;21569:7;21562:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21480:104;:::o;48049:142::-;48090:7;48124;:5;:7::i;:::-;48110:21;;:10;:21;;;48107:57;;;48153:1;48146:8;;;;48107:57;48179:6;;48172:13;;48049:142;;:::o;23163:295::-;23278:12;:10;:12::i;:::-;23266:24;;:8;:24;;;;23258:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23378:8;23333:18;:32;23352:12;:10;:12::i;:::-;23333:32;;;;;;;;;;;;;;;:42;23366:8;23333:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;23431:8;23402:48;;23417:12;:10;:12::i;:::-;23402:48;;;23441:8;23402:48;;;;;;:::i;:::-;;;;;;;;23163:295;;:::o;44691:34::-;;;;;;;;;;;;;:::o;24426:328::-;24601:41;24620:12;:10;:12::i;:::-;24634:7;24601:18;:41::i;:::-;24593:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24707:39;24721:4;24727:2;24731:7;24740:5;24707:13;:39::i;:::-;24426:328;;;;:::o;21655:334::-;21728:13;21762:16;21770:7;21762;:16::i;:::-;21754:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;21843:21;21867:10;:8;:10::i;:::-;21843:34;;21919:1;21901:7;21895:21;:25;:86;;;;;;;;;;;;;;;;;21947:7;21956:18;:7;:16;:18::i;:::-;21930:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;21895:86;21888:93;;;21655:334;;;:::o;44927:41::-;44964:4;44927:41;:::o;23529:164::-;23626:4;23650:18;:25;23669:5;23650:25;;;;;;;;;;;;;;;:35;23676:8;23650:35;;;;;;;;;;;;;;;;;;;;;;;;;23643:42;;23529:164;;;;:::o;42397:192::-;41728:12;:10;:12::i;:::-;41717:23;;:7;:5;:7::i;:::-;:23;;;41709:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42506:1:::1;42486:22;;:8;:22;;;;42478:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;42562:19;42572:8;42562:9;:19::i;:::-;42397:192:::0;:::o;45372:106::-;45418:4;45440:30;:20;:28;:30::i;:::-;45433:37;;45372:106;:::o;8130:387::-;8190:4;8398:12;8465:7;8453:20;8445:28;;8508:1;8501:4;:8;8494:15;;;8130:387;;;:::o;32360:126::-;;;;:::o;20366:305::-;20468:4;20520:25;20505:40;;;:11;:40;;;;:105;;;;20577:33;20562:48;;;:11;:48;;;;20505:105;:158;;;;20627:36;20651:11;20627:23;:36::i;:::-;20505:158;20485:178;;20366:305;;;:::o;26264:127::-;26329:4;26381:1;26353:30;;:7;:16;26361:7;26353:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26346:37;;26264:127;;;:::o;15849:98::-;15902:7;15929:10;15922:17;;15849:98;:::o;30246:174::-;30348:2;30321:15;:24;30337:7;30321:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30404:7;30400:2;30366:46;;30375:23;30390:7;30375:14;:23::i;:::-;30366:46;;;;;;;;;;;;30246:174;;:::o;26558:348::-;26651:4;26676:16;26684:7;26676;:16::i;:::-;26668:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26752:13;26768:23;26783:7;26768:14;:23::i;:::-;26752:39;;26821:5;26810:16;;:7;:16;;;:51;;;;26854:7;26830:31;;:20;26842:7;26830:11;:20::i;:::-;:31;;;26810:51;:87;;;;26865:32;26882:5;26889:7;26865:16;:32::i;:::-;26810:87;26802:96;;;26558:348;;;;:::o;29550:578::-;29709:4;29682:31;;:23;29697:7;29682:14;:23::i;:::-;:31;;;29674:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;29792:1;29778:16;;:2;:16;;;;29770:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;29848:39;29869:4;29875:2;29879:7;29848:20;:39::i;:::-;29952:29;29969:1;29973:7;29952:8;:29::i;:::-;30013:1;29994:9;:15;30004:4;29994:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30042:1;30025:9;:13;30035:2;30025:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30073:2;30054:7;:16;30062:7;30054:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30112:7;30108:2;30093:27;;30102:4;30093:27;;;;;;;;;;;;29550:578;;;:::o;43697:127::-;43804:1;43786:7;:14;;;:19;;;;;;;;;;;43697:127;:::o;27248:110::-;27324:26;27334:2;27338:7;27324:26;;;;;;;;;;;;:9;:26::i;:::-;27248:110;;:::o;42597:173::-;42653:16;42672:6;;;;;;;;;;;42653:25;;42698:8;42689:6;;:17;;;;;;;;;;;;;;;;;;42753:8;42722:40;;42743:8;42722:40;;;;;;;;;;;;42642:128;42597:173;:::o;25636:315::-;25793:28;25803:4;25809:2;25813:7;25793:9;:28::i;:::-;25840:48;25863:4;25869:2;25873:7;25882:5;25840:22;:48::i;:::-;25832:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25636:315;;;;:::o;48527:110::-;48587:13;48618;48611:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48527:110;:::o;16355:723::-;16411:13;16641:1;16632:5;:10;16628:53;;;16659:10;;;;;;;;;;;;;;;;;;;;;16628:53;16691:12;16706:5;16691:20;;16722:14;16747:78;16762:1;16754:4;:9;16747:78;;16780:8;;;;;:::i;:::-;;;;16811:2;16803:10;;;;;:::i;:::-;;;16747:78;;;16835:19;16867:6;16857:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16835:39;;16885:154;16901:1;16892:5;:10;16885:154;;16929:1;16919:11;;;;;:::i;:::-;;;16996:2;16988:5;:10;;;;:::i;:::-;16975:2;:24;;;;:::i;:::-;16962:39;;16945:6;16952;16945:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;17025:2;17016:11;;;;;:::i;:::-;;;16885:154;;;17063:6;17049:21;;;;;16355:723;;;;:::o;43575:114::-;43640:7;43667;:14;;;43660:21;;43575:114;;;:::o;18891:157::-;18976:4;19015:25;19000:40;;;:11;:40;;;;18993:47;;18891:157;;;:::o;36048:589::-;36192:45;36219:4;36225:2;36229:7;36192:26;:45::i;:::-;36270:1;36254:18;;:4;:18;;;36250:187;;;36289:40;36321:7;36289:31;:40::i;:::-;36250:187;;;36359:2;36351:10;;:4;:10;;;36347:90;;36378:47;36411:4;36417:7;36378:32;:47::i;:::-;36347:90;36250:187;36465:1;36451:16;;:2;:16;;;36447:183;;;36484:45;36521:7;36484:36;:45::i;:::-;36447:183;;;36557:4;36551:10;;:2;:10;;;36547:83;;36578:40;36606:2;36610:7;36578:27;:40::i;:::-;36547:83;36447:183;36048:589;;;:::o;27585:321::-;27715:18;27721:2;27725:7;27715:5;:18::i;:::-;27766:54;27797:1;27801:2;27805:7;27814:5;27766:22;:54::i;:::-;27744:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;27585:321;;;:::o;30985:803::-;31140:4;31161:15;:2;:13;;;:15::i;:::-;31157:624;;;31213:2;31197:36;;;31234:12;:10;:12::i;:::-;31248:4;31254:7;31263:5;31197:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31193:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31460:1;31443:6;:13;:18;31439:272;;;31486:60;;;;;;;;;;:::i;:::-;;;;;;;;31439:272;31661:6;31655:13;31646:6;31642:2;31638:15;31631:38;31193:533;31330:45;;;31320:55;;;:6;:55;;;;31313:62;;;;;31157:624;31765:4;31758:11;;30985:803;;;;;;;:::o;37360:164::-;37464:10;:17;;;;37437:15;:24;37453:7;37437:24;;;;;;;;;;;:44;;;;37492:10;37508:7;37492:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37360:164;:::o;38151:988::-;38417:22;38467:1;38442:22;38459:4;38442:16;:22::i;:::-;:26;;;;:::i;:::-;38417:51;;38479:18;38500:17;:26;38518:7;38500:26;;;;;;;;;;;;38479:47;;38647:14;38633:10;:28;38629:328;;38678:19;38700:12;:18;38713:4;38700:18;;;;;;;;;;;;;;;:34;38719:14;38700:34;;;;;;;;;;;;38678:56;;38784:11;38751:12;:18;38764:4;38751:18;;;;;;;;;;;;;;;:30;38770:10;38751:30;;;;;;;;;;;:44;;;;38901:10;38868:17;:30;38886:11;38868:30;;;;;;;;;;;:43;;;;38663:294;38629:328;39053:17;:26;39071:7;39053:26;;;;;;;;;;;39046:33;;;39097:12;:18;39110:4;39097:18;;;;;;;;;;;;;;;:34;39116:14;39097:34;;;;;;;;;;;39090:41;;;38232:907;;38151:988;;:::o;39434:1079::-;39687:22;39732:1;39712:10;:17;;;;:21;;;;:::i;:::-;39687:46;;39744:18;39765:15;:24;39781:7;39765:24;;;;;;;;;;;;39744:45;;40116:19;40138:10;40149:14;40138:26;;;;;;;;:::i;:::-;;;;;;;;;;40116:48;;40202:11;40177:10;40188;40177:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;40313:10;40282:15;:28;40298:11;40282:28;;;;;;;;;;;:41;;;;40454:15;:24;40470:7;40454:24;;;;;;;;;;;40447:31;;;40489:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39505:1008;;;39434:1079;:::o;36938:221::-;37023:14;37040:20;37057:2;37040:16;:20::i;:::-;37023:37;;37098:7;37071:12;:16;37084:2;37071:16;;;;;;;;;;;;;;;:24;37088:6;37071:24;;;;;;;;;;;:34;;;;37145:6;37116:17;:26;37134:7;37116:26;;;;;;;;;;;:35;;;;37012:147;36938:221;;:::o;28242:382::-;28336:1;28322:16;;:2;:16;;;;28314:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28395:16;28403:7;28395;:16::i;:::-;28394:17;28386:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28457:45;28486:1;28490:2;28494:7;28457:20;:45::i;:::-;28532:1;28515:9;:13;28525:2;28515:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28563:2;28544:7;:16;28552:7;28544:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28608:7;28604:2;28583:33;;28600:1;28583:33;;;;;;;;;;;;28242:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::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:2;;;280:79;;:::i;:::-;249:2;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:2;;;698:79;;:::i;:::-;667:2;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;893:87;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;1035:84;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1176:86;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1330:79;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:2;;1540:79;;:::i;:::-;1499:2;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:2;;1899:79;;:::i;:::-;1858:2;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2184:87;;;;:::o;2277:143::-;2334:5;2365:6;2359:13;2350:22;;2381:33;2408:5;2381:33;:::i;:::-;2340:80;;;;:::o;2426:329::-;2485:6;2534:2;2522:9;2513:7;2509:23;2505:32;2502:2;;;2540:79;;:::i;:::-;2502:2;2660:1;2685:53;2730:7;2721:6;2710:9;2706:22;2685:53;:::i;:::-;2675:63;;2631:117;2492:263;;;;:::o;2761:474::-;2829:6;2837;2886:2;2874:9;2865:7;2861:23;2857:32;2854:2;;;2892:79;;:::i;:::-;2854:2;3012:1;3037:53;3082:7;3073:6;3062:9;3058:22;3037:53;:::i;:::-;3027:63;;2983:117;3139:2;3165:53;3210:7;3201:6;3190:9;3186:22;3165:53;:::i;:::-;3155:63;;3110:118;2844:391;;;;;:::o;3241:619::-;3318:6;3326;3334;3383:2;3371:9;3362:7;3358:23;3354:32;3351:2;;;3389:79;;:::i;:::-;3351:2;3509:1;3534:53;3579:7;3570:6;3559:9;3555:22;3534:53;:::i;:::-;3524:63;;3480:117;3636:2;3662:53;3707:7;3698:6;3687:9;3683:22;3662:53;:::i;:::-;3652:63;;3607:118;3764:2;3790:53;3835:7;3826:6;3815:9;3811:22;3790:53;:::i;:::-;3780:63;;3735:118;3341:519;;;;;:::o;3866:943::-;3961:6;3969;3977;3985;4034:3;4022:9;4013:7;4009:23;4005:33;4002:2;;;4041:79;;:::i;:::-;4002:2;4161:1;4186:53;4231:7;4222:6;4211:9;4207:22;4186:53;:::i;:::-;4176:63;;4132:117;4288:2;4314:53;4359:7;4350:6;4339:9;4335:22;4314:53;:::i;:::-;4304:63;;4259:118;4416:2;4442:53;4487:7;4478:6;4467:9;4463:22;4442:53;:::i;:::-;4432:63;;4387:118;4572:2;4561:9;4557:18;4544:32;4603:18;4595:6;4592:30;4589:2;;;4625:79;;:::i;:::-;4589:2;4730:62;4784:7;4775:6;4764:9;4760:22;4730:62;:::i;:::-;4720:72;;4515:287;3992:817;;;;;;;:::o;4815:468::-;4880:6;4888;4937:2;4925:9;4916:7;4912:23;4908:32;4905:2;;;4943:79;;:::i;:::-;4905:2;5063:1;5088:53;5133:7;5124:6;5113:9;5109:22;5088:53;:::i;:::-;5078:63;;5034:117;5190:2;5216:50;5258:7;5249:6;5238:9;5234:22;5216:50;:::i;:::-;5206:60;;5161:115;4895:388;;;;;:::o;5289:474::-;5357:6;5365;5414:2;5402:9;5393:7;5389:23;5385:32;5382:2;;;5420:79;;:::i;:::-;5382:2;5540:1;5565:53;5610:7;5601:6;5590:9;5586:22;5565:53;:::i;:::-;5555:63;;5511:117;5667:2;5693:53;5738:7;5729:6;5718:9;5714:22;5693:53;:::i;:::-;5683:63;;5638:118;5372:391;;;;;:::o;5769:323::-;5825:6;5874:2;5862:9;5853:7;5849:23;5845:32;5842:2;;;5880:79;;:::i;:::-;5842:2;6000:1;6025:50;6067:7;6058:6;6047:9;6043:22;6025:50;:::i;:::-;6015:60;;5971:114;5832:260;;;;:::o;6098:327::-;6156:6;6205:2;6193:9;6184:7;6180:23;6176:32;6173:2;;;6211:79;;:::i;:::-;6173:2;6331:1;6356:52;6400:7;6391:6;6380:9;6376:22;6356:52;:::i;:::-;6346:62;;6302:116;6163:262;;;;:::o;6431:349::-;6500:6;6549:2;6537:9;6528:7;6524:23;6520:32;6517:2;;;6555:79;;:::i;:::-;6517:2;6675:1;6700:63;6755:7;6746:6;6735:9;6731:22;6700:63;:::i;:::-;6690:73;;6646:127;6507:273;;;;:::o;6786:509::-;6855:6;6904:2;6892:9;6883:7;6879:23;6875:32;6872:2;;;6910:79;;:::i;:::-;6872:2;7058:1;7047:9;7043:17;7030:31;7088:18;7080:6;7077:30;7074:2;;;7110:79;;:::i;:::-;7074:2;7215:63;7270:7;7261:6;7250:9;7246:22;7215:63;:::i;:::-;7205:73;;7001:287;6862:433;;;;:::o;7301:329::-;7360:6;7409:2;7397:9;7388:7;7384:23;7380:32;7377:2;;;7415:79;;:::i;:::-;7377:2;7535:1;7560:53;7605:7;7596:6;7585:9;7581:22;7560:53;:::i;:::-;7550:63;;7506:117;7367:263;;;;:::o;7636:351::-;7706:6;7755:2;7743:9;7734:7;7730:23;7726:32;7723:2;;;7761:79;;:::i;:::-;7723:2;7881:1;7906:64;7962:7;7953:6;7942:9;7938:22;7906:64;:::i;:::-;7896:74;;7852:128;7713:274;;;;:::o;7993:179::-;8062:10;8083:46;8125:3;8117:6;8083:46;:::i;:::-;8161:4;8156:3;8152:14;8138:28;;8073:99;;;;:::o;8178:118::-;8265:24;8283:5;8265:24;:::i;:::-;8260:3;8253:37;8243:53;;:::o;8332:712::-;8441:3;8470:54;8518:5;8470:54;:::i;:::-;8540:76;8609:6;8604:3;8540:76;:::i;:::-;8533:83;;8640:56;8690:5;8640:56;:::i;:::-;8719:7;8750:1;8735:284;8760:6;8757:1;8754:13;8735:284;;;8836:6;8830:13;8863:63;8922:3;8907:13;8863:63;:::i;:::-;8856:70;;8949:60;9002:6;8949:60;:::i;:::-;8939:70;;8795:224;8782:1;8779;8775:9;8770:14;;8735:284;;;8739:14;9035:3;9028:10;;8446:598;;;;;;;:::o;9080:732::-;9199:3;9228:54;9276:5;9228:54;:::i;:::-;9298:86;9377:6;9372:3;9298:86;:::i;:::-;9291:93;;9408:56;9458:5;9408:56;:::i;:::-;9487:7;9518:1;9503:284;9528:6;9525:1;9522:13;9503:284;;;9604:6;9598:13;9631:63;9690:3;9675:13;9631:63;:::i;:::-;9624:70;;9717:60;9770:6;9717:60;:::i;:::-;9707:70;;9563:224;9550:1;9547;9543:9;9538:14;;9503:284;;;9507:14;9803:3;9796:10;;9204:608;;;;;;;:::o;9818:109::-;9899:21;9914:5;9899:21;:::i;:::-;9894:3;9887:34;9877:50;;:::o;9933:360::-;10019:3;10047:38;10079:5;10047:38;:::i;:::-;10101:70;10164:6;10159:3;10101:70;:::i;:::-;10094:77;;10180:52;10225:6;10220:3;10213:4;10206:5;10202:16;10180:52;:::i;:::-;10257:29;10279:6;10257:29;:::i;:::-;10252:3;10248:39;10241:46;;10023:270;;;;;:::o;10299:364::-;10387:3;10415:39;10448:5;10415:39;:::i;:::-;10470:71;10534:6;10529:3;10470:71;:::i;:::-;10463:78;;10550:52;10595:6;10590:3;10583:4;10576:5;10572:16;10550:52;:::i;:::-;10627:29;10649:6;10627:29;:::i;:::-;10622:3;10618:39;10611:46;;10391:272;;;;;:::o;10669:377::-;10775:3;10803:39;10836:5;10803:39;:::i;:::-;10858:89;10940:6;10935:3;10858:89;:::i;:::-;10851:96;;10956:52;11001:6;10996:3;10989:4;10982:5;10978:16;10956:52;:::i;:::-;11033:6;11028:3;11024:16;11017:23;;10779:267;;;;;:::o;11052:366::-;11194:3;11215:67;11279:2;11274:3;11215:67;:::i;:::-;11208:74;;11291:93;11380:3;11291:93;:::i;:::-;11409:2;11404:3;11400:12;11393:19;;11198:220;;;:::o;11424:366::-;11566:3;11587:67;11651:2;11646:3;11587:67;:::i;:::-;11580:74;;11663:93;11752:3;11663:93;:::i;:::-;11781:2;11776:3;11772:12;11765:19;;11570:220;;;:::o;11796:366::-;11938:3;11959:67;12023:2;12018:3;11959:67;:::i;:::-;11952:74;;12035:93;12124:3;12035:93;:::i;:::-;12153:2;12148:3;12144:12;12137:19;;11942:220;;;:::o;12168:366::-;12310:3;12331:67;12395:2;12390:3;12331:67;:::i;:::-;12324:74;;12407:93;12496:3;12407:93;:::i;:::-;12525:2;12520:3;12516:12;12509:19;;12314:220;;;:::o;12540:366::-;12682:3;12703:67;12767:2;12762:3;12703:67;:::i;:::-;12696:74;;12779:93;12868:3;12779:93;:::i;:::-;12897:2;12892:3;12888:12;12881:19;;12686:220;;;:::o;12912:366::-;13054:3;13075:67;13139:2;13134:3;13075:67;:::i;:::-;13068:74;;13151:93;13240:3;13151:93;:::i;:::-;13269:2;13264:3;13260:12;13253:19;;13058:220;;;:::o;13284:366::-;13426:3;13447:67;13511:2;13506:3;13447:67;:::i;:::-;13440:74;;13523:93;13612:3;13523:93;:::i;:::-;13641:2;13636:3;13632:12;13625:19;;13430:220;;;:::o;13656:366::-;13798:3;13819:67;13883:2;13878:3;13819:67;:::i;:::-;13812:74;;13895:93;13984:3;13895:93;:::i;:::-;14013:2;14008:3;14004:12;13997:19;;13802:220;;;:::o;14028:366::-;14170:3;14191:67;14255:2;14250:3;14191:67;:::i;:::-;14184:74;;14267:93;14356:3;14267:93;:::i;:::-;14385:2;14380:3;14376:12;14369:19;;14174:220;;;:::o;14400:366::-;14542:3;14563:67;14627:2;14622:3;14563:67;:::i;:::-;14556:74;;14639:93;14728:3;14639:93;:::i;:::-;14757:2;14752:3;14748:12;14741:19;;14546:220;;;:::o;14772:366::-;14914:3;14935:67;14999:2;14994:3;14935:67;:::i;:::-;14928:74;;15011:93;15100:3;15011:93;:::i;:::-;15129:2;15124:3;15120:12;15113:19;;14918:220;;;:::o;15144:366::-;15286:3;15307:67;15371:2;15366:3;15307:67;:::i;:::-;15300:74;;15383:93;15472:3;15383:93;:::i;:::-;15501:2;15496:3;15492:12;15485:19;;15290:220;;;:::o;15516:366::-;15658:3;15679:67;15743:2;15738:3;15679:67;:::i;:::-;15672:74;;15755:93;15844:3;15755:93;:::i;:::-;15873:2;15868:3;15864:12;15857:19;;15662:220;;;:::o;15888:366::-;16030:3;16051:67;16115:2;16110:3;16051:67;:::i;:::-;16044:74;;16127:93;16216:3;16127:93;:::i;:::-;16245:2;16240:3;16236:12;16229:19;;16034:220;;;:::o;16260:366::-;16402:3;16423:67;16487:2;16482:3;16423:67;:::i;:::-;16416:74;;16499:93;16588:3;16499:93;:::i;:::-;16617:2;16612:3;16608:12;16601:19;;16406:220;;;:::o;16632:366::-;16774:3;16795:67;16859:2;16854:3;16795:67;:::i;:::-;16788:74;;16871:93;16960:3;16871:93;:::i;:::-;16989:2;16984:3;16980:12;16973:19;;16778:220;;;:::o;17004:366::-;17146:3;17167:67;17231:2;17226:3;17167:67;:::i;:::-;17160:74;;17243:93;17332:3;17243:93;:::i;:::-;17361:2;17356:3;17352:12;17345:19;;17150:220;;;:::o;17376:366::-;17518:3;17539:67;17603:2;17598:3;17539:67;:::i;:::-;17532:74;;17615:93;17704:3;17615:93;:::i;:::-;17733:2;17728:3;17724:12;17717:19;;17522:220;;;:::o;17748:366::-;17890:3;17911:67;17975:2;17970:3;17911:67;:::i;:::-;17904:74;;17987:93;18076:3;17987:93;:::i;:::-;18105:2;18100:3;18096:12;18089:19;;17894:220;;;:::o;18120:366::-;18262:3;18283:67;18347:2;18342:3;18283:67;:::i;:::-;18276:74;;18359:93;18448:3;18359:93;:::i;:::-;18477:2;18472:3;18468:12;18461:19;;18266:220;;;:::o;18492:366::-;18634:3;18655:67;18719:2;18714:3;18655:67;:::i;:::-;18648:74;;18731:93;18820:3;18731:93;:::i;:::-;18849:2;18844:3;18840:12;18833:19;;18638:220;;;:::o;18864:366::-;19006:3;19027:67;19091:2;19086:3;19027:67;:::i;:::-;19020:74;;19103:93;19192:3;19103:93;:::i;:::-;19221:2;19216:3;19212:12;19205:19;;19010:220;;;:::o;19236:366::-;19378:3;19399:67;19463:2;19458:3;19399:67;:::i;:::-;19392:74;;19475:93;19564:3;19475:93;:::i;:::-;19593:2;19588:3;19584:12;19577:19;;19382:220;;;:::o;19608:366::-;19750:3;19771:67;19835:2;19830:3;19771:67;:::i;:::-;19764:74;;19847:93;19936:3;19847:93;:::i;:::-;19965:2;19960:3;19956:12;19949:19;;19754:220;;;:::o;19980:366::-;20122:3;20143:67;20207:2;20202:3;20143:67;:::i;:::-;20136:74;;20219:93;20308:3;20219:93;:::i;:::-;20337:2;20332:3;20328:12;20321:19;;20126:220;;;:::o;20352:366::-;20494:3;20515:67;20579:2;20574:3;20515:67;:::i;:::-;20508:74;;20591:93;20680:3;20591:93;:::i;:::-;20709:2;20704:3;20700:12;20693:19;;20498:220;;;:::o;20810:676::-;20943:3;20979:4;20974:3;20970:14;21080:4;21073:5;21069:16;21063:23;21099:63;21156:4;21151:3;21147:14;21133:12;21099:63;:::i;:::-;20994:178;21266:4;21259:5;21255:16;21249:23;21319:3;21313:4;21309:14;21302:4;21297:3;21293:14;21286:38;21345:103;21443:4;21429:12;21345:103;:::i;:::-;21337:111;;21182:277;21476:4;21469:11;;20948:538;;;;;:::o;21492:108::-;21569:24;21587:5;21569:24;:::i;:::-;21564:3;21557:37;21547:53;;:::o;21606:118::-;21693:24;21711:5;21693:24;:::i;:::-;21688:3;21681:37;21671:53;;:::o;21730:435::-;21910:3;21932:95;22023:3;22014:6;21932:95;:::i;:::-;21925:102;;22044:95;22135:3;22126:6;22044:95;:::i;:::-;22037:102;;22156:3;22149:10;;21914:251;;;;;:::o;22171:222::-;22264:4;22302:2;22291:9;22287:18;22279:26;;22315:71;22383:1;22372:9;22368:17;22359:6;22315:71;:::i;:::-;22269:124;;;;:::o;22399:640::-;22594:4;22632:3;22621:9;22617:19;22609:27;;22646:71;22714:1;22703:9;22699:17;22690:6;22646:71;:::i;:::-;22727:72;22795:2;22784:9;22780:18;22771:6;22727:72;:::i;:::-;22809;22877:2;22866:9;22862:18;22853:6;22809:72;:::i;:::-;22928:9;22922:4;22918:20;22913:2;22902:9;22898:18;22891:48;22956:76;23027:4;23018:6;22956:76;:::i;:::-;22948:84;;22599:440;;;;;;;:::o;23045:332::-;23166:4;23204:2;23193:9;23189:18;23181:26;;23217:71;23285:1;23274:9;23270:17;23261:6;23217:71;:::i;:::-;23298:72;23366:2;23355:9;23351:18;23342:6;23298:72;:::i;:::-;23171:206;;;;;:::o;23383:373::-;23526:4;23564:2;23553:9;23549:18;23541:26;;23613:9;23607:4;23603:20;23599:1;23588:9;23584:17;23577:47;23641:108;23744:4;23735:6;23641:108;:::i;:::-;23633:116;;23531:225;;;;:::o;23762:210::-;23849:4;23887:2;23876:9;23872:18;23864:26;;23900:65;23962:1;23951:9;23947:17;23938:6;23900:65;:::i;:::-;23854:118;;;;:::o;23978:313::-;24091:4;24129:2;24118:9;24114:18;24106:26;;24178:9;24172:4;24168:20;24164:1;24153:9;24149:17;24142:47;24206:78;24279:4;24270:6;24206:78;:::i;:::-;24198:86;;24096:195;;;;:::o;24297:419::-;24463:4;24501:2;24490:9;24486:18;24478:26;;24550:9;24544:4;24540:20;24536:1;24525:9;24521:17;24514:47;24578:131;24704:4;24578:131;:::i;:::-;24570:139;;24468:248;;;:::o;24722:419::-;24888:4;24926:2;24915:9;24911:18;24903:26;;24975:9;24969:4;24965:20;24961:1;24950:9;24946:17;24939:47;25003:131;25129:4;25003:131;:::i;:::-;24995:139;;24893:248;;;:::o;25147:419::-;25313:4;25351:2;25340:9;25336:18;25328:26;;25400:9;25394:4;25390:20;25386:1;25375:9;25371:17;25364:47;25428:131;25554:4;25428:131;:::i;:::-;25420:139;;25318:248;;;:::o;25572:419::-;25738:4;25776:2;25765:9;25761:18;25753:26;;25825:9;25819:4;25815:20;25811:1;25800:9;25796:17;25789:47;25853:131;25979:4;25853:131;:::i;:::-;25845:139;;25743:248;;;:::o;25997:419::-;26163:4;26201:2;26190:9;26186:18;26178:26;;26250:9;26244:4;26240:20;26236:1;26225:9;26221:17;26214:47;26278:131;26404:4;26278:131;:::i;:::-;26270:139;;26168:248;;;:::o;26422:419::-;26588:4;26626:2;26615:9;26611:18;26603:26;;26675:9;26669:4;26665:20;26661:1;26650:9;26646:17;26639:47;26703:131;26829:4;26703:131;:::i;:::-;26695:139;;26593:248;;;:::o;26847:419::-;27013:4;27051:2;27040:9;27036:18;27028:26;;27100:9;27094:4;27090:20;27086:1;27075:9;27071:17;27064:47;27128:131;27254:4;27128:131;:::i;:::-;27120:139;;27018:248;;;:::o;27272:419::-;27438:4;27476:2;27465:9;27461:18;27453:26;;27525:9;27519:4;27515:20;27511:1;27500:9;27496:17;27489:47;27553:131;27679:4;27553:131;:::i;:::-;27545:139;;27443:248;;;:::o;27697:419::-;27863:4;27901:2;27890:9;27886:18;27878:26;;27950:9;27944:4;27940:20;27936:1;27925:9;27921:17;27914:47;27978:131;28104:4;27978:131;:::i;:::-;27970:139;;27868:248;;;:::o;28122:419::-;28288:4;28326:2;28315:9;28311:18;28303:26;;28375:9;28369:4;28365:20;28361:1;28350:9;28346:17;28339:47;28403:131;28529:4;28403:131;:::i;:::-;28395:139;;28293:248;;;:::o;28547:419::-;28713:4;28751:2;28740:9;28736:18;28728:26;;28800:9;28794:4;28790:20;28786:1;28775:9;28771:17;28764:47;28828:131;28954:4;28828:131;:::i;:::-;28820:139;;28718:248;;;:::o;28972:419::-;29138:4;29176:2;29165:9;29161:18;29153:26;;29225:9;29219:4;29215:20;29211:1;29200:9;29196:17;29189:47;29253:131;29379:4;29253:131;:::i;:::-;29245:139;;29143:248;;;:::o;29397:419::-;29563:4;29601:2;29590:9;29586:18;29578:26;;29650:9;29644:4;29640:20;29636:1;29625:9;29621:17;29614:47;29678:131;29804:4;29678:131;:::i;:::-;29670:139;;29568:248;;;:::o;29822:419::-;29988:4;30026:2;30015:9;30011:18;30003:26;;30075:9;30069:4;30065:20;30061:1;30050:9;30046:17;30039:47;30103:131;30229:4;30103:131;:::i;:::-;30095:139;;29993:248;;;:::o;30247:419::-;30413:4;30451:2;30440:9;30436:18;30428:26;;30500:9;30494:4;30490:20;30486:1;30475:9;30471:17;30464:47;30528:131;30654:4;30528:131;:::i;:::-;30520:139;;30418:248;;;:::o;30672:419::-;30838:4;30876:2;30865:9;30861:18;30853:26;;30925:9;30919:4;30915:20;30911:1;30900:9;30896:17;30889:47;30953:131;31079:4;30953:131;:::i;:::-;30945:139;;30843:248;;;:::o;31097:419::-;31263:4;31301:2;31290:9;31286:18;31278:26;;31350:9;31344:4;31340:20;31336:1;31325:9;31321:17;31314:47;31378:131;31504:4;31378:131;:::i;:::-;31370:139;;31268:248;;;:::o;31522:419::-;31688:4;31726:2;31715:9;31711:18;31703:26;;31775:9;31769:4;31765:20;31761:1;31750:9;31746:17;31739:47;31803:131;31929:4;31803:131;:::i;:::-;31795:139;;31693:248;;;:::o;31947:419::-;32113:4;32151:2;32140:9;32136:18;32128:26;;32200:9;32194:4;32190:20;32186:1;32175:9;32171:17;32164:47;32228:131;32354:4;32228:131;:::i;:::-;32220:139;;32118:248;;;:::o;32372:419::-;32538:4;32576:2;32565:9;32561:18;32553:26;;32625:9;32619:4;32615:20;32611:1;32600:9;32596:17;32589:47;32653:131;32779:4;32653:131;:::i;:::-;32645:139;;32543:248;;;:::o;32797:419::-;32963:4;33001:2;32990:9;32986:18;32978:26;;33050:9;33044:4;33040:20;33036:1;33025:9;33021:17;33014:47;33078:131;33204:4;33078:131;:::i;:::-;33070:139;;32968:248;;;:::o;33222:419::-;33388:4;33426:2;33415:9;33411:18;33403:26;;33475:9;33469:4;33465:20;33461:1;33450:9;33446:17;33439:47;33503:131;33629:4;33503:131;:::i;:::-;33495:139;;33393:248;;;:::o;33647:419::-;33813:4;33851:2;33840:9;33836:18;33828:26;;33900:9;33894:4;33890:20;33886:1;33875:9;33871:17;33864:47;33928:131;34054:4;33928:131;:::i;:::-;33920:139;;33818:248;;;:::o;34072:419::-;34238:4;34276:2;34265:9;34261:18;34253:26;;34325:9;34319:4;34315:20;34311:1;34300:9;34296:17;34289:47;34353:131;34479:4;34353:131;:::i;:::-;34345:139;;34243:248;;;:::o;34497:419::-;34663:4;34701:2;34690:9;34686:18;34678:26;;34750:9;34744:4;34740:20;34736:1;34725:9;34721:17;34714:47;34778:131;34904:4;34778:131;:::i;:::-;34770:139;;34668:248;;;:::o;34922:419::-;35088:4;35126:2;35115:9;35111:18;35103:26;;35175:9;35169:4;35165:20;35161:1;35150:9;35146:17;35139:47;35203:131;35329:4;35203:131;:::i;:::-;35195:139;;35093:248;;;:::o;35347:401::-;35504:4;35542:2;35531:9;35527:18;35519:26;;35591:9;35585:4;35581:20;35577:1;35566:9;35562:17;35555:47;35619:122;35736:4;35727:6;35619:122;:::i;:::-;35611:130;;35509:239;;;;:::o;35754:222::-;35847:4;35885:2;35874:9;35870:18;35862:26;;35898:71;35966:1;35955:9;35951:17;35942:6;35898:71;:::i;:::-;35852:124;;;;:::o;35982:129::-;36016:6;36043:20;;:::i;:::-;36033:30;;36072:33;36100:4;36092:6;36072:33;:::i;:::-;36023:88;;;:::o;36117:75::-;36150:6;36183:2;36177:9;36167:19;;36157:35;:::o;36198:307::-;36259:4;36349:18;36341:6;36338:30;36335:2;;;36371:18;;:::i;:::-;36335:2;36409:29;36431:6;36409:29;:::i;:::-;36401:37;;36493:4;36487;36483:15;36475:23;;36264:241;;;:::o;36511:308::-;36573:4;36663:18;36655:6;36652:30;36649:2;;;36685:18;;:::i;:::-;36649:2;36723:29;36745:6;36723:29;:::i;:::-;36715:37;;36807:4;36801;36797:15;36789:23;;36578:241;;;:::o;36825:132::-;36892:4;36915:3;36907:11;;36945:4;36940:3;36936:14;36928:22;;36897:60;;;:::o;36963:114::-;37030:6;37064:5;37058:12;37048:22;;37037:40;;;:::o;37083:98::-;37134:6;37168:5;37162:12;37152:22;;37141:40;;;:::o;37187:99::-;37239:6;37273:5;37267:12;37257:22;;37246:40;;;:::o;37292:113::-;37362:4;37394;37389:3;37385:14;37377:22;;37367:38;;;:::o;37411:174::-;37500:11;37534:6;37529:3;37522:19;37574:4;37569:3;37565:14;37550:29;;37512:73;;;;:::o;37591:184::-;37690:11;37724:6;37719:3;37712:19;37764:4;37759:3;37755:14;37740:29;;37702:73;;;;:::o;37781:168::-;37864:11;37898:6;37893:3;37886:19;37938:4;37933:3;37929:14;37914:29;;37876:73;;;;:::o;37955:169::-;38039:11;38073:6;38068:3;38061:19;38113:4;38108:3;38104:14;38089:29;;38051:73;;;;:::o;38130:148::-;38232:11;38269:3;38254:18;;38244:34;;;;:::o;38284:305::-;38324:3;38343:20;38361:1;38343:20;:::i;:::-;38338:25;;38377:20;38395:1;38377:20;:::i;:::-;38372:25;;38531:1;38463:66;38459:74;38456:1;38453:81;38450:2;;;38537:18;;:::i;:::-;38450:2;38581:1;38578;38574:9;38567:16;;38328:261;;;;:::o;38595:185::-;38635:1;38652:20;38670:1;38652:20;:::i;:::-;38647:25;;38686:20;38704:1;38686:20;:::i;:::-;38681:25;;38725:1;38715:2;;38730:18;;:::i;:::-;38715:2;38772:1;38769;38765:9;38760:14;;38637:143;;;;:::o;38786:348::-;38826:7;38849:20;38867:1;38849:20;:::i;:::-;38844:25;;38883:20;38901:1;38883:20;:::i;:::-;38878:25;;39071:1;39003:66;38999:74;38996:1;38993:81;38988:1;38981:9;38974:17;38970:105;38967:2;;;39078:18;;:::i;:::-;38967:2;39126:1;39123;39119:9;39108:20;;38834:300;;;;:::o;39140:191::-;39180:4;39200:20;39218:1;39200:20;:::i;:::-;39195:25;;39234:20;39252:1;39234:20;:::i;:::-;39229:25;;39273:1;39270;39267:8;39264:2;;;39278:18;;:::i;:::-;39264:2;39323:1;39320;39316:9;39308:17;;39185:146;;;;:::o;39337:96::-;39374:7;39403:24;39421:5;39403:24;:::i;:::-;39392:35;;39382:51;;;:::o;39439:90::-;39473:7;39516:5;39509:13;39502:21;39491:32;;39481:48;;;:::o;39535:149::-;39571:7;39611:66;39604:5;39600:78;39589:89;;39579:105;;;:::o;39690:126::-;39727:7;39767:42;39760:5;39756:54;39745:65;;39735:81;;;:::o;39822:77::-;39859:7;39888:5;39877:16;;39867:32;;;:::o;39905:154::-;39989:6;39984:3;39979;39966:30;40051:1;40042:6;40037:3;40033:16;40026:27;39956:103;;;:::o;40065:307::-;40133:1;40143:113;40157:6;40154:1;40151:13;40143:113;;;40242:1;40237:3;40233:11;40227:18;40223:1;40218:3;40214:11;40207:39;40179:2;40176:1;40172:10;40167:15;;40143:113;;;40274:6;40271:1;40268:13;40265:2;;;40354:1;40345:6;40340:3;40336:16;40329:27;40265:2;40114:258;;;;:::o;40378:320::-;40422:6;40459:1;40453:4;40449:12;40439:22;;40506:1;40500:4;40496:12;40527:18;40517:2;;40583:4;40575:6;40571:17;40561:27;;40517:2;40645;40637:6;40634:14;40614:18;40611:38;40608:2;;;40664:18;;:::i;:::-;40608:2;40429:269;;;;:::o;40704:281::-;40787:27;40809:4;40787:27;:::i;:::-;40779:6;40775:40;40917:6;40905:10;40902:22;40881:18;40869:10;40866:34;40863:62;40860:2;;;40928:18;;:::i;:::-;40860:2;40968:10;40964:2;40957:22;40747:238;;;:::o;40991:233::-;41030:3;41053:24;41071:5;41053:24;:::i;:::-;41044:33;;41099:66;41092:5;41089:77;41086:2;;;41169:18;;:::i;:::-;41086:2;41216:1;41209:5;41205:13;41198:20;;41034:190;;;:::o;41230:176::-;41262:1;41279:20;41297:1;41279:20;:::i;:::-;41274:25;;41313:20;41331:1;41313:20;:::i;:::-;41308:25;;41352:1;41342:2;;41357:18;;:::i;:::-;41342:2;41398:1;41395;41391:9;41386:14;;41264:142;;;;:::o;41412:180::-;41460:77;41457:1;41450:88;41557:4;41554:1;41547:15;41581:4;41578:1;41571:15;41598:180;41646:77;41643:1;41636:88;41743:4;41740:1;41733:15;41767:4;41764:1;41757:15;41784:180;41832:77;41829:1;41822:88;41929:4;41926:1;41919:15;41953:4;41950:1;41943:15;41970:180;42018:77;42015:1;42008:88;42115:4;42112:1;42105:15;42139:4;42136:1;42129:15;42156:180;42204:77;42201:1;42194:88;42301:4;42298:1;42291:15;42325:4;42322:1;42315:15;42342:180;42390:77;42387:1;42380:88;42487:4;42484:1;42477:15;42511:4;42508:1;42501:15;42528:117;42637:1;42634;42627:12;42651:117;42760:1;42757;42750:12;42774:117;42883:1;42880;42873:12;42897:117;43006:1;43003;42996:12;43020:102;43061:6;43112:2;43108:7;43103:2;43096:5;43092:14;43088:28;43078:38;;43068:54;;;:::o;43128:230::-;43268:34;43264:1;43256:6;43252:14;43245:58;43337:13;43332:2;43324:6;43320:15;43313:38;43234:124;:::o;43364:237::-;43504:34;43500:1;43492:6;43488:14;43481:58;43573:20;43568:2;43560:6;43556:15;43549:45;43470:131;:::o;43607:169::-;43747:21;43743:1;43735:6;43731:14;43724:45;43713:63;:::o;43782:225::-;43922:34;43918:1;43910:6;43906:14;43899:58;43991:8;43986:2;43978:6;43974:15;43967:33;43888:119;:::o;44013:178::-;44153:30;44149:1;44141:6;44137:14;44130:54;44119:72;:::o;44197:223::-;44337:34;44333:1;44325:6;44321:14;44314:58;44406:6;44401:2;44393:6;44389:15;44382:31;44303:117;:::o;44426:175::-;44566:27;44562:1;44554:6;44550:14;44543:51;44532:69;:::o;44607:231::-;44747:34;44743:1;44735:6;44731:14;44724:58;44816:14;44811:2;44803:6;44799:15;44792:39;44713:125;:::o;44844:177::-;44984:29;44980:1;44972:6;44968:14;44961:53;44950:71;:::o;45027:243::-;45167:34;45163:1;45155:6;45151:14;45144:58;45236:26;45231:2;45223:6;45219:15;45212:51;45133:137;:::o;45276:227::-;45416:34;45412:1;45404:6;45400:14;45393:58;45485:10;45480:2;45472:6;45468:15;45461:35;45382:121;:::o;45509:229::-;45649:34;45645:1;45637:6;45633:14;45626:58;45718:12;45713:2;45705:6;45701:15;45694:37;45615:123;:::o;45744:228::-;45884:34;45880:1;45872:6;45868:14;45861:58;45953:11;45948:2;45940:6;45936:15;45929:36;45850:122;:::o;45978:182::-;46118:34;46114:1;46106:6;46102:14;46095:58;46084:76;:::o;46166:244::-;46306:34;46302:1;46294:6;46290:14;46283:58;46375:27;46370:2;46362:6;46358:15;46351:52;46272:138;:::o;46416:231::-;46556:34;46552:1;46544:6;46540:14;46533:58;46625:14;46620:2;46612:6;46608:15;46601:39;46522:125;:::o;46653:182::-;46793:34;46789:1;46781:6;46777:14;46770:58;46759:76;:::o;46841:228::-;46981:34;46977:1;46969:6;46965:14;46958:58;47050:11;47045:2;47037:6;47033:15;47026:36;46947:122;:::o;47075:234::-;47215:34;47211:1;47203:6;47199:14;47192:58;47284:17;47279:2;47271:6;47267:15;47260:42;47181:128;:::o;47315:165::-;47455:17;47451:1;47443:6;47439:14;47432:41;47421:59;:::o;47486:220::-;47626:34;47622:1;47614:6;47610:14;47603:58;47695:3;47690:2;47682:6;47678:15;47671:28;47592:114;:::o;47712:172::-;47852:24;47848:1;47840:6;47836:14;47829:48;47818:66;:::o;47890:175::-;48030:27;48026:1;48018:6;48014:14;48007:51;47996:69;:::o;48071:236::-;48211:34;48207:1;48199:6;48195:14;48188:58;48280:19;48275:2;48267:6;48263:15;48256:44;48177:130;:::o;48313:231::-;48453:34;48449:1;48441:6;48437:14;48430:58;48522:14;48517:2;48509:6;48505:15;48498:39;48419:125;:::o;48550:226::-;48690:34;48686:1;48678:6;48674:14;48667:58;48759:9;48754:2;48746:6;48742:15;48735:34;48656:120;:::o;48782:122::-;48855:24;48873:5;48855:24;:::i;:::-;48848:5;48845:35;48835:2;;48894:1;48891;48884:12;48835:2;48825:79;:::o;48910:116::-;48980:21;48995:5;48980:21;:::i;:::-;48973:5;48970:32;48960:2;;49016:1;49013;49006:12;48960:2;48950:76;:::o;49032:120::-;49104:23;49121:5;49104:23;:::i;:::-;49097:5;49094:34;49084:2;;49142:1;49139;49132:12;49084:2;49074:78;:::o;49158:122::-;49231:24;49249:5;49231:24;:::i;:::-;49224:5;49221:35;49211:2;;49270:1;49267;49260:12;49211:2;49201:79;:::o
Swarm Source
ipfs://4625aaed91b4b2ecedc5db222ddc610da90fc6a9501c10e0bf2f419d7a6672bb
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.