ERC-721
Overview
Max Total Supply
485 GOLD
Holders
147
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 GOLDLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
GoldenNFT
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-10-20 */ /** *Submitted for verification at Etherscan.io on 2021-08-13 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; 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); } interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } 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); } } } } 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 ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } 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 ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } 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); } } 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 {} } abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } contract GoldenNFT is ERC721Enumerable, Ownable, ReentrancyGuard { using Strings for uint256; // presale stuff IERC721Enumerable private constant PRESALE_TOKEN = IERC721Enumerable(0xF6Ea0642611b3FEc3d3c2d54ce67f29098728C1c); mapping(uint256 => uint256) private _presaleTokenUsage; bool public _isPresaleMintingDone = false; // sale stuff uint256 public _cap = 5555; uint256 public _maxBuyAmount = 50; uint256 public _pricePerToken = 5 * 10**16; bool private _isSalePaused = true; address payable public _wallet = payable(0xA6C1788Bdc494150f78c8Fc214a2EDcE09CE14c7); // reveal stuff bool public _idShiftDone = false; uint256 public _idShift = 0; string private _tokenBaseURI = 'ipfs://QmNqMPBx9WUAXWNASX3fnPVwdSRgz1eToBicTPxmUFPetB'; constructor() ERC721("Golden NFT", "GOLD") { _mintToken(_msgSender()); } // minting function mint(uint256 mintAmount) public payable nonReentrant { require(!isSalePaused(), "sale is paused"); require(mintAmount > 0, "buy at least 1 NFT"); require(mintAmount <= _maxBuyAmount, "its not allowed to buy this much"); require(mintAmount <= nftsAvailable(), "not enough NFTs available"); require((_pricePerToken * mintAmount) == msg.value, "exact value in ETH needed"); if(!_isPresaleMintingDone) { require(mintAmount <= presaleTokenMaxBuyAmount(_msgSender()), "you dont have enough presale tokens"); uint256 reduce_amount = mintAmount; for(uint256 i = 0; i < presaleTokenAmount(_msgSender()); i++) { uint256 token_id = PRESALE_TOKEN.tokenOfOwnerByIndex(_msgSender(), i); uint256 mints_left_on_token = 10 - _presaleTokenUsage[token_id]; if(reduce_amount <= mints_left_on_token) { _presaleTokenUsage[token_id] = _presaleTokenUsage[token_id]+reduce_amount; reduce_amount = 0; } else { _presaleTokenUsage[token_id] = 10; reduce_amount = reduce_amount - mints_left_on_token; } } } for (uint256 i = 0; i < mintAmount; i++) { _mintToken(_msgSender()); } payable(_wallet).transfer(msg.value); } function presaleTokenAmount(address account) public view returns(uint256) { return PRESALE_TOKEN.balanceOf(account); } function presaleTokenMaxBuyAmount(address account) public view returns(uint256) { uint256 remaining_buy_amount = 0; for(uint256 i = 0; i < presaleTokenAmount(account); i++) { uint256 token_id = PRESALE_TOKEN.tokenOfOwnerByIndex(account, i); remaining_buy_amount+= 10 - _presaleTokenUsage[token_id]; } return remaining_buy_amount; } function nftsAvailable() public view returns(uint256) { return _cap - totalSupply(); } function cap() public view returns(uint256) { return _cap; } function isSalePaused() public view returns(bool) { return _isSalePaused; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); if(!_idShiftDone) { return baseURI; } uint256 shiftedTokenId = (tokenId+_idShift) % _cap; return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, shiftedTokenId.toString(), string('.json'))) : ""; } function _baseURI() internal view override returns (string memory) { return _tokenBaseURI; } function pauseSale() external onlyOwner { _isSalePaused = true; } function resumeSale() external onlyOwner { _isSalePaused = false; } function switchToRegularSale() public onlyOwner { _isPresaleMintingDone = true; _maxBuyAmount = 10; } function setWallet(address wallet) public onlyOwner { _wallet = payable(wallet); } function setTokenBaseURI(string memory newBaseURI) public onlyOwner { _tokenBaseURI = newBaseURI; } function reveil(string memory newBaseURI) public onlyOwner { require(!_idShiftDone, "ID shift is done"); _tokenBaseURI = newBaseURI; _idShiftDone = true; _idShift = block.timestamp % _cap; } function adminMintTo(uint256 mintAmount, address account) public onlyOwner { require(mintAmount > 0, "ERC721CappedSale: buy at least 1 NFT"); require(mintAmount <= nftsAvailable(), "ERC721CappedSale: not enough NFTs available"); for (uint256 i = 0; i < mintAmount; i++) { _mintToken(account); } } function emergencyWithdraw() public onlyOwner { payable(msg.sender).transfer(address(this).balance); } function _mintToken(address destinationAddress) internal { uint256 newTokenID = totalSupply(); require(!_exists(newTokenID), "ERC721CappedSale: Token already exist."); _safeMint(destinationAddress, newTokenID); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_cap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_idShift","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_idShiftDone","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_isPresaleMintingDone","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_pricePerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_wallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintAmount","type":"uint256"},{"internalType":"address","name":"account","type":"address"}],"name":"adminMintTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSalePaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftsAvailable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pauseSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"presaleTokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"presaleTokenMaxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resumeSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newBaseURI","type":"string"}],"name":"reveil","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newBaseURI","type":"string"}],"name":"setTokenBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setWallet","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":"switchToRegularSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000600d60006101000a81548160ff0219169083151502179055506115b3600e556032600f5566b1a2bc2ec500006010556001601160006101000a81548160ff02191690831515021790555073a6c1788bdc494150f78c8fc214a2edce09ce14c7601160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601160156101000a81548160ff0219169083151502179055506000601255604051806060016040528060358152602001620062166035913960139080519060200190620000f692919062000d34565b503480156200010457600080fd5b506040518060400160405280600a81526020017f476f6c64656e204e4654000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f474f4c440000000000000000000000000000000000000000000000000000000081525081600090805190602001906200018992919062000d34565b508060019080519060200190620001a292919062000d34565b505050620001c5620001b9620001f360201b60201c565b620001fb60201b60201c565b6001600b81905550620001ed620001e1620001f360201b60201c565b620002c160201b60201c565b62001417565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000620002d36200033f60201b60201c565b9050620002e6816200034c60201b60201c565b1562000329576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003209062000feb565b60405180910390fd5b6200033b8282620003b860201b60201c565b5050565b6000600880549050905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b620003da828260405180602001604052806000815250620003de60201b60201c565b5050565b620003f083836200044c60201b60201c565b6200040560008484846200063260201b60201c565b62000447576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200043e9062000fa7565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620004bf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004b6906200102f565b60405180910390fd5b620004d0816200034c60201b60201c565b1562000513576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200050a9062000fc9565b60405180910390fd5b6200052760008383620007ec60201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200057991906200107e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000620006608473ffffffffffffffffffffffffffffffffffffffff166200093360201b620021631760201c565b15620007df578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0262000692620001f360201b60201c565b8786866040518563ffffffff1660e01b8152600401620006b6949392919062000f53565b602060405180830381600087803b158015620006d157600080fd5b505af19250505080156200070557506040513d601f19601f8201168201806040525081019062000702919062000dfb565b60015b6200078e573d806000811462000738576040519150601f19603f3d011682016040523d82523d6000602084013e6200073d565b606091505b5060008151141562000786576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200077d9062000fa7565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050620007e4565b600190505b949350505050565b620008048383836200094660201b620021761760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000851576200084b816200094b60201b60201c565b62000899565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462000898576200089783826200099460201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620008e657620008e08162000b1160201b60201c565b6200092e565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146200092d576200092c828262000bed60201b60201c565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001620009ae8462000c7960201b620010c81760201c565b620009ba9190620010db565b905060006007600084815260200190815260200160002054905081811462000aa0576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062000b279190620010db565b905060006009600084815260200190815260200160002054905060006008838154811062000b5a5762000b5962001279565b5b90600052602060002001549050806008838154811062000b7f5762000b7e62001279565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062000bd15762000bd06200124a565b5b6001900381819060005260206000200160009055905550505050565b600062000c058362000c7960201b620010c81760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000ced576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ce4906200100d565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b82805462000d4290620011b6565b90600052602060002090601f01602090048101928262000d66576000855562000db2565b82601f1062000d8157805160ff191683800117855562000db2565b8280016001018555821562000db2579182015b8281111562000db157825182559160200191906001019062000d94565b5b50905062000dc1919062000dc5565b5090565b5b8082111562000de057600081600090555060010162000dc6565b5090565b60008151905062000df581620013fd565b92915050565b60006020828403121562000e145762000e13620012a8565b5b600062000e248482850162000de4565b91505092915050565b62000e388162001116565b82525050565b600062000e4b8262001051565b62000e5781856200105c565b935062000e6981856020860162001180565b62000e7481620012ad565b840191505092915050565b600062000e8e6032836200106d565b915062000e9b82620012be565b604082019050919050565b600062000eb5601c836200106d565b915062000ec2826200130d565b602082019050919050565b600062000edc6026836200106d565b915062000ee98262001336565b604082019050919050565b600062000f03602a836200106d565b915062000f108262001385565b604082019050919050565b600062000f2a6020836200106d565b915062000f3782620013d4565b602082019050919050565b62000f4d8162001176565b82525050565b600060808201905062000f6a600083018762000e2d565b62000f79602083018662000e2d565b62000f88604083018562000f42565b818103606083015262000f9c818462000e3e565b905095945050505050565b6000602082019050818103600083015262000fc28162000e7f565b9050919050565b6000602082019050818103600083015262000fe48162000ea6565b9050919050565b60006020820190508181036000830152620010068162000ecd565b9050919050565b60006020820190508181036000830152620010288162000ef4565b9050919050565b600060208201905081810360008301526200104a8162000f1b565b9050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006200108b8262001176565b9150620010988362001176565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620010d057620010cf620011ec565b5b828201905092915050565b6000620010e88262001176565b9150620010f58362001176565b9250828210156200110b576200110a620011ec565b5b828203905092915050565b6000620011238262001156565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b83811015620011a057808201518184015260208101905062001183565b83811115620011b0576000848401525b50505050565b60006002820490506001821680620011cf57607f821691505b60208210811415620011e657620011e56200121b565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f45524337323143617070656453616c653a20546f6b656e20616c72656164792060008201527f65786973742e0000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b62001408816200112a565b81146200141457600080fd5b50565b614def80620014276000396000f3fe60806040526004361061023a5760003560e01c806370a082311161012e578063b88d4fde116100ab578063db2e21bc1161006f578063db2e21bc14610853578063deaa59df1461086a578063e0ba7c2a14610893578063e985e9c5146108be578063f2fde38b146108fb5761023a565b8063b88d4fde14610770578063ba0849e514610799578063c87b56dd146107c2578063cf984af9146107ff578063d412a26b146108165761023a565b806391aaf2e9116100f257806391aaf2e91461069857806395d89b41146106d5578063a0712d6814610700578063a07c0e451461071c578063a22cb465146107475761023a565b806370a08231146105c5578063715018a614610602578063777eec69146106195780638da5cb5b146106445780638ef79e911461066f5761023a565b806323b872dd116101bc5780634de37d11116101805780634de37d11146104de5780634f6ccce71461050957806355367ba914610546578063610757e41461055d5780636352211e146105885761023a565b806323b872dd1461040d5780632f745c591461043657806333e364cb14610473578063355274ea1461048a57806342842e0e146104b55761023a565b8063081812fc11610203578063081812fc14610328578063095ea7b31461036557806318160ddd1461038e5780631b655f03146103b95780631f9e4d49146103e25761023a565b80628ca8161461023f57806301ffc9a71461026a5780630492f055146102a7578063060cf4e8146102d257806306fdde03146102fd575b600080fd5b34801561024b57600080fd5b50610254610924565b6040516102619190613d51565b60405180910390f35b34801561027657600080fd5b50610291600480360381019061028c9190613662565b61093b565b60405161029e9190613d51565b60405180910390f35b3480156102b357600080fd5b506102bc6109b5565b6040516102c9919061412e565b60405180910390f35b3480156102de57600080fd5b506102e76109bb565b6040516102f4919061412e565b60405180910390f35b34801561030957600080fd5b506103126109c1565b60405161031f9190613d6c565b60405180910390f35b34801561033457600080fd5b5061034f600480360381019061034a9190613705565b610a53565b60405161035c9190613ca6565b60405180910390f35b34801561037157600080fd5b5061038c60048036038101906103879190613622565b610ad8565b005b34801561039a57600080fd5b506103a3610bf0565b6040516103b0919061412e565b60405180910390f35b3480156103c557600080fd5b506103e060048036038101906103db91906136bc565b610bfd565b005b3480156103ee57600080fd5b506103f7610d12565b604051610404919061412e565b60405180910390f35b34801561041957600080fd5b50610434600480360381019061042f919061350c565b610d18565b005b34801561044257600080fd5b5061045d60048036038101906104589190613622565b610d78565b60405161046a919061412e565b60405180910390f35b34801561047f57600080fd5b50610488610e1d565b005b34801561049657600080fd5b5061049f610eb6565b6040516104ac919061412e565b60405180910390f35b3480156104c157600080fd5b506104dc60048036038101906104d7919061350c565b610ec0565b005b3480156104ea57600080fd5b506104f3610ee0565b604051610500919061412e565b60405180910390f35b34801561051557600080fd5b50610530600480360381019061052b9190613705565b610ee6565b60405161053d919061412e565b60405180910390f35b34801561055257600080fd5b5061055b610f57565b005b34801561056957600080fd5b50610572610ff0565b60405161057f9190613cc1565b60405180910390f35b34801561059457600080fd5b506105af60048036038101906105aa9190613705565b611016565b6040516105bc9190613ca6565b60405180910390f35b3480156105d157600080fd5b506105ec60048036038101906105e7919061349f565b6110c8565b6040516105f9919061412e565b60405180910390f35b34801561060e57600080fd5b50610617611180565b005b34801561062557600080fd5b5061062e611208565b60405161063b9190613d51565b60405180910390f35b34801561065057600080fd5b5061065961121b565b6040516106669190613ca6565b60405180910390f35b34801561067b57600080fd5b50610696600480360381019061069191906136bc565b611245565b005b3480156106a457600080fd5b506106bf60048036038101906106ba919061349f565b6112db565b6040516106cc919061412e565b60405180910390f35b3480156106e157600080fd5b506106ea611381565b6040516106f79190613d6c565b60405180910390f35b61071a60048036038101906107159190613705565b611413565b005b34801561072857600080fd5b50610731611846565b60405161073e919061412e565b60405180910390f35b34801561075357600080fd5b5061076e600480360381019061076991906135e2565b611862565b005b34801561077c57600080fd5b506107976004803603810190610792919061355f565b6119e3565b005b3480156107a557600080fd5b506107c060048036038101906107bb919061375f565b611a45565b005b3480156107ce57600080fd5b506107e960048036038101906107e49190613705565b611b7a565b6040516107f69190613d6c565b60405180910390f35b34801561080b57600080fd5b50610814611c96565b005b34801561082257600080fd5b5061083d6004803603810190610838919061349f565b611d37565b60405161084a919061412e565b60405180910390f35b34801561085f57600080fd5b50610868611e3f565b005b34801561087657600080fd5b50610891600480360381019061088c919061349f565b611f04565b005b34801561089f57600080fd5b506108a8611fc4565b6040516108b59190613d51565b60405180910390f35b3480156108ca57600080fd5b506108e560048036038101906108e091906134cc565b611fd7565b6040516108f29190613d51565b60405180910390f35b34801561090757600080fd5b50610922600480360381019061091d919061349f565b61206b565b005b6000601160009054906101000a900460ff16905090565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109ae57506109ad8261217b565b5b9050919050565b600f5481565b600e5481565b6060600080546109d0906143f0565b80601f01602080910402602001604051908101604052809291908181526020018280546109fc906143f0565b8015610a495780601f10610a1e57610100808354040283529160200191610a49565b820191906000526020600020905b815481529060010190602001808311610a2c57829003601f168201915b5050505050905090565b6000610a5e8261225d565b610a9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9490613f8e565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ae382611016565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4b9061406e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b736122c9565b73ffffffffffffffffffffffffffffffffffffffff161480610ba25750610ba181610b9c6122c9565b611fd7565b5b610be1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd890613eae565b60405180910390fd5b610beb83836122d1565b505050565b6000600880549050905090565b610c056122c9565b73ffffffffffffffffffffffffffffffffffffffff16610c2361121b565b73ffffffffffffffffffffffffffffffffffffffff1614610c79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7090613fce565b60405180910390fd5b601160159054906101000a900460ff1615610cc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc0906140ee565b60405180910390fd5b8060139080519060200190610cdf92919061329e565b506001601160156101000a81548160ff021916908315150217905550600e5442610d09919061449c565b60128190555050565b60105481565b610d29610d236122c9565b8261238a565b610d68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5f906140ae565b60405180910390fd5b610d73838383612468565b505050565b6000610d83836110c8565b8210610dc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbb90613dae565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610e256122c9565b73ffffffffffffffffffffffffffffffffffffffff16610e4361121b565b73ffffffffffffffffffffffffffffffffffffffff1614610e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9090613fce565b60405180910390fd5b6000601160006101000a81548160ff021916908315150217905550565b6000600e54905090565b610edb838383604051806020016040528060008152506119e3565b505050565b60125481565b6000610ef0610bf0565b8210610f31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f28906140ce565b60405180910390fd5b60088281548110610f4557610f44614589565b5b90600052602060002001549050919050565b610f5f6122c9565b73ffffffffffffffffffffffffffffffffffffffff16610f7d61121b565b73ffffffffffffffffffffffffffffffffffffffff1614610fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fca90613fce565b60405180910390fd5b6001601160006101000a81548160ff021916908315150217905550565b601160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b690613eee565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611139576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113090613ece565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111886122c9565b73ffffffffffffffffffffffffffffffffffffffff166111a661121b565b73ffffffffffffffffffffffffffffffffffffffff16146111fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f390613fce565b60405180910390fd5b61120660006126c4565b565b600d60009054906101000a900460ff1681565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61124d6122c9565b73ffffffffffffffffffffffffffffffffffffffff1661126b61121b565b73ffffffffffffffffffffffffffffffffffffffff16146112c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b890613fce565b60405180910390fd5b80601390805190602001906112d792919061329e565b5050565b600073f6ea0642611b3fec3d3c2d54ce67f29098728c1c73ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b815260040161132a9190613ca6565b60206040518083038186803b15801561134257600080fd5b505afa158015611356573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137a9190613732565b9050919050565b606060018054611390906143f0565b80601f01602080910402602001604051908101604052809291908181526020018280546113bc906143f0565b80156114095780601f106113de57610100808354040283529160200191611409565b820191906000526020600020905b8154815290600101906020018083116113ec57829003601f168201915b5050505050905090565b6002600b541415611459576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114509061410e565b60405180910390fd5b6002600b81905550611469610924565b156114a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a090613fae565b60405180910390fd5b600081116114ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e390613f6e565b60405180910390fd5b600f54811115611531576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152890613d8e565b60405180910390fd5b611539611846565b81111561157b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115729061404e565b60405180910390fd5b348160105461158a919061429a565b146115ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c19061408e565b60405180910390fd5b600d60009054906101000a900460ff166117a3576115ee6115e96122c9565b611d37565b811115611630576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162790613f0e565b60405180910390fd5b600081905060005b6116486116436122c9565b6112db565b8110156117a057600073f6ea0642611b3fec3d3c2d54ce67f29098728c1c73ffffffffffffffffffffffffffffffffffffffff16632f745c596116896122c9565b846040518363ffffffff1660e01b81526004016116a7929190613d28565b60206040518083038186803b1580156116bf57600080fd5b505afa1580156116d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f79190613732565b90506000600c600083815260200190815260200160002054600a61171b91906142f4565b90508084116117635783600c6000848152602001908152602001600020546117439190614213565b600c6000848152602001908152602001600020819055506000935061178b565b600a600c600084815260200190815260200160002081905550808461178891906142f4565b93505b5050808061179890614453565b915050611638565b50505b60005b818110156117d1576117be6117b96122c9565b61278a565b80806117c990614453565b9150506117a6565b50601160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f1935050505015801561183a573d6000803e3d6000fd5b506001600b8190555050565b6000611850610bf0565b600e5461185d91906142f4565b905090565b61186a6122c9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cf90613e4e565b60405180910390fd5b80600560006118e56122c9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166119926122c9565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119d79190613d51565b60405180910390a35050565b6119f46119ee6122c9565b8361238a565b611a33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2a906140ae565b60405180910390fd5b611a3f848484846127ed565b50505050565b611a4d6122c9565b73ffffffffffffffffffffffffffffffffffffffff16611a6b61121b565b73ffffffffffffffffffffffffffffffffffffffff1614611ac1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab890613fce565b60405180910390fd5b60008211611b04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afb90613f4e565b60405180910390fd5b611b0c611846565b821115611b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b459061402e565b60405180910390fd5b60005b82811015611b7557611b628261278a565b8080611b6d90614453565b915050611b51565b505050565b6060611b858261225d565b611bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbb9061400e565b60405180910390fd5b6000611bce612849565b9050601160159054906101000a900460ff16611bed5780915050611c91565b6000600e5460125485611c009190614213565b611c0a919061449c565b90506000825111611c2a5760405180602001604052806000815250611c8c565b81611c34826128db565b6040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250604051602001611c7c93929190613c75565b6040516020818303038152906040525b925050505b919050565b611c9e6122c9565b73ffffffffffffffffffffffffffffffffffffffff16611cbc61121b565b73ffffffffffffffffffffffffffffffffffffffff1614611d12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0990613fce565b60405180910390fd5b6001600d60006101000a81548160ff021916908315150217905550600a600f81905550565b6000806000905060005b611d4a846112db565b811015611e3557600073f6ea0642611b3fec3d3c2d54ce67f29098728c1c73ffffffffffffffffffffffffffffffffffffffff16632f745c5986846040518363ffffffff1660e01b8152600401611da2929190613d28565b60206040518083038186803b158015611dba57600080fd5b505afa158015611dce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df29190613732565b9050600c600082815260200190815260200160002054600a611e1491906142f4565b83611e1f9190614213565b9250508080611e2d90614453565b915050611d41565b5080915050919050565b611e476122c9565b73ffffffffffffffffffffffffffffffffffffffff16611e6561121b565b73ffffffffffffffffffffffffffffffffffffffff1614611ebb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb290613fce565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611f01573d6000803e3d6000fd5b50565b611f0c6122c9565b73ffffffffffffffffffffffffffffffffffffffff16611f2a61121b565b73ffffffffffffffffffffffffffffffffffffffff1614611f80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7790613fce565b60405180910390fd5b80601160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601160159054906101000a900460ff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120736122c9565b73ffffffffffffffffffffffffffffffffffffffff1661209161121b565b73ffffffffffffffffffffffffffffffffffffffff16146120e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120de90613fce565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214e90613dee565b60405180910390fd5b612160816126c4565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061224657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612256575061225582612a3c565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661234483611016565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006123958261225d565b6123d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cb90613e6e565b60405180910390fd5b60006123df83611016565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061244e57508373ffffffffffffffffffffffffffffffffffffffff1661243684610a53565b73ffffffffffffffffffffffffffffffffffffffff16145b8061245f575061245e8185611fd7565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661248882611016565b73ffffffffffffffffffffffffffffffffffffffff16146124de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d590613fee565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561254e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254590613e2e565b60405180910390fd5b612559838383612aa6565b6125646000826122d1565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125b491906142f4565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461260b9190614213565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612794610bf0565b905061279f8161225d565b156127df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d690613e8e565b60405180910390fd5b6127e98282612bba565b5050565b6127f8848484612468565b61280484848484612bd8565b612843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283a90613dce565b60405180910390fd5b50505050565b606060138054612858906143f0565b80601f0160208091040260200160405190810160405280929190818152602001828054612884906143f0565b80156128d15780601f106128a6576101008083540402835291602001916128d1565b820191906000526020600020905b8154815290600101906020018083116128b457829003601f168201915b5050505050905090565b60606000821415612923576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612a37565b600082905060005b6000821461295557808061293e90614453565b915050600a8261294e9190614269565b915061292b565b60008167ffffffffffffffff811115612971576129706145b8565b5b6040519080825280601f01601f1916602001820160405280156129a35781602001600182028036833780820191505090505b5090505b60008514612a30576001826129bc91906142f4565b9150600a856129cb919061449c565b60306129d79190614213565b60f81b8183815181106129ed576129ec614589565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612a299190614269565b94506129a7565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612ab1838383612176565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612af457612aef81612d6f565b612b33565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612b3257612b318382612db8565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b7657612b7181612f25565b612bb5565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612bb457612bb38282612ff6565b5b5b505050565b612bd4828260405180602001604052806000815250613075565b5050565b6000612bf98473ffffffffffffffffffffffffffffffffffffffff16612163565b15612d62578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c226122c9565b8786866040518563ffffffff1660e01b8152600401612c449493929190613cdc565b602060405180830381600087803b158015612c5e57600080fd5b505af1925050508015612c8f57506040513d601f19601f82011682018060405250810190612c8c919061368f565b60015b612d12573d8060008114612cbf576040519150601f19603f3d011682016040523d82523d6000602084013e612cc4565b606091505b50600081511415612d0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0190613dce565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612d67565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612dc5846110c8565b612dcf91906142f4565b9050600060076000848152602001908152602001600020549050818114612eb4576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612f3991906142f4565b9050600060096000848152602001908152602001600020549050600060088381548110612f6957612f68614589565b5b906000526020600020015490508060088381548110612f8b57612f8a614589565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612fda57612fd961455a565b5b6001900381819060005260206000200160009055905550505050565b6000613001836110c8565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b61307f83836130d0565b61308c6000848484612bd8565b6130cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130c290613dce565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613140576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313790613f2e565b60405180910390fd5b6131498161225d565b15613189576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161318090613e0e565b60405180910390fd5b61319560008383612aa6565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131e59190614213565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546132aa906143f0565b90600052602060002090601f0160209004810192826132cc5760008555613313565b82601f106132e557805160ff1916838001178555613313565b82800160010185558215613313579182015b828111156133125782518255916020019190600101906132f7565b5b5090506133209190613324565b5090565b5b8082111561333d576000816000905550600101613325565b5090565b600061335461334f8461416e565b614149565b9050828152602081018484840111156133705761336f6145ec565b5b61337b8482856143ae565b509392505050565b60006133966133918461419f565b614149565b9050828152602081018484840111156133b2576133b16145ec565b5b6133bd8482856143ae565b509392505050565b6000813590506133d481614d5d565b92915050565b6000813590506133e981614d74565b92915050565b6000813590506133fe81614d8b565b92915050565b60008151905061341381614d8b565b92915050565b600082601f83011261342e5761342d6145e7565b5b813561343e848260208601613341565b91505092915050565b600082601f83011261345c5761345b6145e7565b5b813561346c848260208601613383565b91505092915050565b60008135905061348481614da2565b92915050565b60008151905061349981614da2565b92915050565b6000602082840312156134b5576134b46145f6565b5b60006134c3848285016133c5565b91505092915050565b600080604083850312156134e3576134e26145f6565b5b60006134f1858286016133c5565b9250506020613502858286016133c5565b9150509250929050565b600080600060608486031215613525576135246145f6565b5b6000613533868287016133c5565b9350506020613544868287016133c5565b925050604061355586828701613475565b9150509250925092565b60008060008060808587031215613579576135786145f6565b5b6000613587878288016133c5565b9450506020613598878288016133c5565b93505060406135a987828801613475565b925050606085013567ffffffffffffffff8111156135ca576135c96145f1565b5b6135d687828801613419565b91505092959194509250565b600080604083850312156135f9576135f86145f6565b5b6000613607858286016133c5565b9250506020613618858286016133da565b9150509250929050565b60008060408385031215613639576136386145f6565b5b6000613647858286016133c5565b925050602061365885828601613475565b9150509250929050565b600060208284031215613678576136776145f6565b5b6000613686848285016133ef565b91505092915050565b6000602082840312156136a5576136a46145f6565b5b60006136b384828501613404565b91505092915050565b6000602082840312156136d2576136d16145f6565b5b600082013567ffffffffffffffff8111156136f0576136ef6145f1565b5b6136fc84828501613447565b91505092915050565b60006020828403121561371b5761371a6145f6565b5b600061372984828501613475565b91505092915050565b600060208284031215613748576137476145f6565b5b60006137568482850161348a565b91505092915050565b60008060408385031215613776576137756145f6565b5b600061378485828601613475565b9250506020613795858286016133c5565b9150509250929050565b6137a88161433a565b82525050565b6137b781614328565b82525050565b6137c68161434c565b82525050565b60006137d7826141d0565b6137e181856141e6565b93506137f18185602086016143bd565b6137fa816145fb565b840191505092915050565b6000613810826141db565b61381a81856141f7565b935061382a8185602086016143bd565b613833816145fb565b840191505092915050565b6000613849826141db565b6138538185614208565b93506138638185602086016143bd565b80840191505092915050565b600061387c6020836141f7565b91506138878261460c565b602082019050919050565b600061389f602b836141f7565b91506138aa82614635565b604082019050919050565b60006138c26032836141f7565b91506138cd82614684565b604082019050919050565b60006138e56026836141f7565b91506138f0826146d3565b604082019050919050565b6000613908601c836141f7565b915061391382614722565b602082019050919050565b600061392b6024836141f7565b91506139368261474b565b604082019050919050565b600061394e6019836141f7565b91506139598261479a565b602082019050919050565b6000613971602c836141f7565b915061397c826147c3565b604082019050919050565b60006139946026836141f7565b915061399f82614812565b604082019050919050565b60006139b76038836141f7565b91506139c282614861565b604082019050919050565b60006139da602a836141f7565b91506139e5826148b0565b604082019050919050565b60006139fd6029836141f7565b9150613a08826148ff565b604082019050919050565b6000613a206023836141f7565b9150613a2b8261494e565b604082019050919050565b6000613a436020836141f7565b9150613a4e8261499d565b602082019050919050565b6000613a666024836141f7565b9150613a71826149c6565b604082019050919050565b6000613a896012836141f7565b9150613a9482614a15565b602082019050919050565b6000613aac602c836141f7565b9150613ab782614a3e565b604082019050919050565b6000613acf600e836141f7565b9150613ada82614a8d565b602082019050919050565b6000613af26020836141f7565b9150613afd82614ab6565b602082019050919050565b6000613b156029836141f7565b9150613b2082614adf565b604082019050919050565b6000613b38602f836141f7565b9150613b4382614b2e565b604082019050919050565b6000613b5b602b836141f7565b9150613b6682614b7d565b604082019050919050565b6000613b7e6019836141f7565b9150613b8982614bcc565b602082019050919050565b6000613ba16021836141f7565b9150613bac82614bf5565b604082019050919050565b6000613bc46019836141f7565b9150613bcf82614c44565b602082019050919050565b6000613be76031836141f7565b9150613bf282614c6d565b604082019050919050565b6000613c0a602c836141f7565b9150613c1582614cbc565b604082019050919050565b6000613c2d6010836141f7565b9150613c3882614d0b565b602082019050919050565b6000613c50601f836141f7565b9150613c5b82614d34565b602082019050919050565b613c6f816143a4565b82525050565b6000613c81828661383e565b9150613c8d828561383e565b9150613c99828461383e565b9150819050949350505050565b6000602082019050613cbb60008301846137ae565b92915050565b6000602082019050613cd6600083018461379f565b92915050565b6000608082019050613cf160008301876137ae565b613cfe60208301866137ae565b613d0b6040830185613c66565b8181036060830152613d1d81846137cc565b905095945050505050565b6000604082019050613d3d60008301856137ae565b613d4a6020830184613c66565b9392505050565b6000602082019050613d6660008301846137bd565b92915050565b60006020820190508181036000830152613d868184613805565b905092915050565b60006020820190508181036000830152613da78161386f565b9050919050565b60006020820190508181036000830152613dc781613892565b9050919050565b60006020820190508181036000830152613de7816138b5565b9050919050565b60006020820190508181036000830152613e07816138d8565b9050919050565b60006020820190508181036000830152613e27816138fb565b9050919050565b60006020820190508181036000830152613e478161391e565b9050919050565b60006020820190508181036000830152613e6781613941565b9050919050565b60006020820190508181036000830152613e8781613964565b9050919050565b60006020820190508181036000830152613ea781613987565b9050919050565b60006020820190508181036000830152613ec7816139aa565b9050919050565b60006020820190508181036000830152613ee7816139cd565b9050919050565b60006020820190508181036000830152613f07816139f0565b9050919050565b60006020820190508181036000830152613f2781613a13565b9050919050565b60006020820190508181036000830152613f4781613a36565b9050919050565b60006020820190508181036000830152613f6781613a59565b9050919050565b60006020820190508181036000830152613f8781613a7c565b9050919050565b60006020820190508181036000830152613fa781613a9f565b9050919050565b60006020820190508181036000830152613fc781613ac2565b9050919050565b60006020820190508181036000830152613fe781613ae5565b9050919050565b6000602082019050818103600083015261400781613b08565b9050919050565b6000602082019050818103600083015261402781613b2b565b9050919050565b6000602082019050818103600083015261404781613b4e565b9050919050565b6000602082019050818103600083015261406781613b71565b9050919050565b6000602082019050818103600083015261408781613b94565b9050919050565b600060208201905081810360008301526140a781613bb7565b9050919050565b600060208201905081810360008301526140c781613bda565b9050919050565b600060208201905081810360008301526140e781613bfd565b9050919050565b6000602082019050818103600083015261410781613c20565b9050919050565b6000602082019050818103600083015261412781613c43565b9050919050565b60006020820190506141436000830184613c66565b92915050565b6000614153614164565b905061415f8282614422565b919050565b6000604051905090565b600067ffffffffffffffff821115614189576141886145b8565b5b614192826145fb565b9050602081019050919050565b600067ffffffffffffffff8211156141ba576141b96145b8565b5b6141c3826145fb565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061421e826143a4565b9150614229836143a4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561425e5761425d6144cd565b5b828201905092915050565b6000614274826143a4565b915061427f836143a4565b92508261428f5761428e6144fc565b5b828204905092915050565b60006142a5826143a4565b91506142b0836143a4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156142e9576142e86144cd565b5b828202905092915050565b60006142ff826143a4565b915061430a836143a4565b92508282101561431d5761431c6144cd565b5b828203905092915050565b600061433382614384565b9050919050565b600061434582614384565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156143db5780820151818401526020810190506143c0565b838111156143ea576000848401525b50505050565b6000600282049050600182168061440857607f821691505b6020821081141561441c5761441b61452b565b5b50919050565b61442b826145fb565b810181811067ffffffffffffffff8211171561444a576144496145b8565b5b80604052505050565b600061445e826143a4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614491576144906144cd565b5b600182019050919050565b60006144a7826143a4565b91506144b2836143a4565b9250826144c2576144c16144fc565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f697473206e6f7420616c6c6f77656420746f206275792074686973206d756368600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f45524337323143617070656453616c653a20546f6b656e20616c72656164792060008201527f65786973742e0000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f796f7520646f6e74206861766520656e6f7567682070726573616c6520746f6b60008201527f656e730000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323143617070656453616c653a20627579206174206c65617374203160008201527f204e465400000000000000000000000000000000000000000000000000000000602082015250565b7f627579206174206c656173742031204e46540000000000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f73616c6520697320706175736564000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f45524337323143617070656453616c653a206e6f7420656e6f756768204e465460008201527f7320617661696c61626c65000000000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768204e46547320617661696c61626c6500000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f65786163742076616c756520696e20455448206e656564656400000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f494420736869667420697320646f6e6500000000000000000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b614d6681614328565b8114614d7157600080fd5b50565b614d7d8161434c565b8114614d8857600080fd5b50565b614d9481614358565b8114614d9f57600080fd5b50565b614dab816143a4565b8114614db657600080fd5b5056fea26469706673582212206cb51b4c73fe23aaa5698e863e6055c96aaf53667b3a94fb2c36391980d85a1564736f6c63430008070033697066733a2f2f516d4e714d5042783957554158574e41535833666e505677645352677a3165546f4269635450786d554650657442
Deployed Bytecode
0x60806040526004361061023a5760003560e01c806370a082311161012e578063b88d4fde116100ab578063db2e21bc1161006f578063db2e21bc14610853578063deaa59df1461086a578063e0ba7c2a14610893578063e985e9c5146108be578063f2fde38b146108fb5761023a565b8063b88d4fde14610770578063ba0849e514610799578063c87b56dd146107c2578063cf984af9146107ff578063d412a26b146108165761023a565b806391aaf2e9116100f257806391aaf2e91461069857806395d89b41146106d5578063a0712d6814610700578063a07c0e451461071c578063a22cb465146107475761023a565b806370a08231146105c5578063715018a614610602578063777eec69146106195780638da5cb5b146106445780638ef79e911461066f5761023a565b806323b872dd116101bc5780634de37d11116101805780634de37d11146104de5780634f6ccce71461050957806355367ba914610546578063610757e41461055d5780636352211e146105885761023a565b806323b872dd1461040d5780632f745c591461043657806333e364cb14610473578063355274ea1461048a57806342842e0e146104b55761023a565b8063081812fc11610203578063081812fc14610328578063095ea7b31461036557806318160ddd1461038e5780631b655f03146103b95780631f9e4d49146103e25761023a565b80628ca8161461023f57806301ffc9a71461026a5780630492f055146102a7578063060cf4e8146102d257806306fdde03146102fd575b600080fd5b34801561024b57600080fd5b50610254610924565b6040516102619190613d51565b60405180910390f35b34801561027657600080fd5b50610291600480360381019061028c9190613662565b61093b565b60405161029e9190613d51565b60405180910390f35b3480156102b357600080fd5b506102bc6109b5565b6040516102c9919061412e565b60405180910390f35b3480156102de57600080fd5b506102e76109bb565b6040516102f4919061412e565b60405180910390f35b34801561030957600080fd5b506103126109c1565b60405161031f9190613d6c565b60405180910390f35b34801561033457600080fd5b5061034f600480360381019061034a9190613705565b610a53565b60405161035c9190613ca6565b60405180910390f35b34801561037157600080fd5b5061038c60048036038101906103879190613622565b610ad8565b005b34801561039a57600080fd5b506103a3610bf0565b6040516103b0919061412e565b60405180910390f35b3480156103c557600080fd5b506103e060048036038101906103db91906136bc565b610bfd565b005b3480156103ee57600080fd5b506103f7610d12565b604051610404919061412e565b60405180910390f35b34801561041957600080fd5b50610434600480360381019061042f919061350c565b610d18565b005b34801561044257600080fd5b5061045d60048036038101906104589190613622565b610d78565b60405161046a919061412e565b60405180910390f35b34801561047f57600080fd5b50610488610e1d565b005b34801561049657600080fd5b5061049f610eb6565b6040516104ac919061412e565b60405180910390f35b3480156104c157600080fd5b506104dc60048036038101906104d7919061350c565b610ec0565b005b3480156104ea57600080fd5b506104f3610ee0565b604051610500919061412e565b60405180910390f35b34801561051557600080fd5b50610530600480360381019061052b9190613705565b610ee6565b60405161053d919061412e565b60405180910390f35b34801561055257600080fd5b5061055b610f57565b005b34801561056957600080fd5b50610572610ff0565b60405161057f9190613cc1565b60405180910390f35b34801561059457600080fd5b506105af60048036038101906105aa9190613705565b611016565b6040516105bc9190613ca6565b60405180910390f35b3480156105d157600080fd5b506105ec60048036038101906105e7919061349f565b6110c8565b6040516105f9919061412e565b60405180910390f35b34801561060e57600080fd5b50610617611180565b005b34801561062557600080fd5b5061062e611208565b60405161063b9190613d51565b60405180910390f35b34801561065057600080fd5b5061065961121b565b6040516106669190613ca6565b60405180910390f35b34801561067b57600080fd5b50610696600480360381019061069191906136bc565b611245565b005b3480156106a457600080fd5b506106bf60048036038101906106ba919061349f565b6112db565b6040516106cc919061412e565b60405180910390f35b3480156106e157600080fd5b506106ea611381565b6040516106f79190613d6c565b60405180910390f35b61071a60048036038101906107159190613705565b611413565b005b34801561072857600080fd5b50610731611846565b60405161073e919061412e565b60405180910390f35b34801561075357600080fd5b5061076e600480360381019061076991906135e2565b611862565b005b34801561077c57600080fd5b506107976004803603810190610792919061355f565b6119e3565b005b3480156107a557600080fd5b506107c060048036038101906107bb919061375f565b611a45565b005b3480156107ce57600080fd5b506107e960048036038101906107e49190613705565b611b7a565b6040516107f69190613d6c565b60405180910390f35b34801561080b57600080fd5b50610814611c96565b005b34801561082257600080fd5b5061083d6004803603810190610838919061349f565b611d37565b60405161084a919061412e565b60405180910390f35b34801561085f57600080fd5b50610868611e3f565b005b34801561087657600080fd5b50610891600480360381019061088c919061349f565b611f04565b005b34801561089f57600080fd5b506108a8611fc4565b6040516108b59190613d51565b60405180910390f35b3480156108ca57600080fd5b506108e560048036038101906108e091906134cc565b611fd7565b6040516108f29190613d51565b60405180910390f35b34801561090757600080fd5b50610922600480360381019061091d919061349f565b61206b565b005b6000601160009054906101000a900460ff16905090565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109ae57506109ad8261217b565b5b9050919050565b600f5481565b600e5481565b6060600080546109d0906143f0565b80601f01602080910402602001604051908101604052809291908181526020018280546109fc906143f0565b8015610a495780601f10610a1e57610100808354040283529160200191610a49565b820191906000526020600020905b815481529060010190602001808311610a2c57829003601f168201915b5050505050905090565b6000610a5e8261225d565b610a9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9490613f8e565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ae382611016565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4b9061406e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b736122c9565b73ffffffffffffffffffffffffffffffffffffffff161480610ba25750610ba181610b9c6122c9565b611fd7565b5b610be1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd890613eae565b60405180910390fd5b610beb83836122d1565b505050565b6000600880549050905090565b610c056122c9565b73ffffffffffffffffffffffffffffffffffffffff16610c2361121b565b73ffffffffffffffffffffffffffffffffffffffff1614610c79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7090613fce565b60405180910390fd5b601160159054906101000a900460ff1615610cc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc0906140ee565b60405180910390fd5b8060139080519060200190610cdf92919061329e565b506001601160156101000a81548160ff021916908315150217905550600e5442610d09919061449c565b60128190555050565b60105481565b610d29610d236122c9565b8261238a565b610d68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5f906140ae565b60405180910390fd5b610d73838383612468565b505050565b6000610d83836110c8565b8210610dc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbb90613dae565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610e256122c9565b73ffffffffffffffffffffffffffffffffffffffff16610e4361121b565b73ffffffffffffffffffffffffffffffffffffffff1614610e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9090613fce565b60405180910390fd5b6000601160006101000a81548160ff021916908315150217905550565b6000600e54905090565b610edb838383604051806020016040528060008152506119e3565b505050565b60125481565b6000610ef0610bf0565b8210610f31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f28906140ce565b60405180910390fd5b60088281548110610f4557610f44614589565b5b90600052602060002001549050919050565b610f5f6122c9565b73ffffffffffffffffffffffffffffffffffffffff16610f7d61121b565b73ffffffffffffffffffffffffffffffffffffffff1614610fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fca90613fce565b60405180910390fd5b6001601160006101000a81548160ff021916908315150217905550565b601160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b690613eee565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611139576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113090613ece565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111886122c9565b73ffffffffffffffffffffffffffffffffffffffff166111a661121b565b73ffffffffffffffffffffffffffffffffffffffff16146111fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f390613fce565b60405180910390fd5b61120660006126c4565b565b600d60009054906101000a900460ff1681565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61124d6122c9565b73ffffffffffffffffffffffffffffffffffffffff1661126b61121b565b73ffffffffffffffffffffffffffffffffffffffff16146112c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b890613fce565b60405180910390fd5b80601390805190602001906112d792919061329e565b5050565b600073f6ea0642611b3fec3d3c2d54ce67f29098728c1c73ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b815260040161132a9190613ca6565b60206040518083038186803b15801561134257600080fd5b505afa158015611356573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137a9190613732565b9050919050565b606060018054611390906143f0565b80601f01602080910402602001604051908101604052809291908181526020018280546113bc906143f0565b80156114095780601f106113de57610100808354040283529160200191611409565b820191906000526020600020905b8154815290600101906020018083116113ec57829003601f168201915b5050505050905090565b6002600b541415611459576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114509061410e565b60405180910390fd5b6002600b81905550611469610924565b156114a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a090613fae565b60405180910390fd5b600081116114ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e390613f6e565b60405180910390fd5b600f54811115611531576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152890613d8e565b60405180910390fd5b611539611846565b81111561157b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115729061404e565b60405180910390fd5b348160105461158a919061429a565b146115ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c19061408e565b60405180910390fd5b600d60009054906101000a900460ff166117a3576115ee6115e96122c9565b611d37565b811115611630576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162790613f0e565b60405180910390fd5b600081905060005b6116486116436122c9565b6112db565b8110156117a057600073f6ea0642611b3fec3d3c2d54ce67f29098728c1c73ffffffffffffffffffffffffffffffffffffffff16632f745c596116896122c9565b846040518363ffffffff1660e01b81526004016116a7929190613d28565b60206040518083038186803b1580156116bf57600080fd5b505afa1580156116d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f79190613732565b90506000600c600083815260200190815260200160002054600a61171b91906142f4565b90508084116117635783600c6000848152602001908152602001600020546117439190614213565b600c6000848152602001908152602001600020819055506000935061178b565b600a600c600084815260200190815260200160002081905550808461178891906142f4565b93505b5050808061179890614453565b915050611638565b50505b60005b818110156117d1576117be6117b96122c9565b61278a565b80806117c990614453565b9150506117a6565b50601160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f1935050505015801561183a573d6000803e3d6000fd5b506001600b8190555050565b6000611850610bf0565b600e5461185d91906142f4565b905090565b61186a6122c9565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cf90613e4e565b60405180910390fd5b80600560006118e56122c9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166119926122c9565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119d79190613d51565b60405180910390a35050565b6119f46119ee6122c9565b8361238a565b611a33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2a906140ae565b60405180910390fd5b611a3f848484846127ed565b50505050565b611a4d6122c9565b73ffffffffffffffffffffffffffffffffffffffff16611a6b61121b565b73ffffffffffffffffffffffffffffffffffffffff1614611ac1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab890613fce565b60405180910390fd5b60008211611b04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afb90613f4e565b60405180910390fd5b611b0c611846565b821115611b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b459061402e565b60405180910390fd5b60005b82811015611b7557611b628261278a565b8080611b6d90614453565b915050611b51565b505050565b6060611b858261225d565b611bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbb9061400e565b60405180910390fd5b6000611bce612849565b9050601160159054906101000a900460ff16611bed5780915050611c91565b6000600e5460125485611c009190614213565b611c0a919061449c565b90506000825111611c2a5760405180602001604052806000815250611c8c565b81611c34826128db565b6040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250604051602001611c7c93929190613c75565b6040516020818303038152906040525b925050505b919050565b611c9e6122c9565b73ffffffffffffffffffffffffffffffffffffffff16611cbc61121b565b73ffffffffffffffffffffffffffffffffffffffff1614611d12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0990613fce565b60405180910390fd5b6001600d60006101000a81548160ff021916908315150217905550600a600f81905550565b6000806000905060005b611d4a846112db565b811015611e3557600073f6ea0642611b3fec3d3c2d54ce67f29098728c1c73ffffffffffffffffffffffffffffffffffffffff16632f745c5986846040518363ffffffff1660e01b8152600401611da2929190613d28565b60206040518083038186803b158015611dba57600080fd5b505afa158015611dce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df29190613732565b9050600c600082815260200190815260200160002054600a611e1491906142f4565b83611e1f9190614213565b9250508080611e2d90614453565b915050611d41565b5080915050919050565b611e476122c9565b73ffffffffffffffffffffffffffffffffffffffff16611e6561121b565b73ffffffffffffffffffffffffffffffffffffffff1614611ebb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb290613fce565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611f01573d6000803e3d6000fd5b50565b611f0c6122c9565b73ffffffffffffffffffffffffffffffffffffffff16611f2a61121b565b73ffffffffffffffffffffffffffffffffffffffff1614611f80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7790613fce565b60405180910390fd5b80601160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601160159054906101000a900460ff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120736122c9565b73ffffffffffffffffffffffffffffffffffffffff1661209161121b565b73ffffffffffffffffffffffffffffffffffffffff16146120e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120de90613fce565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214e90613dee565b60405180910390fd5b612160816126c4565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061224657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612256575061225582612a3c565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661234483611016565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006123958261225d565b6123d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cb90613e6e565b60405180910390fd5b60006123df83611016565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061244e57508373ffffffffffffffffffffffffffffffffffffffff1661243684610a53565b73ffffffffffffffffffffffffffffffffffffffff16145b8061245f575061245e8185611fd7565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661248882611016565b73ffffffffffffffffffffffffffffffffffffffff16146124de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d590613fee565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561254e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254590613e2e565b60405180910390fd5b612559838383612aa6565b6125646000826122d1565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125b491906142f4565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461260b9190614213565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000612794610bf0565b905061279f8161225d565b156127df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d690613e8e565b60405180910390fd5b6127e98282612bba565b5050565b6127f8848484612468565b61280484848484612bd8565b612843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283a90613dce565b60405180910390fd5b50505050565b606060138054612858906143f0565b80601f0160208091040260200160405190810160405280929190818152602001828054612884906143f0565b80156128d15780601f106128a6576101008083540402835291602001916128d1565b820191906000526020600020905b8154815290600101906020018083116128b457829003601f168201915b5050505050905090565b60606000821415612923576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612a37565b600082905060005b6000821461295557808061293e90614453565b915050600a8261294e9190614269565b915061292b565b60008167ffffffffffffffff811115612971576129706145b8565b5b6040519080825280601f01601f1916602001820160405280156129a35781602001600182028036833780820191505090505b5090505b60008514612a30576001826129bc91906142f4565b9150600a856129cb919061449c565b60306129d79190614213565b60f81b8183815181106129ed576129ec614589565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612a299190614269565b94506129a7565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612ab1838383612176565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612af457612aef81612d6f565b612b33565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612b3257612b318382612db8565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b7657612b7181612f25565b612bb5565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612bb457612bb38282612ff6565b5b5b505050565b612bd4828260405180602001604052806000815250613075565b5050565b6000612bf98473ffffffffffffffffffffffffffffffffffffffff16612163565b15612d62578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c226122c9565b8786866040518563ffffffff1660e01b8152600401612c449493929190613cdc565b602060405180830381600087803b158015612c5e57600080fd5b505af1925050508015612c8f57506040513d601f19601f82011682018060405250810190612c8c919061368f565b60015b612d12573d8060008114612cbf576040519150601f19603f3d011682016040523d82523d6000602084013e612cc4565b606091505b50600081511415612d0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0190613dce565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612d67565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612dc5846110c8565b612dcf91906142f4565b9050600060076000848152602001908152602001600020549050818114612eb4576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612f3991906142f4565b9050600060096000848152602001908152602001600020549050600060088381548110612f6957612f68614589565b5b906000526020600020015490508060088381548110612f8b57612f8a614589565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612fda57612fd961455a565b5b6001900381819060005260206000200160009055905550505050565b6000613001836110c8565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b61307f83836130d0565b61308c6000848484612bd8565b6130cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130c290613dce565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613140576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313790613f2e565b60405180910390fd5b6131498161225d565b15613189576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161318090613e0e565b60405180910390fd5b61319560008383612aa6565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131e59190614213565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546132aa906143f0565b90600052602060002090601f0160209004810192826132cc5760008555613313565b82601f106132e557805160ff1916838001178555613313565b82800160010185558215613313579182015b828111156133125782518255916020019190600101906132f7565b5b5090506133209190613324565b5090565b5b8082111561333d576000816000905550600101613325565b5090565b600061335461334f8461416e565b614149565b9050828152602081018484840111156133705761336f6145ec565b5b61337b8482856143ae565b509392505050565b60006133966133918461419f565b614149565b9050828152602081018484840111156133b2576133b16145ec565b5b6133bd8482856143ae565b509392505050565b6000813590506133d481614d5d565b92915050565b6000813590506133e981614d74565b92915050565b6000813590506133fe81614d8b565b92915050565b60008151905061341381614d8b565b92915050565b600082601f83011261342e5761342d6145e7565b5b813561343e848260208601613341565b91505092915050565b600082601f83011261345c5761345b6145e7565b5b813561346c848260208601613383565b91505092915050565b60008135905061348481614da2565b92915050565b60008151905061349981614da2565b92915050565b6000602082840312156134b5576134b46145f6565b5b60006134c3848285016133c5565b91505092915050565b600080604083850312156134e3576134e26145f6565b5b60006134f1858286016133c5565b9250506020613502858286016133c5565b9150509250929050565b600080600060608486031215613525576135246145f6565b5b6000613533868287016133c5565b9350506020613544868287016133c5565b925050604061355586828701613475565b9150509250925092565b60008060008060808587031215613579576135786145f6565b5b6000613587878288016133c5565b9450506020613598878288016133c5565b93505060406135a987828801613475565b925050606085013567ffffffffffffffff8111156135ca576135c96145f1565b5b6135d687828801613419565b91505092959194509250565b600080604083850312156135f9576135f86145f6565b5b6000613607858286016133c5565b9250506020613618858286016133da565b9150509250929050565b60008060408385031215613639576136386145f6565b5b6000613647858286016133c5565b925050602061365885828601613475565b9150509250929050565b600060208284031215613678576136776145f6565b5b6000613686848285016133ef565b91505092915050565b6000602082840312156136a5576136a46145f6565b5b60006136b384828501613404565b91505092915050565b6000602082840312156136d2576136d16145f6565b5b600082013567ffffffffffffffff8111156136f0576136ef6145f1565b5b6136fc84828501613447565b91505092915050565b60006020828403121561371b5761371a6145f6565b5b600061372984828501613475565b91505092915050565b600060208284031215613748576137476145f6565b5b60006137568482850161348a565b91505092915050565b60008060408385031215613776576137756145f6565b5b600061378485828601613475565b9250506020613795858286016133c5565b9150509250929050565b6137a88161433a565b82525050565b6137b781614328565b82525050565b6137c68161434c565b82525050565b60006137d7826141d0565b6137e181856141e6565b93506137f18185602086016143bd565b6137fa816145fb565b840191505092915050565b6000613810826141db565b61381a81856141f7565b935061382a8185602086016143bd565b613833816145fb565b840191505092915050565b6000613849826141db565b6138538185614208565b93506138638185602086016143bd565b80840191505092915050565b600061387c6020836141f7565b91506138878261460c565b602082019050919050565b600061389f602b836141f7565b91506138aa82614635565b604082019050919050565b60006138c26032836141f7565b91506138cd82614684565b604082019050919050565b60006138e56026836141f7565b91506138f0826146d3565b604082019050919050565b6000613908601c836141f7565b915061391382614722565b602082019050919050565b600061392b6024836141f7565b91506139368261474b565b604082019050919050565b600061394e6019836141f7565b91506139598261479a565b602082019050919050565b6000613971602c836141f7565b915061397c826147c3565b604082019050919050565b60006139946026836141f7565b915061399f82614812565b604082019050919050565b60006139b76038836141f7565b91506139c282614861565b604082019050919050565b60006139da602a836141f7565b91506139e5826148b0565b604082019050919050565b60006139fd6029836141f7565b9150613a08826148ff565b604082019050919050565b6000613a206023836141f7565b9150613a2b8261494e565b604082019050919050565b6000613a436020836141f7565b9150613a4e8261499d565b602082019050919050565b6000613a666024836141f7565b9150613a71826149c6565b604082019050919050565b6000613a896012836141f7565b9150613a9482614a15565b602082019050919050565b6000613aac602c836141f7565b9150613ab782614a3e565b604082019050919050565b6000613acf600e836141f7565b9150613ada82614a8d565b602082019050919050565b6000613af26020836141f7565b9150613afd82614ab6565b602082019050919050565b6000613b156029836141f7565b9150613b2082614adf565b604082019050919050565b6000613b38602f836141f7565b9150613b4382614b2e565b604082019050919050565b6000613b5b602b836141f7565b9150613b6682614b7d565b604082019050919050565b6000613b7e6019836141f7565b9150613b8982614bcc565b602082019050919050565b6000613ba16021836141f7565b9150613bac82614bf5565b604082019050919050565b6000613bc46019836141f7565b9150613bcf82614c44565b602082019050919050565b6000613be76031836141f7565b9150613bf282614c6d565b604082019050919050565b6000613c0a602c836141f7565b9150613c1582614cbc565b604082019050919050565b6000613c2d6010836141f7565b9150613c3882614d0b565b602082019050919050565b6000613c50601f836141f7565b9150613c5b82614d34565b602082019050919050565b613c6f816143a4565b82525050565b6000613c81828661383e565b9150613c8d828561383e565b9150613c99828461383e565b9150819050949350505050565b6000602082019050613cbb60008301846137ae565b92915050565b6000602082019050613cd6600083018461379f565b92915050565b6000608082019050613cf160008301876137ae565b613cfe60208301866137ae565b613d0b6040830185613c66565b8181036060830152613d1d81846137cc565b905095945050505050565b6000604082019050613d3d60008301856137ae565b613d4a6020830184613c66565b9392505050565b6000602082019050613d6660008301846137bd565b92915050565b60006020820190508181036000830152613d868184613805565b905092915050565b60006020820190508181036000830152613da78161386f565b9050919050565b60006020820190508181036000830152613dc781613892565b9050919050565b60006020820190508181036000830152613de7816138b5565b9050919050565b60006020820190508181036000830152613e07816138d8565b9050919050565b60006020820190508181036000830152613e27816138fb565b9050919050565b60006020820190508181036000830152613e478161391e565b9050919050565b60006020820190508181036000830152613e6781613941565b9050919050565b60006020820190508181036000830152613e8781613964565b9050919050565b60006020820190508181036000830152613ea781613987565b9050919050565b60006020820190508181036000830152613ec7816139aa565b9050919050565b60006020820190508181036000830152613ee7816139cd565b9050919050565b60006020820190508181036000830152613f07816139f0565b9050919050565b60006020820190508181036000830152613f2781613a13565b9050919050565b60006020820190508181036000830152613f4781613a36565b9050919050565b60006020820190508181036000830152613f6781613a59565b9050919050565b60006020820190508181036000830152613f8781613a7c565b9050919050565b60006020820190508181036000830152613fa781613a9f565b9050919050565b60006020820190508181036000830152613fc781613ac2565b9050919050565b60006020820190508181036000830152613fe781613ae5565b9050919050565b6000602082019050818103600083015261400781613b08565b9050919050565b6000602082019050818103600083015261402781613b2b565b9050919050565b6000602082019050818103600083015261404781613b4e565b9050919050565b6000602082019050818103600083015261406781613b71565b9050919050565b6000602082019050818103600083015261408781613b94565b9050919050565b600060208201905081810360008301526140a781613bb7565b9050919050565b600060208201905081810360008301526140c781613bda565b9050919050565b600060208201905081810360008301526140e781613bfd565b9050919050565b6000602082019050818103600083015261410781613c20565b9050919050565b6000602082019050818103600083015261412781613c43565b9050919050565b60006020820190506141436000830184613c66565b92915050565b6000614153614164565b905061415f8282614422565b919050565b6000604051905090565b600067ffffffffffffffff821115614189576141886145b8565b5b614192826145fb565b9050602081019050919050565b600067ffffffffffffffff8211156141ba576141b96145b8565b5b6141c3826145fb565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061421e826143a4565b9150614229836143a4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561425e5761425d6144cd565b5b828201905092915050565b6000614274826143a4565b915061427f836143a4565b92508261428f5761428e6144fc565b5b828204905092915050565b60006142a5826143a4565b91506142b0836143a4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156142e9576142e86144cd565b5b828202905092915050565b60006142ff826143a4565b915061430a836143a4565b92508282101561431d5761431c6144cd565b5b828203905092915050565b600061433382614384565b9050919050565b600061434582614384565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156143db5780820151818401526020810190506143c0565b838111156143ea576000848401525b50505050565b6000600282049050600182168061440857607f821691505b6020821081141561441c5761441b61452b565b5b50919050565b61442b826145fb565b810181811067ffffffffffffffff8211171561444a576144496145b8565b5b80604052505050565b600061445e826143a4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614491576144906144cd565b5b600182019050919050565b60006144a7826143a4565b91506144b2836143a4565b9250826144c2576144c16144fc565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f697473206e6f7420616c6c6f77656420746f206275792074686973206d756368600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f45524337323143617070656453616c653a20546f6b656e20616c72656164792060008201527f65786973742e0000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f796f7520646f6e74206861766520656e6f7567682070726573616c6520746f6b60008201527f656e730000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323143617070656453616c653a20627579206174206c65617374203160008201527f204e465400000000000000000000000000000000000000000000000000000000602082015250565b7f627579206174206c656173742031204e46540000000000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f73616c6520697320706175736564000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f45524337323143617070656453616c653a206e6f7420656e6f756768204e465460008201527f7320617661696c61626c65000000000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f756768204e46547320617661696c61626c6500000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f65786163742076616c756520696e20455448206e656564656400000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f494420736869667420697320646f6e6500000000000000000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b614d6681614328565b8114614d7157600080fd5b50565b614d7d8161434c565b8114614d8857600080fd5b50565b614d9481614358565b8114614d9f57600080fd5b50565b614dab816143a4565b8114614db657600080fd5b5056fea26469706673582212206cb51b4c73fe23aaa5698e863e6055c96aaf53667b3a94fb2c36391980d85a1564736f6c63430008070033
Deployed Bytecode Sourcemap
40912:5351:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44031:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34764:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41322:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41289:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22977:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24536:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24059:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35404:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45291:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41362:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25426:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35072:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44845:81;;;;;;;;;;;;;:::i;:::-;;43949:74;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25836:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41604:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35594:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44758:79;;;;;;;;;;;;;:::i;:::-;;41451:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22671:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22401:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20440:94;;;;;;;;;;;;;:::i;:::-;;41220:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19789:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45170:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43293:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23146:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41849:1430;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43841:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24829:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26092:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45530:350;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44142:488;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44934:124;;;;;;;;;;;;;:::i;:::-;;43433:398;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45888:116;;;;;;;;;;;;;:::i;:::-;;45066:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41565:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25195:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20689:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44031:89;44075:4;44099:13;;;;;;;;;;;44092:20;;44031:89;:::o;34764:224::-;34866:4;34905:35;34890:50;;;:11;:50;;;;:90;;;;34944:36;34968:11;34944:23;:36::i;:::-;34890:90;34883:97;;34764:224;;;:::o;41322:33::-;;;;:::o;41289:26::-;;;;:::o;22977:100::-;23031:13;23064:5;23057:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22977:100;:::o;24536:221::-;24612:7;24640:16;24648:7;24640;:16::i;:::-;24632:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24725:15;:24;24741:7;24725:24;;;;;;;;;;;;;;;;;;;;;24718:31;;24536:221;;;:::o;24059:411::-;24140:13;24156:23;24171:7;24156:14;:23::i;:::-;24140:39;;24204:5;24198:11;;:2;:11;;;;24190:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24298:5;24282:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;24307:37;24324:5;24331:12;:10;:12::i;:::-;24307:16;:37::i;:::-;24282:62;24260:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;24441:21;24450:2;24454:7;24441:8;:21::i;:::-;24129:341;24059:411;;:::o;35404:113::-;35465:7;35492:10;:17;;;;35485:24;;35404:113;:::o;45291:231::-;20020:12;:10;:12::i;:::-;20009:23;;:7;:5;:7::i;:::-;:23;;;20001:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45370:12:::1;;;;;;;;;;;45369:13;45361:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;45430:10;45414:13;:26;;;;;;;;;;;;:::i;:::-;;45466:4;45451:12;;:19;;;;;;;;;;;;;;;;;;45510:4;;45492:15;:22;;;;:::i;:::-;45481:8;:33;;;;45291:231:::0;:::o;41362:42::-;;;;:::o;25426:339::-;25621:41;25640:12;:10;:12::i;:::-;25654:7;25621:18;:41::i;:::-;25613:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25729:28;25739:4;25745:2;25749:7;25729:9;:28::i;:::-;25426:339;;;:::o;35072:256::-;35169:7;35205:23;35222:5;35205:16;:23::i;:::-;35197:5;:31;35189:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35294:12;:19;35307:5;35294:19;;;;;;;;;;;;;;;:26;35314:5;35294:26;;;;;;;;;;;;35287:33;;35072:256;;;;:::o;44845:81::-;20020:12;:10;:12::i;:::-;20009:23;;:7;:5;:7::i;:::-;:23;;;20001:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44913:5:::1;44897:13;;:21;;;;;;;;;;;;;;;;;;44845:81::o:0;43949:74::-;43984:7;44011:4;;44004:11;;43949:74;:::o;25836:185::-;25974:39;25991:4;25997:2;26001:7;25974:39;;;;;;;;;;;;:16;:39::i;:::-;25836:185;;;:::o;41604:27::-;;;;:::o;35594:233::-;35669:7;35705:30;:28;:30::i;:::-;35697:5;:38;35689:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;35802:10;35813:5;35802:17;;;;;;;;:::i;:::-;;;;;;;;;;35795:24;;35594:233;;;:::o;44758:79::-;20020:12;:10;:12::i;:::-;20009:23;;:7;:5;:7::i;:::-;:23;;;20001:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44825:4:::1;44809:13;;:20;;;;;;;;;;;;;;;;;;44758:79::o:0;41451:84::-;;;;;;;;;;;;;:::o;22671:239::-;22743:7;22763:13;22779:7;:16;22787:7;22779:16;;;;;;;;;;;;;;;;;;;;;22763:32;;22831:1;22814:19;;:5;:19;;;;22806:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22897:5;22890:12;;;22671:239;;;:::o;22401:208::-;22473:7;22518:1;22501:19;;:5;:19;;;;22493:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;22585:9;:16;22595:5;22585:16;;;;;;;;;;;;;;;;22578:23;;22401:208;;;:::o;20440:94::-;20020:12;:10;:12::i;:::-;20009:23;;:7;:5;:7::i;:::-;:23;;;20001:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20505:21:::1;20523:1;20505:9;:21::i;:::-;20440:94::o:0;41220:41::-;;;;;;;;;;;;;:::o;19789:87::-;19835:7;19862:6;;;;;;;;;;;19855:13;;19789:87;:::o;45170:113::-;20020:12;:10;:12::i;:::-;20009:23;;:7;:5;:7::i;:::-;:23;;;20001:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45265:10:::1;45249:13;:26;;;;;;;;;;;;:::i;:::-;;45170:113:::0;:::o;43293:132::-;43358:7;41109:42;43385:23;;;43409:7;43385:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43378:39;;43293:132;;;:::o;23146:104::-;23202:13;23235:7;23228:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23146:104;:::o;41849:1430::-;16223:1;16819:7;;:19;;16811:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;16223:1;16952:7;:18;;;;41931:14:::1;:12;:14::i;:::-;41930:15;41922:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;41996:1;41983:10;:14;41975:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;42053:13;;42039:10;:27;;42031:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;42136:15;:13;:15::i;:::-;42122:10;:29;;42114:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;42233:9;42218:10;42201:14;;:27;;;;:::i;:::-;42200:42;42192:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;42289:21;;;;;;;;;;;42285:836;;42349:38;42374:12;:10;:12::i;:::-;42349:24;:38::i;:::-;42335:10;:52;;42327:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;42442:21;42466:10;42442:34;;42495:9;42491:619;42514:32;42533:12;:10;:12::i;:::-;42514:18;:32::i;:::-;42510:1;:36;42491:619;;;42572:16;41109:42;42591:33;;;42625:12;:10;:12::i;:::-;42639:1;42591:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42572:69;;42660:27;42695:18;:28;42714:8;42695:28;;;;;;;;;;;;42690:2;:33;;;;:::i;:::-;42660:63;;42762:19;42745:13;:36;42742:353;;42866:13;42837:18;:28;42856:8;42837:28;;;;;;;;;;;;:42;;;;:::i;:::-;42806:18;:28;42825:8;42806:28;;;;;;;;;;;:73;;;;42918:1;42902:17;;42742:353;;;42999:2;42968:18;:28;42987:8;42968:28;;;;;;;;;;;:33;;;;43056:19;43040:13;:35;;;;:::i;:::-;43024:51;;42742:353;42553:557;;42548:3;;;;;:::i;:::-;;;;42491:619;;;;42312:809;42285:836;43138:9;43133:92;43157:10;43153:1;:14;43133:92;;;43189:24;43200:12;:10;:12::i;:::-;43189:10;:24::i;:::-;43169:3;;;;;:::i;:::-;;;;43133:92;;;;43243:7;;;;;;;;;;;43235:25;;:36;43261:9;43235:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;16179:1:::0;17131:7;:22;;;;41849:1430;:::o;43841:100::-;43886:7;43920:13;:11;:13::i;:::-;43913:4;;:20;;;;:::i;:::-;43906:27;;43841:100;:::o;24829:295::-;24944:12;:10;:12::i;:::-;24932:24;;:8;:24;;;;24924:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;25044:8;24999:18;:32;25018:12;:10;:12::i;:::-;24999:32;;;;;;;;;;;;;;;:42;25032:8;24999:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;25097:8;25068:48;;25083:12;:10;:12::i;:::-;25068:48;;;25107:8;25068:48;;;;;;:::i;:::-;;;;;;;;24829:295;;:::o;26092:328::-;26267:41;26286:12;:10;:12::i;:::-;26300:7;26267:18;:41::i;:::-;26259:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26373:39;26387:4;26393:2;26397:7;26406:5;26373:13;:39::i;:::-;26092:328;;;;:::o;45530:350::-;20020:12;:10;:12::i;:::-;20009:23;;:7;:5;:7::i;:::-;:23;;;20001:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45637:1:::1;45624:10;:14;45616:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;45712:15;:13;:15::i;:::-;45698:10;:29;;45690:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;45791:9;45786:87;45810:10;45806:1;:14;45786:87;;;45842:19;45853:7;45842:10;:19::i;:::-;45822:3;;;;;:::i;:::-;;;;45786:87;;;;45530:350:::0;;:::o;44142:488::-;44215:13;44249:16;44257:7;44249;:16::i;:::-;44241:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;44330:21;44354:10;:8;:10::i;:::-;44330:34;;44379:12;;;;;;;;;;;44375:59;;44415:7;44408:14;;;;;44375:59;44444:22;44490:4;;44478:8;;44470:7;:16;;;;:::i;:::-;44469:25;;;;:::i;:::-;44444:50;;44536:1;44518:7;44512:21;:25;:110;;;;;;;;;;;;;;;;;44564:7;44573:25;:14;:23;:25::i;:::-;44600:15;;;;;;;;;;;;;;;;;44547:69;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44512:110;44505:117;;;;44142:488;;;;:::o;44934:124::-;20020:12;:10;:12::i;:::-;20009:23;;:7;:5;:7::i;:::-;:23;;;20001:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45017:4:::1;44993:21;;:28;;;;;;;;;;;;;;;;;;45048:2;45032:13;:18;;;;44934:124::o:0;43433:398::-;43504:7;43524:28;43555:1;43524:32;;43571:9;43567:219;43590:27;43609:7;43590:18;:27::i;:::-;43586:1;:31;43567:219;;;43639:16;41109:42;43658:33;;;43692:7;43701:1;43658:45;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43639:64;;43746:18;:28;43765:8;43746:28;;;;;;;;;;;;43741:2;:33;;;;:::i;:::-;43718:56;;;;;:::i;:::-;;;43624:162;43619:3;;;;;:::i;:::-;;;;43567:219;;;;43803:20;43796:27;;;43433:398;;;:::o;45888:116::-;20020:12;:10;:12::i;:::-;20009:23;;:7;:5;:7::i;:::-;:23;;;20001:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45953:10:::1;45945:28;;:51;45974:21;45945:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;45888:116::o:0;45066:96::-;20020:12;:10;:12::i;:::-;20009:23;;:7;:5;:7::i;:::-;:23;;;20001:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45147:6:::1;45129:7;;:25;;;;;;;;;;;;;;;;;;45066:96:::0;:::o;41565:32::-;;;;;;;;;;;;;:::o;25195:164::-;25292:4;25316:18;:25;25335:5;25316:25;;;;;;;;;;;;;;;:35;25342:8;25316:35;;;;;;;;;;;;;;;;;;;;;;;;;25309:42;;25195:164;;;;:::o;20689:192::-;20020:12;:10;:12::i;:::-;20009:23;;:7;:5;:7::i;:::-;:23;;;20001:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20798:1:::1;20778:22;;:8;:22;;;;20770:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20854:19;20864:8;20854:9;:19::i;:::-;20689:192:::0;:::o;7761:387::-;7821:4;8029:12;8096:7;8084:20;8076:28;;8139:1;8132:4;:8;8125:15;;;7761:387;;;:::o;34022:126::-;;;;:::o;22044:293::-;22146:4;22194:25;22179:40;;;:11;:40;;;;:101;;;;22247:33;22232:48;;;:11;:48;;;;22179:101;:150;;;;22293:36;22317:11;22293:23;:36::i;:::-;22179:150;22163:166;;22044:293;;;:::o;27930:127::-;27995:4;28047:1;28019:30;;:7;:16;28027:7;28019:16;;;;;;;;;;;;;;;;;;;;;:30;;;;28012:37;;27930:127;;;:::o;15125:98::-;15178:7;15205:10;15198:17;;15125:98;:::o;31912:174::-;32014:2;31987:15;:24;32003:7;31987:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32070:7;32066:2;32032:46;;32041:23;32056:7;32041:14;:23::i;:::-;32032:46;;;;;;;;;;;;31912:174;;:::o;28224:348::-;28317:4;28342:16;28350:7;28342;:16::i;:::-;28334:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28418:13;28434:23;28449:7;28434:14;:23::i;:::-;28418:39;;28487:5;28476:16;;:7;:16;;;:51;;;;28520:7;28496:31;;:20;28508:7;28496:11;:20::i;:::-;:31;;;28476:51;:87;;;;28531:32;28548:5;28555:7;28531:16;:32::i;:::-;28476:87;28468:96;;;28224:348;;;;:::o;31216:578::-;31375:4;31348:31;;:23;31363:7;31348:14;:23::i;:::-;:31;;;31340:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;31458:1;31444:16;;:2;:16;;;;31436:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31514:39;31535:4;31541:2;31545:7;31514:20;:39::i;:::-;31618:29;31635:1;31639:7;31618:8;:29::i;:::-;31679:1;31660:9;:15;31670:4;31660:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31708:1;31691:9;:13;31701:2;31691:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31739:2;31720:7;:16;31728:7;31720:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31778:7;31774:2;31759:27;;31768:4;31759:27;;;;;;;;;;;;31216:578;;;:::o;20889:173::-;20945:16;20964:6;;;;;;;;;;;20945:25;;20990:8;20981:6;;:17;;;;;;;;;;;;;;;;;;21045:8;21014:40;;21035:8;21014:40;;;;;;;;;;;;20934:128;20889:173;:::o;46014:244::-;46082:18;46103:13;:11;:13::i;:::-;46082:34;;46136:19;46144:10;46136:7;:19::i;:::-;46135:20;46127:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;46209:41;46219:18;46239:10;46209:9;:41::i;:::-;46071:187;46014:244;:::o;27302:315::-;27459:28;27469:4;27475:2;27479:7;27459:9;:28::i;:::-;27506:48;27529:4;27535:2;27539:7;27548:5;27506:22;:48::i;:::-;27498:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;27302:315;;;;:::o;44638:106::-;44690:13;44723;44716:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44638:106;:::o;17356:723::-;17412:13;17642:1;17633:5;:10;17629:53;;;17660:10;;;;;;;;;;;;;;;;;;;;;17629:53;17692:12;17707:5;17692:20;;17723:14;17748:78;17763:1;17755:4;:9;17748:78;;17781:8;;;;;:::i;:::-;;;;17812:2;17804:10;;;;;:::i;:::-;;;17748:78;;;17836:19;17868:6;17858:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17836:39;;17886:154;17902:1;17893:5;:10;17886:154;;17930:1;17920:11;;;;;:::i;:::-;;;17997:2;17989:5;:10;;;;:::i;:::-;17976:2;:24;;;;:::i;:::-;17963:39;;17946:6;17953;17946:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;18026:2;18017:11;;;;;:::i;:::-;;;17886:154;;;18064:6;18050:21;;;;;17356:723;;;;:::o;19222:157::-;19307:4;19346:25;19331:40;;;:11;:40;;;;19324:47;;19222:157;;;:::o;36440:589::-;36584:45;36611:4;36617:2;36621:7;36584:26;:45::i;:::-;36662:1;36646:18;;:4;:18;;;36642:187;;;36681:40;36713:7;36681:31;:40::i;:::-;36642:187;;;36751:2;36743:10;;:4;:10;;;36739:90;;36770:47;36803:4;36809:7;36770:32;:47::i;:::-;36739:90;36642:187;36857:1;36843:16;;:2;:16;;;36839:183;;;36876:45;36913:7;36876:36;:45::i;:::-;36839:183;;;36949:4;36943:10;;:2;:10;;;36939:83;;36970:40;36998:2;37002:7;36970:27;:40::i;:::-;36939:83;36839:183;36440:589;;;:::o;28914:110::-;28990:26;29000:2;29004:7;28990:26;;;;;;;;;;;;:9;:26::i;:::-;28914:110;;:::o;32651:799::-;32806:4;32827:15;:2;:13;;;:15::i;:::-;32823:620;;;32879:2;32863:36;;;32900:12;:10;:12::i;:::-;32914:4;32920:7;32929:5;32863:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32859:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33122:1;33105:6;:13;:18;33101:272;;;33148:60;;;;;;;;;;:::i;:::-;;;;;;;;33101:272;33323:6;33317:13;33308:6;33304:2;33300:15;33293:38;32859:529;32996:41;;;32986:51;;;:6;:51;;;;32979:58;;;;;32823:620;33427:4;33420:11;;32651:799;;;;;;;:::o;37752:164::-;37856:10;:17;;;;37829:15;:24;37845:7;37829:24;;;;;;;;;;;:44;;;;37884:10;37900:7;37884:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37752:164;:::o;38543:988::-;38809:22;38859:1;38834:22;38851:4;38834:16;:22::i;:::-;:26;;;;:::i;:::-;38809:51;;38871:18;38892:17;:26;38910:7;38892:26;;;;;;;;;;;;38871:47;;39039:14;39025:10;:28;39021:328;;39070:19;39092:12;:18;39105:4;39092:18;;;;;;;;;;;;;;;:34;39111:14;39092:34;;;;;;;;;;;;39070:56;;39176:11;39143:12;:18;39156:4;39143:18;;;;;;;;;;;;;;;:30;39162:10;39143:30;;;;;;;;;;;:44;;;;39293:10;39260:17;:30;39278:11;39260:30;;;;;;;;;;;:43;;;;39055:294;39021:328;39445:17;:26;39463:7;39445:26;;;;;;;;;;;39438:33;;;39489:12;:18;39502:4;39489:18;;;;;;;;;;;;;;;:34;39508:14;39489:34;;;;;;;;;;;39482:41;;;38624:907;;38543:988;;:::o;39826:1079::-;40079:22;40124:1;40104:10;:17;;;;:21;;;;:::i;:::-;40079:46;;40136:18;40157:15;:24;40173:7;40157:24;;;;;;;;;;;;40136:45;;40508:19;40530:10;40541:14;40530:26;;;;;;;;:::i;:::-;;;;;;;;;;40508:48;;40594:11;40569:10;40580;40569:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;40705:10;40674:15;:28;40690:11;40674:28;;;;;;;;;;;:41;;;;40846:15;:24;40862:7;40846:24;;;;;;;;;;;40839:31;;;40881:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39897:1008;;;39826:1079;:::o;37330:221::-;37415:14;37432:20;37449:2;37432:16;:20::i;:::-;37415:37;;37490:7;37463:12;:16;37476:2;37463:16;;;;;;;;;;;;;;;:24;37480:6;37463:24;;;;;;;;;;;:34;;;;37537:6;37508:17;:26;37526:7;37508:26;;;;;;;;;;;:35;;;;37404:147;37330:221;;:::o;29251:321::-;29381:18;29387:2;29391:7;29381:5;:18::i;:::-;29432:54;29463:1;29467:2;29471:7;29480:5;29432:22;:54::i;:::-;29410:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;29251:321;;;:::o;29908:382::-;30002:1;29988:16;;:2;:16;;;;29980:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30061:16;30069:7;30061;:16::i;:::-;30060:17;30052:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30123:45;30152:1;30156:2;30160:7;30123:20;:45::i;:::-;30198:1;30181:9;:13;30191:2;30181:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30229:2;30210:7;:16;30218:7;30210:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30274:7;30270:2;30249:33;;30266:1;30249:33;;;;;;;;;;;;29908:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:143::-;2334:5;2365:6;2359:13;2350:22;;2381:33;2408:5;2381:33;:::i;:::-;2277:143;;;;:::o;2426:329::-;2485:6;2534:2;2522:9;2513:7;2509:23;2505:32;2502:119;;;2540:79;;:::i;:::-;2502:119;2660:1;2685:53;2730:7;2721:6;2710:9;2706:22;2685:53;:::i;:::-;2675:63;;2631:117;2426:329;;;;:::o;2761:474::-;2829:6;2837;2886:2;2874:9;2865:7;2861:23;2857:32;2854:119;;;2892:79;;:::i;:::-;2854:119;3012:1;3037:53;3082:7;3073:6;3062:9;3058:22;3037:53;:::i;:::-;3027:63;;2983:117;3139:2;3165:53;3210:7;3201:6;3190:9;3186:22;3165:53;:::i;:::-;3155:63;;3110:118;2761:474;;;;;:::o;3241:619::-;3318:6;3326;3334;3383:2;3371:9;3362:7;3358:23;3354:32;3351:119;;;3389:79;;:::i;:::-;3351:119;3509:1;3534:53;3579:7;3570:6;3559:9;3555:22;3534:53;:::i;:::-;3524:63;;3480:117;3636:2;3662:53;3707:7;3698:6;3687:9;3683:22;3662:53;:::i;:::-;3652:63;;3607:118;3764:2;3790:53;3835:7;3826:6;3815:9;3811:22;3790:53;:::i;:::-;3780:63;;3735:118;3241:619;;;;;:::o;3866:943::-;3961:6;3969;3977;3985;4034:3;4022:9;4013:7;4009:23;4005:33;4002:120;;;4041:79;;:::i;:::-;4002:120;4161:1;4186:53;4231:7;4222:6;4211:9;4207:22;4186:53;:::i;:::-;4176:63;;4132:117;4288:2;4314:53;4359:7;4350:6;4339:9;4335:22;4314:53;:::i;:::-;4304:63;;4259:118;4416:2;4442:53;4487:7;4478:6;4467:9;4463:22;4442:53;:::i;:::-;4432:63;;4387:118;4572:2;4561:9;4557:18;4544:32;4603:18;4595:6;4592:30;4589:117;;;4625:79;;:::i;:::-;4589:117;4730:62;4784:7;4775:6;4764:9;4760:22;4730:62;:::i;:::-;4720:72;;4515:287;3866:943;;;;;;;:::o;4815:468::-;4880:6;4888;4937:2;4925:9;4916:7;4912:23;4908:32;4905:119;;;4943:79;;:::i;:::-;4905:119;5063:1;5088:53;5133:7;5124:6;5113:9;5109:22;5088:53;:::i;:::-;5078:63;;5034:117;5190:2;5216:50;5258:7;5249:6;5238:9;5234:22;5216:50;:::i;:::-;5206:60;;5161:115;4815:468;;;;;:::o;5289:474::-;5357:6;5365;5414:2;5402:9;5393:7;5389:23;5385:32;5382:119;;;5420:79;;:::i;:::-;5382:119;5540:1;5565:53;5610:7;5601:6;5590:9;5586:22;5565:53;:::i;:::-;5555:63;;5511:117;5667:2;5693:53;5738:7;5729:6;5718:9;5714:22;5693:53;:::i;:::-;5683:63;;5638:118;5289:474;;;;;:::o;5769:327::-;5827:6;5876:2;5864:9;5855:7;5851:23;5847:32;5844:119;;;5882:79;;:::i;:::-;5844:119;6002:1;6027:52;6071:7;6062:6;6051:9;6047:22;6027:52;:::i;:::-;6017:62;;5973:116;5769:327;;;;:::o;6102:349::-;6171:6;6220:2;6208:9;6199:7;6195:23;6191:32;6188:119;;;6226:79;;:::i;:::-;6188:119;6346:1;6371:63;6426:7;6417:6;6406:9;6402:22;6371:63;:::i;:::-;6361:73;;6317:127;6102:349;;;;:::o;6457:509::-;6526:6;6575:2;6563:9;6554:7;6550:23;6546:32;6543:119;;;6581:79;;:::i;:::-;6543:119;6729:1;6718:9;6714:17;6701:31;6759:18;6751:6;6748:30;6745:117;;;6781:79;;:::i;:::-;6745:117;6886:63;6941:7;6932:6;6921:9;6917:22;6886:63;:::i;:::-;6876:73;;6672:287;6457:509;;;;:::o;6972:329::-;7031:6;7080:2;7068:9;7059:7;7055:23;7051:32;7048:119;;;7086:79;;:::i;:::-;7048:119;7206:1;7231:53;7276:7;7267:6;7256:9;7252:22;7231:53;:::i;:::-;7221:63;;7177:117;6972:329;;;;:::o;7307:351::-;7377:6;7426:2;7414:9;7405:7;7401:23;7397:32;7394:119;;;7432:79;;:::i;:::-;7394:119;7552:1;7577:64;7633:7;7624:6;7613:9;7609:22;7577:64;:::i;:::-;7567:74;;7523:128;7307:351;;;;:::o;7664:474::-;7732:6;7740;7789:2;7777:9;7768:7;7764:23;7760:32;7757:119;;;7795:79;;:::i;:::-;7757:119;7915:1;7940:53;7985:7;7976:6;7965:9;7961:22;7940:53;:::i;:::-;7930:63;;7886:117;8042:2;8068:53;8113:7;8104:6;8093:9;8089:22;8068:53;:::i;:::-;8058:63;;8013:118;7664:474;;;;;:::o;8144:142::-;8247:32;8273:5;8247:32;:::i;:::-;8242:3;8235:45;8144:142;;:::o;8292:118::-;8379:24;8397:5;8379:24;:::i;:::-;8374:3;8367:37;8292:118;;:::o;8416:109::-;8497:21;8512:5;8497:21;:::i;:::-;8492:3;8485:34;8416:109;;:::o;8531:360::-;8617:3;8645:38;8677:5;8645:38;:::i;:::-;8699:70;8762:6;8757:3;8699:70;:::i;:::-;8692:77;;8778:52;8823:6;8818:3;8811:4;8804:5;8800:16;8778:52;:::i;:::-;8855:29;8877:6;8855:29;:::i;:::-;8850:3;8846:39;8839:46;;8621:270;8531:360;;;;:::o;8897:364::-;8985:3;9013:39;9046:5;9013:39;:::i;:::-;9068:71;9132:6;9127:3;9068:71;:::i;:::-;9061:78;;9148:52;9193:6;9188:3;9181:4;9174:5;9170:16;9148:52;:::i;:::-;9225:29;9247:6;9225:29;:::i;:::-;9220:3;9216:39;9209:46;;8989:272;8897:364;;;;:::o;9267:377::-;9373:3;9401:39;9434:5;9401:39;:::i;:::-;9456:89;9538:6;9533:3;9456:89;:::i;:::-;9449:96;;9554:52;9599:6;9594:3;9587:4;9580:5;9576:16;9554:52;:::i;:::-;9631:6;9626:3;9622:16;9615:23;;9377:267;9267:377;;;;:::o;9650:366::-;9792:3;9813:67;9877:2;9872:3;9813:67;:::i;:::-;9806:74;;9889:93;9978:3;9889:93;:::i;:::-;10007:2;10002:3;9998:12;9991:19;;9650:366;;;:::o;10022:::-;10164:3;10185:67;10249:2;10244:3;10185:67;:::i;:::-;10178:74;;10261:93;10350:3;10261:93;:::i;:::-;10379:2;10374:3;10370:12;10363:19;;10022:366;;;:::o;10394:::-;10536:3;10557:67;10621:2;10616:3;10557:67;:::i;:::-;10550:74;;10633:93;10722:3;10633:93;:::i;:::-;10751:2;10746:3;10742:12;10735:19;;10394:366;;;:::o;10766:::-;10908:3;10929:67;10993:2;10988:3;10929:67;:::i;:::-;10922:74;;11005:93;11094:3;11005:93;:::i;:::-;11123:2;11118:3;11114:12;11107:19;;10766:366;;;:::o;11138:::-;11280:3;11301:67;11365:2;11360:3;11301:67;:::i;:::-;11294:74;;11377:93;11466:3;11377:93;:::i;:::-;11495:2;11490:3;11486:12;11479:19;;11138:366;;;:::o;11510:::-;11652:3;11673:67;11737:2;11732:3;11673:67;:::i;:::-;11666:74;;11749:93;11838:3;11749:93;:::i;:::-;11867:2;11862:3;11858:12;11851:19;;11510:366;;;:::o;11882:::-;12024:3;12045:67;12109:2;12104:3;12045:67;:::i;:::-;12038:74;;12121:93;12210:3;12121:93;:::i;:::-;12239:2;12234:3;12230:12;12223:19;;11882:366;;;:::o;12254:::-;12396:3;12417:67;12481:2;12476:3;12417:67;:::i;:::-;12410:74;;12493:93;12582:3;12493:93;:::i;:::-;12611:2;12606:3;12602:12;12595:19;;12254:366;;;:::o;12626:::-;12768:3;12789:67;12853:2;12848:3;12789:67;:::i;:::-;12782:74;;12865:93;12954:3;12865:93;:::i;:::-;12983:2;12978:3;12974:12;12967:19;;12626:366;;;:::o;12998:::-;13140:3;13161:67;13225:2;13220:3;13161:67;:::i;:::-;13154:74;;13237:93;13326:3;13237:93;:::i;:::-;13355:2;13350:3;13346:12;13339:19;;12998:366;;;:::o;13370:::-;13512:3;13533:67;13597:2;13592:3;13533:67;:::i;:::-;13526:74;;13609:93;13698:3;13609:93;:::i;:::-;13727:2;13722:3;13718:12;13711:19;;13370:366;;;:::o;13742:::-;13884:3;13905:67;13969:2;13964:3;13905:67;:::i;:::-;13898:74;;13981:93;14070:3;13981:93;:::i;:::-;14099:2;14094:3;14090:12;14083:19;;13742:366;;;:::o;14114:::-;14256:3;14277:67;14341:2;14336:3;14277:67;:::i;:::-;14270:74;;14353:93;14442:3;14353:93;:::i;:::-;14471:2;14466:3;14462:12;14455:19;;14114:366;;;:::o;14486:::-;14628:3;14649:67;14713:2;14708:3;14649:67;:::i;:::-;14642:74;;14725:93;14814:3;14725:93;:::i;:::-;14843:2;14838:3;14834:12;14827:19;;14486:366;;;:::o;14858:::-;15000:3;15021:67;15085:2;15080:3;15021:67;:::i;:::-;15014:74;;15097:93;15186:3;15097:93;:::i;:::-;15215:2;15210:3;15206:12;15199:19;;14858:366;;;:::o;15230:::-;15372:3;15393:67;15457:2;15452:3;15393:67;:::i;:::-;15386:74;;15469:93;15558:3;15469:93;:::i;:::-;15587:2;15582:3;15578:12;15571:19;;15230:366;;;:::o;15602:::-;15744:3;15765:67;15829:2;15824:3;15765:67;:::i;:::-;15758:74;;15841:93;15930:3;15841:93;:::i;:::-;15959:2;15954:3;15950:12;15943:19;;15602:366;;;:::o;15974:::-;16116:3;16137:67;16201:2;16196:3;16137:67;:::i;:::-;16130:74;;16213:93;16302:3;16213:93;:::i;:::-;16331:2;16326:3;16322:12;16315:19;;15974:366;;;:::o;16346:::-;16488:3;16509:67;16573:2;16568:3;16509:67;:::i;:::-;16502:74;;16585:93;16674:3;16585:93;:::i;:::-;16703:2;16698:3;16694:12;16687:19;;16346:366;;;:::o;16718:::-;16860:3;16881:67;16945:2;16940:3;16881:67;:::i;:::-;16874:74;;16957:93;17046:3;16957:93;:::i;:::-;17075:2;17070:3;17066:12;17059:19;;16718:366;;;:::o;17090:::-;17232:3;17253:67;17317:2;17312:3;17253:67;:::i;:::-;17246:74;;17329:93;17418:3;17329:93;:::i;:::-;17447:2;17442:3;17438:12;17431:19;;17090:366;;;:::o;17462:::-;17604:3;17625:67;17689:2;17684:3;17625:67;:::i;:::-;17618:74;;17701:93;17790:3;17701:93;:::i;:::-;17819:2;17814:3;17810:12;17803:19;;17462:366;;;:::o;17834:::-;17976:3;17997:67;18061:2;18056:3;17997:67;:::i;:::-;17990:74;;18073:93;18162:3;18073:93;:::i;:::-;18191:2;18186:3;18182:12;18175:19;;17834:366;;;:::o;18206:::-;18348:3;18369:67;18433:2;18428:3;18369:67;:::i;:::-;18362:74;;18445:93;18534:3;18445:93;:::i;:::-;18563:2;18558:3;18554:12;18547:19;;18206:366;;;:::o;18578:::-;18720:3;18741:67;18805:2;18800:3;18741:67;:::i;:::-;18734:74;;18817:93;18906:3;18817:93;:::i;:::-;18935:2;18930:3;18926:12;18919:19;;18578:366;;;:::o;18950:::-;19092:3;19113:67;19177:2;19172:3;19113:67;:::i;:::-;19106:74;;19189:93;19278:3;19189:93;:::i;:::-;19307:2;19302:3;19298:12;19291:19;;18950:366;;;:::o;19322:::-;19464:3;19485:67;19549:2;19544:3;19485:67;:::i;:::-;19478:74;;19561:93;19650:3;19561:93;:::i;:::-;19679:2;19674:3;19670:12;19663:19;;19322:366;;;:::o;19694:::-;19836:3;19857:67;19921:2;19916:3;19857:67;:::i;:::-;19850:74;;19933:93;20022:3;19933:93;:::i;:::-;20051:2;20046:3;20042:12;20035:19;;19694:366;;;:::o;20066:::-;20208:3;20229:67;20293:2;20288:3;20229:67;:::i;:::-;20222:74;;20305:93;20394:3;20305:93;:::i;:::-;20423:2;20418:3;20414:12;20407:19;;20066:366;;;:::o;20438:118::-;20525:24;20543:5;20525:24;:::i;:::-;20520:3;20513:37;20438:118;;:::o;20562:595::-;20790:3;20812:95;20903:3;20894:6;20812:95;:::i;:::-;20805:102;;20924:95;21015:3;21006:6;20924:95;:::i;:::-;20917:102;;21036:95;21127:3;21118:6;21036:95;:::i;:::-;21029:102;;21148:3;21141:10;;20562:595;;;;;;:::o;21163:222::-;21256:4;21294:2;21283:9;21279:18;21271:26;;21307:71;21375:1;21364:9;21360:17;21351:6;21307:71;:::i;:::-;21163:222;;;;:::o;21391:254::-;21500:4;21538:2;21527:9;21523:18;21515:26;;21551:87;21635:1;21624:9;21620:17;21611:6;21551:87;:::i;:::-;21391:254;;;;:::o;21651:640::-;21846:4;21884:3;21873:9;21869:19;21861:27;;21898:71;21966:1;21955:9;21951:17;21942:6;21898:71;:::i;:::-;21979:72;22047:2;22036:9;22032:18;22023:6;21979:72;:::i;:::-;22061;22129:2;22118:9;22114:18;22105:6;22061:72;:::i;:::-;22180:9;22174:4;22170:20;22165:2;22154:9;22150:18;22143:48;22208:76;22279:4;22270:6;22208:76;:::i;:::-;22200:84;;21651:640;;;;;;;:::o;22297:332::-;22418:4;22456:2;22445:9;22441:18;22433:26;;22469:71;22537:1;22526:9;22522:17;22513:6;22469:71;:::i;:::-;22550:72;22618:2;22607:9;22603:18;22594:6;22550:72;:::i;:::-;22297:332;;;;;:::o;22635:210::-;22722:4;22760:2;22749:9;22745:18;22737:26;;22773:65;22835:1;22824:9;22820:17;22811:6;22773:65;:::i;:::-;22635:210;;;;:::o;22851:313::-;22964:4;23002:2;22991:9;22987:18;22979:26;;23051:9;23045:4;23041:20;23037:1;23026:9;23022:17;23015:47;23079:78;23152:4;23143:6;23079:78;:::i;:::-;23071:86;;22851:313;;;;:::o;23170:419::-;23336:4;23374:2;23363:9;23359:18;23351:26;;23423:9;23417:4;23413:20;23409:1;23398:9;23394:17;23387:47;23451:131;23577:4;23451:131;:::i;:::-;23443:139;;23170:419;;;:::o;23595:::-;23761:4;23799:2;23788:9;23784:18;23776:26;;23848:9;23842:4;23838:20;23834:1;23823:9;23819:17;23812:47;23876:131;24002:4;23876:131;:::i;:::-;23868:139;;23595:419;;;:::o;24020:::-;24186:4;24224:2;24213:9;24209:18;24201:26;;24273:9;24267:4;24263:20;24259:1;24248:9;24244:17;24237:47;24301:131;24427:4;24301:131;:::i;:::-;24293:139;;24020:419;;;:::o;24445:::-;24611:4;24649:2;24638:9;24634:18;24626:26;;24698:9;24692:4;24688:20;24684:1;24673:9;24669:17;24662:47;24726:131;24852:4;24726:131;:::i;:::-;24718:139;;24445:419;;;:::o;24870:::-;25036:4;25074:2;25063:9;25059:18;25051:26;;25123:9;25117:4;25113:20;25109:1;25098:9;25094:17;25087:47;25151:131;25277:4;25151:131;:::i;:::-;25143:139;;24870:419;;;:::o;25295:::-;25461:4;25499:2;25488:9;25484:18;25476:26;;25548:9;25542:4;25538:20;25534:1;25523:9;25519:17;25512:47;25576:131;25702:4;25576:131;:::i;:::-;25568:139;;25295:419;;;:::o;25720:::-;25886:4;25924:2;25913:9;25909:18;25901:26;;25973:9;25967:4;25963:20;25959:1;25948:9;25944:17;25937:47;26001:131;26127:4;26001:131;:::i;:::-;25993:139;;25720:419;;;:::o;26145:::-;26311:4;26349:2;26338:9;26334:18;26326:26;;26398:9;26392:4;26388:20;26384:1;26373:9;26369:17;26362:47;26426:131;26552:4;26426:131;:::i;:::-;26418:139;;26145:419;;;:::o;26570:::-;26736:4;26774:2;26763:9;26759:18;26751:26;;26823:9;26817:4;26813:20;26809:1;26798:9;26794:17;26787:47;26851:131;26977:4;26851:131;:::i;:::-;26843:139;;26570:419;;;:::o;26995:::-;27161:4;27199:2;27188:9;27184:18;27176:26;;27248:9;27242:4;27238:20;27234:1;27223:9;27219:17;27212:47;27276:131;27402:4;27276:131;:::i;:::-;27268:139;;26995:419;;;:::o;27420:::-;27586:4;27624:2;27613:9;27609:18;27601:26;;27673:9;27667:4;27663:20;27659:1;27648:9;27644:17;27637:47;27701:131;27827:4;27701:131;:::i;:::-;27693:139;;27420:419;;;:::o;27845:::-;28011:4;28049:2;28038:9;28034:18;28026:26;;28098:9;28092:4;28088:20;28084:1;28073:9;28069:17;28062:47;28126:131;28252:4;28126:131;:::i;:::-;28118:139;;27845:419;;;:::o;28270:::-;28436:4;28474:2;28463:9;28459:18;28451:26;;28523:9;28517:4;28513:20;28509:1;28498:9;28494:17;28487:47;28551:131;28677:4;28551:131;:::i;:::-;28543:139;;28270:419;;;:::o;28695:::-;28861:4;28899:2;28888:9;28884:18;28876:26;;28948:9;28942:4;28938:20;28934:1;28923:9;28919:17;28912:47;28976:131;29102:4;28976:131;:::i;:::-;28968:139;;28695:419;;;:::o;29120:::-;29286:4;29324:2;29313:9;29309:18;29301:26;;29373:9;29367:4;29363:20;29359:1;29348:9;29344:17;29337:47;29401:131;29527:4;29401:131;:::i;:::-;29393:139;;29120:419;;;:::o;29545:::-;29711:4;29749:2;29738:9;29734:18;29726:26;;29798:9;29792:4;29788:20;29784:1;29773:9;29769:17;29762:47;29826:131;29952:4;29826:131;:::i;:::-;29818:139;;29545:419;;;:::o;29970:::-;30136:4;30174:2;30163:9;30159:18;30151:26;;30223:9;30217:4;30213:20;30209:1;30198:9;30194:17;30187:47;30251:131;30377:4;30251:131;:::i;:::-;30243:139;;29970:419;;;:::o;30395:::-;30561:4;30599:2;30588:9;30584:18;30576:26;;30648:9;30642:4;30638:20;30634:1;30623:9;30619:17;30612:47;30676:131;30802:4;30676:131;:::i;:::-;30668:139;;30395:419;;;:::o;30820:::-;30986:4;31024:2;31013:9;31009:18;31001:26;;31073:9;31067:4;31063:20;31059:1;31048:9;31044:17;31037:47;31101:131;31227:4;31101:131;:::i;:::-;31093:139;;30820:419;;;:::o;31245:::-;31411:4;31449:2;31438:9;31434:18;31426:26;;31498:9;31492:4;31488:20;31484:1;31473:9;31469:17;31462:47;31526:131;31652:4;31526:131;:::i;:::-;31518:139;;31245:419;;;:::o;31670:::-;31836:4;31874:2;31863:9;31859:18;31851:26;;31923:9;31917:4;31913:20;31909:1;31898:9;31894:17;31887:47;31951:131;32077:4;31951:131;:::i;:::-;31943:139;;31670:419;;;:::o;32095:::-;32261:4;32299:2;32288:9;32284:18;32276:26;;32348:9;32342:4;32338:20;32334:1;32323:9;32319:17;32312:47;32376:131;32502:4;32376:131;:::i;:::-;32368:139;;32095:419;;;:::o;32520:::-;32686:4;32724:2;32713:9;32709:18;32701:26;;32773:9;32767:4;32763:20;32759:1;32748:9;32744:17;32737:47;32801:131;32927:4;32801:131;:::i;:::-;32793:139;;32520:419;;;:::o;32945:::-;33111:4;33149:2;33138:9;33134:18;33126:26;;33198:9;33192:4;33188:20;33184:1;33173:9;33169:17;33162:47;33226:131;33352:4;33226:131;:::i;:::-;33218:139;;32945:419;;;:::o;33370:::-;33536:4;33574:2;33563:9;33559:18;33551:26;;33623:9;33617:4;33613:20;33609:1;33598:9;33594:17;33587:47;33651:131;33777:4;33651:131;:::i;:::-;33643:139;;33370:419;;;:::o;33795:::-;33961:4;33999:2;33988:9;33984:18;33976:26;;34048:9;34042:4;34038:20;34034:1;34023:9;34019:17;34012:47;34076:131;34202:4;34076:131;:::i;:::-;34068:139;;33795:419;;;:::o;34220:::-;34386:4;34424:2;34413:9;34409:18;34401:26;;34473:9;34467:4;34463:20;34459:1;34448:9;34444:17;34437:47;34501:131;34627:4;34501:131;:::i;:::-;34493:139;;34220:419;;;:::o;34645:::-;34811:4;34849:2;34838:9;34834:18;34826:26;;34898:9;34892:4;34888:20;34884:1;34873:9;34869:17;34862:47;34926:131;35052:4;34926:131;:::i;:::-;34918:139;;34645:419;;;:::o;35070:::-;35236:4;35274:2;35263:9;35259:18;35251:26;;35323:9;35317:4;35313:20;35309:1;35298:9;35294:17;35287:47;35351:131;35477:4;35351:131;:::i;:::-;35343:139;;35070:419;;;:::o;35495:222::-;35588:4;35626:2;35615:9;35611:18;35603:26;;35639:71;35707:1;35696:9;35692:17;35683:6;35639:71;:::i;:::-;35495:222;;;;:::o;35723:129::-;35757:6;35784:20;;:::i;:::-;35774:30;;35813:33;35841:4;35833:6;35813:33;:::i;:::-;35723:129;;;:::o;35858:75::-;35891:6;35924:2;35918:9;35908:19;;35858:75;:::o;35939:307::-;36000:4;36090:18;36082:6;36079:30;36076:56;;;36112:18;;:::i;:::-;36076:56;36150:29;36172:6;36150:29;:::i;:::-;36142:37;;36234:4;36228;36224:15;36216:23;;35939:307;;;:::o;36252:308::-;36314:4;36404:18;36396:6;36393:30;36390:56;;;36426:18;;:::i;:::-;36390:56;36464:29;36486:6;36464:29;:::i;:::-;36456:37;;36548:4;36542;36538:15;36530:23;;36252:308;;;:::o;36566:98::-;36617:6;36651:5;36645:12;36635:22;;36566:98;;;:::o;36670:99::-;36722:6;36756:5;36750:12;36740:22;;36670:99;;;:::o;36775:168::-;36858:11;36892:6;36887:3;36880:19;36932:4;36927:3;36923:14;36908:29;;36775:168;;;;:::o;36949:169::-;37033:11;37067:6;37062:3;37055:19;37107:4;37102:3;37098:14;37083:29;;36949:169;;;;:::o;37124:148::-;37226:11;37263:3;37248:18;;37124:148;;;;:::o;37278:305::-;37318:3;37337:20;37355:1;37337:20;:::i;:::-;37332:25;;37371:20;37389:1;37371:20;:::i;:::-;37366:25;;37525:1;37457:66;37453:74;37450:1;37447:81;37444:107;;;37531:18;;:::i;:::-;37444:107;37575:1;37572;37568:9;37561:16;;37278:305;;;;:::o;37589:185::-;37629:1;37646:20;37664:1;37646:20;:::i;:::-;37641:25;;37680:20;37698:1;37680:20;:::i;:::-;37675:25;;37719:1;37709:35;;37724:18;;:::i;:::-;37709:35;37766:1;37763;37759:9;37754:14;;37589:185;;;;:::o;37780:348::-;37820:7;37843:20;37861:1;37843:20;:::i;:::-;37838:25;;37877:20;37895:1;37877:20;:::i;:::-;37872:25;;38065:1;37997:66;37993:74;37990:1;37987:81;37982:1;37975:9;37968:17;37964:105;37961:131;;;38072:18;;:::i;:::-;37961:131;38120:1;38117;38113:9;38102:20;;37780:348;;;;:::o;38134:191::-;38174:4;38194:20;38212:1;38194:20;:::i;:::-;38189:25;;38228:20;38246:1;38228:20;:::i;:::-;38223:25;;38267:1;38264;38261:8;38258:34;;;38272:18;;:::i;:::-;38258:34;38317:1;38314;38310:9;38302:17;;38134:191;;;;:::o;38331:96::-;38368:7;38397:24;38415:5;38397:24;:::i;:::-;38386:35;;38331:96;;;:::o;38433:104::-;38478:7;38507:24;38525:5;38507:24;:::i;:::-;38496:35;;38433:104;;;:::o;38543:90::-;38577:7;38620:5;38613:13;38606:21;38595:32;;38543:90;;;:::o;38639:149::-;38675:7;38715:66;38708:5;38704:78;38693:89;;38639:149;;;:::o;38794:126::-;38831:7;38871:42;38864:5;38860:54;38849:65;;38794:126;;;:::o;38926:77::-;38963:7;38992:5;38981:16;;38926:77;;;:::o;39009:154::-;39093:6;39088:3;39083;39070:30;39155:1;39146:6;39141:3;39137:16;39130:27;39009:154;;;:::o;39169:307::-;39237:1;39247:113;39261:6;39258:1;39255:13;39247:113;;;39346:1;39341:3;39337:11;39331:18;39327:1;39322:3;39318:11;39311:39;39283:2;39280:1;39276:10;39271:15;;39247:113;;;39378:6;39375:1;39372:13;39369:101;;;39458:1;39449:6;39444:3;39440:16;39433:27;39369:101;39218:258;39169:307;;;:::o;39482:320::-;39526:6;39563:1;39557:4;39553:12;39543:22;;39610:1;39604:4;39600:12;39631:18;39621:81;;39687:4;39679:6;39675:17;39665:27;;39621:81;39749:2;39741:6;39738:14;39718:18;39715:38;39712:84;;;39768:18;;:::i;:::-;39712:84;39533:269;39482:320;;;:::o;39808:281::-;39891:27;39913:4;39891:27;:::i;:::-;39883:6;39879:40;40021:6;40009:10;40006:22;39985:18;39973:10;39970:34;39967:62;39964:88;;;40032:18;;:::i;:::-;39964:88;40072:10;40068:2;40061:22;39851:238;39808:281;;:::o;40095:233::-;40134:3;40157:24;40175:5;40157:24;:::i;:::-;40148:33;;40203:66;40196:5;40193:77;40190:103;;;40273:18;;:::i;:::-;40190:103;40320:1;40313:5;40309:13;40302:20;;40095:233;;;:::o;40334:176::-;40366:1;40383:20;40401:1;40383:20;:::i;:::-;40378:25;;40417:20;40435:1;40417:20;:::i;:::-;40412:25;;40456:1;40446:35;;40461:18;;:::i;:::-;40446:35;40502:1;40499;40495:9;40490:14;;40334:176;;;;:::o;40516:180::-;40564:77;40561:1;40554:88;40661:4;40658:1;40651:15;40685:4;40682:1;40675:15;40702:180;40750:77;40747:1;40740:88;40847:4;40844:1;40837:15;40871:4;40868:1;40861:15;40888:180;40936:77;40933:1;40926:88;41033:4;41030:1;41023:15;41057:4;41054:1;41047:15;41074:180;41122:77;41119:1;41112:88;41219:4;41216:1;41209:15;41243:4;41240:1;41233:15;41260:180;41308:77;41305:1;41298:88;41405:4;41402:1;41395:15;41429:4;41426:1;41419:15;41446:180;41494:77;41491:1;41484:88;41591:4;41588:1;41581:15;41615:4;41612:1;41605:15;41632:117;41741:1;41738;41731:12;41755:117;41864:1;41861;41854:12;41878:117;41987:1;41984;41977:12;42001:117;42110:1;42107;42100:12;42124:102;42165:6;42216:2;42212:7;42207:2;42200:5;42196:14;42192:28;42182:38;;42124:102;;;:::o;42232:182::-;42372:34;42368:1;42360:6;42356:14;42349:58;42232:182;:::o;42420:230::-;42560:34;42556:1;42548:6;42544:14;42537:58;42629:13;42624:2;42616:6;42612:15;42605:38;42420:230;:::o;42656:237::-;42796:34;42792:1;42784:6;42780:14;42773:58;42865:20;42860:2;42852:6;42848:15;42841:45;42656:237;:::o;42899:225::-;43039:34;43035:1;43027:6;43023:14;43016:58;43108:8;43103:2;43095:6;43091:15;43084:33;42899:225;:::o;43130:178::-;43270:30;43266:1;43258:6;43254:14;43247:54;43130:178;:::o;43314:223::-;43454:34;43450:1;43442:6;43438:14;43431:58;43523:6;43518:2;43510:6;43506:15;43499:31;43314:223;:::o;43543:175::-;43683:27;43679:1;43671:6;43667:14;43660:51;43543:175;:::o;43724:231::-;43864:34;43860:1;43852:6;43848:14;43841:58;43933:14;43928:2;43920:6;43916:15;43909:39;43724:231;:::o;43961:225::-;44101:34;44097:1;44089:6;44085:14;44078:58;44170:8;44165:2;44157:6;44153:15;44146:33;43961:225;:::o;44192:243::-;44332:34;44328:1;44320:6;44316:14;44309:58;44401:26;44396:2;44388:6;44384:15;44377:51;44192:243;:::o;44441:229::-;44581:34;44577:1;44569:6;44565:14;44558:58;44650:12;44645:2;44637:6;44633:15;44626:37;44441:229;:::o;44676:228::-;44816:34;44812:1;44804:6;44800:14;44793:58;44885:11;44880:2;44872:6;44868:15;44861:36;44676:228;:::o;44910:222::-;45050:34;45046:1;45038:6;45034:14;45027:58;45119:5;45114:2;45106:6;45102:15;45095:30;44910:222;:::o;45138:182::-;45278:34;45274:1;45266:6;45262:14;45255:58;45138:182;:::o;45326:223::-;45466:34;45462:1;45454:6;45450:14;45443:58;45535:6;45530:2;45522:6;45518:15;45511:31;45326:223;:::o;45555:168::-;45695:20;45691:1;45683:6;45679:14;45672:44;45555:168;:::o;45729:231::-;45869:34;45865:1;45857:6;45853:14;45846:58;45938:14;45933:2;45925:6;45921:15;45914:39;45729:231;:::o;45966:164::-;46106:16;46102:1;46094:6;46090:14;46083:40;45966:164;:::o;46136:182::-;46276:34;46272:1;46264:6;46260:14;46253:58;46136:182;:::o;46324:228::-;46464:34;46460:1;46452:6;46448:14;46441:58;46533:11;46528:2;46520:6;46516:15;46509:36;46324:228;:::o;46558:234::-;46698:34;46694:1;46686:6;46682:14;46675:58;46767:17;46762:2;46754:6;46750:15;46743:42;46558:234;:::o;46798:230::-;46938:34;46934:1;46926:6;46922:14;46915:58;47007:13;47002:2;46994:6;46990:15;46983:38;46798:230;:::o;47034:175::-;47174:27;47170:1;47162:6;47158:14;47151:51;47034:175;:::o;47215:220::-;47355:34;47351:1;47343:6;47339:14;47332:58;47424:3;47419:2;47411:6;47407:15;47400:28;47215:220;:::o;47441:175::-;47581:27;47577:1;47569:6;47565:14;47558:51;47441:175;:::o;47622:236::-;47762:34;47758:1;47750:6;47746:14;47739:58;47831:19;47826:2;47818:6;47814:15;47807:44;47622:236;:::o;47864:231::-;48004:34;48000:1;47992:6;47988:14;47981:58;48073:14;48068:2;48060:6;48056:15;48049:39;47864:231;:::o;48101:166::-;48241:18;48237:1;48229:6;48225:14;48218:42;48101:166;:::o;48273:181::-;48413:33;48409:1;48401:6;48397:14;48390:57;48273:181;:::o;48460:122::-;48533:24;48551:5;48533:24;:::i;:::-;48526:5;48523:35;48513:63;;48572:1;48569;48562:12;48513:63;48460:122;:::o;48588:116::-;48658:21;48673:5;48658:21;:::i;:::-;48651:5;48648:32;48638:60;;48694:1;48691;48684:12;48638:60;48588:116;:::o;48710:120::-;48782:23;48799:5;48782:23;:::i;:::-;48775:5;48772:34;48762:62;;48820:1;48817;48810:12;48762:62;48710:120;:::o;48836:122::-;48909:24;48927:5;48909:24;:::i;:::-;48902:5;48899:35;48889:63;;48948:1;48945;48938:12;48889:63;48836:122;:::o
Swarm Source
ipfs://6cb51b4c73fe23aaa5698e863e6055c96aaf53667b3a94fb2c36391980d85a15
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.