ERC-721
Overview
Max Total Supply
1,139 JIGGY
Holders
560
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 JIGGYLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
JiggyContract
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-01-28 */ // SPDX-License-Identifier: MIT /* ______/\\\\\\\\\\\__/\\\\\\\\\\\_____/\\\\\\\\\\\\_____/\\\\\\\\\\\\__/\\\________/\\\_ _____\/////\\\///__\/////\\\///____/\\\//////////____/\\\//////////__\///\\\____/\\\/__ _________\/\\\_________\/\\\______/\\\______________/\\\_______________\///\\\/\\\/____ _________\/\\\_________\/\\\_____\/\\\____/\\\\\\\_\/\\\____/\\\\\\\_____\///\\\/______ _________\/\\\_________\/\\\_____\/\\\___\/////\\\_\/\\\___\/////\\\_______\/\\\_______ _________\/\\\_________\/\\\_____\/\\\_______\/\\\_\/\\\_______\/\\\_______\/\\\_______ __/\\\___\/\\\_________\/\\\_____\/\\\_______\/\\\_\/\\\_______\/\\\_______\/\\\_______ _\//\\\\\\\\\_______/\\\\\\\\\\\_\//\\\\\\\\\\\\/__\//\\\\\\\\\\\\/________\/\\\_______ __\/////////_______\///////////___\////////////_____\////////////__________\///________ */ pragma solidity ^0.8.0; 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); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } 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); } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } 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); } } 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); } 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; } 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); } 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); } abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } 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.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 {} } contract DateTime { /* * Date and Time utilities for ethereum contracts * */ struct _DateTime { uint16 year; uint8 month; uint8 day; uint8 hour; uint8 minute; uint8 second; uint8 weekday; } uint constant DAY_IN_SECONDS = 86400; uint constant YEAR_IN_SECONDS = 31536000; uint constant LEAP_YEAR_IN_SECONDS = 31622400; uint constant HOUR_IN_SECONDS = 3600; uint constant MINUTE_IN_SECONDS = 60; uint16 constant ORIGIN_YEAR = 1970; function isLeapYear(uint16 year) public pure returns (bool) { if (year % 4 != 0) { return false; } if (year % 100 != 0) { return true; } if (year % 400 != 0) { return false; } return true; } function toTimestamp(uint16 year, uint8 month, uint8 day, uint8 hour, uint8 minute, uint8 second) public pure returns (uint timestamp) { uint16 i; // Year for (i = ORIGIN_YEAR; i < year; i++) { if (isLeapYear(i)) { timestamp += LEAP_YEAR_IN_SECONDS; } else { timestamp += YEAR_IN_SECONDS; } } // Month uint8[12] memory monthDayCounts; monthDayCounts[0] = 31; if (isLeapYear(year)) { monthDayCounts[1] = 29; } else { monthDayCounts[1] = 28; } monthDayCounts[2] = 31; monthDayCounts[3] = 30; monthDayCounts[4] = 31; monthDayCounts[5] = 30; monthDayCounts[6] = 31; monthDayCounts[7] = 31; monthDayCounts[8] = 30; monthDayCounts[9] = 31; monthDayCounts[10] = 30; monthDayCounts[11] = 31; for (i = 1; i < month; i++) { timestamp += DAY_IN_SECONDS * monthDayCounts[i - 1]; } // Day timestamp += DAY_IN_SECONDS * (day - 1); // Hour timestamp += HOUR_IN_SECONDS * (hour); // Minute timestamp += MINUTE_IN_SECONDS * (minute); // Second timestamp += second; return timestamp; } } /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = keccak256(abi.encodePacked(computedHash, proofElement)); } else { // Hash(current element of the proof + current computed hash) computedHash = keccak256(abi.encodePacked(proofElement, computedHash)); } } // Check if the computed hash (root) is equal to the provided root return computedHash == root; } } contract JiggyContract is ERC721, Ownable, DateTime { using Strings for uint256; bool public paused = false; string public baseURI; string public baseExtension = ".json"; string public provenance = "5b148e4acb30bb01835052b6c9728318d5e808fd"; uint256 public cost = 0.077 ether; uint256 public maxSupply = 9444; uint256 public maxMintAmount = 2; uint256 public tokenId = 0; uint256 public initialTokenId = 0; bytes32 private _allowListRoot; mapping(address => uint256) public _mintbalances; _DateTime public mintDate; _DateTime public wMintDate; constructor( string memory _initBaseURI ) ERC721("JiggyVerse", "JIGGY") { setBaseURI(_initBaseURI); setWMintDate(2022, 1, 28, 22, 0); setMintDate(2022, 1, 29, 19, 0); } //public dates function mintable() public view returns (bool) { return !paused && block.timestamp >= toTimestamp(mintDate.year, mintDate.month, mintDate.day, mintDate.hour, mintDate.minute, mintDate.second); } function wMintable() public view returns (bool) { return !paused && block.timestamp >= toTimestamp(wMintDate.year, wMintDate.month, wMintDate.day, wMintDate.hour, wMintDate.minute, wMintDate.second); } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function mintInternal(address _to, uint256 _mintAmount) internal { require(!paused, "Jiggy: Jiggy contract is paused"); require(tokenId + _mintAmount <= maxSupply, "Jiggy: Remain jiggys is not enough"); for (uint256 i = 1; i <= _mintAmount; i++) { _safeMint(_to, tokenId + i); } tokenId += _mintAmount; } function _leaf(address account) internal pure returns (bytes32) { return keccak256(abi.encodePacked(account)); } function _verify(bytes32 _leafNode, bytes32[] memory proof) internal view returns (bool) { return MerkleProof.verify(proof, _allowListRoot, _leafNode); } // public function mint(uint16 _mintAmount) public payable { require(msg.value >= cost * _mintAmount, "Jiggy: Not enough ETH to mint"); require(_mintAmount <= maxMintAmount, string(abi.encodePacked("Jiggy: Can not mint more than ", maxMintAmount.toString(), " Jiggys"))); require(mintable(), "Jiggy: Public mint is not active yet"); mintInternal(msg.sender, _mintAmount); _mintbalances[msg.sender] += _mintAmount; require(_mintbalances[msg.sender] < 5, "Jiggy: User can only mint a maximum of 4 NFT"); } function mintByAllowList(uint16 _mintAmount, bytes32[] calldata proof) public payable { require(_verify(_leaf(msg.sender), proof), "Jiggy: Address is not on whitelist"); require(msg.value >= cost * _mintAmount, "Jiggy: Not enough ETH to mint"); require(_mintAmount <= maxMintAmount, string(abi.encodePacked("Jiggy: Can not mint more than ", maxMintAmount.toString(), " Jiggys"))); //you change in one minute require(wMintable(), "Jiggy: Presale mint is not active yet"); mintInternal(msg.sender, _mintAmount); _mintbalances[msg.sender] += _mintAmount; require(_mintbalances[msg.sender] < 3, "Jiggy: User can only mint a maximum of 2 NFT in whitelist"); } function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) { require( _exists(_tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory currentBaseURI = _baseURI(); uint256 finalTotenId = _tokenId; if (initialTokenId > 0) { finalTotenId = (_tokenId + initialTokenId - 1) % maxSupply + 1; } return bytes(currentBaseURI).length > 0 ? string( abi.encodePacked(currentBaseURI, finalTotenId.toString(), baseExtension) ) : ""; } function balance() public view returns (uint256) { return address(this).balance; } function burn(uint256 _tokenId) public { require(ownerOf(_tokenId) == msg.sender, "### Jiggy: You are not the owner of this nft."); _burn(_tokenId); } function totalSupply() public view returns (uint256) { return tokenId; } //only owner function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner { maxMintAmount = _newmaxMintAmount; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function setMaxSupply(uint256 _newMaxSupply) public onlyOwner { maxSupply = _newMaxSupply; } function pause(bool _state) public onlyOwner { paused = _state; } function withdraw() public payable onlyOwner { require(payable(msg.sender).send(address(this).balance)); } function mintOwner(uint256 _mintAmount) public onlyOwner { mintInternal(msg.sender, _mintAmount); } function setInitialTokenId() public onlyOwner { require(initialTokenId <= 0, "Starting index is already set"); initialTokenId = uint256(keccak256(abi.encodePacked(blockhash(block.number - 1), block.timestamp, msg.sender))) % maxSupply + 1; } function setMintDate(uint16 _year, uint8 _month, uint8 _day, uint8 _hour, uint8 _minute) public onlyOwner { mintDate.year = _year; mintDate.month = _month; mintDate.day = _day; mintDate.hour = _hour; mintDate.minute = _minute; mintDate.second = 0; } function setWMintDate(uint16 _year, uint8 _month, uint8 _day, uint8 _hour, uint8 _minute) public onlyOwner { wMintDate.year = _year; wMintDate.month = _month; wMintDate.day = _day; wMintDate.hour = _hour; wMintDate.minute = _minute; wMintDate.second = 0; } function setAllowListRoot(bytes32 _root) public onlyOwner { _allowListRoot = _root; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_initBaseURI","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":[{"internalType":"address","name":"","type":"address"}],"name":"_mintbalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialTokenId","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":"uint16","name":"year","type":"uint16"}],"name":"isLeapYear","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_mintAmount","type":"uint16"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_mintAmount","type":"uint16"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"mintByAllowList","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintDate","outputs":[{"internalType":"uint16","name":"year","type":"uint16"},{"internalType":"uint8","name":"month","type":"uint8"},{"internalType":"uint8","name":"day","type":"uint8"},{"internalType":"uint8","name":"hour","type":"uint8"},{"internalType":"uint8","name":"minute","type":"uint8"},{"internalType":"uint8","name":"second","type":"uint8"},{"internalType":"uint8","name":"weekday","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mintOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"provenance","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"bytes32","name":"_root","type":"bytes32"}],"name":"setAllowListRoot","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":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setInitialTokenId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMaxSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_year","type":"uint16"},{"internalType":"uint8","name":"_month","type":"uint8"},{"internalType":"uint8","name":"_day","type":"uint8"},{"internalType":"uint8","name":"_hour","type":"uint8"},{"internalType":"uint8","name":"_minute","type":"uint8"}],"name":"setMintDate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_year","type":"uint16"},{"internalType":"uint8","name":"_month","type":"uint8"},{"internalType":"uint8","name":"_day","type":"uint8"},{"internalType":"uint8","name":"_hour","type":"uint8"},{"internalType":"uint8","name":"_minute","type":"uint8"}],"name":"setWMintDate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","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":"uint16","name":"year","type":"uint16"},{"internalType":"uint8","name":"month","type":"uint8"},{"internalType":"uint8","name":"day","type":"uint8"},{"internalType":"uint8","name":"hour","type":"uint8"},{"internalType":"uint8","name":"minute","type":"uint8"},{"internalType":"uint8","name":"second","type":"uint8"}],"name":"toTimestamp","outputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tokenId","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":[],"name":"wMintDate","outputs":[{"internalType":"uint16","name":"year","type":"uint16"},{"internalType":"uint8","name":"month","type":"uint8"},{"internalType":"uint8","name":"day","type":"uint8"},{"internalType":"uint8","name":"hour","type":"uint8"},{"internalType":"uint8","name":"minute","type":"uint8"},{"internalType":"uint8","name":"second","type":"uint8"},{"internalType":"uint8","name":"weekday","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wMintable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60806040526000600660146101000a81548160ff0219169083151502179055506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600890805190602001906200006c9291906200063e565b506040518060600160405280602881526020016200645160289139600990805190602001906200009e9291906200063e565b506701118f178fb48000600a556124e4600b556002600c556000600d556000600e55348015620000cd57600080fd5b5060405162006479380380620064798339818101604052810190620000f391906200076c565b6040518060400160405280600a81526020017f4a696767795665727365000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f4a494747590000000000000000000000000000000000000000000000000000008152508160009080519060200190620001779291906200063e565b508060019080519060200190620001909291906200063e565b505050620001b3620001a76200020160201b60201c565b6200020960201b60201c565b620001c481620002cf60201b60201c565b620001df6107e66001601c601660006200037a60201b60201c565b620001fa6107e66001601d60136000620004c760201b60201c565b50620009c4565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002df6200020160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003056200061460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200035e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200035590620007e4565b60405180910390fd5b8060079080519060200190620003769291906200063e565b5050565b6200038a6200020160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003b06200061460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000409576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200040090620007e4565b60405180910390fd5b84601260000160006101000a81548161ffff021916908361ffff16021790555083601260000160026101000a81548160ff021916908360ff16021790555082601260000160036101000a81548160ff021916908360ff16021790555081601260000160046101000a81548160ff021916908360ff16021790555080601260000160056101000a81548160ff021916908360ff1602179055506000601260000160066101000a81548160ff021916908360ff1602179055505050505050565b620004d76200020160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620004fd6200061460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000556576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200054d90620007e4565b60405180910390fd5b84601160000160006101000a81548161ffff021916908361ffff16021790555083601160000160026101000a81548160ff021916908360ff16021790555082601160000160036101000a81548160ff021916908360ff16021790555081601160000160046101000a81548160ff021916908360ff16021790555080601160000160056101000a81548160ff021916908360ff1602179055506000601160000160066101000a81548160ff021916908360ff1602179055505050505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200064c90620008ac565b90600052602060002090601f016020900481019282620006705760008555620006bc565b82601f106200068b57805160ff1916838001178555620006bc565b82800160010185558215620006bc579182015b82811115620006bb5782518255916020019190600101906200069e565b5b509050620006cb9190620006cf565b5090565b5b80821115620006ea576000816000905550600101620006d0565b5090565b600062000705620006ff846200082f565b62000806565b9050828152602081018484840111156200072457620007236200097b565b5b6200073184828562000876565b509392505050565b600082601f83011262000751576200075062000976565b5b815162000763848260208601620006ee565b91505092915050565b60006020828403121562000785576200078462000985565b5b600082015167ffffffffffffffff811115620007a657620007a562000980565b5b620007b48482850162000739565b91505092915050565b6000620007cc60208362000865565b9150620007d9826200099b565b602082019050919050565b60006020820190508181036000830152620007ff81620007bd565b9050919050565b60006200081262000825565b9050620008208282620008e2565b919050565b6000604051905090565b600067ffffffffffffffff8211156200084d576200084c62000947565b5b62000858826200098a565b9050602081019050919050565b600082825260208201905092915050565b60005b838110156200089657808201518184015260208101905062000879565b83811115620008a6576000848401525b50505050565b60006002820490506001821680620008c557607f821691505b60208210811415620008dc57620008db62000918565b5b50919050565b620008ed826200098a565b810181811067ffffffffffffffff821117156200090f576200090e62000947565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b615a7d80620009d46000396000f3fe6080604052600436106102ae5760003560e01c80636352211e11610175578063b41ebad6116100dc578063c668286211610095578063d5abeb011161006f578063d5abeb0114610a59578063da3ef23f14610a84578063e985e9c514610aad578063f2fde38b14610aea576102ae565b8063c6682862146109c6578063c87b56dd146109f1578063d1d529d314610a2e576102ae565b8063b41ebad6146108cc578063b69ef8a814610909578063b71b857614610934578063b88d4fde1461094b578063b8d6e4d514610974578063bdeb7a851461099d576102ae565b80638da5cb5b1161012e5780638da5cb5b146107a25780639054bdec146107cd57806395d89b411461080a57806398fafb2e14610835578063a22cb46514610866578063a6f0e5771461088f576102ae565b80636352211e146106945780636c0360eb146106d15780636f8b44b0146106fc57806370a0823114610725578063715018a6146107625780637f00c7a614610779576102ae565b806323b872dd1161021957806342842e0e116101d257806342842e0e1461059a57806342966c68146105c357806344a0d68a146105ec5780634bf365df1461061557806355f804b3146106405780635c975abb14610669576102ae565b806323b872dd146104d557806323cf0a22146104fe57806324a176441461051a5780632bb457901461053657806333f88d22146105675780633ccfd60b14610590576102ae565b80630f7309e81161026b5780630f7309e8146103d357806313faede6146103fe57806317d70f7c1461042957806318160ddd14610454578063191657541461047f578063239c70ae146104aa576102ae565b806301ffc9a7146102b357806302329a29146102f0578063030c29711461031957806306fdde0314610342578063081812fc1461036d578063095ea7b3146103aa575b600080fd5b3480156102bf57600080fd5b506102da60048036038101906102d59190613f4e565b610b13565b6040516102e79190614882565b60405180910390f35b3480156102fc57600080fd5b5061031760048036038101906103129190613ef4565b610bf5565b005b34801561032557600080fd5b50610340600480360381019061033b919061407e565b610c8e565b005b34801561034e57600080fd5b50610357610dc8565b604051610364919061489d565b60405180910390f35b34801561037957600080fd5b50610394600480360381019061038f9190614186565b610e5a565b6040516103a1919061481b565b60405180910390f35b3480156103b657600080fd5b506103d160048036038101906103cc9190613eb4565b610edf565b005b3480156103df57600080fd5b506103e8610ff7565b6040516103f5919061489d565b60405180910390f35b34801561040a57600080fd5b50610413611085565b6040516104209190614c6e565b60405180910390f35b34801561043557600080fd5b5061043e61108b565b60405161044b9190614c6e565b60405180910390f35b34801561046057600080fd5b50610469611091565b6040516104769190614c6e565b60405180910390f35b34801561048b57600080fd5b5061049461109b565b6040516104a19190614c6e565b60405180910390f35b3480156104b657600080fd5b506104bf6110a1565b6040516104cc9190614c6e565b60405180910390f35b3480156104e157600080fd5b506104fc60048036038101906104f79190613d9e565b6110a7565b005b61051860048036038101906105139190613ff1565b611107565b005b610534600480360381019061052f919061401e565b611305565b005b34801561054257600080fd5b5061054b611597565b60405161055e9796959493929190614bff565b60405180910390f35b34801561057357600080fd5b5061058e60048036038101906105899190614186565b611623565b005b6105986116ac565b005b3480156105a657600080fd5b506105c160048036038101906105bc9190613d9e565b611768565b005b3480156105cf57600080fd5b506105ea60048036038101906105e59190614186565b611788565b005b3480156105f857600080fd5b50610613600480360381019061060e9190614186565b61180a565b005b34801561062157600080fd5b5061062a611890565b6040516106379190614882565b60405180910390f35b34801561064c57600080fd5b5061066760048036038101906106629190613fa8565b61192e565b005b34801561067557600080fd5b5061067e6119c4565b60405161068b9190614882565b60405180910390f35b3480156106a057600080fd5b506106bb60048036038101906106b69190614186565b6119d7565b6040516106c8919061481b565b60405180910390f35b3480156106dd57600080fd5b506106e6611a89565b6040516106f3919061489d565b60405180910390f35b34801561070857600080fd5b50610723600480360381019061071e9190614186565b611b17565b005b34801561073157600080fd5b5061074c60048036038101906107479190613d31565b611b9d565b6040516107599190614c6e565b60405180910390f35b34801561076e57600080fd5b50610777611c55565b005b34801561078557600080fd5b506107a0600480360381019061079b9190614186565b611cdd565b005b3480156107ae57600080fd5b506107b7611d63565b6040516107c4919061481b565b60405180910390f35b3480156107d957600080fd5b506107f460048036038101906107ef91906140f9565b611d8d565b6040516108019190614c6e565b60405180910390f35b34801561081657600080fd5b5061081f6120f8565b60405161082c919061489d565b60405180910390f35b34801561084157600080fd5b5061084a61218a565b60405161085d9796959493929190614bff565b60405180910390f35b34801561087257600080fd5b5061088d60048036038101906108889190613e74565b612216565b005b34801561089b57600080fd5b506108b660048036038101906108b19190613ff1565b612397565b6040516108c39190614882565b60405180910390f35b3480156108d857600080fd5b506108f360048036038101906108ee9190613d31565b612406565b6040516109009190614c6e565b60405180910390f35b34801561091557600080fd5b5061091e61241e565b60405161092b9190614c6e565b60405180910390f35b34801561094057600080fd5b50610949612426565b005b34801561095757600080fd5b50610972600480360381019061096d9190613df1565b612544565b005b34801561098057600080fd5b5061099b6004803603810190610996919061407e565b6125a6565b005b3480156109a957600080fd5b506109c460048036038101906109bf9190613f21565b6126e0565b005b3480156109d257600080fd5b506109db612766565b6040516109e8919061489d565b60405180910390f35b3480156109fd57600080fd5b50610a186004803603810190610a139190614186565b6127f4565b604051610a25919061489d565b60405180910390f35b348015610a3a57600080fd5b50610a436128e5565b604051610a509190614882565b60405180910390f35b348015610a6557600080fd5b50610a6e612983565b604051610a7b9190614c6e565b60405180910390f35b348015610a9057600080fd5b50610aab6004803603810190610aa69190613fa8565b612989565b005b348015610ab957600080fd5b50610ad46004803603810190610acf9190613d5e565b612a1f565b604051610ae19190614882565b60405180910390f35b348015610af657600080fd5b50610b116004803603810190610b0c9190613d31565b612ab3565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610bde57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bee5750610bed82612bab565b5b9050919050565b610bfd612c15565b73ffffffffffffffffffffffffffffffffffffffff16610c1b611d63565b73ffffffffffffffffffffffffffffffffffffffff1614610c71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6890614b1f565b60405180910390fd5b80600660146101000a81548160ff02191690831515021790555050565b610c96612c15565b73ffffffffffffffffffffffffffffffffffffffff16610cb4611d63565b73ffffffffffffffffffffffffffffffffffffffff1614610d0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0190614b1f565b60405180910390fd5b84601260000160006101000a81548161ffff021916908361ffff16021790555083601260000160026101000a81548160ff021916908360ff16021790555082601260000160036101000a81548160ff021916908360ff16021790555081601260000160046101000a81548160ff021916908360ff16021790555080601260000160056101000a81548160ff021916908360ff1602179055506000601260000160066101000a81548160ff021916908360ff1602179055505050505050565b606060008054610dd790614fc0565b80601f0160208091040260200160405190810160405280929190818152602001828054610e0390614fc0565b8015610e505780601f10610e2557610100808354040283529160200191610e50565b820191906000526020600020905b815481529060010190602001808311610e3357829003601f168201915b5050505050905090565b6000610e6582612c1d565b610ea4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9b90614abf565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610eea826119d7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5290614b7f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610f7a612c15565b73ffffffffffffffffffffffffffffffffffffffff161480610fa95750610fa881610fa3612c15565b612a1f565b5b610fe8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdf90614a3f565b60405180910390fd5b610ff28383612c89565b505050565b6009805461100490614fc0565b80601f016020809104026020016040519081016040528092919081815260200182805461103090614fc0565b801561107d5780601f106110525761010080835404028352916020019161107d565b820191906000526020600020905b81548152906001019060200180831161106057829003601f168201915b505050505081565b600a5481565b600d5481565b6000600d54905090565b600e5481565b600c5481565b6110b86110b2612c15565b82612d42565b6110f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ee90614b9f565b60405180910390fd5b611102838383612e20565b505050565b8061ffff16600a546111199190614def565b34101561115b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115290614bdf565b60405180910390fd5b600c548161ffff161115611170600c5461307c565b60405160200161118091906147ee565b604051602081830303815290604052906111d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c7919061489d565b60405180910390fd5b506111d9611890565b611218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120f9061493f565b60405180910390fd5b611226338261ffff166131dd565b8061ffff16601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112799190614d68565b925050819055506005601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611302576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f990614adf565b60405180910390fd5b50565b611358611311336132d5565b838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050613305565b611397576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138e906148bf565b60405180910390fd5b8261ffff16600a546113a99190614def565b3410156113eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e290614bdf565b60405180910390fd5b600c548361ffff161115611400600c5461307c565b60405160200161141091906147ee565b60405160208183030381529060405290611460576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611457919061489d565b60405180910390fd5b506114696128e5565b6114a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149f90614bbf565b60405180910390fd5b6114b6338461ffff166131dd565b8261ffff16601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115099190614d68565b925050819055506003601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611592576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158990614aff565b60405180910390fd5b505050565b60128060000160009054906101000a900461ffff16908060000160029054906101000a900460ff16908060000160039054906101000a900460ff16908060000160049054906101000a900460ff16908060000160059054906101000a900460ff16908060000160069054906101000a900460ff16908060000160079054906101000a900460ff16905087565b61162b612c15565b73ffffffffffffffffffffffffffffffffffffffff16611649611d63565b73ffffffffffffffffffffffffffffffffffffffff161461169f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169690614b1f565b60405180910390fd5b6116a933826131dd565b50565b6116b4612c15565b73ffffffffffffffffffffffffffffffffffffffff166116d2611d63565b73ffffffffffffffffffffffffffffffffffffffff1614611728576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171f90614b1f565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505061176657600080fd5b565b61178383838360405180602001604052806000815250612544565b505050565b3373ffffffffffffffffffffffffffffffffffffffff166117a8826119d7565b73ffffffffffffffffffffffffffffffffffffffff16146117fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f59061499f565b60405180910390fd5b6118078161331c565b50565b611812612c15565b73ffffffffffffffffffffffffffffffffffffffff16611830611d63565b73ffffffffffffffffffffffffffffffffffffffff1614611886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187d90614b1f565b60405180910390fd5b80600a8190555050565b6000600660149054906101000a900460ff161580156119295750611925601160000160009054906101000a900461ffff16601160000160029054906101000a900460ff16601160000160039054906101000a900460ff16601160000160049054906101000a900460ff16601160000160059054906101000a900460ff16601160000160069054906101000a900460ff16611d8d565b4210155b905090565b611936612c15565b73ffffffffffffffffffffffffffffffffffffffff16611954611d63565b73ffffffffffffffffffffffffffffffffffffffff16146119aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a190614b1f565b60405180910390fd5b80600790805190602001906119c0929190613a8d565b5050565b600660149054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7790614a7f565b60405180910390fd5b80915050919050565b60078054611a9690614fc0565b80601f0160208091040260200160405190810160405280929190818152602001828054611ac290614fc0565b8015611b0f5780601f10611ae457610100808354040283529160200191611b0f565b820191906000526020600020905b815481529060010190602001808311611af257829003601f168201915b505050505081565b611b1f612c15565b73ffffffffffffffffffffffffffffffffffffffff16611b3d611d63565b73ffffffffffffffffffffffffffffffffffffffff1614611b93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8a90614b1f565b60405180910390fd5b80600b8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0590614a5f565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611c5d612c15565b73ffffffffffffffffffffffffffffffffffffffff16611c7b611d63565b73ffffffffffffffffffffffffffffffffffffffff1614611cd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc890614b1f565b60405180910390fd5b611cdb600061342d565b565b611ce5612c15565b73ffffffffffffffffffffffffffffffffffffffff16611d03611d63565b73ffffffffffffffffffffffffffffffffffffffff1614611d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5090614b1f565b60405180910390fd5b80600c8190555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000806107b290505b8761ffff168161ffff161015611df157611daf81612397565b15611dcb576301e2850082611dc49190614d68565b9150611dde565b6301e1338082611ddb9190614d68565b91505b8080611de990615023565b915050611d96565b611df9613b13565b601f816000600c8110611e0f57611e0e6151be565b5b602002019060ff16908160ff1681525050611e2989612397565b15611e5a57601d816001600c8110611e4457611e436151be565b5b602002019060ff16908160ff1681525050611e82565b601c816001600c8110611e7057611e6f6151be565b5b602002019060ff16908160ff16815250505b601f816002600c8110611e9857611e976151be565b5b602002019060ff16908160ff1681525050601e816003600c8110611ebf57611ebe6151be565b5b602002019060ff16908160ff1681525050601f816004600c8110611ee657611ee56151be565b5b602002019060ff16908160ff1681525050601e816005600c8110611f0d57611f0c6151be565b5b602002019060ff16908160ff1681525050601f816006600c8110611f3457611f336151be565b5b602002019060ff16908160ff1681525050601f816007600c8110611f5b57611f5a6151be565b5b602002019060ff16908160ff1681525050601e816008600c8110611f8257611f816151be565b5b602002019060ff16908160ff1681525050601f816009600c8110611fa957611fa86151be565b5b602002019060ff16908160ff1681525050601e81600a600c8110611fd057611fcf6151be565b5b602002019060ff16908160ff1681525050601f81600b600c8110611ff757611ff66151be565b5b602002019060ff16908160ff1681525050600191505b8760ff168261ffff161015612075578060018361202a9190614e49565b61ffff16600c811061203f5761203e6151be565b5b602002015160ff16620151806120559190614def565b836120609190614d68565b9250818061206d90615023565b92505061200d565b6001876120829190614eb1565b60ff16620151806120939190614def565b8361209e9190614d68565b92508560ff16610e106120b19190614def565b836120bc9190614d68565b92508460ff16603c6120ce9190614def565b836120d99190614d68565b92508360ff16836120ea9190614d68565b925050509695505050505050565b60606001805461210790614fc0565b80601f016020809104026020016040519081016040528092919081815260200182805461213390614fc0565b80156121805780601f1061215557610100808354040283529160200191612180565b820191906000526020600020905b81548152906001019060200180831161216357829003601f168201915b5050505050905090565b60118060000160009054906101000a900461ffff16908060000160029054906101000a900460ff16908060000160039054906101000a900460ff16908060000160049054906101000a900460ff16908060000160059054906101000a900460ff16908060000160069054906101000a900460ff16908060000160079054906101000a900460ff16905087565b61221e612c15565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561228c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612283906149bf565b60405180910390fd5b8060056000612299612c15565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16612346612c15565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161238b9190614882565b60405180910390a35050565b6000806004836123a791906150cf565b61ffff16146123b95760009050612401565b60006064836123c891906150cf565b61ffff16146123da5760019050612401565b6000610190836123ea91906150cf565b61ffff16146123fc5760009050612401565b600190505b919050565b60106020528060005260406000206000915090505481565b600047905090565b61242e612c15565b73ffffffffffffffffffffffffffffffffffffffff1661244c611d63565b73ffffffffffffffffffffffffffffffffffffffff16146124a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249990614b1f565b60405180910390fd5b6000600e5411156124e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124df90614a1f565b60405180910390fd5b6001600b546001436124fa9190614e7d565b40423360405160200161250f93929190614780565b6040516020818303038152906040528051906020012060001c6125329190615100565b61253c9190614d68565b600e81905550565b61255561254f612c15565b83612d42565b612594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258b90614b9f565b60405180910390fd5b6125a0848484846134f3565b50505050565b6125ae612c15565b73ffffffffffffffffffffffffffffffffffffffff166125cc611d63565b73ffffffffffffffffffffffffffffffffffffffff1614612622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261990614b1f565b60405180910390fd5b84601160000160006101000a81548161ffff021916908361ffff16021790555083601160000160026101000a81548160ff021916908360ff16021790555082601160000160036101000a81548160ff021916908360ff16021790555081601160000160046101000a81548160ff021916908360ff16021790555080601160000160056101000a81548160ff021916908360ff1602179055506000601160000160066101000a81548160ff021916908360ff1602179055505050505050565b6126e8612c15565b73ffffffffffffffffffffffffffffffffffffffff16612706611d63565b73ffffffffffffffffffffffffffffffffffffffff161461275c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275390614b1f565b60405180910390fd5b80600f8190555050565b6008805461277390614fc0565b80601f016020809104026020016040519081016040528092919081815260200182805461279f90614fc0565b80156127ec5780601f106127c1576101008083540402835291602001916127ec565b820191906000526020600020905b8154815290600101906020018083116127cf57829003601f168201915b505050505081565b60606127ff82612c1d565b61283e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283590614b5f565b60405180910390fd5b600061284861354f565b905060008390506000600e541115612890576001600b546001600e548761286f9190614d68565b6128799190614e7d565b6128839190615100565b61288d9190614d68565b90505b60008251116128ae57604051806020016040528060008152506128dc565b816128b88261307c565b60086040516020016128cc939291906147bd565b6040516020818303038152906040525b92505050919050565b6000600660149054906101000a900460ff1615801561297e575061297a601260000160009054906101000a900461ffff16601260000160029054906101000a900460ff16601260000160039054906101000a900460ff16601260000160049054906101000a900460ff16601260000160059054906101000a900460ff16601260000160069054906101000a900460ff16611d8d565b4210155b905090565b600b5481565b612991612c15565b73ffffffffffffffffffffffffffffffffffffffff166129af611d63565b73ffffffffffffffffffffffffffffffffffffffff1614612a05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fc90614b1f565b60405180910390fd5b8060089080519060200190612a1b929190613a8d565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612abb612c15565b73ffffffffffffffffffffffffffffffffffffffff16612ad9611d63565b73ffffffffffffffffffffffffffffffffffffffff1614612b2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2690614b1f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612b9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b96906148ff565b60405180910390fd5b612ba88161342d565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612cfc836119d7565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612d4d82612c1d565b612d8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d83906149ff565b60405180910390fd5b6000612d97836119d7565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612e0657508373ffffffffffffffffffffffffffffffffffffffff16612dee84610e5a565b73ffffffffffffffffffffffffffffffffffffffff16145b80612e175750612e168185612a1f565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612e40826119d7565b73ffffffffffffffffffffffffffffffffffffffff1614612e96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8d90614b3f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612efd9061497f565b60405180910390fd5b612f118383836135e1565b612f1c600082612c89565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f6c9190614e7d565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612fc39190614d68565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b606060008214156130c4576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506131d8565b600082905060005b600082146130f65780806130df9061504e565b915050600a826130ef9190614dbe565b91506130cc565b60008167ffffffffffffffff811115613112576131116151ed565b5b6040519080825280601f01601f1916602001820160405280156131445781602001600182028036833780820191505090505b5090505b600085146131d15760018261315d9190614e7d565b9150600a8561316c9190615100565b60306131789190614d68565b60f81b81838151811061318e5761318d6151be565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856131ca9190614dbe565b9450613148565b8093505050505b919050565b600660149054906101000a900460ff161561322d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613224906149df565b60405180910390fd5b600b5481600d5461323e9190614d68565b111561327f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132769061495f565b60405180910390fd5b6000600190505b8181116132b7576132a48382600d5461329f9190614d68565b6135e6565b80806132af9061504e565b915050613286565b5080600d60008282546132ca9190614d68565b925050819055505050565b6000816040516020016132e89190614739565b604051602081830303815290604052805190602001209050919050565b600061331482600f5485613604565b905092915050565b6000613327826119d7565b9050613335816000846135e1565b613340600083612c89565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133909190614e7d565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6134fe848484612e20565b61350a848484846136ba565b613549576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613540906148df565b60405180910390fd5b50505050565b60606007805461355e90614fc0565b80601f016020809104026020016040519081016040528092919081815260200182805461358a90614fc0565b80156135d75780601f106135ac576101008083540402835291602001916135d7565b820191906000526020600020905b8154815290600101906020018083116135ba57829003601f168201915b5050505050905090565b505050565b613600828260405180602001604052806000815250613851565b5050565b60008082905060005b85518110156136ac57600086828151811061362b5761362a6151be565b5b6020026020010151905080831161366c57828160405160200161364f929190614754565b604051602081830303815290604052805190602001209250613698565b808360405160200161367f929190614754565b6040516020818303038152906040528051906020012092505b5080806136a49061504e565b91505061360d565b508381149150509392505050565b60006136db8473ffffffffffffffffffffffffffffffffffffffff166138ac565b15613844578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613704612c15565b8786866040518563ffffffff1660e01b81526004016137269493929190614836565b602060405180830381600087803b15801561374057600080fd5b505af192505050801561377157506040513d601f19601f8201168201806040525081019061376e9190613f7b565b60015b6137f4573d80600081146137a1576040519150601f19603f3d011682016040523d82523d6000602084013e6137a6565b606091505b506000815114156137ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137e3906148df565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613849565b600190505b949350505050565b61385b83836138bf565b61386860008484846136ba565b6138a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161389e906148df565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561392f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161392690614a9f565b60405180910390fd5b61393881612c1d565b15613978576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161396f9061491f565b60405180910390fd5b613984600083836135e1565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546139d49190614d68565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054613a9990614fc0565b90600052602060002090601f016020900481019282613abb5760008555613b02565b82601f10613ad457805160ff1916838001178555613b02565b82800160010185558215613b02579182015b82811115613b01578251825591602001919060010190613ae6565b5b509050613b0f9190613b36565b5090565b604051806101800160405280600c90602082028036833780820191505090505090565b5b80821115613b4f576000816000905550600101613b37565b5090565b6000613b66613b6184614cae565b614c89565b905082815260208101848484011115613b8257613b8161522b565b5b613b8d848285614f7e565b509392505050565b6000613ba8613ba384614cdf565b614c89565b905082815260208101848484011115613bc457613bc361522b565b5b613bcf848285614f7e565b509392505050565b600081359050613be6816159a6565b92915050565b60008083601f840112613c0257613c01615221565b5b8235905067ffffffffffffffff811115613c1f57613c1e61521c565b5b602083019150836020820283011115613c3b57613c3a615226565b5b9250929050565b600081359050613c51816159bd565b92915050565b600081359050613c66816159d4565b92915050565b600081359050613c7b816159eb565b92915050565b600081519050613c90816159eb565b92915050565b600082601f830112613cab57613caa615221565b5b8135613cbb848260208601613b53565b91505092915050565b600082601f830112613cd957613cd8615221565b5b8135613ce9848260208601613b95565b91505092915050565b600081359050613d0181615a02565b92915050565b600081359050613d1681615a19565b92915050565b600081359050613d2b81615a30565b92915050565b600060208284031215613d4757613d46615235565b5b6000613d5584828501613bd7565b91505092915050565b60008060408385031215613d7557613d74615235565b5b6000613d8385828601613bd7565b9250506020613d9485828601613bd7565b9150509250929050565b600080600060608486031215613db757613db6615235565b5b6000613dc586828701613bd7565b9350506020613dd686828701613bd7565b9250506040613de786828701613d07565b9150509250925092565b60008060008060808587031215613e0b57613e0a615235565b5b6000613e1987828801613bd7565b9450506020613e2a87828801613bd7565b9350506040613e3b87828801613d07565b925050606085013567ffffffffffffffff811115613e5c57613e5b615230565b5b613e6887828801613c96565b91505092959194509250565b60008060408385031215613e8b57613e8a615235565b5b6000613e9985828601613bd7565b9250506020613eaa85828601613c42565b9150509250929050565b60008060408385031215613ecb57613eca615235565b5b6000613ed985828601613bd7565b9250506020613eea85828601613d07565b9150509250929050565b600060208284031215613f0a57613f09615235565b5b6000613f1884828501613c42565b91505092915050565b600060208284031215613f3757613f36615235565b5b6000613f4584828501613c57565b91505092915050565b600060208284031215613f6457613f63615235565b5b6000613f7284828501613c6c565b91505092915050565b600060208284031215613f9157613f90615235565b5b6000613f9f84828501613c81565b91505092915050565b600060208284031215613fbe57613fbd615235565b5b600082013567ffffffffffffffff811115613fdc57613fdb615230565b5b613fe884828501613cc4565b91505092915050565b60006020828403121561400757614006615235565b5b600061401584828501613cf2565b91505092915050565b60008060006040848603121561403757614036615235565b5b600061404586828701613cf2565b935050602084013567ffffffffffffffff81111561406657614065615230565b5b61407286828701613bec565b92509250509250925092565b600080600080600060a0868803121561409a57614099615235565b5b60006140a888828901613cf2565b95505060206140b988828901613d1c565b94505060406140ca88828901613d1c565b93505060606140db88828901613d1c565b92505060806140ec88828901613d1c565b9150509295509295909350565b60008060008060008060c0878903121561411657614115615235565b5b600061412489828a01613cf2565b965050602061413589828a01613d1c565b955050604061414689828a01613d1c565b945050606061415789828a01613d1c565b935050608061416889828a01613d1c565b92505060a061417989828a01613d1c565b9150509295509295509295565b60006020828403121561419c5761419b615235565b5b60006141aa84828501613d07565b91505092915050565b6141bc81614ee5565b82525050565b6141d36141ce82614ee5565b615097565b82525050565b6141e281614ef7565b82525050565b6141f96141f482614f03565b6150a9565b82525050565b600061420a82614d25565b6142148185614d3b565b9350614224818560208601614f8d565b61422d8161523a565b840191505092915050565b600061424382614d30565b61424d8185614d4c565b935061425d818560208601614f8d565b6142668161523a565b840191505092915050565b600061427c82614d30565b6142868185614d5d565b9350614296818560208601614f8d565b80840191505092915050565b600081546142af81614fc0565b6142b98186614d5d565b945060018216600081146142d457600181146142e557614318565b60ff19831686528186019350614318565b6142ee85614d10565b60005b83811015614310578154818901526001820191506020810190506142f1565b838801955050505b50505092915050565b600061432e602283614d4c565b915061433982615258565b604082019050919050565b6000614351603283614d4c565b915061435c826152a7565b604082019050919050565b6000614374602683614d4c565b915061437f826152f6565b604082019050919050565b6000614397601c83614d4c565b91506143a282615345565b602082019050919050565b60006143ba602483614d4c565b91506143c58261536e565b604082019050919050565b60006143dd602283614d4c565b91506143e8826153bd565b604082019050919050565b6000614400602483614d4c565b915061440b8261540c565b604082019050919050565b6000614423602d83614d4c565b915061442e8261545b565b604082019050919050565b6000614446601983614d4c565b9150614451826154aa565b602082019050919050565b6000614469601f83614d4c565b9150614474826154d3565b602082019050919050565b600061448c602c83614d4c565b9150614497826154fc565b604082019050919050565b60006144af601d83614d4c565b91506144ba8261554b565b602082019050919050565b60006144d2603883614d4c565b91506144dd82615574565b604082019050919050565b60006144f5602a83614d4c565b9150614500826155c3565b604082019050919050565b6000614518602983614d4c565b915061452382615612565b604082019050919050565b600061453b600783614d5d565b915061454682615661565b600782019050919050565b600061455e602083614d4c565b91506145698261568a565b602082019050919050565b6000614581602c83614d4c565b915061458c826156b3565b604082019050919050565b60006145a4602c83614d4c565b91506145af82615702565b604082019050919050565b60006145c7603983614d4c565b91506145d282615751565b604082019050919050565b60006145ea602083614d4c565b91506145f5826157a0565b602082019050919050565b600061460d602983614d4c565b9150614618826157c9565b604082019050919050565b6000614630602f83614d4c565b915061463b82615818565b604082019050919050565b6000614653602183614d4c565b915061465e82615867565b604082019050919050565b6000614676601e83614d5d565b9150614681826158b6565b601e82019050919050565b6000614699603183614d4c565b91506146a4826158df565b604082019050919050565b60006146bc602583614d4c565b91506146c78261592e565b604082019050919050565b60006146df601d83614d4c565b91506146ea8261597d565b602082019050919050565b6146fe81614f39565b82525050565b61470d81614f67565b82525050565b61472461471f82614f67565b6150c5565b82525050565b61473381614f71565b82525050565b600061474582846141c2565b60148201915081905092915050565b600061476082856141e8565b60208201915061477082846141e8565b6020820191508190509392505050565b600061478c82866141e8565b60208201915061479c8285614713565b6020820191506147ac82846141c2565b601482019150819050949350505050565b60006147c98286614271565b91506147d58285614271565b91506147e182846142a2565b9150819050949350505050565b60006147f982614669565b91506148058284614271565b91506148108261452e565b915081905092915050565b600060208201905061483060008301846141b3565b92915050565b600060808201905061484b60008301876141b3565b61485860208301866141b3565b6148656040830185614704565b818103606083015261487781846141ff565b905095945050505050565b600060208201905061489760008301846141d9565b92915050565b600060208201905081810360008301526148b78184614238565b905092915050565b600060208201905081810360008301526148d881614321565b9050919050565b600060208201905081810360008301526148f881614344565b9050919050565b6000602082019050818103600083015261491881614367565b9050919050565b600060208201905081810360008301526149388161438a565b9050919050565b60006020820190508181036000830152614958816143ad565b9050919050565b60006020820190508181036000830152614978816143d0565b9050919050565b60006020820190508181036000830152614998816143f3565b9050919050565b600060208201905081810360008301526149b881614416565b9050919050565b600060208201905081810360008301526149d881614439565b9050919050565b600060208201905081810360008301526149f88161445c565b9050919050565b60006020820190508181036000830152614a188161447f565b9050919050565b60006020820190508181036000830152614a38816144a2565b9050919050565b60006020820190508181036000830152614a58816144c5565b9050919050565b60006020820190508181036000830152614a78816144e8565b9050919050565b60006020820190508181036000830152614a988161450b565b9050919050565b60006020820190508181036000830152614ab881614551565b9050919050565b60006020820190508181036000830152614ad881614574565b9050919050565b60006020820190508181036000830152614af881614597565b9050919050565b60006020820190508181036000830152614b18816145ba565b9050919050565b60006020820190508181036000830152614b38816145dd565b9050919050565b60006020820190508181036000830152614b5881614600565b9050919050565b60006020820190508181036000830152614b7881614623565b9050919050565b60006020820190508181036000830152614b9881614646565b9050919050565b60006020820190508181036000830152614bb88161468c565b9050919050565b60006020820190508181036000830152614bd8816146af565b9050919050565b60006020820190508181036000830152614bf8816146d2565b9050919050565b600060e082019050614c14600083018a6146f5565b614c21602083018961472a565b614c2e604083018861472a565b614c3b606083018761472a565b614c48608083018661472a565b614c5560a083018561472a565b614c6260c083018461472a565b98975050505050505050565b6000602082019050614c836000830184614704565b92915050565b6000614c93614ca4565b9050614c9f8282614ff2565b919050565b6000604051905090565b600067ffffffffffffffff821115614cc957614cc86151ed565b5b614cd28261523a565b9050602081019050919050565b600067ffffffffffffffff821115614cfa57614cf96151ed565b5b614d038261523a565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614d7382614f67565b9150614d7e83614f67565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614db357614db2615131565b5b828201905092915050565b6000614dc982614f67565b9150614dd483614f67565b925082614de457614de3615160565b5b828204905092915050565b6000614dfa82614f67565b9150614e0583614f67565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614e3e57614e3d615131565b5b828202905092915050565b6000614e5482614f39565b9150614e5f83614f39565b925082821015614e7257614e71615131565b5b828203905092915050565b6000614e8882614f67565b9150614e9383614f67565b925082821015614ea657614ea5615131565b5b828203905092915050565b6000614ebc82614f71565b9150614ec783614f71565b925082821015614eda57614ed9615131565b5b828203905092915050565b6000614ef082614f47565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015614fab578082015181840152602081019050614f90565b83811115614fba576000848401525b50505050565b60006002820490506001821680614fd857607f821691505b60208210811415614fec57614feb61518f565b5b50919050565b614ffb8261523a565b810181811067ffffffffffffffff8211171561501a576150196151ed565b5b80604052505050565b600061502e82614f39565b915061ffff82141561504357615042615131565b5b600182019050919050565b600061505982614f67565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561508c5761508b615131565b5b600182019050919050565b60006150a2826150b3565b9050919050565b6000819050919050565b60006150be8261524b565b9050919050565b6000819050919050565b60006150da82614f39565b91506150e583614f39565b9250826150f5576150f4615160565b5b828206905092915050565b600061510b82614f67565b915061511683614f67565b92508261512657615125615160565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4a696767793a2041646472657373206973206e6f74206f6e2077686974656c6960008201527f7374000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4a696767793a205075626c6963206d696e74206973206e6f742061637469766560008201527f2079657400000000000000000000000000000000000000000000000000000000602082015250565b7f4a696767793a2052656d61696e206a6967677973206973206e6f7420656e6f7560008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f232323204a696767793a20596f7520617265206e6f7420746865206f776e657260008201527f206f662074686973206e66742e00000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4a696767793a204a6967677920636f6e74726163742069732070617573656400600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5374617274696e6720696e64657820697320616c726561647920736574000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f204a696767797300000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4a696767793a20557365722063616e206f6e6c79206d696e742061206d61786960008201527f6d756d206f662034204e46540000000000000000000000000000000000000000602082015250565b7f4a696767793a20557365722063616e206f6e6c79206d696e742061206d61786960008201527f6d756d206f662032204e465420696e2077686974656c69737400000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4a696767793a2043616e206e6f74206d696e74206d6f7265207468616e200000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4a696767793a2050726573616c65206d696e74206973206e6f7420616374697660008201527f6520796574000000000000000000000000000000000000000000000000000000602082015250565b7f4a696767793a204e6f7420656e6f7567682045544820746f206d696e74000000600082015250565b6159af81614ee5565b81146159ba57600080fd5b50565b6159c681614ef7565b81146159d157600080fd5b50565b6159dd81614f03565b81146159e857600080fd5b50565b6159f481614f0d565b81146159ff57600080fd5b50565b615a0b81614f39565b8114615a1657600080fd5b50565b615a2281614f67565b8114615a2d57600080fd5b50565b615a3981614f71565b8114615a4457600080fd5b5056fea2646970667358221220cbf521fd7ee9f3145a6bb59ea620c6d561f7a0f0c63e267e757fc66b4f913aea64736f6c63430008070033356231343865346163623330626230313833353035326236633937323833313864356538303866640000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002b68747470733a2f2f7468656a69676779732e636f6d2f6170692f6a696767792d72657665616c2d696d672f000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102ae5760003560e01c80636352211e11610175578063b41ebad6116100dc578063c668286211610095578063d5abeb011161006f578063d5abeb0114610a59578063da3ef23f14610a84578063e985e9c514610aad578063f2fde38b14610aea576102ae565b8063c6682862146109c6578063c87b56dd146109f1578063d1d529d314610a2e576102ae565b8063b41ebad6146108cc578063b69ef8a814610909578063b71b857614610934578063b88d4fde1461094b578063b8d6e4d514610974578063bdeb7a851461099d576102ae565b80638da5cb5b1161012e5780638da5cb5b146107a25780639054bdec146107cd57806395d89b411461080a57806398fafb2e14610835578063a22cb46514610866578063a6f0e5771461088f576102ae565b80636352211e146106945780636c0360eb146106d15780636f8b44b0146106fc57806370a0823114610725578063715018a6146107625780637f00c7a614610779576102ae565b806323b872dd1161021957806342842e0e116101d257806342842e0e1461059a57806342966c68146105c357806344a0d68a146105ec5780634bf365df1461061557806355f804b3146106405780635c975abb14610669576102ae565b806323b872dd146104d557806323cf0a22146104fe57806324a176441461051a5780632bb457901461053657806333f88d22146105675780633ccfd60b14610590576102ae565b80630f7309e81161026b5780630f7309e8146103d357806313faede6146103fe57806317d70f7c1461042957806318160ddd14610454578063191657541461047f578063239c70ae146104aa576102ae565b806301ffc9a7146102b357806302329a29146102f0578063030c29711461031957806306fdde0314610342578063081812fc1461036d578063095ea7b3146103aa575b600080fd5b3480156102bf57600080fd5b506102da60048036038101906102d59190613f4e565b610b13565b6040516102e79190614882565b60405180910390f35b3480156102fc57600080fd5b5061031760048036038101906103129190613ef4565b610bf5565b005b34801561032557600080fd5b50610340600480360381019061033b919061407e565b610c8e565b005b34801561034e57600080fd5b50610357610dc8565b604051610364919061489d565b60405180910390f35b34801561037957600080fd5b50610394600480360381019061038f9190614186565b610e5a565b6040516103a1919061481b565b60405180910390f35b3480156103b657600080fd5b506103d160048036038101906103cc9190613eb4565b610edf565b005b3480156103df57600080fd5b506103e8610ff7565b6040516103f5919061489d565b60405180910390f35b34801561040a57600080fd5b50610413611085565b6040516104209190614c6e565b60405180910390f35b34801561043557600080fd5b5061043e61108b565b60405161044b9190614c6e565b60405180910390f35b34801561046057600080fd5b50610469611091565b6040516104769190614c6e565b60405180910390f35b34801561048b57600080fd5b5061049461109b565b6040516104a19190614c6e565b60405180910390f35b3480156104b657600080fd5b506104bf6110a1565b6040516104cc9190614c6e565b60405180910390f35b3480156104e157600080fd5b506104fc60048036038101906104f79190613d9e565b6110a7565b005b61051860048036038101906105139190613ff1565b611107565b005b610534600480360381019061052f919061401e565b611305565b005b34801561054257600080fd5b5061054b611597565b60405161055e9796959493929190614bff565b60405180910390f35b34801561057357600080fd5b5061058e60048036038101906105899190614186565b611623565b005b6105986116ac565b005b3480156105a657600080fd5b506105c160048036038101906105bc9190613d9e565b611768565b005b3480156105cf57600080fd5b506105ea60048036038101906105e59190614186565b611788565b005b3480156105f857600080fd5b50610613600480360381019061060e9190614186565b61180a565b005b34801561062157600080fd5b5061062a611890565b6040516106379190614882565b60405180910390f35b34801561064c57600080fd5b5061066760048036038101906106629190613fa8565b61192e565b005b34801561067557600080fd5b5061067e6119c4565b60405161068b9190614882565b60405180910390f35b3480156106a057600080fd5b506106bb60048036038101906106b69190614186565b6119d7565b6040516106c8919061481b565b60405180910390f35b3480156106dd57600080fd5b506106e6611a89565b6040516106f3919061489d565b60405180910390f35b34801561070857600080fd5b50610723600480360381019061071e9190614186565b611b17565b005b34801561073157600080fd5b5061074c60048036038101906107479190613d31565b611b9d565b6040516107599190614c6e565b60405180910390f35b34801561076e57600080fd5b50610777611c55565b005b34801561078557600080fd5b506107a0600480360381019061079b9190614186565b611cdd565b005b3480156107ae57600080fd5b506107b7611d63565b6040516107c4919061481b565b60405180910390f35b3480156107d957600080fd5b506107f460048036038101906107ef91906140f9565b611d8d565b6040516108019190614c6e565b60405180910390f35b34801561081657600080fd5b5061081f6120f8565b60405161082c919061489d565b60405180910390f35b34801561084157600080fd5b5061084a61218a565b60405161085d9796959493929190614bff565b60405180910390f35b34801561087257600080fd5b5061088d60048036038101906108889190613e74565b612216565b005b34801561089b57600080fd5b506108b660048036038101906108b19190613ff1565b612397565b6040516108c39190614882565b60405180910390f35b3480156108d857600080fd5b506108f360048036038101906108ee9190613d31565b612406565b6040516109009190614c6e565b60405180910390f35b34801561091557600080fd5b5061091e61241e565b60405161092b9190614c6e565b60405180910390f35b34801561094057600080fd5b50610949612426565b005b34801561095757600080fd5b50610972600480360381019061096d9190613df1565b612544565b005b34801561098057600080fd5b5061099b6004803603810190610996919061407e565b6125a6565b005b3480156109a957600080fd5b506109c460048036038101906109bf9190613f21565b6126e0565b005b3480156109d257600080fd5b506109db612766565b6040516109e8919061489d565b60405180910390f35b3480156109fd57600080fd5b50610a186004803603810190610a139190614186565b6127f4565b604051610a25919061489d565b60405180910390f35b348015610a3a57600080fd5b50610a436128e5565b604051610a509190614882565b60405180910390f35b348015610a6557600080fd5b50610a6e612983565b604051610a7b9190614c6e565b60405180910390f35b348015610a9057600080fd5b50610aab6004803603810190610aa69190613fa8565b612989565b005b348015610ab957600080fd5b50610ad46004803603810190610acf9190613d5e565b612a1f565b604051610ae19190614882565b60405180910390f35b348015610af657600080fd5b50610b116004803603810190610b0c9190613d31565b612ab3565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610bde57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610bee5750610bed82612bab565b5b9050919050565b610bfd612c15565b73ffffffffffffffffffffffffffffffffffffffff16610c1b611d63565b73ffffffffffffffffffffffffffffffffffffffff1614610c71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6890614b1f565b60405180910390fd5b80600660146101000a81548160ff02191690831515021790555050565b610c96612c15565b73ffffffffffffffffffffffffffffffffffffffff16610cb4611d63565b73ffffffffffffffffffffffffffffffffffffffff1614610d0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0190614b1f565b60405180910390fd5b84601260000160006101000a81548161ffff021916908361ffff16021790555083601260000160026101000a81548160ff021916908360ff16021790555082601260000160036101000a81548160ff021916908360ff16021790555081601260000160046101000a81548160ff021916908360ff16021790555080601260000160056101000a81548160ff021916908360ff1602179055506000601260000160066101000a81548160ff021916908360ff1602179055505050505050565b606060008054610dd790614fc0565b80601f0160208091040260200160405190810160405280929190818152602001828054610e0390614fc0565b8015610e505780601f10610e2557610100808354040283529160200191610e50565b820191906000526020600020905b815481529060010190602001808311610e3357829003601f168201915b5050505050905090565b6000610e6582612c1d565b610ea4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9b90614abf565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610eea826119d7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5290614b7f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610f7a612c15565b73ffffffffffffffffffffffffffffffffffffffff161480610fa95750610fa881610fa3612c15565b612a1f565b5b610fe8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdf90614a3f565b60405180910390fd5b610ff28383612c89565b505050565b6009805461100490614fc0565b80601f016020809104026020016040519081016040528092919081815260200182805461103090614fc0565b801561107d5780601f106110525761010080835404028352916020019161107d565b820191906000526020600020905b81548152906001019060200180831161106057829003601f168201915b505050505081565b600a5481565b600d5481565b6000600d54905090565b600e5481565b600c5481565b6110b86110b2612c15565b82612d42565b6110f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ee90614b9f565b60405180910390fd5b611102838383612e20565b505050565b8061ffff16600a546111199190614def565b34101561115b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115290614bdf565b60405180910390fd5b600c548161ffff161115611170600c5461307c565b60405160200161118091906147ee565b604051602081830303815290604052906111d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c7919061489d565b60405180910390fd5b506111d9611890565b611218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120f9061493f565b60405180910390fd5b611226338261ffff166131dd565b8061ffff16601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112799190614d68565b925050819055506005601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611302576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f990614adf565b60405180910390fd5b50565b611358611311336132d5565b838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050613305565b611397576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138e906148bf565b60405180910390fd5b8261ffff16600a546113a99190614def565b3410156113eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e290614bdf565b60405180910390fd5b600c548361ffff161115611400600c5461307c565b60405160200161141091906147ee565b60405160208183030381529060405290611460576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611457919061489d565b60405180910390fd5b506114696128e5565b6114a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149f90614bbf565b60405180910390fd5b6114b6338461ffff166131dd565b8261ffff16601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115099190614d68565b925050819055506003601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611592576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158990614aff565b60405180910390fd5b505050565b60128060000160009054906101000a900461ffff16908060000160029054906101000a900460ff16908060000160039054906101000a900460ff16908060000160049054906101000a900460ff16908060000160059054906101000a900460ff16908060000160069054906101000a900460ff16908060000160079054906101000a900460ff16905087565b61162b612c15565b73ffffffffffffffffffffffffffffffffffffffff16611649611d63565b73ffffffffffffffffffffffffffffffffffffffff161461169f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169690614b1f565b60405180910390fd5b6116a933826131dd565b50565b6116b4612c15565b73ffffffffffffffffffffffffffffffffffffffff166116d2611d63565b73ffffffffffffffffffffffffffffffffffffffff1614611728576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171f90614b1f565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505061176657600080fd5b565b61178383838360405180602001604052806000815250612544565b505050565b3373ffffffffffffffffffffffffffffffffffffffff166117a8826119d7565b73ffffffffffffffffffffffffffffffffffffffff16146117fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f59061499f565b60405180910390fd5b6118078161331c565b50565b611812612c15565b73ffffffffffffffffffffffffffffffffffffffff16611830611d63565b73ffffffffffffffffffffffffffffffffffffffff1614611886576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187d90614b1f565b60405180910390fd5b80600a8190555050565b6000600660149054906101000a900460ff161580156119295750611925601160000160009054906101000a900461ffff16601160000160029054906101000a900460ff16601160000160039054906101000a900460ff16601160000160049054906101000a900460ff16601160000160059054906101000a900460ff16601160000160069054906101000a900460ff16611d8d565b4210155b905090565b611936612c15565b73ffffffffffffffffffffffffffffffffffffffff16611954611d63565b73ffffffffffffffffffffffffffffffffffffffff16146119aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a190614b1f565b60405180910390fd5b80600790805190602001906119c0929190613a8d565b5050565b600660149054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7790614a7f565b60405180910390fd5b80915050919050565b60078054611a9690614fc0565b80601f0160208091040260200160405190810160405280929190818152602001828054611ac290614fc0565b8015611b0f5780601f10611ae457610100808354040283529160200191611b0f565b820191906000526020600020905b815481529060010190602001808311611af257829003601f168201915b505050505081565b611b1f612c15565b73ffffffffffffffffffffffffffffffffffffffff16611b3d611d63565b73ffffffffffffffffffffffffffffffffffffffff1614611b93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8a90614b1f565b60405180910390fd5b80600b8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0590614a5f565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611c5d612c15565b73ffffffffffffffffffffffffffffffffffffffff16611c7b611d63565b73ffffffffffffffffffffffffffffffffffffffff1614611cd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc890614b1f565b60405180910390fd5b611cdb600061342d565b565b611ce5612c15565b73ffffffffffffffffffffffffffffffffffffffff16611d03611d63565b73ffffffffffffffffffffffffffffffffffffffff1614611d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5090614b1f565b60405180910390fd5b80600c8190555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000806107b290505b8761ffff168161ffff161015611df157611daf81612397565b15611dcb576301e2850082611dc49190614d68565b9150611dde565b6301e1338082611ddb9190614d68565b91505b8080611de990615023565b915050611d96565b611df9613b13565b601f816000600c8110611e0f57611e0e6151be565b5b602002019060ff16908160ff1681525050611e2989612397565b15611e5a57601d816001600c8110611e4457611e436151be565b5b602002019060ff16908160ff1681525050611e82565b601c816001600c8110611e7057611e6f6151be565b5b602002019060ff16908160ff16815250505b601f816002600c8110611e9857611e976151be565b5b602002019060ff16908160ff1681525050601e816003600c8110611ebf57611ebe6151be565b5b602002019060ff16908160ff1681525050601f816004600c8110611ee657611ee56151be565b5b602002019060ff16908160ff1681525050601e816005600c8110611f0d57611f0c6151be565b5b602002019060ff16908160ff1681525050601f816006600c8110611f3457611f336151be565b5b602002019060ff16908160ff1681525050601f816007600c8110611f5b57611f5a6151be565b5b602002019060ff16908160ff1681525050601e816008600c8110611f8257611f816151be565b5b602002019060ff16908160ff1681525050601f816009600c8110611fa957611fa86151be565b5b602002019060ff16908160ff1681525050601e81600a600c8110611fd057611fcf6151be565b5b602002019060ff16908160ff1681525050601f81600b600c8110611ff757611ff66151be565b5b602002019060ff16908160ff1681525050600191505b8760ff168261ffff161015612075578060018361202a9190614e49565b61ffff16600c811061203f5761203e6151be565b5b602002015160ff16620151806120559190614def565b836120609190614d68565b9250818061206d90615023565b92505061200d565b6001876120829190614eb1565b60ff16620151806120939190614def565b8361209e9190614d68565b92508560ff16610e106120b19190614def565b836120bc9190614d68565b92508460ff16603c6120ce9190614def565b836120d99190614d68565b92508360ff16836120ea9190614d68565b925050509695505050505050565b60606001805461210790614fc0565b80601f016020809104026020016040519081016040528092919081815260200182805461213390614fc0565b80156121805780601f1061215557610100808354040283529160200191612180565b820191906000526020600020905b81548152906001019060200180831161216357829003601f168201915b5050505050905090565b60118060000160009054906101000a900461ffff16908060000160029054906101000a900460ff16908060000160039054906101000a900460ff16908060000160049054906101000a900460ff16908060000160059054906101000a900460ff16908060000160069054906101000a900460ff16908060000160079054906101000a900460ff16905087565b61221e612c15565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561228c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612283906149bf565b60405180910390fd5b8060056000612299612c15565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16612346612c15565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161238b9190614882565b60405180910390a35050565b6000806004836123a791906150cf565b61ffff16146123b95760009050612401565b60006064836123c891906150cf565b61ffff16146123da5760019050612401565b6000610190836123ea91906150cf565b61ffff16146123fc5760009050612401565b600190505b919050565b60106020528060005260406000206000915090505481565b600047905090565b61242e612c15565b73ffffffffffffffffffffffffffffffffffffffff1661244c611d63565b73ffffffffffffffffffffffffffffffffffffffff16146124a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249990614b1f565b60405180910390fd5b6000600e5411156124e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124df90614a1f565b60405180910390fd5b6001600b546001436124fa9190614e7d565b40423360405160200161250f93929190614780565b6040516020818303038152906040528051906020012060001c6125329190615100565b61253c9190614d68565b600e81905550565b61255561254f612c15565b83612d42565b612594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258b90614b9f565b60405180910390fd5b6125a0848484846134f3565b50505050565b6125ae612c15565b73ffffffffffffffffffffffffffffffffffffffff166125cc611d63565b73ffffffffffffffffffffffffffffffffffffffff1614612622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261990614b1f565b60405180910390fd5b84601160000160006101000a81548161ffff021916908361ffff16021790555083601160000160026101000a81548160ff021916908360ff16021790555082601160000160036101000a81548160ff021916908360ff16021790555081601160000160046101000a81548160ff021916908360ff16021790555080601160000160056101000a81548160ff021916908360ff1602179055506000601160000160066101000a81548160ff021916908360ff1602179055505050505050565b6126e8612c15565b73ffffffffffffffffffffffffffffffffffffffff16612706611d63565b73ffffffffffffffffffffffffffffffffffffffff161461275c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275390614b1f565b60405180910390fd5b80600f8190555050565b6008805461277390614fc0565b80601f016020809104026020016040519081016040528092919081815260200182805461279f90614fc0565b80156127ec5780601f106127c1576101008083540402835291602001916127ec565b820191906000526020600020905b8154815290600101906020018083116127cf57829003601f168201915b505050505081565b60606127ff82612c1d565b61283e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283590614b5f565b60405180910390fd5b600061284861354f565b905060008390506000600e541115612890576001600b546001600e548761286f9190614d68565b6128799190614e7d565b6128839190615100565b61288d9190614d68565b90505b60008251116128ae57604051806020016040528060008152506128dc565b816128b88261307c565b60086040516020016128cc939291906147bd565b6040516020818303038152906040525b92505050919050565b6000600660149054906101000a900460ff1615801561297e575061297a601260000160009054906101000a900461ffff16601260000160029054906101000a900460ff16601260000160039054906101000a900460ff16601260000160049054906101000a900460ff16601260000160059054906101000a900460ff16601260000160069054906101000a900460ff16611d8d565b4210155b905090565b600b5481565b612991612c15565b73ffffffffffffffffffffffffffffffffffffffff166129af611d63565b73ffffffffffffffffffffffffffffffffffffffff1614612a05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129fc90614b1f565b60405180910390fd5b8060089080519060200190612a1b929190613a8d565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612abb612c15565b73ffffffffffffffffffffffffffffffffffffffff16612ad9611d63565b73ffffffffffffffffffffffffffffffffffffffff1614612b2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2690614b1f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612b9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b96906148ff565b60405180910390fd5b612ba88161342d565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612cfc836119d7565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612d4d82612c1d565b612d8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d83906149ff565b60405180910390fd5b6000612d97836119d7565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612e0657508373ffffffffffffffffffffffffffffffffffffffff16612dee84610e5a565b73ffffffffffffffffffffffffffffffffffffffff16145b80612e175750612e168185612a1f565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612e40826119d7565b73ffffffffffffffffffffffffffffffffffffffff1614612e96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8d90614b3f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612efd9061497f565b60405180910390fd5b612f118383836135e1565b612f1c600082612c89565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f6c9190614e7d565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612fc39190614d68565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b606060008214156130c4576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506131d8565b600082905060005b600082146130f65780806130df9061504e565b915050600a826130ef9190614dbe565b91506130cc565b60008167ffffffffffffffff811115613112576131116151ed565b5b6040519080825280601f01601f1916602001820160405280156131445781602001600182028036833780820191505090505b5090505b600085146131d15760018261315d9190614e7d565b9150600a8561316c9190615100565b60306131789190614d68565b60f81b81838151811061318e5761318d6151be565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856131ca9190614dbe565b9450613148565b8093505050505b919050565b600660149054906101000a900460ff161561322d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613224906149df565b60405180910390fd5b600b5481600d5461323e9190614d68565b111561327f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132769061495f565b60405180910390fd5b6000600190505b8181116132b7576132a48382600d5461329f9190614d68565b6135e6565b80806132af9061504e565b915050613286565b5080600d60008282546132ca9190614d68565b925050819055505050565b6000816040516020016132e89190614739565b604051602081830303815290604052805190602001209050919050565b600061331482600f5485613604565b905092915050565b6000613327826119d7565b9050613335816000846135e1565b613340600083612c89565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133909190614e7d565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6134fe848484612e20565b61350a848484846136ba565b613549576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613540906148df565b60405180910390fd5b50505050565b60606007805461355e90614fc0565b80601f016020809104026020016040519081016040528092919081815260200182805461358a90614fc0565b80156135d75780601f106135ac576101008083540402835291602001916135d7565b820191906000526020600020905b8154815290600101906020018083116135ba57829003601f168201915b5050505050905090565b505050565b613600828260405180602001604052806000815250613851565b5050565b60008082905060005b85518110156136ac57600086828151811061362b5761362a6151be565b5b6020026020010151905080831161366c57828160405160200161364f929190614754565b604051602081830303815290604052805190602001209250613698565b808360405160200161367f929190614754565b6040516020818303038152906040528051906020012092505b5080806136a49061504e565b91505061360d565b508381149150509392505050565b60006136db8473ffffffffffffffffffffffffffffffffffffffff166138ac565b15613844578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613704612c15565b8786866040518563ffffffff1660e01b81526004016137269493929190614836565b602060405180830381600087803b15801561374057600080fd5b505af192505050801561377157506040513d601f19601f8201168201806040525081019061376e9190613f7b565b60015b6137f4573d80600081146137a1576040519150601f19603f3d011682016040523d82523d6000602084013e6137a6565b606091505b506000815114156137ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137e3906148df565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613849565b600190505b949350505050565b61385b83836138bf565b61386860008484846136ba565b6138a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161389e906148df565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561392f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161392690614a9f565b60405180910390fd5b61393881612c1d565b15613978576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161396f9061491f565b60405180910390fd5b613984600083836135e1565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546139d49190614d68565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054613a9990614fc0565b90600052602060002090601f016020900481019282613abb5760008555613b02565b82601f10613ad457805160ff1916838001178555613b02565b82800160010185558215613b02579182015b82811115613b01578251825591602001919060010190613ae6565b5b509050613b0f9190613b36565b5090565b604051806101800160405280600c90602082028036833780820191505090505090565b5b80821115613b4f576000816000905550600101613b37565b5090565b6000613b66613b6184614cae565b614c89565b905082815260208101848484011115613b8257613b8161522b565b5b613b8d848285614f7e565b509392505050565b6000613ba8613ba384614cdf565b614c89565b905082815260208101848484011115613bc457613bc361522b565b5b613bcf848285614f7e565b509392505050565b600081359050613be6816159a6565b92915050565b60008083601f840112613c0257613c01615221565b5b8235905067ffffffffffffffff811115613c1f57613c1e61521c565b5b602083019150836020820283011115613c3b57613c3a615226565b5b9250929050565b600081359050613c51816159bd565b92915050565b600081359050613c66816159d4565b92915050565b600081359050613c7b816159eb565b92915050565b600081519050613c90816159eb565b92915050565b600082601f830112613cab57613caa615221565b5b8135613cbb848260208601613b53565b91505092915050565b600082601f830112613cd957613cd8615221565b5b8135613ce9848260208601613b95565b91505092915050565b600081359050613d0181615a02565b92915050565b600081359050613d1681615a19565b92915050565b600081359050613d2b81615a30565b92915050565b600060208284031215613d4757613d46615235565b5b6000613d5584828501613bd7565b91505092915050565b60008060408385031215613d7557613d74615235565b5b6000613d8385828601613bd7565b9250506020613d9485828601613bd7565b9150509250929050565b600080600060608486031215613db757613db6615235565b5b6000613dc586828701613bd7565b9350506020613dd686828701613bd7565b9250506040613de786828701613d07565b9150509250925092565b60008060008060808587031215613e0b57613e0a615235565b5b6000613e1987828801613bd7565b9450506020613e2a87828801613bd7565b9350506040613e3b87828801613d07565b925050606085013567ffffffffffffffff811115613e5c57613e5b615230565b5b613e6887828801613c96565b91505092959194509250565b60008060408385031215613e8b57613e8a615235565b5b6000613e9985828601613bd7565b9250506020613eaa85828601613c42565b9150509250929050565b60008060408385031215613ecb57613eca615235565b5b6000613ed985828601613bd7565b9250506020613eea85828601613d07565b9150509250929050565b600060208284031215613f0a57613f09615235565b5b6000613f1884828501613c42565b91505092915050565b600060208284031215613f3757613f36615235565b5b6000613f4584828501613c57565b91505092915050565b600060208284031215613f6457613f63615235565b5b6000613f7284828501613c6c565b91505092915050565b600060208284031215613f9157613f90615235565b5b6000613f9f84828501613c81565b91505092915050565b600060208284031215613fbe57613fbd615235565b5b600082013567ffffffffffffffff811115613fdc57613fdb615230565b5b613fe884828501613cc4565b91505092915050565b60006020828403121561400757614006615235565b5b600061401584828501613cf2565b91505092915050565b60008060006040848603121561403757614036615235565b5b600061404586828701613cf2565b935050602084013567ffffffffffffffff81111561406657614065615230565b5b61407286828701613bec565b92509250509250925092565b600080600080600060a0868803121561409a57614099615235565b5b60006140a888828901613cf2565b95505060206140b988828901613d1c565b94505060406140ca88828901613d1c565b93505060606140db88828901613d1c565b92505060806140ec88828901613d1c565b9150509295509295909350565b60008060008060008060c0878903121561411657614115615235565b5b600061412489828a01613cf2565b965050602061413589828a01613d1c565b955050604061414689828a01613d1c565b945050606061415789828a01613d1c565b935050608061416889828a01613d1c565b92505060a061417989828a01613d1c565b9150509295509295509295565b60006020828403121561419c5761419b615235565b5b60006141aa84828501613d07565b91505092915050565b6141bc81614ee5565b82525050565b6141d36141ce82614ee5565b615097565b82525050565b6141e281614ef7565b82525050565b6141f96141f482614f03565b6150a9565b82525050565b600061420a82614d25565b6142148185614d3b565b9350614224818560208601614f8d565b61422d8161523a565b840191505092915050565b600061424382614d30565b61424d8185614d4c565b935061425d818560208601614f8d565b6142668161523a565b840191505092915050565b600061427c82614d30565b6142868185614d5d565b9350614296818560208601614f8d565b80840191505092915050565b600081546142af81614fc0565b6142b98186614d5d565b945060018216600081146142d457600181146142e557614318565b60ff19831686528186019350614318565b6142ee85614d10565b60005b83811015614310578154818901526001820191506020810190506142f1565b838801955050505b50505092915050565b600061432e602283614d4c565b915061433982615258565b604082019050919050565b6000614351603283614d4c565b915061435c826152a7565b604082019050919050565b6000614374602683614d4c565b915061437f826152f6565b604082019050919050565b6000614397601c83614d4c565b91506143a282615345565b602082019050919050565b60006143ba602483614d4c565b91506143c58261536e565b604082019050919050565b60006143dd602283614d4c565b91506143e8826153bd565b604082019050919050565b6000614400602483614d4c565b915061440b8261540c565b604082019050919050565b6000614423602d83614d4c565b915061442e8261545b565b604082019050919050565b6000614446601983614d4c565b9150614451826154aa565b602082019050919050565b6000614469601f83614d4c565b9150614474826154d3565b602082019050919050565b600061448c602c83614d4c565b9150614497826154fc565b604082019050919050565b60006144af601d83614d4c565b91506144ba8261554b565b602082019050919050565b60006144d2603883614d4c565b91506144dd82615574565b604082019050919050565b60006144f5602a83614d4c565b9150614500826155c3565b604082019050919050565b6000614518602983614d4c565b915061452382615612565b604082019050919050565b600061453b600783614d5d565b915061454682615661565b600782019050919050565b600061455e602083614d4c565b91506145698261568a565b602082019050919050565b6000614581602c83614d4c565b915061458c826156b3565b604082019050919050565b60006145a4602c83614d4c565b91506145af82615702565b604082019050919050565b60006145c7603983614d4c565b91506145d282615751565b604082019050919050565b60006145ea602083614d4c565b91506145f5826157a0565b602082019050919050565b600061460d602983614d4c565b9150614618826157c9565b604082019050919050565b6000614630602f83614d4c565b915061463b82615818565b604082019050919050565b6000614653602183614d4c565b915061465e82615867565b604082019050919050565b6000614676601e83614d5d565b9150614681826158b6565b601e82019050919050565b6000614699603183614d4c565b91506146a4826158df565b604082019050919050565b60006146bc602583614d4c565b91506146c78261592e565b604082019050919050565b60006146df601d83614d4c565b91506146ea8261597d565b602082019050919050565b6146fe81614f39565b82525050565b61470d81614f67565b82525050565b61472461471f82614f67565b6150c5565b82525050565b61473381614f71565b82525050565b600061474582846141c2565b60148201915081905092915050565b600061476082856141e8565b60208201915061477082846141e8565b6020820191508190509392505050565b600061478c82866141e8565b60208201915061479c8285614713565b6020820191506147ac82846141c2565b601482019150819050949350505050565b60006147c98286614271565b91506147d58285614271565b91506147e182846142a2565b9150819050949350505050565b60006147f982614669565b91506148058284614271565b91506148108261452e565b915081905092915050565b600060208201905061483060008301846141b3565b92915050565b600060808201905061484b60008301876141b3565b61485860208301866141b3565b6148656040830185614704565b818103606083015261487781846141ff565b905095945050505050565b600060208201905061489760008301846141d9565b92915050565b600060208201905081810360008301526148b78184614238565b905092915050565b600060208201905081810360008301526148d881614321565b9050919050565b600060208201905081810360008301526148f881614344565b9050919050565b6000602082019050818103600083015261491881614367565b9050919050565b600060208201905081810360008301526149388161438a565b9050919050565b60006020820190508181036000830152614958816143ad565b9050919050565b60006020820190508181036000830152614978816143d0565b9050919050565b60006020820190508181036000830152614998816143f3565b9050919050565b600060208201905081810360008301526149b881614416565b9050919050565b600060208201905081810360008301526149d881614439565b9050919050565b600060208201905081810360008301526149f88161445c565b9050919050565b60006020820190508181036000830152614a188161447f565b9050919050565b60006020820190508181036000830152614a38816144a2565b9050919050565b60006020820190508181036000830152614a58816144c5565b9050919050565b60006020820190508181036000830152614a78816144e8565b9050919050565b60006020820190508181036000830152614a988161450b565b9050919050565b60006020820190508181036000830152614ab881614551565b9050919050565b60006020820190508181036000830152614ad881614574565b9050919050565b60006020820190508181036000830152614af881614597565b9050919050565b60006020820190508181036000830152614b18816145ba565b9050919050565b60006020820190508181036000830152614b38816145dd565b9050919050565b60006020820190508181036000830152614b5881614600565b9050919050565b60006020820190508181036000830152614b7881614623565b9050919050565b60006020820190508181036000830152614b9881614646565b9050919050565b60006020820190508181036000830152614bb88161468c565b9050919050565b60006020820190508181036000830152614bd8816146af565b9050919050565b60006020820190508181036000830152614bf8816146d2565b9050919050565b600060e082019050614c14600083018a6146f5565b614c21602083018961472a565b614c2e604083018861472a565b614c3b606083018761472a565b614c48608083018661472a565b614c5560a083018561472a565b614c6260c083018461472a565b98975050505050505050565b6000602082019050614c836000830184614704565b92915050565b6000614c93614ca4565b9050614c9f8282614ff2565b919050565b6000604051905090565b600067ffffffffffffffff821115614cc957614cc86151ed565b5b614cd28261523a565b9050602081019050919050565b600067ffffffffffffffff821115614cfa57614cf96151ed565b5b614d038261523a565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614d7382614f67565b9150614d7e83614f67565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614db357614db2615131565b5b828201905092915050565b6000614dc982614f67565b9150614dd483614f67565b925082614de457614de3615160565b5b828204905092915050565b6000614dfa82614f67565b9150614e0583614f67565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614e3e57614e3d615131565b5b828202905092915050565b6000614e5482614f39565b9150614e5f83614f39565b925082821015614e7257614e71615131565b5b828203905092915050565b6000614e8882614f67565b9150614e9383614f67565b925082821015614ea657614ea5615131565b5b828203905092915050565b6000614ebc82614f71565b9150614ec783614f71565b925082821015614eda57614ed9615131565b5b828203905092915050565b6000614ef082614f47565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015614fab578082015181840152602081019050614f90565b83811115614fba576000848401525b50505050565b60006002820490506001821680614fd857607f821691505b60208210811415614fec57614feb61518f565b5b50919050565b614ffb8261523a565b810181811067ffffffffffffffff8211171561501a576150196151ed565b5b80604052505050565b600061502e82614f39565b915061ffff82141561504357615042615131565b5b600182019050919050565b600061505982614f67565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561508c5761508b615131565b5b600182019050919050565b60006150a2826150b3565b9050919050565b6000819050919050565b60006150be8261524b565b9050919050565b6000819050919050565b60006150da82614f39565b91506150e583614f39565b9250826150f5576150f4615160565b5b828206905092915050565b600061510b82614f67565b915061511683614f67565b92508261512657615125615160565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4a696767793a2041646472657373206973206e6f74206f6e2077686974656c6960008201527f7374000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4a696767793a205075626c6963206d696e74206973206e6f742061637469766560008201527f2079657400000000000000000000000000000000000000000000000000000000602082015250565b7f4a696767793a2052656d61696e206a6967677973206973206e6f7420656e6f7560008201527f6768000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f232323204a696767793a20596f7520617265206e6f7420746865206f776e657260008201527f206f662074686973206e66742e00000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4a696767793a204a6967677920636f6e74726163742069732070617573656400600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f5374617274696e6720696e64657820697320616c726561647920736574000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f204a696767797300000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4a696767793a20557365722063616e206f6e6c79206d696e742061206d61786960008201527f6d756d206f662034204e46540000000000000000000000000000000000000000602082015250565b7f4a696767793a20557365722063616e206f6e6c79206d696e742061206d61786960008201527f6d756d206f662032204e465420696e2077686974656c69737400000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4a696767793a2043616e206e6f74206d696e74206d6f7265207468616e200000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4a696767793a2050726573616c65206d696e74206973206e6f7420616374697660008201527f6520796574000000000000000000000000000000000000000000000000000000602082015250565b7f4a696767793a204e6f7420656e6f7567682045544820746f206d696e74000000600082015250565b6159af81614ee5565b81146159ba57600080fd5b50565b6159c681614ef7565b81146159d157600080fd5b50565b6159dd81614f03565b81146159e857600080fd5b50565b6159f481614f0d565b81146159ff57600080fd5b50565b615a0b81614f39565b8114615a1657600080fd5b50565b615a2281614f67565b8114615a2d57600080fd5b50565b615a3981614f71565b8114615a4457600080fd5b5056fea2646970667358221220cbf521fd7ee9f3145a6bb59ea620c6d561f7a0f0c63e267e757fc66b4f913aea64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002b68747470733a2f2f7468656a69676779732e636f6d2f6170692f6a696767792d72657665616c2d696d672f000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _initBaseURI (string): https://thejiggys.com/api/jiggy-reveal-img/
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 000000000000000000000000000000000000000000000000000000000000002b
Arg [2] : 68747470733a2f2f7468656a69676779732e636f6d2f6170692f6a696767792d
Arg [3] : 72657665616c2d696d672f000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
35905:6032:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19922:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40684:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41544:289;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20867:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22426:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21949:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36093:69;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36167:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36278:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40036:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36309:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36241:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23316:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37922:526;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38454:692;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36467:26;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;40883:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40763:114;;;:::i;:::-;;23726:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39867:163;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40138:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36719:204;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40346:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35994:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20561:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36025:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40578:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20291:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12064:90;;;;;;;;;;;;;:::i;:::-;;40224:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11447:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32919:1405;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21036:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36437:25;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;22719:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32614:297;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36382:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39771:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40996:254;;;;;;;;;;;;;:::i;:::-;;23982:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41256:282;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41841:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36051:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39153:612;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36931:211;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36205:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40450:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23085:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12299:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19922:305;20024:4;20076:25;20061:40;;;:11;:40;;;;:105;;;;20133:33;20118:48;;;:11;:48;;;;20061:105;:158;;;;20183:36;20207:11;20183:23;:36::i;:::-;20061:158;20041:178;;19922:305;;;:::o;40684:73::-;11664:12;:10;:12::i;:::-;11653:23;;:7;:5;:7::i;:::-;:23;;;11645:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40745:6:::1;40736;;:15;;;;;;;;;;;;;;;;;;40684:73:::0;:::o;41544:289::-;11664:12;:10;:12::i;:::-;11653:23;;:7;:5;:7::i;:::-;:23;;;11645:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41675:5:::1;41658:9;:14;;;:22;;;;;;;;;;;;;;;;;;41705:6;41687:9;:15;;;:24;;;;;;;;;;;;;;;;;;41734:4;41718:9;:13;;;:20;;;;;;;;;;;;;;;;;;41762:5;41745:9;:14;;;:22;;;;;;;;;;;;;;;;;;41793:7;41774:9;:16;;;:26;;;;;;;;;;;;;;;;;;41826:1;41807:9;:16;;;:20;;;;;;;;;;;;;;;;;;41544:289:::0;;;;;:::o;20867:100::-;20921:13;20954:5;20947:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20867:100;:::o;22426:221::-;22502:7;22530:16;22538:7;22530;:16::i;:::-;22522:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22615:15;:24;22631:7;22615:24;;;;;;;;;;;;;;;;;;;;;22608:31;;22426:221;;;:::o;21949:411::-;22030:13;22046:23;22061:7;22046:14;:23::i;:::-;22030:39;;22094:5;22088:11;;:2;:11;;;;22080:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22188:5;22172:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;22197:37;22214:5;22221:12;:10;:12::i;:::-;22197:16;:37::i;:::-;22172:62;22150:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;22331:21;22340:2;22344:7;22331:8;:21::i;:::-;22019:341;21949:411;;:::o;36093:69::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;36167:33::-;;;;:::o;36278:26::-;;;;:::o;40036:80::-;40080:7;40103;;40096:14;;40036:80;:::o;36309:33::-;;;;:::o;36241:32::-;;;;:::o;23316:339::-;23511:41;23530:12;:10;:12::i;:::-;23544:7;23511:18;:41::i;:::-;23503:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;23619:28;23629:4;23635:2;23639:7;23619:9;:28::i;:::-;23316:339;;;:::o;37922:526::-;38006:11;37999:18;;:4;;:18;;;;:::i;:::-;37986:9;:31;;37978:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;38081:13;;38066:11;:28;;;;38154:24;:13;;:22;:24::i;:::-;38103:87;;;;;;;;:::i;:::-;;;;;;;;;;;;;38058:134;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;38207:10;:8;:10::i;:::-;38199:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;38265:37;38278:10;38290:11;38265:37;;:12;:37::i;:::-;38338:11;38309:40;;:13;:25;38323:10;38309:25;;;;;;;;;;;;;;;;:40;;;;;;;:::i;:::-;;;;;;;;38392:1;38364:13;:25;38378:10;38364:25;;;;;;;;;;;;;;;;:29;38356:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;37922:526;:::o;38454:692::-;38555:33;38563:17;38569:10;38563:5;:17::i;:::-;38582:5;;38555:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:7;:33::i;:::-;38547:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;38662:11;38655:18;;:4;;:18;;;;:::i;:::-;38642:9;:31;;38634:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;38737:13;;38722:11;:28;;;;38810:24;:13;;:22;:24::i;:::-;38759:87;;;;;;;;:::i;:::-;;;;;;;;;;;;;38714:134;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;38890:11;:9;:11::i;:::-;38882:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;38950:37;38963:10;38975:11;38950:37;;:12;:37::i;:::-;39023:11;38994:40;;:13;:25;39008:10;38994:25;;;;;;;;;;;;;;;;:40;;;;;;;:::i;:::-;;;;;;;;39077:1;39049:13;:25;39063:10;39049:25;;;;;;;;;;;;;;;;:29;39041:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;38454:692;;;:::o;36467:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;40883:107::-;11664:12;:10;:12::i;:::-;11653:23;;:7;:5;:7::i;:::-;:23;;;11645:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40947:37:::1;40960:10;40972:11;40947:12;:37::i;:::-;40883:107:::0;:::o;40763:114::-;11664:12;:10;:12::i;:::-;11653:23;;:7;:5;:7::i;:::-;:23;;;11645:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40831:10:::1;40823:24;;:47;40848:21;40823:47;;;;;;;;;;;;;;;;;;;;;;;40815:56;;;::::0;::::1;;40763:114::o:0;23726:185::-;23864:39;23881:4;23887:2;23891:7;23864:39;;;;;;;;;;;;:16;:39::i;:::-;23726:185;;;:::o;39867:163::-;39942:10;39921:31;;:17;39929:8;39921:7;:17::i;:::-;:31;;;39913:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;40009:15;40015:8;40009:5;:15::i;:::-;39867:163;:::o;40138:80::-;11664:12;:10;:12::i;:::-;11653:23;;:7;:5;:7::i;:::-;:23;;;11645:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40204:8:::1;40197:4;:15;;;;40138:80:::0;:::o;36719:204::-;36760:4;36783:6;;;;;;;;;;;36782:7;:135;;;;;36812:105;36824:8;:13;;;;;;;;;;;;36839:8;:14;;;;;;;;;;;;36855:8;:12;;;;;;;;;;;;36869:8;:13;;;;;;;;;;;;36884:8;:15;;;;;;;;;;;;36901:8;:15;;;;;;;;;;;;36812:11;:105::i;:::-;36793:15;:124;;36782:135;36775:142;;36719:204;:::o;40346:98::-;11664:12;:10;:12::i;:::-;11653:23;;:7;:5;:7::i;:::-;:23;;;11645:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40427:11:::1;40417:7;:21;;;;;;;;;;;;:::i;:::-;;40346:98:::0;:::o;35994:26::-;;;;;;;;;;;;;:::o;20561:239::-;20633:7;20653:13;20669:7;:16;20677:7;20669:16;;;;;;;;;;;;;;;;;;;;;20653:32;;20721:1;20704:19;;:5;:19;;;;20696:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20787:5;20780:12;;;20561:239;;;:::o;36025:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;40578:100::-;11664:12;:10;:12::i;:::-;11653:23;;:7;:5;:7::i;:::-;:23;;;11645:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40659:13:::1;40647:9;:25;;;;40578:100:::0;:::o;20291:208::-;20363:7;20408:1;20391:19;;:5;:19;;;;20383:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;20475:9;:16;20485:5;20475:16;;;;;;;;;;;;;;;;20468:23;;20291:208;;;:::o;12064:90::-;11664:12;:10;:12::i;:::-;11653:23;;:7;:5;:7::i;:::-;:23;;;11645:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12127:21:::1;12145:1;12127:9;:21::i;:::-;12064:90::o:0;40224:116::-;11664:12;:10;:12::i;:::-;11653:23;;:7;:5;:7::i;:::-;:23;;;11645:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40317:17:::1;40301:13;:33;;;;40224:116:::0;:::o;11447:83::-;11493:7;11518:6;;;;;;;;;;;11511:13;;11447:83;:::o;32919:1405::-;33038:14;33065:8;32601:4;33108:15;;33103:232;33129:4;33125:8;;:1;:8;;;33103:232;;;33159:13;33170:1;33159:10;:13::i;:::-;33155:169;;;32466:8;33193:33;;;;;:::i;:::-;;;33155:169;;;32414:8;33280:28;;;;;:::i;:::-;;;33155:169;33135:3;;;;;:::i;:::-;;;;33103:232;;;33365:31;;:::i;:::-;33427:2;33407:14;33422:1;33407:17;;;;;;;:::i;:::-;;;;;:22;;;;;;;;;;;33444:16;33455:4;33444:10;:16::i;:::-;33440:135;;;33497:2;33477:14;33492:1;33477:17;;;;;;;:::i;:::-;;;;;:22;;;;;;;;;;;33440:135;;;33561:2;33541:14;33556:1;33541:17;;;;;;;:::i;:::-;;;;;:22;;;;;;;;;;;33440:135;33605:2;33585:14;33600:1;33585:17;;;;;;;:::i;:::-;;;;;:22;;;;;;;;;;;33638:2;33618:14;33633:1;33618:17;;;;;;;:::i;:::-;;;;;:22;;;;;;;;;;;33671:2;33651:14;33666:1;33651:17;;;;;;;:::i;:::-;;;;;:22;;;;;;;;;;;33704:2;33684:14;33699:1;33684:17;;;;;;;:::i;:::-;;;;;:22;;;;;;;;;;;33737:2;33717:14;33732:1;33717:17;;;;;;;:::i;:::-;;;;;:22;;;;;;;;;;;33770:2;33750:14;33765:1;33750:17;;;;;;;:::i;:::-;;;;;:22;;;;;;;;;;;33803:2;33783:14;33798:1;33783:17;;;;;;;:::i;:::-;;;;;:22;;;;;;;;;;;33836:2;33816:14;33831:1;33816:17;;;;;;;:::i;:::-;;;;;:22;;;;;;;;;;;33870:2;33849:14;33864:2;33849:18;;;;;;;:::i;:::-;;;;;:23;;;;;;;;;;;33904:2;33883:14;33898:2;33883:18;;;;;;;:::i;:::-;;;;;:23;;;;;;;;;;;33928:1;33924:5;;33919:110;33935:5;33931:9;;:1;:9;;;33919:110;;;33996:14;34015:1;34011;:5;;;;:::i;:::-;33996:21;;;;;;;;;:::i;:::-;;;;;;33979:38;;32370:5;33979:38;;;;:::i;:::-;33966:51;;;;;:::i;:::-;;;33942:3;;;;;:::i;:::-;;;;33919:110;;;34094:1;34088:3;:7;;;;:::i;:::-;34070:26;;32370:5;34070:26;;;;:::i;:::-;34057:39;;;;;:::i;:::-;;;34158:4;34139:24;;32515:4;34139:24;;;;:::i;:::-;34126:37;;;;;:::i;:::-;;;34229:6;34208:28;;32560:2;34208:28;;;;:::i;:::-;34195:41;;;;;:::i;:::-;;;34281:6;34268:19;;;;;;;:::i;:::-;;;34300:16;;32919:1405;;;;;;;;:::o;21036:104::-;21092:13;21125:7;21118:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21036:104;:::o;36437:25::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22719:295::-;22834:12;:10;:12::i;:::-;22822:24;;:8;:24;;;;22814:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;22934:8;22889:18;:32;22908:12;:10;:12::i;:::-;22889:32;;;;;;;;;;;;;;;:42;22922:8;22889:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;22987:8;22958:48;;22973:12;:10;:12::i;:::-;22958:48;;;22997:8;22958:48;;;;;;:::i;:::-;;;;;;;;22719:295;;:::o;32614:297::-;32668:4;32701:1;32696;32689:4;:8;;;;:::i;:::-;:13;;;32685:58;;32726:5;32719:12;;;;32685:58;32771:1;32764:3;32757:4;:10;;;;:::i;:::-;:15;;;32753:59;;32796:4;32789:11;;;;32753:59;32840:1;32833:3;32826:4;:10;;;;:::i;:::-;:15;;;32822:60;;32865:5;32858:12;;;;32822:60;32899:4;32892:11;;32614:297;;;;:::o;36382:48::-;;;;;;;;;;;;;;;;;:::o;39771:90::-;39811:7;39834:21;39827:28;;39771:90;:::o;40996:254::-;11664:12;:10;:12::i;:::-;11653:23;;:7;:5;:7::i;:::-;:23;;;11645:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41075:1:::1;41057:14;;:19;;41049:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;41243:1;41231:9;;41194:1;41179:12;:16;;;;:::i;:::-;41169:27;41198:15;41215:10;41152:74;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;41142:85;;;;;;41134:94;;:106;;;;:::i;:::-;:110;;;;:::i;:::-;41117:14;:127;;;;40996:254::o:0;23982:328::-;24157:41;24176:12;:10;:12::i;:::-;24190:7;24157:18;:41::i;:::-;24149:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24263:39;24277:4;24283:2;24287:7;24296:5;24263:13;:39::i;:::-;23982:328;;;;:::o;41256:282::-;11664:12;:10;:12::i;:::-;11653:23;;:7;:5;:7::i;:::-;:23;;;11645:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41385:5:::1;41369:8;:13;;;:21;;;;;;;;;;;;;;;;;;41414:6;41397:8;:14;;;:23;;;;;;;;;;;;;;;;;;41442:4;41427:8;:12;;;:19;;;;;;;;;;;;;;;;;;41469:5;41453:8;:13;;;:21;;;;;;;;;;;;;;;;;;41499:7;41481:8;:15;;;:25;;;;;;;;;;;;;;;;;;41531:1;41513:8;:15;;;:19;;;;;;;;;;;;;;;;;;41256:282:::0;;;;;:::o;41841:93::-;11664:12;:10;:12::i;:::-;11653:23;;:7;:5;:7::i;:::-;:23;;;11645:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41923:5:::1;41906:14;:22;;;;41841:93:::0;:::o;36051:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39153:612::-;39252:13;39293:17;39301:8;39293:7;:17::i;:::-;39277:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;39384:28;39415:10;:8;:10::i;:::-;39384:41;;39438:20;39461:8;39438:31;;39497:1;39480:14;;:18;39476:103;;;39570:1;39558:9;;39553:1;39536:14;;39525:8;:25;;;;:::i;:::-;:29;;;;:::i;:::-;39524:43;;;;:::i;:::-;:47;;;;:::i;:::-;39509:62;;39476:103;39630:1;39605:14;39599:28;:32;:160;;;;;;;;;;;;;;;;;39679:14;39695:23;:12;:21;:23::i;:::-;39720:13;39662:72;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;39599:160;39585:174;;;;39153:612;;;:::o;36931:211::-;36973:4;36996:6;;;;;;;;;;;36995:7;:141;;;;;37025:111;37037:9;:14;;;;;;;;;;;;37053:9;:15;;;;;;;;;;;;37070:9;:13;;;;;;;;;;;;37085:9;:14;;;;;;;;;;;;37101:9;:16;;;;;;;;;;;;37119:9;:16;;;;;;;;;;;;37025:11;:111::i;:::-;37006:15;:130;;36995:141;36988:148;;36931:211;:::o;36205:31::-;;;;:::o;40450:122::-;11664:12;:10;:12::i;:::-;11653:23;;:7;:5;:7::i;:::-;:23;;;11645:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40549:17:::1;40533:13;:33;;;;;;;;;;;;:::i;:::-;;40450:122:::0;:::o;23085:164::-;23182:4;23206:18;:25;23225:5;23206:25;;;;;;;;;;;;;;;:35;23232:8;23206:35;;;;;;;;;;;;;;;;;;;;;;;;;23199:42;;23085:164;;;;:::o;12299:186::-;11664:12;:10;:12::i;:::-;11653:23;;:7;:5;:7::i;:::-;:23;;;11645:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12406:1:::1;12386:22;;:8;:22;;;;12378:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;12460:19;12470:8;12460:9;:19::i;:::-;12299:186:::0;:::o;18787:153::-;18872:4;18909:25;18894:40;;;:11;:40;;;;18887:47;;18787:153;;;:::o;10864:94::-;10917:7;10942:10;10935:17;;10864:94;:::o;25820:127::-;25885:4;25937:1;25909:30;;:7;:16;25917:7;25909:16;;;;;;;;;;;;;;;;;;;;;:30;;;;25902:37;;25820:127;;;:::o;29802:174::-;29904:2;29877:15;:24;29893:7;29877:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;29960:7;29956:2;29922:46;;29931:23;29946:7;29931:14;:23::i;:::-;29922:46;;;;;;;;;;;;29802:174;;:::o;26114:348::-;26207:4;26232:16;26240:7;26232;:16::i;:::-;26224:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26308:13;26324:23;26339:7;26324:14;:23::i;:::-;26308:39;;26377:5;26366:16;;:7;:16;;;:51;;;;26410:7;26386:31;;:20;26398:7;26386:11;:20::i;:::-;:31;;;26366:51;:87;;;;26421:32;26438:5;26445:7;26421:16;:32::i;:::-;26366:87;26358:96;;;26114:348;;;;:::o;29106:578::-;29265:4;29238:31;;:23;29253:7;29238:14;:23::i;:::-;:31;;;29230:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;29348:1;29334:16;;:2;:16;;;;29326:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;29404:39;29425:4;29431:2;29435:7;29404:20;:39::i;:::-;29508:29;29525:1;29529:7;29508:8;:29::i;:::-;29569:1;29550:9;:15;29560:4;29550:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;29598:1;29581:9;:13;29591:2;29581:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29629:2;29610:7;:16;29618:7;29610:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29668:7;29664:2;29649:27;;29658:4;29649:27;;;;;;;;;;;;29106:578;;;:::o;9074:723::-;9130:13;9360:1;9351:5;:10;9347:53;;;9378:10;;;;;;;;;;;;;;;;;;;;;9347:53;9410:12;9425:5;9410:20;;9441:14;9466:78;9481:1;9473:4;:9;9466:78;;9499:8;;;;;:::i;:::-;;;;9530:2;9522:10;;;;;:::i;:::-;;;9466:78;;;9554:19;9586:6;9576:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9554:39;;9604:154;9620:1;9611:5;:10;9604:154;;9648:1;9638:11;;;;;:::i;:::-;;;9715:2;9707:5;:10;;;;:::i;:::-;9694:2;:24;;;;:::i;:::-;9681:39;;9664:6;9671;9664:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;9744:2;9735:11;;;;;:::i;:::-;;;9604:154;;;9782:6;9768:21;;;;;9074:723;;;;:::o;37271:339::-;37352:6;;;;;;;;;;;37351:7;37343:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;37434:9;;37419:11;37409:7;;:21;;;;:::i;:::-;:34;;37401:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;37494:9;37506:1;37494:13;;37489:87;37514:11;37509:1;:16;37489:87;;37541:27;37551:3;37566:1;37556:7;;:11;;;;:::i;:::-;37541:9;:27::i;:::-;37527:3;;;;;:::i;:::-;;;;37489:87;;;;37593:11;37582:7;;:22;;;;;;;:::i;:::-;;;;;;;;37271:339;;:::o;37616:120::-;37671:7;37721;37704:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;37694:36;;;;;;37687:43;;37616:120;;;:::o;37742:161::-;37825:4;37845:52;37864:5;37871:14;;37887:9;37845:18;:52::i;:::-;37838:59;;37742:161;;;;:::o;28409:360::-;28469:13;28485:23;28500:7;28485:14;:23::i;:::-;28469:39;;28521:48;28542:5;28557:1;28561:7;28521:20;:48::i;:::-;28610:29;28627:1;28631:7;28610:8;:29::i;:::-;28672:1;28652:9;:16;28662:5;28652:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;28691:7;:16;28699:7;28691:16;;;;;;;;;;;;28684:23;;;;;;;;;;;28753:7;28749:1;28725:36;;28734:5;28725:36;;;;;;;;;;;;28458:311;28409:360;:::o;12491:165::-;12545:16;12564:6;;;;;;;;;;;12545:25;;12588:8;12579:6;;:17;;;;;;;;;;;;;;;;;;12641:8;12610:40;;12631:8;12610:40;;;;;;;;;;;;12536:120;12491:165;:::o;25192:315::-;25349:28;25359:4;25365:2;25369:7;25349:9;:28::i;:::-;25396:48;25419:4;25425:2;25429:7;25438:5;25396:22;:48::i;:::-;25388:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25192:315;;;;:::o;37163:102::-;37223:13;37252:7;37245:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37163:102;:::o;31912:126::-;;;;:::o;26804:110::-;26880:26;26890:2;26894:7;26880:26;;;;;;;;;;;;:9;:26::i;:::-;26804:110;;:::o;35068:830::-;35193:4;35210:20;35233:4;35210:27;;35255:9;35250:525;35274:5;:12;35270:1;:16;35250:525;;;35308:20;35331:5;35337:1;35331:8;;;;;;;;:::i;:::-;;;;;;;;35308:31;;35376:12;35360;:28;35356:408;;35530:12;35544;35513:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;35503:55;;;;;;35488:70;;35356:408;;;35720:12;35734;35703:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;35693:55;;;;;;35678:70;;35356:408;35293:482;35288:3;;;;;:::i;:::-;;;;35250:525;;;;35886:4;35870:12;:20;35863:27;;;35068:830;;;;;:::o;30541:799::-;30696:4;30717:15;:2;:13;;;:15::i;:::-;30713:620;;;30769:2;30753:36;;;30790:12;:10;:12::i;:::-;30804:4;30810:7;30819:5;30753:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30749:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31012:1;30995:6;:13;:18;30991:272;;;31038:60;;;;;;;;;;:::i;:::-;;;;;;;;30991:272;31213:6;31207:13;31198:6;31194:2;31190:15;31183:38;30749:529;30886:41;;;30876:51;;;:6;:51;;;;30869:58;;;;;30713:620;31317:4;31310:11;;30541:799;;;;;;;:::o;27141:321::-;27271:18;27277:2;27281:7;27271:5;:18::i;:::-;27322:54;27353:1;27357:2;27361:7;27370:5;27322:22;:54::i;:::-;27300:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;27141:321;;;:::o;1555:387::-;1615:4;1823:12;1890:7;1878:20;1870:28;;1933:1;1926:4;:8;1919:15;;;1555:387;;;:::o;27798:382::-;27892:1;27878:16;;:2;:16;;;;27870:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;27951:16;27959:7;27951;:16::i;:::-;27950:17;27942:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28013:45;28042:1;28046:2;28050:7;28013:20;:45::i;:::-;28088:1;28071:9;:13;28081:2;28071:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28119:2;28100:7;:16;28108:7;28100:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28164:7;28160:2;28139:33;;28156:1;28139:33;;;;;;;;;;;;27798: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:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:139::-;1762:5;1800:6;1787:20;1778:29;;1816:33;1843:5;1816:33;:::i;:::-;1716:139;;;;:::o;1861:137::-;1906:5;1944:6;1931:20;1922:29;;1960:32;1986:5;1960:32;:::i;:::-;1861:137;;;;:::o;2004:141::-;2060:5;2091:6;2085:13;2076:22;;2107:32;2133:5;2107:32;:::i;:::-;2004:141;;;;:::o;2164:338::-;2219:5;2268:3;2261:4;2253:6;2249:17;2245:27;2235:122;;2276:79;;:::i;:::-;2235:122;2393:6;2380:20;2418:78;2492:3;2484:6;2477:4;2469:6;2465:17;2418:78;:::i;:::-;2409:87;;2225:277;2164:338;;;;:::o;2522:340::-;2578:5;2627:3;2620:4;2612:6;2608:17;2604:27;2594:122;;2635:79;;:::i;:::-;2594:122;2752:6;2739:20;2777:79;2852:3;2844:6;2837:4;2829:6;2825:17;2777:79;:::i;:::-;2768:88;;2584:278;2522:340;;;;:::o;2868:137::-;2913:5;2951:6;2938:20;2929:29;;2967:32;2993:5;2967:32;:::i;:::-;2868:137;;;;:::o;3011:139::-;3057:5;3095:6;3082:20;3073:29;;3111:33;3138:5;3111:33;:::i;:::-;3011:139;;;;:::o;3156:135::-;3200:5;3238:6;3225:20;3216:29;;3254:31;3279:5;3254:31;:::i;:::-;3156:135;;;;:::o;3297:329::-;3356:6;3405:2;3393:9;3384:7;3380:23;3376:32;3373:119;;;3411:79;;:::i;:::-;3373:119;3531:1;3556:53;3601:7;3592:6;3581:9;3577:22;3556:53;:::i;:::-;3546:63;;3502:117;3297:329;;;;:::o;3632:474::-;3700:6;3708;3757:2;3745:9;3736:7;3732:23;3728:32;3725:119;;;3763:79;;:::i;:::-;3725:119;3883:1;3908:53;3953:7;3944:6;3933:9;3929:22;3908:53;:::i;:::-;3898:63;;3854:117;4010:2;4036:53;4081:7;4072:6;4061:9;4057:22;4036:53;:::i;:::-;4026:63;;3981:118;3632:474;;;;;:::o;4112:619::-;4189:6;4197;4205;4254:2;4242:9;4233:7;4229:23;4225:32;4222:119;;;4260:79;;:::i;:::-;4222:119;4380:1;4405:53;4450:7;4441:6;4430:9;4426:22;4405:53;:::i;:::-;4395:63;;4351:117;4507:2;4533:53;4578:7;4569:6;4558:9;4554:22;4533:53;:::i;:::-;4523:63;;4478:118;4635:2;4661:53;4706:7;4697:6;4686:9;4682:22;4661:53;:::i;:::-;4651:63;;4606:118;4112:619;;;;;:::o;4737:943::-;4832:6;4840;4848;4856;4905:3;4893:9;4884:7;4880:23;4876:33;4873:120;;;4912:79;;:::i;:::-;4873:120;5032:1;5057:53;5102:7;5093:6;5082:9;5078:22;5057:53;:::i;:::-;5047:63;;5003:117;5159:2;5185:53;5230:7;5221:6;5210:9;5206:22;5185:53;:::i;:::-;5175:63;;5130:118;5287:2;5313:53;5358:7;5349:6;5338:9;5334:22;5313:53;:::i;:::-;5303:63;;5258:118;5443:2;5432:9;5428:18;5415:32;5474:18;5466:6;5463:30;5460:117;;;5496:79;;:::i;:::-;5460:117;5601:62;5655:7;5646:6;5635:9;5631:22;5601:62;:::i;:::-;5591:72;;5386:287;4737:943;;;;;;;:::o;5686:468::-;5751:6;5759;5808:2;5796:9;5787:7;5783:23;5779:32;5776:119;;;5814:79;;:::i;:::-;5776:119;5934:1;5959:53;6004:7;5995:6;5984:9;5980:22;5959:53;:::i;:::-;5949:63;;5905:117;6061:2;6087:50;6129:7;6120:6;6109:9;6105:22;6087:50;:::i;:::-;6077:60;;6032:115;5686:468;;;;;:::o;6160:474::-;6228:6;6236;6285:2;6273:9;6264:7;6260:23;6256:32;6253:119;;;6291:79;;:::i;:::-;6253:119;6411:1;6436:53;6481:7;6472:6;6461:9;6457:22;6436:53;:::i;:::-;6426:63;;6382:117;6538:2;6564:53;6609:7;6600:6;6589:9;6585:22;6564:53;:::i;:::-;6554:63;;6509:118;6160:474;;;;;:::o;6640:323::-;6696:6;6745:2;6733:9;6724:7;6720:23;6716:32;6713:119;;;6751:79;;:::i;:::-;6713:119;6871:1;6896:50;6938:7;6929:6;6918:9;6914:22;6896:50;:::i;:::-;6886:60;;6842:114;6640:323;;;;:::o;6969:329::-;7028:6;7077:2;7065:9;7056:7;7052:23;7048:32;7045:119;;;7083:79;;:::i;:::-;7045:119;7203:1;7228:53;7273:7;7264:6;7253:9;7249:22;7228:53;:::i;:::-;7218:63;;7174:117;6969:329;;;;:::o;7304:327::-;7362:6;7411:2;7399:9;7390:7;7386:23;7382:32;7379:119;;;7417:79;;:::i;:::-;7379:119;7537:1;7562:52;7606:7;7597:6;7586:9;7582:22;7562:52;:::i;:::-;7552:62;;7508:116;7304:327;;;;:::o;7637:349::-;7706:6;7755:2;7743:9;7734:7;7730:23;7726:32;7723:119;;;7761:79;;:::i;:::-;7723:119;7881:1;7906:63;7961:7;7952:6;7941:9;7937:22;7906:63;:::i;:::-;7896:73;;7852:127;7637:349;;;;:::o;7992:509::-;8061:6;8110:2;8098:9;8089:7;8085:23;8081:32;8078:119;;;8116:79;;:::i;:::-;8078:119;8264:1;8253:9;8249:17;8236:31;8294:18;8286:6;8283:30;8280:117;;;8316:79;;:::i;:::-;8280:117;8421:63;8476:7;8467:6;8456:9;8452:22;8421:63;:::i;:::-;8411:73;;8207:287;7992:509;;;;:::o;8507:327::-;8565:6;8614:2;8602:9;8593:7;8589:23;8585:32;8582:119;;;8620:79;;:::i;:::-;8582:119;8740:1;8765:52;8809:7;8800:6;8789:9;8785:22;8765:52;:::i;:::-;8755:62;;8711:116;8507:327;;;;:::o;8840:702::-;8934:6;8942;8950;8999:2;8987:9;8978:7;8974:23;8970:32;8967:119;;;9005:79;;:::i;:::-;8967:119;9125:1;9150:52;9194:7;9185:6;9174:9;9170:22;9150:52;:::i;:::-;9140:62;;9096:116;9279:2;9268:9;9264:18;9251:32;9310:18;9302:6;9299:30;9296:117;;;9332:79;;:::i;:::-;9296:117;9445:80;9517:7;9508:6;9497:9;9493:22;9445:80;:::i;:::-;9427:98;;;;9222:313;8840:702;;;;;:::o;9548:893::-;9634:6;9642;9650;9658;9666;9715:3;9703:9;9694:7;9690:23;9686:33;9683:120;;;9722:79;;:::i;:::-;9683:120;9842:1;9867:52;9911:7;9902:6;9891:9;9887:22;9867:52;:::i;:::-;9857:62;;9813:116;9968:2;9994:51;10037:7;10028:6;10017:9;10013:22;9994:51;:::i;:::-;9984:61;;9939:116;10094:2;10120:51;10163:7;10154:6;10143:9;10139:22;10120:51;:::i;:::-;10110:61;;10065:116;10220:2;10246:51;10289:7;10280:6;10269:9;10265:22;10246:51;:::i;:::-;10236:61;;10191:116;10346:3;10373:51;10416:7;10407:6;10396:9;10392:22;10373:51;:::i;:::-;10363:61;;10317:117;9548:893;;;;;;;;:::o;10447:1035::-;10540:6;10548;10556;10564;10572;10580;10629:3;10617:9;10608:7;10604:23;10600:33;10597:120;;;10636:79;;:::i;:::-;10597:120;10756:1;10781:52;10825:7;10816:6;10805:9;10801:22;10781:52;:::i;:::-;10771:62;;10727:116;10882:2;10908:51;10951:7;10942:6;10931:9;10927:22;10908:51;:::i;:::-;10898:61;;10853:116;11008:2;11034:51;11077:7;11068:6;11057:9;11053:22;11034:51;:::i;:::-;11024:61;;10979:116;11134:2;11160:51;11203:7;11194:6;11183:9;11179:22;11160:51;:::i;:::-;11150:61;;11105:116;11260:3;11287:51;11330:7;11321:6;11310:9;11306:22;11287:51;:::i;:::-;11277:61;;11231:117;11387:3;11414:51;11457:7;11448:6;11437:9;11433:22;11414:51;:::i;:::-;11404:61;;11358:117;10447:1035;;;;;;;;:::o;11488:329::-;11547:6;11596:2;11584:9;11575:7;11571:23;11567:32;11564:119;;;11602:79;;:::i;:::-;11564:119;11722:1;11747:53;11792:7;11783:6;11772:9;11768:22;11747:53;:::i;:::-;11737:63;;11693:117;11488:329;;;;:::o;11823:118::-;11910:24;11928:5;11910:24;:::i;:::-;11905:3;11898:37;11823:118;;:::o;11947:157::-;12052:45;12072:24;12090:5;12072:24;:::i;:::-;12052:45;:::i;:::-;12047:3;12040:58;11947:157;;:::o;12110:109::-;12191:21;12206:5;12191:21;:::i;:::-;12186:3;12179:34;12110:109;;:::o;12225:157::-;12330:45;12350:24;12368:5;12350:24;:::i;:::-;12330:45;:::i;:::-;12325:3;12318:58;12225:157;;:::o;12388:360::-;12474:3;12502:38;12534:5;12502:38;:::i;:::-;12556:70;12619:6;12614:3;12556:70;:::i;:::-;12549:77;;12635:52;12680:6;12675:3;12668:4;12661:5;12657:16;12635:52;:::i;:::-;12712:29;12734:6;12712:29;:::i;:::-;12707:3;12703:39;12696:46;;12478:270;12388:360;;;;:::o;12754:364::-;12842:3;12870:39;12903:5;12870:39;:::i;:::-;12925:71;12989:6;12984:3;12925:71;:::i;:::-;12918:78;;13005:52;13050:6;13045:3;13038:4;13031:5;13027:16;13005:52;:::i;:::-;13082:29;13104:6;13082:29;:::i;:::-;13077:3;13073:39;13066:46;;12846:272;12754:364;;;;:::o;13124:377::-;13230:3;13258:39;13291:5;13258:39;:::i;:::-;13313:89;13395:6;13390:3;13313:89;:::i;:::-;13306:96;;13411:52;13456:6;13451:3;13444:4;13437:5;13433:16;13411:52;:::i;:::-;13488:6;13483:3;13479:16;13472:23;;13234:267;13124:377;;;;:::o;13531:845::-;13634:3;13671:5;13665:12;13700:36;13726:9;13700:36;:::i;:::-;13752:89;13834:6;13829:3;13752:89;:::i;:::-;13745:96;;13872:1;13861:9;13857:17;13888:1;13883:137;;;;14034:1;14029:341;;;;13850:520;;13883:137;13967:4;13963:9;13952;13948:25;13943:3;13936:38;14003:6;13998:3;13994:16;13987:23;;13883:137;;14029:341;14096:38;14128:5;14096:38;:::i;:::-;14156:1;14170:154;14184:6;14181:1;14178:13;14170:154;;;14258:7;14252:14;14248:1;14243:3;14239:11;14232:35;14308:1;14299:7;14295:15;14284:26;;14206:4;14203:1;14199:12;14194:17;;14170:154;;;14353:6;14348:3;14344:16;14337:23;;14036:334;;13850:520;;13638:738;;13531:845;;;;:::o;14382:366::-;14524:3;14545:67;14609:2;14604:3;14545:67;:::i;:::-;14538:74;;14621:93;14710:3;14621:93;:::i;:::-;14739:2;14734:3;14730:12;14723:19;;14382:366;;;:::o;14754:::-;14896:3;14917:67;14981:2;14976:3;14917:67;:::i;:::-;14910:74;;14993:93;15082:3;14993:93;:::i;:::-;15111:2;15106:3;15102:12;15095:19;;14754:366;;;:::o;15126:::-;15268:3;15289:67;15353:2;15348:3;15289:67;:::i;:::-;15282:74;;15365:93;15454:3;15365:93;:::i;:::-;15483:2;15478:3;15474:12;15467:19;;15126:366;;;:::o;15498:::-;15640:3;15661:67;15725:2;15720:3;15661:67;:::i;:::-;15654:74;;15737:93;15826:3;15737:93;:::i;:::-;15855:2;15850:3;15846:12;15839:19;;15498:366;;;:::o;15870:::-;16012:3;16033:67;16097:2;16092:3;16033:67;:::i;:::-;16026:74;;16109:93;16198:3;16109:93;:::i;:::-;16227:2;16222:3;16218:12;16211:19;;15870:366;;;:::o;16242:::-;16384:3;16405:67;16469:2;16464:3;16405:67;:::i;:::-;16398:74;;16481:93;16570:3;16481:93;:::i;:::-;16599:2;16594:3;16590:12;16583:19;;16242:366;;;:::o;16614:::-;16756:3;16777:67;16841:2;16836:3;16777:67;:::i;:::-;16770:74;;16853:93;16942:3;16853:93;:::i;:::-;16971:2;16966:3;16962:12;16955:19;;16614:366;;;:::o;16986:::-;17128:3;17149:67;17213:2;17208:3;17149:67;:::i;:::-;17142:74;;17225:93;17314:3;17225:93;:::i;:::-;17343:2;17338:3;17334:12;17327:19;;16986:366;;;:::o;17358:::-;17500:3;17521:67;17585:2;17580:3;17521:67;:::i;:::-;17514:74;;17597:93;17686:3;17597:93;:::i;:::-;17715:2;17710:3;17706:12;17699:19;;17358:366;;;:::o;17730:::-;17872:3;17893:67;17957:2;17952:3;17893:67;:::i;:::-;17886:74;;17969:93;18058:3;17969:93;:::i;:::-;18087:2;18082:3;18078:12;18071:19;;17730:366;;;:::o;18102:::-;18244:3;18265:67;18329:2;18324:3;18265:67;:::i;:::-;18258:74;;18341:93;18430:3;18341:93;:::i;:::-;18459:2;18454:3;18450:12;18443:19;;18102:366;;;:::o;18474:::-;18616:3;18637:67;18701:2;18696:3;18637:67;:::i;:::-;18630:74;;18713:93;18802:3;18713:93;:::i;:::-;18831:2;18826:3;18822:12;18815:19;;18474:366;;;:::o;18846:::-;18988:3;19009:67;19073:2;19068:3;19009:67;:::i;:::-;19002:74;;19085:93;19174:3;19085:93;:::i;:::-;19203:2;19198:3;19194:12;19187:19;;18846:366;;;:::o;19218:::-;19360:3;19381:67;19445:2;19440:3;19381:67;:::i;:::-;19374:74;;19457:93;19546:3;19457:93;:::i;:::-;19575:2;19570:3;19566:12;19559:19;;19218:366;;;:::o;19590:::-;19732:3;19753:67;19817:2;19812:3;19753:67;:::i;:::-;19746:74;;19829:93;19918:3;19829:93;:::i;:::-;19947:2;19942:3;19938:12;19931:19;;19590:366;;;:::o;19962:400::-;20122:3;20143:84;20225:1;20220:3;20143:84;:::i;:::-;20136:91;;20236:93;20325:3;20236:93;:::i;:::-;20354:1;20349:3;20345:11;20338:18;;19962:400;;;:::o;20368:366::-;20510:3;20531:67;20595:2;20590:3;20531:67;:::i;:::-;20524:74;;20607:93;20696:3;20607:93;:::i;:::-;20725:2;20720:3;20716:12;20709:19;;20368:366;;;:::o;20740:::-;20882:3;20903:67;20967:2;20962:3;20903:67;:::i;:::-;20896:74;;20979:93;21068:3;20979:93;:::i;:::-;21097:2;21092:3;21088:12;21081:19;;20740:366;;;:::o;21112:::-;21254:3;21275:67;21339:2;21334:3;21275:67;:::i;:::-;21268:74;;21351:93;21440:3;21351:93;:::i;:::-;21469:2;21464:3;21460:12;21453:19;;21112:366;;;:::o;21484:::-;21626:3;21647:67;21711:2;21706:3;21647:67;:::i;:::-;21640:74;;21723:93;21812:3;21723:93;:::i;:::-;21841:2;21836:3;21832:12;21825:19;;21484:366;;;:::o;21856:::-;21998:3;22019:67;22083:2;22078:3;22019:67;:::i;:::-;22012:74;;22095:93;22184:3;22095:93;:::i;:::-;22213:2;22208:3;22204:12;22197:19;;21856:366;;;:::o;22228:::-;22370:3;22391:67;22455:2;22450:3;22391:67;:::i;:::-;22384:74;;22467:93;22556:3;22467:93;:::i;:::-;22585:2;22580:3;22576:12;22569:19;;22228:366;;;:::o;22600:::-;22742:3;22763:67;22827:2;22822:3;22763:67;:::i;:::-;22756:74;;22839:93;22928:3;22839:93;:::i;:::-;22957:2;22952:3;22948:12;22941:19;;22600:366;;;:::o;22972:::-;23114:3;23135:67;23199:2;23194:3;23135:67;:::i;:::-;23128:74;;23211:93;23300:3;23211:93;:::i;:::-;23329:2;23324:3;23320:12;23313:19;;22972:366;;;:::o;23344:402::-;23504:3;23525:85;23607:2;23602:3;23525:85;:::i;:::-;23518:92;;23619:93;23708:3;23619:93;:::i;:::-;23737:2;23732:3;23728:12;23721:19;;23344:402;;;:::o;23752:366::-;23894:3;23915:67;23979:2;23974:3;23915:67;:::i;:::-;23908:74;;23991:93;24080:3;23991:93;:::i;:::-;24109:2;24104:3;24100:12;24093:19;;23752:366;;;:::o;24124:::-;24266:3;24287:67;24351:2;24346:3;24287:67;:::i;:::-;24280:74;;24363:93;24452:3;24363:93;:::i;:::-;24481:2;24476:3;24472:12;24465:19;;24124:366;;;:::o;24496:::-;24638:3;24659:67;24723:2;24718:3;24659:67;:::i;:::-;24652:74;;24735:93;24824:3;24735:93;:::i;:::-;24853:2;24848:3;24844:12;24837:19;;24496:366;;;:::o;24868:115::-;24953:23;24970:5;24953:23;:::i;:::-;24948:3;24941:36;24868:115;;:::o;24989:118::-;25076:24;25094:5;25076:24;:::i;:::-;25071:3;25064:37;24989:118;;:::o;25113:157::-;25218:45;25238:24;25256:5;25238:24;:::i;:::-;25218:45;:::i;:::-;25213:3;25206:58;25113:157;;:::o;25276:112::-;25359:22;25375:5;25359:22;:::i;:::-;25354:3;25347:35;25276:112;;:::o;25394:256::-;25506:3;25521:75;25592:3;25583:6;25521:75;:::i;:::-;25621:2;25616:3;25612:12;25605:19;;25641:3;25634:10;;25394:256;;;;:::o;25656:397::-;25796:3;25811:75;25882:3;25873:6;25811:75;:::i;:::-;25911:2;25906:3;25902:12;25895:19;;25924:75;25995:3;25986:6;25924:75;:::i;:::-;26024:2;26019:3;26015:12;26008:19;;26044:3;26037:10;;25656:397;;;;;:::o;26059:538::-;26227:3;26242:75;26313:3;26304:6;26242:75;:::i;:::-;26342:2;26337:3;26333:12;26326:19;;26355:75;26426:3;26417:6;26355:75;:::i;:::-;26455:2;26450:3;26446:12;26439:19;;26468:75;26539:3;26530:6;26468:75;:::i;:::-;26568:2;26563:3;26559:12;26552:19;;26588:3;26581:10;;26059:538;;;;;;:::o;26603:589::-;26828:3;26850:95;26941:3;26932:6;26850:95;:::i;:::-;26843:102;;26962:95;27053:3;27044:6;26962:95;:::i;:::-;26955:102;;27074:92;27162:3;27153:6;27074:92;:::i;:::-;27067:99;;27183:3;27176:10;;26603:589;;;;;;:::o;27198:807::-;27532:3;27554:148;27698:3;27554:148;:::i;:::-;27547:155;;27719:95;27810:3;27801:6;27719:95;:::i;:::-;27712:102;;27831:148;27975:3;27831:148;:::i;:::-;27824:155;;27996:3;27989:10;;27198:807;;;;:::o;28011:222::-;28104:4;28142:2;28131:9;28127:18;28119:26;;28155:71;28223:1;28212:9;28208:17;28199:6;28155:71;:::i;:::-;28011:222;;;;:::o;28239:640::-;28434:4;28472:3;28461:9;28457:19;28449:27;;28486:71;28554:1;28543:9;28539:17;28530:6;28486:71;:::i;:::-;28567:72;28635:2;28624:9;28620:18;28611:6;28567:72;:::i;:::-;28649;28717:2;28706:9;28702:18;28693:6;28649:72;:::i;:::-;28768:9;28762:4;28758:20;28753:2;28742:9;28738:18;28731:48;28796:76;28867:4;28858:6;28796:76;:::i;:::-;28788:84;;28239:640;;;;;;;:::o;28885:210::-;28972:4;29010:2;28999:9;28995:18;28987:26;;29023:65;29085:1;29074:9;29070:17;29061:6;29023:65;:::i;:::-;28885:210;;;;:::o;29101:313::-;29214:4;29252:2;29241:9;29237:18;29229:26;;29301:9;29295:4;29291:20;29287:1;29276:9;29272:17;29265:47;29329:78;29402:4;29393:6;29329:78;:::i;:::-;29321:86;;29101:313;;;;:::o;29420:419::-;29586:4;29624:2;29613:9;29609:18;29601:26;;29673:9;29667:4;29663:20;29659:1;29648:9;29644:17;29637:47;29701:131;29827:4;29701:131;:::i;:::-;29693:139;;29420:419;;;:::o;29845:::-;30011:4;30049:2;30038:9;30034:18;30026:26;;30098:9;30092:4;30088:20;30084:1;30073:9;30069:17;30062:47;30126:131;30252:4;30126:131;:::i;:::-;30118:139;;29845:419;;;:::o;30270:::-;30436:4;30474:2;30463:9;30459:18;30451:26;;30523:9;30517:4;30513:20;30509:1;30498:9;30494:17;30487:47;30551:131;30677:4;30551:131;:::i;:::-;30543:139;;30270:419;;;:::o;30695:::-;30861:4;30899:2;30888:9;30884:18;30876:26;;30948:9;30942:4;30938:20;30934:1;30923:9;30919:17;30912:47;30976:131;31102:4;30976:131;:::i;:::-;30968:139;;30695:419;;;:::o;31120:::-;31286:4;31324:2;31313:9;31309:18;31301:26;;31373:9;31367:4;31363:20;31359:1;31348:9;31344:17;31337:47;31401:131;31527:4;31401:131;:::i;:::-;31393:139;;31120:419;;;:::o;31545:::-;31711:4;31749:2;31738:9;31734:18;31726:26;;31798:9;31792:4;31788:20;31784:1;31773:9;31769:17;31762:47;31826:131;31952:4;31826:131;:::i;:::-;31818:139;;31545:419;;;:::o;31970:::-;32136:4;32174:2;32163:9;32159:18;32151:26;;32223:9;32217:4;32213:20;32209:1;32198:9;32194:17;32187:47;32251:131;32377:4;32251:131;:::i;:::-;32243:139;;31970:419;;;:::o;32395:::-;32561:4;32599:2;32588:9;32584:18;32576:26;;32648:9;32642:4;32638:20;32634:1;32623:9;32619:17;32612:47;32676:131;32802:4;32676:131;:::i;:::-;32668:139;;32395:419;;;:::o;32820:::-;32986:4;33024:2;33013:9;33009:18;33001:26;;33073:9;33067:4;33063:20;33059:1;33048:9;33044:17;33037:47;33101:131;33227:4;33101:131;:::i;:::-;33093:139;;32820:419;;;:::o;33245:::-;33411:4;33449:2;33438:9;33434:18;33426:26;;33498:9;33492:4;33488:20;33484:1;33473:9;33469:17;33462:47;33526:131;33652:4;33526:131;:::i;:::-;33518:139;;33245:419;;;:::o;33670:::-;33836:4;33874:2;33863:9;33859:18;33851:26;;33923:9;33917:4;33913:20;33909:1;33898:9;33894:17;33887:47;33951:131;34077:4;33951:131;:::i;:::-;33943:139;;33670:419;;;:::o;34095:::-;34261:4;34299:2;34288:9;34284:18;34276:26;;34348:9;34342:4;34338:20;34334:1;34323:9;34319:17;34312:47;34376:131;34502:4;34376:131;:::i;:::-;34368:139;;34095:419;;;:::o;34520:::-;34686:4;34724:2;34713:9;34709:18;34701:26;;34773:9;34767:4;34763:20;34759:1;34748:9;34744:17;34737:47;34801:131;34927:4;34801:131;:::i;:::-;34793:139;;34520:419;;;:::o;34945:::-;35111:4;35149:2;35138:9;35134:18;35126:26;;35198:9;35192:4;35188:20;35184:1;35173:9;35169:17;35162:47;35226:131;35352:4;35226:131;:::i;:::-;35218:139;;34945:419;;;:::o;35370:::-;35536:4;35574:2;35563:9;35559:18;35551:26;;35623:9;35617:4;35613:20;35609:1;35598:9;35594:17;35587:47;35651:131;35777:4;35651:131;:::i;:::-;35643:139;;35370:419;;;:::o;35795:::-;35961:4;35999:2;35988:9;35984:18;35976:26;;36048:9;36042:4;36038:20;36034:1;36023:9;36019:17;36012:47;36076:131;36202:4;36076:131;:::i;:::-;36068:139;;35795:419;;;:::o;36220:::-;36386:4;36424:2;36413:9;36409:18;36401:26;;36473:9;36467:4;36463:20;36459:1;36448:9;36444:17;36437:47;36501:131;36627:4;36501:131;:::i;:::-;36493:139;;36220:419;;;:::o;36645:::-;36811:4;36849:2;36838:9;36834:18;36826:26;;36898:9;36892:4;36888:20;36884:1;36873:9;36869:17;36862:47;36926:131;37052:4;36926:131;:::i;:::-;36918:139;;36645:419;;;:::o;37070:::-;37236:4;37274:2;37263:9;37259:18;37251:26;;37323:9;37317:4;37313:20;37309:1;37298:9;37294:17;37287:47;37351:131;37477:4;37351:131;:::i;:::-;37343:139;;37070:419;;;:::o;37495:::-;37661:4;37699:2;37688:9;37684:18;37676:26;;37748:9;37742:4;37738:20;37734:1;37723:9;37719:17;37712:47;37776:131;37902:4;37776:131;:::i;:::-;37768:139;;37495:419;;;:::o;37920:::-;38086:4;38124:2;38113:9;38109:18;38101:26;;38173:9;38167:4;38163:20;38159:1;38148:9;38144:17;38137:47;38201:131;38327:4;38201:131;:::i;:::-;38193:139;;37920:419;;;:::o;38345:::-;38511:4;38549:2;38538:9;38534:18;38526:26;;38598:9;38592:4;38588:20;38584:1;38573:9;38569:17;38562:47;38626:131;38752:4;38626:131;:::i;:::-;38618:139;;38345:419;;;:::o;38770:::-;38936:4;38974:2;38963:9;38959:18;38951:26;;39023:9;39017:4;39013:20;39009:1;38998:9;38994:17;38987:47;39051:131;39177:4;39051:131;:::i;:::-;39043:139;;38770:419;;;:::o;39195:::-;39361:4;39399:2;39388:9;39384:18;39376:26;;39448:9;39442:4;39438:20;39434:1;39423:9;39419:17;39412:47;39476:131;39602:4;39476:131;:::i;:::-;39468:139;;39195:419;;;:::o;39620:::-;39786:4;39824:2;39813:9;39809:18;39801:26;;39873:9;39867:4;39863:20;39859:1;39848:9;39844:17;39837:47;39901:131;40027:4;39901:131;:::i;:::-;39893:139;;39620:419;;;:::o;40045:::-;40211:4;40249:2;40238:9;40234:18;40226:26;;40298:9;40292:4;40288:20;40284:1;40273:9;40269:17;40262:47;40326:131;40452:4;40326:131;:::i;:::-;40318:139;;40045:419;;;:::o;40470:834::-;40705:4;40743:3;40732:9;40728:19;40720:27;;40757:69;40823:1;40812:9;40808:17;40799:6;40757:69;:::i;:::-;40836:68;40900:2;40889:9;40885:18;40876:6;40836:68;:::i;:::-;40914;40978:2;40967:9;40963:18;40954:6;40914:68;:::i;:::-;40992;41056:2;41045:9;41041:18;41032:6;40992:68;:::i;:::-;41070:69;41134:3;41123:9;41119:19;41110:6;41070:69;:::i;:::-;41149;41213:3;41202:9;41198:19;41189:6;41149:69;:::i;:::-;41228;41292:3;41281:9;41277:19;41268:6;41228:69;:::i;:::-;40470:834;;;;;;;;;;:::o;41310:222::-;41403:4;41441:2;41430:9;41426:18;41418:26;;41454:71;41522:1;41511:9;41507:17;41498:6;41454:71;:::i;:::-;41310:222;;;;:::o;41538:129::-;41572:6;41599:20;;:::i;:::-;41589:30;;41628:33;41656:4;41648:6;41628:33;:::i;:::-;41538:129;;;:::o;41673:75::-;41706:6;41739:2;41733:9;41723:19;;41673:75;:::o;41754:307::-;41815:4;41905:18;41897:6;41894:30;41891:56;;;41927:18;;:::i;:::-;41891:56;41965:29;41987:6;41965:29;:::i;:::-;41957:37;;42049:4;42043;42039:15;42031:23;;41754:307;;;:::o;42067:308::-;42129:4;42219:18;42211:6;42208:30;42205:56;;;42241:18;;:::i;:::-;42205:56;42279:29;42301:6;42279:29;:::i;:::-;42271:37;;42363:4;42357;42353:15;42345:23;;42067:308;;;:::o;42381:141::-;42430:4;42453:3;42445:11;;42476:3;42473:1;42466:14;42510:4;42507:1;42497:18;42489:26;;42381:141;;;:::o;42528:98::-;42579:6;42613:5;42607:12;42597:22;;42528:98;;;:::o;42632:99::-;42684:6;42718:5;42712:12;42702:22;;42632:99;;;:::o;42737:168::-;42820:11;42854:6;42849:3;42842:19;42894:4;42889:3;42885:14;42870:29;;42737:168;;;;:::o;42911:169::-;42995:11;43029:6;43024:3;43017:19;43069:4;43064:3;43060:14;43045:29;;42911:169;;;;:::o;43086:148::-;43188:11;43225:3;43210:18;;43086:148;;;;:::o;43240:305::-;43280:3;43299:20;43317:1;43299:20;:::i;:::-;43294:25;;43333:20;43351:1;43333:20;:::i;:::-;43328:25;;43487:1;43419:66;43415:74;43412:1;43409:81;43406:107;;;43493:18;;:::i;:::-;43406:107;43537:1;43534;43530:9;43523:16;;43240:305;;;;:::o;43551:185::-;43591:1;43608:20;43626:1;43608:20;:::i;:::-;43603:25;;43642:20;43660:1;43642:20;:::i;:::-;43637:25;;43681:1;43671:35;;43686:18;;:::i;:::-;43671:35;43728:1;43725;43721:9;43716:14;;43551:185;;;;:::o;43742:348::-;43782:7;43805:20;43823:1;43805:20;:::i;:::-;43800:25;;43839:20;43857:1;43839:20;:::i;:::-;43834:25;;44027:1;43959:66;43955:74;43952:1;43949:81;43944:1;43937:9;43930:17;43926:105;43923:131;;;44034:18;;:::i;:::-;43923:131;44082:1;44079;44075:9;44064:20;;43742:348;;;;:::o;44096:188::-;44135:4;44155:19;44172:1;44155:19;:::i;:::-;44150:24;;44188:19;44205:1;44188:19;:::i;:::-;44183:24;;44226:1;44223;44220:8;44217:34;;;44231:18;;:::i;:::-;44217:34;44276:1;44273;44269:9;44261:17;;44096:188;;;;:::o;44290:191::-;44330:4;44350:20;44368:1;44350:20;:::i;:::-;44345:25;;44384:20;44402:1;44384:20;:::i;:::-;44379:25;;44423:1;44420;44417:8;44414:34;;;44428:18;;:::i;:::-;44414:34;44473:1;44470;44466:9;44458:17;;44290:191;;;;:::o;44487:185::-;44525:4;44545:18;44561:1;44545:18;:::i;:::-;44540:23;;44577:18;44593:1;44577:18;:::i;:::-;44572:23;;44614:1;44611;44608:8;44605:34;;;44619:18;;:::i;:::-;44605:34;44664:1;44661;44657:9;44649:17;;44487:185;;;;:::o;44678:96::-;44715:7;44744:24;44762:5;44744:24;:::i;:::-;44733:35;;44678:96;;;:::o;44780:90::-;44814:7;44857:5;44850:13;44843:21;44832:32;;44780:90;;;:::o;44876:77::-;44913:7;44942:5;44931:16;;44876:77;;;:::o;44959:149::-;44995:7;45035:66;45028:5;45024:78;45013:89;;44959:149;;;:::o;45114:89::-;45150:7;45190:6;45183:5;45179:18;45168:29;;45114:89;;;:::o;45209:126::-;45246:7;45286:42;45279:5;45275:54;45264:65;;45209:126;;;:::o;45341:77::-;45378:7;45407:5;45396:16;;45341:77;;;:::o;45424:86::-;45459:7;45499:4;45492:5;45488:16;45477:27;;45424:86;;;:::o;45516:154::-;45600:6;45595:3;45590;45577:30;45662:1;45653:6;45648:3;45644:16;45637:27;45516:154;;;:::o;45676:307::-;45744:1;45754:113;45768:6;45765:1;45762:13;45754:113;;;45853:1;45848:3;45844:11;45838:18;45834:1;45829:3;45825:11;45818:39;45790:2;45787:1;45783:10;45778:15;;45754:113;;;45885:6;45882:1;45879:13;45876:101;;;45965:1;45956:6;45951:3;45947:16;45940:27;45876:101;45725:258;45676:307;;;:::o;45989:320::-;46033:6;46070:1;46064:4;46060:12;46050:22;;46117:1;46111:4;46107:12;46138:18;46128:81;;46194:4;46186:6;46182:17;46172:27;;46128:81;46256:2;46248:6;46245:14;46225:18;46222:38;46219:84;;;46275:18;;:::i;:::-;46219:84;46040:269;45989:320;;;:::o;46315:281::-;46398:27;46420:4;46398:27;:::i;:::-;46390:6;46386:40;46528:6;46516:10;46513:22;46492:18;46480:10;46477:34;46474:62;46471:88;;;46539:18;;:::i;:::-;46471:88;46579:10;46575:2;46568:22;46358:238;46315:281;;:::o;46602:171::-;46640:3;46663:23;46680:5;46663:23;:::i;:::-;46654:32;;46708:6;46701:5;46698:17;46695:43;;;46718:18;;:::i;:::-;46695:43;46765:1;46758:5;46754:13;46747:20;;46602:171;;;:::o;46779:233::-;46818:3;46841:24;46859:5;46841:24;:::i;:::-;46832:33;;46887:66;46880:5;46877:77;46874:103;;;46957:18;;:::i;:::-;46874:103;47004:1;46997:5;46993:13;46986:20;;46779:233;;;:::o;47018:100::-;47057:7;47086:26;47106:5;47086:26;:::i;:::-;47075:37;;47018:100;;;:::o;47124:79::-;47163:7;47192:5;47181:16;;47124:79;;;:::o;47209:94::-;47248:7;47277:20;47291:5;47277:20;:::i;:::-;47266:31;;47209:94;;;:::o;47309:79::-;47348:7;47377:5;47366:16;;47309:79;;;:::o;47394:173::-;47425:1;47442:19;47459:1;47442:19;:::i;:::-;47437:24;;47475:19;47492:1;47475:19;:::i;:::-;47470:24;;47513:1;47503:35;;47518:18;;:::i;:::-;47503:35;47559:1;47556;47552:9;47547:14;;47394:173;;;;:::o;47573:176::-;47605:1;47622:20;47640:1;47622:20;:::i;:::-;47617:25;;47656:20;47674:1;47656:20;:::i;:::-;47651:25;;47695:1;47685:35;;47700:18;;:::i;:::-;47685:35;47741:1;47738;47734:9;47729:14;;47573:176;;;;:::o;47755:180::-;47803:77;47800:1;47793:88;47900:4;47897:1;47890:15;47924:4;47921:1;47914:15;47941:180;47989:77;47986:1;47979:88;48086:4;48083:1;48076:15;48110:4;48107:1;48100:15;48127:180;48175:77;48172:1;48165:88;48272:4;48269:1;48262:15;48296:4;48293:1;48286:15;48313:180;48361:77;48358:1;48351:88;48458:4;48455:1;48448:15;48482:4;48479:1;48472:15;48499:180;48547:77;48544:1;48537:88;48644:4;48641:1;48634:15;48668:4;48665:1;48658:15;48685:117;48794:1;48791;48784:12;48808:117;48917:1;48914;48907:12;48931:117;49040:1;49037;49030:12;49054:117;49163:1;49160;49153:12;49177:117;49286:1;49283;49276:12;49300:117;49409:1;49406;49399:12;49423:102;49464:6;49515:2;49511:7;49506:2;49499:5;49495:14;49491:28;49481:38;;49423:102;;;:::o;49531:94::-;49564:8;49612:5;49608:2;49604:14;49583:35;;49531:94;;;:::o;49631:221::-;49771:34;49767:1;49759:6;49755:14;49748:58;49840:4;49835:2;49827:6;49823:15;49816:29;49631:221;:::o;49858:237::-;49998:34;49994:1;49986:6;49982:14;49975:58;50067:20;50062:2;50054:6;50050:15;50043:45;49858:237;:::o;50101:225::-;50241:34;50237:1;50229:6;50225:14;50218:58;50310:8;50305:2;50297:6;50293:15;50286:33;50101:225;:::o;50332:178::-;50472:30;50468:1;50460:6;50456:14;50449:54;50332:178;:::o;50516:223::-;50656:34;50652:1;50644:6;50640:14;50633:58;50725:6;50720:2;50712:6;50708:15;50701:31;50516:223;:::o;50745:221::-;50885:34;50881:1;50873:6;50869:14;50862:58;50954:4;50949:2;50941:6;50937:15;50930:29;50745:221;:::o;50972:223::-;51112:34;51108:1;51100:6;51096:14;51089:58;51181:6;51176:2;51168:6;51164:15;51157:31;50972:223;:::o;51201:232::-;51341:34;51337:1;51329:6;51325:14;51318:58;51410:15;51405:2;51397:6;51393:15;51386:40;51201:232;:::o;51439:175::-;51579:27;51575:1;51567:6;51563:14;51556:51;51439:175;:::o;51620:181::-;51760:33;51756:1;51748:6;51744:14;51737:57;51620:181;:::o;51807:231::-;51947:34;51943:1;51935:6;51931:14;51924:58;52016:14;52011:2;52003:6;51999:15;51992:39;51807:231;:::o;52044:179::-;52184:31;52180:1;52172:6;52168:14;52161:55;52044:179;:::o;52229:243::-;52369:34;52365:1;52357:6;52353:14;52346:58;52438:26;52433:2;52425:6;52421:15;52414:51;52229:243;:::o;52478:229::-;52618:34;52614:1;52606:6;52602:14;52595:58;52687:12;52682:2;52674:6;52670:15;52663:37;52478:229;:::o;52713:228::-;52853:34;52849:1;52841:6;52837:14;52830:58;52922:11;52917:2;52909:6;52905:15;52898:36;52713:228;:::o;52947:157::-;53087:9;53083:1;53075:6;53071:14;53064:33;52947:157;:::o;53110:182::-;53250:34;53246:1;53238:6;53234:14;53227:58;53110:182;:::o;53298:231::-;53438:34;53434:1;53426:6;53422:14;53415:58;53507:14;53502:2;53494:6;53490:15;53483:39;53298:231;:::o;53535:::-;53675:34;53671:1;53663:6;53659:14;53652:58;53744:14;53739:2;53731:6;53727:15;53720:39;53535:231;:::o;53772:244::-;53912:34;53908:1;53900:6;53896:14;53889:58;53981:27;53976:2;53968:6;53964:15;53957:52;53772:244;:::o;54022:182::-;54162:34;54158:1;54150:6;54146:14;54139:58;54022:182;:::o;54210:228::-;54350:34;54346:1;54338:6;54334:14;54327:58;54419:11;54414:2;54406:6;54402:15;54395:36;54210:228;:::o;54444:234::-;54584:34;54580:1;54572:6;54568:14;54561:58;54653:17;54648:2;54640:6;54636:15;54629:42;54444:234;:::o;54684:220::-;54824:34;54820:1;54812:6;54808:14;54801:58;54893:3;54888:2;54880:6;54876:15;54869:28;54684:220;:::o;54910:180::-;55050:32;55046:1;55038:6;55034:14;55027:56;54910:180;:::o;55096:236::-;55236:34;55232:1;55224:6;55220:14;55213:58;55305:19;55300:2;55292:6;55288:15;55281:44;55096:236;:::o;55338:224::-;55478:34;55474:1;55466:6;55462:14;55455:58;55547:7;55542:2;55534:6;55530:15;55523:32;55338:224;:::o;55568:179::-;55708:31;55704:1;55696:6;55692:14;55685:55;55568:179;:::o;55753:122::-;55826:24;55844:5;55826:24;:::i;:::-;55819:5;55816:35;55806:63;;55865:1;55862;55855:12;55806:63;55753:122;:::o;55881:116::-;55951:21;55966:5;55951:21;:::i;:::-;55944:5;55941:32;55931:60;;55987:1;55984;55977:12;55931:60;55881:116;:::o;56003:122::-;56076:24;56094:5;56076:24;:::i;:::-;56069:5;56066:35;56056:63;;56115:1;56112;56105:12;56056:63;56003:122;:::o;56131:120::-;56203:23;56220:5;56203:23;:::i;:::-;56196:5;56193:34;56183:62;;56241:1;56238;56231:12;56183:62;56131:120;:::o;56257:::-;56329:23;56346:5;56329:23;:::i;:::-;56322:5;56319:34;56309:62;;56367:1;56364;56357:12;56309:62;56257:120;:::o;56383:122::-;56456:24;56474:5;56456:24;:::i;:::-;56449:5;56446:35;56436:63;;56495:1;56492;56485:12;56436:63;56383:122;:::o;56511:118::-;56582:22;56598:5;56582:22;:::i;:::-;56575:5;56572:33;56562:61;;56619:1;56616;56609:12;56562:61;56511:118;:::o
Swarm Source
ipfs://cbf521fd7ee9f3145a6bb59ea620c6d561f7a0f0c63e267e757fc66b4f913aea
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.