Overview
TokenID
1341
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Nimrodz
Compiler Version
v0.8.14+commit.80d49f37
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-06-01 */ /* The Nimrodz NFT Minting Contract ERC721A */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.14; /** * @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); } } // Context.sol /** * @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; } } // Ownable.sol /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // Address.sol /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) private pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // IERC721Receiver.sol /** * @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); } // IERC165.sol /** * @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); } // ERC165.sol /** * @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; } } // IERC721.sol /** * @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; } // IERC721Enumerable.sol /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // IERC721Metadata.sol /** * @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); } // ERC721A.sol contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using Address for address; using Strings for uint256; struct TokenOwnership { address addr; uint64 startTimestamp; } struct AddressData { uint128 balance; uint128 numberMinted; } uint256 internal currentIndex; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details. mapping(uint256 => TokenOwnership) internal _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // 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; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view override returns (uint256) { return currentIndex; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view override returns (uint256) { require(index < totalSupply(), 'ERC721A: global index out of bounds'); return index; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. * This read function is O(totalSupply). If calling from a separate contract, be sure to test gas first. * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) { require(index < balanceOf(owner), 'ERC721A: owner index out of bounds'); uint256 numMintedSoFar = totalSupply(); uint256 tokenIdsIdx; address currOwnershipAddr; // Counter overflow is impossible as the loop breaks when uint256 i is equal to another uint256 numMintedSoFar. unchecked { for (uint256 i; i < numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } } revert('ERC721A: unable to get token of owner by index'); } /** * @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 || interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { require(owner != address(0), 'ERC721A: balance query for the zero address'); return uint256(_addressData[owner].balance); } function _numberMinted(address owner) internal view returns (uint256) { require(owner != address(0), 'ERC721A: number minted query for the zero address'); return uint256(_addressData[owner].numberMinted); } /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { require(_exists(tokenId), 'ERC721A: owner query for nonexistent token'); unchecked { for (uint256 curr = tokenId; curr >= 0; curr--) { TokenOwnership memory ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } } revert('ERC721A: unable to determine the owner of token'); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return ownershipOf(tokenId).addr; } /** * @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 override { address owner = ERC721A.ownerOf(tokenId); require(to != owner, 'ERC721A: approval to current owner'); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), 'ERC721A: approve caller is not owner nor approved for all' ); _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { require(_exists(tokenId), 'ERC721A: approved query for nonexistent token'); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { require(operator != _msgSender(), 'ERC721A: 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 override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public override { safeTransferFrom(from, to, tokenId, ''); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public override { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), 'ERC721A: 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`), */ function _exists(uint256 tokenId) internal view returns (bool) { return tokenId < currentIndex; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ''); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { _mint(to, quantity, _data, true); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _mint( address to, uint256 quantity, bytes memory _data, bool safe ) internal { uint256 startTokenId = currentIndex; require(to != address(0), 'ERC721A: mint to the zero address'); require(quantity != 0, 'ERC721A: quantity must be greater than 0'); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 3.4e38 (2**128) - 1 // updatedIndex overflows if currentIndex + quantity > 1.56e77 (2**256) - 1 unchecked { _addressData[to].balance += uint128(quantity); _addressData[to].numberMinted += uint128(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; for (uint256 i; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); if (safe) { require( _checkOnERC721Received(address(0), to, updatedIndex, _data), 'ERC721A: transfer to non ERC721Receiver implementer' ); } updatedIndex++; } currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * 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 ) private { TokenOwnership memory prevOwnership = ownershipOf(tokenId); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || getApproved(tokenId) == _msgSender() || isApprovedForAll(prevOwnership.addr, _msgSender())); require(isApprovedOrOwner, 'ERC721A: transfer caller is not owner nor approved'); require(prevOwnership.addr == from, 'ERC721A: transfer from incorrect owner'); require(to != address(0), 'ERC721A: transfer to the zero address'); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId].addr = to; _ownerships[tokenId].startTimestamp = uint64(block.timestamp); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { if (_exists(nextTokenId)) { _ownerships[nextTokenId].addr = prevOwnership.addr; _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert('ERC721A: transfer to non ERC721Receiver implementer'); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * 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`. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } // ReentrancyGuard.sol /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } contract Nimrodz is ERC721A, Ownable, ReentrancyGuard { uint256 MAX_MINTS = 6; uint256 MAX_SUPPLY = 10000; uint256 REMAINING_FREE_SUPPLY = 2000; uint256 REMAINING_SUPPLY = 10000; uint256 public NIMLIST_RESERVE = 500; uint256 REMAINING_NIMLIST_RESERVE = 500; uint256 public premMintRate = 0.03 ether; uint256 public mintRate = 0.03 ether; uint256 public nimlistedMintRate = 0; string public the_homeland; string public notRevealedUri = "ipfs://QmcHJyCzBwvkLY8G45Axph41EnTxj6uwWfRhH56g1f7Eev/hidden.json"; string public baseExtension = ".json"; bool public revealed = true; bool public mintOpen = false; bool public nimlistedMintOpen = false; bool public leftover_reserves_minted = false; bool private stupidnimrod = true; mapping (address => bool) private nimlisted_friends; mapping (address => bool) private already_freeminted; mapping (address => bool) private nim_best_friends; mapping (address => uint256) private nims_allocated; constructor() ERC721A("Nimrodz", "NIMS") {} function nimcost(uint256 quantity) public view returns (uint256) { uint256 freemints_in_tx = 0; if(REMAINING_FREE_SUPPLY > 0 && !already_freeminted[msg.sender]) { if(quantity == 1) { freemints_in_tx = 1; } else if (quantity >= 2 && REMAINING_FREE_SUPPLY > 1) { freemints_in_tx = 2; } else if (quantity >= 2 && REMAINING_FREE_SUPPLY == 1) { freemints_in_tx = 1; } } return ((quantity - freemints_in_tx) * mintRate); } function withdraw() external payable onlyOwner { payable(owner()).transfer(address(this).balance); } function _baseURI() internal view override returns (string memory) { return the_homeland; } function _notRevealedURI() public view returns (string memory) { return notRevealedUri; } function nimrodzhomeland(string memory homeland) public onlyOwner { the_homeland = homeland; } function amianimfriend() public view returns (bool) { return nimlisted_friends[msg.sender]; } function hinimfriends(address[] calldata friends) public onlyOwner { for(uint256 i=0; i<friends.length; i++) { nimlisted_friends[friends[i]] = true; } } function nimbestfriend(address[] calldata bestfriends) public onlyOwner { for(uint256 i=0; i<bestfriends.length; i++) { nim_best_friends[bestfriends[i]] = true; } } function missingnimfriends(uint256 missing_friends) public onlyOwner { NIMLIST_RESERVE = missing_friends; } function nimprice(uint256 nimrate) public onlyOwner { mintRate = nimrate; } function welcomenimrodz() public onlyOwner { mintOpen = !mintOpen; } function welcomenimfriends() public onlyOwner { nimlistedMintOpen = !nimlistedMintOpen; } function wowitsnimrodz() public onlyOwner { revealed = true; } function howmanymintnims() public view returns (uint256) { return (REMAINING_SUPPLY - NIMLIST_RESERVE); } function howmanynims() public view returns (uint256) { return REMAINING_SUPPLY; } function howmanyfreenims() public view returns (uint256) { return REMAINING_FREE_SUPPLY; } function howmanynimlist() public view returns (uint256) { return REMAINING_NIMLIST_RESERVE; } function mint_nimrodz(uint256 quantity) external payable { require(mintOpen && !nimlistedMintOpen, "Minting has not started yet"); require(((nims_allocated[msg.sender] + quantity) <= MAX_MINTS) || nim_best_friends[msg.sender], "Exceeded the limit per wallet"); require((totalSupply() + quantity) <= (MAX_SUPPLY - REMAINING_NIMLIST_RESERVE), "Not enough tokens left"); require(!stupidnimrod, "Lol, imagine thinking this would work...nim nim bot!"); uint256 etherRequired = (quantity * mintRate); require(msg.value >= etherRequired, "Not enough ether sent"); _safeMint(msg.sender, quantity); nims_allocated[msg.sender] += quantity; REMAINING_SUPPLY -= quantity; mintRate = premMintRate; } function nimrodzmagic(uint256 magic) external payable { require(mintOpen, "Minting has not started yet"); require(((nims_allocated[msg.sender] + magic) <= MAX_MINTS) || nim_best_friends[msg.sender], "Exceeded the limit per wallet"); require((totalSupply() + magic) <= (MAX_SUPPLY - REMAINING_NIMLIST_RESERVE), "Not enough tokens left"); uint256 freemints_in_tx = 0; if(REMAINING_FREE_SUPPLY > 0 && !already_freeminted[msg.sender]) { if(magic == 1) { freemints_in_tx += 1; REMAINING_FREE_SUPPLY -= 1; } else if (magic >= 2 && REMAINING_FREE_SUPPLY > 1) { freemints_in_tx += 2; REMAINING_FREE_SUPPLY -= 2; } else if (magic >= 2 && REMAINING_FREE_SUPPLY == 1) { freemints_in_tx += 1; REMAINING_FREE_SUPPLY = 0; } already_freeminted[msg.sender] = true; } uint256 etherRequired = ((magic - freemints_in_tx) * mintRate); require(msg.value >= etherRequired, "Not enough ether sent"); _safeMint(msg.sender, magic); nims_allocated[msg.sender] += magic; REMAINING_SUPPLY -= magic; mintRate = premMintRate; } function nimfriendsmagic() external payable { require(nimlistedMintOpen, "Nimlisted minting has not started yet"); require(nimlisted_friends[msg.sender] && REMAINING_NIMLIST_RESERVE > 0, "Not enough tokens left"); uint256 etherRequired = nimlistedMintRate; require(msg.value >= etherRequired, "Not enough ether sent"); _safeMint(msg.sender, 1); REMAINING_NIMLIST_RESERVE -= 1; nimlisted_friends[msg.sender] = false; } function strandednimz() external payable onlyOwner { require(!leftover_reserves_minted, "Leftover reserves can only be called once and has already been called"); if(REMAINING_NIMLIST_RESERVE > REMAINING_SUPPLY) { REMAINING_NIMLIST_RESERVE = REMAINING_SUPPLY; } mintRate = 0; leftover_reserves_minted = true; _safeMint(msg.sender, REMAINING_NIMLIST_RESERVE); mintRate = premMintRate; REMAINING_SUPPLY -= REMAINING_NIMLIST_RESERVE; REMAINING_NIMLIST_RESERVE = 0; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721AMetadata: URI query for nonexistent token" ); if(revealed == false) { return notRevealedUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, Strings.toString(tokenId), baseExtension)) : notRevealedUri; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"NIMLIST_RESERVE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_notRevealedURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"amianimfriend","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"address[]","name":"friends","type":"address[]"}],"name":"hinimfriends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"howmanyfreenims","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"howmanymintnims","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"howmanynimlist","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"howmanynims","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":[],"name":"leftover_reserves_minted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint_nimrodz","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"missing_friends","type":"uint256"}],"name":"missingnimfriends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"bestfriends","type":"address[]"}],"name":"nimbestfriend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"nimcost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nimfriendsmagic","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"nimlistedMintOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nimlistedMintRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"nimrate","type":"uint256"}],"name":"nimprice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"homeland","type":"string"}],"name":"nimrodzhomeland","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"magic","type":"uint256"}],"name":"nimrodzmagic","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"premMintRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"strandednimz","outputs":[],"stateMutability":"payable","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":[],"name":"the_homeland","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"welcomenimfriends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"welcomenimrodz","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"wowitsnimrodz","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526006600955612710600a556107d0600b55612710600c556101f4600d556101f4600e55666a94d74f430000600f55666a94d74f430000601055600060115560405180608001604052806041815260200162005bbb604191396013908051906020019062000073929190620002f3565b506040518060400160405280600581526020017f2e6a736f6e00000000000000000000000000000000000000000000000000000081525060149080519060200190620000c1929190620002f3565b506001601560006101000a81548160ff0219169083151502179055506000601560016101000a81548160ff0219169083151502179055506000601560026101000a81548160ff0219169083151502179055506000601560036101000a81548160ff0219169083151502179055506001601560046101000a81548160ff0219169083151502179055503480156200015657600080fd5b506040518060400160405280600781526020017f4e696d726f647a000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4e494d53000000000000000000000000000000000000000000000000000000008152508160019080519060200190620001db929190620002f3565b508060029080519060200190620001f4929190620002f3565b505050620002176200020b6200022560201b60201c565b6200022d60201b60201c565b600160088190555062000407565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200030190620003d2565b90600052602060002090601f01602090048101928262000325576000855562000371565b82601f106200034057805160ff191683800117855562000371565b8280016001018555821562000371579182015b828111156200037057825182559160200191906001019062000353565b5b50905062000380919062000384565b5090565b5b808211156200039f57600081600090555060010162000385565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620003eb57607f821691505b602082108103620004015762000400620003a3565b5b50919050565b6157a480620004176000396000f3fe6080604052600436106102c95760003560e01c80637e9984be11610175578063b5b1150d116100dc578063cb74068811610095578063e985e9c51161006f578063e985e9c514610a47578063ebe9d85014610a84578063f2fde38b14610aaf578063fb59a1e814610ad8576102c9565b8063cb740688146109d7578063dbc36b3d146109f3578063e8feb78314610a1c576102c9565b8063b5b1150d146108c7578063b88d4fde146108f2578063bf1d1d011461091b578063c668286214610944578063c87b56dd1461096f578063ca0dcf16146109ac576102c9565b80639c086c301161012e5780639c086c30146107f7578063a22cb46514610822578063a99f257f1461084b578063a9f0750714610867578063b41b4e5814610892578063b5182bb8146108bd576102c9565b80637e9984be146107185780637facdd7114610755578063831e62a01461076c578063886e16f3146107975780638da5cb5b146107a157806395d89b41146107cc576102c9565b80633ccfd60b1161023457806353e365f7116101ed57806368270d77116101c757806368270d771461067057806370a082311461069b578063715018a6146106d857806378d0eeb3146106ef576102c9565b806353e365f7146105dd5780635400b6cb146106085780636352211e14610633576102c9565b80633ccfd60b146104ee57806342842e0e146104f8578063443bdb5b1461052157806346eb4c9a1461054a5780634f6ccce71461057557806351830227146105b2576102c9565b806318160ddd1161028657806318160ddd146103f05780631d74ae971461041b57806323b872dd1461044657806324bbd0491461046f57806328afe4a11461049a5780632f745c59146104b1576102c9565b806301ffc9a7146102ce578063048faf3e1461030b57806306fdde0314610334578063081812fc1461035f578063081c8c441461039c578063095ea7b3146103c7575b600080fd5b3480156102da57600080fd5b506102f560048036038101906102f09190613e0b565b610aef565b6040516103029190613e53565b60405180910390f35b34801561031757600080fd5b50610332600480360381019061032d9190613ea4565b610c39565b005b34801561034057600080fd5b50610349610cbf565b6040516103569190613f6a565b60405180910390f35b34801561036b57600080fd5b5061038660048036038101906103819190613ea4565b610d51565b6040516103939190613fcd565b60405180910390f35b3480156103a857600080fd5b506103b1610dd6565b6040516103be9190613f6a565b60405180910390f35b3480156103d357600080fd5b506103ee60048036038101906103e99190614014565b610e64565b005b3480156103fc57600080fd5b50610405610f7c565b6040516104129190614063565b60405180910390f35b34801561042757600080fd5b50610430610f85565b60405161043d9190613f6a565b60405180910390f35b34801561045257600080fd5b5061046d6004803603810190610468919061407e565b611013565b005b34801561047b57600080fd5b50610484611023565b6040516104919190613e53565b60405180910390f35b3480156104a657600080fd5b506104af611036565b005b3480156104bd57600080fd5b506104d860048036038101906104d39190614014565b6110de565b6040516104e59190614063565b60405180910390f35b6104f66112ce565b005b34801561050457600080fd5b5061051f600480360381019061051a919061407e565b61139a565b005b34801561052d57600080fd5b5061054860048036038101906105439190614136565b6113ba565b005b34801561055657600080fd5b5061055f6114db565b60405161056c9190613f6a565b60405180910390f35b34801561058157600080fd5b5061059c60048036038101906105979190613ea4565b61156d565b6040516105a99190614063565b60405180910390f35b3480156105be57600080fd5b506105c76115c0565b6040516105d49190613e53565b60405180910390f35b3480156105e957600080fd5b506105f26115d3565b6040516105ff9190613e53565b60405180910390f35b34801561061457600080fd5b5061061d611627565b60405161062a9190613e53565b60405180910390f35b34801561063f57600080fd5b5061065a60048036038101906106559190613ea4565b61163a565b6040516106679190613fcd565b60405180910390f35b34801561067c57600080fd5b50610685611650565b6040516106929190614063565b60405180910390f35b3480156106a757600080fd5b506106c260048036038101906106bd9190614183565b611667565b6040516106cf9190614063565b60405180910390f35b3480156106e457600080fd5b506106ed61174f565b005b3480156106fb57600080fd5b5061071660048036038101906107119190614136565b6117d7565b005b34801561072457600080fd5b5061073f600480360381019061073a9190613ea4565b6118f8565b60405161074c9190614063565b60405180910390f35b34801561076157600080fd5b5061076a6119d3565b005b34801561077857600080fd5b50610781611a7b565b60405161078e9190614063565b60405180910390f35b61079f611a85565b005b3480156107ad57600080fd5b506107b6611c38565b6040516107c39190613fcd565b60405180910390f35b3480156107d857600080fd5b506107e1611c62565b6040516107ee9190613f6a565b60405180910390f35b34801561080357600080fd5b5061080c611cf4565b6040516108199190614063565b60405180910390f35b34801561082e57600080fd5b50610849600480360381019061084491906141dc565b611cfe565b005b61086560048036038101906108609190613ea4565b611e7e565b005b34801561087357600080fd5b5061087c612264565b6040516108899190613e53565b60405180910390f35b34801561089e57600080fd5b506108a7612277565b6040516108b49190614063565b60405180910390f35b6108c561227d565b005b3480156108d357600080fd5b506108dc6123bc565b6040516108e99190614063565b60405180910390f35b3480156108fe57600080fd5b506109196004803603810190610914919061434c565b6123c2565b005b34801561092757600080fd5b50610942600480360381019061093d9190614470565b61241e565b005b34801561095057600080fd5b506109596124b4565b6040516109669190613f6a565b60405180910390f35b34801561097b57600080fd5b5061099660048036038101906109919190613ea4565b612542565b6040516109a39190613f6a565b60405180910390f35b3480156109b857600080fd5b506109c1612715565b6040516109ce9190614063565b60405180910390f35b6109f160048036038101906109ec9190613ea4565b61271b565b005b3480156109ff57600080fd5b50610a1a6004803603810190610a159190613ea4565b6129f5565b005b348015610a2857600080fd5b50610a31612a7b565b604051610a3e9190614063565b60405180910390f35b348015610a5357600080fd5b50610a6e6004803603810190610a6991906144b9565b612a85565b604051610a7b9190613e53565b60405180910390f35b348015610a9057600080fd5b50610a99612b19565b604051610aa69190614063565b60405180910390f35b348015610abb57600080fd5b50610ad66004803603810190610ad19190614183565b612b1f565b005b348015610ae457600080fd5b50610aed612c16565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610bba57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c2257507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c325750610c3182612caf565b5b9050919050565b610c41612d19565b73ffffffffffffffffffffffffffffffffffffffff16610c5f611c38565b73ffffffffffffffffffffffffffffffffffffffff1614610cb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cac90614545565b60405180910390fd5b8060108190555050565b606060018054610cce90614594565b80601f0160208091040260200160405190810160405280929190818152602001828054610cfa90614594565b8015610d475780601f10610d1c57610100808354040283529160200191610d47565b820191906000526020600020905b815481529060010190602001808311610d2a57829003601f168201915b5050505050905090565b6000610d5c82612d21565b610d9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9290614637565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60138054610de390614594565b80601f0160208091040260200160405190810160405280929190818152602001828054610e0f90614594565b8015610e5c5780601f10610e3157610100808354040283529160200191610e5c565b820191906000526020600020905b815481529060010190602001808311610e3f57829003601f168201915b505050505081565b6000610e6f8261163a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610edf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed6906146c9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610efe612d19565b73ffffffffffffffffffffffffffffffffffffffff161480610f2d5750610f2c81610f27612d19565b612a85565b5b610f6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f639061475b565b60405180910390fd5b610f77838383612d2e565b505050565b60008054905090565b60128054610f9290614594565b80601f0160208091040260200160405190810160405280929190818152602001828054610fbe90614594565b801561100b5780601f10610fe05761010080835404028352916020019161100b565b820191906000526020600020905b815481529060010190602001808311610fee57829003601f168201915b505050505081565b61101e838383612de0565b505050565b601560019054906101000a900460ff1681565b61103e612d19565b73ffffffffffffffffffffffffffffffffffffffff1661105c611c38565b73ffffffffffffffffffffffffffffffffffffffff16146110b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a990614545565b60405180910390fd5b601560019054906101000a900460ff1615601560016101000a81548160ff021916908315150217905550565b60006110e983611667565b821061112a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611121906147ed565b60405180910390fd5b6000611134610f7c565b905060008060005b8381101561128c576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461122e57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361127e578684036112755781955050505050506112c8565b83806001019450505b50808060010191505061113c565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bf9061487f565b60405180910390fd5b92915050565b6112d6612d19565b73ffffffffffffffffffffffffffffffffffffffff166112f4611c38565b73ffffffffffffffffffffffffffffffffffffffff161461134a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134190614545565b60405180910390fd5b611352611c38565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611397573d6000803e3d6000fd5b50565b6113b5838383604051806020016040528060008152506123c2565b505050565b6113c2612d19565b73ffffffffffffffffffffffffffffffffffffffff166113e0611c38565b73ffffffffffffffffffffffffffffffffffffffff1614611436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142d90614545565b60405180910390fd5b60005b828290508110156114d65760016016600085858581811061145d5761145c61489f565b5b90506020020160208101906114729190614183565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806114ce906148fd565b915050611439565b505050565b6060601380546114ea90614594565b80601f016020809104026020016040519081016040528092919081815260200182805461151690614594565b80156115635780601f1061153857610100808354040283529160200191611563565b820191906000526020600020905b81548152906001019060200180831161154657829003601f168201915b5050505050905090565b6000611577610f7c565b82106115b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115af906149b7565b60405180910390fd5b819050919050565b601560009054906101000a900460ff1681565b6000601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905090565b601560029054906101000a900460ff1681565b60006116458261331e565b600001519050919050565b6000600d54600c5461166291906149d7565b905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ce90614a7d565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611757612d19565b73ffffffffffffffffffffffffffffffffffffffff16611775611c38565b73ffffffffffffffffffffffffffffffffffffffff16146117cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c290614545565b60405180910390fd5b6117d560006134b8565b565b6117df612d19565b73ffffffffffffffffffffffffffffffffffffffff166117fd611c38565b73ffffffffffffffffffffffffffffffffffffffff1614611853576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184a90614545565b60405180910390fd5b60005b828290508110156118f35760016018600085858581811061187a5761187961489f565b5b905060200201602081019061188f9190614183565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806118eb906148fd565b915050611856565b505050565b600080600090506000600b5411801561195b5750601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156119b2576001830361197157600190506119b1565b6002831015801561198457506001600b54115b1561199257600290506119b0565b600283101580156119a557506001600b54145b156119af57600190505b5b5b5b60105481846119c191906149d7565b6119cb9190614a9d565b915050919050565b6119db612d19565b73ffffffffffffffffffffffffffffffffffffffff166119f9611c38565b73ffffffffffffffffffffffffffffffffffffffff1614611a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4690614545565b60405180910390fd5b601560029054906101000a900460ff1615601560026101000a81548160ff021916908315150217905550565b6000600e54905090565b601560029054906101000a900460ff16611ad4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acb90614b69565b60405180910390fd5b601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611b2f57506000600e54115b611b6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6590614bd5565b60405180910390fd5b6000601154905080341015611bb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611baf90614c41565b60405180910390fd5b611bc333600161357e565b6001600e6000828254611bd691906149d7565b925050819055506000601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054611c7190614594565b80601f0160208091040260200160405190810160405280929190818152602001828054611c9d90614594565b8015611cea5780601f10611cbf57610100808354040283529160200191611cea565b820191906000526020600020905b815481529060010190602001808311611ccd57829003601f168201915b5050505050905090565b6000600c54905090565b611d06612d19565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6a90614cad565b60405180910390fd5b8060066000611d80612d19565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611e2d612d19565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611e729190613e53565b60405180910390a35050565b601560019054906101000a900460ff16611ecd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec490614d19565b60405180910390fd5b60095481601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f1b9190614d39565b111580611f715750601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa790614ddb565b60405180910390fd5b600e54600a54611fc091906149d7565b81611fc9610f7c565b611fd39190614d39565b1115612014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200b90614bd5565b60405180910390fd5b600080600b541180156120715750601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561217d57600182036120ac5760018161208b9190614d39565b90506001600b60008282546120a091906149d7565b92505081905550612124565b600282101580156120bf57506001600b54115b156120f2576002816120d19190614d39565b90506002600b60008282546120e691906149d7565b92505081905550612123565b6002821015801561210557506001600b54145b15612122576001816121179190614d39565b90506000600b819055505b5b5b6001601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b6000601054828461218e91906149d7565b6121989190614a9d565b9050803410156121dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d490614c41565b60405180910390fd5b6121e7338461357e565b82601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122369190614d39565b9250508190555082600c600082825461224f91906149d7565b92505081905550600f54601081905550505050565b601560039054906101000a900460ff1681565b60115481565b612285612d19565b73ffffffffffffffffffffffffffffffffffffffff166122a3611c38565b73ffffffffffffffffffffffffffffffffffffffff16146122f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f090614545565b60405180910390fd5b601560039054906101000a900460ff1615612349576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234090614e93565b60405180910390fd5b600c54600e54111561235f57600c54600e819055505b60006010819055506001601560036101000a81548160ff02191690831515021790555061238e33600e5461357e565b600f54601081905550600e54600c60008282546123ab91906149d7565b925050819055506000600e81905550565b600f5481565b6123cd848484612de0565b6123d98484848461359c565b612418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240f90614f25565b60405180910390fd5b50505050565b612426612d19565b73ffffffffffffffffffffffffffffffffffffffff16612444611c38565b73ffffffffffffffffffffffffffffffffffffffff161461249a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249190614545565b60405180910390fd5b80601290805190602001906124b0929190613cc2565b5050565b601480546124c190614594565b80601f01602080910402602001604051908101604052809291908181526020018280546124ed90614594565b801561253a5780601f1061250f5761010080835404028352916020019161253a565b820191906000526020600020905b81548152906001019060200180831161251d57829003601f168201915b505050505081565b606061254d82612d21565b61258c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258390614fb7565b60405180910390fd5b60001515601560009054906101000a900460ff1615150361263957601380546125b490614594565b80601f01602080910402602001604051908101604052809291908181526020018280546125e090614594565b801561262d5780601f106126025761010080835404028352916020019161262d565b820191906000526020600020905b81548152906001019060200180831161261057829003601f168201915b50505050509050612710565b6000612643613723565b905060008151116126de576013805461265b90614594565b80601f016020809104026020016040519081016040528092919081815260200182805461268790614594565b80156126d45780601f106126a9576101008083540402835291602001916126d4565b820191906000526020600020905b8154815290600101906020018083116126b757829003601f168201915b505050505061270c565b806126e8846137b5565b60146040516020016126fc939291906150a7565b6040516020818303038152906040525b9150505b919050565b60105481565b601560019054906101000a900460ff1680156127445750601560029054906101000a900460ff16155b612783576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277a90614d19565b60405180910390fd5b60095481601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127d19190614d39565b1115806128275750601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285d90614ddb565b60405180910390fd5b600e54600a5461287691906149d7565b8161287f610f7c565b6128899190614d39565b11156128ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c190614bd5565b60405180910390fd5b601560049054906101000a900460ff161561291a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129119061514a565b60405180910390fd5b60006010548261292a9190614a9d565b90508034101561296f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296690614c41565b60405180910390fd5b612979338361357e565b81601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129c89190614d39565b9250508190555081600c60008282546129e191906149d7565b92505081905550600f546010819055505050565b6129fd612d19565b73ffffffffffffffffffffffffffffffffffffffff16612a1b611c38565b73ffffffffffffffffffffffffffffffffffffffff1614612a71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6890614545565b60405180910390fd5b80600d8190555050565b6000600b54905090565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600d5481565b612b27612d19565b73ffffffffffffffffffffffffffffffffffffffff16612b45611c38565b73ffffffffffffffffffffffffffffffffffffffff1614612b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9290614545565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612c0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c01906151dc565b60405180910390fd5b612c13816134b8565b50565b612c1e612d19565b73ffffffffffffffffffffffffffffffffffffffff16612c3c611c38565b73ffffffffffffffffffffffffffffffffffffffff1614612c92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8990614545565b60405180910390fd5b6001601560006101000a81548160ff021916908315150217905550565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6000805482109050919050565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000612deb8261331e565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612e12612d19565b73ffffffffffffffffffffffffffffffffffffffff161480612e6e5750612e37612d19565b73ffffffffffffffffffffffffffffffffffffffff16612e5684610d51565b73ffffffffffffffffffffffffffffffffffffffff16145b80612e8a5750612e898260000151612e84612d19565b612a85565b5b905080612ecc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ec39061526e565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612f3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3590615300565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa490615392565b60405180910390fd5b612fba8585856001613915565b612fca6000848460000151612d2e565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036132ae5761320d81612d21565b156132ad5782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613317858585600161391b565b5050505050565b613326613d48565b61332f82612d21565b61336e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161336590615424565b60405180910390fd5b60008290505b60008110613477576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146134685780925050506134b3565b50808060019003915050613374565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134aa906154b6565b60405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b613598828260405180602001604052806000815250613921565b5050565b60006135bd8473ffffffffffffffffffffffffffffffffffffffff16613933565b15613716578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026135e6612d19565b8786866040518563ffffffff1660e01b8152600401613608949392919061552b565b6020604051808303816000875af192505050801561364457506040513d601f19601f82011682018060405250810190613641919061558c565b60015b6136c6573d8060008114613674576040519150601f19603f3d011682016040523d82523d6000602084013e613679565b606091505b5060008151036136be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136b590614f25565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061371b565b600190505b949350505050565b60606012805461373290614594565b80601f016020809104026020016040519081016040528092919081815260200182805461375e90614594565b80156137ab5780601f10613780576101008083540402835291602001916137ab565b820191906000526020600020905b81548152906001019060200180831161378e57829003601f168201915b5050505050905090565b6060600082036137fc576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613910565b600082905060005b6000821461382e578080613817906148fd565b915050600a8261382791906155e8565b9150613804565b60008167ffffffffffffffff81111561384a57613849614221565b5b6040519080825280601f01601f19166020018201604052801561387c5781602001600182028036833780820191505090505b5090505b600085146139095760018261389591906149d7565b9150600a856138a49190615619565b60306138b09190614d39565b60f81b8183815181106138c6576138c561489f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561390291906155e8565b9450613880565b8093505050505b919050565b50505050565b50505050565b61392e8383836001613946565b505050565b600080823b905060008111915050919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036139bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139b2906156bc565b60405180910390fd5b600084036139fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139f59061574e565b60405180910390fd5b613a0b6000868387613915565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b85811015613ca557818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48315613c9057613c50600088848861359c565b613c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c8690614f25565b60405180910390fd5b5b81806001019250508080600101915050613bd9565b508060008190555050613cbb600086838761391b565b5050505050565b828054613cce90614594565b90600052602060002090601f016020900481019282613cf05760008555613d37565b82601f10613d0957805160ff1916838001178555613d37565b82800160010185558215613d37579182015b82811115613d36578251825591602001919060010190613d1b565b5b509050613d449190613d82565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115613d9b576000816000905550600101613d83565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613de881613db3565b8114613df357600080fd5b50565b600081359050613e0581613ddf565b92915050565b600060208284031215613e2157613e20613da9565b5b6000613e2f84828501613df6565b91505092915050565b60008115159050919050565b613e4d81613e38565b82525050565b6000602082019050613e686000830184613e44565b92915050565b6000819050919050565b613e8181613e6e565b8114613e8c57600080fd5b50565b600081359050613e9e81613e78565b92915050565b600060208284031215613eba57613eb9613da9565b5b6000613ec884828501613e8f565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613f0b578082015181840152602081019050613ef0565b83811115613f1a576000848401525b50505050565b6000601f19601f8301169050919050565b6000613f3c82613ed1565b613f468185613edc565b9350613f56818560208601613eed565b613f5f81613f20565b840191505092915050565b60006020820190508181036000830152613f848184613f31565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613fb782613f8c565b9050919050565b613fc781613fac565b82525050565b6000602082019050613fe26000830184613fbe565b92915050565b613ff181613fac565b8114613ffc57600080fd5b50565b60008135905061400e81613fe8565b92915050565b6000806040838503121561402b5761402a613da9565b5b600061403985828601613fff565b925050602061404a85828601613e8f565b9150509250929050565b61405d81613e6e565b82525050565b60006020820190506140786000830184614054565b92915050565b60008060006060848603121561409757614096613da9565b5b60006140a586828701613fff565b93505060206140b686828701613fff565b92505060406140c786828701613e8f565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f8401126140f6576140f56140d1565b5b8235905067ffffffffffffffff811115614113576141126140d6565b5b60208301915083602082028301111561412f5761412e6140db565b5b9250929050565b6000806020838503121561414d5761414c613da9565b5b600083013567ffffffffffffffff81111561416b5761416a613dae565b5b614177858286016140e0565b92509250509250929050565b60006020828403121561419957614198613da9565b5b60006141a784828501613fff565b91505092915050565b6141b981613e38565b81146141c457600080fd5b50565b6000813590506141d6816141b0565b92915050565b600080604083850312156141f3576141f2613da9565b5b600061420185828601613fff565b9250506020614212858286016141c7565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61425982613f20565b810181811067ffffffffffffffff8211171561427857614277614221565b5b80604052505050565b600061428b613d9f565b90506142978282614250565b919050565b600067ffffffffffffffff8211156142b7576142b6614221565b5b6142c082613f20565b9050602081019050919050565b82818337600083830152505050565b60006142ef6142ea8461429c565b614281565b90508281526020810184848401111561430b5761430a61421c565b5b6143168482856142cd565b509392505050565b600082601f830112614333576143326140d1565b5b81356143438482602086016142dc565b91505092915050565b6000806000806080858703121561436657614365613da9565b5b600061437487828801613fff565b945050602061438587828801613fff565b935050604061439687828801613e8f565b925050606085013567ffffffffffffffff8111156143b7576143b6613dae565b5b6143c38782880161431e565b91505092959194509250565b600067ffffffffffffffff8211156143ea576143e9614221565b5b6143f382613f20565b9050602081019050919050565b600061441361440e846143cf565b614281565b90508281526020810184848401111561442f5761442e61421c565b5b61443a8482856142cd565b509392505050565b600082601f830112614457576144566140d1565b5b8135614467848260208601614400565b91505092915050565b60006020828403121561448657614485613da9565b5b600082013567ffffffffffffffff8111156144a4576144a3613dae565b5b6144b084828501614442565b91505092915050565b600080604083850312156144d0576144cf613da9565b5b60006144de85828601613fff565b92505060206144ef85828601613fff565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061452f602083613edc565b915061453a826144f9565b602082019050919050565b6000602082019050818103600083015261455e81614522565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806145ac57607f821691505b6020821081036145bf576145be614565565b5b50919050565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b6000614621602d83613edc565b915061462c826145c5565b604082019050919050565b6000602082019050818103600083015261465081614614565b9050919050565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b60006146b3602283613edc565b91506146be82614657565b604082019050919050565b600060208201905081810360008301526146e2816146a6565b9050919050565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b6000614745603983613edc565b9150614750826146e9565b604082019050919050565b6000602082019050818103600083015261477481614738565b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b60006147d7602283613edc565b91506147e28261477b565b604082019050919050565b60006020820190508181036000830152614806816147ca565b9050919050565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b6000614869602e83613edc565b91506148748261480d565b604082019050919050565b600060208201905081810360008301526148988161485c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061490882613e6e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361493a576149396148ce565b5b600182019050919050565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b60006149a1602383613edc565b91506149ac82614945565b604082019050919050565b600060208201905081810360008301526149d081614994565b9050919050565b60006149e282613e6e565b91506149ed83613e6e565b925082821015614a00576149ff6148ce565b5b828203905092915050565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000614a67602b83613edc565b9150614a7282614a0b565b604082019050919050565b60006020820190508181036000830152614a9681614a5a565b9050919050565b6000614aa882613e6e565b9150614ab383613e6e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614aec57614aeb6148ce565b5b828202905092915050565b7f4e696d6c6973746564206d696e74696e6720686173206e6f742073746172746560008201527f6420796574000000000000000000000000000000000000000000000000000000602082015250565b6000614b53602583613edc565b9150614b5e82614af7565b604082019050919050565b60006020820190508181036000830152614b8281614b46565b9050919050565b7f4e6f7420656e6f75676820746f6b656e73206c65667400000000000000000000600082015250565b6000614bbf601683613edc565b9150614bca82614b89565b602082019050919050565b60006020820190508181036000830152614bee81614bb2565b9050919050565b7f4e6f7420656e6f7567682065746865722073656e740000000000000000000000600082015250565b6000614c2b601583613edc565b9150614c3682614bf5565b602082019050919050565b60006020820190508181036000830152614c5a81614c1e565b9050919050565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b6000614c97601a83613edc565b9150614ca282614c61565b602082019050919050565b60006020820190508181036000830152614cc681614c8a565b9050919050565b7f4d696e74696e6720686173206e6f742073746172746564207965740000000000600082015250565b6000614d03601b83613edc565b9150614d0e82614ccd565b602082019050919050565b60006020820190508181036000830152614d3281614cf6565b9050919050565b6000614d4482613e6e565b9150614d4f83613e6e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614d8457614d836148ce565b5b828201905092915050565b7f457863656564656420746865206c696d6974207065722077616c6c6574000000600082015250565b6000614dc5601d83613edc565b9150614dd082614d8f565b602082019050919050565b60006020820190508181036000830152614df481614db8565b9050919050565b7f4c6566746f7665722072657365727665732063616e206f6e6c7920626520636160008201527f6c6c6564206f6e636520616e642068617320616c7265616479206265656e206360208201527f616c6c6564000000000000000000000000000000000000000000000000000000604082015250565b6000614e7d604583613edc565b9150614e8882614dfb565b606082019050919050565b60006020820190508181036000830152614eac81614e70565b9050919050565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b6000614f0f603383613edc565b9150614f1a82614eb3565b604082019050919050565b60006020820190508181036000830152614f3e81614f02565b9050919050565b7f455243373231414d657461646174613a2055524920717565727920666f72206e60008201527f6f6e6578697374656e7420746f6b656e00000000000000000000000000000000602082015250565b6000614fa1603083613edc565b9150614fac82614f45565b604082019050919050565b60006020820190508181036000830152614fd081614f94565b9050919050565b600081905092915050565b6000614fed82613ed1565b614ff78185614fd7565b9350615007818560208601613eed565b80840191505092915050565b60008190508160005260206000209050919050565b6000815461503581614594565b61503f8186614fd7565b9450600182166000811461505a576001811461506b5761509e565b60ff1983168652818601935061509e565b61507485615013565b60005b8381101561509657815481890152600182019150602081019050615077565b838801955050505b50505092915050565b60006150b38286614fe2565b91506150bf8285614fe2565b91506150cb8284615028565b9150819050949350505050565b7f4c6f6c2c20696d6167696e65207468696e6b696e67207468697320776f756c6460008201527f20776f726b2e2e2e6e696d206e696d20626f7421000000000000000000000000602082015250565b6000615134603483613edc565b915061513f826150d8565b604082019050919050565b6000602082019050818103600083015261516381615127565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006151c6602683613edc565b91506151d18261516a565b604082019050919050565b600060208201905081810360008301526151f5816151b9565b9050919050565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000615258603283613edc565b9150615263826151fc565b604082019050919050565b600060208201905081810360008301526152878161524b565b9050919050565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b60006152ea602683613edc565b91506152f58261528e565b604082019050919050565b60006020820190508181036000830152615319816152dd565b9050919050565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061537c602583613edc565b915061538782615320565b604082019050919050565b600060208201905081810360008301526153ab8161536f565b9050919050565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b600061540e602a83613edc565b9150615419826153b2565b604082019050919050565b6000602082019050818103600083015261543d81615401565b9050919050565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b60006154a0602f83613edc565b91506154ab82615444565b604082019050919050565b600060208201905081810360008301526154cf81615493565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006154fd826154d6565b61550781856154e1565b9350615517818560208601613eed565b61552081613f20565b840191505092915050565b60006080820190506155406000830187613fbe565b61554d6020830186613fbe565b61555a6040830185614054565b818103606083015261556c81846154f2565b905095945050505050565b60008151905061558681613ddf565b92915050565b6000602082840312156155a2576155a1613da9565b5b60006155b084828501615577565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006155f382613e6e565b91506155fe83613e6e565b92508261560e5761560d6155b9565b5b828204905092915050565b600061562482613e6e565b915061562f83613e6e565b92508261563f5761563e6155b9565b5b828206905092915050565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006156a6602183613edc565b91506156b18261564a565b604082019050919050565b600060208201905081810360008301526156d581615699565b9050919050565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b6000615738602883613edc565b9150615743826156dc565b604082019050919050565b600060208201905081810360008301526157678161572b565b905091905056fea2646970667358221220d4cc9b1a8ebdd0d1d1e642166dc1fa0da04f3dd5a0fb35994e725e290e2f793264736f6c634300080e0033697066733a2f2f516d63484a79437a4277766b4c5938473435417870683431456e54786a36757757665268483536673166374565762f68696464656e2e6a736f6e
Deployed Bytecode
0x6080604052600436106102c95760003560e01c80637e9984be11610175578063b5b1150d116100dc578063cb74068811610095578063e985e9c51161006f578063e985e9c514610a47578063ebe9d85014610a84578063f2fde38b14610aaf578063fb59a1e814610ad8576102c9565b8063cb740688146109d7578063dbc36b3d146109f3578063e8feb78314610a1c576102c9565b8063b5b1150d146108c7578063b88d4fde146108f2578063bf1d1d011461091b578063c668286214610944578063c87b56dd1461096f578063ca0dcf16146109ac576102c9565b80639c086c301161012e5780639c086c30146107f7578063a22cb46514610822578063a99f257f1461084b578063a9f0750714610867578063b41b4e5814610892578063b5182bb8146108bd576102c9565b80637e9984be146107185780637facdd7114610755578063831e62a01461076c578063886e16f3146107975780638da5cb5b146107a157806395d89b41146107cc576102c9565b80633ccfd60b1161023457806353e365f7116101ed57806368270d77116101c757806368270d771461067057806370a082311461069b578063715018a6146106d857806378d0eeb3146106ef576102c9565b806353e365f7146105dd5780635400b6cb146106085780636352211e14610633576102c9565b80633ccfd60b146104ee57806342842e0e146104f8578063443bdb5b1461052157806346eb4c9a1461054a5780634f6ccce71461057557806351830227146105b2576102c9565b806318160ddd1161028657806318160ddd146103f05780631d74ae971461041b57806323b872dd1461044657806324bbd0491461046f57806328afe4a11461049a5780632f745c59146104b1576102c9565b806301ffc9a7146102ce578063048faf3e1461030b57806306fdde0314610334578063081812fc1461035f578063081c8c441461039c578063095ea7b3146103c7575b600080fd5b3480156102da57600080fd5b506102f560048036038101906102f09190613e0b565b610aef565b6040516103029190613e53565b60405180910390f35b34801561031757600080fd5b50610332600480360381019061032d9190613ea4565b610c39565b005b34801561034057600080fd5b50610349610cbf565b6040516103569190613f6a565b60405180910390f35b34801561036b57600080fd5b5061038660048036038101906103819190613ea4565b610d51565b6040516103939190613fcd565b60405180910390f35b3480156103a857600080fd5b506103b1610dd6565b6040516103be9190613f6a565b60405180910390f35b3480156103d357600080fd5b506103ee60048036038101906103e99190614014565b610e64565b005b3480156103fc57600080fd5b50610405610f7c565b6040516104129190614063565b60405180910390f35b34801561042757600080fd5b50610430610f85565b60405161043d9190613f6a565b60405180910390f35b34801561045257600080fd5b5061046d6004803603810190610468919061407e565b611013565b005b34801561047b57600080fd5b50610484611023565b6040516104919190613e53565b60405180910390f35b3480156104a657600080fd5b506104af611036565b005b3480156104bd57600080fd5b506104d860048036038101906104d39190614014565b6110de565b6040516104e59190614063565b60405180910390f35b6104f66112ce565b005b34801561050457600080fd5b5061051f600480360381019061051a919061407e565b61139a565b005b34801561052d57600080fd5b5061054860048036038101906105439190614136565b6113ba565b005b34801561055657600080fd5b5061055f6114db565b60405161056c9190613f6a565b60405180910390f35b34801561058157600080fd5b5061059c60048036038101906105979190613ea4565b61156d565b6040516105a99190614063565b60405180910390f35b3480156105be57600080fd5b506105c76115c0565b6040516105d49190613e53565b60405180910390f35b3480156105e957600080fd5b506105f26115d3565b6040516105ff9190613e53565b60405180910390f35b34801561061457600080fd5b5061061d611627565b60405161062a9190613e53565b60405180910390f35b34801561063f57600080fd5b5061065a60048036038101906106559190613ea4565b61163a565b6040516106679190613fcd565b60405180910390f35b34801561067c57600080fd5b50610685611650565b6040516106929190614063565b60405180910390f35b3480156106a757600080fd5b506106c260048036038101906106bd9190614183565b611667565b6040516106cf9190614063565b60405180910390f35b3480156106e457600080fd5b506106ed61174f565b005b3480156106fb57600080fd5b5061071660048036038101906107119190614136565b6117d7565b005b34801561072457600080fd5b5061073f600480360381019061073a9190613ea4565b6118f8565b60405161074c9190614063565b60405180910390f35b34801561076157600080fd5b5061076a6119d3565b005b34801561077857600080fd5b50610781611a7b565b60405161078e9190614063565b60405180910390f35b61079f611a85565b005b3480156107ad57600080fd5b506107b6611c38565b6040516107c39190613fcd565b60405180910390f35b3480156107d857600080fd5b506107e1611c62565b6040516107ee9190613f6a565b60405180910390f35b34801561080357600080fd5b5061080c611cf4565b6040516108199190614063565b60405180910390f35b34801561082e57600080fd5b50610849600480360381019061084491906141dc565b611cfe565b005b61086560048036038101906108609190613ea4565b611e7e565b005b34801561087357600080fd5b5061087c612264565b6040516108899190613e53565b60405180910390f35b34801561089e57600080fd5b506108a7612277565b6040516108b49190614063565b60405180910390f35b6108c561227d565b005b3480156108d357600080fd5b506108dc6123bc565b6040516108e99190614063565b60405180910390f35b3480156108fe57600080fd5b506109196004803603810190610914919061434c565b6123c2565b005b34801561092757600080fd5b50610942600480360381019061093d9190614470565b61241e565b005b34801561095057600080fd5b506109596124b4565b6040516109669190613f6a565b60405180910390f35b34801561097b57600080fd5b5061099660048036038101906109919190613ea4565b612542565b6040516109a39190613f6a565b60405180910390f35b3480156109b857600080fd5b506109c1612715565b6040516109ce9190614063565b60405180910390f35b6109f160048036038101906109ec9190613ea4565b61271b565b005b3480156109ff57600080fd5b50610a1a6004803603810190610a159190613ea4565b6129f5565b005b348015610a2857600080fd5b50610a31612a7b565b604051610a3e9190614063565b60405180910390f35b348015610a5357600080fd5b50610a6e6004803603810190610a6991906144b9565b612a85565b604051610a7b9190613e53565b60405180910390f35b348015610a9057600080fd5b50610a99612b19565b604051610aa69190614063565b60405180910390f35b348015610abb57600080fd5b50610ad66004803603810190610ad19190614183565b612b1f565b005b348015610ae457600080fd5b50610aed612c16565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610bba57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c2257507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c325750610c3182612caf565b5b9050919050565b610c41612d19565b73ffffffffffffffffffffffffffffffffffffffff16610c5f611c38565b73ffffffffffffffffffffffffffffffffffffffff1614610cb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cac90614545565b60405180910390fd5b8060108190555050565b606060018054610cce90614594565b80601f0160208091040260200160405190810160405280929190818152602001828054610cfa90614594565b8015610d475780601f10610d1c57610100808354040283529160200191610d47565b820191906000526020600020905b815481529060010190602001808311610d2a57829003601f168201915b5050505050905090565b6000610d5c82612d21565b610d9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9290614637565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60138054610de390614594565b80601f0160208091040260200160405190810160405280929190818152602001828054610e0f90614594565b8015610e5c5780601f10610e3157610100808354040283529160200191610e5c565b820191906000526020600020905b815481529060010190602001808311610e3f57829003601f168201915b505050505081565b6000610e6f8261163a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610edf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed6906146c9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610efe612d19565b73ffffffffffffffffffffffffffffffffffffffff161480610f2d5750610f2c81610f27612d19565b612a85565b5b610f6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f639061475b565b60405180910390fd5b610f77838383612d2e565b505050565b60008054905090565b60128054610f9290614594565b80601f0160208091040260200160405190810160405280929190818152602001828054610fbe90614594565b801561100b5780601f10610fe05761010080835404028352916020019161100b565b820191906000526020600020905b815481529060010190602001808311610fee57829003601f168201915b505050505081565b61101e838383612de0565b505050565b601560019054906101000a900460ff1681565b61103e612d19565b73ffffffffffffffffffffffffffffffffffffffff1661105c611c38565b73ffffffffffffffffffffffffffffffffffffffff16146110b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a990614545565b60405180910390fd5b601560019054906101000a900460ff1615601560016101000a81548160ff021916908315150217905550565b60006110e983611667565b821061112a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611121906147ed565b60405180910390fd5b6000611134610f7c565b905060008060005b8381101561128c576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461122e57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361127e578684036112755781955050505050506112c8565b83806001019450505b50808060010191505061113c565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bf9061487f565b60405180910390fd5b92915050565b6112d6612d19565b73ffffffffffffffffffffffffffffffffffffffff166112f4611c38565b73ffffffffffffffffffffffffffffffffffffffff161461134a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134190614545565b60405180910390fd5b611352611c38565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611397573d6000803e3d6000fd5b50565b6113b5838383604051806020016040528060008152506123c2565b505050565b6113c2612d19565b73ffffffffffffffffffffffffffffffffffffffff166113e0611c38565b73ffffffffffffffffffffffffffffffffffffffff1614611436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142d90614545565b60405180910390fd5b60005b828290508110156114d65760016016600085858581811061145d5761145c61489f565b5b90506020020160208101906114729190614183565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806114ce906148fd565b915050611439565b505050565b6060601380546114ea90614594565b80601f016020809104026020016040519081016040528092919081815260200182805461151690614594565b80156115635780601f1061153857610100808354040283529160200191611563565b820191906000526020600020905b81548152906001019060200180831161154657829003601f168201915b5050505050905090565b6000611577610f7c565b82106115b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115af906149b7565b60405180910390fd5b819050919050565b601560009054906101000a900460ff1681565b6000601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905090565b601560029054906101000a900460ff1681565b60006116458261331e565b600001519050919050565b6000600d54600c5461166291906149d7565b905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ce90614a7d565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611757612d19565b73ffffffffffffffffffffffffffffffffffffffff16611775611c38565b73ffffffffffffffffffffffffffffffffffffffff16146117cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c290614545565b60405180910390fd5b6117d560006134b8565b565b6117df612d19565b73ffffffffffffffffffffffffffffffffffffffff166117fd611c38565b73ffffffffffffffffffffffffffffffffffffffff1614611853576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184a90614545565b60405180910390fd5b60005b828290508110156118f35760016018600085858581811061187a5761187961489f565b5b905060200201602081019061188f9190614183565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806118eb906148fd565b915050611856565b505050565b600080600090506000600b5411801561195b5750601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156119b2576001830361197157600190506119b1565b6002831015801561198457506001600b54115b1561199257600290506119b0565b600283101580156119a557506001600b54145b156119af57600190505b5b5b5b60105481846119c191906149d7565b6119cb9190614a9d565b915050919050565b6119db612d19565b73ffffffffffffffffffffffffffffffffffffffff166119f9611c38565b73ffffffffffffffffffffffffffffffffffffffff1614611a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4690614545565b60405180910390fd5b601560029054906101000a900460ff1615601560026101000a81548160ff021916908315150217905550565b6000600e54905090565b601560029054906101000a900460ff16611ad4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acb90614b69565b60405180910390fd5b601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611b2f57506000600e54115b611b6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6590614bd5565b60405180910390fd5b6000601154905080341015611bb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611baf90614c41565b60405180910390fd5b611bc333600161357e565b6001600e6000828254611bd691906149d7565b925050819055506000601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054611c7190614594565b80601f0160208091040260200160405190810160405280929190818152602001828054611c9d90614594565b8015611cea5780601f10611cbf57610100808354040283529160200191611cea565b820191906000526020600020905b815481529060010190602001808311611ccd57829003601f168201915b5050505050905090565b6000600c54905090565b611d06612d19565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6a90614cad565b60405180910390fd5b8060066000611d80612d19565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611e2d612d19565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611e729190613e53565b60405180910390a35050565b601560019054906101000a900460ff16611ecd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec490614d19565b60405180910390fd5b60095481601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611f1b9190614d39565b111580611f715750601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa790614ddb565b60405180910390fd5b600e54600a54611fc091906149d7565b81611fc9610f7c565b611fd39190614d39565b1115612014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200b90614bd5565b60405180910390fd5b600080600b541180156120715750601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561217d57600182036120ac5760018161208b9190614d39565b90506001600b60008282546120a091906149d7565b92505081905550612124565b600282101580156120bf57506001600b54115b156120f2576002816120d19190614d39565b90506002600b60008282546120e691906149d7565b92505081905550612123565b6002821015801561210557506001600b54145b15612122576001816121179190614d39565b90506000600b819055505b5b5b6001601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b6000601054828461218e91906149d7565b6121989190614a9d565b9050803410156121dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d490614c41565b60405180910390fd5b6121e7338461357e565b82601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122369190614d39565b9250508190555082600c600082825461224f91906149d7565b92505081905550600f54601081905550505050565b601560039054906101000a900460ff1681565b60115481565b612285612d19565b73ffffffffffffffffffffffffffffffffffffffff166122a3611c38565b73ffffffffffffffffffffffffffffffffffffffff16146122f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f090614545565b60405180910390fd5b601560039054906101000a900460ff1615612349576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234090614e93565b60405180910390fd5b600c54600e54111561235f57600c54600e819055505b60006010819055506001601560036101000a81548160ff02191690831515021790555061238e33600e5461357e565b600f54601081905550600e54600c60008282546123ab91906149d7565b925050819055506000600e81905550565b600f5481565b6123cd848484612de0565b6123d98484848461359c565b612418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240f90614f25565b60405180910390fd5b50505050565b612426612d19565b73ffffffffffffffffffffffffffffffffffffffff16612444611c38565b73ffffffffffffffffffffffffffffffffffffffff161461249a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249190614545565b60405180910390fd5b80601290805190602001906124b0929190613cc2565b5050565b601480546124c190614594565b80601f01602080910402602001604051908101604052809291908181526020018280546124ed90614594565b801561253a5780601f1061250f5761010080835404028352916020019161253a565b820191906000526020600020905b81548152906001019060200180831161251d57829003601f168201915b505050505081565b606061254d82612d21565b61258c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258390614fb7565b60405180910390fd5b60001515601560009054906101000a900460ff1615150361263957601380546125b490614594565b80601f01602080910402602001604051908101604052809291908181526020018280546125e090614594565b801561262d5780601f106126025761010080835404028352916020019161262d565b820191906000526020600020905b81548152906001019060200180831161261057829003601f168201915b50505050509050612710565b6000612643613723565b905060008151116126de576013805461265b90614594565b80601f016020809104026020016040519081016040528092919081815260200182805461268790614594565b80156126d45780601f106126a9576101008083540402835291602001916126d4565b820191906000526020600020905b8154815290600101906020018083116126b757829003601f168201915b505050505061270c565b806126e8846137b5565b60146040516020016126fc939291906150a7565b6040516020818303038152906040525b9150505b919050565b60105481565b601560019054906101000a900460ff1680156127445750601560029054906101000a900460ff16155b612783576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277a90614d19565b60405180910390fd5b60095481601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127d19190614d39565b1115806128275750601860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285d90614ddb565b60405180910390fd5b600e54600a5461287691906149d7565b8161287f610f7c565b6128899190614d39565b11156128ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c190614bd5565b60405180910390fd5b601560049054906101000a900460ff161561291a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129119061514a565b60405180910390fd5b60006010548261292a9190614a9d565b90508034101561296f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296690614c41565b60405180910390fd5b612979338361357e565b81601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129c89190614d39565b9250508190555081600c60008282546129e191906149d7565b92505081905550600f546010819055505050565b6129fd612d19565b73ffffffffffffffffffffffffffffffffffffffff16612a1b611c38565b73ffffffffffffffffffffffffffffffffffffffff1614612a71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6890614545565b60405180910390fd5b80600d8190555050565b6000600b54905090565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600d5481565b612b27612d19565b73ffffffffffffffffffffffffffffffffffffffff16612b45611c38565b73ffffffffffffffffffffffffffffffffffffffff1614612b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9290614545565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612c0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c01906151dc565b60405180910390fd5b612c13816134b8565b50565b612c1e612d19565b73ffffffffffffffffffffffffffffffffffffffff16612c3c611c38565b73ffffffffffffffffffffffffffffffffffffffff1614612c92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8990614545565b60405180910390fd5b6001601560006101000a81548160ff021916908315150217905550565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6000805482109050919050565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000612deb8261331e565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612e12612d19565b73ffffffffffffffffffffffffffffffffffffffff161480612e6e5750612e37612d19565b73ffffffffffffffffffffffffffffffffffffffff16612e5684610d51565b73ffffffffffffffffffffffffffffffffffffffff16145b80612e8a5750612e898260000151612e84612d19565b612a85565b5b905080612ecc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ec39061526e565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612f3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3590615300565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa490615392565b60405180910390fd5b612fba8585856001613915565b612fca6000848460000151612d2e565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036132ae5761320d81612d21565b156132ad5782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613317858585600161391b565b5050505050565b613326613d48565b61332f82612d21565b61336e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161336590615424565b60405180910390fd5b60008290505b60008110613477576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146134685780925050506134b3565b50808060019003915050613374565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134aa906154b6565b60405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b613598828260405180602001604052806000815250613921565b5050565b60006135bd8473ffffffffffffffffffffffffffffffffffffffff16613933565b15613716578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026135e6612d19565b8786866040518563ffffffff1660e01b8152600401613608949392919061552b565b6020604051808303816000875af192505050801561364457506040513d601f19601f82011682018060405250810190613641919061558c565b60015b6136c6573d8060008114613674576040519150601f19603f3d011682016040523d82523d6000602084013e613679565b606091505b5060008151036136be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136b590614f25565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061371b565b600190505b949350505050565b60606012805461373290614594565b80601f016020809104026020016040519081016040528092919081815260200182805461375e90614594565b80156137ab5780601f10613780576101008083540402835291602001916137ab565b820191906000526020600020905b81548152906001019060200180831161378e57829003601f168201915b5050505050905090565b6060600082036137fc576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613910565b600082905060005b6000821461382e578080613817906148fd565b915050600a8261382791906155e8565b9150613804565b60008167ffffffffffffffff81111561384a57613849614221565b5b6040519080825280601f01601f19166020018201604052801561387c5781602001600182028036833780820191505090505b5090505b600085146139095760018261389591906149d7565b9150600a856138a49190615619565b60306138b09190614d39565b60f81b8183815181106138c6576138c561489f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561390291906155e8565b9450613880565b8093505050505b919050565b50505050565b50505050565b61392e8383836001613946565b505050565b600080823b905060008111915050919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036139bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139b2906156bc565b60405180910390fd5b600084036139fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139f59061574e565b60405180910390fd5b613a0b6000868387613915565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b85811015613ca557818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48315613c9057613c50600088848861359c565b613c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c8690614f25565b60405180910390fd5b5b81806001019250508080600101915050613bd9565b508060008190555050613cbb600086838761391b565b5050505050565b828054613cce90614594565b90600052602060002090601f016020900481019282613cf05760008555613d37565b82601f10613d0957805160ff1916838001178555613d37565b82800160010185558215613d37579182015b82811115613d36578251825591602001919060010190613d1b565b5b509050613d449190613d82565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b80821115613d9b576000816000905550600101613d83565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613de881613db3565b8114613df357600080fd5b50565b600081359050613e0581613ddf565b92915050565b600060208284031215613e2157613e20613da9565b5b6000613e2f84828501613df6565b91505092915050565b60008115159050919050565b613e4d81613e38565b82525050565b6000602082019050613e686000830184613e44565b92915050565b6000819050919050565b613e8181613e6e565b8114613e8c57600080fd5b50565b600081359050613e9e81613e78565b92915050565b600060208284031215613eba57613eb9613da9565b5b6000613ec884828501613e8f565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613f0b578082015181840152602081019050613ef0565b83811115613f1a576000848401525b50505050565b6000601f19601f8301169050919050565b6000613f3c82613ed1565b613f468185613edc565b9350613f56818560208601613eed565b613f5f81613f20565b840191505092915050565b60006020820190508181036000830152613f848184613f31565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613fb782613f8c565b9050919050565b613fc781613fac565b82525050565b6000602082019050613fe26000830184613fbe565b92915050565b613ff181613fac565b8114613ffc57600080fd5b50565b60008135905061400e81613fe8565b92915050565b6000806040838503121561402b5761402a613da9565b5b600061403985828601613fff565b925050602061404a85828601613e8f565b9150509250929050565b61405d81613e6e565b82525050565b60006020820190506140786000830184614054565b92915050565b60008060006060848603121561409757614096613da9565b5b60006140a586828701613fff565b93505060206140b686828701613fff565b92505060406140c786828701613e8f565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f8401126140f6576140f56140d1565b5b8235905067ffffffffffffffff811115614113576141126140d6565b5b60208301915083602082028301111561412f5761412e6140db565b5b9250929050565b6000806020838503121561414d5761414c613da9565b5b600083013567ffffffffffffffff81111561416b5761416a613dae565b5b614177858286016140e0565b92509250509250929050565b60006020828403121561419957614198613da9565b5b60006141a784828501613fff565b91505092915050565b6141b981613e38565b81146141c457600080fd5b50565b6000813590506141d6816141b0565b92915050565b600080604083850312156141f3576141f2613da9565b5b600061420185828601613fff565b9250506020614212858286016141c7565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61425982613f20565b810181811067ffffffffffffffff8211171561427857614277614221565b5b80604052505050565b600061428b613d9f565b90506142978282614250565b919050565b600067ffffffffffffffff8211156142b7576142b6614221565b5b6142c082613f20565b9050602081019050919050565b82818337600083830152505050565b60006142ef6142ea8461429c565b614281565b90508281526020810184848401111561430b5761430a61421c565b5b6143168482856142cd565b509392505050565b600082601f830112614333576143326140d1565b5b81356143438482602086016142dc565b91505092915050565b6000806000806080858703121561436657614365613da9565b5b600061437487828801613fff565b945050602061438587828801613fff565b935050604061439687828801613e8f565b925050606085013567ffffffffffffffff8111156143b7576143b6613dae565b5b6143c38782880161431e565b91505092959194509250565b600067ffffffffffffffff8211156143ea576143e9614221565b5b6143f382613f20565b9050602081019050919050565b600061441361440e846143cf565b614281565b90508281526020810184848401111561442f5761442e61421c565b5b61443a8482856142cd565b509392505050565b600082601f830112614457576144566140d1565b5b8135614467848260208601614400565b91505092915050565b60006020828403121561448657614485613da9565b5b600082013567ffffffffffffffff8111156144a4576144a3613dae565b5b6144b084828501614442565b91505092915050565b600080604083850312156144d0576144cf613da9565b5b60006144de85828601613fff565b92505060206144ef85828601613fff565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061452f602083613edc565b915061453a826144f9565b602082019050919050565b6000602082019050818103600083015261455e81614522565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806145ac57607f821691505b6020821081036145bf576145be614565565b5b50919050565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b6000614621602d83613edc565b915061462c826145c5565b604082019050919050565b6000602082019050818103600083015261465081614614565b9050919050565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b60006146b3602283613edc565b91506146be82614657565b604082019050919050565b600060208201905081810360008301526146e2816146a6565b9050919050565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b6000614745603983613edc565b9150614750826146e9565b604082019050919050565b6000602082019050818103600083015261477481614738565b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b60006147d7602283613edc565b91506147e28261477b565b604082019050919050565b60006020820190508181036000830152614806816147ca565b9050919050565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b6000614869602e83613edc565b91506148748261480d565b604082019050919050565b600060208201905081810360008301526148988161485c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061490882613e6e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361493a576149396148ce565b5b600182019050919050565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b60006149a1602383613edc565b91506149ac82614945565b604082019050919050565b600060208201905081810360008301526149d081614994565b9050919050565b60006149e282613e6e565b91506149ed83613e6e565b925082821015614a00576149ff6148ce565b5b828203905092915050565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000614a67602b83613edc565b9150614a7282614a0b565b604082019050919050565b60006020820190508181036000830152614a9681614a5a565b9050919050565b6000614aa882613e6e565b9150614ab383613e6e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614aec57614aeb6148ce565b5b828202905092915050565b7f4e696d6c6973746564206d696e74696e6720686173206e6f742073746172746560008201527f6420796574000000000000000000000000000000000000000000000000000000602082015250565b6000614b53602583613edc565b9150614b5e82614af7565b604082019050919050565b60006020820190508181036000830152614b8281614b46565b9050919050565b7f4e6f7420656e6f75676820746f6b656e73206c65667400000000000000000000600082015250565b6000614bbf601683613edc565b9150614bca82614b89565b602082019050919050565b60006020820190508181036000830152614bee81614bb2565b9050919050565b7f4e6f7420656e6f7567682065746865722073656e740000000000000000000000600082015250565b6000614c2b601583613edc565b9150614c3682614bf5565b602082019050919050565b60006020820190508181036000830152614c5a81614c1e565b9050919050565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b6000614c97601a83613edc565b9150614ca282614c61565b602082019050919050565b60006020820190508181036000830152614cc681614c8a565b9050919050565b7f4d696e74696e6720686173206e6f742073746172746564207965740000000000600082015250565b6000614d03601b83613edc565b9150614d0e82614ccd565b602082019050919050565b60006020820190508181036000830152614d3281614cf6565b9050919050565b6000614d4482613e6e565b9150614d4f83613e6e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614d8457614d836148ce565b5b828201905092915050565b7f457863656564656420746865206c696d6974207065722077616c6c6574000000600082015250565b6000614dc5601d83613edc565b9150614dd082614d8f565b602082019050919050565b60006020820190508181036000830152614df481614db8565b9050919050565b7f4c6566746f7665722072657365727665732063616e206f6e6c7920626520636160008201527f6c6c6564206f6e636520616e642068617320616c7265616479206265656e206360208201527f616c6c6564000000000000000000000000000000000000000000000000000000604082015250565b6000614e7d604583613edc565b9150614e8882614dfb565b606082019050919050565b60006020820190508181036000830152614eac81614e70565b9050919050565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b6000614f0f603383613edc565b9150614f1a82614eb3565b604082019050919050565b60006020820190508181036000830152614f3e81614f02565b9050919050565b7f455243373231414d657461646174613a2055524920717565727920666f72206e60008201527f6f6e6578697374656e7420746f6b656e00000000000000000000000000000000602082015250565b6000614fa1603083613edc565b9150614fac82614f45565b604082019050919050565b60006020820190508181036000830152614fd081614f94565b9050919050565b600081905092915050565b6000614fed82613ed1565b614ff78185614fd7565b9350615007818560208601613eed565b80840191505092915050565b60008190508160005260206000209050919050565b6000815461503581614594565b61503f8186614fd7565b9450600182166000811461505a576001811461506b5761509e565b60ff1983168652818601935061509e565b61507485615013565b60005b8381101561509657815481890152600182019150602081019050615077565b838801955050505b50505092915050565b60006150b38286614fe2565b91506150bf8285614fe2565b91506150cb8284615028565b9150819050949350505050565b7f4c6f6c2c20696d6167696e65207468696e6b696e67207468697320776f756c6460008201527f20776f726b2e2e2e6e696d206e696d20626f7421000000000000000000000000602082015250565b6000615134603483613edc565b915061513f826150d8565b604082019050919050565b6000602082019050818103600083015261516381615127565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006151c6602683613edc565b91506151d18261516a565b604082019050919050565b600060208201905081810360008301526151f5816151b9565b9050919050565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000615258603283613edc565b9150615263826151fc565b604082019050919050565b600060208201905081810360008301526152878161524b565b9050919050565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b60006152ea602683613edc565b91506152f58261528e565b604082019050919050565b60006020820190508181036000830152615319816152dd565b9050919050565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061537c602583613edc565b915061538782615320565b604082019050919050565b600060208201905081810360008301526153ab8161536f565b9050919050565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b600061540e602a83613edc565b9150615419826153b2565b604082019050919050565b6000602082019050818103600083015261543d81615401565b9050919050565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b60006154a0602f83613edc565b91506154ab82615444565b604082019050919050565b600060208201905081810360008301526154cf81615493565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006154fd826154d6565b61550781856154e1565b9350615517818560208601613eed565b61552081613f20565b840191505092915050565b60006080820190506155406000830187613fbe565b61554d6020830186613fbe565b61555a6040830185614054565b818103606083015261556c81846154f2565b905095945050505050565b60008151905061558681613ddf565b92915050565b6000602082840312156155a2576155a1613da9565b5b60006155b084828501615577565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006155f382613e6e565b91506155fe83613e6e565b92508261560e5761560d6155b9565b5b828204905092915050565b600061562482613e6e565b915061562f83613e6e565b92508261563f5761563e6155b9565b5b828206905092915050565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006156a6602183613edc565b91506156b18261564a565b604082019050919050565b600060208201905081810360008301526156d581615699565b9050919050565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b6000615738602883613edc565b9150615743826156dc565b604082019050919050565b600060208201905081810360008301526157678161572b565b905091905056fea2646970667358221220d4cc9b1a8ebdd0d1d1e642166dc1fa0da04f3dd5a0fb35994e725e290e2f793264736f6c634300080e0033
Deployed Bytecode Sourcemap
40446:7365:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24700:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43234:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26586:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28148:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40907:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27669:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22957:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40874:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29024:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41090:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43331:82;;;;;;;;;;;;;:::i;:::-;;23621:1007;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42124:114;;;:::i;:::-;;29257:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42701:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42359:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23134:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41056:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42586:107;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41125:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26395:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43616:119;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25136:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4451:94;;;;;;;;;;;;;:::i;:::-;;42897:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41546:570;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43421:103;;;;;;;;;;;;;:::i;:::-;;43958:107;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46167:497;;;:::i;:::-;;3800:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26755:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43743:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28434:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44866:1293;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41169:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40829:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46672:563;;;:::i;:::-;;40739:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29505:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42470:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41012:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47243:565;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40786:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44073:785;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43105:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43846:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28793:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40650:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4700:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43532:76;;;;;;;;;;;;;:::i;:::-;;24700:372;24802:4;24854:25;24839:40;;;:11;:40;;;;:105;;;;24911:33;24896:48;;;:11;:48;;;;24839:105;:172;;;;24976:35;24961:50;;;:11;:50;;;;24839:172;:225;;;;25028:36;25052:11;25028:23;:36::i;:::-;24839:225;24819:245;;24700:372;;;:::o;43234:89::-;4031:12;:10;:12::i;:::-;4020:23;;:7;:5;:7::i;:::-;:23;;;4012:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43308:7:::1;43297:8;:18;;;;43234:89:::0;:::o;26586:100::-;26640:13;26673:5;26666:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26586:100;:::o;28148:214::-;28216:7;28244:16;28252:7;28244;:16::i;:::-;28236:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;28330:15;:24;28346:7;28330:24;;;;;;;;;;;;;;;;;;;;;28323:31;;28148:214;;;:::o;40907:98::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27669:413::-;27742:13;27758:24;27774:7;27758:15;:24::i;:::-;27742:40;;27807:5;27801:11;;:2;:11;;;27793:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;27902:5;27886:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27911:37;27928:5;27935:12;:10;:12::i;:::-;27911:16;:37::i;:::-;27886:62;27864:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;28046:28;28055:2;28059:7;28068:5;28046:8;:28::i;:::-;27731:351;27669:413;;:::o;22957:100::-;23010:7;23037:12;;23030:19;;22957:100;:::o;40874:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29024:162::-;29150:28;29160:4;29166:2;29170:7;29150:9;:28::i;:::-;29024:162;;;:::o;41090:28::-;;;;;;;;;;;;;:::o;43331:82::-;4031:12;:10;:12::i;:::-;4020:23;;:7;:5;:7::i;:::-;:23;;;4012:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43397:8:::1;;;;;;;;;;;43396:9;43385:8;;:20;;;;;;;;;;;;;;;;;;43331:82::o:0;23621:1007::-;23710:7;23746:16;23756:5;23746:9;:16::i;:::-;23738:5;:24;23730:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;23812:22;23837:13;:11;:13::i;:::-;23812:38;;23861:19;23891:25;24080:9;24075:466;24095:14;24091:1;:18;24075:466;;;24135:31;24169:11;:14;24181:1;24169:14;;;;;;;;;;;24135:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24232:1;24206:28;;:9;:14;;;:28;;;24202:111;;24279:9;:14;;;24259:34;;24202:111;24356:5;24335:26;;:17;:26;;;24331:195;;24405:5;24390:11;:20;24386:85;;24446:1;24439:8;;;;;;;;;24386:85;24493:13;;;;;;;24331:195;24116:425;24111:3;;;;;;;24075:466;;;;24564:56;;;;;;;;;;:::i;:::-;;;;;;;;23621:1007;;;;;:::o;42124:114::-;4031:12;:10;:12::i;:::-;4020:23;;:7;:5;:7::i;:::-;:23;;;4012:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42190:7:::1;:5;:7::i;:::-;42182:25;;:48;42208:21;42182:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;42124:114::o:0;29257:177::-;29387:39;29404:4;29410:2;29414:7;29387:39;;;;;;;;;;;;:16;:39::i;:::-;29257:177;;;:::o;42701:188::-;4031:12;:10;:12::i;:::-;4020:23;;:7;:5;:7::i;:::-;:23;;;4012:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42783:9:::1;42779:103;42798:7;;:14;;42796:1;:16;42779:103;;;42866:4;42834:17;:29;42852:7;;42860:1;42852:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;42834:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;42814:3;;;;;:::i;:::-;;;;42779:103;;;;42701:188:::0;;:::o;42359:103::-;42407:13;42440:14;42433:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42359:103;:::o;23134:187::-;23201:7;23237:13;:11;:13::i;:::-;23229:5;:21;23221:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;23308:5;23301:12;;23134:187;;;:::o;41056:27::-;;;;;;;;;;;;;:::o;42586:107::-;42632:4;42656:17;:29;42674:10;42656:29;;;;;;;;;;;;;;;;;;;;;;;;;42649:36;;42586:107;:::o;41125:37::-;;;;;;;;;;;;;:::o;26395:124::-;26459:7;26486:20;26498:7;26486:11;:20::i;:::-;:25;;;26479:32;;26395:124;;;:::o;43616:119::-;43664:7;43711:15;;43692:16;;:34;;;;:::i;:::-;43684:43;;43616:119;:::o;25136:221::-;25200:7;25245:1;25228:19;;:5;:19;;;25220:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;25321:12;:19;25334:5;25321:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;25313:36;;25306:43;;25136:221;;;:::o;4451:94::-;4031:12;:10;:12::i;:::-;4020:23;;:7;:5;:7::i;:::-;:23;;;4012:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4516:21:::1;4534:1;4516:9;:21::i;:::-;4451:94::o:0;42897:200::-;4031:12;:10;:12::i;:::-;4020:23;;:7;:5;:7::i;:::-;:23;;;4012:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42984:9:::1;42980:110;42999:11;;:18;;42997:1;:20;42980:110;;;43074:4;43039:16;:32;43056:11;;43068:1;43056:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;43039:32;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;43019:3;;;;;:::i;:::-;;;;42980:110;;;;42897:200:::0;;:::o;41546:570::-;41602:7;41622:23;41648:1;41622:27;;41687:1;41663:21;;:25;:60;;;;;41693:18;:30;41712:10;41693:30;;;;;;;;;;;;;;;;;;;;;;;;;41692:31;41663:60;41660:380;;;41755:1;41743:8;:13;41740:289;;41795:1;41777:19;;41740:289;;;41834:1;41822:8;:13;;:42;;;;;41863:1;41839:21;;:25;41822:42;41818:211;;;41903:1;41885:19;;41818:211;;;41942:1;41930:8;:13;;:43;;;;;41972:1;41947:21;;:26;41930:43;41926:103;;;42012:1;41994:19;;41926:103;41818:211;41740:289;41660:380;42099:8;;42080:15;42069:8;:26;;;;:::i;:::-;42068:39;;;;:::i;:::-;42060:48;;;41546:570;;;:::o;43421:103::-;4031:12;:10;:12::i;:::-;4020:23;;:7;:5;:7::i;:::-;:23;;;4012:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43499:17:::1;;;;;;;;;;;43498:18;43478:17;;:38;;;;;;;;;;;;;;;;;;43421:103::o:0;43958:107::-;44005:7;44032:25;;44025:32;;43958:107;:::o;46167:497::-;46230:17;;;;;;;;;;;46222:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;46308:17;:29;46326:10;46308:29;;;;;;;;;;;;;;;;;;;;;;;;;:62;;;;;46369:1;46341:25;;:29;46308:62;46300:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;46418:21;46442:17;;46418:41;;46491:13;46478:9;:26;;46470:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;46543:24;46553:10;46565:1;46543:9;:24::i;:::-;46607:1;46578:25;;:30;;;;;;;:::i;:::-;;;;;;;;46651:5;46619:17;:29;46637:10;46619:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;46211:453;46167:497::o;3800:87::-;3846:7;3873:6;;;;;;;;;;;3866:13;;3800:87;:::o;26755:104::-;26811:13;26844:7;26837:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26755:104;:::o;43743:95::-;43787:7;43814:16;;43807:23;;43743:95;:::o;28434:288::-;28541:12;:10;:12::i;:::-;28529:24;;:8;:24;;;28521:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;28642:8;28597:18;:32;28616:12;:10;:12::i;:::-;28597:32;;;;;;;;;;;;;;;:42;28630:8;28597:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;28695:8;28666:48;;28681:12;:10;:12::i;:::-;28666:48;;;28705:8;28666:48;;;;;;:::i;:::-;;;;;;;;28434:288;;:::o;44866:1293::-;44939:8;;;;;;;;;;;44931:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;45039:9;;45029:5;45000:14;:26;45015:10;45000:26;;;;;;;;;;;;;;;;:34;;;;:::i;:::-;44999:49;;44998:83;;;;45053:16;:28;45070:10;45053:28;;;;;;;;;;;;;;;;;;;;;;;;;44998:83;44990:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;45175:25;;45162:10;;:38;;;;:::i;:::-;45151:5;45135:13;:11;:13::i;:::-;:21;;;;:::i;:::-;45134:67;;45126:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;45241:23;45306:1;45282:21;;:25;:60;;;;;45312:18;:30;45331:10;45312:30;;;;;;;;;;;;;;;;;;;;;;;;;45311:31;45282:60;45279:562;;;45371:1;45362:5;:10;45359:417;;45412:1;45393:20;;;;;:::i;:::-;;;45457:1;45432:21;;:26;;;;;;;:::i;:::-;;;;;;;;45359:417;;;45493:1;45484:5;:10;;:39;;;;;45522:1;45498:21;;:25;45484:39;45480:296;;;45563:1;45544:20;;;;;:::i;:::-;;;45608:1;45583:21;;:26;;;;;;;:::i;:::-;;;;;;;;45480:296;;;45644:1;45635:5;:10;;:40;;;;;45674:1;45649:21;;:26;45635:40;45631:145;;;45715:1;45696:20;;;;;:::i;:::-;;;45759:1;45735:21;:25;;;;45631:145;45480:296;45359:417;45825:4;45792:18;:30;45811:10;45792:30;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;45279:562;45861:21;45914:8;;45895:15;45887:5;:23;;;;:::i;:::-;45886:36;;;;:::i;:::-;45861:62;;45955:13;45942:9;:26;;45934:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;46007:28;46017:10;46029:5;46007:9;:28::i;:::-;46076:5;46046:14;:26;46061:10;46046:26;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;46112:5;46092:16;;:25;;;;;;;:::i;:::-;;;;;;;;46139:12;;46128:8;:23;;;;44920:1239;;44866:1293;:::o;41169:44::-;;;;;;;;;;;;;:::o;40829:36::-;;;;:::o;46672:563::-;4031:12;:10;:12::i;:::-;4020:23;;:7;:5;:7::i;:::-;:23;;;4012:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46743:24:::1;;;;;;;;;;;46742:25;46734:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;46883:16;;46855:25;;:44;46852:120;;;46944:16;;46916:25;:44;;;;46852:120;46995:1;46984:8;:12;;;;47034:4;47007:24;;:31;;;;;;;;;;;;;;;;;;47049:48;47059:10;47071:25;;47049:9;:48::i;:::-;47119:12;;47108:8;:23;;;;47162:25;;47142:16;;:45;;;;;;;:::i;:::-;;;;;;;;47226:1;47198:25;:29;;;;46672:563::o:0;40739:40::-;;;;:::o;29505:355::-;29664:28;29674:4;29680:2;29684:7;29664:9;:28::i;:::-;29725:48;29748:4;29754:2;29758:7;29767:5;29725:22;:48::i;:::-;29703:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;29505:355;;;;:::o;42470:108::-;4031:12;:10;:12::i;:::-;4020:23;;:7;:5;:7::i;:::-;:23;;;4012:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42562:8:::1;42547:12;:23;;;;;;;;;;;;:::i;:::-;;42470:108:::0;:::o;41012:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47243:565::-;47341:13;47390:16;47398:7;47390;:16::i;:::-;47372:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;47514:5;47502:17;;:8;;;;;;;;;;;:17;;;47499:70;;47543:14;47536:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47499:70;47581:28;47612:10;:8;:10::i;:::-;47581:41;;47671:1;47646:14;47640:28;:32;:160;;47786:14;47640:160;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47712:14;47728:25;47745:7;47728:16;:25::i;:::-;47755:13;47695:74;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47640:160;47633:167;;;47243:565;;;;:::o;40786:36::-;;;;:::o;44073:785::-;44149:8;;;;;;;;;;;:30;;;;;44162:17;;;;;;;;;;;44161:18;44149:30;44141:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;44274:9;;44261:8;44232:14;:26;44247:10;44232:26;;;;;;;;;;;;;;;;:37;;;;:::i;:::-;44231:52;;44230:86;;;;44288:16;:28;44305:10;44288:28;;;;;;;;;;;;;;;;;;;;;;;;;44230:86;44222:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;44413:25;;44400:10;;:38;;;;:::i;:::-;44386:8;44370:13;:11;:13::i;:::-;:24;;;;:::i;:::-;44369:70;;44361:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;44486:12;;;;;;;;;;;44485:13;44477:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;44568:21;44604:8;;44593;:19;;;;:::i;:::-;44568:45;;44645:13;44632:9;:26;;44624:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;44697:31;44707:10;44719:8;44697:9;:31::i;:::-;44769:8;44739:14;:26;44754:10;44739:26;;;;;;;;;;;;;;;;:38;;;;;;;:::i;:::-;;;;;;;;44808:8;44788:16;;:28;;;;;;;:::i;:::-;;;;;;;;44838:12;;44827:8;:23;;;;44130:728;44073:785;:::o;43105:121::-;4031:12;:10;:12::i;:::-;4020:23;;:7;:5;:7::i;:::-;:23;;;4012:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43203:15:::1;43185;:33;;;;43105:121:::0;:::o;43846:104::-;43894:7;43921:21;;43914:28;;43846:104;:::o;28793:164::-;28890:4;28914:18;:25;28933:5;28914:25;;;;;;;;;;;;;;;:35;28940:8;28914:35;;;;;;;;;;;;;;;;;;;;;;;;;28907:42;;28793:164;;;;:::o;40650:36::-;;;;:::o;4700:192::-;4031:12;:10;:12::i;:::-;4020:23;;:7;:5;:7::i;:::-;:23;;;4012:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4809:1:::1;4789:22;;:8;:22;;::::0;4781:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;4865:19;4875:8;4865:9;:19::i;:::-;4700:192:::0;:::o;43532:76::-;4031:12;:10;:12::i;:::-;4020:23;;:7;:5;:7::i;:::-;:23;;;4012:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43596:4:::1;43585:8;;:15;;;;;;;;;;;;;;;;;;43532:76::o:0;15256:157::-;15341:4;15380:25;15365:40;;;:11;:40;;;;15358:47;;15256:157;;;:::o;2658:98::-;2711:7;2738:10;2731:17;;2658:98;:::o;30115:111::-;30172:4;30206:12;;30196:7;:22;30189:29;;30115:111;;;:::o;35035:196::-;35177:2;35150:15;:24;35166:7;35150:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35215:7;35211:2;35195:28;;35204:5;35195:28;;;;;;;;;;;;35035:196;;;:::o;32915:2002::-;33030:35;33068:20;33080:7;33068:11;:20::i;:::-;33030:58;;33101:22;33143:13;:18;;;33127:34;;:12;:10;:12::i;:::-;:34;;;:87;;;;33202:12;:10;:12::i;:::-;33178:36;;:20;33190:7;33178:11;:20::i;:::-;:36;;;33127:87;:154;;;;33231:50;33248:13;:18;;;33268:12;:10;:12::i;:::-;33231:16;:50::i;:::-;33127:154;33101:181;;33303:17;33295:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;33418:4;33396:26;;:13;:18;;;:26;;;33388:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;33498:1;33484:16;;:2;:16;;;33476:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;33555:43;33577:4;33583:2;33587:7;33596:1;33555:21;:43::i;:::-;33663:49;33680:1;33684:7;33693:13;:18;;;33663:8;:49::i;:::-;34038:1;34008:12;:18;34021:4;34008:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34082:1;34054:12;:16;34067:2;34054:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34128:2;34100:11;:20;34112:7;34100:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;34190:15;34145:11;:20;34157:7;34145:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;34458:19;34490:1;34480:7;:11;34458:33;;34551:1;34510:43;;:11;:24;34522:11;34510:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;34506:295;;34578:20;34586:11;34578:7;:20::i;:::-;34574:212;;;34655:13;:18;;;34623:11;:24;34635:11;34623:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;34738:13;:28;;;34696:11;:24;34708:11;34696:24;;;;;;;;;;;:39;;;:70;;;;;;;;;;;;;;;;;;34574:212;34506:295;33983:829;34848:7;34844:2;34829:27;;34838:4;34829:27;;;;;;;;;;;;34867:42;34888:4;34894:2;34898:7;34907:1;34867:20;:42::i;:::-;33019:1898;;32915:2002;;;:::o;25796:537::-;25857:21;;:::i;:::-;25899:16;25907:7;25899;:16::i;:::-;25891:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;26005:12;26020:7;26005:22;;26000:245;26037:1;26029:4;:9;26000:245;;26067:31;26101:11;:17;26113:4;26101:17;;;;;;;;;;;26067:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26167:1;26141:28;;:9;:14;;;:28;;;26137:93;;26201:9;26194:16;;;;;;26137:93;26048:197;26040:6;;;;;;;;26000:245;;;;26268:57;;;;;;;;;;:::i;:::-;;;;;;;;25796:537;;;;:::o;4900:173::-;4956:16;4975:6;;;;;;;;;;;4956:25;;5001:8;4992:6;;:17;;;;;;;;;;;;;;;;;;5056:8;5025:40;;5046:8;5025:40;;;;;;;;;;;;4945:128;4900:173;:::o;30234:104::-;30303:27;30313:2;30317:8;30303:27;;;;;;;;;;;;:9;:27::i;:::-;30234:104;;:::o;35796:804::-;35951:4;35972:15;:2;:13;;;:15::i;:::-;35968:625;;;36024:2;36008:36;;;36045:12;:10;:12::i;:::-;36059:4;36065:7;36074:5;36008:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36004:534;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36271:1;36254:6;:13;:18;36250:273;;36297:61;;;;;;;;;;:::i;:::-;;;;;;;;36250:273;36473:6;36467:13;36458:6;36454:2;36450:15;36443:38;36004:534;36141:45;;;36131:55;;;:6;:55;;;;36124:62;;;;;35968:625;36577:4;36570:11;;35796:804;;;;;;;:::o;42246:105::-;42298:13;42331:12;42324:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42246:105;:::o;343:723::-;399:13;629:1;620:5;:10;616:53;;647:10;;;;;;;;;;;;;;;;;;;;;616:53;679:12;694:5;679:20;;710:14;735:78;750:1;742:4;:9;735:78;;768:8;;;;;:::i;:::-;;;;799:2;791:10;;;;;:::i;:::-;;;735:78;;;823:19;855:6;845:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;823:39;;873:154;889:1;880:5;:10;873:154;;917:1;907:11;;;;;:::i;:::-;;;984:2;976:5;:10;;;;:::i;:::-;963:2;:24;;;;:::i;:::-;950:39;;933:6;940;933:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1013:2;1004:11;;;;;:::i;:::-;;;873:154;;;1051:6;1037:21;;;;;343:723;;;;:::o;37088:159::-;;;;;:::o;37659:158::-;;;;;:::o;30701:163::-;30824:32;30830:2;30834:8;30844:5;30851:4;30824:5;:32::i;:::-;30701:163;;;:::o;5777:387::-;5837:4;6045:12;6112:7;6100:20;6092:28;;6155:1;6148:4;:8;6141:15;;;5777:387;;;:::o;31123:1538::-;31262:20;31285:12;;31262:35;;31330:1;31316:16;;:2;:16;;;31308:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;31401:1;31389:8;:13;31381:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;31460:61;31490:1;31494:2;31498:12;31512:8;31460:21;:61::i;:::-;31835:8;31799:12;:16;31812:2;31799:16;;;;;;;;;;;;;;;:24;;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31900:8;31859:12;:16;31872:2;31859:16;;;;;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31959:2;31926:11;:25;31938:12;31926:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;32026:15;31976:11;:25;31988:12;31976:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;32059:20;32082:12;32059:35;;32116:9;32111:415;32131:8;32127:1;:12;32111:415;;;32195:12;32191:2;32170:38;;32187:1;32170:38;;;;;;;;;;;;32231:4;32227:249;;;32294:59;32325:1;32329:2;32333:12;32347:5;32294:22;:59::i;:::-;32260:196;;;;;;;;;;;;:::i;:::-;;;;;;;;;32227:249;32496:14;;;;;;;32141:3;;;;;;;32111:415;;;;32557:12;32542;:27;;;;31774:807;32593:60;32622:1;32626:2;32630:12;32644:8;32593:20;:60::i;:::-;31251:1410;31123:1538;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:77::-;1555:7;1584:5;1573:16;;1518:77;;;:::o;1601:122::-;1674:24;1692:5;1674:24;:::i;:::-;1667:5;1664:35;1654:63;;1713:1;1710;1703:12;1654:63;1601:122;:::o;1729:139::-;1775:5;1813:6;1800:20;1791:29;;1829:33;1856:5;1829:33;:::i;:::-;1729:139;;;;:::o;1874:329::-;1933:6;1982:2;1970:9;1961:7;1957:23;1953:32;1950:119;;;1988:79;;:::i;:::-;1950:119;2108:1;2133:53;2178:7;2169:6;2158:9;2154:22;2133:53;:::i;:::-;2123:63;;2079:117;1874:329;;;;:::o;2209:99::-;2261:6;2295:5;2289:12;2279:22;;2209:99;;;:::o;2314:169::-;2398:11;2432:6;2427:3;2420:19;2472:4;2467:3;2463:14;2448:29;;2314:169;;;;:::o;2489:307::-;2557:1;2567:113;2581:6;2578:1;2575:13;2567:113;;;2666:1;2661:3;2657:11;2651:18;2647:1;2642:3;2638:11;2631:39;2603:2;2600:1;2596:10;2591:15;;2567:113;;;2698:6;2695:1;2692:13;2689:101;;;2778:1;2769:6;2764:3;2760:16;2753:27;2689:101;2538:258;2489:307;;;:::o;2802:102::-;2843:6;2894:2;2890:7;2885:2;2878:5;2874:14;2870:28;2860:38;;2802:102;;;:::o;2910:364::-;2998:3;3026:39;3059:5;3026:39;:::i;:::-;3081:71;3145:6;3140:3;3081:71;:::i;:::-;3074:78;;3161:52;3206:6;3201:3;3194:4;3187:5;3183:16;3161:52;:::i;:::-;3238:29;3260:6;3238:29;:::i;:::-;3233:3;3229:39;3222:46;;3002:272;2910:364;;;;:::o;3280:313::-;3393:4;3431:2;3420:9;3416:18;3408:26;;3480:9;3474:4;3470:20;3466:1;3455:9;3451:17;3444:47;3508:78;3581:4;3572:6;3508:78;:::i;:::-;3500:86;;3280:313;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:619::-;5367:6;5375;5383;5432:2;5420:9;5411:7;5407:23;5403:32;5400:119;;;5438:79;;:::i;:::-;5400:119;5558:1;5583:53;5628:7;5619:6;5608:9;5604:22;5583:53;:::i;:::-;5573:63;;5529:117;5685:2;5711:53;5756:7;5747:6;5736:9;5732:22;5711:53;:::i;:::-;5701:63;;5656:118;5813:2;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5784:118;5290:619;;;;;:::o;5915:117::-;6024:1;6021;6014:12;6038:117;6147:1;6144;6137:12;6161:117;6270:1;6267;6260:12;6301:568;6374:8;6384:6;6434:3;6427:4;6419:6;6415:17;6411:27;6401:122;;6442:79;;:::i;:::-;6401:122;6555:6;6542:20;6532:30;;6585:18;6577:6;6574:30;6571:117;;;6607:79;;:::i;:::-;6571:117;6721:4;6713:6;6709:17;6697:29;;6775:3;6767:4;6759:6;6755:17;6745:8;6741:32;6738:41;6735:128;;;6782:79;;:::i;:::-;6735:128;6301:568;;;;;:::o;6875:559::-;6961:6;6969;7018:2;7006:9;6997:7;6993:23;6989:32;6986:119;;;7024:79;;:::i;:::-;6986:119;7172:1;7161:9;7157:17;7144:31;7202:18;7194:6;7191:30;7188:117;;;7224:79;;:::i;:::-;7188:117;7337:80;7409:7;7400:6;7389:9;7385:22;7337:80;:::i;:::-;7319:98;;;;7115:312;6875:559;;;;;:::o;7440:329::-;7499:6;7548:2;7536:9;7527:7;7523:23;7519:32;7516:119;;;7554:79;;:::i;:::-;7516:119;7674:1;7699:53;7744:7;7735:6;7724:9;7720:22;7699:53;:::i;:::-;7689:63;;7645:117;7440:329;;;;:::o;7775:116::-;7845:21;7860:5;7845:21;:::i;:::-;7838:5;7835:32;7825:60;;7881:1;7878;7871:12;7825:60;7775:116;:::o;7897:133::-;7940:5;7978:6;7965:20;7956:29;;7994:30;8018:5;7994:30;:::i;:::-;7897:133;;;;:::o;8036:468::-;8101:6;8109;8158:2;8146:9;8137:7;8133:23;8129:32;8126:119;;;8164:79;;:::i;:::-;8126:119;8284:1;8309:53;8354:7;8345:6;8334:9;8330:22;8309:53;:::i;:::-;8299:63;;8255:117;8411:2;8437:50;8479:7;8470:6;8459:9;8455:22;8437:50;:::i;:::-;8427:60;;8382:115;8036:468;;;;;:::o;8510:117::-;8619:1;8616;8609:12;8633:180;8681:77;8678:1;8671:88;8778:4;8775:1;8768:15;8802:4;8799:1;8792:15;8819:281;8902:27;8924:4;8902:27;:::i;:::-;8894:6;8890:40;9032:6;9020:10;9017:22;8996:18;8984:10;8981:34;8978:62;8975:88;;;9043:18;;:::i;:::-;8975:88;9083:10;9079:2;9072:22;8862:238;8819:281;;:::o;9106:129::-;9140:6;9167:20;;:::i;:::-;9157:30;;9196:33;9224:4;9216:6;9196:33;:::i;:::-;9106:129;;;:::o;9241:307::-;9302:4;9392:18;9384:6;9381:30;9378:56;;;9414:18;;:::i;:::-;9378:56;9452:29;9474:6;9452:29;:::i;:::-;9444:37;;9536:4;9530;9526:15;9518:23;;9241:307;;;:::o;9554:154::-;9638:6;9633:3;9628;9615:30;9700:1;9691:6;9686:3;9682:16;9675:27;9554:154;;;:::o;9714:410::-;9791:5;9816:65;9832:48;9873:6;9832:48;:::i;:::-;9816:65;:::i;:::-;9807:74;;9904:6;9897:5;9890:21;9942:4;9935:5;9931:16;9980:3;9971:6;9966:3;9962:16;9959:25;9956:112;;;9987:79;;:::i;:::-;9956:112;10077:41;10111:6;10106:3;10101;10077:41;:::i;:::-;9797:327;9714:410;;;;;:::o;10143:338::-;10198:5;10247:3;10240:4;10232:6;10228:17;10224:27;10214:122;;10255:79;;:::i;:::-;10214:122;10372:6;10359:20;10397:78;10471:3;10463:6;10456:4;10448:6;10444:17;10397:78;:::i;:::-;10388:87;;10204:277;10143:338;;;;:::o;10487:943::-;10582:6;10590;10598;10606;10655:3;10643:9;10634:7;10630:23;10626:33;10623:120;;;10662:79;;:::i;:::-;10623:120;10782:1;10807:53;10852:7;10843:6;10832:9;10828:22;10807:53;:::i;:::-;10797:63;;10753:117;10909:2;10935:53;10980:7;10971:6;10960:9;10956:22;10935:53;:::i;:::-;10925:63;;10880:118;11037:2;11063:53;11108:7;11099:6;11088:9;11084:22;11063:53;:::i;:::-;11053:63;;11008:118;11193:2;11182:9;11178:18;11165:32;11224:18;11216:6;11213:30;11210:117;;;11246:79;;:::i;:::-;11210:117;11351:62;11405:7;11396:6;11385:9;11381:22;11351:62;:::i;:::-;11341:72;;11136:287;10487:943;;;;;;;:::o;11436:308::-;11498:4;11588:18;11580:6;11577:30;11574:56;;;11610:18;;:::i;:::-;11574:56;11648:29;11670:6;11648:29;:::i;:::-;11640:37;;11732:4;11726;11722:15;11714:23;;11436:308;;;:::o;11750:412::-;11828:5;11853:66;11869:49;11911:6;11869:49;:::i;:::-;11853:66;:::i;:::-;11844:75;;11942:6;11935:5;11928:21;11980:4;11973:5;11969:16;12018:3;12009:6;12004:3;12000:16;11997:25;11994:112;;;12025:79;;:::i;:::-;11994:112;12115:41;12149:6;12144:3;12139;12115:41;:::i;:::-;11834:328;11750:412;;;;;:::o;12182:340::-;12238:5;12287:3;12280:4;12272:6;12268:17;12264:27;12254:122;;12295:79;;:::i;:::-;12254:122;12412:6;12399:20;12437:79;12512:3;12504:6;12497:4;12489:6;12485:17;12437:79;:::i;:::-;12428:88;;12244:278;12182:340;;;;:::o;12528:509::-;12597:6;12646:2;12634:9;12625:7;12621:23;12617:32;12614:119;;;12652:79;;:::i;:::-;12614:119;12800:1;12789:9;12785:17;12772:31;12830:18;12822:6;12819:30;12816:117;;;12852:79;;:::i;:::-;12816:117;12957:63;13012:7;13003:6;12992:9;12988:22;12957:63;:::i;:::-;12947:73;;12743:287;12528:509;;;;:::o;13043:474::-;13111:6;13119;13168:2;13156:9;13147:7;13143:23;13139:32;13136:119;;;13174:79;;:::i;:::-;13136:119;13294:1;13319:53;13364:7;13355:6;13344:9;13340:22;13319:53;:::i;:::-;13309:63;;13265:117;13421:2;13447:53;13492:7;13483:6;13472:9;13468:22;13447:53;:::i;:::-;13437:63;;13392:118;13043:474;;;;;:::o;13523:182::-;13663:34;13659:1;13651:6;13647:14;13640:58;13523:182;:::o;13711:366::-;13853:3;13874:67;13938:2;13933:3;13874:67;:::i;:::-;13867:74;;13950:93;14039:3;13950:93;:::i;:::-;14068:2;14063:3;14059:12;14052:19;;13711:366;;;:::o;14083:419::-;14249:4;14287:2;14276:9;14272:18;14264:26;;14336:9;14330:4;14326:20;14322:1;14311:9;14307:17;14300:47;14364:131;14490:4;14364:131;:::i;:::-;14356:139;;14083:419;;;:::o;14508:180::-;14556:77;14553:1;14546:88;14653:4;14650:1;14643:15;14677:4;14674:1;14667:15;14694:320;14738:6;14775:1;14769:4;14765:12;14755:22;;14822:1;14816:4;14812:12;14843:18;14833:81;;14899:4;14891:6;14887:17;14877:27;;14833:81;14961:2;14953:6;14950:14;14930:18;14927:38;14924:84;;14980:18;;:::i;:::-;14924:84;14745:269;14694:320;;;:::o;15020:232::-;15160:34;15156:1;15148:6;15144:14;15137:58;15229:15;15224:2;15216:6;15212:15;15205:40;15020:232;:::o;15258:366::-;15400:3;15421:67;15485:2;15480:3;15421:67;:::i;:::-;15414:74;;15497:93;15586:3;15497:93;:::i;:::-;15615:2;15610:3;15606:12;15599:19;;15258:366;;;:::o;15630:419::-;15796:4;15834:2;15823:9;15819:18;15811:26;;15883:9;15877:4;15873:20;15869:1;15858:9;15854:17;15847:47;15911:131;16037:4;15911:131;:::i;:::-;15903:139;;15630:419;;;:::o;16055:221::-;16195:34;16191:1;16183:6;16179:14;16172:58;16264:4;16259:2;16251:6;16247:15;16240:29;16055:221;:::o;16282:366::-;16424:3;16445:67;16509:2;16504:3;16445:67;:::i;:::-;16438:74;;16521:93;16610:3;16521:93;:::i;:::-;16639:2;16634:3;16630:12;16623:19;;16282:366;;;:::o;16654:419::-;16820:4;16858:2;16847:9;16843:18;16835:26;;16907:9;16901:4;16897:20;16893:1;16882:9;16878:17;16871:47;16935:131;17061:4;16935:131;:::i;:::-;16927:139;;16654:419;;;:::o;17079:244::-;17219:34;17215:1;17207:6;17203:14;17196:58;17288:27;17283:2;17275:6;17271:15;17264:52;17079:244;:::o;17329:366::-;17471:3;17492:67;17556:2;17551:3;17492:67;:::i;:::-;17485:74;;17568:93;17657:3;17568:93;:::i;:::-;17686:2;17681:3;17677:12;17670:19;;17329:366;;;:::o;17701:419::-;17867:4;17905:2;17894:9;17890:18;17882:26;;17954:9;17948:4;17944:20;17940:1;17929:9;17925:17;17918:47;17982:131;18108:4;17982:131;:::i;:::-;17974:139;;17701:419;;;:::o;18126:221::-;18266:34;18262:1;18254:6;18250:14;18243:58;18335:4;18330:2;18322:6;18318:15;18311:29;18126:221;:::o;18353:366::-;18495:3;18516:67;18580:2;18575:3;18516:67;:::i;:::-;18509:74;;18592:93;18681:3;18592:93;:::i;:::-;18710:2;18705:3;18701:12;18694:19;;18353:366;;;:::o;18725:419::-;18891:4;18929:2;18918:9;18914:18;18906:26;;18978:9;18972:4;18968:20;18964:1;18953:9;18949:17;18942:47;19006:131;19132:4;19006:131;:::i;:::-;18998:139;;18725:419;;;:::o;19150:233::-;19290:34;19286:1;19278:6;19274:14;19267:58;19359:16;19354:2;19346:6;19342:15;19335:41;19150:233;:::o;19389:366::-;19531:3;19552:67;19616:2;19611:3;19552:67;:::i;:::-;19545:74;;19628:93;19717:3;19628:93;:::i;:::-;19746:2;19741:3;19737:12;19730:19;;19389:366;;;:::o;19761:419::-;19927:4;19965:2;19954:9;19950:18;19942:26;;20014:9;20008:4;20004:20;20000:1;19989:9;19985:17;19978:47;20042:131;20168:4;20042:131;:::i;:::-;20034:139;;19761:419;;;:::o;20186:180::-;20234:77;20231:1;20224:88;20331:4;20328:1;20321:15;20355:4;20352:1;20345:15;20372:180;20420:77;20417:1;20410:88;20517:4;20514:1;20507:15;20541:4;20538:1;20531:15;20558:233;20597:3;20620:24;20638:5;20620:24;:::i;:::-;20611:33;;20666:66;20659:5;20656:77;20653:103;;20736:18;;:::i;:::-;20653:103;20783:1;20776:5;20772:13;20765:20;;20558:233;;;:::o;20797:222::-;20937:34;20933:1;20925:6;20921:14;20914:58;21006:5;21001:2;20993:6;20989:15;20982:30;20797:222;:::o;21025:366::-;21167:3;21188:67;21252:2;21247:3;21188:67;:::i;:::-;21181:74;;21264:93;21353:3;21264:93;:::i;:::-;21382:2;21377:3;21373:12;21366:19;;21025:366;;;:::o;21397:419::-;21563:4;21601:2;21590:9;21586:18;21578:26;;21650:9;21644:4;21640:20;21636:1;21625:9;21621:17;21614:47;21678:131;21804:4;21678:131;:::i;:::-;21670:139;;21397:419;;;:::o;21822:191::-;21862:4;21882:20;21900:1;21882:20;:::i;:::-;21877:25;;21916:20;21934:1;21916:20;:::i;:::-;21911:25;;21955:1;21952;21949:8;21946:34;;;21960:18;;:::i;:::-;21946:34;22005:1;22002;21998:9;21990:17;;21822:191;;;;:::o;22019:230::-;22159:34;22155:1;22147:6;22143:14;22136:58;22228:13;22223:2;22215:6;22211:15;22204:38;22019:230;:::o;22255:366::-;22397:3;22418:67;22482:2;22477:3;22418:67;:::i;:::-;22411:74;;22494:93;22583:3;22494:93;:::i;:::-;22612:2;22607:3;22603:12;22596:19;;22255:366;;;:::o;22627:419::-;22793:4;22831:2;22820:9;22816:18;22808:26;;22880:9;22874:4;22870:20;22866:1;22855:9;22851:17;22844:47;22908:131;23034:4;22908:131;:::i;:::-;22900:139;;22627:419;;;:::o;23052:348::-;23092:7;23115:20;23133:1;23115:20;:::i;:::-;23110:25;;23149:20;23167:1;23149:20;:::i;:::-;23144:25;;23337:1;23269:66;23265:74;23262:1;23259:81;23254:1;23247:9;23240:17;23236:105;23233:131;;;23344:18;;:::i;:::-;23233:131;23392:1;23389;23385:9;23374:20;;23052:348;;;;:::o;23406:224::-;23546:34;23542:1;23534:6;23530:14;23523:58;23615:7;23610:2;23602:6;23598:15;23591:32;23406:224;:::o;23636:366::-;23778:3;23799:67;23863:2;23858:3;23799:67;:::i;:::-;23792:74;;23875:93;23964:3;23875:93;:::i;:::-;23993:2;23988:3;23984:12;23977:19;;23636:366;;;:::o;24008:419::-;24174:4;24212:2;24201:9;24197:18;24189:26;;24261:9;24255:4;24251:20;24247:1;24236:9;24232:17;24225:47;24289:131;24415:4;24289:131;:::i;:::-;24281:139;;24008:419;;;:::o;24433:172::-;24573:24;24569:1;24561:6;24557:14;24550:48;24433:172;:::o;24611:366::-;24753:3;24774:67;24838:2;24833:3;24774:67;:::i;:::-;24767:74;;24850:93;24939:3;24850:93;:::i;:::-;24968:2;24963:3;24959:12;24952:19;;24611:366;;;:::o;24983:419::-;25149:4;25187:2;25176:9;25172:18;25164:26;;25236:9;25230:4;25226:20;25222:1;25211:9;25207:17;25200:47;25264:131;25390:4;25264:131;:::i;:::-;25256:139;;24983:419;;;:::o;25408:171::-;25548:23;25544:1;25536:6;25532:14;25525:47;25408:171;:::o;25585:366::-;25727:3;25748:67;25812:2;25807:3;25748:67;:::i;:::-;25741:74;;25824:93;25913:3;25824:93;:::i;:::-;25942:2;25937:3;25933:12;25926:19;;25585:366;;;:::o;25957:419::-;26123:4;26161:2;26150:9;26146:18;26138:26;;26210:9;26204:4;26200:20;26196:1;26185:9;26181:17;26174:47;26238:131;26364:4;26238:131;:::i;:::-;26230:139;;25957:419;;;:::o;26382:176::-;26522:28;26518:1;26510:6;26506:14;26499:52;26382:176;:::o;26564:366::-;26706:3;26727:67;26791:2;26786:3;26727:67;:::i;:::-;26720:74;;26803:93;26892:3;26803:93;:::i;:::-;26921:2;26916:3;26912:12;26905:19;;26564:366;;;:::o;26936:419::-;27102:4;27140:2;27129:9;27125:18;27117:26;;27189:9;27183:4;27179:20;27175:1;27164:9;27160:17;27153:47;27217:131;27343:4;27217:131;:::i;:::-;27209:139;;26936:419;;;:::o;27361:177::-;27501:29;27497:1;27489:6;27485:14;27478:53;27361:177;:::o;27544:366::-;27686:3;27707:67;27771:2;27766:3;27707:67;:::i;:::-;27700:74;;27783:93;27872:3;27783:93;:::i;:::-;27901:2;27896:3;27892:12;27885:19;;27544:366;;;:::o;27916:419::-;28082:4;28120:2;28109:9;28105:18;28097:26;;28169:9;28163:4;28159:20;28155:1;28144:9;28140:17;28133:47;28197:131;28323:4;28197:131;:::i;:::-;28189:139;;27916:419;;;:::o;28341:305::-;28381:3;28400:20;28418:1;28400:20;:::i;:::-;28395:25;;28434:20;28452:1;28434:20;:::i;:::-;28429:25;;28588:1;28520:66;28516:74;28513:1;28510:81;28507:107;;;28594:18;;:::i;:::-;28507:107;28638:1;28635;28631:9;28624:16;;28341:305;;;;:::o;28652:179::-;28792:31;28788:1;28780:6;28776:14;28769:55;28652:179;:::o;28837:366::-;28979:3;29000:67;29064:2;29059:3;29000:67;:::i;:::-;28993:74;;29076:93;29165:3;29076:93;:::i;:::-;29194:2;29189:3;29185:12;29178:19;;28837:366;;;:::o;29209:419::-;29375:4;29413:2;29402:9;29398:18;29390:26;;29462:9;29456:4;29452:20;29448:1;29437:9;29433:17;29426:47;29490:131;29616:4;29490:131;:::i;:::-;29482:139;;29209:419;;;:::o;29634:293::-;29774:34;29770:1;29762:6;29758:14;29751:58;29843:34;29838:2;29830:6;29826:15;29819:59;29912:7;29907:2;29899:6;29895:15;29888:32;29634:293;:::o;29933:366::-;30075:3;30096:67;30160:2;30155:3;30096:67;:::i;:::-;30089:74;;30172:93;30261:3;30172:93;:::i;:::-;30290:2;30285:3;30281:12;30274:19;;29933:366;;;:::o;30305:419::-;30471:4;30509:2;30498:9;30494:18;30486:26;;30558:9;30552:4;30548:20;30544:1;30533:9;30529:17;30522:47;30586:131;30712:4;30586:131;:::i;:::-;30578:139;;30305:419;;;:::o;30730:238::-;30870:34;30866:1;30858:6;30854:14;30847:58;30939:21;30934:2;30926:6;30922:15;30915:46;30730:238;:::o;30974:366::-;31116:3;31137:67;31201:2;31196:3;31137:67;:::i;:::-;31130:74;;31213:93;31302:3;31213:93;:::i;:::-;31331:2;31326:3;31322:12;31315:19;;30974:366;;;:::o;31346:419::-;31512:4;31550:2;31539:9;31535:18;31527:26;;31599:9;31593:4;31589:20;31585:1;31574:9;31570:17;31563:47;31627:131;31753:4;31627:131;:::i;:::-;31619:139;;31346:419;;;:::o;31771:235::-;31911:34;31907:1;31899:6;31895:14;31888:58;31980:18;31975:2;31967:6;31963:15;31956:43;31771:235;:::o;32012:366::-;32154:3;32175:67;32239:2;32234:3;32175:67;:::i;:::-;32168:74;;32251:93;32340:3;32251:93;:::i;:::-;32369:2;32364:3;32360:12;32353:19;;32012:366;;;:::o;32384:419::-;32550:4;32588:2;32577:9;32573:18;32565:26;;32637:9;32631:4;32627:20;32623:1;32612:9;32608:17;32601:47;32665:131;32791:4;32665:131;:::i;:::-;32657:139;;32384:419;;;:::o;32809:148::-;32911:11;32948:3;32933:18;;32809:148;;;;:::o;32963:377::-;33069:3;33097:39;33130:5;33097:39;:::i;:::-;33152:89;33234:6;33229:3;33152:89;:::i;:::-;33145:96;;33250:52;33295:6;33290:3;33283:4;33276:5;33272:16;33250:52;:::i;:::-;33327:6;33322:3;33318:16;33311:23;;33073:267;32963:377;;;;:::o;33346:141::-;33395:4;33418:3;33410:11;;33441:3;33438:1;33431:14;33475:4;33472:1;33462:18;33454:26;;33346:141;;;:::o;33517:845::-;33620:3;33657:5;33651:12;33686:36;33712:9;33686:36;:::i;:::-;33738:89;33820:6;33815:3;33738:89;:::i;:::-;33731:96;;33858:1;33847:9;33843:17;33874:1;33869:137;;;;34020:1;34015:341;;;;33836:520;;33869:137;33953:4;33949:9;33938;33934:25;33929:3;33922:38;33989:6;33984:3;33980:16;33973:23;;33869:137;;34015:341;34082:38;34114:5;34082:38;:::i;:::-;34142:1;34156:154;34170:6;34167:1;34164:13;34156:154;;;34244:7;34238:14;34234:1;34229:3;34225:11;34218:35;34294:1;34285:7;34281:15;34270:26;;34192:4;34189:1;34185:12;34180:17;;34156:154;;;34339:6;34334:3;34330:16;34323:23;;34022:334;;33836:520;;33624:738;;33517:845;;;;:::o;34368:589::-;34593:3;34615:95;34706:3;34697:6;34615:95;:::i;:::-;34608:102;;34727:95;34818:3;34809:6;34727:95;:::i;:::-;34720:102;;34839:92;34927:3;34918:6;34839:92;:::i;:::-;34832:99;;34948:3;34941:10;;34368:589;;;;;;:::o;34963:239::-;35103:34;35099:1;35091:6;35087:14;35080:58;35172:22;35167:2;35159:6;35155:15;35148:47;34963:239;:::o;35208:366::-;35350:3;35371:67;35435:2;35430:3;35371:67;:::i;:::-;35364:74;;35447:93;35536:3;35447:93;:::i;:::-;35565:2;35560:3;35556:12;35549:19;;35208:366;;;:::o;35580:419::-;35746:4;35784:2;35773:9;35769:18;35761:26;;35833:9;35827:4;35823:20;35819:1;35808:9;35804:17;35797:47;35861:131;35987:4;35861:131;:::i;:::-;35853:139;;35580:419;;;:::o;36005:225::-;36145:34;36141:1;36133:6;36129:14;36122:58;36214:8;36209:2;36201:6;36197:15;36190:33;36005:225;:::o;36236:366::-;36378:3;36399:67;36463:2;36458:3;36399:67;:::i;:::-;36392:74;;36475:93;36564:3;36475:93;:::i;:::-;36593:2;36588:3;36584:12;36577:19;;36236:366;;;:::o;36608:419::-;36774:4;36812:2;36801:9;36797:18;36789:26;;36861:9;36855:4;36851:20;36847:1;36836:9;36832:17;36825:47;36889:131;37015:4;36889:131;:::i;:::-;36881:139;;36608:419;;;:::o;37033:237::-;37173:34;37169:1;37161:6;37157:14;37150:58;37242:20;37237:2;37229:6;37225:15;37218:45;37033:237;:::o;37276:366::-;37418:3;37439:67;37503:2;37498:3;37439:67;:::i;:::-;37432:74;;37515:93;37604:3;37515:93;:::i;:::-;37633:2;37628:3;37624:12;37617:19;;37276:366;;;:::o;37648:419::-;37814:4;37852:2;37841:9;37837:18;37829:26;;37901:9;37895:4;37891:20;37887:1;37876:9;37872:17;37865:47;37929:131;38055:4;37929:131;:::i;:::-;37921:139;;37648:419;;;:::o;38073:225::-;38213:34;38209:1;38201:6;38197:14;38190:58;38282:8;38277:2;38269:6;38265:15;38258:33;38073:225;:::o;38304:366::-;38446:3;38467:67;38531:2;38526:3;38467:67;:::i;:::-;38460:74;;38543:93;38632:3;38543:93;:::i;:::-;38661:2;38656:3;38652:12;38645:19;;38304:366;;;:::o;38676:419::-;38842:4;38880:2;38869:9;38865:18;38857:26;;38929:9;38923:4;38919:20;38915:1;38904:9;38900:17;38893:47;38957:131;39083:4;38957:131;:::i;:::-;38949:139;;38676:419;;;:::o;39101:224::-;39241:34;39237:1;39229:6;39225:14;39218:58;39310:7;39305:2;39297:6;39293:15;39286:32;39101:224;:::o;39331:366::-;39473:3;39494:67;39558:2;39553:3;39494:67;:::i;:::-;39487:74;;39570:93;39659:3;39570:93;:::i;:::-;39688:2;39683:3;39679:12;39672:19;;39331:366;;;:::o;39703:419::-;39869:4;39907:2;39896:9;39892:18;39884:26;;39956:9;39950:4;39946:20;39942:1;39931:9;39927:17;39920:47;39984:131;40110:4;39984:131;:::i;:::-;39976:139;;39703:419;;;:::o;40128:229::-;40268:34;40264:1;40256:6;40252:14;40245:58;40337:12;40332:2;40324:6;40320:15;40313:37;40128:229;:::o;40363:366::-;40505:3;40526:67;40590:2;40585:3;40526:67;:::i;:::-;40519:74;;40602:93;40691:3;40602:93;:::i;:::-;40720:2;40715:3;40711:12;40704:19;;40363:366;;;:::o;40735:419::-;40901:4;40939:2;40928:9;40924:18;40916:26;;40988:9;40982:4;40978:20;40974:1;40963:9;40959:17;40952:47;41016:131;41142:4;41016:131;:::i;:::-;41008:139;;40735:419;;;:::o;41160:234::-;41300:34;41296:1;41288:6;41284:14;41277:58;41369:17;41364:2;41356:6;41352:15;41345:42;41160:234;:::o;41400:366::-;41542:3;41563:67;41627:2;41622:3;41563:67;:::i;:::-;41556:74;;41639:93;41728:3;41639:93;:::i;:::-;41757:2;41752:3;41748:12;41741:19;;41400:366;;;:::o;41772:419::-;41938:4;41976:2;41965:9;41961:18;41953:26;;42025:9;42019:4;42015:20;42011:1;42000:9;41996:17;41989:47;42053:131;42179:4;42053:131;:::i;:::-;42045:139;;41772:419;;;:::o;42197:98::-;42248:6;42282:5;42276:12;42266:22;;42197:98;;;:::o;42301:168::-;42384:11;42418:6;42413:3;42406:19;42458:4;42453:3;42449:14;42434:29;;42301:168;;;;:::o;42475:360::-;42561:3;42589:38;42621:5;42589:38;:::i;:::-;42643:70;42706:6;42701:3;42643:70;:::i;:::-;42636:77;;42722:52;42767:6;42762:3;42755:4;42748:5;42744:16;42722:52;:::i;:::-;42799:29;42821:6;42799:29;:::i;:::-;42794:3;42790:39;42783:46;;42565:270;42475:360;;;;:::o;42841:640::-;43036:4;43074:3;43063:9;43059:19;43051:27;;43088:71;43156:1;43145:9;43141:17;43132:6;43088:71;:::i;:::-;43169:72;43237:2;43226:9;43222:18;43213:6;43169:72;:::i;:::-;43251;43319:2;43308:9;43304:18;43295:6;43251:72;:::i;:::-;43370:9;43364:4;43360:20;43355:2;43344:9;43340:18;43333:48;43398:76;43469:4;43460:6;43398:76;:::i;:::-;43390:84;;42841:640;;;;;;;:::o;43487:141::-;43543:5;43574:6;43568:13;43559:22;;43590:32;43616:5;43590:32;:::i;:::-;43487:141;;;;:::o;43634:349::-;43703:6;43752:2;43740:9;43731:7;43727:23;43723:32;43720:119;;;43758:79;;:::i;:::-;43720:119;43878:1;43903:63;43958:7;43949:6;43938:9;43934:22;43903:63;:::i;:::-;43893:73;;43849:127;43634:349;;;;:::o;43989:180::-;44037:77;44034:1;44027:88;44134:4;44131:1;44124:15;44158:4;44155:1;44148:15;44175:185;44215:1;44232:20;44250:1;44232:20;:::i;:::-;44227:25;;44266:20;44284:1;44266:20;:::i;:::-;44261:25;;44305:1;44295:35;;44310:18;;:::i;:::-;44295:35;44352:1;44349;44345:9;44340:14;;44175:185;;;;:::o;44366:176::-;44398:1;44415:20;44433:1;44415:20;:::i;:::-;44410:25;;44449:20;44467:1;44449:20;:::i;:::-;44444:25;;44488:1;44478:35;;44493:18;;:::i;:::-;44478:35;44534:1;44531;44527:9;44522:14;;44366:176;;;;:::o;44548:220::-;44688:34;44684:1;44676:6;44672:14;44665:58;44757:3;44752:2;44744:6;44740:15;44733:28;44548:220;:::o;44774:366::-;44916:3;44937:67;45001:2;44996:3;44937:67;:::i;:::-;44930:74;;45013:93;45102:3;45013:93;:::i;:::-;45131:2;45126:3;45122:12;45115:19;;44774:366;;;:::o;45146:419::-;45312:4;45350:2;45339:9;45335:18;45327:26;;45399:9;45393:4;45389:20;45385:1;45374:9;45370:17;45363:47;45427:131;45553:4;45427:131;:::i;:::-;45419:139;;45146:419;;;:::o;45571:227::-;45711:34;45707:1;45699:6;45695:14;45688:58;45780:10;45775:2;45767:6;45763:15;45756:35;45571:227;:::o;45804:366::-;45946:3;45967:67;46031:2;46026:3;45967:67;:::i;:::-;45960:74;;46043:93;46132:3;46043:93;:::i;:::-;46161:2;46156:3;46152:12;46145:19;;45804:366;;;:::o;46176:419::-;46342:4;46380:2;46369:9;46365:18;46357:26;;46429:9;46423:4;46419:20;46415:1;46404:9;46400:17;46393:47;46457:131;46583:4;46457:131;:::i;:::-;46449:139;;46176:419;;;:::o
Swarm Source
ipfs://d4cc9b1a8ebdd0d1d1e642166dc1fa0da04f3dd5a0fb35994e725e290e2f7932
Loading...
Loading
Loading...
Loading
[ 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.