ERC-721
Overview
Max Total Supply
3,331 ROCKS
Holders
1,311
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 ROCKSLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Rocks
Compiler Version
v0.8.16+commit.07a7930e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-02-09 */ // SPDX-License-Identifier: MIT /* ▄█ █▄ ▄████████ ▄█ █▄ ▄█ ▄█ ▄█ ▄████████ ▄██████▄ ▄████████ ▄█ ▄█▄ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ▄███▀ ███ ███ ███ █▀ ███ ███ ███▌ ███ ███ ███ ███ ███ ███ ███ █▀ ███▐██▀ ███ ███ ▄███▄▄▄ ███ ███ ███▌ ███ ███ ▄███▄▄▄▄██▀ ███ ███ ███ ▄█████▀ ███ ███ ▀▀███▀▀▀ ███ ███ ███▌ ███ ███ ▀▀███▀▀▀▀▀ ███ ███ ███ ▀▀█████▄ ███ ███ ███ █▄ ███ ███ ███ ███ ███ ▀███████████ ███ ███ ███ █▄ ███▐██▄ ███ ▄█▄ ███ ███ ███ ███ ▄█▄ ███ ███ ███▌ ▄ ███▌ ▄ ███ ███ ███ ███ ███ ███ ███ ▀███▄ ▀███▀███▀ ██████████ ▀███▀███▀ █▀ █████▄▄██ █████▄▄██ ███ ███ ▀██████▀ ████████▀ ███ ▀█▀ ▀ ▀ ███ ███ ▀ */ pragma solidity ^0.8.0; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } pragma solidity ^0.8.0; abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() { _transferOwnership(_msgSender()); } modifier onlyOwner() { _checkOwner(); _; } function owner() public view virtual returns (address) { return _owner; } function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } pragma solidity ^0.8.0; abstract contract ReentrancyGuard { uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; _status = _NOT_ENTERED; } } pragma solidity ^0.8.0; library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; 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); } function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } pragma solidity ^0.8.0; library EnumerableSet { struct Set { // Storage of set values bytes32[] _values; mapping(bytes32 => uint256) _indexes; } function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); set._indexes[value] = set._values.length; return true; } else { return false; } } function _remove(Set storage set, bytes32 value) private returns (bool) { uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; if (lastIndex != toDeleteIndex) { bytes32 lastValue = set._values[lastIndex]; set._values[toDeleteIndex] = lastValue; set._indexes[lastValue] = valueIndex; } // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } function _length(Set storage set) private view returns (uint256) { return set._values.length; } function _at(Set storage set, uint256 index) private view returns (bytes32) { return set._values[index]; } function _values(Set storage set) private view returns (bytes32[] memory) { return set._values; } struct Bytes32Set { Set _inner; } function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } function values(Bytes32Set storage set) internal view returns (bytes32[] memory) { return _values(set._inner); } struct AddressSet { Set _inner; } function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } function values(AddressSet storage set) internal view returns (address[] memory) { bytes32[] memory store = _values(set._inner); address[] memory result; assembly { result := store } return result; } struct UintSet { Set _inner; } function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } function values(UintSet storage set) internal view returns (uint256[] memory) { bytes32[] memory store = _values(set._inner); uint256[] memory result; /// @solidity memory-safe-assembly assembly { result := store } return result; } } pragma solidity ^0.8.4; interface IERC721A { error ApprovalCallerNotOwnerNorApproved(); error ApprovalQueryForNonexistentToken(); error BalanceQueryForZeroAddress(); error MintToZeroAddress(); error MintZeroQuantity(); error OwnerQueryForNonexistentToken(); error TransferCallerNotOwnerNorApproved(); error TransferFromIncorrectOwner(); error TransferToNonERC721ReceiverImplementer(); error TransferToZeroAddress(); error URIQueryForNonexistentToken(); error MintERC2309QuantityExceedsLimit(); error OwnershipNotInitializedForExtraData(); struct TokenOwnership { address addr; uint64 startTimestamp; bool burned; uint24 extraData; } function totalSupply() external view returns (uint256); function supportsInterface(bytes4 interfaceId) external view returns (bool); event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); event ApprovalForAll(address indexed owner, address indexed operator, bool approved); function balanceOf(address owner) external view returns (uint256 balance); function ownerOf(uint256 tokenId) external view returns (address owner); function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external payable; function safeTransferFrom( address from, address to, uint256 tokenId ) external payable; function transferFrom( address from, address to, uint256 tokenId ) external payable; function approve(address to, uint256 tokenId) external payable; function setApprovalForAll(address operator, bool _approved) external; function getApproved(uint256 tokenId) external view returns (address operator); function isApprovedForAll(address owner, address operator) external view returns (bool); function name() external view returns (string memory); function symbol() external view returns (string memory); function tokenURI(uint256 tokenId) external view returns (string memory); event ConsecutiveTransfer(uint256 indexed fromTokenId, uint256 toTokenId, address indexed from, address indexed to); } pragma solidity ^0.8.4; interface ERC721A__IERC721Receiver { function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } contract ERC721A is IERC721A { struct TokenApprovalRef { address value; } uint256 private constant _BITMASK_ADDRESS_DATA_ENTRY = (1 << 64) - 1; uint256 private constant _BITPOS_NUMBER_MINTED = 64; uint256 private constant _BITPOS_NUMBER_BURNED = 128; uint256 private constant _BITPOS_AUX = 192; uint256 private constant _BITMASK_AUX_COMPLEMENT = (1 << 192) - 1; uint256 private constant _BITPOS_START_TIMESTAMP = 160; uint256 private constant _BITMASK_BURNED = 1 << 224; uint256 private constant _BITPOS_NEXT_INITIALIZED = 225; uint256 private constant _BITMASK_NEXT_INITIALIZED = 1 << 225; uint256 private constant _BITPOS_EXTRA_DATA = 232; uint256 private constant _BITMASK_EXTRA_DATA_COMPLEMENT = (1 << 232) - 1; uint256 private constant _BITMASK_ADDRESS = (1 << 160) - 1; uint256 private constant _MAX_MINT_ERC2309_QUANTITY_LIMIT = 5000; bytes32 private constant _TRANSFER_EVENT_SIGNATURE = 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef; uint256 private _currentIndex; uint256 private _burnCounter; string private _name; string private _symbol; mapping(uint256 => uint256) private _packedOwnerships; mapping(address => uint256) private _packedAddressData; mapping(uint256 => TokenApprovalRef) private _tokenApprovals; mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _currentIndex = _startTokenId(); } function _startTokenId() internal view virtual returns (uint256) { return 0; } function _nextTokenId() internal view virtual returns (uint256) { return _currentIndex; } function totalSupply() public view virtual override returns (uint256) { unchecked { return _currentIndex - _burnCounter - _startTokenId(); } } function _totalMinted() internal view virtual returns (uint256) { unchecked { return _currentIndex - _startTokenId(); } } function _totalBurned() internal view virtual returns (uint256) { return _burnCounter; } function balanceOf(address owner) public view virtual override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); return _packedAddressData[owner] & _BITMASK_ADDRESS_DATA_ENTRY; } function _numberMinted(address owner) internal view returns (uint256) { return (_packedAddressData[owner] >> _BITPOS_NUMBER_MINTED) & _BITMASK_ADDRESS_DATA_ENTRY; } function _numberBurned(address owner) internal view returns (uint256) { return (_packedAddressData[owner] >> _BITPOS_NUMBER_BURNED) & _BITMASK_ADDRESS_DATA_ENTRY; } function _getAux(address owner) internal view returns (uint64) { return uint64(_packedAddressData[owner] >> _BITPOS_AUX); } function _setAux(address owner, uint64 aux) internal virtual { uint256 packed = _packedAddressData[owner]; uint256 auxCasted; // Cast `aux` with assembly to avoid redundant masking. assembly { auxCasted := aux } packed = (packed & _BITMASK_AUX_COMPLEMENT) | (auxCasted << _BITPOS_AUX); _packedAddressData[owner] = packed; } function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == 0x01ffc9a7 || interfaceId == 0x80ac58cd || interfaceId == 0x5b5e139f; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); string memory baseURI = _baseURI(); return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, _toString(tokenId))) : ''; } function _baseURI() internal view virtual returns (string memory) { return ''; } function ownerOf(uint256 tokenId) public view virtual override returns (address) { return address(uint160(_packedOwnershipOf(tokenId))); } function _ownershipOf(uint256 tokenId) internal view virtual returns (TokenOwnership memory) { return _unpackedOwnership(_packedOwnershipOf(tokenId)); } function _ownershipAt(uint256 index) internal view virtual returns (TokenOwnership memory) { return _unpackedOwnership(_packedOwnerships[index]); } function _initializeOwnershipAt(uint256 index) internal virtual { if (_packedOwnerships[index] == 0) { _packedOwnerships[index] = _packedOwnershipOf(index); } } function _packedOwnershipOf(uint256 tokenId) private view returns (uint256) { uint256 curr = tokenId; unchecked { if (_startTokenId() <= curr) if (curr < _currentIndex) { uint256 packed = _packedOwnerships[curr]; if (packed & _BITMASK_BURNED == 0) { while (packed == 0) { packed = _packedOwnerships[--curr]; } return packed; } } } revert OwnerQueryForNonexistentToken(); } function _unpackedOwnership(uint256 packed) private pure returns (TokenOwnership memory ownership) { ownership.addr = address(uint160(packed)); ownership.startTimestamp = uint64(packed >> _BITPOS_START_TIMESTAMP); ownership.burned = packed & _BITMASK_BURNED != 0; ownership.extraData = uint24(packed >> _BITPOS_EXTRA_DATA); } function _packOwnershipData(address owner, uint256 flags) private view returns (uint256 result) { assembly { // Mask `owner` to the lower 160 bits, in case the upper bits somehow aren't clean. owner := and(owner, _BITMASK_ADDRESS) // `owner | (block.timestamp << _BITPOS_START_TIMESTAMP) | flags`. result := or(owner, or(shl(_BITPOS_START_TIMESTAMP, timestamp()), flags)) } } function _nextInitializedFlag(uint256 quantity) private pure returns (uint256 result) { // For branchless setting of the `nextInitialized` flag. assembly { // `(quantity == 1) << _BITPOS_NEXT_INITIALIZED`. result := shl(_BITPOS_NEXT_INITIALIZED, eq(quantity, 1)) } } function approve(address to, uint256 tokenId) public payable virtual override { address owner = ownerOf(tokenId); if (_msgSenderERC721A() != owner) if (!isApprovedForAll(owner, _msgSenderERC721A())) { revert ApprovalCallerNotOwnerNorApproved(); } _tokenApprovals[tokenId].value = to; emit Approval(owner, to, tokenId); } function getApproved(uint256 tokenId) public view virtual override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId].value; } function setApprovalForAll(address operator, bool approved) public virtual override { _operatorApprovals[_msgSenderERC721A()][operator] = approved; emit ApprovalForAll(_msgSenderERC721A(), operator, approved); } function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } function _exists(uint256 tokenId) internal view virtual returns (bool) { return _startTokenId() <= tokenId && tokenId < _currentIndex && // If within bounds, _packedOwnerships[tokenId] & _BITMASK_BURNED == 0; // and not burned. } function _isSenderApprovedOrOwner( address approvedAddress, address owner, address msgSender ) private pure returns (bool result) { assembly { owner := and(owner, _BITMASK_ADDRESS) msgSender := and(msgSender, _BITMASK_ADDRESS) result := or(eq(msgSender, owner), eq(msgSender, approvedAddress)) } } function _getApprovedSlotAndAddress(uint256 tokenId) private view returns (uint256 approvedAddressSlot, address approvedAddress) { TokenApprovalRef storage tokenApproval = _tokenApprovals[tokenId]; assembly { approvedAddressSlot := tokenApproval.slot approvedAddress := sload(approvedAddressSlot) } } function transferFrom( address from, address to, uint256 tokenId ) public payable virtual override { uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId); if (address(uint160(prevOwnershipPacked)) != from) revert TransferFromIncorrectOwner(); (uint256 approvedAddressSlot, address approvedAddress) = _getApprovedSlotAndAddress(tokenId); if (!_isSenderApprovedOrOwner(approvedAddress, from, _msgSenderERC721A())) if (!isApprovedForAll(from, _msgSenderERC721A())) revert TransferCallerNotOwnerNorApproved(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); assembly { if approvedAddress { sstore(approvedAddressSlot, 0) } } unchecked { --_packedAddressData[from]; ++_packedAddressData[to]; _packedOwnerships[tokenId] = _packOwnershipData( to, _BITMASK_NEXT_INITIALIZED | _nextExtraData(from, to, prevOwnershipPacked) ); if (prevOwnershipPacked & _BITMASK_NEXT_INITIALIZED == 0) { uint256 nextTokenId = tokenId + 1; if (_packedOwnerships[nextTokenId] == 0) { if (nextTokenId != _currentIndex) { _packedOwnerships[nextTokenId] = prevOwnershipPacked; } } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } function safeTransferFrom( address from, address to, uint256 tokenId ) public payable virtual override { safeTransferFrom(from, to, tokenId, ''); } function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public payable virtual override { transferFrom(from, to, tokenId); if (to.code.length != 0) if (!_checkContractOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} function _checkContractOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { try ERC721A__IERC721Receiver(to).onERC721Received(_msgSenderERC721A(), from, tokenId, _data) returns ( bytes4 retval ) { return retval == ERC721A__IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } function _mint(address to, uint256 quantity) internal virtual { uint256 startTokenId = _currentIndex; if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); unchecked { _packedAddressData[to] += quantity * ((1 << _BITPOS_NUMBER_MINTED) | 1); _packedOwnerships[startTokenId] = _packOwnershipData( to, _nextInitializedFlag(quantity) | _nextExtraData(address(0), to, 0) ); uint256 toMasked; uint256 end = startTokenId + quantity; assembly { toMasked := and(to, _BITMASK_ADDRESS) log4( 0, 0, _TRANSFER_EVENT_SIGNATURE, 0, toMasked, startTokenId ) for { let tokenId := add(startTokenId, 1) } iszero(eq(tokenId, end)) { tokenId := add(tokenId, 1) } { log4(0, 0, _TRANSFER_EVENT_SIGNATURE, 0, toMasked, tokenId) } } if (toMasked == 0) revert MintToZeroAddress(); _currentIndex = end; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } function _mintERC2309(address to, uint256 quantity) internal virtual { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); if (quantity > _MAX_MINT_ERC2309_QUANTITY_LIMIT) revert MintERC2309QuantityExceedsLimit(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); unchecked { _packedAddressData[to] += quantity * ((1 << _BITPOS_NUMBER_MINTED) | 1); _packedOwnerships[startTokenId] = _packOwnershipData( to, _nextInitializedFlag(quantity) | _nextExtraData(address(0), to, 0) ); emit ConsecutiveTransfer(startTokenId, startTokenId + quantity - 1, address(0), to); _currentIndex = startTokenId + quantity; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } function _safeMint( address to, uint256 quantity, bytes memory _data ) internal virtual { _mint(to, quantity); unchecked { if (to.code.length != 0) { uint256 end = _currentIndex; uint256 index = end - quantity; do { if (!_checkContractOnERC721Received(address(0), to, index++, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } while (index < end); // Reentrancy protection. if (_currentIndex != end) revert(); } } } function _safeMint(address to, uint256 quantity) internal virtual { _safeMint(to, quantity, ''); } function _burn(uint256 tokenId) internal virtual { _burn(tokenId, false); } function _burn(uint256 tokenId, bool approvalCheck) internal virtual { uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId); address from = address(uint160(prevOwnershipPacked)); (uint256 approvedAddressSlot, address approvedAddress) = _getApprovedSlotAndAddress(tokenId); if (approvalCheck) { if (!_isSenderApprovedOrOwner(approvedAddress, from, _msgSenderERC721A())) if (!isApprovedForAll(from, _msgSenderERC721A())) revert TransferCallerNotOwnerNorApproved(); } _beforeTokenTransfers(from, address(0), tokenId, 1); assembly { if approvedAddress { sstore(approvedAddressSlot, 0) } } unchecked { _packedAddressData[from] += (1 << _BITPOS_NUMBER_BURNED) - 1; _packedOwnerships[tokenId] = _packOwnershipData( from, (_BITMASK_BURNED | _BITMASK_NEXT_INITIALIZED) | _nextExtraData(from, address(0), prevOwnershipPacked) ); if (prevOwnershipPacked & _BITMASK_NEXT_INITIALIZED == 0) { uint256 nextTokenId = tokenId + 1; if (_packedOwnerships[nextTokenId] == 0) { if (nextTokenId != _currentIndex) { _packedOwnerships[nextTokenId] = prevOwnershipPacked; } } } } emit Transfer(from, address(0), tokenId); _afterTokenTransfers(from, address(0), tokenId, 1); unchecked { _burnCounter++; } } function _setExtraDataAt(uint256 index, uint24 extraData) internal virtual { uint256 packed = _packedOwnerships[index]; if (packed == 0) revert OwnershipNotInitializedForExtraData(); uint256 extraDataCasted; assembly { extraDataCasted := extraData } packed = (packed & _BITMASK_EXTRA_DATA_COMPLEMENT) | (extraDataCasted << _BITPOS_EXTRA_DATA); _packedOwnerships[index] = packed; } function _extraData( address from, address to, uint24 previousExtraData ) internal view virtual returns (uint24) {} function _nextExtraData( address from, address to, uint256 prevOwnershipPacked ) private view returns (uint256) { uint24 extraData = uint24(prevOwnershipPacked >> _BITPOS_EXTRA_DATA); return uint256(_extraData(from, to, extraData)) << _BITPOS_EXTRA_DATA; } function _msgSenderERC721A() internal view virtual returns (address) { return msg.sender; } function _toString(uint256 value) internal pure virtual returns (string memory str) { assembly { let m := add(mload(0x40), 0xa0) mstore(0x40, m) str := sub(m, 0x20) mstore(str, 0) let end := str for { let temp := value } 1 {} { str := sub(str, 1) mstore8(str, add(48, mod(temp, 10))) temp := div(temp, 10) if iszero(temp) { break } } let length := sub(end, str) str := sub(str, 0x20) mstore(str, length) } } } pragma solidity ^0.8.13; contract OperatorFilterer { error OperatorNotAllowed(address operator); IOperatorFilterRegistry constant operatorFilterRegistry = IOperatorFilterRegistry(0x000000000000AAeB6D7670E522A718067333cd4E); constructor(address subscriptionOrRegistrantToCopy, bool subscribe) { if (address(operatorFilterRegistry).code.length > 0) { if (subscribe) { operatorFilterRegistry.registerAndSubscribe(address(this), subscriptionOrRegistrantToCopy); } else { if (subscriptionOrRegistrantToCopy != address(0)) { operatorFilterRegistry.registerAndCopyEntries(address(this), subscriptionOrRegistrantToCopy); } else { operatorFilterRegistry.register(address(this)); } } } } modifier onlyAllowedOperator() virtual { if (address(operatorFilterRegistry).code.length > 0) { if (!operatorFilterRegistry.isOperatorAllowed(address(this), msg.sender)) { revert OperatorNotAllowed(msg.sender); } } _; } } pragma solidity ^0.8.13; contract DefaultOperatorFilterer is OperatorFilterer { address constant DEFAULT_SUBSCRIPTION = address(0x3cc6CddA760b79bAfa08dF41ECFA224f810dCeB6); constructor() OperatorFilterer(DEFAULT_SUBSCRIPTION, true) {} } pragma solidity ^0.8.13; interface IOperatorFilterRegistry { function isOperatorAllowed(address registrant, address operator) external returns (bool); function register(address registrant) external; function registerAndSubscribe(address registrant, address subscription) external; function registerAndCopyEntries(address registrant, address registrantToCopy) external; function updateOperator(address registrant, address operator, bool filtered) external; function updateOperators(address registrant, address[] calldata operators, bool filtered) external; function updateCodeHash(address registrant, bytes32 codehash, bool filtered) external; function updateCodeHashes(address registrant, bytes32[] calldata codeHashes, bool filtered) external; function subscribe(address registrant, address registrantToSubscribe) external; function unsubscribe(address registrant, bool copyExistingEntries) external; function subscriptionOf(address addr) external returns (address registrant); function subscribers(address registrant) external returns (address[] memory); function subscriberAt(address registrant, uint256 index) external returns (address); function copyEntriesOf(address registrant, address registrantToCopy) external; function isOperatorFiltered(address registrant, address operator) external returns (bool); function isCodeHashOfFiltered(address registrant, address operatorWithCode) external returns (bool); function isCodeHashFiltered(address registrant, bytes32 codeHash) external returns (bool); function filteredOperators(address addr) external returns (address[] memory); function filteredCodeHashes(address addr) external returns (bytes32[] memory); function filteredOperatorAt(address registrant, uint256 index) external returns (address); function filteredCodeHashAt(address registrant, uint256 index) external returns (bytes32); function isRegistered(address addr) external returns (bool); function codeHashOf(address addr) external returns (bytes32); } pragma solidity ^0.8.4; interface IERC721ABurnable is IERC721A { function burn(uint256 tokenId) external; } pragma solidity ^0.8.4; abstract contract ERC721ABurnable is ERC721A, IERC721ABurnable { function burn(uint256 tokenId) public virtual override { _burn(tokenId, true); } } pragma solidity ^0.8.16; contract Rocks is Ownable, ERC721A, ReentrancyGuard, ERC721ABurnable, DefaultOperatorFilterer{ string public CONTRACT_URI = ""; mapping(address => uint) public userHasMinted; bool public REVEALED; string public UNREVEALED_URI = ""; string public BASE_URI = ""; bool public isPublicMintEnabled = false; uint public COLLECTION_SIZE = 3333; uint public MINT_PRICE = 0.003333 ether; uint public MAX_BATCH_SIZE = 25; uint public SUPPLY_PER_WALLET = 25; uint public FREE_SUPPLY_PER_WALLET = 1; constructor() ERC721A("we will rock you!", "ROCKS") {} function MintWL(uint256 quantity, address receiver) public onlyOwner { require( totalSupply() + quantity <= COLLECTION_SIZE, "No more tokens in stock!" ); _safeMint(receiver, quantity); } modifier callerIsUser() { require(tx.origin == msg.sender, "The caller is another contract"); _; } function getPrice(uint quantity) public view returns(uint){ uint price; uint free = FREE_SUPPLY_PER_WALLET - userHasMinted[msg.sender]; if (quantity >= free) { price = (MINT_PRICE) * (quantity - free); } else { price = 0; } return price; } function Mint1Free(uint quantity) external payable callerIsUser nonReentrant { uint price; uint free = FREE_SUPPLY_PER_WALLET - userHasMinted[msg.sender]; if (quantity >= free) { price = (MINT_PRICE) * (quantity - free); userHasMinted[msg.sender] = userHasMinted[msg.sender] + free; } else { price = 0; userHasMinted[msg.sender] = userHasMinted[msg.sender] + quantity; } require(isPublicMintEnabled, "Rocks not ready yet!"); require(totalSupply() + quantity <= COLLECTION_SIZE, "No more Rocks!"); require(balanceOf(msg.sender) + quantity <= SUPPLY_PER_WALLET, "Tried to total mint Rocks per wallet over limit"); require(quantity <= MAX_BATCH_SIZE, "Tried to mint Rocks over limit, retry with reduced quantity"); require(msg.value >= price, "Must send enough eth"); _safeMint(msg.sender, quantity); if (msg.value > price) { payable(msg.sender).transfer(msg.value - price); } } function mint(uint quantity) external payable callerIsUser nonReentrant { uint price; uint free = FREE_SUPPLY_PER_WALLET - userHasMinted[msg.sender]; if (quantity >= free) { price = (MINT_PRICE) * (quantity - free); userHasMinted[msg.sender] = userHasMinted[msg.sender] + free; } else { price = 0; userHasMinted[msg.sender] = userHasMinted[msg.sender] + quantity; } require(isPublicMintEnabled, "Rocks not ready yet!"); require(totalSupply() + quantity <= COLLECTION_SIZE, "No more Rocks!"); require(balanceOf(msg.sender) + quantity <= SUPPLY_PER_WALLET, "Tried to total mint Rocks per wallet over limit"); require(quantity <= MAX_BATCH_SIZE, "Tried to mint Rocks over limit, retry with reduced quantity"); require(msg.value >= price, "Must send enough eth"); _safeMint(msg.sender, quantity); if (msg.value > price) { payable(msg.sender).transfer(msg.value - price); } } function withdrawFunds() external onlyOwner nonReentrant { (bool success, ) = msg.sender.call{value: address(this).balance}(""); require(success, "Transfer failed."); } function setPublicMintEnabled() public onlyOwner { isPublicMintEnabled = !isPublicMintEnabled; } function setBaseURI(bool _revealed, string memory _baseURI) public onlyOwner { BASE_URI = _baseURI; REVEALED = _revealed; } function contractURI() public view returns (string memory) { return CONTRACT_URI; } function setContractURI(string memory _contractURI) public onlyOwner { CONTRACT_URI = _contractURI; } function setCOLLECTIONsIZE(uint256 _new) external onlyOwner { COLLECTION_SIZE = _new; } function setPrice(uint256 _newPrice) external onlyOwner { MINT_PRICE = _newPrice; } function set_FREE_SUPPLY_PER_WALLET(uint256 _new) external onlyOwner { FREE_SUPPLY_PER_WALLET = _new; } function set_SUPPLY_PER_WALLET(uint256 _new) external onlyOwner { SUPPLY_PER_WALLET = _new; } function set_MAX_BATCH_SIZE(uint256 _new) external onlyOwner { MAX_BATCH_SIZE = _new; } function transferFrom(address from, address to, uint256 tokenId) public payable override (ERC721A, IERC721A) onlyAllowedOperator { super.transferFrom(from, to, tokenId); } function safeTransferFrom(address from, address to, uint256 tokenId) public payable override (ERC721A, IERC721A) onlyAllowedOperator { super.safeTransferFrom(from, to, tokenId); } function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public payable override (ERC721A, IERC721A) onlyAllowedOperator { super.safeTransferFrom(from, to, tokenId, data); } function tokenURI(uint256 _tokenId) public view override (ERC721A, IERC721A) returns (string memory) { if (REVEALED) { return string(abi.encodePacked(BASE_URI, Strings.toString(_tokenId))); } else { return UNREVEALED_URI; } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintERC2309QuantityExceedsLimit","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"OperatorNotAllowed","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"OwnershipNotInitializedForExtraData","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"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":"uint256","name":"fromTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toTokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"ConsecutiveTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"BASE_URI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"COLLECTION_SIZE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CONTRACT_URI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FREE_SUPPLY_PER_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_BATCH_SIZE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"Mint1Free","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"MintWL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"REVEALED","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SUPPLY_PER_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNREVEALED_URI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"payable","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":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPublicMintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","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":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_revealed","type":"bool"},{"internalType":"string","name":"_baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"setCOLLECTIONsIZE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_contractURI","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPublicMintEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"set_FREE_SUPPLY_PER_WALLET","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"set_MAX_BATCH_SIZE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"set_SUPPLY_PER_WALLET","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":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userHasMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawFunds","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405260405180602001604052806000815250600a9081620000249190620006df565b5060405180602001604052806000815250600d9081620000459190620006df565b5060405180602001604052806000815250600e9081620000669190620006df565b506000600f60006101000a81548160ff021916908315150217905550610d05601055660bd75889095000601155601960125560196013556001601455348015620000af57600080fd5b50733cc6cdda760b79bafa08df41ecfa224f810dceb660016040518060400160405280601181526020017f77652077696c6c20726f636b20796f75210000000000000000000000000000008152506040518060400160405280600581526020017f524f434b5300000000000000000000000000000000000000000000000000000081525062000153620001476200039460201b60201c565b6200039c60201b60201c565b8160039081620001649190620006df565b508060049081620001769190620006df565b50620001876200046060201b60201c565b6001819055505050600160098190555060006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b11156200038c57801562000252576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16637d3e3dbe30846040518363ffffffff1660e01b8152600401620002189291906200080b565b600060405180830381600087803b1580156200023357600080fd5b505af115801562000248573d6000803e3d6000fd5b505050506200038b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146200030c576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663a0af290330846040518363ffffffff1660e01b8152600401620002d29291906200080b565b600060405180830381600087803b158015620002ed57600080fd5b505af115801562000302573d6000803e3d6000fd5b505050506200038a565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16634420e486306040518263ffffffff1660e01b815260040162000355919062000838565b600060405180830381600087803b1580156200037057600080fd5b505af115801562000385573d6000803e3d6000fd5b505050505b5b5b505062000855565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620004e757607f821691505b602082108103620004fd57620004fc6200049f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620005677fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000528565b62000573868362000528565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620005c0620005ba620005b4846200058b565b62000595565b6200058b565b9050919050565b6000819050919050565b620005dc836200059f565b620005f4620005eb82620005c7565b84845462000535565b825550505050565b600090565b6200060b620005fc565b62000618818484620005d1565b505050565b5b8181101562000640576200063460008262000601565b6001810190506200061e565b5050565b601f8211156200068f57620006598162000503565b620006648462000518565b8101602085101562000674578190505b6200068c620006838562000518565b8301826200061d565b50505b505050565b600082821c905092915050565b6000620006b46000198460080262000694565b1980831691505092915050565b6000620006cf8383620006a1565b9150826002028217905092915050565b620006ea8262000465565b67ffffffffffffffff81111562000706576200070562000470565b5b620007128254620004ce565b6200071f82828562000644565b600060209050601f83116001811462000757576000841562000742578287015190505b6200074e8582620006c1565b865550620007be565b601f198416620007678662000503565b60005b8281101562000791578489015182556001820191506020850194506020810190506200076a565b86831015620007b15784890151620007ad601f891682620006a1565b8355505b6001600288020188555050505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620007f382620007c6565b9050919050565b6200080581620007e6565b82525050565b6000604082019050620008226000830185620007fa565b620008316020830184620007fa565b9392505050565b60006020820190506200084f6000830184620007fa565b92915050565b6144c980620008656000396000f3fe60806040526004361061025c5760003560e01c806391b7f5ed11610144578063c002d23d116100b6578063e113ad951161007a578063e113ad951461085e578063e757223014610887578063e8a3d485146108c4578063e985e9c5146108ef578063e9d541b01461092c578063f2fde38b146109555761025c565b8063c002d23d14610775578063c87b56dd146107a0578063cfdbf254146107dd578063d8258d9514610808578063dbddb26a146108335761025c565b8063a22cb46511610108578063a22cb4651461069c578063a4cdd719146106c5578063a76a9587146106dc578063a9527e8214610707578063a9b2d10d14610730578063b88d4fde146107595761025c565b806391b7f5ed146105da578063938e3d7b1461060357806395d89b411461062c5780639e1f39d614610657578063a0712d68146106805761025c565b8063336f5ec3116101dd5780635fe75587116101a15780635fe75587146104d75780636352211e1461050257806370a082311461053f578063715018a61461057c5780638bb44e17146105935780638da5cb5b146105af5761025c565b8063336f5ec31461041357806342842e0e1461043c57806342966c6814610458578063507862d11461048157806356b4f673146104ac5761025c565b80631422374f116102245780631422374f1461034d57806318160ddd146103785780631d985778146103a357806323b872dd146103e057806324600fc3146103fc5761025c565b80630116bc2d1461026157806301ffc9a71461028c57806306fdde03146102c9578063081812fc146102f4578063095ea7b314610331575b600080fd5b34801561026d57600080fd5b5061027661097e565b604051610283919061310a565b60405180910390f35b34801561029857600080fd5b506102b360048036038101906102ae9190613191565b610991565b6040516102c0919061310a565b60405180910390f35b3480156102d557600080fd5b506102de610a23565b6040516102eb919061324e565b60405180910390f35b34801561030057600080fd5b5061031b600480360381019061031691906132a6565b610ab5565b6040516103289190613314565b60405180910390f35b61034b6004803603810190610346919061335b565b610b34565b005b34801561035957600080fd5b50610362610c78565b60405161036f91906133aa565b60405180910390f35b34801561038457600080fd5b5061038d610c7e565b60405161039a91906133aa565b60405180910390f35b3480156103af57600080fd5b506103ca60048036038101906103c591906133c5565b610c95565b6040516103d791906133aa565b60405180910390f35b6103fa60048036038101906103f591906133f2565b610cad565b005b34801561040857600080fd5b50610411610db9565b005b34801561041f57600080fd5b5061043a600480360381019061043591906132a6565b610ec5565b005b610456600480360381019061045191906133f2565b610ed7565b005b34801561046457600080fd5b5061047f600480360381019061047a91906132a6565b610fe3565b005b34801561048d57600080fd5b50610496610ff1565b6040516104a3919061324e565b60405180910390f35b3480156104b857600080fd5b506104c161107f565b6040516104ce919061324e565b60405180910390f35b3480156104e357600080fd5b506104ec61110d565b6040516104f991906133aa565b60405180910390f35b34801561050e57600080fd5b50610529600480360381019061052491906132a6565b611113565b6040516105369190613314565b60405180910390f35b34801561054b57600080fd5b50610566600480360381019061056191906133c5565b611125565b60405161057391906133aa565b60405180910390f35b34801561058857600080fd5b506105916111dd565b005b6105ad60048036038101906105a891906132a6565b6111f1565b005b3480156105bb57600080fd5b506105c461163e565b6040516105d19190613314565b60405180910390f35b3480156105e657600080fd5b5061060160048036038101906105fc91906132a6565b611667565b005b34801561060f57600080fd5b5061062a6004803603810190610625919061357a565b611679565b005b34801561063857600080fd5b50610641611694565b60405161064e919061324e565b60405180910390f35b34801561066357600080fd5b5061067e600480360381019061067991906135ef565b611726565b005b61069a600480360381019061069591906132a6565b61175c565b005b3480156106a857600080fd5b506106c360048036038101906106be919061364b565b611ba9565b005b3480156106d157600080fd5b506106da611cb4565b005b3480156106e857600080fd5b506106f1611ce8565b6040516106fe919061310a565b60405180910390f35b34801561071357600080fd5b5061072e600480360381019061072991906132a6565b611cfb565b005b34801561073c57600080fd5b506107576004803603810190610752919061368b565b611d0d565b005b610773600480360381019061076e919061376c565b611d7a565b005b34801561078157600080fd5b5061078a611e88565b60405161079791906133aa565b60405180910390f35b3480156107ac57600080fd5b506107c760048036038101906107c291906132a6565b611e8e565b6040516107d4919061324e565b60405180910390f35b3480156107e957600080fd5b506107f2611f6a565b6040516107ff91906133aa565b60405180910390f35b34801561081457600080fd5b5061081d611f70565b60405161082a91906133aa565b60405180910390f35b34801561083f57600080fd5b50610848611f76565b604051610855919061324e565b60405180910390f35b34801561086a57600080fd5b50610885600480360381019061088091906132a6565b612004565b005b34801561089357600080fd5b506108ae60048036038101906108a991906132a6565b612016565b6040516108bb91906133aa565b60405180910390f35b3480156108d057600080fd5b506108d96120a0565b6040516108e6919061324e565b60405180910390f35b3480156108fb57600080fd5b50610916600480360381019061091191906137ef565b612132565b604051610923919061310a565b60405180910390f35b34801561093857600080fd5b50610953600480360381019061094e91906132a6565b6121c6565b005b34801561096157600080fd5b5061097c600480360381019061097791906133c5565b6121d8565b005b600f60009054906101000a900460ff1681565b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109ec57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a1c5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060038054610a329061385e565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5e9061385e565b8015610aab5780601f10610a8057610100808354040283529160200191610aab565b820191906000526020600020905b815481529060010190602001808311610a8e57829003601f168201915b5050505050905090565b6000610ac08261225b565b610af6576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b3f82611113565b90508073ffffffffffffffffffffffffffffffffffffffff16610b606122ba565b73ffffffffffffffffffffffffffffffffffffffff1614610bc357610b8c81610b876122ba565b612132565b610bc2576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826007600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60145481565b6000610c886122c2565b6002546001540303905090565b600b6020528060005260406000206000915090505481565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610da9576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610d2492919061388f565b6020604051808303816000875af1158015610d43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6791906138cd565b610da857336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610d9f9190613314565b60405180910390fd5b5b610db48383836122c7565b505050565b610dc16125e9565b600260095403610e06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfd90613946565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051610e3490613997565b60006040518083038185875af1925050503d8060008114610e71576040519150601f19603f3d011682016040523d82523d6000602084013e610e76565b606091505b5050905080610eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb1906139f8565b60405180910390fd5b506001600981905550565b610ecd6125e9565b8060128190555050565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610fd3576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610f4e92919061388f565b6020604051808303816000875af1158015610f6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9191906138cd565b610fd257336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610fc99190613314565b60405180910390fd5b5b610fde838383612667565b505050565b610fee816001612687565b50565b600d8054610ffe9061385e565b80601f016020809104026020016040519081016040528092919081815260200182805461102a9061385e565b80156110775780601f1061104c57610100808354040283529160200191611077565b820191906000526020600020905b81548152906001019060200180831161105a57829003601f168201915b505050505081565b600a805461108c9061385e565b80601f01602080910402602001604051908101604052809291908181526020018280546110b89061385e565b80156111055780601f106110da57610100808354040283529160200191611105565b820191906000526020600020905b8154815290600101906020018083116110e857829003601f168201915b505050505081565b60135481565b600061111e826128d9565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361118c576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6111e56125e9565b6111ef60006129a5565b565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461125f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125690613a64565b60405180910390fd5b6002600954036112a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129b90613946565b60405180910390fd5b6002600981905550600080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546014546112fc9190613ab3565b90508083106113b35780836113119190613ab3565b60115461131e9190613ae7565b915080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461136b9190613b41565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611446565b6000915082600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114029190613b41565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600f60009054906101000a900460ff16611495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148c90613bc1565b60405180910390fd5b601054836114a1610c7e565b6114ab9190613b41565b11156114ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e390613c2d565b60405180910390fd5b601354836114f933611125565b6115039190613b41565b1115611544576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153b90613cbf565b60405180910390fd5b601254831115611589576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158090613d51565b60405180910390fd5b813410156115cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c390613dbd565b60405180910390fd5b6115d63384612a69565b81341115611631573373ffffffffffffffffffffffffffffffffffffffff166108fc83346116049190613ab3565b9081150290604051600060405180830381858888f1935050505015801561162f573d6000803e3d6000fd5b505b5050600160098190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61166f6125e9565b8060118190555050565b6116816125e9565b80600a90816116909190613f89565b5050565b6060600480546116a39061385e565b80601f01602080910402602001604051908101604052809291908181526020018280546116cf9061385e565b801561171c5780601f106116f15761010080835404028352916020019161171c565b820191906000526020600020905b8154815290600101906020018083116116ff57829003601f168201915b5050505050905090565b61172e6125e9565b80600e908161173d9190613f89565b5081600c60006101000a81548160ff0219169083151502179055505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146117ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c190613a64565b60405180910390fd5b60026009540361180f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180690613946565b60405180910390fd5b6002600981905550600080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546014546118679190613ab3565b905080831061191e57808361187c9190613ab3565b6011546118899190613ae7565b915080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118d69190613b41565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506119b1565b6000915082600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461196d9190613b41565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600f60009054906101000a900460ff16611a00576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f790613bc1565b60405180910390fd5b60105483611a0c610c7e565b611a169190613b41565b1115611a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4e90613c2d565b60405180910390fd5b60135483611a6433611125565b611a6e9190613b41565b1115611aaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa690613cbf565b60405180910390fd5b601254831115611af4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aeb90613d51565b60405180910390fd5b81341015611b37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2e90613dbd565b60405180910390fd5b611b413384612a69565b81341115611b9c573373ffffffffffffffffffffffffffffffffffffffff166108fc8334611b6f9190613ab3565b9081150290604051600060405180830381858888f19350505050158015611b9a573d6000803e3d6000fd5b505b5050600160098190555050565b8060086000611bb66122ba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611c636122ba565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ca8919061310a565b60405180910390a35050565b611cbc6125e9565b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b600c60009054906101000a900460ff1681565b611d036125e9565b8060148190555050565b611d156125e9565b60105482611d21610c7e565b611d2b9190613b41565b1115611d6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d63906140a7565b60405180910390fd5b611d768183612a69565b5050565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115611e76576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401611df192919061388f565b6020604051808303816000875af1158015611e10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e3491906138cd565b611e7557336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401611e6c9190613314565b60405180910390fd5b5b611e8284848484612a87565b50505050565b60115481565b6060600c60009054906101000a900460ff1615611ed757600e611eb083612afa565b604051602001611ec1929190614186565b6040516020818303038152906040529050611f65565b600d8054611ee49061385e565b80601f0160208091040260200160405190810160405280929190818152602001828054611f109061385e565b8015611f5d5780601f10611f3257610100808354040283529160200191611f5d565b820191906000526020600020905b815481529060010190602001808311611f4057829003601f168201915b505050505090505b919050565b60125481565b60105481565b600e8054611f839061385e565b80601f0160208091040260200160405190810160405280929190818152602001828054611faf9061385e565b8015611ffc5780601f10611fd157610100808354040283529160200191611ffc565b820191906000526020600020905b815481529060010190602001808311611fdf57829003601f168201915b505050505081565b61200c6125e9565b8060138190555050565b6000806000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546014546120689190613ab3565b905080841061209157808461207d9190613ab3565b60115461208a9190613ae7565b9150612096565b600091505b8192505050919050565b6060600a80546120af9061385e565b80601f01602080910402602001604051908101604052809291908181526020018280546120db9061385e565b80156121285780601f106120fd57610100808354040283529160200191612128565b820191906000526020600020905b81548152906001019060200180831161210b57829003601f168201915b5050505050905090565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6121ce6125e9565b8060108190555050565b6121e06125e9565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361224f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122469061421c565b60405180910390fd5b612258816129a5565b50565b6000816122666122c2565b11158015612275575060015482105b80156122b3575060007c0100000000000000000000000000000000000000000000000000000000600560008581526020019081526020016000205416145b9050919050565b600033905090565b600090565b60006122d2826128d9565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612339576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008061234584612c5a565b9150915061235b81876123566122ba565b612c81565b6123a7576123708661236b6122ba565b612132565b6123a6576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361240d576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61241a8686866001612cc5565b801561242557600082555b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055506124f3856124cf888887612ccb565b7c020000000000000000000000000000000000000000000000000000000017612cf3565b600560008681526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008416036125795760006001850190506000600560008381526020019081526020016000205403612577576001548114612576578360056000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46125e18686866001612d1e565b505050505050565b6125f1612d24565b73ffffffffffffffffffffffffffffffffffffffff1661260f61163e565b73ffffffffffffffffffffffffffffffffffffffff1614612665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265c90614288565b60405180910390fd5b565b61268283838360405180602001604052806000815250611d7a565b505050565b6000612692836128d9565b905060008190506000806126a586612c5a565b91509150841561270e576126c181846126bc6122ba565b612c81565b61270d576126d6836126d16122ba565b612132565b61270c576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5b61271c836000886001612cc5565b801561272757600082555b600160806001901b03600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506127cf8361278c85600088612ccb565b7c02000000000000000000000000000000000000000000000000000000007c01000000000000000000000000000000000000000000000000000000001717612cf3565b600560008881526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008516036128555760006001870190506000600560008381526020019081526020016000205403612853576001548114612852578460056000838152602001908152602001600020819055505b5b505b85600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46128bf836000886001612d1e565b600260008154809291906001019190505550505050505050565b600080829050806128e86122c2565b1161296e5760015481101561296d5760006005600083815260200190815260200160002054905060007c010000000000000000000000000000000000000000000000000000000082160361296b575b60008103612961576005600083600190039350838152602001908152602001600020549050612937565b80925050506129a0565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612a83828260405180602001604052806000815250612d2c565b5050565b612a92848484610cad565b60008373ffffffffffffffffffffffffffffffffffffffff163b14612af457612abd84848484612dca565b612af3576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b606060008203612b41576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c55565b600082905060005b60008214612b73578080612b5c906142a8565b915050600a82612b6c919061431f565b9150612b49565b60008167ffffffffffffffff811115612b8f57612b8e61344f565b5b6040519080825280601f01601f191660200182016040528015612bc15781602001600182028036833780820191505090505b5090505b60008514612c4e57600182612bda9190613ab3565b9150600a85612be99190614350565b6030612bf59190613b41565b60f81b818381518110612c0b57612c0a614381565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c47919061431f565b9450612bc5565b8093505050505b919050565b60008060006007600085815260200190815260200160002090508092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e8612ce2868684612f1a565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b600033905090565b612d368383612f23565b60008373ffffffffffffffffffffffffffffffffffffffff163b14612dc55760006001549050600083820390505b612d776000868380600101945086612dca565b612dad576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818110612d64578160015414612dc257600080fd5b50505b505050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612df06122ba565b8786866040518563ffffffff1660e01b8152600401612e129493929190614405565b6020604051808303816000875af1925050508015612e4e57506040513d601f19601f82011682018060405250810190612e4b9190614466565b60015b612ec7573d8060008114612e7e576040519150601f19603f3d011682016040523d82523d6000602084013e612e83565b606091505b506000815103612ebf576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60009392505050565b6000600154905060008203612f64576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612f716000848385612cc5565b600160406001901b178202600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550612fe883612fd96000866000612ccb565b612fe2856130df565b17612cf3565b6005600083815260200190815260200160002081905550600080838301905073ffffffffffffffffffffffffffffffffffffffff85169150828260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600183015b81811461308957808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a460018101905061304e565b50600082036130c4576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060018190555050506130da6000848385612d1e565b505050565b60006001821460e11b9050919050565b60008115159050919050565b613104816130ef565b82525050565b600060208201905061311f60008301846130fb565b92915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61316e81613139565b811461317957600080fd5b50565b60008135905061318b81613165565b92915050565b6000602082840312156131a7576131a661312f565b5b60006131b58482850161317c565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156131f85780820151818401526020810190506131dd565b60008484015250505050565b6000601f19601f8301169050919050565b6000613220826131be565b61322a81856131c9565b935061323a8185602086016131da565b61324381613204565b840191505092915050565b600060208201905081810360008301526132688184613215565b905092915050565b6000819050919050565b61328381613270565b811461328e57600080fd5b50565b6000813590506132a08161327a565b92915050565b6000602082840312156132bc576132bb61312f565b5b60006132ca84828501613291565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006132fe826132d3565b9050919050565b61330e816132f3565b82525050565b60006020820190506133296000830184613305565b92915050565b613338816132f3565b811461334357600080fd5b50565b6000813590506133558161332f565b92915050565b600080604083850312156133725761337161312f565b5b600061338085828601613346565b925050602061339185828601613291565b9150509250929050565b6133a481613270565b82525050565b60006020820190506133bf600083018461339b565b92915050565b6000602082840312156133db576133da61312f565b5b60006133e984828501613346565b91505092915050565b60008060006060848603121561340b5761340a61312f565b5b600061341986828701613346565b935050602061342a86828701613346565b925050604061343b86828701613291565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61348782613204565b810181811067ffffffffffffffff821117156134a6576134a561344f565b5b80604052505050565b60006134b9613125565b90506134c5828261347e565b919050565b600067ffffffffffffffff8211156134e5576134e461344f565b5b6134ee82613204565b9050602081019050919050565b82818337600083830152505050565b600061351d613518846134ca565b6134af565b9050828152602081018484840111156135395761353861344a565b5b6135448482856134fb565b509392505050565b600082601f83011261356157613560613445565b5b813561357184826020860161350a565b91505092915050565b6000602082840312156135905761358f61312f565b5b600082013567ffffffffffffffff8111156135ae576135ad613134565b5b6135ba8482850161354c565b91505092915050565b6135cc816130ef565b81146135d757600080fd5b50565b6000813590506135e9816135c3565b92915050565b600080604083850312156136065761360561312f565b5b6000613614858286016135da565b925050602083013567ffffffffffffffff81111561363557613634613134565b5b6136418582860161354c565b9150509250929050565b600080604083850312156136625761366161312f565b5b600061367085828601613346565b9250506020613681858286016135da565b9150509250929050565b600080604083850312156136a2576136a161312f565b5b60006136b085828601613291565b92505060206136c185828601613346565b9150509250929050565b600067ffffffffffffffff8211156136e6576136e561344f565b5b6136ef82613204565b9050602081019050919050565b600061370f61370a846136cb565b6134af565b90508281526020810184848401111561372b5761372a61344a565b5b6137368482856134fb565b509392505050565b600082601f83011261375357613752613445565b5b81356137638482602086016136fc565b91505092915050565b600080600080608085870312156137865761378561312f565b5b600061379487828801613346565b94505060206137a587828801613346565b93505060406137b687828801613291565b925050606085013567ffffffffffffffff8111156137d7576137d6613134565b5b6137e38782880161373e565b91505092959194509250565b600080604083850312156138065761380561312f565b5b600061381485828601613346565b925050602061382585828601613346565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061387657607f821691505b6020821081036138895761388861382f565b5b50919050565b60006040820190506138a46000830185613305565b6138b16020830184613305565b9392505050565b6000815190506138c7816135c3565b92915050565b6000602082840312156138e3576138e261312f565b5b60006138f1848285016138b8565b91505092915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613930601f836131c9565b915061393b826138fa565b602082019050919050565b6000602082019050818103600083015261395f81613923565b9050919050565b600081905092915050565b50565b6000613981600083613966565b915061398c82613971565b600082019050919050565b60006139a282613974565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b60006139e26010836131c9565b91506139ed826139ac565b602082019050919050565b60006020820190508181036000830152613a11816139d5565b9050919050565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b6000613a4e601e836131c9565b9150613a5982613a18565b602082019050919050565b60006020820190508181036000830152613a7d81613a41565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613abe82613270565b9150613ac983613270565b9250828203905081811115613ae157613ae0613a84565b5b92915050565b6000613af282613270565b9150613afd83613270565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b3657613b35613a84565b5b828202905092915050565b6000613b4c82613270565b9150613b5783613270565b9250828201905080821115613b6f57613b6e613a84565b5b92915050565b7f526f636b73206e6f742072656164792079657421000000000000000000000000600082015250565b6000613bab6014836131c9565b9150613bb682613b75565b602082019050919050565b60006020820190508181036000830152613bda81613b9e565b9050919050565b7f4e6f206d6f726520526f636b7321000000000000000000000000000000000000600082015250565b6000613c17600e836131c9565b9150613c2282613be1565b602082019050919050565b60006020820190508181036000830152613c4681613c0a565b9050919050565b7f547269656420746f20746f74616c206d696e7420526f636b732070657220776160008201527f6c6c6574206f766572206c696d69740000000000000000000000000000000000602082015250565b6000613ca9602f836131c9565b9150613cb482613c4d565b604082019050919050565b60006020820190508181036000830152613cd881613c9c565b9050919050565b7f547269656420746f206d696e7420526f636b73206f766572206c696d69742c2060008201527f726574727920776974682072656475636564207175616e746974790000000000602082015250565b6000613d3b603b836131c9565b9150613d4682613cdf565b604082019050919050565b60006020820190508181036000830152613d6a81613d2e565b9050919050565b7f4d7573742073656e6420656e6f75676820657468000000000000000000000000600082015250565b6000613da76014836131c9565b9150613db282613d71565b602082019050919050565b60006020820190508181036000830152613dd681613d9a565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613e3f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613e02565b613e498683613e02565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613e86613e81613e7c84613270565b613e61565b613270565b9050919050565b6000819050919050565b613ea083613e6b565b613eb4613eac82613e8d565b848454613e0f565b825550505050565b600090565b613ec9613ebc565b613ed4818484613e97565b505050565b5b81811015613ef857613eed600082613ec1565b600181019050613eda565b5050565b601f821115613f3d57613f0e81613ddd565b613f1784613df2565b81016020851015613f26578190505b613f3a613f3285613df2565b830182613ed9565b50505b505050565b600082821c905092915050565b6000613f6060001984600802613f42565b1980831691505092915050565b6000613f798383613f4f565b9150826002028217905092915050565b613f92826131be565b67ffffffffffffffff811115613fab57613faa61344f565b5b613fb5825461385e565b613fc0828285613efc565b600060209050601f831160018114613ff35760008415613fe1578287015190505b613feb8582613f6d565b865550614053565b601f19841661400186613ddd565b60005b8281101561402957848901518255600182019150602085019450602081019050614004565b868310156140465784890151614042601f891682613f4f565b8355505b6001600288020188555050505b505050505050565b7f4e6f206d6f726520746f6b656e7320696e2073746f636b210000000000000000600082015250565b60006140916018836131c9565b915061409c8261405b565b602082019050919050565b600060208201905081810360008301526140c081614084565b9050919050565b600081905092915050565b600081546140df8161385e565b6140e981866140c7565b9450600182166000811461410457600181146141195761414c565b60ff198316865281151582028601935061414c565b61412285613ddd565b60005b8381101561414457815481890152600182019150602081019050614125565b838801955050505b50505092915050565b6000614160826131be565b61416a81856140c7565b935061417a8185602086016131da565b80840191505092915050565b600061419282856140d2565b915061419e8284614155565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006142066026836131c9565b9150614211826141aa565b604082019050919050565b60006020820190508181036000830152614235816141f9565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006142726020836131c9565b915061427d8261423c565b602082019050919050565b600060208201905081810360008301526142a181614265565b9050919050565b60006142b382613270565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036142e5576142e4613a84565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061432a82613270565b915061433583613270565b925082614345576143446142f0565b5b828204905092915050565b600061435b82613270565b915061436683613270565b925082614376576143756142f0565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b60006143d7826143b0565b6143e181856143bb565b93506143f18185602086016131da565b6143fa81613204565b840191505092915050565b600060808201905061441a6000830187613305565b6144276020830186613305565b614434604083018561339b565b818103606083015261444681846143cc565b905095945050505050565b60008151905061446081613165565b92915050565b60006020828403121561447c5761447b61312f565b5b600061448a84828501614451565b9150509291505056fea2646970667358221220c634b2ee01836840bcca7031fda1e0916cae7eebaad7fbdfbcfd02509714426a64736f6c63430008100033
Deployed Bytecode
0x60806040526004361061025c5760003560e01c806391b7f5ed11610144578063c002d23d116100b6578063e113ad951161007a578063e113ad951461085e578063e757223014610887578063e8a3d485146108c4578063e985e9c5146108ef578063e9d541b01461092c578063f2fde38b146109555761025c565b8063c002d23d14610775578063c87b56dd146107a0578063cfdbf254146107dd578063d8258d9514610808578063dbddb26a146108335761025c565b8063a22cb46511610108578063a22cb4651461069c578063a4cdd719146106c5578063a76a9587146106dc578063a9527e8214610707578063a9b2d10d14610730578063b88d4fde146107595761025c565b806391b7f5ed146105da578063938e3d7b1461060357806395d89b411461062c5780639e1f39d614610657578063a0712d68146106805761025c565b8063336f5ec3116101dd5780635fe75587116101a15780635fe75587146104d75780636352211e1461050257806370a082311461053f578063715018a61461057c5780638bb44e17146105935780638da5cb5b146105af5761025c565b8063336f5ec31461041357806342842e0e1461043c57806342966c6814610458578063507862d11461048157806356b4f673146104ac5761025c565b80631422374f116102245780631422374f1461034d57806318160ddd146103785780631d985778146103a357806323b872dd146103e057806324600fc3146103fc5761025c565b80630116bc2d1461026157806301ffc9a71461028c57806306fdde03146102c9578063081812fc146102f4578063095ea7b314610331575b600080fd5b34801561026d57600080fd5b5061027661097e565b604051610283919061310a565b60405180910390f35b34801561029857600080fd5b506102b360048036038101906102ae9190613191565b610991565b6040516102c0919061310a565b60405180910390f35b3480156102d557600080fd5b506102de610a23565b6040516102eb919061324e565b60405180910390f35b34801561030057600080fd5b5061031b600480360381019061031691906132a6565b610ab5565b6040516103289190613314565b60405180910390f35b61034b6004803603810190610346919061335b565b610b34565b005b34801561035957600080fd5b50610362610c78565b60405161036f91906133aa565b60405180910390f35b34801561038457600080fd5b5061038d610c7e565b60405161039a91906133aa565b60405180910390f35b3480156103af57600080fd5b506103ca60048036038101906103c591906133c5565b610c95565b6040516103d791906133aa565b60405180910390f35b6103fa60048036038101906103f591906133f2565b610cad565b005b34801561040857600080fd5b50610411610db9565b005b34801561041f57600080fd5b5061043a600480360381019061043591906132a6565b610ec5565b005b610456600480360381019061045191906133f2565b610ed7565b005b34801561046457600080fd5b5061047f600480360381019061047a91906132a6565b610fe3565b005b34801561048d57600080fd5b50610496610ff1565b6040516104a3919061324e565b60405180910390f35b3480156104b857600080fd5b506104c161107f565b6040516104ce919061324e565b60405180910390f35b3480156104e357600080fd5b506104ec61110d565b6040516104f991906133aa565b60405180910390f35b34801561050e57600080fd5b50610529600480360381019061052491906132a6565b611113565b6040516105369190613314565b60405180910390f35b34801561054b57600080fd5b50610566600480360381019061056191906133c5565b611125565b60405161057391906133aa565b60405180910390f35b34801561058857600080fd5b506105916111dd565b005b6105ad60048036038101906105a891906132a6565b6111f1565b005b3480156105bb57600080fd5b506105c461163e565b6040516105d19190613314565b60405180910390f35b3480156105e657600080fd5b5061060160048036038101906105fc91906132a6565b611667565b005b34801561060f57600080fd5b5061062a6004803603810190610625919061357a565b611679565b005b34801561063857600080fd5b50610641611694565b60405161064e919061324e565b60405180910390f35b34801561066357600080fd5b5061067e600480360381019061067991906135ef565b611726565b005b61069a600480360381019061069591906132a6565b61175c565b005b3480156106a857600080fd5b506106c360048036038101906106be919061364b565b611ba9565b005b3480156106d157600080fd5b506106da611cb4565b005b3480156106e857600080fd5b506106f1611ce8565b6040516106fe919061310a565b60405180910390f35b34801561071357600080fd5b5061072e600480360381019061072991906132a6565b611cfb565b005b34801561073c57600080fd5b506107576004803603810190610752919061368b565b611d0d565b005b610773600480360381019061076e919061376c565b611d7a565b005b34801561078157600080fd5b5061078a611e88565b60405161079791906133aa565b60405180910390f35b3480156107ac57600080fd5b506107c760048036038101906107c291906132a6565b611e8e565b6040516107d4919061324e565b60405180910390f35b3480156107e957600080fd5b506107f2611f6a565b6040516107ff91906133aa565b60405180910390f35b34801561081457600080fd5b5061081d611f70565b60405161082a91906133aa565b60405180910390f35b34801561083f57600080fd5b50610848611f76565b604051610855919061324e565b60405180910390f35b34801561086a57600080fd5b50610885600480360381019061088091906132a6565b612004565b005b34801561089357600080fd5b506108ae60048036038101906108a991906132a6565b612016565b6040516108bb91906133aa565b60405180910390f35b3480156108d057600080fd5b506108d96120a0565b6040516108e6919061324e565b60405180910390f35b3480156108fb57600080fd5b50610916600480360381019061091191906137ef565b612132565b604051610923919061310a565b60405180910390f35b34801561093857600080fd5b50610953600480360381019061094e91906132a6565b6121c6565b005b34801561096157600080fd5b5061097c600480360381019061097791906133c5565b6121d8565b005b600f60009054906101000a900460ff1681565b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109ec57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a1c5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060038054610a329061385e565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5e9061385e565b8015610aab5780601f10610a8057610100808354040283529160200191610aab565b820191906000526020600020905b815481529060010190602001808311610a8e57829003601f168201915b5050505050905090565b6000610ac08261225b565b610af6576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b3f82611113565b90508073ffffffffffffffffffffffffffffffffffffffff16610b606122ba565b73ffffffffffffffffffffffffffffffffffffffff1614610bc357610b8c81610b876122ba565b612132565b610bc2576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826007600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60145481565b6000610c886122c2565b6002546001540303905090565b600b6020528060005260406000206000915090505481565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610da9576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610d2492919061388f565b6020604051808303816000875af1158015610d43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6791906138cd565b610da857336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610d9f9190613314565b60405180910390fd5b5b610db48383836122c7565b505050565b610dc16125e9565b600260095403610e06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfd90613946565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051610e3490613997565b60006040518083038185875af1925050503d8060008114610e71576040519150601f19603f3d011682016040523d82523d6000602084013e610e76565b606091505b5050905080610eba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb1906139f8565b60405180910390fd5b506001600981905550565b610ecd6125e9565b8060128190555050565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610fd3576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610f4e92919061388f565b6020604051808303816000875af1158015610f6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9191906138cd565b610fd257336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610fc99190613314565b60405180910390fd5b5b610fde838383612667565b505050565b610fee816001612687565b50565b600d8054610ffe9061385e565b80601f016020809104026020016040519081016040528092919081815260200182805461102a9061385e565b80156110775780601f1061104c57610100808354040283529160200191611077565b820191906000526020600020905b81548152906001019060200180831161105a57829003601f168201915b505050505081565b600a805461108c9061385e565b80601f01602080910402602001604051908101604052809291908181526020018280546110b89061385e565b80156111055780601f106110da57610100808354040283529160200191611105565b820191906000526020600020905b8154815290600101906020018083116110e857829003601f168201915b505050505081565b60135481565b600061111e826128d9565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361118c576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6111e56125e9565b6111ef60006129a5565b565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff161461125f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125690613a64565b60405180910390fd5b6002600954036112a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129b90613946565b60405180910390fd5b6002600981905550600080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546014546112fc9190613ab3565b90508083106113b35780836113119190613ab3565b60115461131e9190613ae7565b915080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461136b9190613b41565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611446565b6000915082600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114029190613b41565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600f60009054906101000a900460ff16611495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148c90613bc1565b60405180910390fd5b601054836114a1610c7e565b6114ab9190613b41565b11156114ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e390613c2d565b60405180910390fd5b601354836114f933611125565b6115039190613b41565b1115611544576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153b90613cbf565b60405180910390fd5b601254831115611589576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158090613d51565b60405180910390fd5b813410156115cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c390613dbd565b60405180910390fd5b6115d63384612a69565b81341115611631573373ffffffffffffffffffffffffffffffffffffffff166108fc83346116049190613ab3565b9081150290604051600060405180830381858888f1935050505015801561162f573d6000803e3d6000fd5b505b5050600160098190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61166f6125e9565b8060118190555050565b6116816125e9565b80600a90816116909190613f89565b5050565b6060600480546116a39061385e565b80601f01602080910402602001604051908101604052809291908181526020018280546116cf9061385e565b801561171c5780601f106116f15761010080835404028352916020019161171c565b820191906000526020600020905b8154815290600101906020018083116116ff57829003601f168201915b5050505050905090565b61172e6125e9565b80600e908161173d9190613f89565b5081600c60006101000a81548160ff0219169083151502179055505050565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146117ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c190613a64565b60405180910390fd5b60026009540361180f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180690613946565b60405180910390fd5b6002600981905550600080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546014546118679190613ab3565b905080831061191e57808361187c9190613ab3565b6011546118899190613ae7565b915080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118d69190613b41565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506119b1565b6000915082600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461196d9190613b41565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600f60009054906101000a900460ff16611a00576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f790613bc1565b60405180910390fd5b60105483611a0c610c7e565b611a169190613b41565b1115611a57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4e90613c2d565b60405180910390fd5b60135483611a6433611125565b611a6e9190613b41565b1115611aaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa690613cbf565b60405180910390fd5b601254831115611af4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aeb90613d51565b60405180910390fd5b81341015611b37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2e90613dbd565b60405180910390fd5b611b413384612a69565b81341115611b9c573373ffffffffffffffffffffffffffffffffffffffff166108fc8334611b6f9190613ab3565b9081150290604051600060405180830381858888f19350505050158015611b9a573d6000803e3d6000fd5b505b5050600160098190555050565b8060086000611bb66122ba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611c636122ba565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ca8919061310a565b60405180910390a35050565b611cbc6125e9565b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b600c60009054906101000a900460ff1681565b611d036125e9565b8060148190555050565b611d156125e9565b60105482611d21610c7e565b611d2b9190613b41565b1115611d6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d63906140a7565b60405180910390fd5b611d768183612a69565b5050565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115611e76576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401611df192919061388f565b6020604051808303816000875af1158015611e10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e3491906138cd565b611e7557336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401611e6c9190613314565b60405180910390fd5b5b611e8284848484612a87565b50505050565b60115481565b6060600c60009054906101000a900460ff1615611ed757600e611eb083612afa565b604051602001611ec1929190614186565b6040516020818303038152906040529050611f65565b600d8054611ee49061385e565b80601f0160208091040260200160405190810160405280929190818152602001828054611f109061385e565b8015611f5d5780601f10611f3257610100808354040283529160200191611f5d565b820191906000526020600020905b815481529060010190602001808311611f4057829003601f168201915b505050505090505b919050565b60125481565b60105481565b600e8054611f839061385e565b80601f0160208091040260200160405190810160405280929190818152602001828054611faf9061385e565b8015611ffc5780601f10611fd157610100808354040283529160200191611ffc565b820191906000526020600020905b815481529060010190602001808311611fdf57829003601f168201915b505050505081565b61200c6125e9565b8060138190555050565b6000806000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546014546120689190613ab3565b905080841061209157808461207d9190613ab3565b60115461208a9190613ae7565b9150612096565b600091505b8192505050919050565b6060600a80546120af9061385e565b80601f01602080910402602001604051908101604052809291908181526020018280546120db9061385e565b80156121285780601f106120fd57610100808354040283529160200191612128565b820191906000526020600020905b81548152906001019060200180831161210b57829003601f168201915b5050505050905090565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6121ce6125e9565b8060108190555050565b6121e06125e9565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361224f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122469061421c565b60405180910390fd5b612258816129a5565b50565b6000816122666122c2565b11158015612275575060015482105b80156122b3575060007c0100000000000000000000000000000000000000000000000000000000600560008581526020019081526020016000205416145b9050919050565b600033905090565b600090565b60006122d2826128d9565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612339576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008061234584612c5a565b9150915061235b81876123566122ba565b612c81565b6123a7576123708661236b6122ba565b612132565b6123a6576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361240d576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61241a8686866001612cc5565b801561242557600082555b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055506124f3856124cf888887612ccb565b7c020000000000000000000000000000000000000000000000000000000017612cf3565b600560008681526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008416036125795760006001850190506000600560008381526020019081526020016000205403612577576001548114612576578360056000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46125e18686866001612d1e565b505050505050565b6125f1612d24565b73ffffffffffffffffffffffffffffffffffffffff1661260f61163e565b73ffffffffffffffffffffffffffffffffffffffff1614612665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265c90614288565b60405180910390fd5b565b61268283838360405180602001604052806000815250611d7a565b505050565b6000612692836128d9565b905060008190506000806126a586612c5a565b91509150841561270e576126c181846126bc6122ba565b612c81565b61270d576126d6836126d16122ba565b612132565b61270c576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5b61271c836000886001612cc5565b801561272757600082555b600160806001901b03600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506127cf8361278c85600088612ccb565b7c02000000000000000000000000000000000000000000000000000000007c01000000000000000000000000000000000000000000000000000000001717612cf3565b600560008881526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008516036128555760006001870190506000600560008381526020019081526020016000205403612853576001548114612852578460056000838152602001908152602001600020819055505b5b505b85600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46128bf836000886001612d1e565b600260008154809291906001019190505550505050505050565b600080829050806128e86122c2565b1161296e5760015481101561296d5760006005600083815260200190815260200160002054905060007c010000000000000000000000000000000000000000000000000000000082160361296b575b60008103612961576005600083600190039350838152602001908152602001600020549050612937565b80925050506129a0565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612a83828260405180602001604052806000815250612d2c565b5050565b612a92848484610cad565b60008373ffffffffffffffffffffffffffffffffffffffff163b14612af457612abd84848484612dca565b612af3576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b606060008203612b41576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c55565b600082905060005b60008214612b73578080612b5c906142a8565b915050600a82612b6c919061431f565b9150612b49565b60008167ffffffffffffffff811115612b8f57612b8e61344f565b5b6040519080825280601f01601f191660200182016040528015612bc15781602001600182028036833780820191505090505b5090505b60008514612c4e57600182612bda9190613ab3565b9150600a85612be99190614350565b6030612bf59190613b41565b60f81b818381518110612c0b57612c0a614381565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c47919061431f565b9450612bc5565b8093505050505b919050565b60008060006007600085815260200190815260200160002090508092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e8612ce2868684612f1a565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b600033905090565b612d368383612f23565b60008373ffffffffffffffffffffffffffffffffffffffff163b14612dc55760006001549050600083820390505b612d776000868380600101945086612dca565b612dad576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818110612d64578160015414612dc257600080fd5b50505b505050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612df06122ba565b8786866040518563ffffffff1660e01b8152600401612e129493929190614405565b6020604051808303816000875af1925050508015612e4e57506040513d601f19601f82011682018060405250810190612e4b9190614466565b60015b612ec7573d8060008114612e7e576040519150601f19603f3d011682016040523d82523d6000602084013e612e83565b606091505b506000815103612ebf576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60009392505050565b6000600154905060008203612f64576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612f716000848385612cc5565b600160406001901b178202600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550612fe883612fd96000866000612ccb565b612fe2856130df565b17612cf3565b6005600083815260200190815260200160002081905550600080838301905073ffffffffffffffffffffffffffffffffffffffff85169150828260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600183015b81811461308957808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a460018101905061304e565b50600082036130c4576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060018190555050506130da6000848385612d1e565b505050565b60006001821460e11b9050919050565b60008115159050919050565b613104816130ef565b82525050565b600060208201905061311f60008301846130fb565b92915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61316e81613139565b811461317957600080fd5b50565b60008135905061318b81613165565b92915050565b6000602082840312156131a7576131a661312f565b5b60006131b58482850161317c565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156131f85780820151818401526020810190506131dd565b60008484015250505050565b6000601f19601f8301169050919050565b6000613220826131be565b61322a81856131c9565b935061323a8185602086016131da565b61324381613204565b840191505092915050565b600060208201905081810360008301526132688184613215565b905092915050565b6000819050919050565b61328381613270565b811461328e57600080fd5b50565b6000813590506132a08161327a565b92915050565b6000602082840312156132bc576132bb61312f565b5b60006132ca84828501613291565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006132fe826132d3565b9050919050565b61330e816132f3565b82525050565b60006020820190506133296000830184613305565b92915050565b613338816132f3565b811461334357600080fd5b50565b6000813590506133558161332f565b92915050565b600080604083850312156133725761337161312f565b5b600061338085828601613346565b925050602061339185828601613291565b9150509250929050565b6133a481613270565b82525050565b60006020820190506133bf600083018461339b565b92915050565b6000602082840312156133db576133da61312f565b5b60006133e984828501613346565b91505092915050565b60008060006060848603121561340b5761340a61312f565b5b600061341986828701613346565b935050602061342a86828701613346565b925050604061343b86828701613291565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61348782613204565b810181811067ffffffffffffffff821117156134a6576134a561344f565b5b80604052505050565b60006134b9613125565b90506134c5828261347e565b919050565b600067ffffffffffffffff8211156134e5576134e461344f565b5b6134ee82613204565b9050602081019050919050565b82818337600083830152505050565b600061351d613518846134ca565b6134af565b9050828152602081018484840111156135395761353861344a565b5b6135448482856134fb565b509392505050565b600082601f83011261356157613560613445565b5b813561357184826020860161350a565b91505092915050565b6000602082840312156135905761358f61312f565b5b600082013567ffffffffffffffff8111156135ae576135ad613134565b5b6135ba8482850161354c565b91505092915050565b6135cc816130ef565b81146135d757600080fd5b50565b6000813590506135e9816135c3565b92915050565b600080604083850312156136065761360561312f565b5b6000613614858286016135da565b925050602083013567ffffffffffffffff81111561363557613634613134565b5b6136418582860161354c565b9150509250929050565b600080604083850312156136625761366161312f565b5b600061367085828601613346565b9250506020613681858286016135da565b9150509250929050565b600080604083850312156136a2576136a161312f565b5b60006136b085828601613291565b92505060206136c185828601613346565b9150509250929050565b600067ffffffffffffffff8211156136e6576136e561344f565b5b6136ef82613204565b9050602081019050919050565b600061370f61370a846136cb565b6134af565b90508281526020810184848401111561372b5761372a61344a565b5b6137368482856134fb565b509392505050565b600082601f83011261375357613752613445565b5b81356137638482602086016136fc565b91505092915050565b600080600080608085870312156137865761378561312f565b5b600061379487828801613346565b94505060206137a587828801613346565b93505060406137b687828801613291565b925050606085013567ffffffffffffffff8111156137d7576137d6613134565b5b6137e38782880161373e565b91505092959194509250565b600080604083850312156138065761380561312f565b5b600061381485828601613346565b925050602061382585828601613346565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061387657607f821691505b6020821081036138895761388861382f565b5b50919050565b60006040820190506138a46000830185613305565b6138b16020830184613305565b9392505050565b6000815190506138c7816135c3565b92915050565b6000602082840312156138e3576138e261312f565b5b60006138f1848285016138b8565b91505092915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613930601f836131c9565b915061393b826138fa565b602082019050919050565b6000602082019050818103600083015261395f81613923565b9050919050565b600081905092915050565b50565b6000613981600083613966565b915061398c82613971565b600082019050919050565b60006139a282613974565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b60006139e26010836131c9565b91506139ed826139ac565b602082019050919050565b60006020820190508181036000830152613a11816139d5565b9050919050565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b6000613a4e601e836131c9565b9150613a5982613a18565b602082019050919050565b60006020820190508181036000830152613a7d81613a41565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613abe82613270565b9150613ac983613270565b9250828203905081811115613ae157613ae0613a84565b5b92915050565b6000613af282613270565b9150613afd83613270565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b3657613b35613a84565b5b828202905092915050565b6000613b4c82613270565b9150613b5783613270565b9250828201905080821115613b6f57613b6e613a84565b5b92915050565b7f526f636b73206e6f742072656164792079657421000000000000000000000000600082015250565b6000613bab6014836131c9565b9150613bb682613b75565b602082019050919050565b60006020820190508181036000830152613bda81613b9e565b9050919050565b7f4e6f206d6f726520526f636b7321000000000000000000000000000000000000600082015250565b6000613c17600e836131c9565b9150613c2282613be1565b602082019050919050565b60006020820190508181036000830152613c4681613c0a565b9050919050565b7f547269656420746f20746f74616c206d696e7420526f636b732070657220776160008201527f6c6c6574206f766572206c696d69740000000000000000000000000000000000602082015250565b6000613ca9602f836131c9565b9150613cb482613c4d565b604082019050919050565b60006020820190508181036000830152613cd881613c9c565b9050919050565b7f547269656420746f206d696e7420526f636b73206f766572206c696d69742c2060008201527f726574727920776974682072656475636564207175616e746974790000000000602082015250565b6000613d3b603b836131c9565b9150613d4682613cdf565b604082019050919050565b60006020820190508181036000830152613d6a81613d2e565b9050919050565b7f4d7573742073656e6420656e6f75676820657468000000000000000000000000600082015250565b6000613da76014836131c9565b9150613db282613d71565b602082019050919050565b60006020820190508181036000830152613dd681613d9a565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613e3f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613e02565b613e498683613e02565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613e86613e81613e7c84613270565b613e61565b613270565b9050919050565b6000819050919050565b613ea083613e6b565b613eb4613eac82613e8d565b848454613e0f565b825550505050565b600090565b613ec9613ebc565b613ed4818484613e97565b505050565b5b81811015613ef857613eed600082613ec1565b600181019050613eda565b5050565b601f821115613f3d57613f0e81613ddd565b613f1784613df2565b81016020851015613f26578190505b613f3a613f3285613df2565b830182613ed9565b50505b505050565b600082821c905092915050565b6000613f6060001984600802613f42565b1980831691505092915050565b6000613f798383613f4f565b9150826002028217905092915050565b613f92826131be565b67ffffffffffffffff811115613fab57613faa61344f565b5b613fb5825461385e565b613fc0828285613efc565b600060209050601f831160018114613ff35760008415613fe1578287015190505b613feb8582613f6d565b865550614053565b601f19841661400186613ddd565b60005b8281101561402957848901518255600182019150602085019450602081019050614004565b868310156140465784890151614042601f891682613f4f565b8355505b6001600288020188555050505b505050505050565b7f4e6f206d6f726520746f6b656e7320696e2073746f636b210000000000000000600082015250565b60006140916018836131c9565b915061409c8261405b565b602082019050919050565b600060208201905081810360008301526140c081614084565b9050919050565b600081905092915050565b600081546140df8161385e565b6140e981866140c7565b9450600182166000811461410457600181146141195761414c565b60ff198316865281151582028601935061414c565b61412285613ddd565b60005b8381101561414457815481890152600182019150602081019050614125565b838801955050505b50505092915050565b6000614160826131be565b61416a81856140c7565b935061417a8185602086016131da565b80840191505092915050565b600061419282856140d2565b915061419e8284614155565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006142066026836131c9565b9150614211826141aa565b604082019050919050565b60006020820190508181036000830152614235816141f9565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006142726020836131c9565b915061427d8261423c565b602082019050919050565b600060208201905081810360008301526142a181614265565b9050919050565b60006142b382613270565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036142e5576142e4613a84565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061432a82613270565b915061433583613270565b925082614345576143446142f0565b5b828204905092915050565b600061435b82613270565b915061436683613270565b925082614376576143756142f0565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b60006143d7826143b0565b6143e181856143bb565b93506143f18185602086016131da565b6143fa81613204565b840191505092915050565b600060808201905061441a6000830187613305565b6144276020830186613305565b614434604083018561339b565b818103606083015261444681846143cc565b905095945050505050565b60008151905061446081613165565b92915050565b60006020828403121561447c5761447b61312f565b5b600061448a84828501614451565b9150509291505056fea2646970667358221220c634b2ee01836840bcca7031fda1e0916cae7eebaad7fbdfbcfd02509714426a64736f6c63430008100033
Deployed Bytecode Sourcemap
36372:5787:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36639:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16869:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17121:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20697:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20281:408;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36831:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15232:180;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36502:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41161:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39899:191;;;;;;;;;;;;;:::i;:::-;;41052:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41354:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36245:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36573:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36468:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36794:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17769:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15697:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2981:103;;;;;;;;;;;;;:::i;:::-;;37660:1114;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2746:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40707:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40475:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17229:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40216:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38782:1109;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20923:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40098:110;;;;;;;;;;;;;:::i;:::-;;36550:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40812:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36936:255;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41555:250;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36718:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41813:341;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36760:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36681:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36609:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40937:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37328:324;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40370:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21165:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40598:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3094:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36639:39;;;;;;;;;;;;;:::o;16869:244::-;16954:4;17008:10;16993:25;;:11;:25;;;;:68;;;;17051:10;17036:25;;:11;:25;;;;16993:68;:111;;;;17094:10;17079:25;;:11;:25;;;;16993:111;16973:131;;16869:244;;;:::o;17121:100::-;17175:13;17208:5;17201:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17121:100;:::o;20697:218::-;20773:7;20798:16;20806:7;20798;:16::i;:::-;20793:64;;20823:34;;;;;;;;;;;;;;20793:64;20877:15;:24;20893:7;20877:24;;;;;;;;;;;:30;;;;;;;;;;;;20870:37;;20697:218;;;:::o;20281:408::-;20370:13;20386:16;20394:7;20386;:16::i;:::-;20370:32;;20442:5;20419:28;;:19;:17;:19::i;:::-;:28;;;20415:175;;20467:44;20484:5;20491:19;:17;:19::i;:::-;20467:16;:44::i;:::-;20462:128;;20539:35;;;;;;;;;;;;;;20462:128;20415:175;20635:2;20602:15;:24;20618:7;20602:24;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;20673:7;20669:2;20653:28;;20662:5;20653:28;;;;;;;;;;;;20359:330;20281:408;;:::o;36831:38::-;;;;:::o;15232:180::-;15293:7;15378:15;:13;:15::i;:::-;15363:12;;15347:13;;:28;:46;15340:53;;15232:180;:::o;36502:45::-;;;;;;;;;;;;;;;;;:::o;41161:185::-;33481:1;32692:42;33435:43;;;:47;33431:225;;;32692:42;33504:40;;;33553:4;33560:10;33504:67;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33499:146;;33618:10;33599:30;;;;;;;;;;;:::i;:::-;;;;;;;;33499:146;33431:225;41301:37:::1;41320:4;41326:2;41330:7;41301:18;:37::i;:::-;41161:185:::0;;;:::o;39899:191::-;2705:13;:11;:13::i;:::-;3655:1:::1;3875:7;;:19:::0;3867:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3655:1;4008:7;:18;;;;39968:12:::2;39986:10;:15;;40009:21;39986:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39967:68;;;40054:7;40046:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;39956:134;3611:1:::1;4053:7;:22;;;;39899:191::o:0;41052:101::-;2705:13;:11;:13::i;:::-;41141:4:::1;41124:14;:21;;;;41052:101:::0;:::o;41354:193::-;33481:1;32692:42;33435:43;;;:47;33431:225;;;32692:42;33504:40;;;33553:4;33560:10;33504:67;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33499:146;;33618:10;33599:30;;;;;;;;;;;:::i;:::-;;;;;;;;33499:146;33431:225;41498:41:::1;41521:4;41527:2;41531:7;41498:22;:41::i;:::-;41354:193:::0;;;:::o;36245:94::-;36311:20;36317:7;36326:4;36311:5;:20::i;:::-;36245:94;:::o;36573:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;36468:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;36794:34::-;;;;:::o;17769:152::-;17841:7;17884:27;17903:7;17884:18;:27::i;:::-;17861:52;;17769:152;;;:::o;15697:233::-;15769:7;15810:1;15793:19;;:5;:19;;;15789:60;;15821:28;;;;;;;;;;;;;;15789:60;13505:13;15867:18;:25;15886:5;15867:25;;;;;;;;;;;;;;;;:55;15860:62;;15697:233;;;:::o;2981:103::-;2705:13;:11;:13::i;:::-;3046:30:::1;3073:1;3046:18;:30::i;:::-;2981:103::o:0;37660:1114::-;37255:10;37242:23;;:9;:23;;;37234:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;3655:1:::1;3875:7;;:19:::0;3867:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3655:1;4008:7;:18;;;;37790:10:::2;37811:9:::0;37848:13:::2;:25;37862:10;37848:25;;;;;;;;;;;;;;;;37823:22;;:50;;;;:::i;:::-;37811:62;;37900:4;37888:8;:16;37884:285;;37956:4;37945:8;:15;;;;:::i;:::-;37930:10;;37929:32;;;;:::i;:::-;37921:40;;38032:4;38004:13;:25;38018:10;38004:25;;;;;;;;;;;;;;;;:32;;;;:::i;:::-;37976:13;:25;37990:10;37976:25;;;;;;;;;;;;;;;:60;;;;37884:285;;;38077:1;38069:9;;38149:8;38121:13;:25;38135:10;38121:25;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;38093:13;:25;38107:10;38093:25;;;;;;;;;;;;;;;:64;;;;37884:285;38189:19;;;;;;;;;;;38181:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;38280:15;;38268:8;38252:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:43;;38244:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;38371:17;;38359:8;38335:21;38345:10;38335:9;:21::i;:::-;:32;;;;:::i;:::-;:53;;38327:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;38473:14;;38461:8;:26;;38453:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;38583:5;38570:9;:18;;38562:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;38626:31;38636:10;38648:8;38626:9;:31::i;:::-;38686:5;38674:9;:17;38670:97;;;38716:10;38708:28;;:47;38749:5;38737:9;:17;;;;:::i;:::-;38708:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;38670:97;37779:995;;3611:1:::1;4053:7;:22;;;;37660:1114:::0;:::o;2746:87::-;2792:7;2819:6;;;;;;;;;;;2812:13;;2746:87;:::o;40707:97::-;2705:13;:11;:13::i;:::-;40787:9:::1;40774:10;:22;;;;40707:97:::0;:::o;40475:115::-;2705:13;:11;:13::i;:::-;40570:12:::1;40555;:27;;;;;;:::i;:::-;;40475:115:::0;:::o;17229:104::-;17285:13;17318:7;17311:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17229:104;:::o;40216:146::-;2705:13;:11;:13::i;:::-;40315:8:::1;40304;:19;;;;;;:::i;:::-;;40345:9;40334:8;;:20;;;;;;;;;;;;;;;;;;40216:146:::0;;:::o;38782:1109::-;37255:10;37242:23;;:9;:23;;;37234:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;3655:1:::1;3875:7;;:19:::0;3867:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3655:1;4008:7;:18;;;;38907:10:::2;38928:9:::0;38965:13:::2;:25;38979:10;38965:25;;;;;;;;;;;;;;;;38940:22;;:50;;;;:::i;:::-;38928:62;;39017:4;39005:8;:16;39001:285;;39073:4;39062:8;:15;;;;:::i;:::-;39047:10;;39046:32;;;;:::i;:::-;39038:40;;39149:4;39121:13;:25;39135:10;39121:25;;;;;;;;;;;;;;;;:32;;;;:::i;:::-;39093:13;:25;39107:10;39093:25;;;;;;;;;;;;;;;:60;;;;39001:285;;;39194:1;39186:9;;39266:8;39238:13;:25;39252:10;39238:25;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;39210:13;:25;39224:10;39210:25;;;;;;;;;;;;;;;:64;;;;39001:285;39306:19;;;;;;;;;;;39298:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;39397:15;;39385:8;39369:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:43;;39361:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;39488:17;;39476:8;39452:21;39462:10;39452:9;:21::i;:::-;:32;;;;:::i;:::-;:53;;39444:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;39590:14;;39578:8;:26;;39570:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;39700:5;39687:9;:18;;39679:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;39743:31;39753:10;39765:8;39743:9;:31::i;:::-;39803:5;39791:9;:17;39787:97;;;39833:10;39825:28;;:47;39866:5;39854:9;:17;;;;:::i;:::-;39825:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;39787:97;38896:995;;3611:1:::1;4053:7;:22;;;;38782:1109:::0;:::o;20923:234::-;21070:8;21018:18;:39;21037:19;:17;:19::i;:::-;21018:39;;;;;;;;;;;;;;;:49;21058:8;21018:49;;;;;;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;21130:8;21094:55;;21109:19;:17;:19::i;:::-;21094:55;;;21140:8;21094:55;;;;;;:::i;:::-;;;;;;;;20923:234;;:::o;40098:110::-;2705:13;:11;:13::i;:::-;40181:19:::1;;;;;;;;;;;40180:20;40158:19;;:42;;;;;;;;;;;;;;;;;;40098:110::o:0;36550:20::-;;;;;;;;;;;;;:::o;40812:117::-;2705:13;:11;:13::i;:::-;40917:4:::1;40892:22;:29;;;;40812:117:::0;:::o;36936:255::-;2705:13;:11;:13::i;:::-;37066:15:::1;;37054:8;37038:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:43;;37016:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;37154:29;37164:8;37174;37154:9;:29::i;:::-;36936:255:::0;;:::o;41555:250::-;33481:1;32692:42;33435:43;;;:47;33431:225;;;32692:42;33504:40;;;33553:4;33560:10;33504:67;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33499:146;;33618:10;33599:30;;;;;;;;;;;:::i;:::-;;;;;;;;33499:146;33431:225;41750:47:::1;41773:4;41779:2;41783:7;41792:4;41750:22;:47::i;:::-;41555:250:::0;;;;:::o;36718:39::-;;;;:::o;41813:341::-;41935:13;41970:8;;;;;;;;;;;41966:181;;;42043:8;42053:26;42070:8;42053:16;:26::i;:::-;42026:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;41995:86;;;;41966:181;42121:14;42114:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41813:341;;;;:::o;36760:31::-;;;;:::o;36681:34::-;;;;:::o;36609:27::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;40937:107::-;2705:13;:11;:13::i;:::-;41032:4:::1;41012:17;:24;;;;40937:107:::0;:::o;37328:324::-;37381:4;37397:10;37418:9;37455:13;:25;37469:10;37455:25;;;;;;;;;;;;;;;;37430:22;;:50;;;;:::i;:::-;37418:62;;37507:4;37495:8;:16;37491:131;;37563:4;37552:8;:15;;;;:::i;:::-;37537:10;;37536:32;;;;:::i;:::-;37528:40;;37491:131;;;37609:1;37601:9;;37491:131;37639:5;37632:12;;;;37328:324;;;:::o;40370:97::-;40414:13;40447:12;40440:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40370:97;:::o;21165:164::-;21262:4;21286:18;:25;21305:5;21286:25;;;;;;;;;;;;;;;:35;21312:8;21286:35;;;;;;;;;;;;;;;;;;;;;;;;;21279:42;;21165:164;;;;:::o;40598:101::-;2705:13;:11;:13::i;:::-;40687:4:::1;40669:15;:22;;;;40598:101:::0;:::o;3094:201::-;2705:13;:11;:13::i;:::-;3203:1:::1;3183:22;;:8;:22;;::::0;3175:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3259:28;3278:8;3259:18;:28::i;:::-;3094:201:::0;:::o;21337:282::-;21402:4;21458:7;21439:15;:13;:15::i;:::-;:26;;:66;;;;;21492:13;;21482:7;:23;21439:66;:153;;;;;21591:1;13879:8;21543:17;:26;21561:7;21543:26;;;;;;;;;;;;:44;:49;21439:153;21419:173;;21337:282;;;:::o;31717:105::-;31777:7;31804:10;31797:17;;31717:105;:::o;15021:92::-;15077:7;15021:92;:::o;22432:1651::-;22574:27;22604;22623:7;22604:18;:27::i;:::-;22574:57;;22689:4;22648:45;;22664:19;22648:45;;;22644:86;;22702:28;;;;;;;;;;;;;;22644:86;22744:27;22773:23;22800:35;22827:7;22800:26;:35::i;:::-;22743:92;;;;22853:68;22878:15;22895:4;22901:19;:17;:19::i;:::-;22853:24;:68::i;:::-;22848:180;;22941:43;22958:4;22964:19;:17;:19::i;:::-;22941:16;:43::i;:::-;22936:92;;22993:35;;;;;;;;;;;;;;22936:92;22848:180;23059:1;23045:16;;:2;:16;;;23041:52;;23070:23;;;;;;;;;;;;;;23041:52;23106:43;23128:4;23134:2;23138:7;23147:1;23106:21;:43::i;:::-;23189:15;23186:85;;;23254:1;23233:19;23226:30;23186:85;23323:18;:24;23342:4;23323:24;;;;;;;;;;;;;;;;23321:26;;;;;;;;;;;;23365:18;:22;23384:2;23365:22;;;;;;;;;;;;;;;;23363:24;;;;;;;;;;;23434:146;23471:2;23520:45;23535:4;23541:2;23545:19;23520:14;:45::i;:::-;14013:8;23492:73;23434:18;:146::i;:::-;23405:17;:26;23423:7;23405:26;;;;;;;;;;;:175;;;;23652:1;14013:8;23601:19;:47;:52;23597:370;;23674:19;23706:1;23696:7;:11;23674:33;;23766:1;23732:17;:30;23750:11;23732:30;;;;;;;;;;;;:35;23728:224;;23813:13;;23798:11;:28;23794:139;;23890:19;23857:17;:30;23875:11;23857:30;;;;;;;;;;;:52;;;;23794:139;23728:224;23655:312;23597:370;24014:7;24010:2;23995:27;;24004:4;23995:27;;;;;;;;;;;;24033:42;24054:4;24060:2;24064:7;24073:1;24033:20;:42::i;:::-;22563:1520;;;22432:1651;;;:::o;2841:132::-;2916:12;:10;:12::i;:::-;2905:23;;:7;:5;:7::i;:::-;:23;;;2897:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2841:132::o;24091:193::-;24237:39;24254:4;24260:2;24264:7;24237:39;;;;;;;;;;;;:16;:39::i;:::-;24091:193;;;:::o;29087:1679::-;29167:27;29197;29216:7;29197:18;:27::i;:::-;29167:57;;29237:12;29268:19;29237:52;;29303:27;29332:23;29359:35;29386:7;29359:26;:35::i;:::-;29302:92;;;;29411:13;29407:244;;;29460:68;29485:15;29502:4;29508:19;:17;:19::i;:::-;29460:24;:68::i;:::-;29455:184;;29552:43;29569:4;29575:19;:17;:19::i;:::-;29552:16;:43::i;:::-;29547:92;;29604:35;;;;;;;;;;;;;;29547:92;29455:184;29407:244;29663:51;29685:4;29699:1;29703:7;29712:1;29663:21;:51::i;:::-;29754:15;29751:101;;;29835:1;29814:19;29807:30;29751:101;29961:1;13636:3;29931:1;:26;;29930:32;29902:18;:24;29921:4;29902:24;;;;;;;;;;;;;;;;:60;;;;;;;;;;;30008:176;30045:4;30116:53;30131:4;30145:1;30149:19;30116:14;:53::i;:::-;14013:8;13879;30069:43;30068:101;30008:18;:176::i;:::-;29979:17;:26;29997:7;29979:26;;;;;;;;;;;:205;;;;30256:1;14013:8;30205:19;:47;:52;30201:370;;30278:19;30310:1;30300:7;:11;30278:33;;30370:1;30336:17;:30;30354:11;30336:30;;;;;;;;;;;;:35;30332:224;;30417:13;;30402:11;:28;30398:139;;30494:19;30461:17;:30;30479:11;30461:30;;;;;;;;;;;:52;;;;30398:139;30332:224;30259:312;30201:370;30626:7;30622:1;30599:35;;30608:4;30599:35;;;;;;;;;;;;30645:50;30666:4;30680:1;30684:7;30693:1;30645:20;:50::i;:::-;30733:12;;:14;;;;;;;;;;;;;29156:1610;;;;29087:1679;;:::o;18476:633::-;18543:7;18563:12;18578:7;18563:22;;18646:4;18627:15;:13;:15::i;:::-;:23;18623:419;;18680:13;;18673:4;:20;18669:373;;;18718:14;18735:17;:23;18753:4;18735:23;;;;;;;;;;;;18718:40;;18815:1;13879:8;18787:6;:24;:29;18783:240;;18847:113;18864:1;18854:6;:11;18847:113;;18907:17;:25;18925:6;;;;;;;18907:25;;;;;;;;;;;;18898:34;;18847:113;;;18993:6;18986:13;;;;;;18783:240;18695:347;18669:373;18623:419;19070:31;;;;;;;;;;;;;;18476:633;;;;:::o;3303:191::-;3377:16;3396:6;;;;;;;;;;;3377:25;;3422:8;3413:6;;:17;;;;;;;;;;;;;;;;;;3477:8;3446:40;;3467:8;3446:40;;;;;;;;;;;;3366:128;3303:191;:::o;28870:112::-;28947:27;28957:2;28961:8;28947:27;;;;;;;;;;;;:9;:27::i;:::-;28870:112;;:::o;24292:407::-;24467:31;24480:4;24486:2;24490:7;24467:12;:31::i;:::-;24531:1;24513:2;:14;;;:19;24509:183;;24552:56;24583:4;24589:2;24593:7;24602:5;24552:30;:56::i;:::-;24547:145;;24636:40;;;;;;;;;;;;;;24547:145;24509:183;24292:407;;;;:::o;4257:534::-;4313:13;4354:1;4345:5;:10;4341:53;;4372:10;;;;;;;;;;;;;;;;;;;;;4341:53;4404:12;4419:5;4404:20;;4435:14;4460:78;4475:1;4467:4;:9;4460:78;;4493:8;;;;;:::i;:::-;;;;4524:2;4516:10;;;;;:::i;:::-;;;4460:78;;;4548:19;4580:6;4570:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4548:39;;4598:154;4614:1;4605:5;:10;4598:154;;4642:1;4632:11;;;;;:::i;:::-;;;4709:2;4701:5;:10;;;;:::i;:::-;4688:2;:24;;;;:::i;:::-;4675:39;;4658:6;4665;4658:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;4738:2;4729:11;;;;;:::i;:::-;;;4598:154;;;4776:6;4762:21;;;;;4257:534;;;;:::o;22032:392::-;22134:27;22163:23;22204:38;22245:15;:24;22261:7;22245:24;;;;;;;;;;;22204:65;;22329:18;22306:41;;22386:19;22380:26;22361:45;;22291:126;22032:392;;;:::o;21627:397::-;21776:11;21846:16;21839:5;21835:28;21826:37;;21907:16;21896:9;21892:32;21879:45;;21989:15;21978:9;21975:30;21967:5;21956:9;21953:20;21950:56;21940:66;;21627:397;;;;;:::o;24707:159::-;;;;;:::o;31398:311::-;31533:7;31553:16;14076:3;31579:19;:41;;31553:68;;14076:3;31647:31;31658:4;31664:2;31668:9;31647:10;:31::i;:::-;31639:40;;:62;;31632:69;;;31398:311;;;;;:::o;19491:450::-;19571:14;19739:16;19732:5;19728:28;19719:37;;19916:5;19902:11;19877:23;19873:41;19870:52;19863:5;19860:63;19850:73;;19491:450;;;;:::o;24874:158::-;;;;;:::o;2194:98::-;2247:7;2274:10;2267:17;;2194:98;:::o;28173:689::-;28304:19;28310:2;28314:8;28304:5;:19::i;:::-;28383:1;28365:2;:14;;;:19;28361:483;;28405:11;28419:13;;28405:27;;28451:13;28473:8;28467:3;:14;28451:30;;28500:233;28531:62;28570:1;28574:2;28578:7;;;;;;28587:5;28531:30;:62::i;:::-;28526:167;;28629:40;;;;;;;;;;;;;;28526:167;28728:3;28720:5;:11;28500:233;;28815:3;28798:13;;:20;28794:34;;28820:8;;;28794:34;28386:458;;28361:483;28173:689;;;:::o;25040:716::-;25203:4;25249:2;25224:45;;;25270:19;:17;:19::i;:::-;25291:4;25297:7;25306:5;25224:88;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;25220:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25524:1;25507:6;:13;:18;25503:235;;25553:40;;;;;;;;;;;;;;25503:235;25696:6;25690:13;25681:6;25677:2;25673:15;25666:38;25220:529;25393:54;;;25383:64;;;:6;:64;;;;25376:71;;;25040:716;;;;;;:::o;31243:147::-;31380:6;31243:147;;;;;:::o;25764:1442::-;25837:20;25860:13;;25837:36;;25900:1;25888:8;:13;25884:44;;25910:18;;;;;;;;;;;;;;25884:44;25941:61;25971:1;25975:2;25979:12;25993:8;25941:21;:61::i;:::-;26111:1;13576:2;26081:1;:26;;26080:32;26068:8;:45;26042:18;:22;26061:2;26042:22;;;;;;;;;;;;;;;;:71;;;;;;;;;;;26164:139;26201:2;26255:33;26278:1;26282:2;26286:1;26255:14;:33::i;:::-;26222:30;26243:8;26222:20;:30::i;:::-;:66;26164:18;:139::i;:::-;26130:17;:31;26148:12;26130:31;;;;;;;;;;;:173;;;;26320:16;26351:11;26380:8;26365:12;:23;26351:37;;26455:16;26451:2;26447:25;26435:37;;26675:12;26643:8;26618:1;26569:25;26544:1;26519;26492:215;26787:1;26773:12;26769:20;26727:279;26828:3;26819:7;26816:16;26727:279;;26979:7;26969:8;26966:1;26939:25;26936:1;26933;26928:59;26881:1;26872:7;26868:15;26857:26;;26727:279;;;26731:77;27051:1;27039:8;:13;27035:45;;27061:19;;;;;;;;;;;;;;27035:45;27113:3;27097:13;:19;;;;26015:1113;;27138:60;27167:1;27171:2;27175:12;27189:8;27138:20;:60::i;:::-;25826:1380;25764:1442;;:::o;19949:324::-;20019:14;20252:1;20242:8;20239:15;20213:24;20209:46;20199:56;;19949:324;;;:::o;7:90:1:-;41:7;84:5;77:13;70:21;59:32;;7:90;;;:::o;103:109::-;184:21;199:5;184:21;:::i;:::-;179:3;172:34;103:109;;:::o;218:210::-;305:4;343:2;332:9;328:18;320:26;;356:65;418:1;407:9;403:17;394:6;356:65;:::i;:::-;218:210;;;;:::o;434:75::-;467:6;500:2;494:9;484:19;;434:75;:::o;515:117::-;624:1;621;614:12;638:117;747:1;744;737:12;761:149;797:7;837:66;830:5;826:78;815:89;;761:149;;;:::o;916:120::-;988:23;1005:5;988:23;:::i;:::-;981:5;978:34;968:62;;1026:1;1023;1016:12;968:62;916:120;:::o;1042:137::-;1087:5;1125:6;1112:20;1103:29;;1141:32;1167:5;1141:32;:::i;:::-;1042:137;;;;:::o;1185:327::-;1243:6;1292:2;1280:9;1271:7;1267:23;1263:32;1260:119;;;1298:79;;:::i;:::-;1260:119;1418:1;1443:52;1487:7;1478:6;1467:9;1463:22;1443:52;:::i;:::-;1433:62;;1389:116;1185:327;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:246::-;1879:1;1889:113;1903:6;1900:1;1897:13;1889:113;;;1988:1;1983:3;1979:11;1973:18;1969:1;1964:3;1960:11;1953:39;1925:2;1922:1;1918:10;1913:15;;1889:113;;;2036:1;2027:6;2022:3;2018:16;2011:27;1860:184;1798:246;;;:::o;2050:102::-;2091:6;2142:2;2138:7;2133:2;2126:5;2122:14;2118:28;2108:38;;2050:102;;;:::o;2158:377::-;2246:3;2274:39;2307:5;2274:39;:::i;:::-;2329:71;2393:6;2388:3;2329:71;:::i;:::-;2322:78;;2409:65;2467:6;2462:3;2455:4;2448:5;2444:16;2409:65;:::i;:::-;2499:29;2521:6;2499:29;:::i;:::-;2494:3;2490:39;2483:46;;2250:285;2158:377;;;;:::o;2541:313::-;2654:4;2692:2;2681:9;2677:18;2669:26;;2741:9;2735:4;2731:20;2727:1;2716:9;2712:17;2705:47;2769:78;2842:4;2833:6;2769:78;:::i;:::-;2761:86;;2541:313;;;;:::o;2860:77::-;2897:7;2926:5;2915:16;;2860:77;;;:::o;2943:122::-;3016:24;3034:5;3016:24;:::i;:::-;3009:5;3006:35;2996:63;;3055:1;3052;3045:12;2996:63;2943:122;:::o;3071:139::-;3117:5;3155:6;3142:20;3133:29;;3171:33;3198:5;3171:33;:::i;:::-;3071:139;;;;:::o;3216:329::-;3275:6;3324:2;3312:9;3303:7;3299:23;3295:32;3292:119;;;3330:79;;:::i;:::-;3292:119;3450:1;3475:53;3520:7;3511:6;3500:9;3496:22;3475:53;:::i;:::-;3465:63;;3421:117;3216:329;;;;:::o;3551:126::-;3588:7;3628:42;3621:5;3617:54;3606:65;;3551:126;;;:::o;3683:96::-;3720:7;3749:24;3767:5;3749:24;:::i;:::-;3738:35;;3683:96;;;:::o;3785:118::-;3872:24;3890:5;3872:24;:::i;:::-;3867:3;3860:37;3785:118;;:::o;3909:222::-;4002:4;4040:2;4029:9;4025:18;4017:26;;4053:71;4121:1;4110:9;4106:17;4097:6;4053:71;:::i;:::-;3909:222;;;;:::o;4137:122::-;4210:24;4228:5;4210:24;:::i;:::-;4203:5;4200:35;4190:63;;4249:1;4246;4239:12;4190:63;4137:122;:::o;4265:139::-;4311:5;4349:6;4336:20;4327:29;;4365:33;4392:5;4365:33;:::i;:::-;4265:139;;;;:::o;4410:474::-;4478:6;4486;4535:2;4523:9;4514:7;4510:23;4506:32;4503:119;;;4541:79;;:::i;:::-;4503:119;4661:1;4686:53;4731:7;4722:6;4711:9;4707:22;4686:53;:::i;:::-;4676:63;;4632:117;4788:2;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4759:118;4410:474;;;;;:::o;4890:118::-;4977:24;4995:5;4977:24;:::i;:::-;4972:3;4965:37;4890:118;;:::o;5014:222::-;5107:4;5145:2;5134:9;5130:18;5122:26;;5158:71;5226:1;5215:9;5211:17;5202:6;5158:71;:::i;:::-;5014:222;;;;:::o;5242:329::-;5301:6;5350:2;5338:9;5329:7;5325:23;5321:32;5318:119;;;5356:79;;:::i;:::-;5318:119;5476:1;5501:53;5546:7;5537:6;5526:9;5522:22;5501:53;:::i;:::-;5491:63;;5447:117;5242:329;;;;:::o;5577:619::-;5654:6;5662;5670;5719:2;5707:9;5698:7;5694:23;5690:32;5687:119;;;5725:79;;:::i;:::-;5687:119;5845:1;5870:53;5915:7;5906:6;5895:9;5891:22;5870:53;:::i;:::-;5860:63;;5816:117;5972:2;5998:53;6043:7;6034:6;6023:9;6019:22;5998:53;:::i;:::-;5988:63;;5943:118;6100:2;6126:53;6171:7;6162:6;6151:9;6147:22;6126:53;:::i;:::-;6116:63;;6071:118;5577:619;;;;;:::o;6202:117::-;6311:1;6308;6301:12;6325:117;6434:1;6431;6424:12;6448:180;6496:77;6493:1;6486:88;6593:4;6590:1;6583:15;6617:4;6614:1;6607:15;6634:281;6717:27;6739:4;6717:27;:::i;:::-;6709:6;6705:40;6847:6;6835:10;6832:22;6811:18;6799:10;6796:34;6793:62;6790:88;;;6858:18;;:::i;:::-;6790:88;6898:10;6894:2;6887:22;6677:238;6634:281;;:::o;6921:129::-;6955:6;6982:20;;:::i;:::-;6972:30;;7011:33;7039:4;7031:6;7011:33;:::i;:::-;6921:129;;;:::o;7056:308::-;7118:4;7208:18;7200:6;7197:30;7194:56;;;7230:18;;:::i;:::-;7194:56;7268:29;7290:6;7268:29;:::i;:::-;7260:37;;7352:4;7346;7342:15;7334:23;;7056:308;;;:::o;7370:146::-;7467:6;7462:3;7457;7444:30;7508:1;7499:6;7494:3;7490:16;7483:27;7370:146;;;:::o;7522:425::-;7600:5;7625:66;7641:49;7683:6;7641:49;:::i;:::-;7625:66;:::i;:::-;7616:75;;7714:6;7707:5;7700:21;7752:4;7745:5;7741:16;7790:3;7781:6;7776:3;7772:16;7769:25;7766:112;;;7797:79;;:::i;:::-;7766:112;7887:54;7934:6;7929:3;7924;7887:54;:::i;:::-;7606:341;7522:425;;;;;:::o;7967:340::-;8023:5;8072:3;8065:4;8057:6;8053:17;8049:27;8039:122;;8080:79;;:::i;:::-;8039:122;8197:6;8184:20;8222:79;8297:3;8289:6;8282:4;8274:6;8270:17;8222:79;:::i;:::-;8213:88;;8029:278;7967:340;;;;:::o;8313:509::-;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:63;8797:7;8788:6;8777:9;8773:22;8742:63;:::i;:::-;8732:73;;8528:287;8313:509;;;;:::o;8828:116::-;8898:21;8913:5;8898:21;:::i;:::-;8891:5;8888:32;8878:60;;8934:1;8931;8924:12;8878:60;8828:116;:::o;8950:133::-;8993:5;9031:6;9018:20;9009:29;;9047:30;9071:5;9047:30;:::i;:::-;8950:133;;;;:::o;9089:648::-;9164:6;9172;9221:2;9209:9;9200:7;9196:23;9192:32;9189:119;;;9227:79;;:::i;:::-;9189:119;9347:1;9372:50;9414:7;9405:6;9394:9;9390:22;9372:50;:::i;:::-;9362:60;;9318:114;9499:2;9488:9;9484:18;9471:32;9530:18;9522:6;9519:30;9516:117;;;9552:79;;:::i;:::-;9516:117;9657:63;9712:7;9703:6;9692:9;9688:22;9657:63;:::i;:::-;9647:73;;9442:288;9089:648;;;;;:::o;9743:468::-;9808:6;9816;9865:2;9853:9;9844:7;9840:23;9836:32;9833:119;;;9871:79;;:::i;:::-;9833:119;9991:1;10016:53;10061:7;10052:6;10041:9;10037:22;10016:53;:::i;:::-;10006:63;;9962:117;10118:2;10144:50;10186:7;10177:6;10166:9;10162:22;10144:50;:::i;:::-;10134:60;;10089:115;9743:468;;;;;:::o;10217:474::-;10285:6;10293;10342:2;10330:9;10321:7;10317:23;10313:32;10310:119;;;10348:79;;:::i;:::-;10310:119;10468:1;10493:53;10538:7;10529:6;10518:9;10514:22;10493:53;:::i;:::-;10483:63;;10439:117;10595:2;10621:53;10666:7;10657:6;10646:9;10642:22;10621:53;:::i;:::-;10611:63;;10566:118;10217:474;;;;;:::o;10697:307::-;10758:4;10848:18;10840:6;10837:30;10834:56;;;10870:18;;:::i;:::-;10834:56;10908:29;10930:6;10908:29;:::i;:::-;10900:37;;10992:4;10986;10982:15;10974:23;;10697:307;;;:::o;11010:423::-;11087:5;11112:65;11128:48;11169:6;11128:48;:::i;:::-;11112:65;:::i;:::-;11103:74;;11200:6;11193:5;11186:21;11238:4;11231:5;11227:16;11276:3;11267:6;11262:3;11258:16;11255:25;11252:112;;;11283:79;;:::i;:::-;11252:112;11373:54;11420:6;11415:3;11410;11373:54;:::i;:::-;11093:340;11010:423;;;;;:::o;11452:338::-;11507:5;11556:3;11549:4;11541:6;11537:17;11533:27;11523:122;;11564:79;;:::i;:::-;11523:122;11681:6;11668:20;11706:78;11780:3;11772:6;11765:4;11757:6;11753:17;11706:78;:::i;:::-;11697:87;;11513:277;11452:338;;;;:::o;11796:943::-;11891:6;11899;11907;11915;11964:3;11952:9;11943:7;11939:23;11935:33;11932:120;;;11971:79;;:::i;:::-;11932:120;12091:1;12116:53;12161:7;12152:6;12141:9;12137:22;12116:53;:::i;:::-;12106:63;;12062:117;12218:2;12244:53;12289:7;12280:6;12269:9;12265:22;12244:53;:::i;:::-;12234:63;;12189:118;12346:2;12372:53;12417:7;12408:6;12397:9;12393:22;12372:53;:::i;:::-;12362:63;;12317:118;12502:2;12491:9;12487:18;12474:32;12533:18;12525:6;12522:30;12519:117;;;12555:79;;:::i;:::-;12519:117;12660:62;12714:7;12705:6;12694:9;12690:22;12660:62;:::i;:::-;12650:72;;12445:287;11796:943;;;;;;;:::o;12745:474::-;12813:6;12821;12870:2;12858:9;12849:7;12845:23;12841:32;12838:119;;;12876:79;;:::i;:::-;12838:119;12996:1;13021:53;13066:7;13057:6;13046:9;13042:22;13021:53;:::i;:::-;13011:63;;12967:117;13123:2;13149:53;13194:7;13185:6;13174:9;13170:22;13149:53;:::i;:::-;13139:63;;13094:118;12745:474;;;;;:::o;13225:180::-;13273:77;13270:1;13263:88;13370:4;13367:1;13360:15;13394:4;13391:1;13384:15;13411:320;13455:6;13492:1;13486:4;13482:12;13472:22;;13539:1;13533:4;13529:12;13560:18;13550:81;;13616:4;13608:6;13604:17;13594:27;;13550:81;13678:2;13670:6;13667:14;13647:18;13644:38;13641:84;;13697:18;;:::i;:::-;13641:84;13462:269;13411:320;;;:::o;13737:332::-;13858:4;13896:2;13885:9;13881:18;13873:26;;13909:71;13977:1;13966:9;13962:17;13953:6;13909:71;:::i;:::-;13990:72;14058:2;14047:9;14043:18;14034:6;13990:72;:::i;:::-;13737:332;;;;;:::o;14075:137::-;14129:5;14160:6;14154:13;14145:22;;14176:30;14200:5;14176:30;:::i;:::-;14075:137;;;;:::o;14218:345::-;14285:6;14334:2;14322:9;14313:7;14309:23;14305:32;14302:119;;;14340:79;;:::i;:::-;14302:119;14460:1;14485:61;14538:7;14529:6;14518:9;14514:22;14485:61;:::i;:::-;14475:71;;14431:125;14218:345;;;;:::o;14569:181::-;14709:33;14705:1;14697:6;14693:14;14686:57;14569:181;:::o;14756:366::-;14898:3;14919:67;14983:2;14978:3;14919:67;:::i;:::-;14912:74;;14995:93;15084:3;14995:93;:::i;:::-;15113:2;15108:3;15104:12;15097:19;;14756:366;;;:::o;15128:419::-;15294:4;15332:2;15321:9;15317:18;15309:26;;15381:9;15375:4;15371:20;15367:1;15356:9;15352:17;15345:47;15409:131;15535:4;15409:131;:::i;:::-;15401:139;;15128:419;;;:::o;15553:147::-;15654:11;15691:3;15676:18;;15553:147;;;;:::o;15706:114::-;;:::o;15826:398::-;15985:3;16006:83;16087:1;16082:3;16006:83;:::i;:::-;15999:90;;16098:93;16187:3;16098:93;:::i;:::-;16216:1;16211:3;16207:11;16200:18;;15826:398;;;:::o;16230:379::-;16414:3;16436:147;16579:3;16436:147;:::i;:::-;16429:154;;16600:3;16593:10;;16230:379;;;:::o;16615:166::-;16755:18;16751:1;16743:6;16739:14;16732:42;16615:166;:::o;16787:366::-;16929:3;16950:67;17014:2;17009:3;16950:67;:::i;:::-;16943:74;;17026:93;17115:3;17026:93;:::i;:::-;17144:2;17139:3;17135:12;17128:19;;16787:366;;;:::o;17159:419::-;17325:4;17363:2;17352:9;17348:18;17340:26;;17412:9;17406:4;17402:20;17398:1;17387:9;17383:17;17376:47;17440:131;17566:4;17440:131;:::i;:::-;17432:139;;17159:419;;;:::o;17584:180::-;17724:32;17720:1;17712:6;17708:14;17701:56;17584:180;:::o;17770:366::-;17912:3;17933:67;17997:2;17992:3;17933:67;:::i;:::-;17926:74;;18009:93;18098:3;18009:93;:::i;:::-;18127:2;18122:3;18118:12;18111:19;;17770:366;;;:::o;18142:419::-;18308:4;18346:2;18335:9;18331:18;18323:26;;18395:9;18389:4;18385:20;18381:1;18370:9;18366:17;18359:47;18423:131;18549:4;18423:131;:::i;:::-;18415:139;;18142:419;;;:::o;18567:180::-;18615:77;18612:1;18605:88;18712:4;18709:1;18702:15;18736:4;18733:1;18726:15;18753:194;18793:4;18813:20;18831:1;18813:20;:::i;:::-;18808:25;;18847:20;18865:1;18847:20;:::i;:::-;18842:25;;18891:1;18888;18884:9;18876:17;;18915:1;18909:4;18906:11;18903:37;;;18920:18;;:::i;:::-;18903:37;18753:194;;;;:::o;18953:348::-;18993:7;19016:20;19034:1;19016:20;:::i;:::-;19011:25;;19050:20;19068:1;19050:20;:::i;:::-;19045:25;;19238:1;19170:66;19166:74;19163:1;19160:81;19155:1;19148:9;19141:17;19137:105;19134:131;;;19245:18;;:::i;:::-;19134:131;19293:1;19290;19286:9;19275:20;;18953:348;;;;:::o;19307:191::-;19347:3;19366:20;19384:1;19366:20;:::i;:::-;19361:25;;19400:20;19418:1;19400:20;:::i;:::-;19395:25;;19443:1;19440;19436:9;19429:16;;19464:3;19461:1;19458:10;19455:36;;;19471:18;;:::i;:::-;19455:36;19307:191;;;;:::o;19504:170::-;19644:22;19640:1;19632:6;19628:14;19621:46;19504:170;:::o;19680:366::-;19822:3;19843:67;19907:2;19902:3;19843:67;:::i;:::-;19836:74;;19919:93;20008:3;19919:93;:::i;:::-;20037:2;20032:3;20028:12;20021:19;;19680:366;;;:::o;20052:419::-;20218:4;20256:2;20245:9;20241:18;20233:26;;20305:9;20299:4;20295:20;20291:1;20280:9;20276:17;20269:47;20333:131;20459:4;20333:131;:::i;:::-;20325:139;;20052:419;;;:::o;20477:164::-;20617:16;20613:1;20605:6;20601:14;20594:40;20477:164;:::o;20647:366::-;20789:3;20810:67;20874:2;20869:3;20810:67;:::i;:::-;20803:74;;20886:93;20975:3;20886:93;:::i;:::-;21004:2;20999:3;20995:12;20988:19;;20647:366;;;:::o;21019:419::-;21185:4;21223:2;21212:9;21208:18;21200:26;;21272:9;21266:4;21262:20;21258:1;21247:9;21243:17;21236:47;21300:131;21426:4;21300:131;:::i;:::-;21292:139;;21019:419;;;:::o;21444:234::-;21584:34;21580:1;21572:6;21568:14;21561:58;21653:17;21648:2;21640:6;21636:15;21629:42;21444:234;:::o;21684:366::-;21826:3;21847:67;21911:2;21906:3;21847:67;:::i;:::-;21840:74;;21923:93;22012:3;21923:93;:::i;:::-;22041:2;22036:3;22032:12;22025:19;;21684:366;;;:::o;22056:419::-;22222:4;22260:2;22249:9;22245:18;22237:26;;22309:9;22303:4;22299:20;22295:1;22284:9;22280:17;22273:47;22337:131;22463:4;22337:131;:::i;:::-;22329:139;;22056:419;;;:::o;22481:246::-;22621:34;22617:1;22609:6;22605:14;22598:58;22690:29;22685:2;22677:6;22673:15;22666:54;22481:246;:::o;22733:366::-;22875:3;22896:67;22960:2;22955:3;22896:67;:::i;:::-;22889:74;;22972:93;23061:3;22972:93;:::i;:::-;23090:2;23085:3;23081:12;23074:19;;22733:366;;;:::o;23105:419::-;23271:4;23309:2;23298:9;23294:18;23286:26;;23358:9;23352:4;23348:20;23344:1;23333:9;23329:17;23322:47;23386:131;23512:4;23386:131;:::i;:::-;23378:139;;23105:419;;;:::o;23530:170::-;23670:22;23666:1;23658:6;23654:14;23647:46;23530:170;:::o;23706:366::-;23848:3;23869:67;23933:2;23928:3;23869:67;:::i;:::-;23862:74;;23945:93;24034:3;23945:93;:::i;:::-;24063:2;24058:3;24054:12;24047:19;;23706:366;;;:::o;24078:419::-;24244:4;24282:2;24271:9;24267:18;24259:26;;24331:9;24325:4;24321:20;24317:1;24306:9;24302:17;24295:47;24359:131;24485:4;24359:131;:::i;:::-;24351:139;;24078:419;;;:::o;24503:141::-;24552:4;24575:3;24567:11;;24598:3;24595:1;24588:14;24632:4;24629:1;24619:18;24611:26;;24503:141;;;:::o;24650:93::-;24687:6;24734:2;24729;24722:5;24718:14;24714:23;24704:33;;24650:93;;;:::o;24749:107::-;24793:8;24843:5;24837:4;24833:16;24812:37;;24749:107;;;;:::o;24862:393::-;24931:6;24981:1;24969:10;24965:18;25004:97;25034:66;25023:9;25004:97;:::i;:::-;25122:39;25152:8;25141:9;25122:39;:::i;:::-;25110:51;;25194:4;25190:9;25183:5;25179:21;25170:30;;25243:4;25233:8;25229:19;25222:5;25219:30;25209:40;;24938:317;;24862:393;;;;;:::o;25261:60::-;25289:3;25310:5;25303:12;;25261:60;;;:::o;25327:142::-;25377:9;25410:53;25428:34;25437:24;25455:5;25437:24;:::i;:::-;25428:34;:::i;:::-;25410:53;:::i;:::-;25397:66;;25327:142;;;:::o;25475:75::-;25518:3;25539:5;25532:12;;25475:75;;;:::o;25556:269::-;25666:39;25697:7;25666:39;:::i;:::-;25727:91;25776:41;25800:16;25776:41;:::i;:::-;25768:6;25761:4;25755:11;25727:91;:::i;:::-;25721:4;25714:105;25632:193;25556:269;;;:::o;25831:73::-;25876:3;25831:73;:::o;25910:189::-;25987:32;;:::i;:::-;26028:65;26086:6;26078;26072:4;26028:65;:::i;:::-;25963:136;25910:189;;:::o;26105:186::-;26165:120;26182:3;26175:5;26172:14;26165:120;;;26236:39;26273:1;26266:5;26236:39;:::i;:::-;26209:1;26202:5;26198:13;26189:22;;26165:120;;;26105:186;;:::o;26297:543::-;26398:2;26393:3;26390:11;26387:446;;;26432:38;26464:5;26432:38;:::i;:::-;26516:29;26534:10;26516:29;:::i;:::-;26506:8;26502:44;26699:2;26687:10;26684:18;26681:49;;;26720:8;26705:23;;26681:49;26743:80;26799:22;26817:3;26799:22;:::i;:::-;26789:8;26785:37;26772:11;26743:80;:::i;:::-;26402:431;;26387:446;26297:543;;;:::o;26846:117::-;26900:8;26950:5;26944:4;26940:16;26919:37;;26846:117;;;;:::o;26969:169::-;27013:6;27046:51;27094:1;27090:6;27082:5;27079:1;27075:13;27046:51;:::i;:::-;27042:56;27127:4;27121;27117:15;27107:25;;27020:118;26969:169;;;;:::o;27143:295::-;27219:4;27365:29;27390:3;27384:4;27365:29;:::i;:::-;27357:37;;27427:3;27424:1;27420:11;27414:4;27411:21;27403:29;;27143:295;;;;:::o;27443:1395::-;27560:37;27593:3;27560:37;:::i;:::-;27662:18;27654:6;27651:30;27648:56;;;27684:18;;:::i;:::-;27648:56;27728:38;27760:4;27754:11;27728:38;:::i;:::-;27813:67;27873:6;27865;27859:4;27813:67;:::i;:::-;27907:1;27931:4;27918:17;;27963:2;27955:6;27952:14;27980:1;27975:618;;;;28637:1;28654:6;28651:77;;;28703:9;28698:3;28694:19;28688:26;28679:35;;28651:77;28754:67;28814:6;28807:5;28754:67;:::i;:::-;28748:4;28741:81;28610:222;27945:887;;27975:618;28027:4;28023:9;28015:6;28011:22;28061:37;28093:4;28061:37;:::i;:::-;28120:1;28134:208;28148:7;28145:1;28142:14;28134:208;;;28227:9;28222:3;28218:19;28212:26;28204:6;28197:42;28278:1;28270:6;28266:14;28256:24;;28325:2;28314:9;28310:18;28297:31;;28171:4;28168:1;28164:12;28159:17;;28134:208;;;28370:6;28361:7;28358:19;28355:179;;;28428:9;28423:3;28419:19;28413:26;28471:48;28513:4;28505:6;28501:17;28490:9;28471:48;:::i;:::-;28463:6;28456:64;28378:156;28355:179;28580:1;28576;28568:6;28564:14;28560:22;28554:4;28547:36;27982:611;;;27945:887;;27535:1303;;;27443:1395;;:::o;28844:174::-;28984:26;28980:1;28972:6;28968:14;28961:50;28844:174;:::o;29024:366::-;29166:3;29187:67;29251:2;29246:3;29187:67;:::i;:::-;29180:74;;29263:93;29352:3;29263:93;:::i;:::-;29381:2;29376:3;29372:12;29365:19;;29024:366;;;:::o;29396:419::-;29562:4;29600:2;29589:9;29585:18;29577:26;;29649:9;29643:4;29639:20;29635:1;29624:9;29620:17;29613:47;29677:131;29803:4;29677:131;:::i;:::-;29669:139;;29396:419;;;:::o;29821:148::-;29923:11;29960:3;29945:18;;29821:148;;;;:::o;29999:874::-;30102:3;30139:5;30133:12;30168:36;30194:9;30168:36;:::i;:::-;30220:89;30302:6;30297:3;30220:89;:::i;:::-;30213:96;;30340:1;30329:9;30325:17;30356:1;30351:166;;;;30531:1;30526:341;;;;30318:549;;30351:166;30435:4;30431:9;30420;30416:25;30411:3;30404:38;30497:6;30490:14;30483:22;30475:6;30471:35;30466:3;30462:45;30455:52;;30351:166;;30526:341;30593:38;30625:5;30593:38;:::i;:::-;30653:1;30667:154;30681:6;30678:1;30675:13;30667:154;;;30755:7;30749:14;30745:1;30740:3;30736:11;30729:35;30805:1;30796:7;30792:15;30781:26;;30703:4;30700:1;30696:12;30691:17;;30667:154;;;30850:6;30845:3;30841:16;30834:23;;30533:334;;30318:549;;30106:767;;29999:874;;;;:::o;30879:390::-;30985:3;31013:39;31046:5;31013:39;:::i;:::-;31068:89;31150:6;31145:3;31068:89;:::i;:::-;31061:96;;31166:65;31224:6;31219:3;31212:4;31205:5;31201:16;31166:65;:::i;:::-;31256:6;31251:3;31247:16;31240:23;;30989:280;30879:390;;;;:::o;31275:429::-;31452:3;31474:92;31562:3;31553:6;31474:92;:::i;:::-;31467:99;;31583:95;31674:3;31665:6;31583:95;:::i;:::-;31576:102;;31695:3;31688:10;;31275:429;;;;;:::o;31710:225::-;31850:34;31846:1;31838:6;31834:14;31827:58;31919:8;31914:2;31906:6;31902:15;31895:33;31710:225;:::o;31941:366::-;32083:3;32104:67;32168:2;32163:3;32104:67;:::i;:::-;32097:74;;32180:93;32269:3;32180:93;:::i;:::-;32298:2;32293:3;32289:12;32282:19;;31941:366;;;:::o;32313:419::-;32479:4;32517:2;32506:9;32502:18;32494:26;;32566:9;32560:4;32556:20;32552:1;32541:9;32537:17;32530:47;32594:131;32720:4;32594:131;:::i;:::-;32586:139;;32313:419;;;:::o;32738:182::-;32878:34;32874:1;32866:6;32862:14;32855:58;32738:182;:::o;32926:366::-;33068:3;33089:67;33153:2;33148:3;33089:67;:::i;:::-;33082:74;;33165:93;33254:3;33165:93;:::i;:::-;33283:2;33278:3;33274:12;33267:19;;32926:366;;;:::o;33298:419::-;33464:4;33502:2;33491:9;33487:18;33479:26;;33551:9;33545:4;33541:20;33537:1;33526:9;33522:17;33515:47;33579:131;33705:4;33579:131;:::i;:::-;33571:139;;33298:419;;;:::o;33723:233::-;33762:3;33785:24;33803:5;33785:24;:::i;:::-;33776:33;;33831:66;33824:5;33821:77;33818:103;;33901:18;;:::i;:::-;33818:103;33948:1;33941:5;33937:13;33930:20;;33723:233;;;:::o;33962:180::-;34010:77;34007:1;34000:88;34107:4;34104:1;34097:15;34131:4;34128:1;34121:15;34148:185;34188:1;34205:20;34223:1;34205:20;:::i;:::-;34200:25;;34239:20;34257:1;34239:20;:::i;:::-;34234:25;;34278:1;34268:35;;34283:18;;:::i;:::-;34268:35;34325:1;34322;34318:9;34313:14;;34148:185;;;;:::o;34339:176::-;34371:1;34388:20;34406:1;34388:20;:::i;:::-;34383:25;;34422:20;34440:1;34422:20;:::i;:::-;34417:25;;34461:1;34451:35;;34466:18;;:::i;:::-;34451:35;34507:1;34504;34500:9;34495:14;;34339:176;;;;:::o;34521:180::-;34569:77;34566:1;34559:88;34666:4;34663:1;34656:15;34690:4;34687:1;34680:15;34707:98;34758:6;34792:5;34786:12;34776:22;;34707:98;;;:::o;34811:168::-;34894:11;34928:6;34923:3;34916:19;34968:4;34963:3;34959:14;34944:29;;34811:168;;;;:::o;34985:373::-;35071:3;35099:38;35131:5;35099:38;:::i;:::-;35153:70;35216:6;35211:3;35153:70;:::i;:::-;35146:77;;35232:65;35290:6;35285:3;35278:4;35271:5;35267:16;35232:65;:::i;:::-;35322:29;35344:6;35322:29;:::i;:::-;35317:3;35313:39;35306:46;;35075:283;34985:373;;;;:::o;35364:640::-;35559:4;35597:3;35586:9;35582:19;35574:27;;35611:71;35679:1;35668:9;35664:17;35655:6;35611:71;:::i;:::-;35692:72;35760:2;35749:9;35745:18;35736:6;35692:72;:::i;:::-;35774;35842:2;35831:9;35827:18;35818:6;35774:72;:::i;:::-;35893:9;35887:4;35883:20;35878:2;35867:9;35863:18;35856:48;35921:76;35992:4;35983:6;35921:76;:::i;:::-;35913:84;;35364:640;;;;;;;:::o;36010:141::-;36066:5;36097:6;36091:13;36082:22;;36113:32;36139:5;36113:32;:::i;:::-;36010:141;;;;:::o;36157:349::-;36226:6;36275:2;36263:9;36254:7;36250:23;36246:32;36243:119;;;36281:79;;:::i;:::-;36243:119;36401:1;36426:63;36481:7;36472:6;36461:9;36457:22;36426:63;:::i;:::-;36416:73;;36372:127;36157:349;;;;:::o
Swarm Source
ipfs://c634b2ee01836840bcca7031fda1e0916cae7eebaad7fbdfbcfd02509714426a
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.