ERC-721
NFT
Overview
Max Total Supply
3,333 RFL
Holders
1,767
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 RFLLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Reflections
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-12 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /* Fully commented standard ERC721 Distilled from OpenZeppelin Docs Base for Building ERC721 by Martin McConnell All the utility without the fluff.*/ interface IERC165 { function supportsInterface(bytes4 interfaceId) external view returns (bool); } interface IERC721 is IERC165 { //@dev Emitted when `tokenId` token is transferred from `from` to `to`. event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); //@dev Emitted when `owner` enables `approved` to manage the `tokenId` token. event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); //@dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. event ApprovalForAll(address indexed owner, address indexed operator, bool approved); //@dev Returns the number of tokens in ``owner``'s account. function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from,address to,uint256 tokenId) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; //@dev Returns if the `operator` is allowed to manage all of the assets of `owner`. function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; } interface IERC721Metadata is IERC721 { //@dev Returns the token collection name. function name() external view returns (string memory); //@dev Returns the token collection symbol. function symbol() external view returns (string memory); //@dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. function tokenURI(uint256 tokenId) external view returns (string memory); } interface 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); } 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, "Addr: cant send val, rcpt revert"); } /** * @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, "Addr: low-level call value fail"); } /** * @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, "Addr: insufficient balance 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, "Addr: low-level static call fail"); } /** * @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), "Addr: static call 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, "Addr: low-level del 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), "Addr: delegate call 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); } } } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is 0x address"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } abstract contract Functional { function toString(uint256 value) internal pure returns (string memory) { 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); } bool private _reentryKey = false; modifier reentryLock { require(!_reentryKey, "attempt reenter locked function"); _reentryKey = true; _; _reentryKey = false; } } // ****************************************************************************************************************************** // ************************************************** Start of Main Contract *************************************************** // ****************************************************************************************************************************** contract Reflections is IERC721, Ownable, Functional { using Address for address; // Token name string private _name; // Token symbol string private _symbol; // URI Root Location for Json Files string private _baseURI; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Specific Functionality bool public mintActive; bool public whitelistActive; bool private _hideTokens; //for URI redirects uint256 public price; uint256 public totalTokens; uint256 public numberMinted; uint256 public maxPerWallet; uint256 public reservedTokens; mapping(address => uint256) private _mintTracker; mapping(address => bool) private _whitelist; address doxxed = payable(0xC1FDc68dc63d3316F32420d4d2c3DeA43091bCDD); address artist = payable(0x5039CDa148fDd50818D5Eb8dBfd8bE0c0Bd1B082); address toronto = payable(0xB9f14dae23fe34c267881339B35dCE1e297093Da); /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor() { _name = "Reflections NFT"; _symbol = "RFL"; _baseURI = "https://reflectionsnft.io/metadata/"; _hideTokens = true; totalTokens = 3333; price = 100 * (10 ** 15); // Replace leading value with price in finney maxPerWallet = 2; reservedTokens = 233; // uncomment to reserve tokens for the owner or other purposes } //@dev See {IERC165-supportsInterface}. Interfaces Supported by this Standard function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || interfaceId == type(IERC165).interfaceId || interfaceId == Reflections.onERC721Received.selector; } // Standard Withdraw function for the owner to pull the contract function withdraw() external onlyOwner { uint256 totalBalance = address(this).balance; bool success; uint256 sendAmount = (totalBalance * 55) / 100; (success, ) = doxxed.call{value: sendAmount}(""); require(success, "Transaction Unsuccessful"); sendAmount = (totalBalance * 30) / 100; (success, ) = artist.call{value: sendAmount}(""); require(success, "Transaction Unsuccessful"); sendAmount = (totalBalance * 15) / 100; (success, ) = toronto.call{value: sendAmount}(""); require(success, "Transaction Unsuccessful"); } function ownerMint(address _to, uint256 qty) external onlyOwner { require((numberMinted + qty) > numberMinted, "Math overflow error"); require((numberMinted + qty) <= totalTokens, "Cannot fill order"); uint256 mintSeedValue = numberMinted; //Store the starting value of the mint batch if (reservedTokens >= qty) { reservedTokens -= qty; } else { reservedTokens = 0; } for(uint256 i = 0; i < qty; i++) { _safeMint(_to, mintSeedValue + i); numberMinted ++; //reservedTokens can be reset, numberMinted can not } } function airDrop(address[] memory _to) external onlyOwner { uint256 qty = _to.length; require((numberMinted + qty) > numberMinted, "Math overflow error"); require((numberMinted + qty) <= totalTokens, "Cannot fill order"); uint256 mintSeedValue = numberMinted; if (reservedTokens >= qty) { reservedTokens -= qty; } else { reservedTokens = 0; } for(uint256 i = 0; i < qty; i++) { _safeMint(_to[i], mintSeedValue + i); numberMinted ++; //reservedTokens can be reset, numberMinted can not } } function mint() external payable reentryLock { address _to = _msgSender(); require(msg.value == price, "Mint: Insufficient Funds"); require((1 + reservedTokens + numberMinted) <= totalTokens, "Mint: Not enough avaialability"); require((_mintTracker[_msgSender()] + 1) <= maxPerWallet, "Mint: Max tkn per wallet exceeded"); require(mintActive, "Mint not open"); uint256 mintSeedValue = numberMinted; //Store the starting value of the mint batch _mintTracker[_msgSender()]++; //send tokens _safeMint(_to, mintSeedValue); numberMinted ++; } function WLmint() external payable reentryLock { address _to = _msgSender(); require(msg.value == price, "Mint: Insufficient Funds"); require((1 + reservedTokens + numberMinted) <= totalTokens, "Mint: Not enough avaialability"); require(whitelistActive, "Whitelist not open"); require(_whitelist[_msgSender()] == true, "not Whitelisted or already purchased"); _whitelist[_msgSender()] = false; //clear name from whitelist _mintTracker[_msgSender()]++; uint256 mintSeedValue = numberMinted; //Store the starting value of the mint batch //send tokens _safeMint(_to, mintSeedValue); numberMinted ++; } // allows holders to burn their own tokens if desired function burn(uint256 tokenID) external { require(_msgSender() == ownerOf(tokenID)); _burn(tokenID); } ////////////////////////////////////////////////////////////// //////////////////// Setters and Getters ///////////////////// ////////////////////////////////////////////////////////////// function whiteList(address account) external onlyOwner { _whitelist[account] = true; } function whiteListMany(address[] memory accounts) external onlyOwner { for (uint256 i; i < accounts.length; i++) { _whitelist[accounts[i]] = true; } } function checkWhitelist(address testAddress) external view returns (bool) { if (_whitelist[testAddress] == true) { return true; } return false; } function setMaxWalletThreshold(uint256 maxWallet) external onlyOwner { maxPerWallet = maxWallet; } function setBaseURI(string memory newURI) public onlyOwner { _baseURI = newURI; } function activateMint() public onlyOwner { mintActive = true; } function deactivateMint() public onlyOwner { mintActive = false; } function activateWL() public onlyOwner { whitelistActive = true; } function deactivateWL() public onlyOwner { whitelistActive = false; } function setPrice(uint256 newPrice) public onlyOwner { price = newPrice; } function setTotalTokens(uint256 numTokens) public onlyOwner { totalTokens = numTokens; } function setReserve(uint256 newReserve) public onlyOwner { reservedTokens = newReserve; } function totalSupply() external view returns (uint256) { return numberMinted; //stupid bs for etherscan's call } function hideTokens() external onlyOwner { _hideTokens = true; } function revealTokens() external onlyOwner { _hideTokens = false; } function getBalance(address tokenAddress) view external returns (uint256) { //return _balances[tokenAddress]; //shows 0 on etherscan due to overflow error return _balances[tokenAddress] / (10**15); //temporary fix to report in finneys } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: bal qry for zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: own query nonexist tkn"); return owner; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ownerOf(tokenId); require(to != owner, "ERC721: approval current owner"); require( msg.sender == owner || isApprovedForAll(owner, msg.sender), "ERC721: caller !owner/!approved" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved nonexistent tkn"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != msg.sender, "ERC721: approve to caller"); _operatorApprovals[msg.sender][operator] = approved; emit ApprovalForAll(msg.sender, operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(msg.sender, tokenId), "ERC721: txfr !owner/approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(msg.sender, tokenId), "ERC721: txfr !owner/approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "txfr to non ERC721Reciever"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: op query nonexistent tkn"); address owner = ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "txfr to non ERC721Reciever" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ownerOf(tokenId) == from, "ERC721: txfr token not owned"); require(to != address(0), "ERC721: txfr to 0x0 address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(msg.sender, from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("txfr to non ERC721Reciever"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } // *********************** ERC721 Token Receiver ********************** /** * @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) { //InterfaceID=0x150b7a02 return this.onERC721Received.selector; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} // **************************************** Metadata Standard Functions ********** //@dev Returns the token collection name. function name() external view returns (string memory){ return _name; } //@dev Returns the token collection symbol. function symbol() external view returns (string memory){ return _symbol; } //@dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. function tokenURI(uint256 tokenId) external view returns (string memory){ require(_exists(tokenId), "ERC721Metadata: URI 0x0 token"); string memory tokenuri; if (_hideTokens) { //redirect to mystery box tokenuri = string(abi.encodePacked(_baseURI, "mystery.json")); } else { //Input flag data here to send to reveal URI tokenuri = string(abi.encodePacked(_baseURI, toString(tokenId), ".json")); } return tokenuri; } function contractURI() public view returns (string memory) { return string(abi.encodePacked(_baseURI,"contract.json")); } // ******************************************************************************* receive() external payable {} fallback() external payable {} }
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"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"WLmint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"activateMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"activateWL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_to","type":"address[]"}],"name":"airDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"testAddress","type":"address"}],"name":"checkWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deactivateMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deactivateWL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hideTokens","outputs":[],"stateMutability":"nonpayable","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":"maxPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"qty","type":"uint256"}],"name":"ownerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reservedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"revealTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"setMaxWalletThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newReserve","type":"uint256"}],"name":"setReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokens","type":"uint256"}],"name":"setTotalTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"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":[],"name":"totalTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"whiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"whiteListMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whitelistActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405260008060146101000a81548160ff02191690831515021790555073c1fdc68dc63d3316f32420d4d2c3dea43091bcdd601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550735039cda148fdd50818d5eb8dbfd8be0c0bd1b082601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073b9f14dae23fe34c267881339b35dce1e297093da601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200012a57600080fd5b506200014b6200013f6200026260201b60201c565b6200026a60201b60201c565b6040518060400160405280600f81526020017f5265666c656374696f6e73204e4654000000000000000000000000000000000081525060019080519060200190620001989291906200032e565b506040518060400160405280600381526020017f52464c000000000000000000000000000000000000000000000000000000000081525060029080519060200190620001e69291906200032e565b50604051806060016040528060238152602001620056226023913960039080519060200190620002189291906200032e565b506001600860026101000a81548160ff021916908315150217905550610d05600a8190555067016345785d8a00006009819055506002600c8190555060e9600d8190555062000443565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200033c90620003de565b90600052602060002090601f016020900481019282620003605760008555620003ac565b82601f106200037b57805160ff1916838001178555620003ac565b82800160010185558215620003ac579182015b82811115620003ab5782518255916020019190600101906200038e565b5b509050620003bb9190620003bf565b5090565b5b80821115620003da576000816000905550600101620003c0565b5090565b60006002820490506001821680620003f757607f821691505b602082108114156200040e576200040d62000414565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6151cf80620004536000396000f3fe60806040526004361061028b5760003560e01c8063484b973c1161015a578063a22cb465116100c1578063c87b56dd1161007a578063c87b56dd146108f7578063c91c046214610934578063e8a3d4851461094b578063e985e9c514610976578063f2fde38b146109b3578063f8b2cb4f146109dc57610292565b8063a22cb46514610832578063b0b922631461085b578063b3aa880614610884578063b5b3e214146108ad578063b733937c146108c4578063b88d4fde146108ce57610292565b80637e1c0c09116101135780637e1c0c0914610746578063877b8644146107715780638da5cb5b1461078857806391b7f5ed146107b357806395d89b41146107dc578063a035b1fe1461080757610292565b8063484b973c1461063857806349a772b51461066157806355f804b31461068c5780636352211e146106b557806370a08231146106f2578063715018a61461072f57610292565b806323b872dd116101fe5780633ccfd60b116101b75780633ccfd60b146105525780634256dbe31461056957806342842e0e1461059257806342966c68146105bb57806343d67565146105e4578063453c23101461060d57610292565b806323b872dd1461049057806325fd90f3146104b957806329869c94146104e45780632e56f71e146104fb578063372c12b1146105125780633ba5939d1461053b57610292565b8063095ea7b311610250578063095ea7b31461038d5780631249c58b146103b6578063150b7a02146103c057806315a55347146103fd57806318160ddd146104285780631950c2181461045357610292565b8062b6849f1461029457806301ffc9a7146102bd57806302ce5813146102fa57806306fdde0314610325578063081812fc1461035057610292565b3661029257005b005b3480156102a057600080fd5b506102bb60048036038101906102b69190613c3e565b610a19565b005b3480156102c957600080fd5b506102e460048036038101906102df9190613c87565b610be0565b6040516102f191906143be565b60405180910390f35b34801561030657600080fd5b5061030f610d69565b60405161031c91906143be565b60405180910390f35b34801561033157600080fd5b5061033a610d7c565b60405161034791906143f4565b60405180910390f35b34801561035c57600080fd5b5061037760048036038101906103729190613d2a565b610e0e565b6040516103849190614357565b60405180910390f35b34801561039957600080fd5b506103b460048036038101906103af9190613bfe565b610e93565b005b6103be610f9d565b005b3480156103cc57600080fd5b506103e760048036038101906103e29190613ab3565b611241565b6040516103f491906143d9565b60405180910390f35b34801561040957600080fd5b50610412611256565b60405161041f9190614756565b60405180910390f35b34801561043457600080fd5b5061043d61125c565b60405161044a9190614756565b60405180910390f35b34801561045f57600080fd5b5061047a600480360381019061047591906139f3565b611266565b60405161048791906143be565b60405180910390f35b34801561049c57600080fd5b506104b760048036038101906104b29190613a60565b6112d4565b005b3480156104c557600080fd5b506104ce61132d565b6040516104db91906143be565b60405180910390f35b3480156104f057600080fd5b506104f9611340565b005b34801561050757600080fd5b506105106113d9565b005b34801561051e57600080fd5b50610539600480360381019061053491906139f3565b611472565b005b34801561054757600080fd5b50610550611549565b005b34801561055e57600080fd5b506105676115e2565b005b34801561057557600080fd5b50610590600480360381019061058b9190613d2a565b611926565b005b34801561059e57600080fd5b506105b960048036038101906105b49190613a60565b6119ac565b005b3480156105c757600080fd5b506105e260048036038101906105dd9190613d2a565b6119cc565b005b3480156105f057600080fd5b5061060b60048036038101906106069190613c3e565b611a1f565b005b34801561061957600080fd5b50610622611b30565b60405161062f9190614756565b60405180910390f35b34801561064457600080fd5b5061065f600480360381019061065a9190613bfe565b611b36565b005b34801561066d57600080fd5b50610676611cdd565b6040516106839190614756565b60405180910390f35b34801561069857600080fd5b506106b360048036038101906106ae9190613ce1565b611ce3565b005b3480156106c157600080fd5b506106dc60048036038101906106d79190613d2a565b611d79565b6040516106e99190614357565b60405180910390f35b3480156106fe57600080fd5b50610719600480360381019061071491906139f3565b611e2b565b6040516107269190614756565b60405180910390f35b34801561073b57600080fd5b50610744611ee3565b005b34801561075257600080fd5b5061075b611f6b565b6040516107689190614756565b60405180910390f35b34801561077d57600080fd5b50610786611f71565b005b34801561079457600080fd5b5061079d61200a565b6040516107aa9190614357565b60405180910390f35b3480156107bf57600080fd5b506107da60048036038101906107d59190613d2a565b612033565b005b3480156107e857600080fd5b506107f16120b9565b6040516107fe91906143f4565b60405180910390f35b34801561081357600080fd5b5061081c61214b565b6040516108299190614756565b60405180910390f35b34801561083e57600080fd5b5061085960048036038101906108549190613bbe565b612151565b005b34801561086757600080fd5b50610882600480360381019061087d9190613d2a565b6122bd565b005b34801561089057600080fd5b506108ab60048036038101906108a69190613d2a565b612343565b005b3480156108b957600080fd5b506108c26123c9565b005b6108cc612462565b005b3480156108da57600080fd5b506108f560048036038101906108f09190613b3b565b612768565b005b34801561090357600080fd5b5061091e60048036038101906109199190613d2a565b6127c3565b60405161092b91906143f4565b60405180910390f35b34801561094057600080fd5b50610949612883565b005b34801561095757600080fd5b5061096061291c565b60405161096d91906143f4565b60405180910390f35b34801561098257600080fd5b5061099d60048036038101906109989190613a20565b612944565b6040516109aa91906143be565b60405180910390f35b3480156109bf57600080fd5b506109da60048036038101906109d591906139f3565b6129d8565b005b3480156109e857600080fd5b50610a0360048036038101906109fe91906139f3565b612ad0565b604051610a109190614756565b60405180910390f35b610a21612b2b565b73ffffffffffffffffffffffffffffffffffffffff16610a3f61200a565b73ffffffffffffffffffffffffffffffffffffffff1614610a95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8c90614676565b60405180910390fd5b600081519050600b5481600b54610aac9190614887565b11610aec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae390614736565b60405180910390fd5b600a5481600b54610afd9190614887565b1115610b3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b35906145b6565b60405180910390fd5b6000600b54905081600d5410610b6c5781600d6000828254610b609190614968565b92505081905550610b75565b6000600d819055505b60005b82811015610bda57610baf848281518110610b9657610b95614bbc565b5b60200260200101518284610baa9190614887565b612b33565b600b6000815480929190610bc290614ab5565b91905055508080610bd290614ab5565b915050610b78565b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610cab57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610d1357507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610d62575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600860019054906101000a900460ff1681565b606060018054610d8b90614a52565b80601f0160208091040260200160405190810160405280929190818152602001828054610db790614a52565b8015610e045780601f10610dd957610100808354040283529160200191610e04565b820191906000526020600020905b815481529060010190602001808311610de757829003601f168201915b5050505050905090565b6000610e1982612b51565b610e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4f906144b6565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610e9e82611d79565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f06906144d6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610f4f5750610f4e8133612944565b5b610f8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f85906145d6565b60405180910390fd5b610f988383612bbd565b505050565b600060149054906101000a900460ff1615610fed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe4906145f6565b60405180910390fd5b6001600060146101000a81548160ff0219169083151502179055506000611012612b2b565b90506009543414611058576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104f90614696565b60405180910390fd5b600a54600b54600d54600161106d9190614887565b6110779190614887565b11156110b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110af90614416565b60405180910390fd5b600c546001600e60006110c9612b2b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461110e9190614887565b111561114f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611146906146f6565b60405180910390fd5b600860009054906101000a900460ff1661119e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611195906146d6565b60405180910390fd5b6000600b549050600e60006111b1612b2b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906111fc90614ab5565b919050555061120b8282612b33565b600b600081548092919061121e90614ab5565b9190505550505060008060146101000a81548160ff021916908315150217905550565b600063150b7a0260e01b905095945050505050565b600d5481565b6000600b54905090565b600060011515600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156112ca57600190506112cf565b600090505b919050565b6112de3382612c76565b61131d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611314906146b6565b60405180910390fd5b611328838383612d54565b505050565b600860009054906101000a900460ff1681565b611348612b2b565b73ffffffffffffffffffffffffffffffffffffffff1661136661200a565b73ffffffffffffffffffffffffffffffffffffffff16146113bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b390614676565b60405180910390fd5b6000600860016101000a81548160ff021916908315150217905550565b6113e1612b2b565b73ffffffffffffffffffffffffffffffffffffffff166113ff61200a565b73ffffffffffffffffffffffffffffffffffffffff1614611455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144c90614676565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550565b61147a612b2b565b73ffffffffffffffffffffffffffffffffffffffff1661149861200a565b73ffffffffffffffffffffffffffffffffffffffff16146114ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e590614676565b60405180910390fd5b6001600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611551612b2b565b73ffffffffffffffffffffffffffffffffffffffff1661156f61200a565b73ffffffffffffffffffffffffffffffffffffffff16146115c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bc90614676565b60405180910390fd5b6000600860026101000a81548160ff021916908315150217905550565b6115ea612b2b565b73ffffffffffffffffffffffffffffffffffffffff1661160861200a565b73ffffffffffffffffffffffffffffffffffffffff161461165e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165590614676565b60405180910390fd5b60004790506000806064603784611675919061490e565b61167f91906148dd565b9050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516116c790614342565b60006040518083038185875af1925050503d8060008114611704576040519150601f19603f3d011682016040523d82523d6000602084013e611709565b606091505b5050809250508161174f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611746906144f6565b60405180910390fd5b6064601e8461175e919061490e565b61176891906148dd565b9050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516117b090614342565b60006040518083038185875af1925050503d80600081146117ed576040519150601f19603f3d011682016040523d82523d6000602084013e6117f2565b606091505b50508092505081611838576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182f906144f6565b60405180910390fd5b6064600f84611847919061490e565b61185191906148dd565b9050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161189990614342565b60006040518083038185875af1925050503d80600081146118d6576040519150601f19603f3d011682016040523d82523d6000602084013e6118db565b606091505b50508092505081611921576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611918906144f6565b60405180910390fd5b505050565b61192e612b2b565b73ffffffffffffffffffffffffffffffffffffffff1661194c61200a565b73ffffffffffffffffffffffffffffffffffffffff16146119a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199990614676565b60405180910390fd5b80600d8190555050565b6119c783838360405180602001604052806000815250612768565b505050565b6119d581611d79565b73ffffffffffffffffffffffffffffffffffffffff166119f3612b2b565b73ffffffffffffffffffffffffffffffffffffffff1614611a1357600080fd5b611a1c81612fb0565b50565b611a27612b2b565b73ffffffffffffffffffffffffffffffffffffffff16611a4561200a565b73ffffffffffffffffffffffffffffffffffffffff1614611a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9290614676565b60405180910390fd5b60005b8151811015611b2c576001600f6000848481518110611ac057611abf614bbc565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611b2490614ab5565b915050611a9e565b5050565b600c5481565b611b3e612b2b565b73ffffffffffffffffffffffffffffffffffffffff16611b5c61200a565b73ffffffffffffffffffffffffffffffffffffffff1614611bb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba990614676565b60405180910390fd5b600b5481600b54611bc39190614887565b11611c03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfa90614736565b60405180910390fd5b600a5481600b54611c149190614887565b1115611c55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4c906145b6565b60405180910390fd5b6000600b54905081600d5410611c835781600d6000828254611c779190614968565b92505081905550611c8c565b6000600d819055505b60005b82811015611cd757611cac848284611ca79190614887565b612b33565b600b6000815480929190611cbf90614ab5565b91905055508080611ccf90614ab5565b915050611c8f565b50505050565b600b5481565b611ceb612b2b565b73ffffffffffffffffffffffffffffffffffffffff16611d0961200a565b73ffffffffffffffffffffffffffffffffffffffff1614611d5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5690614676565b60405180910390fd5b8060039080519060200190611d75929190613713565b5050565b6000806004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1990614556565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9390614636565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611eeb612b2b565b73ffffffffffffffffffffffffffffffffffffffff16611f0961200a565b73ffffffffffffffffffffffffffffffffffffffff1614611f5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5690614676565b60405180910390fd5b611f6960006130c1565b565b600a5481565b611f79612b2b565b73ffffffffffffffffffffffffffffffffffffffff16611f9761200a565b73ffffffffffffffffffffffffffffffffffffffff1614611fed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe490614676565b60405180910390fd5b6001600860016101000a81548160ff021916908315150217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61203b612b2b565b73ffffffffffffffffffffffffffffffffffffffff1661205961200a565b73ffffffffffffffffffffffffffffffffffffffff16146120af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a690614676565b60405180910390fd5b8060098190555050565b6060600280546120c890614a52565b80601f01602080910402602001604051908101604052809291908181526020018280546120f490614a52565b80156121415780601f1061211657610100808354040283529160200191612141565b820191906000526020600020905b81548152906001019060200180831161212457829003601f168201915b5050505050905090565b60095481565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b790614536565b60405180910390fd5b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516122b191906143be565b60405180910390a35050565b6122c5612b2b565b73ffffffffffffffffffffffffffffffffffffffff166122e361200a565b73ffffffffffffffffffffffffffffffffffffffff1614612339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233090614676565b60405180910390fd5b80600a8190555050565b61234b612b2b565b73ffffffffffffffffffffffffffffffffffffffff1661236961200a565b73ffffffffffffffffffffffffffffffffffffffff16146123bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b690614676565b60405180910390fd5b80600c8190555050565b6123d1612b2b565b73ffffffffffffffffffffffffffffffffffffffff166123ef61200a565b73ffffffffffffffffffffffffffffffffffffffff1614612445576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243c90614676565b60405180910390fd5b6001600860026101000a81548160ff021916908315150217905550565b600060149054906101000a900460ff16156124b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a9906145f6565b60405180910390fd5b6001600060146101000a81548160ff02191690831515021790555060006124d7612b2b565b9050600954341461251d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251490614696565b60405180910390fd5b600a54600b54600d5460016125329190614887565b61253c9190614887565b111561257d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257490614416565b60405180910390fd5b600860019054906101000a900460ff166125cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c390614476565b60405180910390fd5b60011515600f60006125dc612b2b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514612666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265d90614596565b60405180910390fd5b6000600f6000612674612b2b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600e60006126d1612b2b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061271c90614ab5565b91905055506000600b5490506127328282612b33565b600b600081548092919061274590614ab5565b9190505550505060008060146101000a81548160ff021916908315150217905550565b6127723383612c76565b6127b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a8906146b6565b60405180910390fd5b6127bd84848484613185565b50505050565b60606127ce82612b51565b61280d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280490614716565b60405180910390fd5b6060600860029054906101000a900460ff161561284c5760036040516020016128369190614320565b604051602081830303815290604052905061287a565b6003612857846131e1565b6040516020016128689291906142cf565b60405160208183030381529060405290505b80915050919050565b61288b612b2b565b73ffffffffffffffffffffffffffffffffffffffff166128a961200a565b73ffffffffffffffffffffffffffffffffffffffff16146128ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f690614676565b60405180910390fd5b6001600860006101000a81548160ff021916908315150217905550565b6060600360405160200161293091906142fe565b604051602081830303815290604052905090565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6129e0612b2b565b73ffffffffffffffffffffffffffffffffffffffff166129fe61200a565b73ffffffffffffffffffffffffffffffffffffffff1614612a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4b90614676565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612ac4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612abb90614516565b60405180910390fd5b612acd816130c1565b50565b600066038d7ea4c68000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b2491906148dd565b9050919050565b600033905090565b612b4d828260405180602001604052806000815250613342565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612c3083611d79565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612c8182612b51565b612cc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb790614436565b60405180910390fd5b6000612ccb83611d79565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612d3a57508373ffffffffffffffffffffffffffffffffffffffff16612d2284610e0e565b73ffffffffffffffffffffffffffffffffffffffff16145b80612d4b5750612d4a8185612944565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612d7482611d79565b73ffffffffffffffffffffffffffffffffffffffff1614612dca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc190614656565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3190614456565b60405180910390fd5b612e4583838361339d565b612e50600082612bbd565b6001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ea09190614968565b925050819055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ef79190614887565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000612fbb82611d79565b9050612fc98160008461339d565b612fd4600083612bbd565b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130249190614968565b925050819055506004600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b613190848484612d54565b61319c848484846133a2565b6131db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131d290614576565b60405180910390fd5b50505050565b60606000821415613229576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061333d565b600082905060005b6000821461325b57808061324490614ab5565b915050600a8261325491906148dd565b9150613231565b60008167ffffffffffffffff81111561327757613276614beb565b5b6040519080825280601f01601f1916602001820160405280156132a95781602001600182028036833780820191505090505b5090505b60008514613336576001826132c29190614968565b9150600a856132d19190614afe565b60306132dd9190614887565b60f81b8183815181106132f3576132f2614bbc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561332f91906148dd565b94506132ad565b8093505050505b919050565b61334c8383613532565b61335960008484846133a2565b613398576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161338f90614576565b60405180910390fd5b505050565b505050565b60006133c38473ffffffffffffffffffffffffffffffffffffffff16613700565b15613525578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b81526004016134079493929190614372565b602060405180830381600087803b15801561342157600080fd5b505af192505050801561345257506040513d601f19601f8201168201806040525081019061344f9190613cb4565b60015b6134d5573d8060008114613482576040519150601f19603f3d011682016040523d82523d6000602084013e613487565b606091505b506000815114156134cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134c490614576565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061352a565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156135a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161359990614616565b60405180910390fd5b6135ab81612b51565b156135eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135e290614496565b60405180910390fd5b6135f76000838361339d565b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136479190614887565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461371f90614a52565b90600052602060002090601f0160209004810192826137415760008555613788565b82601f1061375a57805160ff1916838001178555613788565b82800160010185558215613788579182015b8281111561378757825182559160200191906001019061376c565b5b5090506137959190613799565b5090565b5b808211156137b257600081600090555060010161379a565b5090565b60006137c96137c484614796565b614771565b905080838252602082019050828560208602820111156137ec576137eb614c24565b5b60005b8581101561381c578161380288826138aa565b8452602084019350602083019250506001810190506137ef565b5050509392505050565b6000613839613834846147c2565b614771565b90508281526020810184848401111561385557613854614c29565b5b613860848285614a10565b509392505050565b600061387b613876846147f3565b614771565b90508281526020810184848401111561389757613896614c29565b5b6138a2848285614a10565b509392505050565b6000813590506138b98161513d565b92915050565b600082601f8301126138d4576138d3614c1f565b5b81356138e48482602086016137b6565b91505092915050565b6000813590506138fc81615154565b92915050565b6000813590506139118161516b565b92915050565b6000815190506139268161516b565b92915050565b60008083601f84011261394257613941614c1f565b5b8235905067ffffffffffffffff81111561395f5761395e614c1a565b5b60208301915083600182028301111561397b5761397a614c24565b5b9250929050565b600082601f83011261399757613996614c1f565b5b81356139a7848260208601613826565b91505092915050565b600082601f8301126139c5576139c4614c1f565b5b81356139d5848260208601613868565b91505092915050565b6000813590506139ed81615182565b92915050565b600060208284031215613a0957613a08614c33565b5b6000613a17848285016138aa565b91505092915050565b60008060408385031215613a3757613a36614c33565b5b6000613a45858286016138aa565b9250506020613a56858286016138aa565b9150509250929050565b600080600060608486031215613a7957613a78614c33565b5b6000613a87868287016138aa565b9350506020613a98868287016138aa565b9250506040613aa9868287016139de565b9150509250925092565b600080600080600060808688031215613acf57613ace614c33565b5b6000613add888289016138aa565b9550506020613aee888289016138aa565b9450506040613aff888289016139de565b935050606086013567ffffffffffffffff811115613b2057613b1f614c2e565b5b613b2c8882890161392c565b92509250509295509295909350565b60008060008060808587031215613b5557613b54614c33565b5b6000613b63878288016138aa565b9450506020613b74878288016138aa565b9350506040613b85878288016139de565b925050606085013567ffffffffffffffff811115613ba657613ba5614c2e565b5b613bb287828801613982565b91505092959194509250565b60008060408385031215613bd557613bd4614c33565b5b6000613be3858286016138aa565b9250506020613bf4858286016138ed565b9150509250929050565b60008060408385031215613c1557613c14614c33565b5b6000613c23858286016138aa565b9250506020613c34858286016139de565b9150509250929050565b600060208284031215613c5457613c53614c33565b5b600082013567ffffffffffffffff811115613c7257613c71614c2e565b5b613c7e848285016138bf565b91505092915050565b600060208284031215613c9d57613c9c614c33565b5b6000613cab84828501613902565b91505092915050565b600060208284031215613cca57613cc9614c33565b5b6000613cd884828501613917565b91505092915050565b600060208284031215613cf757613cf6614c33565b5b600082013567ffffffffffffffff811115613d1557613d14614c2e565b5b613d21848285016139b0565b91505092915050565b600060208284031215613d4057613d3f614c33565b5b6000613d4e848285016139de565b91505092915050565b613d608161499c565b82525050565b613d6f816149ae565b82525050565b613d7e816149ba565b82525050565b6000613d8f82614839565b613d99818561484f565b9350613da9818560208601614a1f565b613db281614c38565b840191505092915050565b6000613dc882614844565b613dd2818561486b565b9350613de2818560208601614a1f565b613deb81614c38565b840191505092915050565b6000613e0182614844565b613e0b818561487c565b9350613e1b818560208601614a1f565b80840191505092915050565b60008154613e3481614a52565b613e3e818661487c565b94506001821660008114613e595760018114613e6a57613e9d565b60ff19831686528186019350613e9d565b613e7385614824565b60005b83811015613e9557815481890152600182019150602081019050613e76565b838801955050505b50505092915050565b6000613eb3601e8361486b565b9150613ebe82614c49565b602082019050919050565b6000613ed660208361486b565b9150613ee182614c72565b602082019050919050565b6000613ef9600d8361487c565b9150613f0482614c9b565b600d82019050919050565b6000613f1c601b8361486b565b9150613f2782614cc4565b602082019050919050565b6000613f3f60128361486b565b9150613f4a82614ced565b602082019050919050565b6000613f62601c8361486b565b9150613f6d82614d16565b602082019050919050565b6000613f8560208361486b565b9150613f9082614d3f565b602082019050919050565b6000613fa8601e8361486b565b9150613fb382614d68565b602082019050919050565b6000613fcb60188361486b565b9150613fd682614d91565b602082019050919050565b6000613fee60208361486b565b9150613ff982614dba565b602082019050919050565b600061401160198361486b565b915061401c82614de3565b602082019050919050565b6000614034600c8361487c565b915061403f82614e0c565b600c82019050919050565b6000614057601e8361486b565b915061406282614e35565b602082019050919050565b600061407a601a8361486b565b915061408582614e5e565b602082019050919050565b600061409d60248361486b565b91506140a882614e87565b604082019050919050565b60006140c060118361486b565b91506140cb82614ed6565b602082019050919050565b60006140e3601f8361486b565b91506140ee82614eff565b602082019050919050565b6000614106601f8361486b565b915061411182614f28565b602082019050919050565b600061412960208361486b565b915061413482614f51565b602082019050919050565b600061414c60208361486b565b915061415782614f7a565b602082019050919050565b600061416f60058361487c565b915061417a82614fa3565b600582019050919050565b6000614192601c8361486b565b915061419d82614fcc565b602082019050919050565b60006141b560208361486b565b91506141c082614ff5565b602082019050919050565b60006141d860188361486b565b91506141e38261501e565b602082019050919050565b60006141fb601c8361486b565b915061420682615047565b602082019050919050565b600061421e600d8361486b565b915061422982615070565b602082019050919050565b600061424160218361486b565b915061424c82615099565b604082019050919050565b6000614264600083614860565b915061426f826150e8565b600082019050919050565b6000614287601d8361486b565b9150614292826150eb565b602082019050919050565b60006142aa60138361486b565b91506142b582615114565b602082019050919050565b6142c981614a06565b82525050565b60006142db8285613e27565b91506142e78284613df6565b91506142f282614162565b91508190509392505050565b600061430a8284613e27565b915061431582613eec565b915081905092915050565b600061432c8284613e27565b915061433782614027565b915081905092915050565b600061434d82614257565b9150819050919050565b600060208201905061436c6000830184613d57565b92915050565b60006080820190506143876000830187613d57565b6143946020830186613d57565b6143a160408301856142c0565b81810360608301526143b38184613d84565b905095945050505050565b60006020820190506143d36000830184613d66565b92915050565b60006020820190506143ee6000830184613d75565b92915050565b6000602082019050818103600083015261440e8184613dbd565b905092915050565b6000602082019050818103600083015261442f81613ea6565b9050919050565b6000602082019050818103600083015261444f81613ec9565b9050919050565b6000602082019050818103600083015261446f81613f0f565b9050919050565b6000602082019050818103600083015261448f81613f32565b9050919050565b600060208201905081810360008301526144af81613f55565b9050919050565b600060208201905081810360008301526144cf81613f78565b9050919050565b600060208201905081810360008301526144ef81613f9b565b9050919050565b6000602082019050818103600083015261450f81613fbe565b9050919050565b6000602082019050818103600083015261452f81613fe1565b9050919050565b6000602082019050818103600083015261454f81614004565b9050919050565b6000602082019050818103600083015261456f8161404a565b9050919050565b6000602082019050818103600083015261458f8161406d565b9050919050565b600060208201905081810360008301526145af81614090565b9050919050565b600060208201905081810360008301526145cf816140b3565b9050919050565b600060208201905081810360008301526145ef816140d6565b9050919050565b6000602082019050818103600083015261460f816140f9565b9050919050565b6000602082019050818103600083015261462f8161411c565b9050919050565b6000602082019050818103600083015261464f8161413f565b9050919050565b6000602082019050818103600083015261466f81614185565b9050919050565b6000602082019050818103600083015261468f816141a8565b9050919050565b600060208201905081810360008301526146af816141cb565b9050919050565b600060208201905081810360008301526146cf816141ee565b9050919050565b600060208201905081810360008301526146ef81614211565b9050919050565b6000602082019050818103600083015261470f81614234565b9050919050565b6000602082019050818103600083015261472f8161427a565b9050919050565b6000602082019050818103600083015261474f8161429d565b9050919050565b600060208201905061476b60008301846142c0565b92915050565b600061477b61478c565b90506147878282614a84565b919050565b6000604051905090565b600067ffffffffffffffff8211156147b1576147b0614beb565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156147dd576147dc614beb565b5b6147e682614c38565b9050602081019050919050565b600067ffffffffffffffff82111561480e5761480d614beb565b5b61481782614c38565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061489282614a06565b915061489d83614a06565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148d2576148d1614b2f565b5b828201905092915050565b60006148e882614a06565b91506148f383614a06565b92508261490357614902614b5e565b5b828204905092915050565b600061491982614a06565b915061492483614a06565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561495d5761495c614b2f565b5b828202905092915050565b600061497382614a06565b915061497e83614a06565b92508282101561499157614990614b2f565b5b828203905092915050565b60006149a7826149e6565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614a3d578082015181840152602081019050614a22565b83811115614a4c576000848401525b50505050565b60006002820490506001821680614a6a57607f821691505b60208210811415614a7e57614a7d614b8d565b5b50919050565b614a8d82614c38565b810181811067ffffffffffffffff82111715614aac57614aab614beb565b5b80604052505050565b6000614ac082614a06565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614af357614af2614b2f565b5b600182019050919050565b6000614b0982614a06565b9150614b1483614a06565b925082614b2457614b23614b5e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4d696e743a204e6f7420656e6f7567682061766169616c6162696c6974790000600082015250565b7f4552433732313a206f70207175657279206e6f6e6578697374656e7420746b6e600082015250565b7f636f6e74726163742e6a736f6e00000000000000000000000000000000000000600082015250565b7f4552433732313a207478667220746f2030783020616464726573730000000000600082015250565b7f57686974656c697374206e6f74206f70656e0000000000000000000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a20617070726f766564206e6f6e6578697374656e7420746b6e600082015250565b7f4552433732313a20617070726f76616c2063757272656e74206f776e65720000600082015250565b7f5472616e73616374696f6e20556e7375636365737366756c0000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e65722069732030782061646472657373600082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f6d7973746572792e6a736f6e0000000000000000000000000000000000000000600082015250565b7f4552433732313a206f776e207175657279206e6f6e657869737420746b6e0000600082015250565b7f7478667220746f206e6f6e204552433732315265636965766572000000000000600082015250565b7f6e6f742057686974656c6973746564206f7220616c726561647920707572636860008201527f6173656400000000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f742066696c6c206f72646572000000000000000000000000000000600082015250565b7f4552433732313a2063616c6c657220216f776e65722f21617070726f76656400600082015250565b7f617474656d7074207265656e746572206c6f636b65642066756e6374696f6e00600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a2062616c2071727920666f72207a65726f2061646472657373600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207478667220746f6b656e206e6f74206f776e656400000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d696e743a20496e73756666696369656e742046756e64730000000000000000600082015250565b7f4552433732313a207478667220216f776e65722f617070726f76656400000000600082015250565b7f4d696e74206e6f74206f70656e00000000000000000000000000000000000000600082015250565b7f4d696e743a204d617820746b6e207065722077616c6c6574206578636565646560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732314d657461646174613a205552492030783020746f6b656e000000600082015250565b7f4d617468206f766572666c6f77206572726f7200000000000000000000000000600082015250565b6151468161499c565b811461515157600080fd5b50565b61515d816149ae565b811461516857600080fd5b50565b615174816149ba565b811461517f57600080fd5b50565b61518b81614a06565b811461519657600080fd5b5056fea264697066735822122026e95a192fd231768c13b6fdb2bc1ecd1a6812ac93fd00057b46b2e96b47c19b64736f6c6343000807003368747470733a2f2f7265666c656374696f6e736e66742e696f2f6d657461646174612f
Deployed Bytecode
0x60806040526004361061028b5760003560e01c8063484b973c1161015a578063a22cb465116100c1578063c87b56dd1161007a578063c87b56dd146108f7578063c91c046214610934578063e8a3d4851461094b578063e985e9c514610976578063f2fde38b146109b3578063f8b2cb4f146109dc57610292565b8063a22cb46514610832578063b0b922631461085b578063b3aa880614610884578063b5b3e214146108ad578063b733937c146108c4578063b88d4fde146108ce57610292565b80637e1c0c09116101135780637e1c0c0914610746578063877b8644146107715780638da5cb5b1461078857806391b7f5ed146107b357806395d89b41146107dc578063a035b1fe1461080757610292565b8063484b973c1461063857806349a772b51461066157806355f804b31461068c5780636352211e146106b557806370a08231146106f2578063715018a61461072f57610292565b806323b872dd116101fe5780633ccfd60b116101b75780633ccfd60b146105525780634256dbe31461056957806342842e0e1461059257806342966c68146105bb57806343d67565146105e4578063453c23101461060d57610292565b806323b872dd1461049057806325fd90f3146104b957806329869c94146104e45780632e56f71e146104fb578063372c12b1146105125780633ba5939d1461053b57610292565b8063095ea7b311610250578063095ea7b31461038d5780631249c58b146103b6578063150b7a02146103c057806315a55347146103fd57806318160ddd146104285780631950c2181461045357610292565b8062b6849f1461029457806301ffc9a7146102bd57806302ce5813146102fa57806306fdde0314610325578063081812fc1461035057610292565b3661029257005b005b3480156102a057600080fd5b506102bb60048036038101906102b69190613c3e565b610a19565b005b3480156102c957600080fd5b506102e460048036038101906102df9190613c87565b610be0565b6040516102f191906143be565b60405180910390f35b34801561030657600080fd5b5061030f610d69565b60405161031c91906143be565b60405180910390f35b34801561033157600080fd5b5061033a610d7c565b60405161034791906143f4565b60405180910390f35b34801561035c57600080fd5b5061037760048036038101906103729190613d2a565b610e0e565b6040516103849190614357565b60405180910390f35b34801561039957600080fd5b506103b460048036038101906103af9190613bfe565b610e93565b005b6103be610f9d565b005b3480156103cc57600080fd5b506103e760048036038101906103e29190613ab3565b611241565b6040516103f491906143d9565b60405180910390f35b34801561040957600080fd5b50610412611256565b60405161041f9190614756565b60405180910390f35b34801561043457600080fd5b5061043d61125c565b60405161044a9190614756565b60405180910390f35b34801561045f57600080fd5b5061047a600480360381019061047591906139f3565b611266565b60405161048791906143be565b60405180910390f35b34801561049c57600080fd5b506104b760048036038101906104b29190613a60565b6112d4565b005b3480156104c557600080fd5b506104ce61132d565b6040516104db91906143be565b60405180910390f35b3480156104f057600080fd5b506104f9611340565b005b34801561050757600080fd5b506105106113d9565b005b34801561051e57600080fd5b50610539600480360381019061053491906139f3565b611472565b005b34801561054757600080fd5b50610550611549565b005b34801561055e57600080fd5b506105676115e2565b005b34801561057557600080fd5b50610590600480360381019061058b9190613d2a565b611926565b005b34801561059e57600080fd5b506105b960048036038101906105b49190613a60565b6119ac565b005b3480156105c757600080fd5b506105e260048036038101906105dd9190613d2a565b6119cc565b005b3480156105f057600080fd5b5061060b60048036038101906106069190613c3e565b611a1f565b005b34801561061957600080fd5b50610622611b30565b60405161062f9190614756565b60405180910390f35b34801561064457600080fd5b5061065f600480360381019061065a9190613bfe565b611b36565b005b34801561066d57600080fd5b50610676611cdd565b6040516106839190614756565b60405180910390f35b34801561069857600080fd5b506106b360048036038101906106ae9190613ce1565b611ce3565b005b3480156106c157600080fd5b506106dc60048036038101906106d79190613d2a565b611d79565b6040516106e99190614357565b60405180910390f35b3480156106fe57600080fd5b50610719600480360381019061071491906139f3565b611e2b565b6040516107269190614756565b60405180910390f35b34801561073b57600080fd5b50610744611ee3565b005b34801561075257600080fd5b5061075b611f6b565b6040516107689190614756565b60405180910390f35b34801561077d57600080fd5b50610786611f71565b005b34801561079457600080fd5b5061079d61200a565b6040516107aa9190614357565b60405180910390f35b3480156107bf57600080fd5b506107da60048036038101906107d59190613d2a565b612033565b005b3480156107e857600080fd5b506107f16120b9565b6040516107fe91906143f4565b60405180910390f35b34801561081357600080fd5b5061081c61214b565b6040516108299190614756565b60405180910390f35b34801561083e57600080fd5b5061085960048036038101906108549190613bbe565b612151565b005b34801561086757600080fd5b50610882600480360381019061087d9190613d2a565b6122bd565b005b34801561089057600080fd5b506108ab60048036038101906108a69190613d2a565b612343565b005b3480156108b957600080fd5b506108c26123c9565b005b6108cc612462565b005b3480156108da57600080fd5b506108f560048036038101906108f09190613b3b565b612768565b005b34801561090357600080fd5b5061091e60048036038101906109199190613d2a565b6127c3565b60405161092b91906143f4565b60405180910390f35b34801561094057600080fd5b50610949612883565b005b34801561095757600080fd5b5061096061291c565b60405161096d91906143f4565b60405180910390f35b34801561098257600080fd5b5061099d60048036038101906109989190613a20565b612944565b6040516109aa91906143be565b60405180910390f35b3480156109bf57600080fd5b506109da60048036038101906109d591906139f3565b6129d8565b005b3480156109e857600080fd5b50610a0360048036038101906109fe91906139f3565b612ad0565b604051610a109190614756565b60405180910390f35b610a21612b2b565b73ffffffffffffffffffffffffffffffffffffffff16610a3f61200a565b73ffffffffffffffffffffffffffffffffffffffff1614610a95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8c90614676565b60405180910390fd5b600081519050600b5481600b54610aac9190614887565b11610aec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae390614736565b60405180910390fd5b600a5481600b54610afd9190614887565b1115610b3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b35906145b6565b60405180910390fd5b6000600b54905081600d5410610b6c5781600d6000828254610b609190614968565b92505081905550610b75565b6000600d819055505b60005b82811015610bda57610baf848281518110610b9657610b95614bbc565b5b60200260200101518284610baa9190614887565b612b33565b600b6000815480929190610bc290614ab5565b91905055508080610bd290614ab5565b915050610b78565b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610cab57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610d1357507f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610d62575063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600860019054906101000a900460ff1681565b606060018054610d8b90614a52565b80601f0160208091040260200160405190810160405280929190818152602001828054610db790614a52565b8015610e045780601f10610dd957610100808354040283529160200191610e04565b820191906000526020600020905b815481529060010190602001808311610de757829003601f168201915b5050505050905090565b6000610e1982612b51565b610e58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4f906144b6565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610e9e82611d79565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f06906144d6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610f4f5750610f4e8133612944565b5b610f8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f85906145d6565b60405180910390fd5b610f988383612bbd565b505050565b600060149054906101000a900460ff1615610fed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe4906145f6565b60405180910390fd5b6001600060146101000a81548160ff0219169083151502179055506000611012612b2b565b90506009543414611058576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104f90614696565b60405180910390fd5b600a54600b54600d54600161106d9190614887565b6110779190614887565b11156110b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110af90614416565b60405180910390fd5b600c546001600e60006110c9612b2b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461110e9190614887565b111561114f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611146906146f6565b60405180910390fd5b600860009054906101000a900460ff1661119e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611195906146d6565b60405180910390fd5b6000600b549050600e60006111b1612b2b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906111fc90614ab5565b919050555061120b8282612b33565b600b600081548092919061121e90614ab5565b9190505550505060008060146101000a81548160ff021916908315150217905550565b600063150b7a0260e01b905095945050505050565b600d5481565b6000600b54905090565b600060011515600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156112ca57600190506112cf565b600090505b919050565b6112de3382612c76565b61131d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611314906146b6565b60405180910390fd5b611328838383612d54565b505050565b600860009054906101000a900460ff1681565b611348612b2b565b73ffffffffffffffffffffffffffffffffffffffff1661136661200a565b73ffffffffffffffffffffffffffffffffffffffff16146113bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b390614676565b60405180910390fd5b6000600860016101000a81548160ff021916908315150217905550565b6113e1612b2b565b73ffffffffffffffffffffffffffffffffffffffff166113ff61200a565b73ffffffffffffffffffffffffffffffffffffffff1614611455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144c90614676565b60405180910390fd5b6000600860006101000a81548160ff021916908315150217905550565b61147a612b2b565b73ffffffffffffffffffffffffffffffffffffffff1661149861200a565b73ffffffffffffffffffffffffffffffffffffffff16146114ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e590614676565b60405180910390fd5b6001600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611551612b2b565b73ffffffffffffffffffffffffffffffffffffffff1661156f61200a565b73ffffffffffffffffffffffffffffffffffffffff16146115c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bc90614676565b60405180910390fd5b6000600860026101000a81548160ff021916908315150217905550565b6115ea612b2b565b73ffffffffffffffffffffffffffffffffffffffff1661160861200a565b73ffffffffffffffffffffffffffffffffffffffff161461165e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165590614676565b60405180910390fd5b60004790506000806064603784611675919061490e565b61167f91906148dd565b9050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516116c790614342565b60006040518083038185875af1925050503d8060008114611704576040519150601f19603f3d011682016040523d82523d6000602084013e611709565b606091505b5050809250508161174f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611746906144f6565b60405180910390fd5b6064601e8461175e919061490e565b61176891906148dd565b9050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516117b090614342565b60006040518083038185875af1925050503d80600081146117ed576040519150601f19603f3d011682016040523d82523d6000602084013e6117f2565b606091505b50508092505081611838576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182f906144f6565b60405180910390fd5b6064600f84611847919061490e565b61185191906148dd565b9050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161189990614342565b60006040518083038185875af1925050503d80600081146118d6576040519150601f19603f3d011682016040523d82523d6000602084013e6118db565b606091505b50508092505081611921576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611918906144f6565b60405180910390fd5b505050565b61192e612b2b565b73ffffffffffffffffffffffffffffffffffffffff1661194c61200a565b73ffffffffffffffffffffffffffffffffffffffff16146119a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199990614676565b60405180910390fd5b80600d8190555050565b6119c783838360405180602001604052806000815250612768565b505050565b6119d581611d79565b73ffffffffffffffffffffffffffffffffffffffff166119f3612b2b565b73ffffffffffffffffffffffffffffffffffffffff1614611a1357600080fd5b611a1c81612fb0565b50565b611a27612b2b565b73ffffffffffffffffffffffffffffffffffffffff16611a4561200a565b73ffffffffffffffffffffffffffffffffffffffff1614611a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9290614676565b60405180910390fd5b60005b8151811015611b2c576001600f6000848481518110611ac057611abf614bbc565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611b2490614ab5565b915050611a9e565b5050565b600c5481565b611b3e612b2b565b73ffffffffffffffffffffffffffffffffffffffff16611b5c61200a565b73ffffffffffffffffffffffffffffffffffffffff1614611bb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba990614676565b60405180910390fd5b600b5481600b54611bc39190614887565b11611c03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfa90614736565b60405180910390fd5b600a5481600b54611c149190614887565b1115611c55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4c906145b6565b60405180910390fd5b6000600b54905081600d5410611c835781600d6000828254611c779190614968565b92505081905550611c8c565b6000600d819055505b60005b82811015611cd757611cac848284611ca79190614887565b612b33565b600b6000815480929190611cbf90614ab5565b91905055508080611ccf90614ab5565b915050611c8f565b50505050565b600b5481565b611ceb612b2b565b73ffffffffffffffffffffffffffffffffffffffff16611d0961200a565b73ffffffffffffffffffffffffffffffffffffffff1614611d5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5690614676565b60405180910390fd5b8060039080519060200190611d75929190613713565b5050565b6000806004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1990614556565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9390614636565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611eeb612b2b565b73ffffffffffffffffffffffffffffffffffffffff16611f0961200a565b73ffffffffffffffffffffffffffffffffffffffff1614611f5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5690614676565b60405180910390fd5b611f6960006130c1565b565b600a5481565b611f79612b2b565b73ffffffffffffffffffffffffffffffffffffffff16611f9761200a565b73ffffffffffffffffffffffffffffffffffffffff1614611fed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe490614676565b60405180910390fd5b6001600860016101000a81548160ff021916908315150217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61203b612b2b565b73ffffffffffffffffffffffffffffffffffffffff1661205961200a565b73ffffffffffffffffffffffffffffffffffffffff16146120af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a690614676565b60405180910390fd5b8060098190555050565b6060600280546120c890614a52565b80601f01602080910402602001604051908101604052809291908181526020018280546120f490614a52565b80156121415780601f1061211657610100808354040283529160200191612141565b820191906000526020600020905b81548152906001019060200180831161212457829003601f168201915b5050505050905090565b60095481565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b790614536565b60405180910390fd5b80600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516122b191906143be565b60405180910390a35050565b6122c5612b2b565b73ffffffffffffffffffffffffffffffffffffffff166122e361200a565b73ffffffffffffffffffffffffffffffffffffffff1614612339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233090614676565b60405180910390fd5b80600a8190555050565b61234b612b2b565b73ffffffffffffffffffffffffffffffffffffffff1661236961200a565b73ffffffffffffffffffffffffffffffffffffffff16146123bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b690614676565b60405180910390fd5b80600c8190555050565b6123d1612b2b565b73ffffffffffffffffffffffffffffffffffffffff166123ef61200a565b73ffffffffffffffffffffffffffffffffffffffff1614612445576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243c90614676565b60405180910390fd5b6001600860026101000a81548160ff021916908315150217905550565b600060149054906101000a900460ff16156124b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a9906145f6565b60405180910390fd5b6001600060146101000a81548160ff02191690831515021790555060006124d7612b2b565b9050600954341461251d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251490614696565b60405180910390fd5b600a54600b54600d5460016125329190614887565b61253c9190614887565b111561257d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257490614416565b60405180910390fd5b600860019054906101000a900460ff166125cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c390614476565b60405180910390fd5b60011515600f60006125dc612b2b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514612666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265d90614596565b60405180910390fd5b6000600f6000612674612b2b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600e60006126d1612b2b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061271c90614ab5565b91905055506000600b5490506127328282612b33565b600b600081548092919061274590614ab5565b9190505550505060008060146101000a81548160ff021916908315150217905550565b6127723383612c76565b6127b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a8906146b6565b60405180910390fd5b6127bd84848484613185565b50505050565b60606127ce82612b51565b61280d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280490614716565b60405180910390fd5b6060600860029054906101000a900460ff161561284c5760036040516020016128369190614320565b604051602081830303815290604052905061287a565b6003612857846131e1565b6040516020016128689291906142cf565b60405160208183030381529060405290505b80915050919050565b61288b612b2b565b73ffffffffffffffffffffffffffffffffffffffff166128a961200a565b73ffffffffffffffffffffffffffffffffffffffff16146128ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f690614676565b60405180910390fd5b6001600860006101000a81548160ff021916908315150217905550565b6060600360405160200161293091906142fe565b604051602081830303815290604052905090565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6129e0612b2b565b73ffffffffffffffffffffffffffffffffffffffff166129fe61200a565b73ffffffffffffffffffffffffffffffffffffffff1614612a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4b90614676565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612ac4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612abb90614516565b60405180910390fd5b612acd816130c1565b50565b600066038d7ea4c68000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b2491906148dd565b9050919050565b600033905090565b612b4d828260405180602001604052806000815250613342565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612c3083611d79565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612c8182612b51565b612cc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb790614436565b60405180910390fd5b6000612ccb83611d79565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612d3a57508373ffffffffffffffffffffffffffffffffffffffff16612d2284610e0e565b73ffffffffffffffffffffffffffffffffffffffff16145b80612d4b5750612d4a8185612944565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612d7482611d79565b73ffffffffffffffffffffffffffffffffffffffff1614612dca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc190614656565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3190614456565b60405180910390fd5b612e4583838361339d565b612e50600082612bbd565b6001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ea09190614968565b925050819055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ef79190614887565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000612fbb82611d79565b9050612fc98160008461339d565b612fd4600083612bbd565b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130249190614968565b925050819055506004600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b613190848484612d54565b61319c848484846133a2565b6131db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131d290614576565b60405180910390fd5b50505050565b60606000821415613229576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061333d565b600082905060005b6000821461325b57808061324490614ab5565b915050600a8261325491906148dd565b9150613231565b60008167ffffffffffffffff81111561327757613276614beb565b5b6040519080825280601f01601f1916602001820160405280156132a95781602001600182028036833780820191505090505b5090505b60008514613336576001826132c29190614968565b9150600a856132d19190614afe565b60306132dd9190614887565b60f81b8183815181106132f3576132f2614bbc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561332f91906148dd565b94506132ad565b8093505050505b919050565b61334c8383613532565b61335960008484846133a2565b613398576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161338f90614576565b60405180910390fd5b505050565b505050565b60006133c38473ffffffffffffffffffffffffffffffffffffffff16613700565b15613525578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b81526004016134079493929190614372565b602060405180830381600087803b15801561342157600080fd5b505af192505050801561345257506040513d601f19601f8201168201806040525081019061344f9190613cb4565b60015b6134d5573d8060008114613482576040519150601f19603f3d011682016040523d82523d6000602084013e613487565b606091505b506000815114156134cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134c490614576565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061352a565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156135a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161359990614616565b60405180910390fd5b6135ab81612b51565b156135eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135e290614496565b60405180910390fd5b6135f76000838361339d565b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136479190614887565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461371f90614a52565b90600052602060002090601f0160209004810192826137415760008555613788565b82601f1061375a57805160ff1916838001178555613788565b82800160010185558215613788579182015b8281111561378757825182559160200191906001019061376c565b5b5090506137959190613799565b5090565b5b808211156137b257600081600090555060010161379a565b5090565b60006137c96137c484614796565b614771565b905080838252602082019050828560208602820111156137ec576137eb614c24565b5b60005b8581101561381c578161380288826138aa565b8452602084019350602083019250506001810190506137ef565b5050509392505050565b6000613839613834846147c2565b614771565b90508281526020810184848401111561385557613854614c29565b5b613860848285614a10565b509392505050565b600061387b613876846147f3565b614771565b90508281526020810184848401111561389757613896614c29565b5b6138a2848285614a10565b509392505050565b6000813590506138b98161513d565b92915050565b600082601f8301126138d4576138d3614c1f565b5b81356138e48482602086016137b6565b91505092915050565b6000813590506138fc81615154565b92915050565b6000813590506139118161516b565b92915050565b6000815190506139268161516b565b92915050565b60008083601f84011261394257613941614c1f565b5b8235905067ffffffffffffffff81111561395f5761395e614c1a565b5b60208301915083600182028301111561397b5761397a614c24565b5b9250929050565b600082601f83011261399757613996614c1f565b5b81356139a7848260208601613826565b91505092915050565b600082601f8301126139c5576139c4614c1f565b5b81356139d5848260208601613868565b91505092915050565b6000813590506139ed81615182565b92915050565b600060208284031215613a0957613a08614c33565b5b6000613a17848285016138aa565b91505092915050565b60008060408385031215613a3757613a36614c33565b5b6000613a45858286016138aa565b9250506020613a56858286016138aa565b9150509250929050565b600080600060608486031215613a7957613a78614c33565b5b6000613a87868287016138aa565b9350506020613a98868287016138aa565b9250506040613aa9868287016139de565b9150509250925092565b600080600080600060808688031215613acf57613ace614c33565b5b6000613add888289016138aa565b9550506020613aee888289016138aa565b9450506040613aff888289016139de565b935050606086013567ffffffffffffffff811115613b2057613b1f614c2e565b5b613b2c8882890161392c565b92509250509295509295909350565b60008060008060808587031215613b5557613b54614c33565b5b6000613b63878288016138aa565b9450506020613b74878288016138aa565b9350506040613b85878288016139de565b925050606085013567ffffffffffffffff811115613ba657613ba5614c2e565b5b613bb287828801613982565b91505092959194509250565b60008060408385031215613bd557613bd4614c33565b5b6000613be3858286016138aa565b9250506020613bf4858286016138ed565b9150509250929050565b60008060408385031215613c1557613c14614c33565b5b6000613c23858286016138aa565b9250506020613c34858286016139de565b9150509250929050565b600060208284031215613c5457613c53614c33565b5b600082013567ffffffffffffffff811115613c7257613c71614c2e565b5b613c7e848285016138bf565b91505092915050565b600060208284031215613c9d57613c9c614c33565b5b6000613cab84828501613902565b91505092915050565b600060208284031215613cca57613cc9614c33565b5b6000613cd884828501613917565b91505092915050565b600060208284031215613cf757613cf6614c33565b5b600082013567ffffffffffffffff811115613d1557613d14614c2e565b5b613d21848285016139b0565b91505092915050565b600060208284031215613d4057613d3f614c33565b5b6000613d4e848285016139de565b91505092915050565b613d608161499c565b82525050565b613d6f816149ae565b82525050565b613d7e816149ba565b82525050565b6000613d8f82614839565b613d99818561484f565b9350613da9818560208601614a1f565b613db281614c38565b840191505092915050565b6000613dc882614844565b613dd2818561486b565b9350613de2818560208601614a1f565b613deb81614c38565b840191505092915050565b6000613e0182614844565b613e0b818561487c565b9350613e1b818560208601614a1f565b80840191505092915050565b60008154613e3481614a52565b613e3e818661487c565b94506001821660008114613e595760018114613e6a57613e9d565b60ff19831686528186019350613e9d565b613e7385614824565b60005b83811015613e9557815481890152600182019150602081019050613e76565b838801955050505b50505092915050565b6000613eb3601e8361486b565b9150613ebe82614c49565b602082019050919050565b6000613ed660208361486b565b9150613ee182614c72565b602082019050919050565b6000613ef9600d8361487c565b9150613f0482614c9b565b600d82019050919050565b6000613f1c601b8361486b565b9150613f2782614cc4565b602082019050919050565b6000613f3f60128361486b565b9150613f4a82614ced565b602082019050919050565b6000613f62601c8361486b565b9150613f6d82614d16565b602082019050919050565b6000613f8560208361486b565b9150613f9082614d3f565b602082019050919050565b6000613fa8601e8361486b565b9150613fb382614d68565b602082019050919050565b6000613fcb60188361486b565b9150613fd682614d91565b602082019050919050565b6000613fee60208361486b565b9150613ff982614dba565b602082019050919050565b600061401160198361486b565b915061401c82614de3565b602082019050919050565b6000614034600c8361487c565b915061403f82614e0c565b600c82019050919050565b6000614057601e8361486b565b915061406282614e35565b602082019050919050565b600061407a601a8361486b565b915061408582614e5e565b602082019050919050565b600061409d60248361486b565b91506140a882614e87565b604082019050919050565b60006140c060118361486b565b91506140cb82614ed6565b602082019050919050565b60006140e3601f8361486b565b91506140ee82614eff565b602082019050919050565b6000614106601f8361486b565b915061411182614f28565b602082019050919050565b600061412960208361486b565b915061413482614f51565b602082019050919050565b600061414c60208361486b565b915061415782614f7a565b602082019050919050565b600061416f60058361487c565b915061417a82614fa3565b600582019050919050565b6000614192601c8361486b565b915061419d82614fcc565b602082019050919050565b60006141b560208361486b565b91506141c082614ff5565b602082019050919050565b60006141d860188361486b565b91506141e38261501e565b602082019050919050565b60006141fb601c8361486b565b915061420682615047565b602082019050919050565b600061421e600d8361486b565b915061422982615070565b602082019050919050565b600061424160218361486b565b915061424c82615099565b604082019050919050565b6000614264600083614860565b915061426f826150e8565b600082019050919050565b6000614287601d8361486b565b9150614292826150eb565b602082019050919050565b60006142aa60138361486b565b91506142b582615114565b602082019050919050565b6142c981614a06565b82525050565b60006142db8285613e27565b91506142e78284613df6565b91506142f282614162565b91508190509392505050565b600061430a8284613e27565b915061431582613eec565b915081905092915050565b600061432c8284613e27565b915061433782614027565b915081905092915050565b600061434d82614257565b9150819050919050565b600060208201905061436c6000830184613d57565b92915050565b60006080820190506143876000830187613d57565b6143946020830186613d57565b6143a160408301856142c0565b81810360608301526143b38184613d84565b905095945050505050565b60006020820190506143d36000830184613d66565b92915050565b60006020820190506143ee6000830184613d75565b92915050565b6000602082019050818103600083015261440e8184613dbd565b905092915050565b6000602082019050818103600083015261442f81613ea6565b9050919050565b6000602082019050818103600083015261444f81613ec9565b9050919050565b6000602082019050818103600083015261446f81613f0f565b9050919050565b6000602082019050818103600083015261448f81613f32565b9050919050565b600060208201905081810360008301526144af81613f55565b9050919050565b600060208201905081810360008301526144cf81613f78565b9050919050565b600060208201905081810360008301526144ef81613f9b565b9050919050565b6000602082019050818103600083015261450f81613fbe565b9050919050565b6000602082019050818103600083015261452f81613fe1565b9050919050565b6000602082019050818103600083015261454f81614004565b9050919050565b6000602082019050818103600083015261456f8161404a565b9050919050565b6000602082019050818103600083015261458f8161406d565b9050919050565b600060208201905081810360008301526145af81614090565b9050919050565b600060208201905081810360008301526145cf816140b3565b9050919050565b600060208201905081810360008301526145ef816140d6565b9050919050565b6000602082019050818103600083015261460f816140f9565b9050919050565b6000602082019050818103600083015261462f8161411c565b9050919050565b6000602082019050818103600083015261464f8161413f565b9050919050565b6000602082019050818103600083015261466f81614185565b9050919050565b6000602082019050818103600083015261468f816141a8565b9050919050565b600060208201905081810360008301526146af816141cb565b9050919050565b600060208201905081810360008301526146cf816141ee565b9050919050565b600060208201905081810360008301526146ef81614211565b9050919050565b6000602082019050818103600083015261470f81614234565b9050919050565b6000602082019050818103600083015261472f8161427a565b9050919050565b6000602082019050818103600083015261474f8161429d565b9050919050565b600060208201905061476b60008301846142c0565b92915050565b600061477b61478c565b90506147878282614a84565b919050565b6000604051905090565b600067ffffffffffffffff8211156147b1576147b0614beb565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156147dd576147dc614beb565b5b6147e682614c38565b9050602081019050919050565b600067ffffffffffffffff82111561480e5761480d614beb565b5b61481782614c38565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061489282614a06565b915061489d83614a06565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148d2576148d1614b2f565b5b828201905092915050565b60006148e882614a06565b91506148f383614a06565b92508261490357614902614b5e565b5b828204905092915050565b600061491982614a06565b915061492483614a06565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561495d5761495c614b2f565b5b828202905092915050565b600061497382614a06565b915061497e83614a06565b92508282101561499157614990614b2f565b5b828203905092915050565b60006149a7826149e6565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614a3d578082015181840152602081019050614a22565b83811115614a4c576000848401525b50505050565b60006002820490506001821680614a6a57607f821691505b60208210811415614a7e57614a7d614b8d565b5b50919050565b614a8d82614c38565b810181811067ffffffffffffffff82111715614aac57614aab614beb565b5b80604052505050565b6000614ac082614a06565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614af357614af2614b2f565b5b600182019050919050565b6000614b0982614a06565b9150614b1483614a06565b925082614b2457614b23614b5e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4d696e743a204e6f7420656e6f7567682061766169616c6162696c6974790000600082015250565b7f4552433732313a206f70207175657279206e6f6e6578697374656e7420746b6e600082015250565b7f636f6e74726163742e6a736f6e00000000000000000000000000000000000000600082015250565b7f4552433732313a207478667220746f2030783020616464726573730000000000600082015250565b7f57686974656c697374206e6f74206f70656e0000000000000000000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a20617070726f766564206e6f6e6578697374656e7420746b6e600082015250565b7f4552433732313a20617070726f76616c2063757272656e74206f776e65720000600082015250565b7f5472616e73616374696f6e20556e7375636365737366756c0000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e65722069732030782061646472657373600082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f6d7973746572792e6a736f6e0000000000000000000000000000000000000000600082015250565b7f4552433732313a206f776e207175657279206e6f6e657869737420746b6e0000600082015250565b7f7478667220746f206e6f6e204552433732315265636965766572000000000000600082015250565b7f6e6f742057686974656c6973746564206f7220616c726561647920707572636860008201527f6173656400000000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f742066696c6c206f72646572000000000000000000000000000000600082015250565b7f4552433732313a2063616c6c657220216f776e65722f21617070726f76656400600082015250565b7f617474656d7074207265656e746572206c6f636b65642066756e6374696f6e00600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a2062616c2071727920666f72207a65726f2061646472657373600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207478667220746f6b656e206e6f74206f776e656400000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d696e743a20496e73756666696369656e742046756e64730000000000000000600082015250565b7f4552433732313a207478667220216f776e65722f617070726f76656400000000600082015250565b7f4d696e74206e6f74206f70656e00000000000000000000000000000000000000600082015250565b7f4d696e743a204d617820746b6e207065722077616c6c6574206578636565646560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732314d657461646174613a205552492030783020746f6b656e000000600082015250565b7f4d617468206f766572666c6f77206572726f7200000000000000000000000000600082015250565b6151468161499c565b811461515157600080fd5b50565b61515d816149ae565b811461516857600080fd5b50565b615174816149ba565b811461517f57600080fd5b50565b61518b81614a06565b811461519657600080fd5b5056fea264697066735822122026e95a192fd231768c13b6fdb2bc1ecd1a6812ac93fd00057b46b2e96b47c19b64736f6c63430008070033
Deployed Bytecode Sourcemap
16576:20783:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20337:647;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18579:361;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17354:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36176:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25820:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25382:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20996:644;;;:::i;:::-;;35120:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17568:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24188:126;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23088:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26690:314;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17325:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23768:83;;;;;;;;;;;;;:::i;:::-;;23588:80;;;;;;;;;;;;;:::i;:::-;;22778:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24416:81;;;;;;;;;;;;;:::i;:::-;;19022:631;;;;;;;;;;;;;:::i;:::-;;24077:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27075:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22431:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22890:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17534:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19665:660;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17500:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23392:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25092:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24832:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14763:94;;;;;;;;;;;;;:::i;:::-;;17467:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23676:80;;;;;;;;;;;;;:::i;:::-;;14112:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23863:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36317;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17440:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26099:289;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23963:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23268:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24326:78;;;;;;;;;;;;;:::i;:::-;;21648:716;;;:::i;:::-;;27331:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36492:546;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23499:77;;;;;;;;;;;;;:::i;:::-;;37050:139;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26459:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15012:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24509:259;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20337:647;14343:12;:10;:12::i;:::-;14332:23;;:7;:5;:7::i;:::-;:23;;;14324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20406:11:::1;20420:3;:10;20406:24;;20472:12;;20465:3;20450:12;;:18;;;;:::i;:::-;20449:35;20441:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20551:11;;20543:3;20528:12;;:18;;;;:::i;:::-;20527:35;;20519:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;20605:21;20629:12;;20605:36;;20674:3;20656:14;;:21;20652:126;;20712:3;20694:14;;:21;;;;;;;:::i;:::-;;;;;;;;20652:126;;;20765:1;20748:14;:18;;;;20652:126;20802:9;20798:179;20821:3;20817:1;:7;20798:179;;;20846:36;20856:3;20860:1;20856:6;;;;;;;;:::i;:::-;;;;;;;;20880:1;20864:13;:17;;;;:::i;:::-;20846:9;:36::i;:::-;20897:12;;:15;;;;;;;;;:::i;:::-;;;;;;20826:3;;;;;:::i;:::-;;;;20798:179;;;;20395:589;;20337:647:::0;:::o;18579:361::-;18664:4;18704:25;18689:40;;;:11;:40;;;;:109;;;;18765:33;18750:48;;;:11;:48;;;;18689:109;:170;;;;18834:25;18819:40;;;:11;:40;;;;18689:170;:243;;;;18895:37;;;18880:52;;;:11;:52;;;;18689:243;18681:251;;18579:361;;;:::o;17354:27::-;;;;;;;;;;;;;:::o;36176:84::-;36215:13;36247:5;36240:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36176:84;:::o;25820:207::-;25896:7;25924:16;25932:7;25924;:16::i;:::-;25916:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;25995:15;:24;26011:7;25995:24;;;;;;;;;;;;;;;;;;;;;25988:31;;25820:207;;;:::o;25382:372::-;25463:13;25479:16;25487:7;25479;:16::i;:::-;25463:32;;25520:5;25514:11;;:2;:11;;;;25506:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;25609:5;25595:19;;:10;:19;;;:58;;;;25618:35;25635:5;25642:10;25618:16;:35::i;:::-;25595:58;25573:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;25725:21;25734:2;25738:7;25725:8;:21::i;:::-;25452:302;25382:372;;:::o;20996:644::-;16046:11;;;;;;;;;;;16045:12;16037:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;16118:4;16104:11;;:18;;;;;;;;;;;;;;;;;;21052:11:::1;21066:12;:10;:12::i;:::-;21052:26;;21110:5;;21097:9;:18;21089:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;21202:11;;21185:12;;21168:14;;21164:1;:18;;;;:::i;:::-;:33;;;;:::i;:::-;21163:50;;21155:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;21303:12;;21297:1;21268:12;:26;21281:12;:10;:12::i;:::-;21268:26;;;;;;;;;;;;;;;;:30;;;;:::i;:::-;21267:48;;21259:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;21372:10;;;;;;;;;;;21364:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;21421:21;21445:12;;21421:36;;21513:12;:26;21526:12;:10;:12::i;:::-;21513:26;;;;;;;;;;;;;;;;:28;;;;;;;;;:::i;:::-;;;;;;21577:29;21587:3;21592:13;21577:9;:29::i;:::-;21617:12;;:15;;;;;;;;;:::i;:::-;;;;;;21041:599;;16159:5:::0;16145:11;;:19;;;;;;;;;;;;;;;;;;20996:644::o;35120:215::-;35237:6;35297:30;;;35290:37;;35120:215;;;;;;;:::o;17568:29::-;;;;:::o;24188:126::-;24234:7;24261:12;;24254:19;;24188:126;:::o;23088:168::-;23156:4;23204;23177:31;;:10;:23;23188:11;23177:23;;;;;;;;;;;;;;;;;;;;;;;;;:31;;;23173:53;;;23219:4;23212:11;;;;23173:53;23243:5;23236:12;;23088:168;;;;:::o;26690:314::-;26885:39;26904:10;26916:7;26885:18;:39::i;:::-;26877:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;26968:28;26978:4;26984:2;26988:7;26968:9;:28::i;:::-;26690:314;;;:::o;17325:22::-;;;;;;;;;;;;;:::o;23768:83::-;14343:12;:10;:12::i;:::-;14332:23;;:7;:5;:7::i;:::-;:23;;;14324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23838:5:::1;23820:15;;:23;;;;;;;;;;;;;;;;;;23768:83::o:0;23588:80::-;14343:12;:10;:12::i;:::-;14332:23;;:7;:5;:7::i;:::-;:23;;;14324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23655:5:::1;23642:10;;:18;;;;;;;;;;;;;;;;;;23588:80::o:0;22778:100::-;14343:12;:10;:12::i;:::-;14332:23;;:7;:5;:7::i;:::-;:23;;;14324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22866:4:::1;22844:10;:19;22855:7;22844:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;22778:100:::0;:::o;24416:81::-;14343:12;:10;:12::i;:::-;14332:23;;:7;:5;:7::i;:::-;:23;;;14324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24484:5:::1;24470:11;;:19;;;;;;;;;;;;;;;;;;24416:81::o:0;19022:631::-;14343:12;:10;:12::i;:::-;14332:23;;:7;:5;:7::i;:::-;:23;;;14324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19072:20:::1;19095:21;19072:44;;19129:12;19154:18:::0;19197:3:::1;19191:2;19176:12;:17;;;;:::i;:::-;19175:25;;;;:::i;:::-;19154:46;;19225:6;;;;;;;;;;;:11;;19244:10;19225:34;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19211:48;;;;;19278:7;19270:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;19362:3;19356:2;19341:12;:17;;;;:::i;:::-;19340:25;;;;:::i;:::-;19327:38;;19390:6;;;;;;;;;;;:11;;19409:10;19390:34;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19376:48;;;;;19443:7;19435:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;19527:3;19521:2;19506:12;:17;;;;:::i;:::-;19505:25;;;;:::i;:::-;19492:38;;19555:7;;;;;;;;;;;:12;;19575:10;19555:35;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19541:49;;;;;19609:7;19601:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;19061:592;;;19022:631::o:0;24077:103::-;14343:12;:10;:12::i;:::-;14332:23;;:7;:5;:7::i;:::-;:23;;;14324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24162:10:::1;24145:14;:27;;;;24077:103:::0;:::o;27075:185::-;27213:39;27230:4;27236:2;27240:7;27213:39;;;;;;;;;;;;:16;:39::i;:::-;27075:185;;;:::o;22431:125::-;22506:16;22514:7;22506;:16::i;:::-;22490:32;;:12;:10;:12::i;:::-;:32;;;22482:41;;;;;;22534:14;22540:7;22534:5;:14::i;:::-;22431:125;:::o;22890:186::-;14343:12;:10;:12::i;:::-;14332:23;;:7;:5;:7::i;:::-;:23;;;14324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22975:9:::1;22970:99;22990:8;:15;22986:1;:19;22970:99;;;23053:4;23027:10;:23;23038:8;23047:1;23038:11;;;;;;;;:::i;:::-;;;;;;;;23027:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;23007:3;;;;;:::i;:::-;;;;22970:99;;;;22890:186:::0;:::o;17534:27::-;;;;:::o;19665:660::-;14343:12;:10;:12::i;:::-;14332:23;;:7;:5;:7::i;:::-;:23;;;14324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19771:12:::1;;19764:3;19749:12;;:18;;;;:::i;:::-;19748:35;19740:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19850:11;;19842:3;19827:12;;:18;;;;:::i;:::-;19826:35;;19818:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;19904:21;19928:12;;19904:36;;20018:3;20000:14;;:21;19996:126;;20056:3;20038:14;;:21;;;;;;;:::i;:::-;;;;;;;;19996:126;;;20109:1;20092:14;:18;;;;19996:126;20146:9;20142:176;20165:3;20161:1;:7;20142:176;;;20190:33;20200:3;20221:1;20205:13;:17;;;;:::i;:::-;20190:9;:33::i;:::-;20238:12;;:15;;;;;;;;;:::i;:::-;;;;;;20170:3;;;;;:::i;:::-;;;;20142:176;;;;19729:596;19665:660:::0;;:::o;17500:27::-;;;;:::o;23392:95::-;14343:12;:10;:12::i;:::-;14332:23;;:7;:5;:7::i;:::-;:23;;;14324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23473:6:::1;23462:8;:17;;;;;;;;;;;;:::i;:::-;;23392:95:::0;:::o;25092:228::-;25164:7;25184:13;25200:7;:16;25208:7;25200:16;;;;;;;;;;;;;;;;;;;;;25184:32;;25252:1;25235:19;;:5;:19;;;;25227:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;25307:5;25300:12;;;25092:228;;;:::o;24832:198::-;24904:7;24949:1;24932:19;;:5;:19;;;;24924:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25006:9;:16;25016:5;25006:16;;;;;;;;;;;;;;;;24999:23;;24832:198;;;:::o;14763:94::-;14343:12;:10;:12::i;:::-;14332:23;;:7;:5;:7::i;:::-;:23;;;14324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14828:21:::1;14846:1;14828:9;:21::i;:::-;14763:94::o:0;17467:26::-;;;;:::o;23676:80::-;14343:12;:10;:12::i;:::-;14332:23;;:7;:5;:7::i;:::-;:23;;;14324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23744:4:::1;23726:15;;:22;;;;;;;;;;;;;;;;;;23676:80::o:0;14112:87::-;14158:7;14185:6;;;;;;;;;;;14178:13;;14112:87;:::o;23863:88::-;14343:12;:10;:12::i;:::-;14332:23;;:7;:5;:7::i;:::-;:23;;;14324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23935:8:::1;23927:5;:16;;;;23863:88:::0;:::o;36317:::-;36358:13;36390:7;36383:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36317:88;:::o;17440:20::-;;;;:::o;26099:289::-;26214:10;26202:22;;:8;:22;;;;26194:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;26310:8;26267:18;:30;26286:10;26267:30;;;;;;;;;;;;;;;:40;26298:8;26267:40;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;26361:8;26334:46;;26349:10;26334:46;;;26371:8;26334:46;;;;;;:::i;:::-;;;;;;;;26099:289;;:::o;23963:102::-;14343:12;:10;:12::i;:::-;14332:23;;:7;:5;:7::i;:::-;:23;;;14324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24048:9:::1;24034:11;:23;;;;23963:102:::0;:::o;23268:112::-;14343:12;:10;:12::i;:::-;14332:23;;:7;:5;:7::i;:::-;:23;;;14324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23363:9:::1;23348:12;:24;;;;23268:112:::0;:::o;24326:78::-;14343:12;:10;:12::i;:::-;14332:23;;:7;:5;:7::i;:::-;:23;;;14324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24392:4:::1;24378:11;;:18;;;;;;;;;;;;;;;;;;24326:78::o:0;21648:716::-;16046:11;;;;;;;;;;;16045:12;16037:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;16118:4;16104:11;;:18;;;;;;;;;;;;;;;;;;21706:11:::1;21720:12;:10;:12::i;:::-;21706:26;;21764:5;;21751:9;:18;21743:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;21856:11;;21839:12;;21822:14;;21818:1;:18;;;;:::i;:::-;:33;;;;:::i;:::-;21817:50;;21809:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;21921:15;;;;;;;;;;;21913:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;22006:4;21978:32;;:10;:24;21989:12;:10;:12::i;:::-;21978:24;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;21970:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;22091:5;22064:10;:24;22075:12;:10;:12::i;:::-;22064:24;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;22135:12;:26;22148:12;:10;:12::i;:::-;22135:26;;;;;;;;;;;;;;;;:28;;;;;;;;;:::i;:::-;;;;;;22184:21;22208:12;;22184:36;;22301:29;22311:3;22316:13;22301:9;:29::i;:::-;22341:12;;:15;;;;;;;;;:::i;:::-;;;;;;21695:669;;16159:5:::0;16145:11;;:19;;;;;;;;;;;;;;;;;;21648:716::o;27331:305::-;27506:39;27525:10;27537:7;27506:18;:39::i;:::-;27498:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;27589:39;27603:4;27609:2;27613:7;27622:5;27589:13;:39::i;:::-;27331:305;;;;:::o;36492:546::-;36550:13;36583:16;36591:7;36583;:16::i;:::-;36575:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;36644:22;36691:11;;;;;;;;;;;36687:308;;;36793:8;36776:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;36758:61;;36687:308;;;36945:8;36955:17;36964:7;36955:8;:17::i;:::-;36928:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;36910:73;;36687:308;37022:8;37015:15;;;36492:546;;;:::o;23499:77::-;14343:12;:10;:12::i;:::-;14332:23;;:7;:5;:7::i;:::-;:23;;;14324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23564:4:::1;23551:10;;:17;;;;;;;;;;;;;;;;;;23499:77::o:0;37050:139::-;37094:13;37155:8;37138:42;;;;;;;;:::i;:::-;;;;;;;;;;;;;37124:57;;37050:139;:::o;26459:164::-;26556:4;26580:18;:25;26599:5;26580:25;;;;;;;;;;;;;;;:35;26606:8;26580:35;;;;;;;;;;;;;;;;;;;;;;;;;26573:42;;26459:164;;;;:::o;15012:186::-;14343:12;:10;:12::i;:::-;14332:23;;:7;:5;:7::i;:::-;:23;;;14324:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15121:1:::1;15101:22;;:8;:22;;;;15093:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15171:19;15181:8;15171:9;:19::i;:::-;15012:186:::0;:::o;24509:259::-;24574:7;24716:6;24689:9;:23;24699:12;24689:23;;;;;;;;;;;;;;;;:34;;;;:::i;:::-;24682:41;;24509:259;;;:::o;13495:98::-;13548:7;13575:10;13568:17;;13495:98;:::o;30087:110::-;30163:26;30173:2;30177:7;30163:26;;;;;;;;;;;;:9;:26::i;:::-;30087:110;;:::o;29122:127::-;29187:4;29239:1;29211:30;;:7;:16;29219:7;29211:16;;;;;;;;;;;;;;;;;;;;;:30;;;;29204:37;;29122:127;;;:::o;33023:167::-;33125:2;33098:15;:24;33114:7;33098:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;33174:7;33170:2;33143:39;;33152:16;33160:7;33152;:16::i;:::-;33143:39;;;;;;;;;;;;33023:167;;:::o;29416:329::-;29509:4;29534:16;29542:7;29534;:16::i;:::-;29526:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29598:13;29614:16;29622:7;29614;:16::i;:::-;29598:32;;29660:5;29649:16;;:7;:16;;;:51;;;;29693:7;29669:31;;:20;29681:7;29669:11;:20::i;:::-;:31;;;29649:51;:87;;;;29704:32;29721:5;29728:7;29704:16;:32::i;:::-;29649:87;29641:96;;;29416:329;;;;:::o;32358:547::-;32510:4;32490:24;;:16;32498:7;32490;:16::i;:::-;:24;;;32482:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;32580:1;32566:16;;:2;:16;;;;32558:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;32625:39;32646:4;32652:2;32656:7;32625:20;:39::i;:::-;32729:29;32746:1;32750:7;32729:8;:29::i;:::-;32790:1;32771:9;:15;32781:4;32771:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;32819:1;32802:9;:13;32812:2;32802:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32850:2;32831:7;:16;32839:7;32831:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32889:7;32885:2;32870:27;;32879:4;32870:27;;;;;;;;;;;;32358:547;;;:::o;31668:353::-;31728:13;31744:16;31752:7;31744;:16::i;:::-;31728:32;;31773:48;31794:5;31809:1;31813:7;31773:20;:48::i;:::-;31862:29;31879:1;31883:7;31862:8;:29::i;:::-;31924:1;31904:9;:16;31914:5;31904:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;31943:7;:16;31951:7;31943:16;;;;;;;;;;;;31936:23;;;;;;;;;;;32005:7;32001:1;31977:36;;31986:5;31977:36;;;;;;;;;;;;31717:304;31668:353;:::o;15206:173::-;15262:16;15281:6;;;;;;;;;;;15262:25;;15307:8;15298:6;;:17;;;;;;;;;;;;;;;;;;15362:8;15331:40;;15352:8;15331:40;;;;;;;;;;;;15251:128;15206:173;:::o;28518:291::-;28675:28;28685:4;28691:2;28695:7;28675:9;:28::i;:::-;28722:48;28745:4;28751:2;28755:7;28764:5;28722:22;:48::i;:::-;28714:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;28518:291;;;;:::o;15422:532::-;15478:13;15517:1;15508:5;:10;15504:53;;;15535:10;;;;;;;;;;;;;;;;;;;;;15504:53;15567:12;15582:5;15567:20;;15598:14;15623:78;15638:1;15630:4;:9;15623:78;;15656:8;;;;;:::i;:::-;;;;15687:2;15679:10;;;;;:::i;:::-;;;15623:78;;;15711:19;15743:6;15733:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15711:39;;15761:154;15777:1;15768:5;:10;15761:154;;15805:1;15795:11;;;;;:::i;:::-;;;15872:2;15864:5;:10;;;;:::i;:::-;15851:2;:24;;;;:::i;:::-;15838:39;;15821:6;15828;15821:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;15901:2;15892:11;;;;;:::i;:::-;;;15761:154;;;15939:6;15925:21;;;;;15422:532;;;;:::o;30424:297::-;30554:18;30560:2;30564:7;30554:5;:18::i;:::-;30605:54;30636:1;30640:2;30644:7;30653:5;30605:22;:54::i;:::-;30583:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;30424:297;;;:::o;35907:126::-;;;;:::o;33755:777::-;33910:4;33931:15;:2;:13;;;:15::i;:::-;33927:598;;;33983:2;33967:36;;;34004:10;34016:4;34022:7;34031:5;33967:70;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33963:507;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34228:1;34211:6;:13;:18;34207:248;;;34254:36;;;;;;;;;;:::i;:::-;;;;;;;;34207:248;34405:6;34399:13;34390:6;34386:2;34382:15;34375:38;33963:507;34098:45;;;34088:55;;;:6;:55;;;;34081:62;;;;;33927:598;34509:4;34502:11;;33755:777;;;;;;;:::o;31057:382::-;31151:1;31137:16;;:2;:16;;;;31129:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31210:16;31218:7;31210;:16::i;:::-;31209:17;31201:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;31272:45;31301:1;31305:2;31309:7;31272:20;:45::i;:::-;31347:1;31330:9;:13;31340:2;31330:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31378:2;31359:7;:16;31367:7;31359:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31423:7;31419:2;31398:33;;31415:1;31398:33;;;;;;;;;;;;31057:382;;:::o;6416:387::-;6476:4;6684:12;6751:7;6739:20;6731:28;;6794:1;6787:4;:8;6780:15;;;6416:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:137::-;2308:5;2346:6;2333:20;2324:29;;2362:32;2388:5;2362:32;:::i;:::-;2263:137;;;;:::o;2406:141::-;2462:5;2493:6;2487:13;2478:22;;2509:32;2535:5;2509:32;:::i;:::-;2406:141;;;;:::o;2566:552::-;2623:8;2633:6;2683:3;2676:4;2668:6;2664:17;2660:27;2650:122;;2691:79;;:::i;:::-;2650:122;2804:6;2791:20;2781:30;;2834:18;2826:6;2823:30;2820:117;;;2856:79;;:::i;:::-;2820:117;2970:4;2962:6;2958:17;2946:29;;3024:3;3016:4;3008:6;3004:17;2994:8;2990:32;2987:41;2984:128;;;3031:79;;:::i;:::-;2984:128;2566:552;;;;;:::o;3137:338::-;3192:5;3241:3;3234:4;3226:6;3222:17;3218:27;3208:122;;3249:79;;:::i;:::-;3208:122;3366:6;3353:20;3391:78;3465:3;3457:6;3450:4;3442:6;3438:17;3391:78;:::i;:::-;3382:87;;3198:277;3137:338;;;;:::o;3495:340::-;3551:5;3600:3;3593:4;3585:6;3581:17;3577:27;3567:122;;3608:79;;:::i;:::-;3567:122;3725:6;3712:20;3750:79;3825:3;3817:6;3810:4;3802:6;3798:17;3750:79;:::i;:::-;3741:88;;3557:278;3495:340;;;;:::o;3841:139::-;3887:5;3925:6;3912:20;3903:29;;3941:33;3968:5;3941:33;:::i;:::-;3841:139;;;;:::o;3986:329::-;4045:6;4094:2;4082:9;4073:7;4069:23;4065:32;4062:119;;;4100:79;;:::i;:::-;4062:119;4220:1;4245:53;4290:7;4281:6;4270:9;4266:22;4245:53;:::i;:::-;4235:63;;4191:117;3986:329;;;;:::o;4321:474::-;4389:6;4397;4446:2;4434:9;4425:7;4421:23;4417:32;4414:119;;;4452:79;;:::i;:::-;4414:119;4572:1;4597:53;4642:7;4633:6;4622:9;4618:22;4597:53;:::i;:::-;4587:63;;4543:117;4699:2;4725:53;4770:7;4761:6;4750:9;4746:22;4725:53;:::i;:::-;4715:63;;4670:118;4321:474;;;;;:::o;4801:619::-;4878:6;4886;4894;4943:2;4931:9;4922:7;4918:23;4914:32;4911:119;;;4949:79;;:::i;:::-;4911:119;5069:1;5094:53;5139:7;5130:6;5119:9;5115:22;5094:53;:::i;:::-;5084:63;;5040:117;5196:2;5222:53;5267:7;5258:6;5247:9;5243:22;5222:53;:::i;:::-;5212:63;;5167:118;5324:2;5350:53;5395:7;5386:6;5375:9;5371:22;5350:53;:::i;:::-;5340:63;;5295:118;4801:619;;;;;:::o;5426:963::-;5523:6;5531;5539;5547;5555;5604:3;5592:9;5583:7;5579:23;5575:33;5572:120;;;5611:79;;:::i;:::-;5572:120;5731:1;5756:53;5801:7;5792:6;5781:9;5777:22;5756:53;:::i;:::-;5746:63;;5702:117;5858:2;5884:53;5929:7;5920:6;5909:9;5905:22;5884:53;:::i;:::-;5874:63;;5829:118;5986:2;6012:53;6057:7;6048:6;6037:9;6033:22;6012:53;:::i;:::-;6002:63;;5957:118;6142:2;6131:9;6127:18;6114:32;6173:18;6165:6;6162:30;6159:117;;;6195:79;;:::i;:::-;6159:117;6308:64;6364:7;6355:6;6344:9;6340:22;6308:64;:::i;:::-;6290:82;;;;6085:297;5426:963;;;;;;;;:::o;6395:943::-;6490:6;6498;6506;6514;6563:3;6551:9;6542:7;6538:23;6534:33;6531:120;;;6570:79;;:::i;:::-;6531:120;6690:1;6715:53;6760:7;6751:6;6740:9;6736:22;6715:53;:::i;:::-;6705:63;;6661:117;6817:2;6843:53;6888:7;6879:6;6868:9;6864:22;6843:53;:::i;:::-;6833:63;;6788:118;6945:2;6971:53;7016:7;7007:6;6996:9;6992:22;6971:53;:::i;:::-;6961:63;;6916:118;7101:2;7090:9;7086:18;7073:32;7132:18;7124:6;7121:30;7118:117;;;7154:79;;:::i;:::-;7118:117;7259:62;7313:7;7304:6;7293:9;7289:22;7259:62;:::i;:::-;7249:72;;7044:287;6395:943;;;;;;;:::o;7344:468::-;7409:6;7417;7466:2;7454:9;7445:7;7441:23;7437:32;7434:119;;;7472:79;;:::i;:::-;7434:119;7592:1;7617:53;7662:7;7653:6;7642:9;7638:22;7617:53;:::i;:::-;7607:63;;7563:117;7719:2;7745:50;7787:7;7778:6;7767:9;7763:22;7745:50;:::i;:::-;7735:60;;7690:115;7344:468;;;;;:::o;7818:474::-;7886:6;7894;7943:2;7931:9;7922:7;7918:23;7914:32;7911:119;;;7949:79;;:::i;:::-;7911:119;8069:1;8094:53;8139:7;8130:6;8119:9;8115:22;8094:53;:::i;:::-;8084:63;;8040:117;8196:2;8222:53;8267:7;8258:6;8247:9;8243:22;8222:53;:::i;:::-;8212:63;;8167:118;7818:474;;;;;:::o;8298:539::-;8382:6;8431:2;8419:9;8410:7;8406:23;8402:32;8399:119;;;8437:79;;:::i;:::-;8399:119;8585:1;8574:9;8570:17;8557:31;8615:18;8607:6;8604:30;8601:117;;;8637:79;;:::i;:::-;8601:117;8742:78;8812:7;8803:6;8792:9;8788:22;8742:78;:::i;:::-;8732:88;;8528:302;8298:539;;;;:::o;8843:327::-;8901:6;8950:2;8938:9;8929:7;8925:23;8921:32;8918:119;;;8956:79;;:::i;:::-;8918:119;9076:1;9101:52;9145:7;9136:6;9125:9;9121:22;9101:52;:::i;:::-;9091:62;;9047:116;8843:327;;;;:::o;9176:349::-;9245:6;9294:2;9282:9;9273:7;9269:23;9265:32;9262:119;;;9300:79;;:::i;:::-;9262:119;9420:1;9445:63;9500:7;9491:6;9480:9;9476:22;9445:63;:::i;:::-;9435:73;;9391:127;9176:349;;;;:::o;9531:509::-;9600:6;9649:2;9637:9;9628:7;9624:23;9620:32;9617:119;;;9655:79;;:::i;:::-;9617:119;9803:1;9792:9;9788:17;9775:31;9833:18;9825:6;9822:30;9819:117;;;9855:79;;:::i;:::-;9819:117;9960:63;10015:7;10006:6;9995:9;9991:22;9960:63;:::i;:::-;9950:73;;9746:287;9531:509;;;;:::o;10046:329::-;10105:6;10154:2;10142:9;10133:7;10129:23;10125:32;10122:119;;;10160:79;;:::i;:::-;10122:119;10280:1;10305:53;10350:7;10341:6;10330:9;10326:22;10305:53;:::i;:::-;10295:63;;10251:117;10046:329;;;;:::o;10381:118::-;10468:24;10486:5;10468:24;:::i;:::-;10463:3;10456:37;10381:118;;:::o;10505:109::-;10586:21;10601:5;10586:21;:::i;:::-;10581:3;10574:34;10505:109;;:::o;10620:115::-;10705:23;10722:5;10705:23;:::i;:::-;10700:3;10693:36;10620:115;;:::o;10741:360::-;10827:3;10855:38;10887:5;10855:38;:::i;:::-;10909:70;10972:6;10967:3;10909:70;:::i;:::-;10902:77;;10988:52;11033:6;11028:3;11021:4;11014:5;11010:16;10988:52;:::i;:::-;11065:29;11087:6;11065:29;:::i;:::-;11060:3;11056:39;11049:46;;10831:270;10741:360;;;;:::o;11107:364::-;11195:3;11223:39;11256:5;11223:39;:::i;:::-;11278:71;11342:6;11337:3;11278:71;:::i;:::-;11271:78;;11358:52;11403:6;11398:3;11391:4;11384:5;11380:16;11358:52;:::i;:::-;11435:29;11457:6;11435:29;:::i;:::-;11430:3;11426:39;11419:46;;11199:272;11107:364;;;;:::o;11477:377::-;11583:3;11611:39;11644:5;11611:39;:::i;:::-;11666:89;11748:6;11743:3;11666:89;:::i;:::-;11659:96;;11764:52;11809:6;11804:3;11797:4;11790:5;11786:16;11764:52;:::i;:::-;11841:6;11836:3;11832:16;11825:23;;11587:267;11477:377;;;;:::o;11884:845::-;11987:3;12024:5;12018:12;12053:36;12079:9;12053:36;:::i;:::-;12105:89;12187:6;12182:3;12105:89;:::i;:::-;12098:96;;12225:1;12214:9;12210:17;12241:1;12236:137;;;;12387:1;12382:341;;;;12203:520;;12236:137;12320:4;12316:9;12305;12301:25;12296:3;12289:38;12356:6;12351:3;12347:16;12340:23;;12236:137;;12382:341;12449:38;12481:5;12449:38;:::i;:::-;12509:1;12523:154;12537:6;12534:1;12531:13;12523:154;;;12611:7;12605:14;12601:1;12596:3;12592:11;12585:35;12661:1;12652:7;12648:15;12637:26;;12559:4;12556:1;12552:12;12547:17;;12523:154;;;12706:6;12701:3;12697:16;12690:23;;12389:334;;12203:520;;11991:738;;11884:845;;;;:::o;12735:366::-;12877:3;12898:67;12962:2;12957:3;12898:67;:::i;:::-;12891:74;;12974:93;13063:3;12974:93;:::i;:::-;13092:2;13087:3;13083:12;13076:19;;12735:366;;;:::o;13107:::-;13249:3;13270:67;13334:2;13329:3;13270:67;:::i;:::-;13263:74;;13346:93;13435:3;13346:93;:::i;:::-;13464:2;13459:3;13455:12;13448:19;;13107:366;;;:::o;13479:402::-;13639:3;13660:85;13742:2;13737:3;13660:85;:::i;:::-;13653:92;;13754:93;13843:3;13754:93;:::i;:::-;13872:2;13867:3;13863:12;13856:19;;13479:402;;;:::o;13887:366::-;14029:3;14050:67;14114:2;14109:3;14050:67;:::i;:::-;14043:74;;14126:93;14215:3;14126:93;:::i;:::-;14244:2;14239:3;14235:12;14228:19;;13887:366;;;:::o;14259:::-;14401:3;14422:67;14486:2;14481:3;14422:67;:::i;:::-;14415:74;;14498:93;14587:3;14498:93;:::i;:::-;14616:2;14611:3;14607:12;14600:19;;14259:366;;;:::o;14631:::-;14773:3;14794:67;14858:2;14853:3;14794:67;:::i;:::-;14787:74;;14870:93;14959:3;14870:93;:::i;:::-;14988:2;14983:3;14979:12;14972:19;;14631:366;;;:::o;15003:::-;15145:3;15166:67;15230:2;15225:3;15166:67;:::i;:::-;15159:74;;15242:93;15331:3;15242:93;:::i;:::-;15360:2;15355:3;15351:12;15344:19;;15003:366;;;:::o;15375:::-;15517:3;15538:67;15602:2;15597:3;15538:67;:::i;:::-;15531:74;;15614:93;15703:3;15614:93;:::i;:::-;15732:2;15727:3;15723:12;15716:19;;15375:366;;;:::o;15747:::-;15889:3;15910:67;15974:2;15969:3;15910:67;:::i;:::-;15903:74;;15986:93;16075:3;15986:93;:::i;:::-;16104:2;16099:3;16095:12;16088:19;;15747:366;;;:::o;16119:::-;16261:3;16282:67;16346:2;16341:3;16282:67;:::i;:::-;16275:74;;16358:93;16447:3;16358:93;:::i;:::-;16476:2;16471:3;16467:12;16460:19;;16119:366;;;:::o;16491:::-;16633:3;16654:67;16718:2;16713:3;16654:67;:::i;:::-;16647:74;;16730:93;16819:3;16730:93;:::i;:::-;16848:2;16843:3;16839:12;16832:19;;16491:366;;;:::o;16863:402::-;17023:3;17044:85;17126:2;17121:3;17044:85;:::i;:::-;17037:92;;17138:93;17227:3;17138:93;:::i;:::-;17256:2;17251:3;17247:12;17240:19;;16863:402;;;:::o;17271:366::-;17413:3;17434:67;17498:2;17493:3;17434:67;:::i;:::-;17427:74;;17510:93;17599:3;17510:93;:::i;:::-;17628:2;17623:3;17619:12;17612:19;;17271:366;;;:::o;17643:::-;17785:3;17806:67;17870:2;17865:3;17806:67;:::i;:::-;17799:74;;17882:93;17971:3;17882:93;:::i;:::-;18000:2;17995:3;17991:12;17984:19;;17643:366;;;:::o;18015:::-;18157:3;18178:67;18242:2;18237:3;18178:67;:::i;:::-;18171:74;;18254:93;18343:3;18254:93;:::i;:::-;18372:2;18367:3;18363:12;18356:19;;18015:366;;;:::o;18387:::-;18529:3;18550:67;18614:2;18609:3;18550:67;:::i;:::-;18543:74;;18626:93;18715:3;18626:93;:::i;:::-;18744:2;18739:3;18735:12;18728:19;;18387:366;;;:::o;18759:::-;18901:3;18922:67;18986:2;18981:3;18922:67;:::i;:::-;18915:74;;18998:93;19087:3;18998:93;:::i;:::-;19116:2;19111:3;19107:12;19100:19;;18759:366;;;:::o;19131:::-;19273:3;19294:67;19358:2;19353:3;19294:67;:::i;:::-;19287:74;;19370:93;19459:3;19370:93;:::i;:::-;19488:2;19483:3;19479:12;19472:19;;19131:366;;;:::o;19503:::-;19645:3;19666:67;19730:2;19725:3;19666:67;:::i;:::-;19659:74;;19742:93;19831:3;19742:93;:::i;:::-;19860:2;19855:3;19851:12;19844:19;;19503:366;;;:::o;19875:::-;20017:3;20038:67;20102:2;20097:3;20038:67;:::i;:::-;20031:74;;20114:93;20203:3;20114:93;:::i;:::-;20232:2;20227:3;20223:12;20216:19;;19875:366;;;:::o;20247:400::-;20407:3;20428:84;20510:1;20505:3;20428:84;:::i;:::-;20421:91;;20521:93;20610:3;20521:93;:::i;:::-;20639:1;20634:3;20630:11;20623:18;;20247:400;;;:::o;20653:366::-;20795:3;20816:67;20880:2;20875:3;20816:67;:::i;:::-;20809:74;;20892:93;20981:3;20892:93;:::i;:::-;21010:2;21005:3;21001:12;20994:19;;20653:366;;;:::o;21025:::-;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:::-;21539:3;21560:67;21624:2;21619:3;21560:67;:::i;:::-;21553:74;;21636:93;21725:3;21636:93;:::i;:::-;21754:2;21749:3;21745:12;21738:19;;21397:366;;;:::o;21769:::-;21911:3;21932:67;21996:2;21991:3;21932:67;:::i;:::-;21925:74;;22008:93;22097:3;22008:93;:::i;:::-;22126:2;22121:3;22117:12;22110:19;;21769:366;;;:::o;22141:::-;22283:3;22304:67;22368:2;22363:3;22304:67;:::i;:::-;22297:74;;22380:93;22469:3;22380:93;:::i;:::-;22498:2;22493:3;22489:12;22482:19;;22141:366;;;:::o;22513:::-;22655:3;22676:67;22740:2;22735:3;22676:67;:::i;:::-;22669:74;;22752:93;22841:3;22752:93;:::i;:::-;22870:2;22865:3;22861:12;22854:19;;22513:366;;;:::o;22885:398::-;23044:3;23065:83;23146:1;23141:3;23065:83;:::i;:::-;23058:90;;23157:93;23246:3;23157:93;:::i;:::-;23275:1;23270:3;23266:11;23259:18;;22885:398;;;:::o;23289:366::-;23431:3;23452:67;23516:2;23511:3;23452:67;:::i;:::-;23445:74;;23528:93;23617:3;23528:93;:::i;:::-;23646:2;23641:3;23637:12;23630:19;;23289:366;;;:::o;23661:::-;23803:3;23824:67;23888:2;23883:3;23824:67;:::i;:::-;23817:74;;23900:93;23989:3;23900:93;:::i;:::-;24018:2;24013:3;24009:12;24002:19;;23661:366;;;:::o;24033:118::-;24120:24;24138:5;24120:24;:::i;:::-;24115:3;24108:37;24033:118;;:::o;24157:695::-;24435:3;24457:92;24545:3;24536:6;24457:92;:::i;:::-;24450:99;;24566:95;24657:3;24648:6;24566:95;:::i;:::-;24559:102;;24678:148;24822:3;24678:148;:::i;:::-;24671:155;;24843:3;24836:10;;24157:695;;;;;:::o;24858:535::-;25088:3;25110:92;25198:3;25189:6;25110:92;:::i;:::-;25103:99;;25219:148;25363:3;25219:148;:::i;:::-;25212:155;;25384:3;25377:10;;24858:535;;;;:::o;25399:::-;25629:3;25651:92;25739:3;25730:6;25651:92;:::i;:::-;25644:99;;25760:148;25904:3;25760:148;:::i;:::-;25753:155;;25925:3;25918:10;;25399:535;;;;:::o;25940:379::-;26124:3;26146:147;26289:3;26146:147;:::i;:::-;26139:154;;26310:3;26303:10;;25940:379;;;:::o;26325:222::-;26418:4;26456:2;26445:9;26441:18;26433:26;;26469:71;26537:1;26526:9;26522:17;26513:6;26469:71;:::i;:::-;26325:222;;;;:::o;26553:640::-;26748:4;26786:3;26775:9;26771:19;26763:27;;26800:71;26868:1;26857:9;26853:17;26844:6;26800:71;:::i;:::-;26881:72;26949:2;26938:9;26934:18;26925:6;26881:72;:::i;:::-;26963;27031:2;27020:9;27016:18;27007:6;26963:72;:::i;:::-;27082:9;27076:4;27072:20;27067:2;27056:9;27052:18;27045:48;27110:76;27181:4;27172:6;27110:76;:::i;:::-;27102:84;;26553:640;;;;;;;:::o;27199:210::-;27286:4;27324:2;27313:9;27309:18;27301:26;;27337:65;27399:1;27388:9;27384:17;27375:6;27337:65;:::i;:::-;27199:210;;;;:::o;27415:218::-;27506:4;27544:2;27533:9;27529:18;27521:26;;27557:69;27623:1;27612:9;27608:17;27599:6;27557:69;:::i;:::-;27415:218;;;;:::o;27639:313::-;27752:4;27790:2;27779:9;27775:18;27767:26;;27839:9;27833:4;27829:20;27825:1;27814:9;27810:17;27803:47;27867:78;27940:4;27931:6;27867:78;:::i;:::-;27859:86;;27639:313;;;;:::o;27958:419::-;28124:4;28162:2;28151:9;28147:18;28139:26;;28211:9;28205:4;28201:20;28197:1;28186:9;28182:17;28175:47;28239:131;28365:4;28239:131;:::i;:::-;28231:139;;27958:419;;;:::o;28383:::-;28549:4;28587:2;28576:9;28572:18;28564:26;;28636:9;28630:4;28626:20;28622:1;28611:9;28607:17;28600:47;28664:131;28790:4;28664:131;:::i;:::-;28656:139;;28383:419;;;:::o;28808:::-;28974:4;29012:2;29001:9;28997:18;28989:26;;29061:9;29055:4;29051:20;29047:1;29036:9;29032:17;29025:47;29089:131;29215:4;29089:131;:::i;:::-;29081:139;;28808:419;;;:::o;29233:::-;29399:4;29437:2;29426:9;29422:18;29414:26;;29486:9;29480:4;29476:20;29472:1;29461:9;29457:17;29450:47;29514:131;29640:4;29514:131;:::i;:::-;29506:139;;29233:419;;;:::o;29658:::-;29824:4;29862:2;29851:9;29847:18;29839:26;;29911:9;29905:4;29901:20;29897:1;29886:9;29882:17;29875:47;29939:131;30065:4;29939:131;:::i;:::-;29931:139;;29658:419;;;:::o;30083:::-;30249:4;30287:2;30276:9;30272:18;30264:26;;30336:9;30330:4;30326:20;30322:1;30311:9;30307:17;30300:47;30364:131;30490:4;30364:131;:::i;:::-;30356:139;;30083:419;;;:::o;30508:::-;30674:4;30712:2;30701:9;30697:18;30689:26;;30761:9;30755:4;30751:20;30747:1;30736:9;30732:17;30725:47;30789:131;30915:4;30789:131;:::i;:::-;30781:139;;30508:419;;;:::o;30933:::-;31099:4;31137:2;31126:9;31122:18;31114:26;;31186:9;31180:4;31176:20;31172:1;31161:9;31157:17;31150:47;31214:131;31340:4;31214:131;:::i;:::-;31206:139;;30933:419;;;:::o;31358:::-;31524:4;31562:2;31551:9;31547:18;31539:26;;31611:9;31605:4;31601:20;31597:1;31586:9;31582:17;31575:47;31639:131;31765:4;31639:131;:::i;:::-;31631:139;;31358:419;;;:::o;31783:::-;31949:4;31987:2;31976:9;31972:18;31964:26;;32036:9;32030:4;32026:20;32022:1;32011:9;32007:17;32000:47;32064:131;32190:4;32064:131;:::i;:::-;32056:139;;31783:419;;;:::o;32208:::-;32374:4;32412:2;32401:9;32397:18;32389:26;;32461:9;32455:4;32451:20;32447:1;32436:9;32432:17;32425:47;32489:131;32615:4;32489:131;:::i;:::-;32481:139;;32208:419;;;:::o;32633:::-;32799:4;32837:2;32826:9;32822:18;32814:26;;32886:9;32880:4;32876:20;32872:1;32861:9;32857:17;32850:47;32914:131;33040:4;32914:131;:::i;:::-;32906:139;;32633:419;;;:::o;33058:::-;33224:4;33262:2;33251:9;33247:18;33239:26;;33311:9;33305:4;33301:20;33297:1;33286:9;33282:17;33275:47;33339:131;33465:4;33339:131;:::i;:::-;33331:139;;33058:419;;;:::o;33483:::-;33649:4;33687:2;33676:9;33672:18;33664:26;;33736:9;33730:4;33726:20;33722:1;33711:9;33707:17;33700:47;33764:131;33890:4;33764:131;:::i;:::-;33756:139;;33483:419;;;:::o;33908:::-;34074:4;34112:2;34101:9;34097:18;34089:26;;34161:9;34155:4;34151:20;34147:1;34136:9;34132:17;34125:47;34189:131;34315:4;34189:131;:::i;:::-;34181:139;;33908:419;;;:::o;34333:::-;34499:4;34537:2;34526:9;34522:18;34514:26;;34586:9;34580:4;34576:20;34572:1;34561:9;34557:17;34550:47;34614:131;34740:4;34614:131;:::i;:::-;34606:139;;34333:419;;;:::o;34758:::-;34924:4;34962:2;34951:9;34947:18;34939:26;;35011:9;35005:4;35001:20;34997:1;34986:9;34982:17;34975:47;35039:131;35165:4;35039:131;:::i;:::-;35031:139;;34758:419;;;:::o;35183:::-;35349:4;35387:2;35376:9;35372:18;35364:26;;35436:9;35430:4;35426:20;35422:1;35411:9;35407:17;35400:47;35464:131;35590:4;35464:131;:::i;:::-;35456:139;;35183:419;;;:::o;35608:::-;35774:4;35812:2;35801:9;35797:18;35789:26;;35861:9;35855:4;35851:20;35847:1;35836:9;35832:17;35825:47;35889:131;36015:4;35889:131;:::i;:::-;35881:139;;35608:419;;;:::o;36033:::-;36199:4;36237:2;36226:9;36222:18;36214:26;;36286:9;36280:4;36276:20;36272:1;36261:9;36257:17;36250:47;36314:131;36440:4;36314:131;:::i;:::-;36306:139;;36033:419;;;:::o;36458:::-;36624:4;36662:2;36651:9;36647:18;36639:26;;36711:9;36705:4;36701:20;36697:1;36686:9;36682:17;36675:47;36739:131;36865:4;36739:131;:::i;:::-;36731:139;;36458:419;;;:::o;36883:::-;37049:4;37087:2;37076:9;37072:18;37064:26;;37136:9;37130:4;37126:20;37122:1;37111:9;37107:17;37100:47;37164:131;37290:4;37164:131;:::i;:::-;37156:139;;36883:419;;;:::o;37308:::-;37474:4;37512:2;37501:9;37497:18;37489:26;;37561:9;37555:4;37551:20;37547:1;37536:9;37532:17;37525:47;37589:131;37715:4;37589:131;:::i;:::-;37581:139;;37308:419;;;:::o;37733:::-;37899:4;37937:2;37926:9;37922:18;37914:26;;37986:9;37980:4;37976:20;37972:1;37961:9;37957:17;37950:47;38014:131;38140:4;38014:131;:::i;:::-;38006:139;;37733:419;;;:::o;38158:::-;38324:4;38362:2;38351:9;38347:18;38339:26;;38411:9;38405:4;38401:20;38397:1;38386:9;38382:17;38375:47;38439:131;38565:4;38439:131;:::i;:::-;38431:139;;38158:419;;;:::o;38583:::-;38749:4;38787:2;38776:9;38772:18;38764:26;;38836:9;38830:4;38826:20;38822:1;38811:9;38807:17;38800:47;38864:131;38990:4;38864:131;:::i;:::-;38856:139;;38583:419;;;:::o;39008:222::-;39101:4;39139:2;39128:9;39124:18;39116:26;;39152:71;39220:1;39209:9;39205:17;39196:6;39152:71;:::i;:::-;39008:222;;;;:::o;39236:129::-;39270:6;39297:20;;:::i;:::-;39287:30;;39326:33;39354:4;39346:6;39326:33;:::i;:::-;39236:129;;;:::o;39371:75::-;39404:6;39437:2;39431:9;39421:19;;39371:75;:::o;39452:311::-;39529:4;39619:18;39611:6;39608:30;39605:56;;;39641:18;;:::i;:::-;39605:56;39691:4;39683:6;39679:17;39671:25;;39751:4;39745;39741:15;39733:23;;39452:311;;;:::o;39769:307::-;39830:4;39920:18;39912:6;39909:30;39906:56;;;39942:18;;:::i;:::-;39906:56;39980:29;40002:6;39980:29;:::i;:::-;39972:37;;40064:4;40058;40054:15;40046:23;;39769:307;;;:::o;40082:308::-;40144:4;40234:18;40226:6;40223:30;40220:56;;;40256:18;;:::i;:::-;40220:56;40294:29;40316:6;40294:29;:::i;:::-;40286:37;;40378:4;40372;40368:15;40360:23;;40082:308;;;:::o;40396:141::-;40445:4;40468:3;40460:11;;40491:3;40488:1;40481:14;40525:4;40522:1;40512:18;40504:26;;40396:141;;;:::o;40543:98::-;40594:6;40628:5;40622:12;40612:22;;40543:98;;;:::o;40647:99::-;40699:6;40733:5;40727:12;40717:22;;40647:99;;;:::o;40752:168::-;40835:11;40869:6;40864:3;40857:19;40909:4;40904:3;40900:14;40885:29;;40752:168;;;;:::o;40926:147::-;41027:11;41064:3;41049:18;;40926:147;;;;:::o;41079:169::-;41163:11;41197:6;41192:3;41185:19;41237:4;41232:3;41228:14;41213:29;;41079:169;;;;:::o;41254:148::-;41356:11;41393:3;41378:18;;41254:148;;;;:::o;41408:305::-;41448:3;41467:20;41485:1;41467:20;:::i;:::-;41462:25;;41501:20;41519:1;41501:20;:::i;:::-;41496:25;;41655:1;41587:66;41583:74;41580:1;41577:81;41574:107;;;41661:18;;:::i;:::-;41574:107;41705:1;41702;41698:9;41691:16;;41408:305;;;;:::o;41719:185::-;41759:1;41776:20;41794:1;41776:20;:::i;:::-;41771:25;;41810:20;41828:1;41810:20;:::i;:::-;41805:25;;41849:1;41839:35;;41854:18;;:::i;:::-;41839:35;41896:1;41893;41889:9;41884:14;;41719:185;;;;:::o;41910:348::-;41950:7;41973:20;41991:1;41973:20;:::i;:::-;41968:25;;42007:20;42025:1;42007:20;:::i;:::-;42002:25;;42195:1;42127:66;42123:74;42120:1;42117:81;42112:1;42105:9;42098:17;42094:105;42091:131;;;42202:18;;:::i;:::-;42091:131;42250:1;42247;42243:9;42232:20;;41910:348;;;;:::o;42264:191::-;42304:4;42324:20;42342:1;42324:20;:::i;:::-;42319:25;;42358:20;42376:1;42358:20;:::i;:::-;42353:25;;42397:1;42394;42391:8;42388:34;;;42402:18;;:::i;:::-;42388:34;42447:1;42444;42440:9;42432:17;;42264:191;;;;:::o;42461:96::-;42498:7;42527:24;42545:5;42527:24;:::i;:::-;42516:35;;42461:96;;;:::o;42563:90::-;42597:7;42640:5;42633:13;42626:21;42615:32;;42563:90;;;:::o;42659:149::-;42695:7;42735:66;42728:5;42724:78;42713:89;;42659:149;;;:::o;42814:126::-;42851:7;42891:42;42884:5;42880:54;42869:65;;42814:126;;;:::o;42946:77::-;42983:7;43012:5;43001:16;;42946:77;;;:::o;43029:154::-;43113:6;43108:3;43103;43090:30;43175:1;43166:6;43161:3;43157:16;43150:27;43029:154;;;:::o;43189:307::-;43257:1;43267:113;43281:6;43278:1;43275:13;43267:113;;;43366:1;43361:3;43357:11;43351:18;43347:1;43342:3;43338:11;43331:39;43303:2;43300:1;43296:10;43291:15;;43267:113;;;43398:6;43395:1;43392:13;43389:101;;;43478:1;43469:6;43464:3;43460:16;43453:27;43389:101;43238:258;43189:307;;;:::o;43502:320::-;43546:6;43583:1;43577:4;43573:12;43563:22;;43630:1;43624:4;43620:12;43651:18;43641:81;;43707:4;43699:6;43695:17;43685:27;;43641:81;43769:2;43761:6;43758:14;43738:18;43735:38;43732:84;;;43788:18;;:::i;:::-;43732:84;43553:269;43502:320;;;:::o;43828:281::-;43911:27;43933:4;43911:27;:::i;:::-;43903:6;43899:40;44041:6;44029:10;44026:22;44005:18;43993:10;43990:34;43987:62;43984:88;;;44052:18;;:::i;:::-;43984:88;44092:10;44088:2;44081:22;43871:238;43828:281;;:::o;44115:233::-;44154:3;44177:24;44195:5;44177:24;:::i;:::-;44168:33;;44223:66;44216:5;44213:77;44210:103;;;44293:18;;:::i;:::-;44210:103;44340:1;44333:5;44329:13;44322:20;;44115:233;;;:::o;44354:176::-;44386:1;44403:20;44421:1;44403:20;:::i;:::-;44398:25;;44437:20;44455:1;44437:20;:::i;:::-;44432:25;;44476:1;44466:35;;44481:18;;:::i;:::-;44466:35;44522:1;44519;44515:9;44510:14;;44354:176;;;;:::o;44536:180::-;44584:77;44581:1;44574:88;44681:4;44678:1;44671:15;44705:4;44702:1;44695:15;44722:180;44770:77;44767:1;44760:88;44867:4;44864:1;44857:15;44891:4;44888:1;44881:15;44908:180;44956:77;44953:1;44946:88;45053:4;45050:1;45043:15;45077:4;45074:1;45067:15;45094:180;45142:77;45139:1;45132:88;45239:4;45236:1;45229:15;45263:4;45260:1;45253:15;45280:180;45328:77;45325:1;45318:88;45425:4;45422:1;45415:15;45449:4;45446:1;45439:15;45466:117;45575:1;45572;45565:12;45589:117;45698:1;45695;45688:12;45712:117;45821:1;45818;45811:12;45835:117;45944:1;45941;45934:12;45958:117;46067:1;46064;46057:12;46081:117;46190:1;46187;46180:12;46204:102;46245:6;46296:2;46292:7;46287:2;46280:5;46276:14;46272:28;46262:38;;46204:102;;;:::o;46312:180::-;46452:32;46448:1;46440:6;46436:14;46429:56;46312:180;:::o;46498:182::-;46638:34;46634:1;46626:6;46622:14;46615:58;46498:182;:::o;46686:163::-;46826:15;46822:1;46814:6;46810:14;46803:39;46686:163;:::o;46855:177::-;46995:29;46991:1;46983:6;46979:14;46972:53;46855:177;:::o;47038:168::-;47178:20;47174:1;47166:6;47162:14;47155:44;47038:168;:::o;47212:178::-;47352:30;47348:1;47340:6;47336:14;47329:54;47212:178;:::o;47396:182::-;47536:34;47532:1;47524:6;47520:14;47513:58;47396:182;:::o;47584:180::-;47724:32;47720:1;47712:6;47708:14;47701:56;47584:180;:::o;47770:174::-;47910:26;47906:1;47898:6;47894:14;47887:50;47770:174;:::o;47950:182::-;48090:34;48086:1;48078:6;48074:14;48067:58;47950:182;:::o;48138:175::-;48278:27;48274:1;48266:6;48262:14;48255:51;48138:175;:::o;48319:162::-;48459:14;48455:1;48447:6;48443:14;48436:38;48319:162;:::o;48487:180::-;48627:32;48623:1;48615:6;48611:14;48604:56;48487:180;:::o;48673:176::-;48813:28;48809:1;48801:6;48797:14;48790:52;48673:176;:::o;48855:223::-;48995:34;48991:1;48983:6;48979:14;48972:58;49064:6;49059:2;49051:6;49047:15;49040:31;48855:223;:::o;49084:167::-;49224:19;49220:1;49212:6;49208:14;49201:43;49084:167;:::o;49257:181::-;49397:33;49393:1;49385:6;49381:14;49374:57;49257:181;:::o;49444:::-;49584:33;49580:1;49572:6;49568:14;49561:57;49444:181;:::o;49631:182::-;49771:34;49767:1;49759:6;49755:14;49748:58;49631:182;:::o;49819:::-;49959:34;49955:1;49947:6;49943:14;49936:58;49819:182;:::o;50007:155::-;50147:7;50143:1;50135:6;50131:14;50124:31;50007:155;:::o;50168:178::-;50308:30;50304:1;50296:6;50292:14;50285:54;50168:178;:::o;50352:182::-;50492:34;50488:1;50480:6;50476:14;50469:58;50352:182;:::o;50540:174::-;50680:26;50676:1;50668:6;50664:14;50657:50;50540:174;:::o;50720:178::-;50860:30;50856:1;50848:6;50844:14;50837:54;50720:178;:::o;50904:163::-;51044:15;51040:1;51032:6;51028:14;51021:39;50904:163;:::o;51073:220::-;51213:34;51209:1;51201:6;51197:14;51190:58;51282:3;51277:2;51269:6;51265:15;51258:28;51073:220;:::o;51299:114::-;;:::o;51419:179::-;51559:31;51555:1;51547:6;51543:14;51536:55;51419:179;:::o;51604:169::-;51744:21;51740:1;51732:6;51728:14;51721:45;51604:169;:::o;51779:122::-;51852:24;51870:5;51852:24;:::i;:::-;51845:5;51842:35;51832:63;;51891:1;51888;51881:12;51832:63;51779:122;:::o;51907:116::-;51977:21;51992:5;51977:21;:::i;:::-;51970:5;51967:32;51957:60;;52013:1;52010;52003:12;51957:60;51907:116;:::o;52029:120::-;52101:23;52118:5;52101:23;:::i;:::-;52094:5;52091:34;52081:62;;52139:1;52136;52129:12;52081:62;52029:120;:::o;52155:122::-;52228:24;52246:5;52228:24;:::i;:::-;52221:5;52218:35;52208:63;;52267:1;52264;52257:12;52208:63;52155:122;:::o
Swarm Source
ipfs://26e95a192fd231768c13b6fdb2bc1ecd1a6812ac93fd00057b46b2e96b47c19b
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.