ERC-721
Overview
Max Total Supply
0 MMS
Holders
1,433
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Balance
55 MMSLoading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
Monster
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at ftmscan.com on 2021-09-15 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; 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); } } } } pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. 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 {} } pragma solidity ^0.8.7; contract Monster is ERC721 { address payable public owner; mapping(uint => string) public profession; string[79] private monsters = [ "Kidnapper", "Axe Gang", "Jackstraw", "Serpent", "Toad", "Tarantula", "Man-eating Tree", "Basilisk", "Orc", "Corruptor", "Radiant Rat", "Giant Crocodile", "Forest Snowman", "Dryad", "Giant Elephant", "Giant Furbolg", "Werewolf", "Centaur", "Bariour", "Fenrir", "Vampire Bat", "Sand Ghost", "Ghoul", "Ancient Boulder", "Maffia", "Lizard Man", "Drug Dealer", "Tauren", "Ape", "King Kong", "Dwarf Orc", "Dwarf", "Temple Guard", "Temple Warrior", "Dullahan", "Gargoyle", "Skeleton Warrior", "Skeleton Summoner", "Skeleton Archer", "Echinda", "Empusae", "Gnome", "Ordinary Zombie", "Vampire Zombie", "Captain Zombie", "Fox Demon", "Night Elf", "Ghost", "Banshee", "Witch", "Lich", "Tomb Raider", "Mummy", "Immortal", "Vampire", "Fafnir", "Drake", "Dragon", "Griffin", "Alien Guard", "Alien Warrior", "Alien Leader", "Falcon", "Pterosaur", "Giant", "Medusa", "Grendel", "Geryon", "Pirate", "Black Manta", "Orm Marius", "Alien", "Na'vi Warrior", "Na'vi Archer", "Na'vi Leader", "T-800", "T-1000", "Electronic Squid", "Decepticon" ]; uint[79] private professions = [ 1, 2, 3, 4, 2, 5, 2, 6, 7, 8, 2, 7, 4, 9, 3, 4, 10, 11, 12, 8, 2, 13, 8, 14, 1, 3, 1, 7, 7, 14, 10, 7, 3, 7, 15, 3, 7, 6, 11, 13, 13, 1, 3, 5, 6, 5, 13, 13, 5, 10, 13, 1, 15, 13, 8, 2, 4, 14, 2, 3, 7, 6, 4, 12, 14, 5, 8, 14, 1, 7, 6, 7, 7, 11, 6, 7, 7, 9, 7 ]; string[15] private prefixes = [ "Angry", "Hungry", "Scary", "Damned", "Corrupt", "Gloomy", "Horrific", "Ghostly", "Freaky", "Amnesic", "Painful", "Overjoyed", "Sorrowful", "Blusterous", "Degraded" ]; uint public next_monster; uint constant TOTAL = 30; uint constant POINT = 9; mapping(uint => string) public monster; mapping(uint => string) public prefix; mapping(uint => uint) public suffix; mapping(uint => uint) public health_Point; mapping(uint => uint) public physical_damage_point; mapping(uint => uint) public magical_damage_point; mapping(uint => uint) public physical_defence; mapping(uint => uint) public magical_defence; mapping(uint => uint) public dodge; mapping(uint => uint) public hit; mapping(uint => uint) public critical; mapping(uint => uint) public parry; uint[POINT] private basePoints; constructor() ERC721("Monster Manifested", "MMS"){ owner = payable(msg.sender); profession[1] = "Robber"; profession[2] = "Headsman"; profession[3] = "Guard"; profession[4] = "Hunter"; profession[5] = "Wizard"; profession[6] = "Summoner"; profession[7] = "Warrior"; profession[8] = "Demon"; profession[9] = "Follower"; profession[10] = "Shaman"; profession[11] = "Archer"; profession[12] = "Spear Thrower"; profession[13] = "Immortal"; profession[14] = "Titan"; profession[15] = "Dark Knight"; } event monstered(address indexed owner, uint monster); function getPrefix(uint _token_id) public view returns (string memory) { uint rand = uint(keccak256(abi.encodePacked(block.timestamp, _token_id))); return prefixes[rand % prefixes.length]; } function mintMonster() private{ next_monster ++; uint _next_monster = next_monster; uint rand = uint(keccak256(abi.encodePacked(_next_monster))); monster[_next_monster] = monsters[rand % monsters.length]; suffix[_next_monster] = professions[rand % professions.length]; prefix[_next_monster] = getPrefix(_next_monster); uint[] memory divides = divide(_next_monster); uint[] memory divide_points = new uint[](POINT-1); uint p; for (uint i=0; i<TOTAL; i++){ if (divides[i] == 1){ divide_points[p] = i; p++; } } get_base_points(professions[rand % professions.length]); health_Point[_next_monster] = divide_points[0] + basePoints[0]; physical_damage_point[_next_monster] = divide_points[1] - divide_points[0] + basePoints[1]; magical_damage_point[_next_monster] = divide_points[2] - divide_points[1] + basePoints[2]; physical_defence[_next_monster] = divide_points[3] - divide_points[2] + basePoints[3]; magical_defence[_next_monster] = divide_points[4] - divide_points[3] + basePoints[4]; dodge[_next_monster] = divide_points[5] - divide_points[4] + basePoints[5]; hit[_next_monster] = divide_points[6] - divide_points[5] + basePoints[6]; critical[_next_monster] = divide_points[7] - divide_points[6] + basePoints[7]; parry[_next_monster] = TOTAL - divide_points[7] + basePoints[8]; _safeMint(msg.sender, _next_monster); emit monstered(msg.sender, _next_monster); } function get_base_points(uint _suffix) private { if (_suffix == 1){ basePoints = [8, 10, 5, 6, 4, 10, 10, 5, 2]; } else if (_suffix == 2){ basePoints = [9, 7, 4, 6, 6, 5, 10, 10, 3]; } else if (_suffix == 3){ basePoints = [12, 5, 5, 10, 10, 3, 4, 3, 8]; } else if (_suffix == 4){ basePoints = [8, 9, 9, 7, 7, 8, 5, 5, 2]; } else if (_suffix == 5){ basePoints = [6, 3, 12, 4, 8, 10, 10, 5, 2]; } else if (_suffix == 6){ basePoints = [6, 5, 10, 8, 8, 7, 3, 5, 8]; } else if (_suffix == 7){ basePoints = [10, 12, 2, 12, 4, 2, 7, 7, 4]; } else if (_suffix == 8){ basePoints = [12, 8, 7, 12, 5, 9, 2, 2, 3]; } else if (_suffix == 9){ basePoints = [8, 9, 7, 7, 9, 5, 5, 5, 5]; } else if (_suffix == 10){ basePoints = [10, 5, 5, 12, 12, 5, 6, 3, 2]; } else if (_suffix == 11){ basePoints = [6, 12, 3, 3, 2, 12, 12, 8, 2]; } else if (_suffix == 12){ basePoints = [6, 12, 3, 4, 5, 8, 8, 8, 6]; } else if (_suffix == 13){ basePoints = [7, 5, 8, 5, 5, 12, 8, 6, 4]; } else if (_suffix == 14){ basePoints = [15, 5, 5, 8, 8, 2, 7, 2, 8]; }else if (_suffix == 15){ basePoints = [8, 9, 5, 10, 6, 5, 4, 8, 5]; } } function divide(uint _token_id) public pure returns (uint[] memory){ uint[] memory divides = new uint[](TOTAL); uint rand; uint j; for(uint i=0; i<POINT-1; i++){ uint d; while(d == 0 || divides[d] == 1){ j++; rand = uint(keccak256(abi.encodePacked(_token_id, j))); d = rand % TOTAL; } divides[d] = 1; } return divides; } function tokenURI(uint _token_id) override public view returns (string memory) { string[23] memory parts; parts[0] = '<svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMinYMin meet" viewBox="0 0 350 350"><style>.base { fill: white; font-family: serif; font-size: 14px; }</style><rect width="100%" height="100%" fill="#160C0A" /><text x="10" y="20" class="base">'; parts[1] = string(abi.encodePacked(prefix[_token_id], " ", monster[_token_id])); parts[2] = '</text><text x="10" y="40" class="base">'; parts[3] = string(abi.encodePacked(profession[suffix[_token_id]])); parts[4] = '</text><text x="10" y="60" class="base">'; parts[5] = string(abi.encodePacked("Health Point", " ", toString(health_Point[_token_id]))); parts[6] = '</text><text x="10" y="80" class="base">'; parts[7] = string(abi.encodePacked("Physical Damage Point", " ", toString(physical_damage_point[_token_id]))); parts[8] = '</text><text x="10" y="100" class="base">'; parts[9] = string(abi.encodePacked("Magical Damage Point", " ", toString(magical_damage_point[_token_id]))); parts[10] = '</text><text x="10" y="120" class="base">'; parts[11] = string(abi.encodePacked("Physical Defence", " ", toString(physical_defence[_token_id]))); parts[12] = '</text><text x="10" y="140" class="base">'; parts[13] = string(abi.encodePacked("Magical Defence", " ", toString(magical_defence[_token_id]))); parts[14] = '</text><text x="10" y="160" class="base">'; parts[15] = string(abi.encodePacked("Dodge", " ", toString(dodge[_token_id]))); parts[16] = '</text><text x="10" y="180" class="base">'; parts[17] = string(abi.encodePacked("Hit", " ", toString(hit[_token_id]))); parts[18] = '</text><text x="10" y="200" class="base">'; parts[19] = string(abi.encodePacked("Critical", " ", toString(critical[_token_id]))); parts[20] = '</text><text x="10" y="220" class="base">'; parts[21] = string(abi.encodePacked("Parry", " ", toString(parry[_token_id]))); parts[22] = '</text></svg>'; string memory output = string(abi.encodePacked( parts[0], parts[1], parts[2], parts[3], parts[4], parts[5], parts[6], parts[7], parts[8], parts[9], parts[10])); output = string(abi.encodePacked(output, parts[11], parts[12], parts[13], parts[14], parts[15], parts[16], parts[17], parts[18], parts[19], parts[20])); output = string(abi.encodePacked(output, parts[21], parts[22])); string memory json = Base64.encode(bytes(string( abi.encodePacked('{"name": "Bag #', toString(_token_id), '", "description": "Monster NFT is a kind of NFT assets randomized generated and stored on blockchain with different names, prefessions, basic attribute value and random attribute value, which can be used in any scene. The rarity of monster NFT is determined by its peofession, arrtribute value and game ecology. Level, scene and image is ommitted as part of further expansions.", "image": "data:image/svg+xml;base64,', Base64.encode(bytes(output)), '"}')))); output = string(abi.encodePacked('data:application/json;base64,', json)); return output; } function claim() public payable{ require(msg.value == 10e18, "10FTM IS REQUIRED"); require(next_monster >= 0 && next_monster < 10000, "Token ID invalid"); mintMonster(); } function ownerClaim() public { require(msg.sender == owner, "Only Owner"); require(next_monster >= 10000 && next_monster < 11000, "Token ID invalid"); mintMonster(); } function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT license // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } function withdraw() public { require(msg.sender == owner, "Only Owner"); uint amount = address(this).balance; (bool success, ) = owner.call{value: amount}(""); require(success, "Failed to send Ether"); } } /// [MIT License] /// @title Base64 /// @notice Provides a function for encoding some bytes in base64 /// @author Brecht Devos <[email protected]> library Base64 { bytes internal constant TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; /// @notice Encodes some bytes to the base64 representation function encode(bytes memory data) internal pure returns (string memory) { uint256 len = data.length; if (len == 0) return ""; // multiply by 4/3 rounded up uint256 encodedLen = 4 * ((len + 2) / 3); // Add some extra buffer at the end bytes memory result = new bytes(encodedLen + 32); bytes memory table = TABLE; assembly { let tablePtr := add(table, 1) let resultPtr := add(result, 32) for { let i := 0 } lt(i, len) { } { i := add(i, 3) let input := and(mload(add(data, i)), 0xffffff) let out := mload(add(tablePtr, and(shr(18, input), 0x3F))) out := shl(8, out) out := add(out, and(mload(add(tablePtr, and(shr(12, input), 0x3F))), 0xFF)) out := shl(8, out) out := add(out, and(mload(add(tablePtr, and(shr(6, input), 0x3F))), 0xFF)) out := shl(8, out) out := add(out, and(mload(add(tablePtr, and(input, 0x3F))), 0xFF)) out := shl(224, out) mstore(resultPtr, out) resultPtr := add(resultPtr, 4) } switch mod(len, 3) case 1 { mstore(sub(resultPtr, 2), shl(240, 0x3d3d)) } case 2 { mstore(sub(resultPtr, 1), shl(248, 0x3d)) } mstore(result, encodedLen) } return string(result); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"monster","type":"uint256"}],"name":"monstered","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"critical","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_token_id","type":"uint256"}],"name":"divide","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"dodge","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_token_id","type":"uint256"}],"name":"getPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"health_Point","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"hit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"magical_damage_point","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"magical_defence","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"monster","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"next_monster","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ownerClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"parry","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"physical_damage_point","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"physical_defence","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"prefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"profession","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"suffix","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_token_id","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"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":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052604051806109e001604052806040518060400160405280600981526020017f4b69646e6170706572000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f4178652047616e6700000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f4a61636b7374726177000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f53657270656e740000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f546f61640000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f546172616e74756c61000000000000000000000000000000000000000000000081525081526020016040518060400160405280600f81526020017f4d616e2d656174696e672054726565000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f426173696c69736b00000000000000000000000000000000000000000000000081525081526020016040518060400160405280600381526020017f4f7263000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f436f72727570746f72000000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f52616469616e742052617400000000000000000000000000000000000000000081525081526020016040518060400160405280600f81526020017f4769616e742043726f636f64696c65000000000000000000000000000000000081525081526020016040518060400160405280600e81526020017f466f7265737420536e6f776d616e00000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f447279616400000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600e81526020017f4769616e7420456c657068616e7400000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f4769616e7420467572626f6c670000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f57657265776f6c6600000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f43656e746175720000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f426172696f75720000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f46656e726972000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f56616d706972652042617400000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f53616e642047686f73740000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f47686f756c00000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600f81526020017f416e6369656e7420426f756c646572000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f4d6166666961000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f4c697a617264204d616e0000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f44727567204465616c657200000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f54617572656e000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600381526020017f417065000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f4b696e67204b6f6e67000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f4477617266204f7263000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f447761726600000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f54656d706c65204775617264000000000000000000000000000000000000000081525081526020016040518060400160405280600e81526020017f54656d706c652057617272696f7200000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f44756c6c6168616e00000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f476172676f796c6500000000000000000000000000000000000000000000000081525081526020016040518060400160405280601081526020017f536b656c65746f6e2057617272696f720000000000000000000000000000000081525081526020016040518060400160405280601181526020017f536b656c65746f6e2053756d6d6f6e657200000000000000000000000000000081525081526020016040518060400160405280600f81526020017f536b656c65746f6e20417263686572000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f456368696e64610000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f456d70757361650000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f476e6f6d6500000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600f81526020017f4f7264696e617279205a6f6d626965000000000000000000000000000000000081525081526020016040518060400160405280600e81526020017f56616d70697265205a6f6d62696500000000000000000000000000000000000081525081526020016040518060400160405280600e81526020017f4361707461696e205a6f6d62696500000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f466f782044656d6f6e000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f4e6967687420456c66000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f47686f737400000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f42616e736865650000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f576974636800000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f4c6963680000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f546f6d622052616964657200000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f4d756d6d7900000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f496d6d6f7274616c00000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f56616d706972650000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f4661666e6972000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f4472616b6500000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f447261676f6e000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f4772696666696e0000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f416c69656e20477561726400000000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f416c69656e2057617272696f720000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f416c69656e204c6561646572000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f46616c636f6e000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f507465726f73617572000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f4769616e7400000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f4d6564757361000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f4772656e64656c0000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f476572796f6e000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f506972617465000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600b81526020017f426c61636b204d616e746100000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f4f726d204d61726975730000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f416c69656e00000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600d81526020017f4e612776692057617272696f720000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f4e6127766920417263686572000000000000000000000000000000000000000081525081526020016040518060400160405280600c81526020017f4e61277669204c6561646572000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f542d38303000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f542d31303030000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280601081526020017f456c656374726f6e69632053717569640000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f44656365707469636f6e00000000000000000000000000000000000000000000815250815250600890604f6200125592919062001fb0565b50604051806109e00160405280600160ff168152602001600260ff168152602001600360ff168152602001600460ff168152602001600260ff168152602001600560ff168152602001600260ff168152602001600660ff168152602001600760ff168152602001600860ff168152602001600260ff168152602001600760ff168152602001600460ff168152602001600960ff168152602001600360ff168152602001600460ff168152602001600a60ff168152602001600b60ff168152602001600c60ff168152602001600860ff168152602001600260ff168152602001600d60ff168152602001600860ff168152602001600e60ff168152602001600160ff168152602001600360ff168152602001600160ff168152602001600760ff168152602001600760ff168152602001600e60ff168152602001600a60ff168152602001600760ff168152602001600360ff168152602001600760ff168152602001600f60ff168152602001600360ff168152602001600760ff168152602001600660ff168152602001600b60ff168152602001600d60ff168152602001600d60ff168152602001600160ff168152602001600360ff168152602001600560ff168152602001600660ff168152602001600560ff168152602001600d60ff168152602001600d60ff168152602001600560ff168152602001600a60ff168152602001600d60ff168152602001600160ff168152602001600f60ff168152602001600d60ff168152602001600860ff168152602001600260ff168152602001600460ff168152602001600e60ff168152602001600260ff168152602001600360ff168152602001600760ff168152602001600660ff168152602001600460ff168152602001600c60ff168152602001600e60ff168152602001600560ff168152602001600860ff168152602001600e60ff168152602001600160ff168152602001600760ff168152602001600660ff168152602001600760ff168152602001600760ff168152602001600b60ff168152602001600660ff168152602001600760ff168152602001600760ff168152602001600960ff168152602001600760ff16815250605790604f620015889291906200200a565b50604051806101e001604052806040518060400160405280600581526020017f416e67727900000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f48756e677279000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f536361727900000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f44616d6e6564000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f436f72727570740000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f476c6f6f6d79000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f486f72726966696300000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f47686f73746c790000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f467265616b79000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f416d6e657369630000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f5061696e66756c0000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f4f7665726a6f796564000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f536f72726f7766756c000000000000000000000000000000000000000000000081525081526020016040518060400160405280600a81526020017f426c75737465726f75730000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f446567726164656400000000000000000000000000000000000000000000000081525081525060a690600f6200191a92919062002054565b503480156200192857600080fd5b506040518060400160405280601281526020017f4d6f6e73746572204d616e6966657374656400000000000000000000000000008152506040518060400160405280600381526020017f4d4d5300000000000000000000000000000000000000000000000000000000008152508160009080519060200190620019ad929190620020ae565b508060019080519060200190620019c6929190620020ae565b50505033600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280600681526020017f526f6262657200000000000000000000000000000000000000000000000000008152506007600060018152602001908152602001600020908051906020019062001a69929190620020ae565b506040518060400160405280600881526020017f48656164736d616e0000000000000000000000000000000000000000000000008152506007600060028152602001908152602001600020908051906020019062001ac9929190620020ae565b506040518060400160405280600581526020017f47756172640000000000000000000000000000000000000000000000000000008152506007600060038152602001908152602001600020908051906020019062001b29929190620020ae565b506040518060400160405280600681526020017f48756e74657200000000000000000000000000000000000000000000000000008152506007600060048152602001908152602001600020908051906020019062001b89929190620020ae565b506040518060400160405280600681526020017f57697a61726400000000000000000000000000000000000000000000000000008152506007600060058152602001908152602001600020908051906020019062001be9929190620020ae565b506040518060400160405280600881526020017f53756d6d6f6e65720000000000000000000000000000000000000000000000008152506007600060068152602001908152602001600020908051906020019062001c49929190620020ae565b506040518060400160405280600781526020017f57617272696f72000000000000000000000000000000000000000000000000008152506007600060078152602001908152602001600020908051906020019062001ca9929190620020ae565b506040518060400160405280600581526020017f44656d6f6e0000000000000000000000000000000000000000000000000000008152506007600060088152602001908152602001600020908051906020019062001d09929190620020ae565b506040518060400160405280600881526020017f466f6c6c6f7765720000000000000000000000000000000000000000000000008152506007600060098152602001908152602001600020908051906020019062001d69929190620020ae565b506040518060400160405280600681526020017f5368616d616e000000000000000000000000000000000000000000000000000081525060076000600a8152602001908152602001600020908051906020019062001dc9929190620020ae565b506040518060400160405280600681526020017f417263686572000000000000000000000000000000000000000000000000000081525060076000600b8152602001908152602001600020908051906020019062001e29929190620020ae565b506040518060400160405280600d81526020017f5370656172205468726f7765720000000000000000000000000000000000000081525060076000600c8152602001908152602001600020908051906020019062001e89929190620020ae565b506040518060400160405280600881526020017f496d6d6f7274616c00000000000000000000000000000000000000000000000081525060076000600d8152602001908152602001600020908051906020019062001ee9929190620020ae565b506040518060400160405280600581526020017f546974616e00000000000000000000000000000000000000000000000000000081525060076000600e8152602001908152602001600020908051906020019062001f49929190620020ae565b506040518060400160405280600b81526020017f4461726b204b6e6967687400000000000000000000000000000000000000000081525060076000600f8152602001908152602001600020908051906020019062001fa9929190620020ae565b5062002231565b82604f810192821562001ff7579160200282015b8281111562001ff657825182908051906020019062001fe5929190620020ae565b509160200191906001019062001fc4565b5b5090506200200691906200213f565b5090565b82604f810192821562002041579160200282015b8281111562002040578251829060ff169055916020019190600101906200201e565b5b50905062002050919062002167565b5090565b82600f81019282156200209b579160200282015b828111156200209a57825182908051906020019062002089929190620020ae565b509160200191906001019062002068565b5b509050620020aa91906200213f565b5090565b828054620020bc90620021cc565b90600052602060002090601f016020900481019282620020e057600085556200212c565b82601f10620020fb57805160ff19168380011785556200212c565b828001600101855582156200212c579182015b828111156200212b5782518255916020019190600101906200210e565b5b5090506200213b919062002167565b5090565b5b8082111562002163576000818162002159919062002186565b5060010162002140565b5090565b5b808211156200218257600081600090555060010162002168565b5090565b5080546200219490620021cc565b6000825580601f10620021a85750620021c9565b601f016020900490600052602060002090810190620021c8919062002167565b5b50565b60006002820490506001821680620021e557607f821691505b60208210811415620021fc57620021fb62002202565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b615ead80620022416000396000f3fe6080604052600436106101ee5760003560e01c80636fd7468c1161010d578063b88d4fde116100a0578063e43919ab1161006f578063e43919ab14610774578063e4579b71146107b1578063e985e9c5146107ee578063ebf6e91d1461082b578063ff96b17a14610868576101ee565b8063b88d4fde14610694578063c454ca2d146106bd578063c87b56dd146106fa578063d557311214610737576101ee565b806395d89b41116100dc57806395d89b41146105c6578063a1d06bdd146105f1578063a22cb4651461062e578063a6e0502c14610657576101ee565b80636fd7468c146104e457806370a08231146105215780638da5cb5b1461055e5780639414b90214610589576101ee565b80633ccfd60b1161018557806348ac6aad1161015457806348ac6aad146104495780634dbe5889146104865780634e71d92d1461049d5780636352211e146104a7576101ee565b80633ccfd60b1461038f5780633e823f79146103a657806342842e0e146103e35780634552e7c11461040c576101ee565b806323b872dd116101c157806323b872dd146102c1578063247194b0146102ea578063312520eb146103275780633c8c014d14610352576101ee565b806301ffc9a7146101f357806306fdde0314610230578063081812fc1461025b578063095ea7b314610298575b600080fd5b3480156101ff57600080fd5b5061021a600480360381019061021591906140d5565b6108a5565b6040516102279190614bc4565b60405180910390f35b34801561023c57600080fd5b50610245610987565b6040516102529190614bdf565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d919061412f565b610a19565b60405161028f9190614b20565b60405180910390f35b3480156102a457600080fd5b506102bf60048036038101906102ba9190614095565b610a9e565b005b3480156102cd57600080fd5b506102e860048036038101906102e39190613f7f565b610bb6565b005b3480156102f657600080fd5b50610311600480360381019061030c919061412f565b610c16565b60405161031e9190614e21565b60405180910390f35b34801561033357600080fd5b5061033c610c2e565b6040516103499190614e21565b60405180910390f35b34801561035e57600080fd5b506103796004803603810190610374919061412f565b610c34565b6040516103869190614bdf565b60405180910390f35b34801561039b57600080fd5b506103a4610cd4565b005b3480156103b257600080fd5b506103cd60048036038101906103c8919061412f565b610e3b565b6040516103da9190614ba2565b60405180910390f35b3480156103ef57600080fd5b5061040a60048036038101906104059190613f7f565b610f68565b005b34801561041857600080fd5b50610433600480360381019061042e919061412f565b610f88565b6040516104409190614e21565b60405180910390f35b34801561045557600080fd5b50610470600480360381019061046b919061412f565b610fa0565b60405161047d9190614e21565b60405180910390f35b34801561049257600080fd5b5061049b610fb8565b005b6104a56110a8565b005b3480156104b357600080fd5b506104ce60048036038101906104c9919061412f565b611151565b6040516104db9190614b20565b60405180910390f35b3480156104f057600080fd5b5061050b6004803603810190610506919061412f565b611203565b6040516105189190614bdf565b60405180910390f35b34801561052d57600080fd5b5061054860048036038101906105439190613f12565b6112a3565b6040516105559190614e21565b60405180910390f35b34801561056a57600080fd5b5061057361135b565b6040516105809190614b3b565b60405180910390f35b34801561059557600080fd5b506105b060048036038101906105ab919061412f565b611381565b6040516105bd9190614bdf565b60405180910390f35b3480156105d257600080fd5b506105db611465565b6040516105e89190614bdf565b60405180910390f35b3480156105fd57600080fd5b506106186004803603810190610613919061412f565b6114f7565b6040516106259190614e21565b60405180910390f35b34801561063a57600080fd5b5061065560048036038101906106509190614055565b61150f565b005b34801561066357600080fd5b5061067e6004803603810190610679919061412f565b611690565b60405161068b9190614e21565b60405180910390f35b3480156106a057600080fd5b506106bb60048036038101906106b69190613fd2565b6116a8565b005b3480156106c957600080fd5b506106e460048036038101906106df919061412f565b61170a565b6040516106f19190614e21565b60405180910390f35b34801561070657600080fd5b50610721600480360381019061071c919061412f565b611722565b60405161072e9190614bdf565b60405180910390f35b34801561074357600080fd5b5061075e6004803603810190610759919061412f565b6120bf565b60405161076b9190614e21565b60405180910390f35b34801561078057600080fd5b5061079b6004803603810190610796919061412f565b6120d7565b6040516107a89190614e21565b60405180910390f35b3480156107bd57600080fd5b506107d860048036038101906107d3919061412f565b6120ef565b6040516107e59190614bdf565b60405180910390f35b3480156107fa57600080fd5b5061081560048036038101906108109190613f3f565b61218f565b6040516108229190614bc4565b60405180910390f35b34801561083757600080fd5b50610852600480360381019061084d919061412f565b612223565b60405161085f9190614e21565b60405180910390f35b34801561087457600080fd5b5061088f600480360381019061088a919061412f565b61223b565b60405161089c9190614e21565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061097057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610980575061097f82612253565b5b9050919050565b6060600080546109969061510b565b80601f01602080910402602001604051908101604052809291908181526020018280546109c29061510b565b8015610a0f5780601f106109e457610100808354040283529160200191610a0f565b820191906000526020600020905b8154815290600101906020018083116109f257829003601f168201915b5050505050905090565b6000610a24826122bd565b610a63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5a90614d41565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610aa982611151565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1190614da1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b39612329565b73ffffffffffffffffffffffffffffffffffffffff161480610b685750610b6781610b62612329565b61218f565b5b610ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9e90614cc1565b60405180910390fd5b610bb18383612331565b505050565b610bc7610bc1612329565b826123ea565b610c06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfd90614dc1565b60405180910390fd5b610c118383836124c8565b505050565b60bd6020528060005260406000206000915090505481565b60b55481565b60b76020528060005260406000206000915090508054610c539061510b565b80601f0160208091040260200160405190810160405280929190818152602001828054610c7f9061510b565b8015610ccc5780601f10610ca157610100808354040283529160200191610ccc565b820191906000526020600020905b815481529060010190602001808311610caf57829003601f168201915b505050505081565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5b90614e01565b60405180910390fd5b60004790506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610db190614a6a565b60006040518083038185875af1925050503d8060008114610dee576040519150601f19603f3d011682016040523d82523d6000602084013e610df3565b606091505b5050905080610e37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2e90614c41565b60405180910390fd5b5050565b60606000601e67ffffffffffffffff811115610e5a57610e596152ae565b5b604051908082528060200260200182016040528015610e885781602001602082028036833780820191505090505b50905060008060005b60016009610e9f919061500f565b811015610f5c5760005b6000811480610ed257506001858281518110610ec857610ec761527f565b5b6020026020010151145b15610f27578280610ee29061516e565b9350508683604051602001610ef8929190614af4565b6040516020818303038152906040528051906020012060001c9350601e84610f2091906151c1565b9050610ea9565b6001858281518110610f3c57610f3b61527f565b5b602002602001018181525050508080610f549061516e565b915050610e91565b50829350505050919050565b610f83838383604051806020016040528060008152506116a8565b505050565b60c06020528060005260406000206000915090505481565b60bc6020528060005260406000206000915090505481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103f90614e01565b60405180910390fd5b61271060b5541015801561105f5750612af860b554105b61109e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109590614d61565b60405180910390fd5b6110a6612724565b565b678ac7230489e8000034146110f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e990614de1565b60405180910390fd5b600060b55410158015611108575061271060b554105b611147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113e90614d61565b60405180910390fd5b61114f612724565b565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f190614d01565b60405180910390fd5b80915050919050565b600760205280600052604060002060009150905080546112229061510b565b80601f016020809104026020016040519081016040528092919081815260200182805461124e9061510b565b801561129b5780601f106112705761010080835404028352916020019161129b565b820191906000526020600020905b81548152906001019060200180831161127e57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130b90614ce1565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060004283604051602001611398929190614af4565b6040516020818303038152906040528051906020012060001c905060a6600f826113c291906151c1565b600f81106113d3576113d261527f565b5b0180546113df9061510b565b80601f016020809104026020016040519081016040528092919081815260200182805461140b9061510b565b80156114585780601f1061142d57610100808354040283529160200191611458565b820191906000526020600020905b81548152906001019060200180831161143b57829003601f168201915b5050505050915050919050565b6060600180546114749061510b565b80601f01602080910402602001604051908101604052809291908181526020018280546114a09061510b565b80156114ed5780601f106114c2576101008083540402835291602001916114ed565b820191906000526020600020905b8154815290600101906020018083116114d057829003601f168201915b5050505050905090565b60ba6020528060005260406000206000915090505481565b611517612329565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611585576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157c90614c81565b60405180910390fd5b8060056000611592612329565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661163f612329565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116849190614bc4565b60405180910390a35050565b60b86020528060005260406000206000915090505481565b6116b96116b3612329565b836123ea565b6116f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ef90614dc1565b60405180910390fd5b61170484848484612d97565b50505050565b60b96020528060005260406000206000915090505481565b606061172c613c9c565b60405180610120016040528060ff8152602001615d2860ff91398160006017811061175a5761175961527f565b5b602002018190525060b7600084815260200190815260200160002060b66000858152602001908152602001600020604051602001611799929190614899565b604051602081830303815290604052816001601781106117bc576117bb61527f565b5b6020020181905250604051806060016040528060288152602001615e2760289139816002601781106117f1576117f061527f565b5b60200201819052506007600060b8600086815260200190815260200160002054815260200190815260200160002060405160200161182f9190614882565b604051602081830303815290604052816003601781106118525761185161527f565b5b6020020181905250604051806060016040528060288152602001615ba260289139816004601781106118875761188661527f565b5b60200201819052506118ab60b9600085815260200190815260200160002054612df3565b6040516020016118bb91906149c1565b604051602081830303815290604052816005601781106118de576118dd61527f565b5b6020020181905250604051806060016040528060288152602001615c4560289139816006601781106119135761191261527f565b5b602002018190525061193760ba600085815260200190815260200160002054612df3565b6040516020016119479190614922565b6040516020818303038152906040528160076017811061196a5761196961527f565b5b6020020181905250604051806060016040528060298152602001615c6d602991398160086017811061199f5761199e61527f565b5b60200201819052506119c360bb600085815260200190815260200160002054612df3565b6040516020016119d3919061494f565b604051602081830303815290604052816009601781106119f6576119f561527f565b5b6020020181905250604051806060016040528060298152602001615c1c6029913981600a60178110611a2b57611a2a61527f565b5b6020020181905250611a4f60bc600085815260200190815260200160002054612df3565b604051602001611a5f9190614aac565b60405160208183030381529060405281600b60178110611a8257611a8161527f565b5b6020020181905250604051806060016040528060298152602001615cbf6029913981600c60178110611ab757611ab661527f565b5b6020020181905250611adb60bd600085815260200190815260200160002054612df3565b604051602001611aeb91906149ee565b60405160208183030381529060405281600d60178110611b0e57611b0d61527f565b5b6020020181905250604051806060016040528060298152602001615bf36029913981600e60178110611b4357611b4261527f565b5b6020020181905250611b6760be600085815260200190815260200160002054612df3565b604051602001611b7791906148c8565b60405160208183030381529060405281600f60178110611b9a57611b9961527f565b5b6020020181905250604051806060016040528060298152602001615e4f6029913981601060178110611bcf57611bce61527f565b5b6020020181905250611bf360bf600085815260200190815260200160002054612df3565b604051602001611c039190614a7f565b60405160208183030381529060405281601160178110611c2657611c2561527f565b5b6020020181905250604051806060016040528060298152602001615c966029913981601260178110611c5b57611c5a61527f565b5b6020020181905250611c7f60c0600085815260200190815260200160002054612df3565b604051602001611c8f9190614a3d565b60405160208183030381529060405281601360178110611cb257611cb161527f565b5b6020020181905250604051806060016040528060298152602001615bca6029913981601460178110611ce757611ce661527f565b5b6020020181905250611d0b60c1600085815260200190815260200160002054612df3565b604051602001611d1b91906148f5565b60405160208183030381529060405281601560178110611d3e57611d3d61527f565b5b60200201819052506040518060400160405280600d81526020017f3c2f746578743e3c2f7376673e0000000000000000000000000000000000000081525081601660178110611d9057611d8f61527f565b5b6020020181905250600081600060178110611dae57611dad61527f565b5b602002015182600160178110611dc757611dc661527f565b5b602002015183600260178110611de057611ddf61527f565b5b602002015184600360178110611df957611df861527f565b5b602002015185600460178110611e1257611e1161527f565b5b602002015186600560178110611e2b57611e2a61527f565b5b602002015187600660178110611e4457611e4361527f565b5b602002015188600760178110611e5d57611e5c61527f565b5b602002015189600860178110611e7657611e7561527f565b5b60200201518a600960178110611e8f57611e8e61527f565b5b60200201518b600a60178110611ea857611ea761527f565b5b6020020151604051602001611ec79b9a999897969594939291906147e9565b60405160208183030381529060405290508082600b60178110611eed57611eec61527f565b5b602002015183600c60178110611f0657611f0561527f565b5b602002015184600d60178110611f1f57611f1e61527f565b5b602002015185600e60178110611f3857611f3761527f565b5b602002015186600f60178110611f5157611f5061527f565b5b602002015187601060178110611f6a57611f6961527f565b5b602002015188601160178110611f8357611f8261527f565b5b602002015189601260178110611f9c57611f9b61527f565b5b60200201518a601360178110611fb557611fb461527f565b5b60200201518b601460178110611fce57611fcd61527f565b5b6020020151604051602001611fed9b9a999897969594939291906147e9565b604051602081830303815290604052905080826015601781106120135761201261527f565b5b60200201518360166017811061202c5761202b61527f565b5b6020020151604051602001612043939291906147b8565b6040516020818303038152906040529050600061209061206286612df3565b61206b84612f54565b60405160200161207c92919061497c565b604051602081830303815290604052612f54565b9050806040516020016120a39190614a1b565b6040516020818303038152906040529150819350505050919050565b60be6020528060005260406000206000915090505481565b60c16020528060005260406000206000915090505481565b60b6602052806000526040600020600091509050805461210e9061510b565b80601f016020809104026020016040519081016040528092919081815260200182805461213a9061510b565b80156121875780601f1061215c57610100808354040283529160200191612187565b820191906000526020600020905b81548152906001019060200180831161216a57829003601f168201915b505050505081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60bf6020528060005260406000206000915090505481565b60bb6020528060005260406000206000915090505481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166123a483611151565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006123f5826122bd565b612434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242b90614ca1565b60405180910390fd5b600061243f83611151565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806124ae57508373ffffffffffffffffffffffffffffffffffffffff1661249684610a19565b73ffffffffffffffffffffffffffffffffffffffff16145b806124bf57506124be818561218f565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166124e882611151565b73ffffffffffffffffffffffffffffffffffffffff161461253e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253590614d81565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a590614c61565b60405180910390fd5b6125b98383836130ec565b6125c4600082612331565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612614919061500f565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461266b9190614f2e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60b560008154809291906127379061516e565b9190505550600060b55490506000816040516020016127569190614ad9565b6040516020818303038152906040528051906020012060001c90506008604f8261278091906151c1565b604f81106127915761279061527f565b5b0160b660008481526020019081526020016000209080546127b19061510b565b6127bc929190613cc4565b506057604f826127cc91906151c1565b604f81106127dd576127dc61527f565b5b015460b86000848152602001908152602001600020819055506127ff82611381565b60b760008481526020019081526020016000209080519060200190612825929190613d51565b50600061283183610e3b565b9050600060016009612843919061500f565b67ffffffffffffffff81111561285c5761285b6152ae565b5b60405190808252806020026020018201604052801561288a5781602001602082028036833780820191505090505b509050600080600090505b601e8110156129035760018482815181106128b3576128b261527f565b5b602002602001015114156128f057808383815181106128d5576128d461527f565b5b60200260200101818152505081806128ec9061516e565b9250505b80806128fb9061516e565b915050612895565b5061292e6057604f8661291691906151c1565b604f81106129275761292661527f565b5b01546130f1565b60c26000600981106129435761294261527f565b5b0154826000815181106129595761295861527f565b5b602002602001015161296b9190614f2e565b60b960008781526020019081526020016000208190555060c26001600981106129975761299661527f565b5b0154826000815181106129ad576129ac61527f565b5b6020026020010151836001815181106129c9576129c861527f565b5b60200260200101516129db919061500f565b6129e59190614f2e565b60ba60008781526020019081526020016000208190555060c2600260098110612a1157612a1061527f565b5b015482600181518110612a2757612a2661527f565b5b602002602001015183600281518110612a4357612a4261527f565b5b6020026020010151612a55919061500f565b612a5f9190614f2e565b60bb60008781526020019081526020016000208190555060c2600360098110612a8b57612a8a61527f565b5b015482600281518110612aa157612aa061527f565b5b602002602001015183600381518110612abd57612abc61527f565b5b6020026020010151612acf919061500f565b612ad99190614f2e565b60bc60008781526020019081526020016000208190555060c2600460098110612b0557612b0461527f565b5b015482600381518110612b1b57612b1a61527f565b5b602002602001015183600481518110612b3757612b3661527f565b5b6020026020010151612b49919061500f565b612b539190614f2e565b60bd60008781526020019081526020016000208190555060c2600560098110612b7f57612b7e61527f565b5b015482600481518110612b9557612b9461527f565b5b602002602001015183600581518110612bb157612bb061527f565b5b6020026020010151612bc3919061500f565b612bcd9190614f2e565b60be60008781526020019081526020016000208190555060c2600660098110612bf957612bf861527f565b5b015482600581518110612c0f57612c0e61527f565b5b602002602001015183600681518110612c2b57612c2a61527f565b5b6020026020010151612c3d919061500f565b612c479190614f2e565b60bf60008781526020019081526020016000208190555060c2600760098110612c7357612c7261527f565b5b015482600681518110612c8957612c8861527f565b5b602002602001015183600781518110612ca557612ca461527f565b5b6020026020010151612cb7919061500f565b612cc19190614f2e565b60c060008781526020019081526020016000208190555060c2600860098110612ced57612cec61527f565b5b015482600781518110612d0357612d0261527f565b5b6020026020010151601e612d17919061500f565b612d219190614f2e565b60c1600087815260200190815260200160002081905550612d4233866138ab565b3373ffffffffffffffffffffffffffffffffffffffff167fe716eb6fb4b9833965979a0503340e24c46ecf5955a6c350f9eb165fff30bd4986604051612d889190614e21565b60405180910390a25050505050565b612da28484846124c8565b612dae848484846138c9565b612ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de490614c01565b60405180910390fd5b50505050565b60606000821415612e3b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f4f565b600082905060005b60008214612e6d578080612e569061516e565b915050600a82612e669190614f84565b9150612e43565b60008167ffffffffffffffff811115612e8957612e886152ae565b5b6040519080825280601f01601f191660200182016040528015612ebb5781602001600182028036833780820191505090505b5090505b60008514612f4857600182612ed4919061500f565b9150600a85612ee391906151c1565b6030612eef9190614f2e565b60f81b818381518110612f0557612f0461527f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612f419190614f84565b9450612ebf565b8093505050505b919050565b60606000825190506000811415612f7d57604051806020016040528060008152509150506130e7565b60006003600283612f8e9190614f2e565b612f989190614f84565b6004612fa49190614fb5565b90506000602082612fb59190614f2e565b67ffffffffffffffff811115612fce57612fcd6152ae565b5b6040519080825280601f01601f1916602001820160405280156130005781602001600182028036833780820191505090505b5090506000604051806060016040528060408152602001615ce8604091399050600181016020830160005b868110156130a45760038101905062ffffff818a015116603f8160121c168401518060081b905060ff603f83600c1c1686015116810190508060081b905060ff603f8360061c1686015116810190508060081b905060ff603f831686015116810190508060e01b9050808452600484019350505061302b565b5060038606600181146130be57600281146130ce576130d9565b613d3d60f01b60028303526130d9565b603d60f81b60018303525b508484525050819450505050505b919050565b505050565b600181141561317457604051806101200160405280600860ff168152602001600a60ff168152602001600560ff168152602001600660ff168152602001600460ff168152602001600a60ff168152602001600a60ff168152602001600560ff168152602001600260ff1681525060c290600961316e929190613dd7565b506138a8565b60028114156131f757604051806101200160405280600960ff168152602001600760ff168152602001600460ff168152602001600660ff168152602001600660ff168152602001600560ff168152602001600a60ff168152602001600a60ff168152602001600360ff1681525060c29060096131f1929190613dd7565b506138a7565b600381141561327a57604051806101200160405280600c60ff168152602001600560ff168152602001600560ff168152602001600a60ff168152602001600a60ff168152602001600360ff168152602001600460ff168152602001600360ff168152602001600860ff1681525060c2906009613274929190613dd7565b506138a6565b60048114156132fd57604051806101200160405280600860ff168152602001600960ff168152602001600960ff168152602001600760ff168152602001600760ff168152602001600860ff168152602001600560ff168152602001600560ff168152602001600260ff1681525060c29060096132f7929190613dd7565b506138a5565b600581141561338057604051806101200160405280600660ff168152602001600360ff168152602001600c60ff168152602001600460ff168152602001600860ff168152602001600a60ff168152602001600a60ff168152602001600560ff168152602001600260ff1681525060c290600961337a929190613dd7565b506138a4565b600681141561340357604051806101200160405280600660ff168152602001600560ff168152602001600a60ff168152602001600860ff168152602001600860ff168152602001600760ff168152602001600360ff168152602001600560ff168152602001600860ff1681525060c29060096133fd929190613dd7565b506138a3565b600781141561348657604051806101200160405280600a60ff168152602001600c60ff168152602001600260ff168152602001600c60ff168152602001600460ff168152602001600260ff168152602001600760ff168152602001600760ff168152602001600460ff1681525060c2906009613480929190613dd7565b506138a2565b600881141561350957604051806101200160405280600c60ff168152602001600860ff168152602001600760ff168152602001600c60ff168152602001600560ff168152602001600960ff168152602001600260ff168152602001600260ff168152602001600360ff1681525060c2906009613503929190613dd7565b506138a1565b600981141561358c57604051806101200160405280600860ff168152602001600960ff168152602001600760ff168152602001600760ff168152602001600960ff168152602001600560ff168152602001600560ff168152602001600560ff168152602001600560ff1681525060c2906009613586929190613dd7565b506138a0565b600a81141561360f57604051806101200160405280600a60ff168152602001600560ff168152602001600560ff168152602001600c60ff168152602001600c60ff168152602001600560ff168152602001600660ff168152602001600360ff168152602001600260ff1681525060c2906009613609929190613dd7565b5061389f565b600b81141561369257604051806101200160405280600660ff168152602001600c60ff168152602001600360ff168152602001600360ff168152602001600260ff168152602001600c60ff168152602001600c60ff168152602001600860ff168152602001600260ff1681525060c290600961368c929190613dd7565b5061389e565b600c81141561371557604051806101200160405280600660ff168152602001600c60ff168152602001600360ff168152602001600460ff168152602001600560ff168152602001600860ff168152602001600860ff168152602001600860ff168152602001600660ff1681525060c290600961370f929190613dd7565b5061389d565b600d81141561379857604051806101200160405280600760ff168152602001600560ff168152602001600860ff168152602001600560ff168152602001600560ff168152602001600c60ff168152602001600860ff168152602001600660ff168152602001600460ff1681525060c2906009613792929190613dd7565b5061389c565b600e81141561381b57604051806101200160405280600f60ff168152602001600560ff168152602001600560ff168152602001600860ff168152602001600860ff168152602001600260ff168152602001600760ff168152602001600260ff168152602001600860ff1681525060c2906009613815929190613dd7565b5061389b565b600f81141561389a57604051806101200160405280600860ff168152602001600960ff168152602001600560ff168152602001600a60ff168152602001600660ff168152602001600560ff168152602001600460ff168152602001600860ff168152602001600560ff1681525060c2906009613898929190613dd7565b505b5b5b5b5b5b5b5b5b5b5b5b5b5b5b50565b6138c5828260405180602001604052806000815250613a60565b5050565b60006138ea8473ffffffffffffffffffffffffffffffffffffffff16613abb565b15613a53578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613913612329565b8786866040518563ffffffff1660e01b81526004016139359493929190614b56565b602060405180830381600087803b15801561394f57600080fd5b505af192505050801561398057506040513d601f19601f8201168201806040525081019061397d9190614102565b60015b613a03573d80600081146139b0576040519150601f19603f3d011682016040523d82523d6000602084013e6139b5565b606091505b506000815114156139fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139f290614c01565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613a58565b600190505b949350505050565b613a6a8383613ace565b613a7760008484846138c9565b613ab6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613aad90614c01565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613b3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b3590614d21565b60405180910390fd5b613b47816122bd565b15613b87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b7e90614c21565b60405180910390fd5b613b93600083836130ec565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613be39190614f2e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b604051806102e001604052806017905b6060815260200190600190039081613cac5790505090565b828054613cd09061510b565b90600052602060002090601f016020900481019282613cf25760008555613d40565b82601f10613d035780548555613d40565b82800160010185558215613d4057600052602060002091601f016020900482015b82811115613d3f578254825591600101919060010190613d24565b5b509050613d4d9190613e1c565b5090565b828054613d5d9061510b565b90600052602060002090601f016020900481019282613d7f5760008555613dc6565b82601f10613d9857805160ff1916838001178555613dc6565b82800160010185558215613dc6579182015b82811115613dc5578251825591602001919060010190613daa565b5b509050613dd39190613e1c565b5090565b8260098101928215613e0b579160200282015b82811115613e0a578251829060ff16905591602001919060010190613dea565b5b509050613e189190613e1c565b5090565b5b80821115613e35576000816000905550600101613e1d565b5090565b6000613e4c613e4784614e61565b614e3c565b905082815260208101848484011115613e6857613e676152e2565b5b613e738482856150c9565b509392505050565b600081359050613e8a81615b45565b92915050565b600081359050613e9f81615b5c565b92915050565b600081359050613eb481615b73565b92915050565b600081519050613ec981615b73565b92915050565b600082601f830112613ee457613ee36152dd565b5b8135613ef4848260208601613e39565b91505092915050565b600081359050613f0c81615b8a565b92915050565b600060208284031215613f2857613f276152ec565b5b6000613f3684828501613e7b565b91505092915050565b60008060408385031215613f5657613f556152ec565b5b6000613f6485828601613e7b565b9250506020613f7585828601613e7b565b9150509250929050565b600080600060608486031215613f9857613f976152ec565b5b6000613fa686828701613e7b565b9350506020613fb786828701613e7b565b9250506040613fc886828701613efd565b9150509250925092565b60008060008060808587031215613fec57613feb6152ec565b5b6000613ffa87828801613e7b565b945050602061400b87828801613e7b565b935050604061401c87828801613efd565b925050606085013567ffffffffffffffff81111561403d5761403c6152e7565b5b61404987828801613ecf565b91505092959194509250565b6000806040838503121561406c5761406b6152ec565b5b600061407a85828601613e7b565b925050602061408b85828601613e90565b9150509250929050565b600080604083850312156140ac576140ab6152ec565b5b60006140ba85828601613e7b565b92505060206140cb85828601613efd565b9150509250929050565b6000602082840312156140eb576140ea6152ec565b5b60006140f984828501613ea5565b91505092915050565b600060208284031215614118576141176152ec565b5b600061412684828501613eba565b91505092915050565b600060208284031215614145576141446152ec565b5b600061415384828501613efd565b91505092915050565b60006141688383614783565b60208301905092915050565b61417d81615055565b82525050565b61418c81615043565b82525050565b600061419d82614eb7565b6141a78185614ee5565b93506141b283614e92565b8060005b838110156141e35781516141ca888261415c565b97506141d583614ed8565b9250506001810190506141b6565b5085935050505092915050565b6141f981615067565b82525050565b600061420a82614ec2565b6142148185614ef6565b93506142248185602086016150d8565b61422d816152f1565b840191505092915050565b600061424382614ecd565b61424d8185614f12565b935061425d8185602086016150d8565b614266816152f1565b840191505092915050565b600061427c82614ecd565b6142868185614f23565b93506142968185602086016150d8565b80840191505092915050565b600081546142af8161510b565b6142b98186614f23565b945060018216600081146142d457600181146142e557614318565b60ff19831686528186019350614318565b6142ee85614ea2565b60005b83811015614310578154818901526001820191506020810190506142f1565b838801955050505b50505092915050565b600061432e600583614f23565b915061433982615302565b600582019050919050565b6000614351603283614f12565b915061435c8261532b565b604082019050919050565b6000614374601c83614f12565b915061437f8261537a565b602082019050919050565b6000614397601483614f12565b91506143a2826153a3565b602082019050919050565b60006143ba602483614f12565b91506143c5826153cc565b604082019050919050565b60006143dd601983614f12565b91506143e88261541b565b602082019050919050565b6000614400600583614f23565b915061440b82615444565b600582019050919050565b6000614423602c83614f12565b915061442e8261546d565b604082019050919050565b6000614446601583614f23565b9150614451826154bc565b601582019050919050565b6000614469601483614f23565b9150614474826154e5565b601482019050919050565b600061448c600183614f23565b91506144978261550e565b600182019050919050565b60006144af603883614f12565b91506144ba82615537565b604082019050919050565b60006144d2602a83614f12565b91506144dd82615586565b604082019050919050565b60006144f5602983614f12565b9150614500826155d5565b604082019050919050565b6000614518600283614f23565b915061452382615624565b600282019050919050565b600061453b600f83614f23565b91506145468261564d565b600f82019050919050565b600061455e602083614f12565b915061456982615676565b602082019050919050565b6000614581602c83614f12565b915061458c8261569f565b604082019050919050565b60006145a4600c83614f23565b91506145af826156ee565b600c82019050919050565b60006145c7601083614f12565b91506145d282615717565b602082019050919050565b60006145ea602983614f12565b91506145f582615740565b604082019050919050565b600061460d600f83614f23565b91506146188261578f565b600f82019050919050565b6000614630602183614f12565b915061463b826157b8565b604082019050919050565b6000614653601d83614f23565b915061465e82615807565b601d82019050919050565b6000614676600883614f23565b915061468182615830565b600882019050919050565b600061469a6101a083614f23565b91506146a582615859565b6101a082019050919050565b60006146be600083614f07565b91506146c982615a4f565b600082019050919050565b60006146e1600383614f23565b91506146ec82615a52565b600382019050919050565b6000614704603183614f12565b915061470f82615a7b565b604082019050919050565b6000614727601083614f23565b915061473282615aca565b601082019050919050565b600061474a601183614f12565b915061475582615af3565b602082019050919050565b600061476d600a83614f12565b915061477882615b1c565b602082019050919050565b61478c816150bf565b82525050565b61479b816150bf565b82525050565b6147b26147ad826150bf565b6151b7565b82525050565b60006147c48286614271565b91506147d08285614271565b91506147dc8284614271565b9150819050949350505050565b60006147f5828e614271565b9150614801828d614271565b915061480d828c614271565b9150614819828b614271565b9150614825828a614271565b91506148318289614271565b915061483d8288614271565b91506148498287614271565b91506148558286614271565b91506148618285614271565b915061486d8284614271565b91508190509c9b505050505050505050505050565b600061488e82846142a2565b915081905092915050565b60006148a582856142a2565b91506148b08261447f565b91506148bc82846142a2565b91508190509392505050565b60006148d382614321565b91506148de8261447f565b91506148ea8284614271565b915081905092915050565b6000614900826143f3565b915061490b8261447f565b91506149178284614271565b915081905092915050565b600061492d82614439565b91506149388261447f565b91506149448284614271565b915081905092915050565b600061495a8261445c565b91506149658261447f565b91506149718284614271565b915081905092915050565b60006149878261452e565b91506149938285614271565b915061499e8261468c565b91506149aa8284614271565b91506149b58261450b565b91508190509392505050565b60006149cc82614597565b91506149d78261447f565b91506149e38284614271565b915081905092915050565b60006149f982614600565b9150614a048261447f565b9150614a108284614271565b915081905092915050565b6000614a2682614646565b9150614a328284614271565b915081905092915050565b6000614a4882614669565b9150614a538261447f565b9150614a5f8284614271565b915081905092915050565b6000614a75826146b1565b9150819050919050565b6000614a8a826146d4565b9150614a958261447f565b9150614aa18284614271565b915081905092915050565b6000614ab78261471a565b9150614ac28261447f565b9150614ace8284614271565b915081905092915050565b6000614ae582846147a1565b60208201915081905092915050565b6000614b0082856147a1565b602082019150614b1082846147a1565b6020820191508190509392505050565b6000602082019050614b356000830184614183565b92915050565b6000602082019050614b506000830184614174565b92915050565b6000608082019050614b6b6000830187614183565b614b786020830186614183565b614b856040830185614792565b8181036060830152614b9781846141ff565b905095945050505050565b60006020820190508181036000830152614bbc8184614192565b905092915050565b6000602082019050614bd960008301846141f0565b92915050565b60006020820190508181036000830152614bf98184614238565b905092915050565b60006020820190508181036000830152614c1a81614344565b9050919050565b60006020820190508181036000830152614c3a81614367565b9050919050565b60006020820190508181036000830152614c5a8161438a565b9050919050565b60006020820190508181036000830152614c7a816143ad565b9050919050565b60006020820190508181036000830152614c9a816143d0565b9050919050565b60006020820190508181036000830152614cba81614416565b9050919050565b60006020820190508181036000830152614cda816144a2565b9050919050565b60006020820190508181036000830152614cfa816144c5565b9050919050565b60006020820190508181036000830152614d1a816144e8565b9050919050565b60006020820190508181036000830152614d3a81614551565b9050919050565b60006020820190508181036000830152614d5a81614574565b9050919050565b60006020820190508181036000830152614d7a816145ba565b9050919050565b60006020820190508181036000830152614d9a816145dd565b9050919050565b60006020820190508181036000830152614dba81614623565b9050919050565b60006020820190508181036000830152614dda816146f7565b9050919050565b60006020820190508181036000830152614dfa8161473d565b9050919050565b60006020820190508181036000830152614e1a81614760565b9050919050565b6000602082019050614e366000830184614792565b92915050565b6000614e46614e57565b9050614e52828261513d565b919050565b6000604051905090565b600067ffffffffffffffff821115614e7c57614e7b6152ae565b5b614e85826152f1565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614f39826150bf565b9150614f44836150bf565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614f7957614f786151f2565b5b828201905092915050565b6000614f8f826150bf565b9150614f9a836150bf565b925082614faa57614fa9615221565b5b828204905092915050565b6000614fc0826150bf565b9150614fcb836150bf565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615004576150036151f2565b5b828202905092915050565b600061501a826150bf565b9150615025836150bf565b925082821015615038576150376151f2565b5b828203905092915050565b600061504e8261509f565b9050919050565b60006150608261509f565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156150f65780820151818401526020810190506150db565b83811115615105576000848401525b50505050565b6000600282049050600182168061512357607f821691505b6020821081141561513757615136615250565b5b50919050565b615146826152f1565b810181811067ffffffffffffffff82111715615165576151646152ae565b5b80604052505050565b6000615179826150bf565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156151ac576151ab6151f2565b5b600182019050919050565b6000819050919050565b60006151cc826150bf565b91506151d7836150bf565b9250826151e7576151e6615221565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f446f646765000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4661696c656420746f2073656e64204574686572000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f5061727279000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f506879736963616c2044616d61676520506f696e740000000000000000000000600082015250565b7f4d61676963616c2044616d61676520506f696e74000000000000000000000000600082015250565b7f2000000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b7f7b226e616d65223a202242616720230000000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4865616c746820506f696e740000000000000000000000000000000000000000600082015250565b7f546f6b656e20494420696e76616c696400000000000000000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4d61676963616c20446566656e63650000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b7f437269746963616c000000000000000000000000000000000000000000000000600082015250565b7f222c20226465736372697074696f6e223a20224d6f6e73746572204e4654206960008201527f732061206b696e64206f66204e4654206173736574732072616e646f6d697a6560208201527f642067656e65726174656420616e642073746f726564206f6e20626c6f636b6360408201527f6861696e207769746820646966666572656e74206e616d65732c20707265666560608201527f7373696f6e732c206261736963206174747269627574652076616c756520616e60808201527f642072616e646f6d206174747269627574652076616c75652c2077686963682060a08201527f63616e206265207573656420696e20616e79207363656e652e2054686520726160c08201527f72697479206f66206d6f6e73746572204e46542069732064657465726d696e6560e08201527f64206279206974732070656f66657373696f6e2c2061727274726962757465206101008201527f76616c756520616e642067616d652065636f6c6f67792e204c6576656c2c20736101208201527f63656e6520616e6420696d616765206973206f6d6d69747465642061732070616101408201527f7274206f66206675727468657220657870616e73696f6e732e222c2022696d616101608201527f6765223a2022646174613a696d6167652f7376672b786d6c3b6261736536342c61018082015250565b50565b7f4869740000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f506879736963616c20446566656e636500000000000000000000000000000000600082015250565b7f313046544d204953205245515549524544000000000000000000000000000000600082015250565b7f4f6e6c79204f776e657200000000000000000000000000000000000000000000600082015250565b615b4e81615043565b8114615b5957600080fd5b50565b615b6581615067565b8114615b7057600080fd5b50565b615b7c81615073565b8114615b8757600080fd5b50565b615b93816150bf565b8114615b9e57600080fd5b5056fe3c2f746578743e3c7465787420783d2231302220793d2236302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d223232302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d223136302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d223132302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d2238302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d223130302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d223230302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d223134302220636c6173733d2262617365223e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207072657365727665417370656374526174696f3d22784d696e594d696e206d656574222076696577426f783d223020302033353020333530223e3c7374796c653e2e62617365207b2066696c6c3a2077686974653b20666f6e742d66616d696c793a2073657269663b20666f6e742d73697a653a20313470783b207d3c2f7374796c653e3c726563742077696474683d223130302522206865696768743d2231303025222066696c6c3d222331363043304122202f3e3c7465787420783d2231302220793d2232302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d2234302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d223138302220636c6173733d2262617365223ea26469706673582212200040aabc23c35d878bf3092f29ea7251e90d0237e47cf4be85cf352831b9198164736f6c63430008070033
Deployed Bytecode
0x6080604052600436106101ee5760003560e01c80636fd7468c1161010d578063b88d4fde116100a0578063e43919ab1161006f578063e43919ab14610774578063e4579b71146107b1578063e985e9c5146107ee578063ebf6e91d1461082b578063ff96b17a14610868576101ee565b8063b88d4fde14610694578063c454ca2d146106bd578063c87b56dd146106fa578063d557311214610737576101ee565b806395d89b41116100dc57806395d89b41146105c6578063a1d06bdd146105f1578063a22cb4651461062e578063a6e0502c14610657576101ee565b80636fd7468c146104e457806370a08231146105215780638da5cb5b1461055e5780639414b90214610589576101ee565b80633ccfd60b1161018557806348ac6aad1161015457806348ac6aad146104495780634dbe5889146104865780634e71d92d1461049d5780636352211e146104a7576101ee565b80633ccfd60b1461038f5780633e823f79146103a657806342842e0e146103e35780634552e7c11461040c576101ee565b806323b872dd116101c157806323b872dd146102c1578063247194b0146102ea578063312520eb146103275780633c8c014d14610352576101ee565b806301ffc9a7146101f357806306fdde0314610230578063081812fc1461025b578063095ea7b314610298575b600080fd5b3480156101ff57600080fd5b5061021a600480360381019061021591906140d5565b6108a5565b6040516102279190614bc4565b60405180910390f35b34801561023c57600080fd5b50610245610987565b6040516102529190614bdf565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d919061412f565b610a19565b60405161028f9190614b20565b60405180910390f35b3480156102a457600080fd5b506102bf60048036038101906102ba9190614095565b610a9e565b005b3480156102cd57600080fd5b506102e860048036038101906102e39190613f7f565b610bb6565b005b3480156102f657600080fd5b50610311600480360381019061030c919061412f565b610c16565b60405161031e9190614e21565b60405180910390f35b34801561033357600080fd5b5061033c610c2e565b6040516103499190614e21565b60405180910390f35b34801561035e57600080fd5b506103796004803603810190610374919061412f565b610c34565b6040516103869190614bdf565b60405180910390f35b34801561039b57600080fd5b506103a4610cd4565b005b3480156103b257600080fd5b506103cd60048036038101906103c8919061412f565b610e3b565b6040516103da9190614ba2565b60405180910390f35b3480156103ef57600080fd5b5061040a60048036038101906104059190613f7f565b610f68565b005b34801561041857600080fd5b50610433600480360381019061042e919061412f565b610f88565b6040516104409190614e21565b60405180910390f35b34801561045557600080fd5b50610470600480360381019061046b919061412f565b610fa0565b60405161047d9190614e21565b60405180910390f35b34801561049257600080fd5b5061049b610fb8565b005b6104a56110a8565b005b3480156104b357600080fd5b506104ce60048036038101906104c9919061412f565b611151565b6040516104db9190614b20565b60405180910390f35b3480156104f057600080fd5b5061050b6004803603810190610506919061412f565b611203565b6040516105189190614bdf565b60405180910390f35b34801561052d57600080fd5b5061054860048036038101906105439190613f12565b6112a3565b6040516105559190614e21565b60405180910390f35b34801561056a57600080fd5b5061057361135b565b6040516105809190614b3b565b60405180910390f35b34801561059557600080fd5b506105b060048036038101906105ab919061412f565b611381565b6040516105bd9190614bdf565b60405180910390f35b3480156105d257600080fd5b506105db611465565b6040516105e89190614bdf565b60405180910390f35b3480156105fd57600080fd5b506106186004803603810190610613919061412f565b6114f7565b6040516106259190614e21565b60405180910390f35b34801561063a57600080fd5b5061065560048036038101906106509190614055565b61150f565b005b34801561066357600080fd5b5061067e6004803603810190610679919061412f565b611690565b60405161068b9190614e21565b60405180910390f35b3480156106a057600080fd5b506106bb60048036038101906106b69190613fd2565b6116a8565b005b3480156106c957600080fd5b506106e460048036038101906106df919061412f565b61170a565b6040516106f19190614e21565b60405180910390f35b34801561070657600080fd5b50610721600480360381019061071c919061412f565b611722565b60405161072e9190614bdf565b60405180910390f35b34801561074357600080fd5b5061075e6004803603810190610759919061412f565b6120bf565b60405161076b9190614e21565b60405180910390f35b34801561078057600080fd5b5061079b6004803603810190610796919061412f565b6120d7565b6040516107a89190614e21565b60405180910390f35b3480156107bd57600080fd5b506107d860048036038101906107d3919061412f565b6120ef565b6040516107e59190614bdf565b60405180910390f35b3480156107fa57600080fd5b5061081560048036038101906108109190613f3f565b61218f565b6040516108229190614bc4565b60405180910390f35b34801561083757600080fd5b50610852600480360381019061084d919061412f565b612223565b60405161085f9190614e21565b60405180910390f35b34801561087457600080fd5b5061088f600480360381019061088a919061412f565b61223b565b60405161089c9190614e21565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061097057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610980575061097f82612253565b5b9050919050565b6060600080546109969061510b565b80601f01602080910402602001604051908101604052809291908181526020018280546109c29061510b565b8015610a0f5780601f106109e457610100808354040283529160200191610a0f565b820191906000526020600020905b8154815290600101906020018083116109f257829003601f168201915b5050505050905090565b6000610a24826122bd565b610a63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5a90614d41565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610aa982611151565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1190614da1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b39612329565b73ffffffffffffffffffffffffffffffffffffffff161480610b685750610b6781610b62612329565b61218f565b5b610ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9e90614cc1565b60405180910390fd5b610bb18383612331565b505050565b610bc7610bc1612329565b826123ea565b610c06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfd90614dc1565b60405180910390fd5b610c118383836124c8565b505050565b60bd6020528060005260406000206000915090505481565b60b55481565b60b76020528060005260406000206000915090508054610c539061510b565b80601f0160208091040260200160405190810160405280929190818152602001828054610c7f9061510b565b8015610ccc5780601f10610ca157610100808354040283529160200191610ccc565b820191906000526020600020905b815481529060010190602001808311610caf57829003601f168201915b505050505081565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5b90614e01565b60405180910390fd5b60004790506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610db190614a6a565b60006040518083038185875af1925050503d8060008114610dee576040519150601f19603f3d011682016040523d82523d6000602084013e610df3565b606091505b5050905080610e37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2e90614c41565b60405180910390fd5b5050565b60606000601e67ffffffffffffffff811115610e5a57610e596152ae565b5b604051908082528060200260200182016040528015610e885781602001602082028036833780820191505090505b50905060008060005b60016009610e9f919061500f565b811015610f5c5760005b6000811480610ed257506001858281518110610ec857610ec761527f565b5b6020026020010151145b15610f27578280610ee29061516e565b9350508683604051602001610ef8929190614af4565b6040516020818303038152906040528051906020012060001c9350601e84610f2091906151c1565b9050610ea9565b6001858281518110610f3c57610f3b61527f565b5b602002602001018181525050508080610f549061516e565b915050610e91565b50829350505050919050565b610f83838383604051806020016040528060008152506116a8565b505050565b60c06020528060005260406000206000915090505481565b60bc6020528060005260406000206000915090505481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103f90614e01565b60405180910390fd5b61271060b5541015801561105f5750612af860b554105b61109e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109590614d61565b60405180910390fd5b6110a6612724565b565b678ac7230489e8000034146110f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e990614de1565b60405180910390fd5b600060b55410158015611108575061271060b554105b611147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113e90614d61565b60405180910390fd5b61114f612724565b565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f190614d01565b60405180910390fd5b80915050919050565b600760205280600052604060002060009150905080546112229061510b565b80601f016020809104026020016040519081016040528092919081815260200182805461124e9061510b565b801561129b5780601f106112705761010080835404028352916020019161129b565b820191906000526020600020905b81548152906001019060200180831161127e57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130b90614ce1565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060004283604051602001611398929190614af4565b6040516020818303038152906040528051906020012060001c905060a6600f826113c291906151c1565b600f81106113d3576113d261527f565b5b0180546113df9061510b565b80601f016020809104026020016040519081016040528092919081815260200182805461140b9061510b565b80156114585780601f1061142d57610100808354040283529160200191611458565b820191906000526020600020905b81548152906001019060200180831161143b57829003601f168201915b5050505050915050919050565b6060600180546114749061510b565b80601f01602080910402602001604051908101604052809291908181526020018280546114a09061510b565b80156114ed5780601f106114c2576101008083540402835291602001916114ed565b820191906000526020600020905b8154815290600101906020018083116114d057829003601f168201915b5050505050905090565b60ba6020528060005260406000206000915090505481565b611517612329565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611585576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157c90614c81565b60405180910390fd5b8060056000611592612329565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661163f612329565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116849190614bc4565b60405180910390a35050565b60b86020528060005260406000206000915090505481565b6116b96116b3612329565b836123ea565b6116f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ef90614dc1565b60405180910390fd5b61170484848484612d97565b50505050565b60b96020528060005260406000206000915090505481565b606061172c613c9c565b60405180610120016040528060ff8152602001615d2860ff91398160006017811061175a5761175961527f565b5b602002018190525060b7600084815260200190815260200160002060b66000858152602001908152602001600020604051602001611799929190614899565b604051602081830303815290604052816001601781106117bc576117bb61527f565b5b6020020181905250604051806060016040528060288152602001615e2760289139816002601781106117f1576117f061527f565b5b60200201819052506007600060b8600086815260200190815260200160002054815260200190815260200160002060405160200161182f9190614882565b604051602081830303815290604052816003601781106118525761185161527f565b5b6020020181905250604051806060016040528060288152602001615ba260289139816004601781106118875761188661527f565b5b60200201819052506118ab60b9600085815260200190815260200160002054612df3565b6040516020016118bb91906149c1565b604051602081830303815290604052816005601781106118de576118dd61527f565b5b6020020181905250604051806060016040528060288152602001615c4560289139816006601781106119135761191261527f565b5b602002018190525061193760ba600085815260200190815260200160002054612df3565b6040516020016119479190614922565b6040516020818303038152906040528160076017811061196a5761196961527f565b5b6020020181905250604051806060016040528060298152602001615c6d602991398160086017811061199f5761199e61527f565b5b60200201819052506119c360bb600085815260200190815260200160002054612df3565b6040516020016119d3919061494f565b604051602081830303815290604052816009601781106119f6576119f561527f565b5b6020020181905250604051806060016040528060298152602001615c1c6029913981600a60178110611a2b57611a2a61527f565b5b6020020181905250611a4f60bc600085815260200190815260200160002054612df3565b604051602001611a5f9190614aac565b60405160208183030381529060405281600b60178110611a8257611a8161527f565b5b6020020181905250604051806060016040528060298152602001615cbf6029913981600c60178110611ab757611ab661527f565b5b6020020181905250611adb60bd600085815260200190815260200160002054612df3565b604051602001611aeb91906149ee565b60405160208183030381529060405281600d60178110611b0e57611b0d61527f565b5b6020020181905250604051806060016040528060298152602001615bf36029913981600e60178110611b4357611b4261527f565b5b6020020181905250611b6760be600085815260200190815260200160002054612df3565b604051602001611b7791906148c8565b60405160208183030381529060405281600f60178110611b9a57611b9961527f565b5b6020020181905250604051806060016040528060298152602001615e4f6029913981601060178110611bcf57611bce61527f565b5b6020020181905250611bf360bf600085815260200190815260200160002054612df3565b604051602001611c039190614a7f565b60405160208183030381529060405281601160178110611c2657611c2561527f565b5b6020020181905250604051806060016040528060298152602001615c966029913981601260178110611c5b57611c5a61527f565b5b6020020181905250611c7f60c0600085815260200190815260200160002054612df3565b604051602001611c8f9190614a3d565b60405160208183030381529060405281601360178110611cb257611cb161527f565b5b6020020181905250604051806060016040528060298152602001615bca6029913981601460178110611ce757611ce661527f565b5b6020020181905250611d0b60c1600085815260200190815260200160002054612df3565b604051602001611d1b91906148f5565b60405160208183030381529060405281601560178110611d3e57611d3d61527f565b5b60200201819052506040518060400160405280600d81526020017f3c2f746578743e3c2f7376673e0000000000000000000000000000000000000081525081601660178110611d9057611d8f61527f565b5b6020020181905250600081600060178110611dae57611dad61527f565b5b602002015182600160178110611dc757611dc661527f565b5b602002015183600260178110611de057611ddf61527f565b5b602002015184600360178110611df957611df861527f565b5b602002015185600460178110611e1257611e1161527f565b5b602002015186600560178110611e2b57611e2a61527f565b5b602002015187600660178110611e4457611e4361527f565b5b602002015188600760178110611e5d57611e5c61527f565b5b602002015189600860178110611e7657611e7561527f565b5b60200201518a600960178110611e8f57611e8e61527f565b5b60200201518b600a60178110611ea857611ea761527f565b5b6020020151604051602001611ec79b9a999897969594939291906147e9565b60405160208183030381529060405290508082600b60178110611eed57611eec61527f565b5b602002015183600c60178110611f0657611f0561527f565b5b602002015184600d60178110611f1f57611f1e61527f565b5b602002015185600e60178110611f3857611f3761527f565b5b602002015186600f60178110611f5157611f5061527f565b5b602002015187601060178110611f6a57611f6961527f565b5b602002015188601160178110611f8357611f8261527f565b5b602002015189601260178110611f9c57611f9b61527f565b5b60200201518a601360178110611fb557611fb461527f565b5b60200201518b601460178110611fce57611fcd61527f565b5b6020020151604051602001611fed9b9a999897969594939291906147e9565b604051602081830303815290604052905080826015601781106120135761201261527f565b5b60200201518360166017811061202c5761202b61527f565b5b6020020151604051602001612043939291906147b8565b6040516020818303038152906040529050600061209061206286612df3565b61206b84612f54565b60405160200161207c92919061497c565b604051602081830303815290604052612f54565b9050806040516020016120a39190614a1b565b6040516020818303038152906040529150819350505050919050565b60be6020528060005260406000206000915090505481565b60c16020528060005260406000206000915090505481565b60b6602052806000526040600020600091509050805461210e9061510b565b80601f016020809104026020016040519081016040528092919081815260200182805461213a9061510b565b80156121875780601f1061215c57610100808354040283529160200191612187565b820191906000526020600020905b81548152906001019060200180831161216a57829003601f168201915b505050505081565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60bf6020528060005260406000206000915090505481565b60bb6020528060005260406000206000915090505481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166123a483611151565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006123f5826122bd565b612434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242b90614ca1565b60405180910390fd5b600061243f83611151565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806124ae57508373ffffffffffffffffffffffffffffffffffffffff1661249684610a19565b73ffffffffffffffffffffffffffffffffffffffff16145b806124bf57506124be818561218f565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166124e882611151565b73ffffffffffffffffffffffffffffffffffffffff161461253e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253590614d81565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a590614c61565b60405180910390fd5b6125b98383836130ec565b6125c4600082612331565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612614919061500f565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461266b9190614f2e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60b560008154809291906127379061516e565b9190505550600060b55490506000816040516020016127569190614ad9565b6040516020818303038152906040528051906020012060001c90506008604f8261278091906151c1565b604f81106127915761279061527f565b5b0160b660008481526020019081526020016000209080546127b19061510b565b6127bc929190613cc4565b506057604f826127cc91906151c1565b604f81106127dd576127dc61527f565b5b015460b86000848152602001908152602001600020819055506127ff82611381565b60b760008481526020019081526020016000209080519060200190612825929190613d51565b50600061283183610e3b565b9050600060016009612843919061500f565b67ffffffffffffffff81111561285c5761285b6152ae565b5b60405190808252806020026020018201604052801561288a5781602001602082028036833780820191505090505b509050600080600090505b601e8110156129035760018482815181106128b3576128b261527f565b5b602002602001015114156128f057808383815181106128d5576128d461527f565b5b60200260200101818152505081806128ec9061516e565b9250505b80806128fb9061516e565b915050612895565b5061292e6057604f8661291691906151c1565b604f81106129275761292661527f565b5b01546130f1565b60c26000600981106129435761294261527f565b5b0154826000815181106129595761295861527f565b5b602002602001015161296b9190614f2e565b60b960008781526020019081526020016000208190555060c26001600981106129975761299661527f565b5b0154826000815181106129ad576129ac61527f565b5b6020026020010151836001815181106129c9576129c861527f565b5b60200260200101516129db919061500f565b6129e59190614f2e565b60ba60008781526020019081526020016000208190555060c2600260098110612a1157612a1061527f565b5b015482600181518110612a2757612a2661527f565b5b602002602001015183600281518110612a4357612a4261527f565b5b6020026020010151612a55919061500f565b612a5f9190614f2e565b60bb60008781526020019081526020016000208190555060c2600360098110612a8b57612a8a61527f565b5b015482600281518110612aa157612aa061527f565b5b602002602001015183600381518110612abd57612abc61527f565b5b6020026020010151612acf919061500f565b612ad99190614f2e565b60bc60008781526020019081526020016000208190555060c2600460098110612b0557612b0461527f565b5b015482600381518110612b1b57612b1a61527f565b5b602002602001015183600481518110612b3757612b3661527f565b5b6020026020010151612b49919061500f565b612b539190614f2e565b60bd60008781526020019081526020016000208190555060c2600560098110612b7f57612b7e61527f565b5b015482600481518110612b9557612b9461527f565b5b602002602001015183600581518110612bb157612bb061527f565b5b6020026020010151612bc3919061500f565b612bcd9190614f2e565b60be60008781526020019081526020016000208190555060c2600660098110612bf957612bf861527f565b5b015482600581518110612c0f57612c0e61527f565b5b602002602001015183600681518110612c2b57612c2a61527f565b5b6020026020010151612c3d919061500f565b612c479190614f2e565b60bf60008781526020019081526020016000208190555060c2600760098110612c7357612c7261527f565b5b015482600681518110612c8957612c8861527f565b5b602002602001015183600781518110612ca557612ca461527f565b5b6020026020010151612cb7919061500f565b612cc19190614f2e565b60c060008781526020019081526020016000208190555060c2600860098110612ced57612cec61527f565b5b015482600781518110612d0357612d0261527f565b5b6020026020010151601e612d17919061500f565b612d219190614f2e565b60c1600087815260200190815260200160002081905550612d4233866138ab565b3373ffffffffffffffffffffffffffffffffffffffff167fe716eb6fb4b9833965979a0503340e24c46ecf5955a6c350f9eb165fff30bd4986604051612d889190614e21565b60405180910390a25050505050565b612da28484846124c8565b612dae848484846138c9565b612ded576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de490614c01565b60405180910390fd5b50505050565b60606000821415612e3b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f4f565b600082905060005b60008214612e6d578080612e569061516e565b915050600a82612e669190614f84565b9150612e43565b60008167ffffffffffffffff811115612e8957612e886152ae565b5b6040519080825280601f01601f191660200182016040528015612ebb5781602001600182028036833780820191505090505b5090505b60008514612f4857600182612ed4919061500f565b9150600a85612ee391906151c1565b6030612eef9190614f2e565b60f81b818381518110612f0557612f0461527f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612f419190614f84565b9450612ebf565b8093505050505b919050565b60606000825190506000811415612f7d57604051806020016040528060008152509150506130e7565b60006003600283612f8e9190614f2e565b612f989190614f84565b6004612fa49190614fb5565b90506000602082612fb59190614f2e565b67ffffffffffffffff811115612fce57612fcd6152ae565b5b6040519080825280601f01601f1916602001820160405280156130005781602001600182028036833780820191505090505b5090506000604051806060016040528060408152602001615ce8604091399050600181016020830160005b868110156130a45760038101905062ffffff818a015116603f8160121c168401518060081b905060ff603f83600c1c1686015116810190508060081b905060ff603f8360061c1686015116810190508060081b905060ff603f831686015116810190508060e01b9050808452600484019350505061302b565b5060038606600181146130be57600281146130ce576130d9565b613d3d60f01b60028303526130d9565b603d60f81b60018303525b508484525050819450505050505b919050565b505050565b600181141561317457604051806101200160405280600860ff168152602001600a60ff168152602001600560ff168152602001600660ff168152602001600460ff168152602001600a60ff168152602001600a60ff168152602001600560ff168152602001600260ff1681525060c290600961316e929190613dd7565b506138a8565b60028114156131f757604051806101200160405280600960ff168152602001600760ff168152602001600460ff168152602001600660ff168152602001600660ff168152602001600560ff168152602001600a60ff168152602001600a60ff168152602001600360ff1681525060c29060096131f1929190613dd7565b506138a7565b600381141561327a57604051806101200160405280600c60ff168152602001600560ff168152602001600560ff168152602001600a60ff168152602001600a60ff168152602001600360ff168152602001600460ff168152602001600360ff168152602001600860ff1681525060c2906009613274929190613dd7565b506138a6565b60048114156132fd57604051806101200160405280600860ff168152602001600960ff168152602001600960ff168152602001600760ff168152602001600760ff168152602001600860ff168152602001600560ff168152602001600560ff168152602001600260ff1681525060c29060096132f7929190613dd7565b506138a5565b600581141561338057604051806101200160405280600660ff168152602001600360ff168152602001600c60ff168152602001600460ff168152602001600860ff168152602001600a60ff168152602001600a60ff168152602001600560ff168152602001600260ff1681525060c290600961337a929190613dd7565b506138a4565b600681141561340357604051806101200160405280600660ff168152602001600560ff168152602001600a60ff168152602001600860ff168152602001600860ff168152602001600760ff168152602001600360ff168152602001600560ff168152602001600860ff1681525060c29060096133fd929190613dd7565b506138a3565b600781141561348657604051806101200160405280600a60ff168152602001600c60ff168152602001600260ff168152602001600c60ff168152602001600460ff168152602001600260ff168152602001600760ff168152602001600760ff168152602001600460ff1681525060c2906009613480929190613dd7565b506138a2565b600881141561350957604051806101200160405280600c60ff168152602001600860ff168152602001600760ff168152602001600c60ff168152602001600560ff168152602001600960ff168152602001600260ff168152602001600260ff168152602001600360ff1681525060c2906009613503929190613dd7565b506138a1565b600981141561358c57604051806101200160405280600860ff168152602001600960ff168152602001600760ff168152602001600760ff168152602001600960ff168152602001600560ff168152602001600560ff168152602001600560ff168152602001600560ff1681525060c2906009613586929190613dd7565b506138a0565b600a81141561360f57604051806101200160405280600a60ff168152602001600560ff168152602001600560ff168152602001600c60ff168152602001600c60ff168152602001600560ff168152602001600660ff168152602001600360ff168152602001600260ff1681525060c2906009613609929190613dd7565b5061389f565b600b81141561369257604051806101200160405280600660ff168152602001600c60ff168152602001600360ff168152602001600360ff168152602001600260ff168152602001600c60ff168152602001600c60ff168152602001600860ff168152602001600260ff1681525060c290600961368c929190613dd7565b5061389e565b600c81141561371557604051806101200160405280600660ff168152602001600c60ff168152602001600360ff168152602001600460ff168152602001600560ff168152602001600860ff168152602001600860ff168152602001600860ff168152602001600660ff1681525060c290600961370f929190613dd7565b5061389d565b600d81141561379857604051806101200160405280600760ff168152602001600560ff168152602001600860ff168152602001600560ff168152602001600560ff168152602001600c60ff168152602001600860ff168152602001600660ff168152602001600460ff1681525060c2906009613792929190613dd7565b5061389c565b600e81141561381b57604051806101200160405280600f60ff168152602001600560ff168152602001600560ff168152602001600860ff168152602001600860ff168152602001600260ff168152602001600760ff168152602001600260ff168152602001600860ff1681525060c2906009613815929190613dd7565b5061389b565b600f81141561389a57604051806101200160405280600860ff168152602001600960ff168152602001600560ff168152602001600a60ff168152602001600660ff168152602001600560ff168152602001600460ff168152602001600860ff168152602001600560ff1681525060c2906009613898929190613dd7565b505b5b5b5b5b5b5b5b5b5b5b5b5b5b5b50565b6138c5828260405180602001604052806000815250613a60565b5050565b60006138ea8473ffffffffffffffffffffffffffffffffffffffff16613abb565b15613a53578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613913612329565b8786866040518563ffffffff1660e01b81526004016139359493929190614b56565b602060405180830381600087803b15801561394f57600080fd5b505af192505050801561398057506040513d601f19601f8201168201806040525081019061397d9190614102565b60015b613a03573d80600081146139b0576040519150601f19603f3d011682016040523d82523d6000602084013e6139b5565b606091505b506000815114156139fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139f290614c01565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613a58565b600190505b949350505050565b613a6a8383613ace565b613a7760008484846138c9565b613ab6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613aad90614c01565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613b3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b3590614d21565b60405180910390fd5b613b47816122bd565b15613b87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b7e90614c21565b60405180910390fd5b613b93600083836130ec565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613be39190614f2e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b604051806102e001604052806017905b6060815260200190600190039081613cac5790505090565b828054613cd09061510b565b90600052602060002090601f016020900481019282613cf25760008555613d40565b82601f10613d035780548555613d40565b82800160010185558215613d4057600052602060002091601f016020900482015b82811115613d3f578254825591600101919060010190613d24565b5b509050613d4d9190613e1c565b5090565b828054613d5d9061510b565b90600052602060002090601f016020900481019282613d7f5760008555613dc6565b82601f10613d9857805160ff1916838001178555613dc6565b82800160010185558215613dc6579182015b82811115613dc5578251825591602001919060010190613daa565b5b509050613dd39190613e1c565b5090565b8260098101928215613e0b579160200282015b82811115613e0a578251829060ff16905591602001919060010190613dea565b5b509050613e189190613e1c565b5090565b5b80821115613e35576000816000905550600101613e1d565b5090565b6000613e4c613e4784614e61565b614e3c565b905082815260208101848484011115613e6857613e676152e2565b5b613e738482856150c9565b509392505050565b600081359050613e8a81615b45565b92915050565b600081359050613e9f81615b5c565b92915050565b600081359050613eb481615b73565b92915050565b600081519050613ec981615b73565b92915050565b600082601f830112613ee457613ee36152dd565b5b8135613ef4848260208601613e39565b91505092915050565b600081359050613f0c81615b8a565b92915050565b600060208284031215613f2857613f276152ec565b5b6000613f3684828501613e7b565b91505092915050565b60008060408385031215613f5657613f556152ec565b5b6000613f6485828601613e7b565b9250506020613f7585828601613e7b565b9150509250929050565b600080600060608486031215613f9857613f976152ec565b5b6000613fa686828701613e7b565b9350506020613fb786828701613e7b565b9250506040613fc886828701613efd565b9150509250925092565b60008060008060808587031215613fec57613feb6152ec565b5b6000613ffa87828801613e7b565b945050602061400b87828801613e7b565b935050604061401c87828801613efd565b925050606085013567ffffffffffffffff81111561403d5761403c6152e7565b5b61404987828801613ecf565b91505092959194509250565b6000806040838503121561406c5761406b6152ec565b5b600061407a85828601613e7b565b925050602061408b85828601613e90565b9150509250929050565b600080604083850312156140ac576140ab6152ec565b5b60006140ba85828601613e7b565b92505060206140cb85828601613efd565b9150509250929050565b6000602082840312156140eb576140ea6152ec565b5b60006140f984828501613ea5565b91505092915050565b600060208284031215614118576141176152ec565b5b600061412684828501613eba565b91505092915050565b600060208284031215614145576141446152ec565b5b600061415384828501613efd565b91505092915050565b60006141688383614783565b60208301905092915050565b61417d81615055565b82525050565b61418c81615043565b82525050565b600061419d82614eb7565b6141a78185614ee5565b93506141b283614e92565b8060005b838110156141e35781516141ca888261415c565b97506141d583614ed8565b9250506001810190506141b6565b5085935050505092915050565b6141f981615067565b82525050565b600061420a82614ec2565b6142148185614ef6565b93506142248185602086016150d8565b61422d816152f1565b840191505092915050565b600061424382614ecd565b61424d8185614f12565b935061425d8185602086016150d8565b614266816152f1565b840191505092915050565b600061427c82614ecd565b6142868185614f23565b93506142968185602086016150d8565b80840191505092915050565b600081546142af8161510b565b6142b98186614f23565b945060018216600081146142d457600181146142e557614318565b60ff19831686528186019350614318565b6142ee85614ea2565b60005b83811015614310578154818901526001820191506020810190506142f1565b838801955050505b50505092915050565b600061432e600583614f23565b915061433982615302565b600582019050919050565b6000614351603283614f12565b915061435c8261532b565b604082019050919050565b6000614374601c83614f12565b915061437f8261537a565b602082019050919050565b6000614397601483614f12565b91506143a2826153a3565b602082019050919050565b60006143ba602483614f12565b91506143c5826153cc565b604082019050919050565b60006143dd601983614f12565b91506143e88261541b565b602082019050919050565b6000614400600583614f23565b915061440b82615444565b600582019050919050565b6000614423602c83614f12565b915061442e8261546d565b604082019050919050565b6000614446601583614f23565b9150614451826154bc565b601582019050919050565b6000614469601483614f23565b9150614474826154e5565b601482019050919050565b600061448c600183614f23565b91506144978261550e565b600182019050919050565b60006144af603883614f12565b91506144ba82615537565b604082019050919050565b60006144d2602a83614f12565b91506144dd82615586565b604082019050919050565b60006144f5602983614f12565b9150614500826155d5565b604082019050919050565b6000614518600283614f23565b915061452382615624565b600282019050919050565b600061453b600f83614f23565b91506145468261564d565b600f82019050919050565b600061455e602083614f12565b915061456982615676565b602082019050919050565b6000614581602c83614f12565b915061458c8261569f565b604082019050919050565b60006145a4600c83614f23565b91506145af826156ee565b600c82019050919050565b60006145c7601083614f12565b91506145d282615717565b602082019050919050565b60006145ea602983614f12565b91506145f582615740565b604082019050919050565b600061460d600f83614f23565b91506146188261578f565b600f82019050919050565b6000614630602183614f12565b915061463b826157b8565b604082019050919050565b6000614653601d83614f23565b915061465e82615807565b601d82019050919050565b6000614676600883614f23565b915061468182615830565b600882019050919050565b600061469a6101a083614f23565b91506146a582615859565b6101a082019050919050565b60006146be600083614f07565b91506146c982615a4f565b600082019050919050565b60006146e1600383614f23565b91506146ec82615a52565b600382019050919050565b6000614704603183614f12565b915061470f82615a7b565b604082019050919050565b6000614727601083614f23565b915061473282615aca565b601082019050919050565b600061474a601183614f12565b915061475582615af3565b602082019050919050565b600061476d600a83614f12565b915061477882615b1c565b602082019050919050565b61478c816150bf565b82525050565b61479b816150bf565b82525050565b6147b26147ad826150bf565b6151b7565b82525050565b60006147c48286614271565b91506147d08285614271565b91506147dc8284614271565b9150819050949350505050565b60006147f5828e614271565b9150614801828d614271565b915061480d828c614271565b9150614819828b614271565b9150614825828a614271565b91506148318289614271565b915061483d8288614271565b91506148498287614271565b91506148558286614271565b91506148618285614271565b915061486d8284614271565b91508190509c9b505050505050505050505050565b600061488e82846142a2565b915081905092915050565b60006148a582856142a2565b91506148b08261447f565b91506148bc82846142a2565b91508190509392505050565b60006148d382614321565b91506148de8261447f565b91506148ea8284614271565b915081905092915050565b6000614900826143f3565b915061490b8261447f565b91506149178284614271565b915081905092915050565b600061492d82614439565b91506149388261447f565b91506149448284614271565b915081905092915050565b600061495a8261445c565b91506149658261447f565b91506149718284614271565b915081905092915050565b60006149878261452e565b91506149938285614271565b915061499e8261468c565b91506149aa8284614271565b91506149b58261450b565b91508190509392505050565b60006149cc82614597565b91506149d78261447f565b91506149e38284614271565b915081905092915050565b60006149f982614600565b9150614a048261447f565b9150614a108284614271565b915081905092915050565b6000614a2682614646565b9150614a328284614271565b915081905092915050565b6000614a4882614669565b9150614a538261447f565b9150614a5f8284614271565b915081905092915050565b6000614a75826146b1565b9150819050919050565b6000614a8a826146d4565b9150614a958261447f565b9150614aa18284614271565b915081905092915050565b6000614ab78261471a565b9150614ac28261447f565b9150614ace8284614271565b915081905092915050565b6000614ae582846147a1565b60208201915081905092915050565b6000614b0082856147a1565b602082019150614b1082846147a1565b6020820191508190509392505050565b6000602082019050614b356000830184614183565b92915050565b6000602082019050614b506000830184614174565b92915050565b6000608082019050614b6b6000830187614183565b614b786020830186614183565b614b856040830185614792565b8181036060830152614b9781846141ff565b905095945050505050565b60006020820190508181036000830152614bbc8184614192565b905092915050565b6000602082019050614bd960008301846141f0565b92915050565b60006020820190508181036000830152614bf98184614238565b905092915050565b60006020820190508181036000830152614c1a81614344565b9050919050565b60006020820190508181036000830152614c3a81614367565b9050919050565b60006020820190508181036000830152614c5a8161438a565b9050919050565b60006020820190508181036000830152614c7a816143ad565b9050919050565b60006020820190508181036000830152614c9a816143d0565b9050919050565b60006020820190508181036000830152614cba81614416565b9050919050565b60006020820190508181036000830152614cda816144a2565b9050919050565b60006020820190508181036000830152614cfa816144c5565b9050919050565b60006020820190508181036000830152614d1a816144e8565b9050919050565b60006020820190508181036000830152614d3a81614551565b9050919050565b60006020820190508181036000830152614d5a81614574565b9050919050565b60006020820190508181036000830152614d7a816145ba565b9050919050565b60006020820190508181036000830152614d9a816145dd565b9050919050565b60006020820190508181036000830152614dba81614623565b9050919050565b60006020820190508181036000830152614dda816146f7565b9050919050565b60006020820190508181036000830152614dfa8161473d565b9050919050565b60006020820190508181036000830152614e1a81614760565b9050919050565b6000602082019050614e366000830184614792565b92915050565b6000614e46614e57565b9050614e52828261513d565b919050565b6000604051905090565b600067ffffffffffffffff821115614e7c57614e7b6152ae565b5b614e85826152f1565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614f39826150bf565b9150614f44836150bf565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614f7957614f786151f2565b5b828201905092915050565b6000614f8f826150bf565b9150614f9a836150bf565b925082614faa57614fa9615221565b5b828204905092915050565b6000614fc0826150bf565b9150614fcb836150bf565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615004576150036151f2565b5b828202905092915050565b600061501a826150bf565b9150615025836150bf565b925082821015615038576150376151f2565b5b828203905092915050565b600061504e8261509f565b9050919050565b60006150608261509f565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156150f65780820151818401526020810190506150db565b83811115615105576000848401525b50505050565b6000600282049050600182168061512357607f821691505b6020821081141561513757615136615250565b5b50919050565b615146826152f1565b810181811067ffffffffffffffff82111715615165576151646152ae565b5b80604052505050565b6000615179826150bf565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156151ac576151ab6151f2565b5b600182019050919050565b6000819050919050565b60006151cc826150bf565b91506151d7836150bf565b9250826151e7576151e6615221565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f446f646765000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4661696c656420746f2073656e64204574686572000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f5061727279000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f506879736963616c2044616d61676520506f696e740000000000000000000000600082015250565b7f4d61676963616c2044616d61676520506f696e74000000000000000000000000600082015250565b7f2000000000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b7f7b226e616d65223a202242616720230000000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4865616c746820506f696e740000000000000000000000000000000000000000600082015250565b7f546f6b656e20494420696e76616c696400000000000000000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4d61676963616c20446566656e63650000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b7f437269746963616c000000000000000000000000000000000000000000000000600082015250565b7f222c20226465736372697074696f6e223a20224d6f6e73746572204e4654206960008201527f732061206b696e64206f66204e4654206173736574732072616e646f6d697a6560208201527f642067656e65726174656420616e642073746f726564206f6e20626c6f636b6360408201527f6861696e207769746820646966666572656e74206e616d65732c20707265666560608201527f7373696f6e732c206261736963206174747269627574652076616c756520616e60808201527f642072616e646f6d206174747269627574652076616c75652c2077686963682060a08201527f63616e206265207573656420696e20616e79207363656e652e2054686520726160c08201527f72697479206f66206d6f6e73746572204e46542069732064657465726d696e6560e08201527f64206279206974732070656f66657373696f6e2c2061727274726962757465206101008201527f76616c756520616e642067616d652065636f6c6f67792e204c6576656c2c20736101208201527f63656e6520616e6420696d616765206973206f6d6d69747465642061732070616101408201527f7274206f66206675727468657220657870616e73696f6e732e222c2022696d616101608201527f6765223a2022646174613a696d6167652f7376672b786d6c3b6261736536342c61018082015250565b50565b7f4869740000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f506879736963616c20446566656e636500000000000000000000000000000000600082015250565b7f313046544d204953205245515549524544000000000000000000000000000000600082015250565b7f4f6e6c79204f776e657200000000000000000000000000000000000000000000600082015250565b615b4e81615043565b8114615b5957600080fd5b50565b615b6581615067565b8114615b7057600080fd5b50565b615b7c81615073565b8114615b8757600080fd5b50565b615b93816150bf565b8114615b9e57600080fd5b5056fe3c2f746578743e3c7465787420783d2231302220793d2236302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d223232302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d223136302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d223132302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d2238302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d223130302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d223230302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d223134302220636c6173733d2262617365223e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f73766722207072657365727665417370656374526174696f3d22784d696e594d696e206d656574222076696577426f783d223020302033353020333530223e3c7374796c653e2e62617365207b2066696c6c3a2077686974653b20666f6e742d66616d696c793a2073657269663b20666f6e742d73697a653a20313470783b207d3c2f7374796c653e3c726563742077696474683d223130302522206865696768743d2231303025222066696c6c3d222331363043304122202f3e3c7465787420783d2231302220793d2232302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d2234302220636c6173733d2262617365223e3c2f746578743e3c7465787420783d2231302220793d223138302220636c6173733d2262617365223ea26469706673582212200040aabc23c35d878bf3092f29ea7251e90d0237e47cf4be85cf352831b9198164736f6c63430008070033
Deployed Bytecode Sourcemap
32231:13342:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20077:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21022:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22581:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22104:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23471:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35953:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35511:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35652:37;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45320:248;;;;;;;;;;;;;:::i;:::-;;40273:488;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23881:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36085:37;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35901:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44382:199;;;;;;;;;;;;;:::i;:::-;;44167:203;;;:::i;:::-;;20716:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32304:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20446:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32267:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36928:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21191:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35788:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22874:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35696:35;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24137:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35740:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40769:3390;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36004:34;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35607:38;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23240:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36045:32;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35845:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20077:305;20179:4;20231:25;20216:40;;;:11;:40;;;;:105;;;;20288:33;20273:48;;;:11;:48;;;;20216:105;:158;;;;20338:36;20362:11;20338:23;:36::i;:::-;20216:158;20196:178;;20077:305;;;:::o;21022:100::-;21076:13;21109:5;21102:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21022:100;:::o;22581:221::-;22657:7;22685:16;22693:7;22685;:16::i;:::-;22677:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22770:15;:24;22786:7;22770:24;;;;;;;;;;;;;;;;;;;;;22763:31;;22581:221;;;:::o;22104:411::-;22185:13;22201:23;22216:7;22201:14;:23::i;:::-;22185:39;;22249:5;22243:11;;:2;:11;;;;22235:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22343:5;22327:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;22352:37;22369:5;22376:12;:10;:12::i;:::-;22352:16;:37::i;:::-;22327:62;22305:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;22486:21;22495:2;22499:7;22486:8;:21::i;:::-;22174:341;22104:411;;:::o;23471:339::-;23666:41;23685:12;:10;:12::i;:::-;23699:7;23666:18;:41::i;:::-;23658:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;23774:28;23784:4;23790:2;23794:7;23774:9;:28::i;:::-;23471:339;;;:::o;35953:44::-;;;;;;;;;;;;;;;;;:::o;35511:24::-;;;;:::o;35652:37::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;45320:248::-;45380:5;;;;;;;;;;;45366:19;;:10;:19;;;45358:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;45413:11;45427:21;45413:35;;45462:12;45480:5;;;;;;;;;;;:10;;45498:6;45480:29;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45461:48;;;45528:7;45520:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;45347:221;;45320:248::o;40273:488::-;40326:13;40351:21;35566:2;40376:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40351:42;;40406:9;40426:6;40447;40443:284;40465:1;35597;40459:7;;;;:::i;:::-;40457:1;:9;40443:284;;;40487:6;40508:179;40519:1;40514;:6;:26;;;;40539:1;40525:7;40533:1;40525:10;;;;;;;;:::i;:::-;;;;;;;;:15;40514:26;40508:179;;;40560:3;;;;;:::i;:::-;;;;40621:9;40632:1;40604:30;;;;;;;;;:::i;:::-;;;;;;;;;;;;;40594:41;;;;;;40589:47;;40582:54;;35566:2;40659:4;:12;;;;:::i;:::-;40655:16;;40508:179;;;40714:1;40701:7;40709:1;40701:10;;;;;;;;:::i;:::-;;;;;;;:14;;;;;40472:255;40468:3;;;;;:::i;:::-;;;;40443:284;;;;40746:7;40739:14;;;;;40273:488;;;:::o;23881:185::-;24019:39;24036:4;24042:2;24046:7;24019:39;;;;;;;;;;;;:16;:39::i;:::-;23881:185;;;:::o;36085:37::-;;;;;;;;;;;;;;;;;:::o;35901:45::-;;;;;;;;;;;;;;;;;:::o;44382:199::-;44444:5;;;;;;;;;;;44430:19;;:10;:19;;;44422:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;44499:5;44483:12;;:21;;:45;;;;;44523:5;44508:12;;:20;44483:45;44475:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;44560:13;:11;:13::i;:::-;44382:199::o;44167:203::-;44230:5;44217:9;:18;44209:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;44292:1;44276:12;;:17;;:41;;;;;44312:5;44297:12;;:20;44276:41;44268:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;44349:13;:11;:13::i;:::-;44167:203::o;20716:239::-;20788:7;20808:13;20824:7;:16;20832:7;20824:16;;;;;;;;;;;;;;;;;;;;;20808:32;;20876:1;20859:19;;:5;:19;;;;20851:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20942:5;20935:12;;;20716:239;;;:::o;32304:41::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20446:208::-;20518:7;20563:1;20546:19;;:5;:19;;;;20538:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;20630:9;:16;20640:5;20630:16;;;;;;;;;;;;;;;;20623:23;;20446:208;;;:::o;32267:28::-;;;;;;;;;;;;;:::o;36928:215::-;36984:13;37010:9;37054:15;37071:9;37037:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;37027:55;;;;;;37022:61;;37010:73;;37103:8;37119:15;37112:4;:22;;;;:::i;:::-;37103:32;;;;;;;:::i;:::-;;;37096:39;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36928:215;;;:::o;21191:104::-;21247:13;21280:7;21273:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21191:104;:::o;35788:50::-;;;;;;;;;;;;;;;;;:::o;22874:295::-;22989:12;:10;:12::i;:::-;22977:24;;:8;:24;;;;22969:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23089:8;23044:18;:32;23063:12;:10;:12::i;:::-;23044:32;;;;;;;;;;;;;;;:42;23077:8;23044:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;23142:8;23113:48;;23128:12;:10;:12::i;:::-;23113:48;;;23152:8;23113:48;;;;;;:::i;:::-;;;;;;;;22874:295;;:::o;35696:35::-;;;;;;;;;;;;;;;;;:::o;24137:328::-;24312:41;24331:12;:10;:12::i;:::-;24345:7;24312:18;:41::i;:::-;24304:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24418:39;24432:4;24438:2;24442:7;24451:5;24418:13;:39::i;:::-;24137:328;;;;:::o;35740:41::-;;;;;;;;;;;;;;;;;:::o;40769:3390::-;40833:13;40859:23;;:::i;:::-;40895:268;;;;;;;;;;;;;;;;;:5;40901:1;40895:8;;;;;;;:::i;:::-;;;;;:268;;;;41211:6;:17;41218:9;41211:17;;;;;;;;;;;41235:7;:18;41243:9;41235:18;;;;;;;;;;;41194:60;;;;;;;;;:::i;:::-;;;;;;;;;;;;;41176:5;41182:1;41176:8;;;;;;;:::i;:::-;;;;;:79;;;;41268:53;;;;;;;;;;;;;;;;;:5;41274:1;41268:8;;;;;;;:::i;:::-;;;;;:53;;;;41369:10;:29;41380:6;:17;41387:9;41380:17;;;;;;;;;;;;41369:29;;;;;;;;;;;41352:47;;;;;;;;:::i;:::-;;;;;;;;;;;;;41334:5;41340:1;41334:8;;;;;;;:::i;:::-;;;;;:66;;;;41413:53;;;;;;;;;;;;;;;;;:5;41419:1;41413:8;;;;;;;:::i;:::-;;;;;:53;;;;41535:33;41544:12;:23;41557:9;41544:23;;;;;;;;;;;;41535:8;:33::i;:::-;41497:72;;;;;;;;:::i;:::-;;;;;;;;;;;;;41479:5;41485:1;41479:8;;;;;;;:::i;:::-;;;;;:91;;;;41583:53;;;;;;;;;;;;;;;;;:5;41589:1;41583:8;;;;;;;:::i;:::-;;;;;:53;;;;41714:42;41723:21;:32;41745:9;41723:32;;;;;;;;;;;;41714:8;:42::i;:::-;41667:90;;;;;;;;:::i;:::-;;;;;;;;;;;;;41649:5;41655:1;41649:8;;;;;;;:::i;:::-;;;;;:109;;;;41771:54;;;;;;;;;;;;;;;;;:5;41777:1;41771:8;;;;;;;:::i;:::-;;;;;:54;;;;41902:41;41911:20;:31;41932:9;41911:31;;;;;;;;;;;;41902:8;:41::i;:::-;41856:88;;;;;;;;:::i;:::-;;;;;;;;;;;;;41838:5;41844:1;41838:8;;;;;;;:::i;:::-;;;;;:107;;;;41958:55;;;;;;;;;;;;;;;;;:5;41964:2;41958:9;;;;;;;:::i;:::-;;;;;:55;;;;42087:37;42096:16;:27;42113:9;42096:27;;;;;;;;;;;;42087:8;:37::i;:::-;42045:80;;;;;;;;:::i;:::-;;;;;;;;;;;;;42026:5;42032:2;42026:9;;;;;;;:::i;:::-;;;;;:100;;;;42139:55;;;;;;;;;;;;;;;;;:5;42145:2;42139:9;;;;;;;:::i;:::-;;;;;:55;;;;42267:36;42276:15;:26;42292:9;42276:26;;;;;;;;;;;;42267:8;:36::i;:::-;42226:78;;;;;;;;:::i;:::-;;;;;;;;;;;;;42207:5;42213:2;42207:9;;;;;;;:::i;:::-;;;;;:98;;;;42318:55;;;;;;;;;;;;;;;;;:5;42324:2;42318:9;;;;;;;:::i;:::-;;;;;:55;;;;42436:26;42445:5;:16;42451:9;42445:16;;;;;;;;;;;;42436:8;:26::i;:::-;42405:58;;;;;;;;:::i;:::-;;;;;;;;;;;;;42386:5;42392:2;42386:9;;;;;;;:::i;:::-;;;;;:78;;;;42477:55;;;;;;;;;;;;;;;;;:5;42483:2;42477:9;;;;;;;:::i;:::-;;;;;:55;;;;42593:24;42602:3;:14;42606:9;42602:14;;;;;;;;;;;;42593:8;:24::i;:::-;42564:54;;;;;;;;:::i;:::-;;;;;;;;;;;;;42545:5;42551:2;42545:9;;;;;;;:::i;:::-;;;;;:74;;;;42632:55;;;;;;;;;;;;;;;;;:5;42638:2;42632:9;;;;;;;:::i;:::-;;;;;:55;;;;42753:29;42762:8;:19;42771:9;42762:19;;;;;;;;;;;;42753:8;:29::i;:::-;42719:64;;;;;;;;:::i;:::-;;;;;;;;;;;;;42700:5;42706:2;42700:9;;;;;;;:::i;:::-;;;;;:84;;;;42805:55;;;;;;;;;;;;;;;;;:5;42811:2;42805:9;;;;;;;:::i;:::-;;;;;:55;;;;42923:26;42932:5;:16;42938:9;42932:16;;;;;;;;;;;;42923:8;:26::i;:::-;42892:58;;;;;;;;:::i;:::-;;;;;;;;;;;;;42873:5;42879:2;42873:9;;;;;;;:::i;:::-;;;;;:78;;;;42964:27;;;;;;;;;;;;;;;;;:5;42970:2;42964:9;;;;;;;:::i;:::-;;;;;:27;;;;43004:20;43065:5;43071:1;43065:8;;;;;;;:::i;:::-;;;;;;43075:5;43081:1;43075:8;;;;;;;:::i;:::-;;;;;;43085:5;43091:1;43085:8;;;;;;;:::i;:::-;;;;;;43095:5;43101:1;43095:8;;;;;;;:::i;:::-;;;;;;43105:5;43111:1;43105:8;;;;;;;:::i;:::-;;;;;;43115:5;43121:1;43115:8;;;;;;;:::i;:::-;;;;;;43125:5;43131:1;43125:8;;;;;;;:::i;:::-;;;;;;43135:5;43141:1;43135:8;;;;;;;:::i;:::-;;;;;;43159:5;43165:1;43159:8;;;;;;;:::i;:::-;;;;;;43169:5;43175:1;43169:8;;;;;;;:::i;:::-;;;;;;43179:5;43185:2;43179:9;;;;;;;:::i;:::-;;;;;;43034:155;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43004:186;;43244:6;43252:5;43258:2;43252:9;;;;;;;:::i;:::-;;;;;;43263:5;43269:2;43263:9;;;;;;;:::i;:::-;;;;;;43274:5;43280:2;43274:9;;;;;;;:::i;:::-;;;;;;43285:5;43291:2;43285:9;;;;;;;:::i;:::-;;;;;;43310:5;43316:2;43310:9;;;;;;;:::i;:::-;;;;;;43321:5;43327:2;43321:9;;;;;;;:::i;:::-;;;;;;43332:5;43338:2;43332:9;;;;;;;:::i;:::-;;;;;;43343:5;43349:2;43343:9;;;;;;;:::i;:::-;;;;;;43354:5;43360:2;43354:9;;;;;;;:::i;:::-;;;;;;43365:5;43371:2;43365:9;;;;;;;:::i;:::-;;;;;;43227:148;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43211:165;;43422:6;43430:5;43436:2;43430:9;;;;;;;:::i;:::-;;;;;;43441:5;43447:2;43441:9;;;;;;;:::i;:::-;;;;;;43405:46;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43389:63;;43465:18;43486:556;43563:19;43572:9;43563:8;:19::i;:::-;44004:28;44024:6;44004:13;:28::i;:::-;43527:512;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43486:13;:556::i;:::-;43465:577;;44119:4;44069:55;;;;;;;;:::i;:::-;;;;;;;;;;;;;44053:72;;44145:6;44138:13;;;;;40769:3390;;;:::o;36004:34::-;;;;;;;;;;;;;;;;;:::o;36129:::-;;;;;;;;;;;;;;;;;:::o;35607:38::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23240:164::-;23337:4;23361:18;:25;23380:5;23361:25;;;;;;;;;;;;;;;:35;23387:8;23361:35;;;;;;;;;;;;;;;;;;;;;;;;;23354:42;;23240:164;;;;:::o;36045:32::-;;;;;;;;;;;;;;;;;:::o;35845:49::-;;;;;;;;;;;;;;;;;:::o;1539:157::-;1624:4;1663:25;1648:40;;;:11;:40;;;;1641:47;;1539:157;;;:::o;25975:127::-;26040:4;26092:1;26064:30;;:7;:16;26072:7;26064:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26057:37;;25975:127;;;:::o;4286:98::-;4339:7;4366:10;4359:17;;4286:98;:::o;29957:174::-;30059:2;30032:15;:24;30048:7;30032:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30115:7;30111:2;30077:46;;30086:23;30101:7;30086:14;:23::i;:::-;30077:46;;;;;;;;;;;;29957:174;;:::o;26269:348::-;26362:4;26387:16;26395:7;26387;:16::i;:::-;26379:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26463:13;26479:23;26494:7;26479:14;:23::i;:::-;26463:39;;26532:5;26521:16;;:7;:16;;;:51;;;;26565:7;26541:31;;:20;26553:7;26541:11;:20::i;:::-;:31;;;26521:51;:87;;;;26576:32;26593:5;26600:7;26576:16;:32::i;:::-;26521:87;26513:96;;;26269:348;;;;:::o;29261:578::-;29420:4;29393:31;;:23;29408:7;29393:14;:23::i;:::-;:31;;;29385:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;29503:1;29489:16;;:2;:16;;;;29481:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;29559:39;29580:4;29586:2;29590:7;29559:20;:39::i;:::-;29663:29;29680:1;29684:7;29663:8;:29::i;:::-;29724:1;29705:9;:15;29715:4;29705:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;29753:1;29736:9;:13;29746:2;29736:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29784:2;29765:7;:16;29773:7;29765:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29823:7;29819:2;29804:27;;29813:4;29804:27;;;;;;;;;;;;29261:578;;;:::o;37151:1665::-;37192:12;;:15;;;;;;;;;:::i;:::-;;;;;;37218:18;37239:12;;37218:33;;37264:9;37308:13;37291:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;37281:42;;;;;;37276:48;;37264:60;;37370:8;37386:15;37379:4;:22;;;;:::i;:::-;37370:32;;;;;;;:::i;:::-;;;37345:7;:22;37353:13;37345:22;;;;;;;;;;;:57;;;;;;:::i;:::-;;;;;;:::i;:::-;;37437:11;37456:18;37449:4;:25;;;;:::i;:::-;37437:38;;;;;;;:::i;:::-;;;;37413:6;:21;37420:13;37413:21;;;;;;;;;;;:62;;;;37510:24;37520:13;37510:9;:24::i;:::-;37486:6;:21;37493:13;37486:21;;;;;;;;;;;:48;;;;;;;;;;;;:::i;:::-;;37547:21;37571;37578:13;37571:6;:21::i;:::-;37547:45;;37603:27;37650:1;35597;37644:7;;;;:::i;:::-;37633:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37603:49;;37663:6;37685;37692:1;37685:8;;37680:151;35566:2;37695:1;:7;37680:151;;;37741:1;37727:7;37735:1;37727:10;;;;;;;;:::i;:::-;;;;;;;;:15;37723:97;;;37781:1;37762:13;37776:1;37762:16;;;;;;;;:::i;:::-;;;;;;;:20;;;;;37801:3;;;;;:::i;:::-;;;;37723:97;37704:3;;;;;:::i;:::-;;;;37680:151;;;;37843:55;37859:11;37878:18;37871:4;:25;;;;:::i;:::-;37859:38;;;;;;;:::i;:::-;;;;37843:15;:55::i;:::-;37960:10;37971:1;37960:13;;;;;;;:::i;:::-;;;;37941;37955:1;37941:16;;;;;;;;:::i;:::-;;;;;;;;:32;;;;:::i;:::-;37911:12;:27;37924:13;37911:27;;;;;;;;;;;:62;;;;38061:10;38072:1;38061:13;;;;;;;:::i;:::-;;;;38042;38056:1;38042:16;;;;;;;;:::i;:::-;;;;;;;;38023:13;38037:1;38023:16;;;;;;;;:::i;:::-;;;;;;;;:35;;;;:::i;:::-;:51;;;;:::i;:::-;37984:21;:36;38006:13;37984:36;;;;;;;;;;;:90;;;;38161:10;38172:1;38161:13;;;;;;;:::i;:::-;;;;38142;38156:1;38142:16;;;;;;;;:::i;:::-;;;;;;;;38123:13;38137:1;38123:16;;;;;;;;:::i;:::-;;;;;;;;:35;;;;:::i;:::-;:51;;;;:::i;:::-;38085:20;:35;38106:13;38085:35;;;;;;;;;;;:89;;;;38257:10;38268:1;38257:13;;;;;;;:::i;:::-;;;;38238;38252:1;38238:16;;;;;;;;:::i;:::-;;;;;;;;38219:13;38233:1;38219:16;;;;;;;;:::i;:::-;;;;;;;;:35;;;;:::i;:::-;:51;;;;:::i;:::-;38185:16;:31;38202:13;38185:31;;;;;;;;;;;:85;;;;38352:10;38363:1;38352:13;;;;;;;:::i;:::-;;;;38333;38347:1;38333:16;;;;;;;;:::i;:::-;;;;;;;;38314:13;38328:1;38314:16;;;;;;;;:::i;:::-;;;;;;;;:35;;;;:::i;:::-;:51;;;;:::i;:::-;38281:15;:30;38297:13;38281:30;;;;;;;;;;;:84;;;;38437:10;38448:1;38437:13;;;;;;;:::i;:::-;;;;38418;38432:1;38418:16;;;;;;;;:::i;:::-;;;;;;;;38399:13;38413:1;38399:16;;;;;;;;:::i;:::-;;;;;;;;:35;;;;:::i;:::-;:51;;;;:::i;:::-;38376:5;:20;38382:13;38376:20;;;;;;;;;;;:74;;;;38520:10;38531:1;38520:13;;;;;;;:::i;:::-;;;;38501;38515:1;38501:16;;;;;;;;:::i;:::-;;;;;;;;38482:13;38496:1;38482:16;;;;;;;;:::i;:::-;;;;;;;;:35;;;;:::i;:::-;:51;;;;:::i;:::-;38461:3;:18;38465:13;38461:18;;;;;;;;;;;:72;;;;38609:10;38620:1;38609:13;;;;;;;:::i;:::-;;;;38590;38604:1;38590:16;;;;;;;;:::i;:::-;;;;;;;;38571:13;38585:1;38571:16;;;;;;;;:::i;:::-;;;;;;;;:35;;;;:::i;:::-;:51;;;;:::i;:::-;38545:8;:23;38554:13;38545:23;;;;;;;;;;;:77;;;;38683:10;38694:1;38683:13;;;;;;;:::i;:::-;;;;38664;38678:1;38664:16;;;;;;;;:::i;:::-;;;;;;;;35566:2;38656:24;;;;:::i;:::-;:40;;;;:::i;:::-;38633:5;:20;38639:13;38633:20;;;;;;;;;;;:63;;;;38710:36;38720:10;38732:13;38710:9;:36::i;:::-;38782:10;38772:36;;;38794:13;38772:36;;;;;;:::i;:::-;;;;;;;;37181:1635;;;;;37151:1665::o;25347:315::-;25504:28;25514:4;25520:2;25524:7;25504:9;:28::i;:::-;25551:48;25574:4;25580:2;25584:7;25593:5;25551:22;:48::i;:::-;25543:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25347:315;;;;:::o;44589:723::-;44645:13;44875:1;44866:5;:10;44862:53;;;44893:10;;;;;;;;;;;;;;;;;;;;;44862:53;44925:12;44940:5;44925:20;;44956:14;44981:78;44996:1;44988:4;:9;44981:78;;45014:8;;;;;:::i;:::-;;;;45045:2;45037:10;;;;;:::i;:::-;;;44981:78;;;45069:19;45101:6;45091:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45069:39;;45119:154;45135:1;45126:5;:10;45119:154;;45163:1;45153:11;;;;;:::i;:::-;;;45230:2;45222:5;:10;;;;:::i;:::-;45209:2;:24;;;;:::i;:::-;45196:39;;45179:6;45186;45179:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;45259:2;45250:11;;;;;:::i;:::-;;;45119:154;;;45297:6;45283:21;;;;;44589:723;;;;:::o;45924:1607::-;45982:13;46008:11;46022:4;:11;46008:25;;46055:1;46048:3;:8;46044:23;;;46058:9;;;;;;;;;;;;;;;;;46044:23;46119:18;46157:1;46152;46146:3;:7;;;;:::i;:::-;46145:13;;;;:::i;:::-;46140:1;:19;;;;:::i;:::-;46119:40;;46217:19;46262:2;46249:10;:15;;;;:::i;:::-;46239:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46217:48;;46278:18;46299:5;;;;;;;;;;;;;;;;;46278:26;;46368:1;46361:5;46357:13;46413:2;46405:6;46401:15;46464:1;46432:777;46487:3;46484:1;46481:10;46432:777;;;46542:1;46539;46535:9;46530:14;;46600:8;46595:1;46589:4;46585:12;46579:19;46575:34;46680:4;46672:5;46668:2;46664:14;46660:25;46650:8;46646:40;46640:47;46719:3;46716:1;46712:11;46705:18;;46810:4;46801;46793:5;46789:2;46785:14;46781:25;46771:8;46767:40;46761:47;46757:58;46752:3;46748:68;46741:75;;46848:3;46845:1;46841:11;46834:18;;46938:4;46929;46921:5;46918:1;46914:13;46910:24;46900:8;46896:39;46890:46;46886:57;46881:3;46877:67;46870:74;;46976:3;46973:1;46969:11;46962:18;;47058:4;47049;47042:5;47038:16;47028:8;47024:31;47018:38;47014:49;47009:3;47005:59;46998:66;;47098:3;47093;47089:13;47082:20;;47140:3;47129:9;47122:22;47192:1;47181:9;47177:17;47164:30;;46511:698;;46432:777;;;46436:44;47241:1;47236:3;47232:11;47262:1;47257:84;;;;47360:1;47355:82;;;;47225:212;;47257:84;47318:6;47313:3;47309:16;47305:1;47294:9;47290:17;47283:43;47257:84;;47355:82;47416:4;47411:3;47407:14;47403:1;47392:9;47388:17;47381:41;47225:212;;47468:10;47460:6;47453:26;46326:1164;;47516:6;47502:21;;;;;;45924:1607;;;;:::o;32067:126::-;;;;:::o;38824:1441::-;38897:1;38886:7;:12;38882:1376;;;38914:43;;;;;;;;38928:1;38914:43;;;;;;38931:2;38914:43;;;;;;38935:1;38914:43;;;;;;38938:1;38914:43;;;;;;38941:1;38914:43;;;;;;38944:2;38914:43;;;;;;38948:2;38914:43;;;;;;38952:1;38914:43;;;;;;38955:1;38914:43;;;;;:10;:43;;;;;;;:::i;:::-;;38882:1376;;;38990:1;38979:7;:12;38975:1283;;;39007:42;;;;;;;;39021:1;39007:42;;;;;;39024:1;39007:42;;;;;;39027:1;39007:42;;;;;;39030:1;39007:42;;;;;;39033:1;39007:42;;;;;;39036:1;39007:42;;;;;;39039:2;39007:42;;;;;;39043:2;39007:42;;;;;;39047:1;39007:42;;;;;:10;:42;;;;;;;:::i;:::-;;38975:1283;;;39082:1;39071:7;:12;39067:1191;;;39099:43;;;;;;;;39113:2;39099:43;;;;;;39117:1;39099:43;;;;;;39120:1;39099:43;;;;;;39123:2;39099:43;;;;;;39127:2;39099:43;;;;;;39131:1;39099:43;;;;;;39134:1;39099:43;;;;;;39137:1;39099:43;;;;;;39140:1;39099:43;;;;;:10;:43;;;;;;;:::i;:::-;;39067:1191;;;39175:1;39164:7;:12;39160:1098;;;39192:40;;;;;;;;39206:1;39192:40;;;;;;39209:1;39192:40;;;;;;39212:1;39192:40;;;;;;39215:1;39192:40;;;;;;39218:1;39192:40;;;;;;39221:1;39192:40;;;;;;39224:1;39192:40;;;;;;39227:1;39192:40;;;;;;39230:1;39192:40;;;;;:10;:40;;;;;;;:::i;:::-;;39160:1098;;;39265:1;39254:7;:12;39250:1008;;;39282:43;;;;;;;;39296:1;39282:43;;;;;;39299:1;39282:43;;;;;;39302:2;39282:43;;;;;;39306:1;39282:43;;;;;;39309:1;39282:43;;;;;;39312:2;39282:43;;;;;;39316:2;39282:43;;;;;;39320:1;39282:43;;;;;;39323:1;39282:43;;;;;:10;:43;;;;;;;:::i;:::-;;39250:1008;;;39358:1;39347:7;:12;39343:915;;;39375:41;;;;;;;;39389:1;39375:41;;;;;;39392:1;39375:41;;;;;;39395:2;39375:41;;;;;;39399:1;39375:41;;;;;;39402:1;39375:41;;;;;;39405:1;39375:41;;;;;;39408:1;39375:41;;;;;;39411:1;39375:41;;;;;;39414:1;39375:41;;;;;:10;:41;;;;;;;:::i;:::-;;39343:915;;;39449:1;39438:7;:12;39434:824;;;39466:43;;;;;;;;39480:2;39466:43;;;;;;39484:2;39466:43;;;;;;39488:1;39466:43;;;;;;39491:2;39466:43;;;;;;39495:1;39466:43;;;;;;39498:1;39466:43;;;;;;39501:1;39466:43;;;;;;39504:1;39466:43;;;;;;39507:1;39466:43;;;;;:10;:43;;;;;;;:::i;:::-;;39434:824;;;39542:1;39531:7;:12;39527:731;;;39559:42;;;;;;;;39573:2;39559:42;;;;;;39577:1;39559:42;;;;;;39580:1;39559:42;;;;;;39583:2;39559:42;;;;;;39587:1;39559:42;;;;;;39590:1;39559:42;;;;;;39593:1;39559:42;;;;;;39596:1;39559:42;;;;;;39599:1;39559:42;;;;;:10;:42;;;;;;;:::i;:::-;;39527:731;;;39634:1;39623:7;:12;39619:639;;;39651:40;;;;;;;;39665:1;39651:40;;;;;;39668:1;39651:40;;;;;;39671:1;39651:40;;;;;;39674:1;39651:40;;;;;;39677:1;39651:40;;;;;;39680:1;39651:40;;;;;;39683:1;39651:40;;;;;;39686:1;39651:40;;;;;;39689:1;39651:40;;;;;:10;:40;;;;;;;:::i;:::-;;39619:639;;;39724:2;39713:7;:13;39709:549;;;39742:43;;;;;;;;39756:2;39742:43;;;;;;39760:1;39742:43;;;;;;39763:1;39742:43;;;;;;39766:2;39742:43;;;;;;39770:2;39742:43;;;;;;39774:1;39742:43;;;;;;39777:1;39742:43;;;;;;39780:1;39742:43;;;;;;39783:1;39742:43;;;;;:10;:43;;;;;;;:::i;:::-;;39709:549;;;39818:2;39807:7;:13;39803:455;;;39836:43;;;;;;;;39850:1;39836:43;;;;;;39853:2;39836:43;;;;;;39857:1;39836:43;;;;;;39860:1;39836:43;;;;;;39863:1;39836:43;;;;;;39866:2;39836:43;;;;;;39870:2;39836:43;;;;;;39874:1;39836:43;;;;;;39877:1;39836:43;;;;;:10;:43;;;;;;;:::i;:::-;;39803:455;;;39912:2;39901:7;:13;39897:361;;;39930:41;;;;;;;;39944:1;39930:41;;;;;;39947:2;39930:41;;;;;;39951:1;39930:41;;;;;;39954:1;39930:41;;;;;;39957:1;39930:41;;;;;;39960:1;39930:41;;;;;;39963:1;39930:41;;;;;;39966:1;39930:41;;;;;;39969:1;39930:41;;;;;:10;:41;;;;;;;:::i;:::-;;39897:361;;;40004:2;39993:7;:13;39989:269;;;40022:41;;;;;;;;40036:1;40022:41;;;;;;40039:1;40022:41;;;;;;40042:1;40022:41;;;;;;40045:1;40022:41;;;;;;40048:1;40022:41;;;;;;40051:2;40022:41;;;;;;40055:1;40022:41;;;;;;40058:1;40022:41;;;;;;40061:1;40022:41;;;;;:10;:41;;;;;;;:::i;:::-;;39989:269;;;40096:2;40085:7;:13;40081:177;;;40114:41;;;;;;;;40128:2;40114:41;;;;;;40132:1;40114:41;;;;;;40135:1;40114:41;;;;;;40138:1;40114:41;;;;;;40141:1;40114:41;;;;;;40144:1;40114:41;;;;;;40147:1;40114:41;;;;;;40150:1;40114:41;;;;;;40153:1;40114:41;;;;;:10;:41;;;;;;;:::i;:::-;;40081:177;;;40187:2;40176:7;:13;40172:86;;;40205:41;;;;;;;;40219:1;40205:41;;;;;;40222:1;40205:41;;;;;;40225:1;40205:41;;;;;;40228:2;40205:41;;;;;;40232:1;40205:41;;;;;;40235:1;40205:41;;;;;;40238:1;40205:41;;;;;;40241:1;40205:41;;;;;;40244:1;40205:41;;;;;:10;:41;;;;;;;:::i;:::-;;40172:86;40081:177;39989:269;39897:361;39803:455;39709:549;39619:639;39527:731;39434:824;39343:915;39250:1008;39160:1098;39067:1191;38975:1283;38882:1376;38824:1441;:::o;26959:110::-;27035:26;27045:2;27049:7;27035:26;;;;;;;;;;;;:9;:26::i;:::-;26959:110;;:::o;30696:799::-;30851:4;30872:15;:2;:13;;;:15::i;:::-;30868:620;;;30924:2;30908:36;;;30945:12;:10;:12::i;:::-;30959:4;30965:7;30974:5;30908:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30904:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31167:1;31150:6;:13;:18;31146:272;;;31193:60;;;;;;;;;;:::i;:::-;;;;;;;;31146:272;31368:6;31362:13;31353:6;31349:2;31345:15;31338:38;30904:529;31041:41;;;31031:51;;;:6;:51;;;;31024:58;;;;;30868:620;31472:4;31465:11;;30696:799;;;;;;;:::o;27296:321::-;27426:18;27432:2;27436:7;27426:5;:18::i;:::-;27477:54;27508:1;27512:2;27516:7;27525:5;27477:22;:54::i;:::-;27455:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;27296:321;;;:::o;5210:387::-;5270:4;5478:12;5545:7;5533:20;5525:28;;5588:1;5581:4;:8;5574:15;;;5210:387;;;:::o;27953:382::-;28047:1;28033:16;;:2;:16;;;;28025:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28106:16;28114:7;28106;:16::i;:::-;28105:17;28097:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28168:45;28197:1;28201:2;28205:7;28168:20;:45::i;:::-;28243:1;28226:9;:13;28236:2;28226:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28274:2;28255:7;:16;28263:7;28255:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28319:7;28315:2;28294:33;;28311:1;28294:33;;;;;;;;;;;;27953:382;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::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:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;568:133::-;611:5;649:6;636:20;627:29;;665:30;689:5;665:30;:::i;:::-;568:133;;;;:::o;707:137::-;752:5;790:6;777:20;768:29;;806:32;832:5;806:32;:::i;:::-;707:137;;;;:::o;850:141::-;906:5;937:6;931:13;922:22;;953:32;979:5;953:32;:::i;:::-;850:141;;;;:::o;1010:338::-;1065:5;1114:3;1107:4;1099:6;1095:17;1091:27;1081:122;;1122:79;;:::i;:::-;1081:122;1239:6;1226:20;1264:78;1338:3;1330:6;1323:4;1315:6;1311:17;1264:78;:::i;:::-;1255:87;;1071:277;1010:338;;;;:::o;1354:139::-;1400:5;1438:6;1425:20;1416:29;;1454:33;1481:5;1454:33;:::i;:::-;1354:139;;;;:::o;1499:329::-;1558:6;1607:2;1595:9;1586:7;1582:23;1578:32;1575:119;;;1613:79;;:::i;:::-;1575:119;1733:1;1758:53;1803:7;1794:6;1783:9;1779:22;1758:53;:::i;:::-;1748:63;;1704:117;1499:329;;;;:::o;1834:474::-;1902:6;1910;1959:2;1947:9;1938:7;1934:23;1930:32;1927:119;;;1965:79;;:::i;:::-;1927:119;2085:1;2110:53;2155:7;2146:6;2135:9;2131:22;2110:53;:::i;:::-;2100:63;;2056:117;2212:2;2238:53;2283:7;2274:6;2263:9;2259:22;2238:53;:::i;:::-;2228:63;;2183:118;1834:474;;;;;:::o;2314:619::-;2391:6;2399;2407;2456:2;2444:9;2435:7;2431:23;2427:32;2424:119;;;2462:79;;:::i;:::-;2424:119;2582:1;2607:53;2652:7;2643:6;2632:9;2628:22;2607:53;:::i;:::-;2597:63;;2553:117;2709:2;2735:53;2780:7;2771:6;2760:9;2756:22;2735:53;:::i;:::-;2725:63;;2680:118;2837:2;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2808:118;2314:619;;;;;:::o;2939:943::-;3034:6;3042;3050;3058;3107:3;3095:9;3086:7;3082:23;3078:33;3075:120;;;3114:79;;:::i;:::-;3075:120;3234:1;3259:53;3304:7;3295:6;3284:9;3280:22;3259:53;:::i;:::-;3249:63;;3205:117;3361:2;3387:53;3432:7;3423:6;3412:9;3408:22;3387:53;:::i;:::-;3377:63;;3332:118;3489:2;3515:53;3560:7;3551:6;3540:9;3536:22;3515:53;:::i;:::-;3505:63;;3460:118;3645:2;3634:9;3630:18;3617:32;3676:18;3668:6;3665:30;3662:117;;;3698:79;;:::i;:::-;3662:117;3803:62;3857:7;3848:6;3837:9;3833:22;3803:62;:::i;:::-;3793:72;;3588:287;2939:943;;;;;;;:::o;3888:468::-;3953:6;3961;4010:2;3998:9;3989:7;3985:23;3981:32;3978:119;;;4016:79;;:::i;:::-;3978:119;4136:1;4161:53;4206:7;4197:6;4186:9;4182:22;4161:53;:::i;:::-;4151:63;;4107:117;4263:2;4289:50;4331:7;4322:6;4311:9;4307:22;4289:50;:::i;:::-;4279:60;;4234:115;3888:468;;;;;:::o;4362:474::-;4430:6;4438;4487:2;4475:9;4466:7;4462:23;4458:32;4455:119;;;4493:79;;:::i;:::-;4455:119;4613:1;4638:53;4683:7;4674:6;4663:9;4659:22;4638:53;:::i;:::-;4628:63;;4584:117;4740:2;4766:53;4811:7;4802:6;4791:9;4787:22;4766:53;:::i;:::-;4756:63;;4711:118;4362:474;;;;;:::o;4842:327::-;4900:6;4949:2;4937:9;4928:7;4924:23;4920:32;4917:119;;;4955:79;;:::i;:::-;4917:119;5075:1;5100:52;5144:7;5135:6;5124:9;5120:22;5100:52;:::i;:::-;5090:62;;5046:116;4842:327;;;;:::o;5175:349::-;5244:6;5293:2;5281:9;5272:7;5268:23;5264:32;5261:119;;;5299:79;;:::i;:::-;5261:119;5419:1;5444:63;5499:7;5490:6;5479:9;5475:22;5444:63;:::i;:::-;5434:73;;5390:127;5175:349;;;;:::o;5530:329::-;5589:6;5638:2;5626:9;5617:7;5613:23;5609:32;5606:119;;;5644:79;;:::i;:::-;5606:119;5764:1;5789:53;5834:7;5825:6;5814:9;5810:22;5789:53;:::i;:::-;5779:63;;5735:117;5530:329;;;;:::o;5865:179::-;5934:10;5955:46;5997:3;5989:6;5955:46;:::i;:::-;6033:4;6028:3;6024:14;6010:28;;5865:179;;;;:::o;6050:142::-;6153:32;6179:5;6153:32;:::i;:::-;6148:3;6141:45;6050:142;;:::o;6198:118::-;6285:24;6303:5;6285:24;:::i;:::-;6280:3;6273:37;6198:118;;:::o;6352:732::-;6471:3;6500:54;6548:5;6500:54;:::i;:::-;6570:86;6649:6;6644:3;6570:86;:::i;:::-;6563:93;;6680:56;6730:5;6680:56;:::i;:::-;6759:7;6790:1;6775:284;6800:6;6797:1;6794:13;6775:284;;;6876:6;6870:13;6903:63;6962:3;6947:13;6903:63;:::i;:::-;6896:70;;6989:60;7042:6;6989:60;:::i;:::-;6979:70;;6835:224;6822:1;6819;6815:9;6810:14;;6775:284;;;6779:14;7075:3;7068:10;;6476:608;;;6352:732;;;;:::o;7090:109::-;7171:21;7186:5;7171:21;:::i;:::-;7166:3;7159:34;7090:109;;:::o;7205:360::-;7291:3;7319:38;7351:5;7319:38;:::i;:::-;7373:70;7436:6;7431:3;7373:70;:::i;:::-;7366:77;;7452:52;7497:6;7492:3;7485:4;7478:5;7474:16;7452:52;:::i;:::-;7529:29;7551:6;7529:29;:::i;:::-;7524:3;7520:39;7513:46;;7295:270;7205:360;;;;:::o;7571:364::-;7659:3;7687:39;7720:5;7687:39;:::i;:::-;7742:71;7806:6;7801:3;7742:71;:::i;:::-;7735:78;;7822:52;7867:6;7862:3;7855:4;7848:5;7844:16;7822:52;:::i;:::-;7899:29;7921:6;7899:29;:::i;:::-;7894:3;7890:39;7883:46;;7663:272;7571:364;;;;:::o;7941:377::-;8047:3;8075:39;8108:5;8075:39;:::i;:::-;8130:89;8212:6;8207:3;8130:89;:::i;:::-;8123:96;;8228:52;8273:6;8268:3;8261:4;8254:5;8250:16;8228:52;:::i;:::-;8305:6;8300:3;8296:16;8289:23;;8051:267;7941:377;;;;:::o;8348:845::-;8451:3;8488:5;8482:12;8517:36;8543:9;8517:36;:::i;:::-;8569:89;8651:6;8646:3;8569:89;:::i;:::-;8562:96;;8689:1;8678:9;8674:17;8705:1;8700:137;;;;8851:1;8846:341;;;;8667:520;;8700:137;8784:4;8780:9;8769;8765:25;8760:3;8753:38;8820:6;8815:3;8811:16;8804:23;;8700:137;;8846:341;8913:38;8945:5;8913:38;:::i;:::-;8973:1;8987:154;9001:6;8998:1;8995:13;8987:154;;;9075:7;9069:14;9065:1;9060:3;9056:11;9049:35;9125:1;9116:7;9112:15;9101:26;;9023:4;9020:1;9016:12;9011:17;;8987:154;;;9170:6;9165:3;9161:16;9154:23;;8853:334;;8667:520;;8455:738;;8348:845;;;;:::o;9199:400::-;9359:3;9380:84;9462:1;9457:3;9380:84;:::i;:::-;9373:91;;9473:93;9562:3;9473:93;:::i;:::-;9591:1;9586:3;9582:11;9575:18;;9199:400;;;:::o;9605:366::-;9747:3;9768:67;9832:2;9827:3;9768:67;:::i;:::-;9761:74;;9844:93;9933:3;9844:93;:::i;:::-;9962:2;9957:3;9953:12;9946:19;;9605:366;;;:::o;9977:::-;10119:3;10140:67;10204:2;10199:3;10140:67;:::i;:::-;10133:74;;10216:93;10305:3;10216:93;:::i;:::-;10334:2;10329:3;10325:12;10318:19;;9977:366;;;:::o;10349:::-;10491:3;10512:67;10576:2;10571:3;10512:67;:::i;:::-;10505:74;;10588:93;10677:3;10588:93;:::i;:::-;10706:2;10701:3;10697:12;10690:19;;10349:366;;;:::o;10721:::-;10863:3;10884:67;10948:2;10943:3;10884:67;:::i;:::-;10877:74;;10960:93;11049:3;10960:93;:::i;:::-;11078:2;11073:3;11069:12;11062:19;;10721:366;;;:::o;11093:::-;11235:3;11256:67;11320:2;11315:3;11256:67;:::i;:::-;11249:74;;11332:93;11421:3;11332:93;:::i;:::-;11450:2;11445:3;11441:12;11434:19;;11093:366;;;:::o;11465:400::-;11625:3;11646:84;11728:1;11723:3;11646:84;:::i;:::-;11639:91;;11739:93;11828:3;11739:93;:::i;:::-;11857:1;11852:3;11848:11;11841:18;;11465:400;;;:::o;11871:366::-;12013:3;12034:67;12098:2;12093:3;12034:67;:::i;:::-;12027:74;;12110:93;12199:3;12110:93;:::i;:::-;12228:2;12223:3;12219:12;12212:19;;11871:366;;;:::o;12243:402::-;12403:3;12424:85;12506:2;12501:3;12424:85;:::i;:::-;12417:92;;12518:93;12607:3;12518:93;:::i;:::-;12636:2;12631:3;12627:12;12620:19;;12243:402;;;:::o;12651:::-;12811:3;12832:85;12914:2;12909:3;12832:85;:::i;:::-;12825:92;;12926:93;13015:3;12926:93;:::i;:::-;13044:2;13039:3;13035:12;13028:19;;12651:402;;;:::o;13059:400::-;13219:3;13240:84;13322:1;13317:3;13240:84;:::i;:::-;13233:91;;13333:93;13422:3;13333:93;:::i;:::-;13451:1;13446:3;13442:11;13435:18;;13059:400;;;:::o;13465:366::-;13607:3;13628:67;13692:2;13687:3;13628:67;:::i;:::-;13621:74;;13704:93;13793:3;13704:93;:::i;:::-;13822:2;13817:3;13813:12;13806:19;;13465:366;;;:::o;13837:::-;13979:3;14000:67;14064:2;14059:3;14000:67;:::i;:::-;13993:74;;14076:93;14165:3;14076:93;:::i;:::-;14194:2;14189:3;14185:12;14178:19;;13837:366;;;:::o;14209:::-;14351:3;14372:67;14436:2;14431:3;14372:67;:::i;:::-;14365:74;;14448:93;14537:3;14448:93;:::i;:::-;14566:2;14561:3;14557:12;14550:19;;14209:366;;;:::o;14581:400::-;14741:3;14762:84;14844:1;14839:3;14762:84;:::i;:::-;14755:91;;14855:93;14944:3;14855:93;:::i;:::-;14973:1;14968:3;14964:11;14957:18;;14581:400;;;:::o;14987:402::-;15147:3;15168:85;15250:2;15245:3;15168:85;:::i;:::-;15161:92;;15262:93;15351:3;15262:93;:::i;:::-;15380:2;15375:3;15371:12;15364:19;;14987:402;;;:::o;15395:366::-;15537:3;15558:67;15622:2;15617:3;15558:67;:::i;:::-;15551:74;;15634:93;15723:3;15634:93;:::i;:::-;15752:2;15747:3;15743:12;15736:19;;15395:366;;;:::o;15767:::-;15909:3;15930:67;15994:2;15989:3;15930:67;:::i;:::-;15923:74;;16006:93;16095:3;16006:93;:::i;:::-;16124:2;16119:3;16115:12;16108:19;;15767:366;;;:::o;16139:402::-;16299:3;16320:85;16402:2;16397:3;16320:85;:::i;:::-;16313:92;;16414:93;16503:3;16414:93;:::i;:::-;16532:2;16527:3;16523:12;16516:19;;16139:402;;;:::o;16547:366::-;16689:3;16710:67;16774:2;16769:3;16710:67;:::i;:::-;16703:74;;16786:93;16875:3;16786:93;:::i;:::-;16904:2;16899:3;16895:12;16888:19;;16547:366;;;:::o;16919:::-;17061:3;17082:67;17146:2;17141:3;17082:67;:::i;:::-;17075:74;;17158:93;17247:3;17158:93;:::i;:::-;17276:2;17271:3;17267:12;17260:19;;16919:366;;;:::o;17291:402::-;17451:3;17472:85;17554:2;17549:3;17472:85;:::i;:::-;17465:92;;17566:93;17655:3;17566:93;:::i;:::-;17684:2;17679:3;17675:12;17668:19;;17291:402;;;:::o;17699:366::-;17841:3;17862:67;17926:2;17921:3;17862:67;:::i;:::-;17855:74;;17938:93;18027:3;17938:93;:::i;:::-;18056:2;18051:3;18047:12;18040:19;;17699:366;;;:::o;18071:402::-;18231:3;18252:85;18334:2;18329:3;18252:85;:::i;:::-;18245:92;;18346:93;18435:3;18346:93;:::i;:::-;18464:2;18459:3;18455:12;18448:19;;18071:402;;;:::o;18479:400::-;18639:3;18660:84;18742:1;18737:3;18660:84;:::i;:::-;18653:91;;18753:93;18842:3;18753:93;:::i;:::-;18871:1;18866:3;18862:11;18855:18;;18479:400;;;:::o;18885:404::-;19045:3;19066:86;19148:3;19143;19066:86;:::i;:::-;19059:93;;19161;19250:3;19161:93;:::i;:::-;19279:3;19274;19270:13;19263:20;;18885:404;;;:::o;19295:398::-;19454:3;19475:83;19556:1;19551:3;19475:83;:::i;:::-;19468:90;;19567:93;19656:3;19567:93;:::i;:::-;19685:1;19680:3;19676:11;19669:18;;19295:398;;;:::o;19699:400::-;19859:3;19880:84;19962:1;19957:3;19880:84;:::i;:::-;19873:91;;19973:93;20062:3;19973:93;:::i;:::-;20091:1;20086:3;20082:11;20075:18;;19699:400;;;:::o;20105:366::-;20247:3;20268:67;20332:2;20327:3;20268:67;:::i;:::-;20261:74;;20344:93;20433:3;20344:93;:::i;:::-;20462:2;20457:3;20453:12;20446:19;;20105:366;;;:::o;20477:402::-;20637:3;20658:85;20740:2;20735:3;20658:85;:::i;:::-;20651:92;;20752:93;20841:3;20752:93;:::i;:::-;20870:2;20865:3;20861:12;20854:19;;20477:402;;;:::o;20885:366::-;21027:3;21048:67;21112:2;21107:3;21048:67;:::i;:::-;21041:74;;21124:93;21213:3;21124:93;:::i;:::-;21242:2;21237:3;21233:12;21226:19;;20885:366;;;:::o;21257:::-;21399:3;21420:67;21484:2;21479:3;21420:67;:::i;:::-;21413:74;;21496:93;21585:3;21496:93;:::i;:::-;21614:2;21609:3;21605:12;21598:19;;21257:366;;;:::o;21629:108::-;21706:24;21724:5;21706:24;:::i;:::-;21701:3;21694:37;21629:108;;:::o;21743:118::-;21830:24;21848:5;21830:24;:::i;:::-;21825:3;21818:37;21743:118;;:::o;21867:157::-;21972:45;21992:24;22010:5;21992:24;:::i;:::-;21972:45;:::i;:::-;21967:3;21960:58;21867:157;;:::o;22030:595::-;22258:3;22280:95;22371:3;22362:6;22280:95;:::i;:::-;22273:102;;22392:95;22483:3;22474:6;22392:95;:::i;:::-;22385:102;;22504:95;22595:3;22586:6;22504:95;:::i;:::-;22497:102;;22616:3;22609:10;;22030:595;;;;;;:::o;22631:1877::-;23244:3;23266:95;23357:3;23348:6;23266:95;:::i;:::-;23259:102;;23378:95;23469:3;23460:6;23378:95;:::i;:::-;23371:102;;23490:95;23581:3;23572:6;23490:95;:::i;:::-;23483:102;;23602:95;23693:3;23684:6;23602:95;:::i;:::-;23595:102;;23714:95;23805:3;23796:6;23714:95;:::i;:::-;23707:102;;23826:95;23917:3;23908:6;23826:95;:::i;:::-;23819:102;;23938:95;24029:3;24020:6;23938:95;:::i;:::-;23931:102;;24050:95;24141:3;24132:6;24050:95;:::i;:::-;24043:102;;24162:95;24253:3;24244:6;24162:95;:::i;:::-;24155:102;;24274:95;24365:3;24356:6;24274:95;:::i;:::-;24267:102;;24386:96;24478:3;24468:7;24386:96;:::i;:::-;24379:103;;24499:3;24492:10;;22631:1877;;;;;;;;;;;;;;:::o;24514:269::-;24643:3;24665:92;24753:3;24744:6;24665:92;:::i;:::-;24658:99;;24774:3;24767:10;;24514:269;;;;:::o;24789:689::-;25064:3;25086:92;25174:3;25165:6;25086:92;:::i;:::-;25079:99;;25195:148;25339:3;25195:148;:::i;:::-;25188:155;;25360:92;25448:3;25439:6;25360:92;:::i;:::-;25353:99;;25469:3;25462:10;;24789:689;;;;;:::o;25484:807::-;25818:3;25840:148;25984:3;25840:148;:::i;:::-;25833:155;;26005:148;26149:3;26005:148;:::i;:::-;25998:155;;26170:95;26261:3;26252:6;26170:95;:::i;:::-;26163:102;;26282:3;26275:10;;25484:807;;;;:::o;26297:::-;26631:3;26653:148;26797:3;26653:148;:::i;:::-;26646:155;;26818:148;26962:3;26818:148;:::i;:::-;26811:155;;26983:95;27074:3;27065:6;26983:95;:::i;:::-;26976:102;;27095:3;27088:10;;26297:807;;;;:::o;27110:::-;27444:3;27466:148;27610:3;27466:148;:::i;:::-;27459:155;;27631:148;27775:3;27631:148;:::i;:::-;27624:155;;27796:95;27887:3;27878:6;27796:95;:::i;:::-;27789:102;;27908:3;27901:10;;27110:807;;;;:::o;27923:::-;28257:3;28279:148;28423:3;28279:148;:::i;:::-;28272:155;;28444:148;28588:3;28444:148;:::i;:::-;28437:155;;28609:95;28700:3;28691:6;28609:95;:::i;:::-;28602:102;;28721:3;28714:10;;27923:807;;;;:::o;28736:1233::-;29219:3;29241:148;29385:3;29241:148;:::i;:::-;29234:155;;29406:95;29497:3;29488:6;29406:95;:::i;:::-;29399:102;;29518:148;29662:3;29518:148;:::i;:::-;29511:155;;29683:95;29774:3;29765:6;29683:95;:::i;:::-;29676:102;;29795:148;29939:3;29795:148;:::i;:::-;29788:155;;29960:3;29953:10;;28736:1233;;;;;:::o;29975:807::-;30309:3;30331:148;30475:3;30331:148;:::i;:::-;30324:155;;30496:148;30640:3;30496:148;:::i;:::-;30489:155;;30661:95;30752:3;30743:6;30661:95;:::i;:::-;30654:102;;30773:3;30766:10;;29975:807;;;;:::o;30788:::-;31122:3;31144:148;31288:3;31144:148;:::i;:::-;31137:155;;31309:148;31453:3;31309:148;:::i;:::-;31302:155;;31474:95;31565:3;31556:6;31474:95;:::i;:::-;31467:102;;31586:3;31579:10;;30788:807;;;;:::o;31601:541::-;31834:3;31856:148;32000:3;31856:148;:::i;:::-;31849:155;;32021:95;32112:3;32103:6;32021:95;:::i;:::-;32014:102;;32133:3;32126:10;;31601:541;;;;:::o;32148:807::-;32482:3;32504:148;32648:3;32504:148;:::i;:::-;32497:155;;32669:148;32813:3;32669:148;:::i;:::-;32662:155;;32834:95;32925:3;32916:6;32834:95;:::i;:::-;32827:102;;32946:3;32939:10;;32148:807;;;;:::o;32961:379::-;33145:3;33167:147;33310:3;33167:147;:::i;:::-;33160:154;;33331:3;33324:10;;32961:379;;;:::o;33346:807::-;33680:3;33702:148;33846:3;33702:148;:::i;:::-;33695:155;;33867:148;34011:3;33867:148;:::i;:::-;33860:155;;34032:95;34123:3;34114:6;34032:95;:::i;:::-;34025:102;;34144:3;34137:10;;33346:807;;;;:::o;34159:::-;34493:3;34515:148;34659:3;34515:148;:::i;:::-;34508:155;;34680:148;34824:3;34680:148;:::i;:::-;34673:155;;34845:95;34936:3;34927:6;34845:95;:::i;:::-;34838:102;;34957:3;34950:10;;34159:807;;;;:::o;34972:256::-;35084:3;35099:75;35170:3;35161:6;35099:75;:::i;:::-;35199:2;35194:3;35190:12;35183:19;;35219:3;35212:10;;34972:256;;;;:::o;35234:397::-;35374:3;35389:75;35460:3;35451:6;35389:75;:::i;:::-;35489:2;35484:3;35480:12;35473:19;;35502:75;35573:3;35564:6;35502:75;:::i;:::-;35602:2;35597:3;35593:12;35586:19;;35622:3;35615:10;;35234:397;;;;;:::o;35637:222::-;35730:4;35768:2;35757:9;35753:18;35745:26;;35781:71;35849:1;35838:9;35834:17;35825:6;35781:71;:::i;:::-;35637:222;;;;:::o;35865:254::-;35974:4;36012:2;36001:9;35997:18;35989:26;;36025:87;36109:1;36098:9;36094:17;36085:6;36025:87;:::i;:::-;35865:254;;;;:::o;36125:640::-;36320:4;36358:3;36347:9;36343:19;36335:27;;36372:71;36440:1;36429:9;36425:17;36416:6;36372:71;:::i;:::-;36453:72;36521:2;36510:9;36506:18;36497:6;36453:72;:::i;:::-;36535;36603:2;36592:9;36588:18;36579:6;36535:72;:::i;:::-;36654:9;36648:4;36644:20;36639:2;36628:9;36624:18;36617:48;36682:76;36753:4;36744:6;36682:76;:::i;:::-;36674:84;;36125:640;;;;;;;:::o;36771:373::-;36914:4;36952:2;36941:9;36937:18;36929:26;;37001:9;36995:4;36991:20;36987:1;36976:9;36972:17;36965:47;37029:108;37132:4;37123:6;37029:108;:::i;:::-;37021:116;;36771:373;;;;:::o;37150:210::-;37237:4;37275:2;37264:9;37260:18;37252:26;;37288:65;37350:1;37339:9;37335:17;37326:6;37288:65;:::i;:::-;37150:210;;;;:::o;37366:313::-;37479:4;37517:2;37506:9;37502:18;37494:26;;37566:9;37560:4;37556:20;37552:1;37541:9;37537:17;37530:47;37594:78;37667:4;37658:6;37594:78;:::i;:::-;37586:86;;37366:313;;;;:::o;37685:419::-;37851:4;37889:2;37878:9;37874:18;37866:26;;37938:9;37932:4;37928:20;37924:1;37913:9;37909:17;37902:47;37966:131;38092:4;37966:131;:::i;:::-;37958:139;;37685:419;;;:::o;38110:::-;38276:4;38314:2;38303:9;38299:18;38291:26;;38363:9;38357:4;38353:20;38349:1;38338:9;38334:17;38327:47;38391:131;38517:4;38391:131;:::i;:::-;38383:139;;38110:419;;;:::o;38535:::-;38701:4;38739:2;38728:9;38724:18;38716:26;;38788:9;38782:4;38778:20;38774:1;38763:9;38759:17;38752:47;38816:131;38942:4;38816:131;:::i;:::-;38808:139;;38535:419;;;:::o;38960:::-;39126:4;39164:2;39153:9;39149:18;39141:26;;39213:9;39207:4;39203:20;39199:1;39188:9;39184:17;39177:47;39241:131;39367:4;39241:131;:::i;:::-;39233:139;;38960:419;;;:::o;39385:::-;39551:4;39589:2;39578:9;39574:18;39566:26;;39638:9;39632:4;39628:20;39624:1;39613:9;39609:17;39602:47;39666:131;39792:4;39666:131;:::i;:::-;39658:139;;39385:419;;;:::o;39810:::-;39976:4;40014:2;40003:9;39999:18;39991:26;;40063:9;40057:4;40053:20;40049:1;40038:9;40034:17;40027:47;40091:131;40217:4;40091:131;:::i;:::-;40083:139;;39810:419;;;:::o;40235:::-;40401:4;40439:2;40428:9;40424:18;40416:26;;40488:9;40482:4;40478:20;40474:1;40463:9;40459:17;40452:47;40516:131;40642:4;40516:131;:::i;:::-;40508:139;;40235:419;;;:::o;40660:::-;40826:4;40864:2;40853:9;40849:18;40841:26;;40913:9;40907:4;40903:20;40899:1;40888:9;40884:17;40877:47;40941:131;41067:4;40941:131;:::i;:::-;40933:139;;40660:419;;;:::o;41085:::-;41251:4;41289:2;41278:9;41274:18;41266:26;;41338:9;41332:4;41328:20;41324:1;41313:9;41309:17;41302:47;41366:131;41492:4;41366:131;:::i;:::-;41358:139;;41085:419;;;:::o;41510:::-;41676:4;41714:2;41703:9;41699:18;41691:26;;41763:9;41757:4;41753:20;41749:1;41738:9;41734:17;41727:47;41791:131;41917:4;41791:131;:::i;:::-;41783:139;;41510:419;;;:::o;41935:::-;42101:4;42139:2;42128:9;42124:18;42116:26;;42188:9;42182:4;42178:20;42174:1;42163:9;42159:17;42152:47;42216:131;42342:4;42216:131;:::i;:::-;42208:139;;41935:419;;;:::o;42360:::-;42526:4;42564:2;42553:9;42549:18;42541:26;;42613:9;42607:4;42603:20;42599:1;42588:9;42584:17;42577:47;42641:131;42767:4;42641:131;:::i;:::-;42633:139;;42360:419;;;:::o;42785:::-;42951:4;42989:2;42978:9;42974:18;42966:26;;43038:9;43032:4;43028:20;43024:1;43013:9;43009:17;43002:47;43066:131;43192:4;43066:131;:::i;:::-;43058:139;;42785:419;;;:::o;43210:::-;43376:4;43414:2;43403:9;43399:18;43391:26;;43463:9;43457:4;43453:20;43449:1;43438:9;43434:17;43427:47;43491:131;43617:4;43491:131;:::i;:::-;43483:139;;43210:419;;;:::o;43635:::-;43801:4;43839:2;43828:9;43824:18;43816:26;;43888:9;43882:4;43878:20;43874:1;43863:9;43859:17;43852:47;43916:131;44042:4;43916:131;:::i;:::-;43908:139;;43635:419;;;:::o;44060:::-;44226:4;44264:2;44253:9;44249:18;44241:26;;44313:9;44307:4;44303:20;44299:1;44288:9;44284:17;44277:47;44341:131;44467:4;44341:131;:::i;:::-;44333:139;;44060:419;;;:::o;44485:::-;44651:4;44689:2;44678:9;44674:18;44666:26;;44738:9;44732:4;44728:20;44724:1;44713:9;44709:17;44702:47;44766:131;44892:4;44766:131;:::i;:::-;44758:139;;44485:419;;;:::o;44910:222::-;45003:4;45041:2;45030:9;45026:18;45018:26;;45054:71;45122:1;45111:9;45107:17;45098:6;45054:71;:::i;:::-;44910:222;;;;:::o;45138:129::-;45172:6;45199:20;;:::i;:::-;45189:30;;45228:33;45256:4;45248:6;45228:33;:::i;:::-;45138:129;;;:::o;45273:75::-;45306:6;45339:2;45333:9;45323:19;;45273:75;:::o;45354:307::-;45415:4;45505:18;45497:6;45494:30;45491:56;;;45527:18;;:::i;:::-;45491:56;45565:29;45587:6;45565:29;:::i;:::-;45557:37;;45649:4;45643;45639:15;45631:23;;45354:307;;;:::o;45667:132::-;45734:4;45757:3;45749:11;;45787:4;45782:3;45778:14;45770:22;;45667:132;;;:::o;45805:141::-;45854:4;45877:3;45869:11;;45900:3;45897:1;45890:14;45934:4;45931:1;45921:18;45913:26;;45805:141;;;:::o;45952:114::-;46019:6;46053:5;46047:12;46037:22;;45952:114;;;:::o;46072:98::-;46123:6;46157:5;46151:12;46141:22;;46072:98;;;:::o;46176:99::-;46228:6;46262:5;46256:12;46246:22;;46176:99;;;:::o;46281:113::-;46351:4;46383;46378:3;46374:14;46366:22;;46281:113;;;:::o;46400:184::-;46499:11;46533:6;46528:3;46521:19;46573:4;46568:3;46564:14;46549:29;;46400:184;;;;:::o;46590:168::-;46673:11;46707:6;46702:3;46695:19;46747:4;46742:3;46738:14;46723:29;;46590:168;;;;:::o;46764:147::-;46865:11;46902:3;46887:18;;46764:147;;;;:::o;46917:169::-;47001:11;47035:6;47030:3;47023:19;47075:4;47070:3;47066:14;47051:29;;46917:169;;;;:::o;47092:148::-;47194:11;47231:3;47216:18;;47092:148;;;;:::o;47246:305::-;47286:3;47305:20;47323:1;47305:20;:::i;:::-;47300:25;;47339:20;47357:1;47339:20;:::i;:::-;47334:25;;47493:1;47425:66;47421:74;47418:1;47415:81;47412:107;;;47499:18;;:::i;:::-;47412:107;47543:1;47540;47536:9;47529:16;;47246:305;;;;:::o;47557:185::-;47597:1;47614:20;47632:1;47614:20;:::i;:::-;47609:25;;47648:20;47666:1;47648:20;:::i;:::-;47643:25;;47687:1;47677:35;;47692:18;;:::i;:::-;47677:35;47734:1;47731;47727:9;47722:14;;47557:185;;;;:::o;47748:348::-;47788:7;47811:20;47829:1;47811:20;:::i;:::-;47806:25;;47845:20;47863:1;47845:20;:::i;:::-;47840:25;;48033:1;47965:66;47961:74;47958:1;47955:81;47950:1;47943:9;47936:17;47932:105;47929:131;;;48040:18;;:::i;:::-;47929:131;48088:1;48085;48081:9;48070:20;;47748:348;;;;:::o;48102:191::-;48142:4;48162:20;48180:1;48162:20;:::i;:::-;48157:25;;48196:20;48214:1;48196:20;:::i;:::-;48191:25;;48235:1;48232;48229:8;48226:34;;;48240:18;;:::i;:::-;48226:34;48285:1;48282;48278:9;48270:17;;48102:191;;;;:::o;48299:96::-;48336:7;48365:24;48383:5;48365:24;:::i;:::-;48354:35;;48299:96;;;:::o;48401:104::-;48446:7;48475:24;48493:5;48475:24;:::i;:::-;48464:35;;48401:104;;;:::o;48511:90::-;48545:7;48588:5;48581:13;48574:21;48563:32;;48511:90;;;:::o;48607:149::-;48643:7;48683:66;48676:5;48672:78;48661:89;;48607:149;;;:::o;48762:126::-;48799:7;48839:42;48832:5;48828:54;48817:65;;48762:126;;;:::o;48894:77::-;48931:7;48960:5;48949:16;;48894:77;;;:::o;48977:154::-;49061:6;49056:3;49051;49038:30;49123:1;49114:6;49109:3;49105:16;49098:27;48977:154;;;:::o;49137:307::-;49205:1;49215:113;49229:6;49226:1;49223:13;49215:113;;;49314:1;49309:3;49305:11;49299:18;49295:1;49290:3;49286:11;49279:39;49251:2;49248:1;49244:10;49239:15;;49215:113;;;49346:6;49343:1;49340:13;49337:101;;;49426:1;49417:6;49412:3;49408:16;49401:27;49337:101;49186:258;49137:307;;;:::o;49450:320::-;49494:6;49531:1;49525:4;49521:12;49511:22;;49578:1;49572:4;49568:12;49599:18;49589:81;;49655:4;49647:6;49643:17;49633:27;;49589:81;49717:2;49709:6;49706:14;49686:18;49683:38;49680:84;;;49736:18;;:::i;:::-;49680:84;49501:269;49450:320;;;:::o;49776:281::-;49859:27;49881:4;49859:27;:::i;:::-;49851:6;49847:40;49989:6;49977:10;49974:22;49953:18;49941:10;49938:34;49935:62;49932:88;;;50000:18;;:::i;:::-;49932:88;50040:10;50036:2;50029:22;49819:238;49776:281;;:::o;50063:233::-;50102:3;50125:24;50143:5;50125:24;:::i;:::-;50116:33;;50171:66;50164:5;50161:77;50158:103;;;50241:18;;:::i;:::-;50158:103;50288:1;50281:5;50277:13;50270:20;;50063:233;;;:::o;50302:79::-;50341:7;50370:5;50359:16;;50302:79;;;:::o;50387:176::-;50419:1;50436:20;50454:1;50436:20;:::i;:::-;50431:25;;50470:20;50488:1;50470:20;:::i;:::-;50465:25;;50509:1;50499:35;;50514:18;;:::i;:::-;50499:35;50555:1;50552;50548:9;50543:14;;50387:176;;;;:::o;50569:180::-;50617:77;50614:1;50607:88;50714:4;50711:1;50704:15;50738:4;50735:1;50728:15;50755:180;50803:77;50800:1;50793:88;50900:4;50897:1;50890:15;50924:4;50921:1;50914:15;50941:180;50989:77;50986:1;50979:88;51086:4;51083:1;51076:15;51110:4;51107:1;51100:15;51127:180;51175:77;51172:1;51165:88;51272:4;51269:1;51262:15;51296:4;51293:1;51286:15;51313:180;51361:77;51358:1;51351:88;51458:4;51455:1;51448:15;51482:4;51479:1;51472:15;51499:117;51608:1;51605;51598:12;51622:117;51731:1;51728;51721:12;51745:117;51854:1;51851;51844:12;51868:117;51977:1;51974;51967:12;51991:102;52032:6;52083:2;52079:7;52074:2;52067:5;52063:14;52059:28;52049:38;;51991:102;;;:::o;52099:155::-;52239:7;52235:1;52227:6;52223:14;52216:31;52099:155;:::o;52260:237::-;52400:34;52396:1;52388:6;52384:14;52377:58;52469:20;52464:2;52456:6;52452:15;52445:45;52260:237;:::o;52503:178::-;52643:30;52639:1;52631:6;52627:14;52620:54;52503:178;:::o;52687:170::-;52827:22;52823:1;52815:6;52811:14;52804:46;52687:170;:::o;52863:223::-;53003:34;52999:1;52991:6;52987:14;52980:58;53072:6;53067:2;53059:6;53055:15;53048:31;52863:223;:::o;53092:175::-;53232:27;53228:1;53220:6;53216:14;53209:51;53092:175;:::o;53273:155::-;53413:7;53409:1;53401:6;53397:14;53390:31;53273:155;:::o;53434:231::-;53574:34;53570:1;53562:6;53558:14;53551:58;53643:14;53638:2;53630:6;53626:15;53619:39;53434:231;:::o;53671:171::-;53811:23;53807:1;53799:6;53795:14;53788:47;53671:171;:::o;53848:170::-;53988:22;53984:1;53976:6;53972:14;53965:46;53848:170;:::o;54024:151::-;54164:3;54160:1;54152:6;54148:14;54141:27;54024:151;:::o;54181:243::-;54321:34;54317:1;54309:6;54305:14;54298:58;54390:26;54385:2;54377:6;54373:15;54366:51;54181:243;:::o;54430:229::-;54570:34;54566:1;54558:6;54554:14;54547:58;54639:12;54634:2;54626:6;54622:15;54615:37;54430:229;:::o;54665:228::-;54805:34;54801:1;54793:6;54789:14;54782:58;54874:11;54869:2;54861:6;54857:15;54850:36;54665:228;:::o;54899:214::-;55039:66;55035:1;55027:6;55023:14;55016:90;54899:214;:::o;55119:::-;55259:66;55255:1;55247:6;55243:14;55236:90;55119:214;:::o;55339:182::-;55479:34;55475:1;55467:6;55463:14;55456:58;55339:182;:::o;55527:231::-;55667:34;55663:1;55655:6;55651:14;55644:58;55736:14;55731:2;55723:6;55719:15;55712:39;55527:231;:::o;55764:162::-;55904:14;55900:1;55892:6;55888:14;55881:38;55764:162;:::o;55932:166::-;56072:18;56068:1;56060:6;56056:14;56049:42;55932:166;:::o;56104:228::-;56244:34;56240:1;56232:6;56228:14;56221:58;56313:11;56308:2;56300:6;56296:15;56289:36;56104:228;:::o;56338:165::-;56478:17;56474:1;56466:6;56462:14;56455:41;56338:165;:::o;56509:220::-;56649:34;56645:1;56637:6;56633:14;56626:58;56718:3;56713:2;56705:6;56701:15;56694:28;56509:220;:::o;56735:179::-;56875:31;56871:1;56863:6;56859:14;56852:55;56735:179;:::o;56920:158::-;57060:10;57056:1;57048:6;57044:14;57037:34;56920:158;:::o;57084:1115::-;57224:66;57220:1;57212:6;57208:14;57201:90;57325:34;57320:2;57312:6;57308:15;57301:59;57394:34;57389:2;57381:6;57377:15;57370:59;57463:34;57458:2;57450:6;57446:15;57439:59;57533:34;57527:3;57519:6;57515:16;57508:60;57603:34;57597:3;57589:6;57585:16;57578:60;57673:34;57667:3;57659:6;57655:16;57648:60;57743:34;57737:3;57729:6;57725:16;57718:60;57813:34;57807:3;57799:6;57795:16;57788:60;57883:34;57877:3;57869:6;57865:16;57858:60;57953:34;57947:3;57939:6;57935:16;57928:60;58023:66;58017:3;58009:6;58005:16;57998:92;58125:66;58119:3;58111:6;58107:16;58100:92;57084:1115;:::o;58205:114::-;;:::o;58325:153::-;58465:5;58461:1;58453:6;58449:14;58442:29;58325:153;:::o;58484:236::-;58624:34;58620:1;58612:6;58608:14;58601:58;58693:19;58688:2;58680:6;58676:15;58669:44;58484:236;:::o;58726:166::-;58866:18;58862:1;58854:6;58850:14;58843:42;58726:166;:::o;58898:167::-;59038:19;59034:1;59026:6;59022:14;59015:43;58898:167;:::o;59071:160::-;59211:12;59207:1;59199:6;59195:14;59188:36;59071:160;:::o;59237:122::-;59310:24;59328:5;59310:24;:::i;:::-;59303:5;59300:35;59290:63;;59349:1;59346;59339:12;59290:63;59237:122;:::o;59365:116::-;59435:21;59450:5;59435:21;:::i;:::-;59428:5;59425:32;59415:60;;59471:1;59468;59461:12;59415:60;59365:116;:::o;59487:120::-;59559:23;59576:5;59559:23;:::i;:::-;59552:5;59549:34;59539:62;;59597:1;59594;59587:12;59539:62;59487:120;:::o;59613:122::-;59686:24;59704:5;59686:24;:::i;:::-;59679:5;59676:35;59666:63;;59725:1;59722;59715:12;59666:63;59613:122;:::o
Swarm Source
ipfs://0040aabc23c35d878bf3092f29ea7251e90d0237e47cf4be85cf352831b91981
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.