Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
NFT
Overview
Max Total Supply
10,000 PSYOP
Holders
1,770
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
8 PSYOPLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Psyop
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-06-07 */ // SPDX-License-Identifier: MIT // FREE of charge and as a sign of respect for all $PSYOP holders 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() { require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); _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; } set._values.pop(); 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 Psyop 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 = 10000; uint public MINT_PRICE = 0.003 ether; uint public MAX_BATCH_SIZE = 25; uint public SUPPLY_PER_WALLET = 57; uint public FREE_SUPPLY_PER_WALLET = 2; constructor() ERC721A("PSYOP GANG", "PSYOP") {} function TeamMint(uint256 quantity, address receiver) public onlyOwner { require( totalSupply() + quantity <= COLLECTION_SIZE, "No more PSYOP 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 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, "Mint not ready yet!"); require(totalSupply() + quantity <= COLLECTION_SIZE, "No more left!"); require(balanceOf(msg.sender) + quantity <= SUPPLY_PER_WALLET, "Tried to mint over over limit"); require(quantity <= MAX_BATCH_SIZE, "Tried to mint over limit, retry with reduced quantity"); require(msg.value >= price, "Must send more money!"); _safeMint(msg.sender, quantity); if (msg.value > price) { payable(msg.sender).transfer(msg.value - price); } } function setPublicMintEnabled() public onlyOwner { isPublicMintEnabled = !isPublicMintEnabled; } function withdrawFunds() external onlyOwner nonReentrant { (bool success, ) = msg.sender.call{value: address(this).balance}(""); require(success, "Transfer failed."); } function CollectionUrI(bool _revealed, string memory _baseURI) public onlyOwner { BASE_URI = _baseURI; REVEALED = _revealed; } function contractURI() public view returns (string memory) { return CONTRACT_URI; } function setContract(string memory _contractURI) public onlyOwner { CONTRACT_URI = _contractURI; } function ChangeCollectionSupply(uint256 _new) external onlyOwner { COLLECTION_SIZE = _new; } function ChangePrice(uint256 _newPrice) external onlyOwner { MINT_PRICE = _newPrice; } function ChangeFreePerWallet(uint256 _new) external onlyOwner { FREE_SUPPLY_PER_WALLET = _new; } function ChangeSupplyPerWallet(uint256 _new) external onlyOwner { SUPPLY_PER_WALLET = _new; } function SetMaxBatchSize(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":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"ChangeCollectionSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"ChangeFreePerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"ChangePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"ChangeSupplyPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_revealed","type":"bool"},{"internalType":"string","name":"_baseURI","type":"string"}],"name":"CollectionUrI","outputs":[],"stateMutability":"nonpayable","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":[],"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":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"SetMaxBatchSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"TeamMint","outputs":[],"stateMutability":"nonpayable","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":"string","name":"_contractURI","type":"string"}],"name":"setContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPublicMintEnabled","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
608060405260405180602001604052806000815250600a9081620000249190620006df565b5060405180602001604052806000815250600d9081620000459190620006df565b5060405180602001604052806000815250600e9081620000669190620006df565b506000600f60006101000a81548160ff021916908315150217905550612710601055660aa87bee538000601155601960125560396013556002601455348015620000af57600080fd5b50733cc6cdda760b79bafa08df41ecfa224f810dceb660016040518060400160405280600a81526020017f5053594f502047414e47000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f5053594f5000000000000000000000000000000000000000000000000000000081525062000153620001476200039460201b60201c565b6200039c60201b60201c565b8160039081620001649190620006df565b508060049081620001769190620006df565b50620001876200046060201b60201c565b6001819055505050600160098190555060006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b11156200038c57801562000252576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16637d3e3dbe30846040518363ffffffff1660e01b8152600401620002189291906200080b565b600060405180830381600087803b1580156200023357600080fd5b505af115801562000248573d6000803e3d6000fd5b505050506200038b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146200030c576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663a0af290330846040518363ffffffff1660e01b8152600401620002d29291906200080b565b600060405180830381600087803b158015620002ed57600080fd5b505af115801562000302573d6000803e3d6000fd5b505050506200038a565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16634420e486306040518263ffffffff1660e01b815260040162000355919062000838565b600060405180830381600087803b1580156200037057600080fd5b505af115801562000385573d6000803e3d6000fd5b505050505b5b5b505062000855565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620004e757607f821691505b602082108103620004fd57620004fc6200049f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620005677fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000528565b62000573868362000528565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620005c0620005ba620005b4846200058b565b62000595565b6200058b565b9050919050565b6000819050919050565b620005dc836200059f565b620005f4620005eb82620005c7565b84845462000535565b825550505050565b600090565b6200060b620005fc565b62000618818484620005d1565b505050565b5b8181101562000640576200063460008262000601565b6001810190506200061e565b5050565b601f8211156200068f57620006598162000503565b620006648462000518565b8101602085101562000674578190505b6200068c620006838562000518565b8301826200061d565b50505b505050565b600082821c905092915050565b6000620006b46000198460080262000694565b1980831691505092915050565b6000620006cf8383620006a1565b9150826002028217905092915050565b620006ea8262000465565b67ffffffffffffffff81111562000706576200070562000470565b5b620007128254620004ce565b6200071f82828562000644565b600060209050601f83116001811462000757576000841562000742578287015190505b6200074e8582620006c1565b865550620007be565b601f198416620007678662000503565b60005b8281101562000791578489015182556001820191506020850194506020810190506200076a565b86831015620007b15784890151620007ad601f891682620006a1565b8355505b6001600288020188555050505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620007f382620007c6565b9050919050565b6200080581620007e6565b82525050565b6000604082019050620008226000830185620007fa565b620008316020830184620007fa565b9392505050565b60006020820190506200084f6000830184620007fa565b92915050565b61401780620008656000396000f3fe6080604052600436106102515760003560e01c80638da5cb5b11610139578063c87b56dd116100b6578063e8a3d4851161007a578063e8a3d4851461084b578063e985e9c514610876578063f2fde38b146108b3578063f7777747146108dc578063f814943d14610905578063fb92488b1461092e57610251565b8063c87b56dd14610750578063cfdbf2541461078d578063d8258d95146107b8578063dbddb26a146107e3578063e75722301461080e57610251565b8063a4cdd719116100fd578063a4cdd7191461069e578063a76a9587146106b5578063b88d4fde146106e0578063c002d23d146106fc578063c144a4ba1461072757610251565b80638da5cb5b146105da57806395d89b4114610605578063a0712d6814610630578063a1db246e1461064c578063a22cb4651461067557610251565b806342842e0e116101d25780635fe75587116101965780635fe75587146104cc5780636352211e146104f757806370a0823114610534578063715018a6146105715780637304ff6c1461058857806375b64471146105b157610251565b806342842e0e1461040857806342966c6814610424578063507862d11461044d57806356b48d631461047857806356b4f673146104a157610251565b80631422374f116102195780631422374f1461034257806318160ddd1461036d5780631d9857781461039857806323b872dd146103d557806324600fc3146103f157610251565b80630116bc2d1461025657806301ffc9a71461028157806306fdde03146102be578063081812fc146102e9578063095ea7b314610326575b600080fd5b34801561026257600080fd5b5061026b610957565b6040516102789190612c96565b60405180910390f35b34801561028d57600080fd5b506102a860048036038101906102a39190612d1d565b61096a565b6040516102b59190612c96565b60405180910390f35b3480156102ca57600080fd5b506102d36109fc565b6040516102e09190612dda565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b9190612e32565b610a8e565b60405161031d9190612ea0565b60405180910390f35b610340600480360381019061033b9190612ee7565b610b0d565b005b34801561034e57600080fd5b50610357610c51565b6040516103649190612f36565b60405180910390f35b34801561037957600080fd5b50610382610c57565b60405161038f9190612f36565b60405180910390f35b3480156103a457600080fd5b506103bf60048036038101906103ba9190612f51565b610c6e565b6040516103cc9190612f36565b60405180910390f35b6103ef60048036038101906103ea9190612f7e565b610c86565b005b3480156103fd57600080fd5b50610406610d92565b005b610422600480360381019061041d9190612f7e565b610e9e565b005b34801561043057600080fd5b5061044b60048036038101906104469190612e32565b610faa565b005b34801561045957600080fd5b50610462610fb8565b60405161046f9190612dda565b60405180910390f35b34801561048457600080fd5b5061049f600480360381019061049a9190613106565b611046565b005b3480156104ad57600080fd5b506104b6611061565b6040516104c39190612dda565b60405180910390f35b3480156104d857600080fd5b506104e16110ef565b6040516104ee9190612f36565b60405180910390f35b34801561050357600080fd5b5061051e60048036038101906105199190612e32565b6110f5565b60405161052b9190612ea0565b60405180910390f35b34801561054057600080fd5b5061055b60048036038101906105569190612f51565b611107565b6040516105689190612f36565b60405180910390f35b34801561057d57600080fd5b506105866111bf565b005b34801561059457600080fd5b506105af60048036038101906105aa919061317b565b6111d3565b005b3480156105bd57600080fd5b506105d860048036038101906105d39190612e32565b611209565b005b3480156105e657600080fd5b506105ef61121b565b6040516105fc9190612ea0565b60405180910390f35b34801561061157600080fd5b5061061a611244565b6040516106279190612dda565b60405180910390f35b61064a60048036038101906106459190612e32565b6112d6565b005b34801561065857600080fd5b50610673600480360381019061066e9190612e32565b611723565b005b34801561068157600080fd5b5061069c600480360381019061069791906131d7565b611735565b005b3480156106aa57600080fd5b506106b3611840565b005b3480156106c157600080fd5b506106ca611874565b6040516106d79190612c96565b60405180910390f35b6106fa60048036038101906106f591906132b8565b611887565b005b34801561070857600080fd5b50610711611995565b60405161071e9190612f36565b60405180910390f35b34801561073357600080fd5b5061074e60048036038101906107499190612e32565b61199b565b005b34801561075c57600080fd5b5061077760048036038101906107729190612e32565b6119ad565b6040516107849190612dda565b60405180910390f35b34801561079957600080fd5b506107a2611a89565b6040516107af9190612f36565b60405180910390f35b3480156107c457600080fd5b506107cd611a8f565b6040516107da9190612f36565b60405180910390f35b3480156107ef57600080fd5b506107f8611a95565b6040516108059190612dda565b60405180910390f35b34801561081a57600080fd5b5061083560048036038101906108309190612e32565b611b23565b6040516108429190612f36565b60405180910390f35b34801561085757600080fd5b50610860611bad565b60405161086d9190612dda565b60405180910390f35b34801561088257600080fd5b5061089d6004803603810190610898919061333b565b611c3f565b6040516108aa9190612c96565b60405180910390f35b3480156108bf57600080fd5b506108da60048036038101906108d59190612f51565b611cd3565b005b3480156108e857600080fd5b5061090360048036038101906108fe919061337b565b611d56565b005b34801561091157600080fd5b5061092c60048036038101906109279190612e32565b611dc3565b005b34801561093a57600080fd5b5061095560048036038101906109509190612e32565b611dd5565b005b600f60009054906101000a900460ff1681565b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109c557506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109f55750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060038054610a0b906133ea565b80601f0160208091040260200160405190810160405280929190818152602001828054610a37906133ea565b8015610a845780601f10610a5957610100808354040283529160200191610a84565b820191906000526020600020905b815481529060010190602001808311610a6757829003601f168201915b5050505050905090565b6000610a9982611de7565b610acf576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b18826110f5565b90508073ffffffffffffffffffffffffffffffffffffffff16610b39611e46565b73ffffffffffffffffffffffffffffffffffffffff1614610b9c57610b6581610b60611e46565b611c3f565b610b9b576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826007600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60145481565b6000610c61611e4e565b6002546001540303905090565b600b6020528060005260406000206000915090505481565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610d82576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610cfd92919061341b565b6020604051808303816000875af1158015610d1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d409190613459565b610d8157336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610d789190612ea0565b60405180910390fd5b5b610d8d838383611e53565b505050565b610d9a612175565b600260095403610ddf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd6906134d2565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051610e0d90613523565b60006040518083038185875af1925050503d8060008114610e4a576040519150601f19603f3d011682016040523d82523d6000602084013e610e4f565b606091505b5050905080610e93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8a90613584565b60405180910390fd5b506001600981905550565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610f9a576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610f1592919061341b565b6020604051808303816000875af1158015610f34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f589190613459565b610f9957336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610f909190612ea0565b60405180910390fd5b5b610fa58383836121f3565b505050565b610fb5816001612213565b50565b600d8054610fc5906133ea565b80601f0160208091040260200160405190810160405280929190818152602001828054610ff1906133ea565b801561103e5780601f106110135761010080835404028352916020019161103e565b820191906000526020600020905b81548152906001019060200180831161102157829003601f168201915b505050505081565b61104e612175565b80600a908161105d9190613750565b5050565b600a805461106e906133ea565b80601f016020809104026020016040519081016040528092919081815260200182805461109a906133ea565b80156110e75780601f106110bc576101008083540402835291602001916110e7565b820191906000526020600020905b8154815290600101906020018083116110ca57829003601f168201915b505050505081565b60135481565b600061110082612465565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361116e576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6111c7612175565b6111d16000612531565b565b6111db612175565b80600e90816111ea9190613750565b5081600c60006101000a81548160ff0219169083151502179055505050565b611211612175565b8060108190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611253906133ea565b80601f016020809104026020016040519081016040528092919081815260200182805461127f906133ea565b80156112cc5780601f106112a1576101008083540402835291602001916112cc565b820191906000526020600020905b8154815290600101906020018083116112af57829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611344576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133b9061386e565b60405180910390fd5b600260095403611389576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611380906134d2565b60405180910390fd5b6002600981905550600080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546014546113e191906138bd565b90508083106114985780836113f691906138bd565b60115461140391906138f1565b915080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114509190613933565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061152b565b6000915082600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114e79190613933565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600f60009054906101000a900460ff1661157a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611571906139b3565b60405180910390fd5b60105483611586610c57565b6115909190613933565b11156115d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c890613a1f565b60405180910390fd5b601354836115de33611107565b6115e89190613933565b1115611629576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162090613a8b565b60405180910390fd5b60125483111561166e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166590613b1d565b60405180910390fd5b813410156116b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a890613b89565b60405180910390fd5b6116bb33846125f5565b81341115611716573373ffffffffffffffffffffffffffffffffffffffff166108fc83346116e991906138bd565b9081150290604051600060405180830381858888f19350505050158015611714573d6000803e3d6000fd5b505b5050600160098190555050565b61172b612175565b8060148190555050565b8060086000611742611e46565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166117ef611e46565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118349190612c96565b60405180910390a35050565b611848612175565b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b600c60009054906101000a900460ff1681565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115611983576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b81526004016118fe92919061341b565b6020604051808303816000875af115801561191d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119419190613459565b61198257336040517fede71dcc0000000000000000000000000000000000000000000000000000000081526004016119799190612ea0565b60405180910390fd5b5b61198f84848484612613565b50505050565b60115481565b6119a3612175565b8060128190555050565b6060600c60009054906101000a900460ff16156119f657600e6119cf83612686565b6040516020016119e0929190613c68565b6040516020818303038152906040529050611a84565b600d8054611a03906133ea565b80601f0160208091040260200160405190810160405280929190818152602001828054611a2f906133ea565b8015611a7c5780601f10611a5157610100808354040283529160200191611a7c565b820191906000526020600020905b815481529060010190602001808311611a5f57829003601f168201915b505050505090505b919050565b60125481565b60105481565b600e8054611aa2906133ea565b80601f0160208091040260200160405190810160405280929190818152602001828054611ace906133ea565b8015611b1b5780601f10611af057610100808354040283529160200191611b1b565b820191906000526020600020905b815481529060010190602001808311611afe57829003601f168201915b505050505081565b6000806000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601454611b7591906138bd565b9050808410611b9e578084611b8a91906138bd565b601154611b9791906138f1565b9150611ba3565b600091505b8192505050919050565b6060600a8054611bbc906133ea565b80601f0160208091040260200160405190810160405280929190818152602001828054611be8906133ea565b8015611c355780601f10611c0a57610100808354040283529160200191611c35565b820191906000526020600020905b815481529060010190602001808311611c1857829003601f168201915b5050505050905090565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611cdb612175565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4190613cfe565b60405180910390fd5b611d5381612531565b50565b611d5e612175565b60105482611d6a610c57565b611d749190613933565b1115611db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dac90613d6a565b60405180910390fd5b611dbf81836125f5565b5050565b611dcb612175565b8060138190555050565b611ddd612175565b8060118190555050565b600081611df2611e4e565b11158015611e01575060015482105b8015611e3f575060007c0100000000000000000000000000000000000000000000000000000000600560008581526020019081526020016000205416145b9050919050565b600033905090565b600090565b6000611e5e82612465565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611ec5576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080611ed1846127e6565b91509150611ee78187611ee2611e46565b61280d565b611f3357611efc86611ef7611e46565b611c3f565b611f32576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603611f99576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611fa68686866001612851565b8015611fb157600082555b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001019190508190555061207f8561205b888887612857565b7c02000000000000000000000000000000000000000000000000000000001761287f565b600560008681526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008416036121055760006001850190506000600560008381526020019081526020016000205403612103576001548114612102578360056000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461216d86868660016128aa565b505050505050565b61217d6128b0565b73ffffffffffffffffffffffffffffffffffffffff1661219b61121b565b73ffffffffffffffffffffffffffffffffffffffff16146121f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e890613dd6565b60405180910390fd5b565b61220e83838360405180602001604052806000815250611887565b505050565b600061221e83612465565b90506000819050600080612231866127e6565b91509150841561229a5761224d8184612248611e46565b61280d565b612299576122628361225d611e46565b611c3f565b612298576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5b6122a8836000886001612851565b80156122b357600082555b600160806001901b03600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555061235b8361231885600088612857565b7c02000000000000000000000000000000000000000000000000000000007c0100000000000000000000000000000000000000000000000000000000171761287f565b600560008881526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008516036123e157600060018701905060006005600083815260200190815260200160002054036123df5760015481146123de578460056000838152602001908152602001600020819055505b5b505b85600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461244b8360008860016128aa565b600260008154809291906001019190505550505050505050565b60008082905080612474611e4e565b116124fa576001548110156124f95760006005600083815260200190815260200160002054905060007c01000000000000000000000000000000000000000000000000000000008216036124f7575b600081036124ed5760056000836001900393508381526020019081526020016000205490506124c3565b809250505061252c565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61260f8282604051806020016040528060008152506128b8565b5050565b61261e848484610c86565b60008373ffffffffffffffffffffffffffffffffffffffff163b146126805761264984848484612956565b61267f576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b6060600082036126cd576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506127e1565b600082905060005b600082146126ff5780806126e890613df6565b915050600a826126f89190613e6d565b91506126d5565b60008167ffffffffffffffff81111561271b5761271a612fdb565b5b6040519080825280601f01601f19166020018201604052801561274d5781602001600182028036833780820191505090505b5090505b600085146127da5760018261276691906138bd565b9150600a856127759190613e9e565b60306127819190613933565b60f81b81838151811061279757612796613ecf565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127d39190613e6d565b9450612751565b8093505050505b919050565b60008060006007600085815260200190815260200160002090508092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e861286e868684612aa6565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b600033905090565b6128c28383612aaf565b60008373ffffffffffffffffffffffffffffffffffffffff163b146129515760006001549050600083820390505b6129036000868380600101945086612956565b612939576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181106128f057816001541461294e57600080fd5b50505b505050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261297c611e46565b8786866040518563ffffffff1660e01b815260040161299e9493929190613f53565b6020604051808303816000875af19250505080156129da57506040513d601f19601f820116820180604052508101906129d79190613fb4565b60015b612a53573d8060008114612a0a576040519150601f19603f3d011682016040523d82523d6000602084013e612a0f565b606091505b506000815103612a4b576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60009392505050565b6000600154905060008203612af0576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612afd6000848385612851565b600160406001901b178202600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550612b7483612b656000866000612857565b612b6e85612c6b565b1761287f565b6005600083815260200190815260200160002081905550600080838301905073ffffffffffffffffffffffffffffffffffffffff85169150828260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600183015b818114612c1557808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600181019050612bda565b5060008203612c50576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001819055505050612c6660008483856128aa565b505050565b60006001821460e11b9050919050565b60008115159050919050565b612c9081612c7b565b82525050565b6000602082019050612cab6000830184612c87565b92915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612cfa81612cc5565b8114612d0557600080fd5b50565b600081359050612d1781612cf1565b92915050565b600060208284031215612d3357612d32612cbb565b5b6000612d4184828501612d08565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612d84578082015181840152602081019050612d69565b60008484015250505050565b6000601f19601f8301169050919050565b6000612dac82612d4a565b612db68185612d55565b9350612dc6818560208601612d66565b612dcf81612d90565b840191505092915050565b60006020820190508181036000830152612df48184612da1565b905092915050565b6000819050919050565b612e0f81612dfc565b8114612e1a57600080fd5b50565b600081359050612e2c81612e06565b92915050565b600060208284031215612e4857612e47612cbb565b5b6000612e5684828501612e1d565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612e8a82612e5f565b9050919050565b612e9a81612e7f565b82525050565b6000602082019050612eb56000830184612e91565b92915050565b612ec481612e7f565b8114612ecf57600080fd5b50565b600081359050612ee181612ebb565b92915050565b60008060408385031215612efe57612efd612cbb565b5b6000612f0c85828601612ed2565b9250506020612f1d85828601612e1d565b9150509250929050565b612f3081612dfc565b82525050565b6000602082019050612f4b6000830184612f27565b92915050565b600060208284031215612f6757612f66612cbb565b5b6000612f7584828501612ed2565b91505092915050565b600080600060608486031215612f9757612f96612cbb565b5b6000612fa586828701612ed2565b9350506020612fb686828701612ed2565b9250506040612fc786828701612e1d565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61301382612d90565b810181811067ffffffffffffffff8211171561303257613031612fdb565b5b80604052505050565b6000613045612cb1565b9050613051828261300a565b919050565b600067ffffffffffffffff82111561307157613070612fdb565b5b61307a82612d90565b9050602081019050919050565b82818337600083830152505050565b60006130a96130a484613056565b61303b565b9050828152602081018484840111156130c5576130c4612fd6565b5b6130d0848285613087565b509392505050565b600082601f8301126130ed576130ec612fd1565b5b81356130fd848260208601613096565b91505092915050565b60006020828403121561311c5761311b612cbb565b5b600082013567ffffffffffffffff81111561313a57613139612cc0565b5b613146848285016130d8565b91505092915050565b61315881612c7b565b811461316357600080fd5b50565b6000813590506131758161314f565b92915050565b6000806040838503121561319257613191612cbb565b5b60006131a085828601613166565b925050602083013567ffffffffffffffff8111156131c1576131c0612cc0565b5b6131cd858286016130d8565b9150509250929050565b600080604083850312156131ee576131ed612cbb565b5b60006131fc85828601612ed2565b925050602061320d85828601613166565b9150509250929050565b600067ffffffffffffffff82111561323257613231612fdb565b5b61323b82612d90565b9050602081019050919050565b600061325b61325684613217565b61303b565b90508281526020810184848401111561327757613276612fd6565b5b613282848285613087565b509392505050565b600082601f83011261329f5761329e612fd1565b5b81356132af848260208601613248565b91505092915050565b600080600080608085870312156132d2576132d1612cbb565b5b60006132e087828801612ed2565b94505060206132f187828801612ed2565b935050604061330287828801612e1d565b925050606085013567ffffffffffffffff81111561332357613322612cc0565b5b61332f8782880161328a565b91505092959194509250565b6000806040838503121561335257613351612cbb565b5b600061336085828601612ed2565b925050602061337185828601612ed2565b9150509250929050565b6000806040838503121561339257613391612cbb565b5b60006133a085828601612e1d565b92505060206133b185828601612ed2565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061340257607f821691505b602082108103613415576134146133bb565b5b50919050565b60006040820190506134306000830185612e91565b61343d6020830184612e91565b9392505050565b6000815190506134538161314f565b92915050565b60006020828403121561346f5761346e612cbb565b5b600061347d84828501613444565b91505092915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006134bc601f83612d55565b91506134c782613486565b602082019050919050565b600060208201905081810360008301526134eb816134af565b9050919050565b600081905092915050565b50565b600061350d6000836134f2565b9150613518826134fd565b600082019050919050565b600061352e82613500565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b600061356e601083612d55565b915061357982613538565b602082019050919050565b6000602082019050818103600083015261359d81613561565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026136067fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826135c9565b61361086836135c9565b95508019841693508086168417925050509392505050565b6000819050919050565b600061364d61364861364384612dfc565b613628565b612dfc565b9050919050565b6000819050919050565b61366783613632565b61367b61367382613654565b8484546135d6565b825550505050565b600090565b613690613683565b61369b81848461365e565b505050565b5b818110156136bf576136b4600082613688565b6001810190506136a1565b5050565b601f821115613704576136d5816135a4565b6136de846135b9565b810160208510156136ed578190505b6137016136f9856135b9565b8301826136a0565b50505b505050565b600082821c905092915050565b600061372760001984600802613709565b1980831691505092915050565b60006137408383613716565b9150826002028217905092915050565b61375982612d4a565b67ffffffffffffffff81111561377257613771612fdb565b5b61377c82546133ea565b6137878282856136c3565b600060209050601f8311600181146137ba57600084156137a8578287015190505b6137b28582613734565b86555061381a565b601f1984166137c8866135a4565b60005b828110156137f0578489015182556001820191506020850194506020810190506137cb565b8683101561380d5784890151613809601f891682613716565b8355505b6001600288020188555050505b505050505050565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b6000613858601e83612d55565b915061386382613822565b602082019050919050565b600060208201905081810360008301526138878161384b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006138c882612dfc565b91506138d383612dfc565b92508282039050818111156138eb576138ea61388e565b5b92915050565b60006138fc82612dfc565b915061390783612dfc565b925082820261391581612dfc565b9150828204841483151761392c5761392b61388e565b5b5092915050565b600061393e82612dfc565b915061394983612dfc565b92508282019050808211156139615761396061388e565b5b92915050565b7f4d696e74206e6f74207265616479207965742100000000000000000000000000600082015250565b600061399d601383612d55565b91506139a882613967565b602082019050919050565b600060208201905081810360008301526139cc81613990565b9050919050565b7f4e6f206d6f7265206c6566742100000000000000000000000000000000000000600082015250565b6000613a09600d83612d55565b9150613a14826139d3565b602082019050919050565b60006020820190508181036000830152613a38816139fc565b9050919050565b7f547269656420746f206d696e74206f766572206f766572206c696d6974000000600082015250565b6000613a75601d83612d55565b9150613a8082613a3f565b602082019050919050565b60006020820190508181036000830152613aa481613a68565b9050919050565b7f547269656420746f206d696e74206f766572206c696d69742c2072657472792060008201527f776974682072656475636564207175616e746974790000000000000000000000602082015250565b6000613b07603583612d55565b9150613b1282613aab565b604082019050919050565b60006020820190508181036000830152613b3681613afa565b9050919050565b7f4d7573742073656e64206d6f7265206d6f6e6579210000000000000000000000600082015250565b6000613b73601583612d55565b9150613b7e82613b3d565b602082019050919050565b60006020820190508181036000830152613ba281613b66565b9050919050565b600081905092915050565b60008154613bc1816133ea565b613bcb8186613ba9565b94506001821660008114613be65760018114613bfb57613c2e565b60ff1983168652811515820286019350613c2e565b613c04856135a4565b60005b83811015613c2657815481890152600182019150602081019050613c07565b838801955050505b50505092915050565b6000613c4282612d4a565b613c4c8185613ba9565b9350613c5c818560208601612d66565b80840191505092915050565b6000613c748285613bb4565b9150613c808284613c37565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613ce8602683612d55565b9150613cf382613c8c565b604082019050919050565b60006020820190508181036000830152613d1781613cdb565b9050919050565b7f4e6f206d6f7265205053594f5020696e2073746f636b21000000000000000000600082015250565b6000613d54601783612d55565b9150613d5f82613d1e565b602082019050919050565b60006020820190508181036000830152613d8381613d47565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613dc0602083612d55565b9150613dcb82613d8a565b602082019050919050565b60006020820190508181036000830152613def81613db3565b9050919050565b6000613e0182612dfc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613e3357613e3261388e565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613e7882612dfc565b9150613e8383612dfc565b925082613e9357613e92613e3e565b5b828204905092915050565b6000613ea982612dfc565b9150613eb483612dfc565b925082613ec457613ec3613e3e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000613f2582613efe565b613f2f8185613f09565b9350613f3f818560208601612d66565b613f4881612d90565b840191505092915050565b6000608082019050613f686000830187612e91565b613f756020830186612e91565b613f826040830185612f27565b8181036060830152613f948184613f1a565b905095945050505050565b600081519050613fae81612cf1565b92915050565b600060208284031215613fca57613fc9612cbb565b5b6000613fd884828501613f9f565b9150509291505056fea26469706673582212208327d2f8992d2878dd41edbf3f736ef80c1f1dac4119b618277dba734a9960be64736f6c63430008120033
Deployed Bytecode
0x6080604052600436106102515760003560e01c80638da5cb5b11610139578063c87b56dd116100b6578063e8a3d4851161007a578063e8a3d4851461084b578063e985e9c514610876578063f2fde38b146108b3578063f7777747146108dc578063f814943d14610905578063fb92488b1461092e57610251565b8063c87b56dd14610750578063cfdbf2541461078d578063d8258d95146107b8578063dbddb26a146107e3578063e75722301461080e57610251565b8063a4cdd719116100fd578063a4cdd7191461069e578063a76a9587146106b5578063b88d4fde146106e0578063c002d23d146106fc578063c144a4ba1461072757610251565b80638da5cb5b146105da57806395d89b4114610605578063a0712d6814610630578063a1db246e1461064c578063a22cb4651461067557610251565b806342842e0e116101d25780635fe75587116101965780635fe75587146104cc5780636352211e146104f757806370a0823114610534578063715018a6146105715780637304ff6c1461058857806375b64471146105b157610251565b806342842e0e1461040857806342966c6814610424578063507862d11461044d57806356b48d631461047857806356b4f673146104a157610251565b80631422374f116102195780631422374f1461034257806318160ddd1461036d5780631d9857781461039857806323b872dd146103d557806324600fc3146103f157610251565b80630116bc2d1461025657806301ffc9a71461028157806306fdde03146102be578063081812fc146102e9578063095ea7b314610326575b600080fd5b34801561026257600080fd5b5061026b610957565b6040516102789190612c96565b60405180910390f35b34801561028d57600080fd5b506102a860048036038101906102a39190612d1d565b61096a565b6040516102b59190612c96565b60405180910390f35b3480156102ca57600080fd5b506102d36109fc565b6040516102e09190612dda565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b9190612e32565b610a8e565b60405161031d9190612ea0565b60405180910390f35b610340600480360381019061033b9190612ee7565b610b0d565b005b34801561034e57600080fd5b50610357610c51565b6040516103649190612f36565b60405180910390f35b34801561037957600080fd5b50610382610c57565b60405161038f9190612f36565b60405180910390f35b3480156103a457600080fd5b506103bf60048036038101906103ba9190612f51565b610c6e565b6040516103cc9190612f36565b60405180910390f35b6103ef60048036038101906103ea9190612f7e565b610c86565b005b3480156103fd57600080fd5b50610406610d92565b005b610422600480360381019061041d9190612f7e565b610e9e565b005b34801561043057600080fd5b5061044b60048036038101906104469190612e32565b610faa565b005b34801561045957600080fd5b50610462610fb8565b60405161046f9190612dda565b60405180910390f35b34801561048457600080fd5b5061049f600480360381019061049a9190613106565b611046565b005b3480156104ad57600080fd5b506104b6611061565b6040516104c39190612dda565b60405180910390f35b3480156104d857600080fd5b506104e16110ef565b6040516104ee9190612f36565b60405180910390f35b34801561050357600080fd5b5061051e60048036038101906105199190612e32565b6110f5565b60405161052b9190612ea0565b60405180910390f35b34801561054057600080fd5b5061055b60048036038101906105569190612f51565b611107565b6040516105689190612f36565b60405180910390f35b34801561057d57600080fd5b506105866111bf565b005b34801561059457600080fd5b506105af60048036038101906105aa919061317b565b6111d3565b005b3480156105bd57600080fd5b506105d860048036038101906105d39190612e32565b611209565b005b3480156105e657600080fd5b506105ef61121b565b6040516105fc9190612ea0565b60405180910390f35b34801561061157600080fd5b5061061a611244565b6040516106279190612dda565b60405180910390f35b61064a60048036038101906106459190612e32565b6112d6565b005b34801561065857600080fd5b50610673600480360381019061066e9190612e32565b611723565b005b34801561068157600080fd5b5061069c600480360381019061069791906131d7565b611735565b005b3480156106aa57600080fd5b506106b3611840565b005b3480156106c157600080fd5b506106ca611874565b6040516106d79190612c96565b60405180910390f35b6106fa60048036038101906106f591906132b8565b611887565b005b34801561070857600080fd5b50610711611995565b60405161071e9190612f36565b60405180910390f35b34801561073357600080fd5b5061074e60048036038101906107499190612e32565b61199b565b005b34801561075c57600080fd5b5061077760048036038101906107729190612e32565b6119ad565b6040516107849190612dda565b60405180910390f35b34801561079957600080fd5b506107a2611a89565b6040516107af9190612f36565b60405180910390f35b3480156107c457600080fd5b506107cd611a8f565b6040516107da9190612f36565b60405180910390f35b3480156107ef57600080fd5b506107f8611a95565b6040516108059190612dda565b60405180910390f35b34801561081a57600080fd5b5061083560048036038101906108309190612e32565b611b23565b6040516108429190612f36565b60405180910390f35b34801561085757600080fd5b50610860611bad565b60405161086d9190612dda565b60405180910390f35b34801561088257600080fd5b5061089d6004803603810190610898919061333b565b611c3f565b6040516108aa9190612c96565b60405180910390f35b3480156108bf57600080fd5b506108da60048036038101906108d59190612f51565b611cd3565b005b3480156108e857600080fd5b5061090360048036038101906108fe919061337b565b611d56565b005b34801561091157600080fd5b5061092c60048036038101906109279190612e32565b611dc3565b005b34801561093a57600080fd5b5061095560048036038101906109509190612e32565b611dd5565b005b600f60009054906101000a900460ff1681565b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109c557506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109f55750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060038054610a0b906133ea565b80601f0160208091040260200160405190810160405280929190818152602001828054610a37906133ea565b8015610a845780601f10610a5957610100808354040283529160200191610a84565b820191906000526020600020905b815481529060010190602001808311610a6757829003601f168201915b5050505050905090565b6000610a9982611de7565b610acf576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b18826110f5565b90508073ffffffffffffffffffffffffffffffffffffffff16610b39611e46565b73ffffffffffffffffffffffffffffffffffffffff1614610b9c57610b6581610b60611e46565b611c3f565b610b9b576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826007600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60145481565b6000610c61611e4e565b6002546001540303905090565b600b6020528060005260406000206000915090505481565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610d82576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610cfd92919061341b565b6020604051808303816000875af1158015610d1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d409190613459565b610d8157336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610d789190612ea0565b60405180910390fd5b5b610d8d838383611e53565b505050565b610d9a612175565b600260095403610ddf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd6906134d2565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051610e0d90613523565b60006040518083038185875af1925050503d8060008114610e4a576040519150601f19603f3d011682016040523d82523d6000602084013e610e4f565b606091505b5050905080610e93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8a90613584565b60405180910390fd5b506001600981905550565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610f9a576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610f1592919061341b565b6020604051808303816000875af1158015610f34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f589190613459565b610f9957336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610f909190612ea0565b60405180910390fd5b5b610fa58383836121f3565b505050565b610fb5816001612213565b50565b600d8054610fc5906133ea565b80601f0160208091040260200160405190810160405280929190818152602001828054610ff1906133ea565b801561103e5780601f106110135761010080835404028352916020019161103e565b820191906000526020600020905b81548152906001019060200180831161102157829003601f168201915b505050505081565b61104e612175565b80600a908161105d9190613750565b5050565b600a805461106e906133ea565b80601f016020809104026020016040519081016040528092919081815260200182805461109a906133ea565b80156110e75780601f106110bc576101008083540402835291602001916110e7565b820191906000526020600020905b8154815290600101906020018083116110ca57829003601f168201915b505050505081565b60135481565b600061110082612465565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361116e576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6111c7612175565b6111d16000612531565b565b6111db612175565b80600e90816111ea9190613750565b5081600c60006101000a81548160ff0219169083151502179055505050565b611211612175565b8060108190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611253906133ea565b80601f016020809104026020016040519081016040528092919081815260200182805461127f906133ea565b80156112cc5780601f106112a1576101008083540402835291602001916112cc565b820191906000526020600020905b8154815290600101906020018083116112af57829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611344576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133b9061386e565b60405180910390fd5b600260095403611389576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611380906134d2565b60405180910390fd5b6002600981905550600080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546014546113e191906138bd565b90508083106114985780836113f691906138bd565b60115461140391906138f1565b915080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114509190613933565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061152b565b6000915082600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114e79190613933565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600f60009054906101000a900460ff1661157a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611571906139b3565b60405180910390fd5b60105483611586610c57565b6115909190613933565b11156115d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c890613a1f565b60405180910390fd5b601354836115de33611107565b6115e89190613933565b1115611629576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162090613a8b565b60405180910390fd5b60125483111561166e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166590613b1d565b60405180910390fd5b813410156116b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a890613b89565b60405180910390fd5b6116bb33846125f5565b81341115611716573373ffffffffffffffffffffffffffffffffffffffff166108fc83346116e991906138bd565b9081150290604051600060405180830381858888f19350505050158015611714573d6000803e3d6000fd5b505b5050600160098190555050565b61172b612175565b8060148190555050565b8060086000611742611e46565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166117ef611e46565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118349190612c96565b60405180910390a35050565b611848612175565b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b600c60009054906101000a900460ff1681565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115611983576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b81526004016118fe92919061341b565b6020604051808303816000875af115801561191d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119419190613459565b61198257336040517fede71dcc0000000000000000000000000000000000000000000000000000000081526004016119799190612ea0565b60405180910390fd5b5b61198f84848484612613565b50505050565b60115481565b6119a3612175565b8060128190555050565b6060600c60009054906101000a900460ff16156119f657600e6119cf83612686565b6040516020016119e0929190613c68565b6040516020818303038152906040529050611a84565b600d8054611a03906133ea565b80601f0160208091040260200160405190810160405280929190818152602001828054611a2f906133ea565b8015611a7c5780601f10611a5157610100808354040283529160200191611a7c565b820191906000526020600020905b815481529060010190602001808311611a5f57829003601f168201915b505050505090505b919050565b60125481565b60105481565b600e8054611aa2906133ea565b80601f0160208091040260200160405190810160405280929190818152602001828054611ace906133ea565b8015611b1b5780601f10611af057610100808354040283529160200191611b1b565b820191906000526020600020905b815481529060010190602001808311611afe57829003601f168201915b505050505081565b6000806000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601454611b7591906138bd565b9050808410611b9e578084611b8a91906138bd565b601154611b9791906138f1565b9150611ba3565b600091505b8192505050919050565b6060600a8054611bbc906133ea565b80601f0160208091040260200160405190810160405280929190818152602001828054611be8906133ea565b8015611c355780601f10611c0a57610100808354040283529160200191611c35565b820191906000526020600020905b815481529060010190602001808311611c1857829003601f168201915b5050505050905090565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611cdb612175565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4190613cfe565b60405180910390fd5b611d5381612531565b50565b611d5e612175565b60105482611d6a610c57565b611d749190613933565b1115611db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dac90613d6a565b60405180910390fd5b611dbf81836125f5565b5050565b611dcb612175565b8060138190555050565b611ddd612175565b8060118190555050565b600081611df2611e4e565b11158015611e01575060015482105b8015611e3f575060007c0100000000000000000000000000000000000000000000000000000000600560008581526020019081526020016000205416145b9050919050565b600033905090565b600090565b6000611e5e82612465565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611ec5576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080611ed1846127e6565b91509150611ee78187611ee2611e46565b61280d565b611f3357611efc86611ef7611e46565b611c3f565b611f32576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603611f99576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611fa68686866001612851565b8015611fb157600082555b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001019190508190555061207f8561205b888887612857565b7c02000000000000000000000000000000000000000000000000000000001761287f565b600560008681526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008416036121055760006001850190506000600560008381526020019081526020016000205403612103576001548114612102578360056000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461216d86868660016128aa565b505050505050565b61217d6128b0565b73ffffffffffffffffffffffffffffffffffffffff1661219b61121b565b73ffffffffffffffffffffffffffffffffffffffff16146121f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e890613dd6565b60405180910390fd5b565b61220e83838360405180602001604052806000815250611887565b505050565b600061221e83612465565b90506000819050600080612231866127e6565b91509150841561229a5761224d8184612248611e46565b61280d565b612299576122628361225d611e46565b611c3f565b612298576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5b6122a8836000886001612851565b80156122b357600082555b600160806001901b03600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555061235b8361231885600088612857565b7c02000000000000000000000000000000000000000000000000000000007c0100000000000000000000000000000000000000000000000000000000171761287f565b600560008881526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008516036123e157600060018701905060006005600083815260200190815260200160002054036123df5760015481146123de578460056000838152602001908152602001600020819055505b5b505b85600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461244b8360008860016128aa565b600260008154809291906001019190505550505050505050565b60008082905080612474611e4e565b116124fa576001548110156124f95760006005600083815260200190815260200160002054905060007c01000000000000000000000000000000000000000000000000000000008216036124f7575b600081036124ed5760056000836001900393508381526020019081526020016000205490506124c3565b809250505061252c565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61260f8282604051806020016040528060008152506128b8565b5050565b61261e848484610c86565b60008373ffffffffffffffffffffffffffffffffffffffff163b146126805761264984848484612956565b61267f576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b6060600082036126cd576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506127e1565b600082905060005b600082146126ff5780806126e890613df6565b915050600a826126f89190613e6d565b91506126d5565b60008167ffffffffffffffff81111561271b5761271a612fdb565b5b6040519080825280601f01601f19166020018201604052801561274d5781602001600182028036833780820191505090505b5090505b600085146127da5760018261276691906138bd565b9150600a856127759190613e9e565b60306127819190613933565b60f81b81838151811061279757612796613ecf565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127d39190613e6d565b9450612751565b8093505050505b919050565b60008060006007600085815260200190815260200160002090508092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e861286e868684612aa6565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b600033905090565b6128c28383612aaf565b60008373ffffffffffffffffffffffffffffffffffffffff163b146129515760006001549050600083820390505b6129036000868380600101945086612956565b612939576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181106128f057816001541461294e57600080fd5b50505b505050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261297c611e46565b8786866040518563ffffffff1660e01b815260040161299e9493929190613f53565b6020604051808303816000875af19250505080156129da57506040513d601f19601f820116820180604052508101906129d79190613fb4565b60015b612a53573d8060008114612a0a576040519150601f19603f3d011682016040523d82523d6000602084013e612a0f565b606091505b506000815103612a4b576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60009392505050565b6000600154905060008203612af0576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612afd6000848385612851565b600160406001901b178202600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550612b7483612b656000866000612857565b612b6e85612c6b565b1761287f565b6005600083815260200190815260200160002081905550600080838301905073ffffffffffffffffffffffffffffffffffffffff85169150828260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600183015b818114612c1557808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600181019050612bda565b5060008203612c50576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001819055505050612c6660008483856128aa565b505050565b60006001821460e11b9050919050565b60008115159050919050565b612c9081612c7b565b82525050565b6000602082019050612cab6000830184612c87565b92915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612cfa81612cc5565b8114612d0557600080fd5b50565b600081359050612d1781612cf1565b92915050565b600060208284031215612d3357612d32612cbb565b5b6000612d4184828501612d08565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612d84578082015181840152602081019050612d69565b60008484015250505050565b6000601f19601f8301169050919050565b6000612dac82612d4a565b612db68185612d55565b9350612dc6818560208601612d66565b612dcf81612d90565b840191505092915050565b60006020820190508181036000830152612df48184612da1565b905092915050565b6000819050919050565b612e0f81612dfc565b8114612e1a57600080fd5b50565b600081359050612e2c81612e06565b92915050565b600060208284031215612e4857612e47612cbb565b5b6000612e5684828501612e1d565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612e8a82612e5f565b9050919050565b612e9a81612e7f565b82525050565b6000602082019050612eb56000830184612e91565b92915050565b612ec481612e7f565b8114612ecf57600080fd5b50565b600081359050612ee181612ebb565b92915050565b60008060408385031215612efe57612efd612cbb565b5b6000612f0c85828601612ed2565b9250506020612f1d85828601612e1d565b9150509250929050565b612f3081612dfc565b82525050565b6000602082019050612f4b6000830184612f27565b92915050565b600060208284031215612f6757612f66612cbb565b5b6000612f7584828501612ed2565b91505092915050565b600080600060608486031215612f9757612f96612cbb565b5b6000612fa586828701612ed2565b9350506020612fb686828701612ed2565b9250506040612fc786828701612e1d565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61301382612d90565b810181811067ffffffffffffffff8211171561303257613031612fdb565b5b80604052505050565b6000613045612cb1565b9050613051828261300a565b919050565b600067ffffffffffffffff82111561307157613070612fdb565b5b61307a82612d90565b9050602081019050919050565b82818337600083830152505050565b60006130a96130a484613056565b61303b565b9050828152602081018484840111156130c5576130c4612fd6565b5b6130d0848285613087565b509392505050565b600082601f8301126130ed576130ec612fd1565b5b81356130fd848260208601613096565b91505092915050565b60006020828403121561311c5761311b612cbb565b5b600082013567ffffffffffffffff81111561313a57613139612cc0565b5b613146848285016130d8565b91505092915050565b61315881612c7b565b811461316357600080fd5b50565b6000813590506131758161314f565b92915050565b6000806040838503121561319257613191612cbb565b5b60006131a085828601613166565b925050602083013567ffffffffffffffff8111156131c1576131c0612cc0565b5b6131cd858286016130d8565b9150509250929050565b600080604083850312156131ee576131ed612cbb565b5b60006131fc85828601612ed2565b925050602061320d85828601613166565b9150509250929050565b600067ffffffffffffffff82111561323257613231612fdb565b5b61323b82612d90565b9050602081019050919050565b600061325b61325684613217565b61303b565b90508281526020810184848401111561327757613276612fd6565b5b613282848285613087565b509392505050565b600082601f83011261329f5761329e612fd1565b5b81356132af848260208601613248565b91505092915050565b600080600080608085870312156132d2576132d1612cbb565b5b60006132e087828801612ed2565b94505060206132f187828801612ed2565b935050604061330287828801612e1d565b925050606085013567ffffffffffffffff81111561332357613322612cc0565b5b61332f8782880161328a565b91505092959194509250565b6000806040838503121561335257613351612cbb565b5b600061336085828601612ed2565b925050602061337185828601612ed2565b9150509250929050565b6000806040838503121561339257613391612cbb565b5b60006133a085828601612e1d565b92505060206133b185828601612ed2565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061340257607f821691505b602082108103613415576134146133bb565b5b50919050565b60006040820190506134306000830185612e91565b61343d6020830184612e91565b9392505050565b6000815190506134538161314f565b92915050565b60006020828403121561346f5761346e612cbb565b5b600061347d84828501613444565b91505092915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006134bc601f83612d55565b91506134c782613486565b602082019050919050565b600060208201905081810360008301526134eb816134af565b9050919050565b600081905092915050565b50565b600061350d6000836134f2565b9150613518826134fd565b600082019050919050565b600061352e82613500565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b600061356e601083612d55565b915061357982613538565b602082019050919050565b6000602082019050818103600083015261359d81613561565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026136067fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826135c9565b61361086836135c9565b95508019841693508086168417925050509392505050565b6000819050919050565b600061364d61364861364384612dfc565b613628565b612dfc565b9050919050565b6000819050919050565b61366783613632565b61367b61367382613654565b8484546135d6565b825550505050565b600090565b613690613683565b61369b81848461365e565b505050565b5b818110156136bf576136b4600082613688565b6001810190506136a1565b5050565b601f821115613704576136d5816135a4565b6136de846135b9565b810160208510156136ed578190505b6137016136f9856135b9565b8301826136a0565b50505b505050565b600082821c905092915050565b600061372760001984600802613709565b1980831691505092915050565b60006137408383613716565b9150826002028217905092915050565b61375982612d4a565b67ffffffffffffffff81111561377257613771612fdb565b5b61377c82546133ea565b6137878282856136c3565b600060209050601f8311600181146137ba57600084156137a8578287015190505b6137b28582613734565b86555061381a565b601f1984166137c8866135a4565b60005b828110156137f0578489015182556001820191506020850194506020810190506137cb565b8683101561380d5784890151613809601f891682613716565b8355505b6001600288020188555050505b505050505050565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b6000613858601e83612d55565b915061386382613822565b602082019050919050565b600060208201905081810360008301526138878161384b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006138c882612dfc565b91506138d383612dfc565b92508282039050818111156138eb576138ea61388e565b5b92915050565b60006138fc82612dfc565b915061390783612dfc565b925082820261391581612dfc565b9150828204841483151761392c5761392b61388e565b5b5092915050565b600061393e82612dfc565b915061394983612dfc565b92508282019050808211156139615761396061388e565b5b92915050565b7f4d696e74206e6f74207265616479207965742100000000000000000000000000600082015250565b600061399d601383612d55565b91506139a882613967565b602082019050919050565b600060208201905081810360008301526139cc81613990565b9050919050565b7f4e6f206d6f7265206c6566742100000000000000000000000000000000000000600082015250565b6000613a09600d83612d55565b9150613a14826139d3565b602082019050919050565b60006020820190508181036000830152613a38816139fc565b9050919050565b7f547269656420746f206d696e74206f766572206f766572206c696d6974000000600082015250565b6000613a75601d83612d55565b9150613a8082613a3f565b602082019050919050565b60006020820190508181036000830152613aa481613a68565b9050919050565b7f547269656420746f206d696e74206f766572206c696d69742c2072657472792060008201527f776974682072656475636564207175616e746974790000000000000000000000602082015250565b6000613b07603583612d55565b9150613b1282613aab565b604082019050919050565b60006020820190508181036000830152613b3681613afa565b9050919050565b7f4d7573742073656e64206d6f7265206d6f6e6579210000000000000000000000600082015250565b6000613b73601583612d55565b9150613b7e82613b3d565b602082019050919050565b60006020820190508181036000830152613ba281613b66565b9050919050565b600081905092915050565b60008154613bc1816133ea565b613bcb8186613ba9565b94506001821660008114613be65760018114613bfb57613c2e565b60ff1983168652811515820286019350613c2e565b613c04856135a4565b60005b83811015613c2657815481890152600182019150602081019050613c07565b838801955050505b50505092915050565b6000613c4282612d4a565b613c4c8185613ba9565b9350613c5c818560208601612d66565b80840191505092915050565b6000613c748285613bb4565b9150613c808284613c37565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613ce8602683612d55565b9150613cf382613c8c565b604082019050919050565b60006020820190508181036000830152613d1781613cdb565b9050919050565b7f4e6f206d6f7265205053594f5020696e2073746f636b21000000000000000000600082015250565b6000613d54601783612d55565b9150613d5f82613d1e565b602082019050919050565b60006020820190508181036000830152613d8381613d47565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613dc0602083612d55565b9150613dcb82613d8a565b602082019050919050565b60006020820190508181036000830152613def81613db3565b9050919050565b6000613e0182612dfc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613e3357613e3261388e565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613e7882612dfc565b9150613e8383612dfc565b925082613e9357613e92613e3e565b5b828204905092915050565b6000613ea982612dfc565b9150613eb483612dfc565b925082613ec457613ec3613e3e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000613f2582613efe565b613f2f8185613f09565b9350613f3f818560208601612d66565b613f4881612d90565b840191505092915050565b6000608082019050613f686000830187612e91565b613f756020830186612e91565b613f826040830185612f27565b8181036060830152613f948184613f1a565b905095945050505050565b600081519050613fae81612cf1565b92915050565b600060208284031215613fca57613fc9612cbb565b5b6000613fd884828501613f9f565b9150509291505056fea26469706673582212208327d2f8992d2878dd41edbf3f736ef80c1f1dac4119b618277dba734a9960be64736f6c63430008120033
Deployed Bytecode Sourcemap
34099:4630:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34366:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14594:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14846:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18422:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18006:408;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34558:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12957:180;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34229:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37731:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36589:191;;;;;;;;;;;;;:::i;:::-;;37924:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33970:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34300:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37050:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34195:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34521:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15494:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13422:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;952:103;;;;;;;;;;;;;:::i;:::-;;36788:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37170:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;717:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14954:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35381:1084;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37392:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18648:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36471:110;;;;;;;;;;;;;:::i;:::-;;34277:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38125:250;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34447:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37625:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38383:341;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34487:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34408:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34336:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35049:324;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36945:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18890:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1065:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34656:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37510:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37284:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34366:39;;;;;;;;;;;;;:::o;14594:244::-;14679:4;14733:10;14718:25;;:11;:25;;;;:68;;;;14776:10;14761:25;;:11;:25;;;;14718:68;:111;;;;14819:10;14804:25;;:11;:25;;;;14718:111;14698:131;;14594:244;;;:::o;14846:100::-;14900:13;14933:5;14926:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14846:100;:::o;18422:218::-;18498:7;18523:16;18531:7;18523;:16::i;:::-;18518:64;;18548:34;;;;;;;;;;;;;;18518:64;18602:15;:24;18618:7;18602:24;;;;;;;;;;;:30;;;;;;;;;;;;18595:37;;18422:218;;;:::o;18006:408::-;18095:13;18111:16;18119:7;18111;:16::i;:::-;18095:32;;18167:5;18144:28;;:19;:17;:19::i;:::-;:28;;;18140:175;;18192:44;18209:5;18216:19;:17;:19::i;:::-;18192:16;:44::i;:::-;18187:128;;18264:35;;;;;;;;;;;;;;18187:128;18140:175;18360:2;18327:15;:24;18343:7;18327:24;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;18398:7;18394:2;18378:28;;18387:5;18378:28;;;;;;;;;;;;18084:330;18006:408;;:::o;34558:38::-;;;;:::o;12957:180::-;13018:7;13103:15;:13;:15::i;:::-;13088:12;;13072:13;;:28;:46;13065:53;;12957:180;:::o;34229:45::-;;;;;;;;;;;;;;;;;:::o;37731:185::-;31206:1;30417:42;31160:43;;;:47;31156:225;;;30417:42;31229:40;;;31278:4;31285:10;31229:67;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31224:146;;31343:10;31324:30;;;;;;;;;;;:::i;:::-;;;;;;;;31224:146;31156:225;37871:37:::1;37890:4;37896:2;37900:7;37871:18;:37::i;:::-;37731:185:::0;;;:::o;36589:191::-;676:13;:11;:13::i;:::-;1626:1:::1;1784:7;;:19:::0;1776:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1626:1;1852:7;:18;;;;36658:12:::2;36676:10;:15;;36699:21;36676:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36657:68;;;36744:7;36736:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;36646:134;1582:1:::1;1897:7;:22;;;;36589:191::o:0;37924:193::-;31206:1;30417:42;31160:43;;;:47;31156:225;;;30417:42;31229:40;;;31278:4;31285:10;31229:67;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31224:146;;31343:10;31324:30;;;;;;;;;;;:::i;:::-;;;;;;;;31224:146;31156:225;38068:41:::1;38091:4;38097:2;38101:7;38068:22;:41::i;:::-;37924:193:::0;;;:::o;33970:94::-;34036:20;34042:7;34051:4;34036:5;:20::i;:::-;33970:94;:::o;34300:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;37050:112::-;676:13;:11;:13::i;:::-;37142:12:::1;37127;:27;;;;;;:::i;:::-;;37050:112:::0;:::o;34195:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;34521:34::-;;;;:::o;15494:152::-;15566:7;15609:27;15628:7;15609:18;:27::i;:::-;15586:52;;15494:152;;;:::o;13422:233::-;13494:7;13535:1;13518:19;;:5;:19;;;13514:60;;13546:28;;;;;;;;;;;;;;13514:60;11230:13;13592:18;:25;13611:5;13592:25;;;;;;;;;;;;;;;;:55;13585:62;;13422:233;;;:::o;952:103::-;676:13;:11;:13::i;:::-;1017:30:::1;1044:1;1017:18;:30::i;:::-;952:103::o:0;36788:149::-;676:13;:11;:13::i;:::-;36890:8:::1;36879;:19;;;;;;:::i;:::-;;36920:9;36909:8;;:20;;;;;;;;;;;;;;;;;;36788:149:::0;;:::o;37170:106::-;676:13;:11;:13::i;:::-;37264:4:::1;37246:15;:22;;;;37170:106:::0;:::o;717:87::-;763:7;790:6;;;;;;;;;;;783:13;;717:87;:::o;14954:104::-;15010:13;15043:7;15036:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14954:104;:::o;35381:1084::-;34976:10;34963:23;;:9;:23;;;34955:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;1626:1:::1;1784:7;;:19:::0;1776:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1626:1;1852:7;:18;;;;35506:10:::2;35527:9:::0;35564:13:::2;:25;35578:10;35564:25;;;;;;;;;;;;;;;;35539:22;;:50;;;;:::i;:::-;35527:62;;35616:4;35604:8;:16;35600:285;;35672:4;35661:8;:15;;;;:::i;:::-;35646:10;;35645:32;;;;:::i;:::-;35637:40;;35748:4;35720:13;:25;35734:10;35720:25;;;;;;;;;;;;;;;;:32;;;;:::i;:::-;35692:13;:25;35706:10;35692:25;;;;;;;;;;;;;;;:60;;;;35600:285;;;35793:1;35785:9;;35865:8;35837:13;:25;35851:10;35837:25;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;35809:13;:25;35823:10;35809:25;;;;;;;;;;;;;;;:64;;;;35600:285;35905:19;;;;;;;;;;;35897:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;35995:15;;35983:8;35967:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:43;;35959:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;36085:17;;36073:8;36049:21;36059:10;36049:9;:21::i;:::-;:32;;;;:::i;:::-;:53;;36041:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;36169:14;;36157:8;:26;;36149:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;36273:5;36260:9;:18;;36252:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;36317:31;36327:10;36339:8;36317:9;:31::i;:::-;36377:5;36365:9;:17;36361:97;;;36407:10;36399:28;;:47;36440:5;36428:9;:17;;;;:::i;:::-;36399:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;36361:97;35495:970;;1582:1:::1;1897:7;:22;;;;35381:1084:::0;:::o;37392:110::-;676:13;:11;:13::i;:::-;37490:4:::1;37465:22;:29;;;;37392:110:::0;:::o;18648:234::-;18795:8;18743:18;:39;18762:19;:17;:19::i;:::-;18743:39;;;;;;;;;;;;;;;:49;18783:8;18743:49;;;;;;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;18855:8;18819:55;;18834:19;:17;:19::i;:::-;18819:55;;;18865:8;18819:55;;;;;;:::i;:::-;;;;;;;;18648:234;;:::o;36471:110::-;676:13;:11;:13::i;:::-;36554:19:::1;;;;;;;;;;;36553:20;36531:19;;:42;;;;;;;;;;;;;;;;;;36471:110::o:0;34277:20::-;;;;;;;;;;;;;:::o;38125:250::-;31206:1;30417:42;31160:43;;;:47;31156:225;;;30417:42;31229:40;;;31278:4;31285:10;31229:67;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31224:146;;31343:10;31324:30;;;;;;;;;;;:::i;:::-;;;;;;;;31224:146;31156:225;38320:47:::1;38343:4;38349:2;38353:7;38362:4;38320:22;:47::i;:::-;38125:250:::0;;;;:::o;34447:36::-;;;;:::o;37625:98::-;676:13;:11;:13::i;:::-;37711:4:::1;37694:14;:21;;;;37625:98:::0;:::o;38383:341::-;38505:13;38540:8;;;;;;;;;;;38536:181;;;38613:8;38623:26;38640:8;38623:16;:26::i;:::-;38596:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;38565:86;;;;38536:181;38691:14;38684:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38383:341;;;;:::o;34487:31::-;;;;:::o;34408:35::-;;;;:::o;34336:27::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35049:324::-;35102:4;35118:10;35139:9;35176:13;:25;35190:10;35176:25;;;;;;;;;;;;;;;;35151:22;;:50;;;;:::i;:::-;35139:62;;35228:4;35216:8;:16;35212:131;;35284:4;35273:8;:15;;;;:::i;:::-;35258:10;;35257:32;;;;:::i;:::-;35249:40;;35212:131;;;35330:1;35322:9;;35212:131;35360:5;35353:12;;;;35049:324;;;:::o;36945:97::-;36989:13;37022:12;37015:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36945:97;:::o;18890:164::-;18987:4;19011:18;:25;19030:5;19011:25;;;;;;;;;;;;;;;:35;19037:8;19011:35;;;;;;;;;;;;;;;;;;;;;;;;;19004:42;;18890:164;;;;:::o;1065:201::-;676:13;:11;:13::i;:::-;1174:1:::1;1154:22;;:8;:22;;::::0;1146:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1230:28;1249:8;1230:18;:28::i;:::-;1065:201:::0;:::o;34656:256::-;676:13;:11;:13::i;:::-;34788:15:::1;;34776:8;34760:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:43;;34738:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;34875:29;34885:8;34895;34875:9;:29::i;:::-;34656:256:::0;;:::o;37510:107::-;676:13;:11;:13::i;:::-;37605:4:::1;37585:17;:24;;;;37510:107:::0;:::o;37284:100::-;676:13;:11;:13::i;:::-;37367:9:::1;37354:10;:22;;;;37284:100:::0;:::o;19062:282::-;19127:4;19183:7;19164:15;:13;:15::i;:::-;:26;;:66;;;;;19217:13;;19207:7;:23;19164:66;:153;;;;;19316:1;11604:8;19268:17;:26;19286:7;19268:26;;;;;;;;;;;;:44;:49;19164:153;19144:173;;19062:282;;;:::o;29442:105::-;29502:7;29529:10;29522:17;;29442:105;:::o;12746:92::-;12802:7;12746:92;:::o;20157:1651::-;20299:27;20329;20348:7;20329:18;:27::i;:::-;20299:57;;20414:4;20373:45;;20389:19;20373:45;;;20369:86;;20427:28;;;;;;;;;;;;;;20369:86;20469:27;20498:23;20525:35;20552:7;20525:26;:35::i;:::-;20468:92;;;;20578:68;20603:15;20620:4;20626:19;:17;:19::i;:::-;20578:24;:68::i;:::-;20573:180;;20666:43;20683:4;20689:19;:17;:19::i;:::-;20666:16;:43::i;:::-;20661:92;;20718:35;;;;;;;;;;;;;;20661:92;20573:180;20784:1;20770:16;;:2;:16;;;20766:52;;20795:23;;;;;;;;;;;;;;20766:52;20831:43;20853:4;20859:2;20863:7;20872:1;20831:21;:43::i;:::-;20914:15;20911:85;;;20979:1;20958:19;20951:30;20911:85;21048:18;:24;21067:4;21048:24;;;;;;;;;;;;;;;;21046:26;;;;;;;;;;;;21090:18;:22;21109:2;21090:22;;;;;;;;;;;;;;;;21088:24;;;;;;;;;;;21159:146;21196:2;21245:45;21260:4;21266:2;21270:19;21245:14;:45::i;:::-;11738:8;21217:73;21159:18;:146::i;:::-;21130:17;:26;21148:7;21130:26;;;;;;;;;;;:175;;;;21377:1;11738:8;21326:19;:47;:52;21322:370;;21399:19;21431:1;21421:7;:11;21399:33;;21491:1;21457:17;:30;21475:11;21457:30;;;;;;;;;;;;:35;21453:224;;21538:13;;21523:11;:28;21519:139;;21615:19;21582:17;:30;21600:11;21582:30;;;;;;;;;;;:52;;;;21519:139;21453:224;21380:312;21322:370;21739:7;21735:2;21720:27;;21729:4;21720:27;;;;;;;;;;;;21758:42;21779:4;21785:2;21789:7;21798:1;21758:20;:42::i;:::-;20288:1520;;;20157:1651;;;:::o;812:132::-;887:12;:10;:12::i;:::-;876:23;;:7;:5;:7::i;:::-;:23;;;868:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;812:132::o;21816:193::-;21962:39;21979:4;21985:2;21989:7;21962:39;;;;;;;;;;;;:16;:39::i;:::-;21816:193;;;:::o;26812:1679::-;26892:27;26922;26941:7;26922:18;:27::i;:::-;26892:57;;26962:12;26993:19;26962:52;;27028:27;27057:23;27084:35;27111:7;27084:26;:35::i;:::-;27027:92;;;;27136:13;27132:244;;;27185:68;27210:15;27227:4;27233:19;:17;:19::i;:::-;27185:24;:68::i;:::-;27180:184;;27277:43;27294:4;27300:19;:17;:19::i;:::-;27277:16;:43::i;:::-;27272:92;;27329:35;;;;;;;;;;;;;;27272:92;27180:184;27132:244;27388:51;27410:4;27424:1;27428:7;27437:1;27388:21;:51::i;:::-;27479:15;27476:101;;;27560:1;27539:19;27532:30;27476:101;27686:1;11361:3;27656:1;:26;;27655:32;27627:18;:24;27646:4;27627:24;;;;;;;;;;;;;;;;:60;;;;;;;;;;;27733:176;27770:4;27841:53;27856:4;27870:1;27874:19;27841:14;:53::i;:::-;11738:8;11604;27794:43;27793:101;27733:18;:176::i;:::-;27704:17;:26;27722:7;27704:26;;;;;;;;;;;:205;;;;27981:1;11738:8;27930:19;:47;:52;27926:370;;28003:19;28035:1;28025:7;:11;28003:33;;28095:1;28061:17;:30;28079:11;28061:30;;;;;;;;;;;;:35;28057:224;;28142:13;;28127:11;:28;28123:139;;28219:19;28186:17;:30;28204:11;28186:30;;;;;;;;;;;:52;;;;28123:139;28057:224;27984:312;27926:370;28351:7;28347:1;28324:35;;28333:4;28324:35;;;;;;;;;;;;28370:50;28391:4;28405:1;28409:7;28418:1;28370:20;:50::i;:::-;28458:12;;:14;;;;;;;;;;;;;26881:1610;;;;26812:1679;;:::o;16201:633::-;16268:7;16288:12;16303:7;16288:22;;16371:4;16352:15;:13;:15::i;:::-;:23;16348:419;;16405:13;;16398:4;:20;16394:373;;;16443:14;16460:17;:23;16478:4;16460:23;;;;;;;;;;;;16443:40;;16540:1;11604:8;16512:6;:24;:29;16508:240;;16572:113;16589:1;16579:6;:11;16572:113;;16632:17;:25;16650:6;;;;;;;16632:25;;;;;;;;;;;;16623:34;;16572:113;;;16718:6;16711:13;;;;;;16508:240;16420:347;16394:373;16348:419;16795:31;;;;;;;;;;;;;;16201:633;;;;:::o;1274:191::-;1348:16;1367:6;;;;;;;;;;;1348:25;;1393:8;1384:6;;:17;;;;;;;;;;;;;;;;;;1448:8;1417:40;;1438:8;1417:40;;;;;;;;;;;;1337:128;1274:191;:::o;26595:112::-;26672:27;26682:2;26686:8;26672:27;;;;;;;;;;;;:9;:27::i;:::-;26595:112;;:::o;22017:407::-;22192:31;22205:4;22211:2;22215:7;22192:12;:31::i;:::-;22256:1;22238:2;:14;;;:19;22234:183;;22277:56;22308:4;22314:2;22318:7;22327:5;22277:30;:56::i;:::-;22272:145;;22361:40;;;;;;;;;;;;;;22272:145;22234:183;22017:407;;;;:::o;2101:534::-;2157:13;2198:1;2189:5;:10;2185:53;;2216:10;;;;;;;;;;;;;;;;;;;;;2185:53;2248:12;2263:5;2248:20;;2279:14;2304:78;2319:1;2311:4;:9;2304:78;;2337:8;;;;;:::i;:::-;;;;2368:2;2360:10;;;;;:::i;:::-;;;2304:78;;;2392:19;2424:6;2414:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2392:39;;2442:154;2458:1;2449:5;:10;2442:154;;2486:1;2476:11;;;;;:::i;:::-;;;2553:2;2545:5;:10;;;;:::i;:::-;2532:2;:24;;;;:::i;:::-;2519:39;;2502:6;2509;2502:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2582:2;2573:11;;;;;:::i;:::-;;;2442:154;;;2620:6;2606:21;;;;;2101:534;;;;:::o;19757:392::-;19859:27;19888:23;19929:38;19970:15;:24;19986:7;19970:24;;;;;;;;;;;19929:65;;20054:18;20031:41;;20111:19;20105:26;20086:45;;20016:126;19757:392;;;:::o;19352:397::-;19501:11;19571:16;19564:5;19560:28;19551:37;;19632:16;19621:9;19617:32;19604:45;;19714:15;19703:9;19700:30;19692:5;19681:9;19678:20;19675:56;19665:66;;19352:397;;;;;:::o;22432:159::-;;;;;:::o;29123:311::-;29258:7;29278:16;11801:3;29304:19;:41;;29278:68;;11801:3;29372:31;29383:4;29389:2;29393:9;29372:10;:31::i;:::-;29364:40;;:62;;29357:69;;;29123:311;;;;;:::o;17216:450::-;17296:14;17464:16;17457:5;17453:28;17444:37;;17641:5;17627:11;17602:23;17598:41;17595:52;17588:5;17585:63;17575:73;;17216:450;;;;:::o;22599:158::-;;;;;:::o;165:98::-;218:7;245:10;238:17;;165:98;:::o;25898:689::-;26029:19;26035:2;26039:8;26029:5;:19::i;:::-;26108:1;26090:2;:14;;;:19;26086:483;;26130:11;26144:13;;26130:27;;26176:13;26198:8;26192:3;:14;26176:30;;26225:233;26256:62;26295:1;26299:2;26303:7;;;;;;26312:5;26256:30;:62::i;:::-;26251:167;;26354:40;;;;;;;;;;;;;;26251:167;26453:3;26445:5;:11;26225:233;;26540:3;26523:13;;:20;26519:34;;26545:8;;;26519:34;26111:458;;26086:483;25898:689;;;:::o;22765:716::-;22928:4;22974:2;22949:45;;;22995:19;:17;:19::i;:::-;23016:4;23022:7;23031:5;22949:88;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;22945:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23249:1;23232:6;:13;:18;23228:235;;23278:40;;;;;;;;;;;;;;23228:235;23421:6;23415:13;23406:6;23402:2;23398:15;23391:38;22945:529;23118:54;;;23108:64;;;:6;:64;;;;23101:71;;;22765:716;;;;;;:::o;28968:147::-;29105:6;28968:147;;;;;:::o;23489:1442::-;23562:20;23585:13;;23562:36;;23625:1;23613:8;:13;23609:44;;23635:18;;;;;;;;;;;;;;23609:44;23666:61;23696:1;23700:2;23704:12;23718:8;23666:21;:61::i;:::-;23836:1;11301:2;23806:1;:26;;23805:32;23793:8;:45;23767:18;:22;23786:2;23767:22;;;;;;;;;;;;;;;;:71;;;;;;;;;;;23889:139;23926:2;23980:33;24003:1;24007:2;24011:1;23980:14;:33::i;:::-;23947:30;23968:8;23947:20;:30::i;:::-;:66;23889:18;:139::i;:::-;23855:17;:31;23873:12;23855:31;;;;;;;;;;;:173;;;;24045:16;24076:11;24105:8;24090:12;:23;24076:37;;24180:16;24176:2;24172:25;24160:37;;24400:12;24368:8;24343:1;24294:25;24269:1;24244;24217:215;24512:1;24498:12;24494:20;24452:279;24553:3;24544:7;24541:16;24452:279;;24704:7;24694:8;24691:1;24664:25;24661:1;24658;24653:59;24606:1;24597:7;24593:15;24582:26;;24452:279;;;24456:77;24776:1;24764:8;:13;24760:45;;24786:19;;;;;;;;;;;;;;24760:45;24838:3;24822:13;:19;;;;23740:1113;;24863:60;24892:1;24896:2;24900:12;24914:8;24863:20;:60::i;:::-;23551:1380;23489:1442;;:::o;17674:324::-;17744:14;17977:1;17967:8;17964:15;17938:24;17934:46;17924:56;;17674: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:307::-;10278:4;10368:18;10360:6;10357:30;10354:56;;;10390:18;;:::i;:::-;10354:56;10428:29;10450:6;10428:29;:::i;:::-;10420:37;;10512:4;10506;10502:15;10494:23;;10217:307;;;:::o;10530:423::-;10607:5;10632:65;10648:48;10689:6;10648:48;:::i;:::-;10632:65;:::i;:::-;10623:74;;10720:6;10713:5;10706:21;10758:4;10751:5;10747:16;10796:3;10787:6;10782:3;10778:16;10775:25;10772:112;;;10803:79;;:::i;:::-;10772:112;10893:54;10940:6;10935:3;10930;10893:54;:::i;:::-;10613:340;10530:423;;;;;:::o;10972:338::-;11027:5;11076:3;11069:4;11061:6;11057:17;11053:27;11043:122;;11084:79;;:::i;:::-;11043:122;11201:6;11188:20;11226:78;11300:3;11292:6;11285:4;11277:6;11273:17;11226:78;:::i;:::-;11217:87;;11033:277;10972:338;;;;:::o;11316:943::-;11411:6;11419;11427;11435;11484:3;11472:9;11463:7;11459:23;11455:33;11452:120;;;11491:79;;:::i;:::-;11452:120;11611:1;11636:53;11681:7;11672:6;11661:9;11657:22;11636:53;:::i;:::-;11626:63;;11582:117;11738:2;11764:53;11809:7;11800:6;11789:9;11785:22;11764:53;:::i;:::-;11754:63;;11709:118;11866:2;11892:53;11937:7;11928:6;11917:9;11913:22;11892:53;:::i;:::-;11882:63;;11837:118;12022:2;12011:9;12007:18;11994:32;12053:18;12045:6;12042:30;12039:117;;;12075:79;;:::i;:::-;12039:117;12180:62;12234:7;12225:6;12214:9;12210:22;12180:62;:::i;:::-;12170:72;;11965:287;11316:943;;;;;;;:::o;12265:474::-;12333:6;12341;12390:2;12378:9;12369:7;12365:23;12361:32;12358:119;;;12396:79;;:::i;:::-;12358:119;12516:1;12541:53;12586:7;12577:6;12566:9;12562:22;12541:53;:::i;:::-;12531:63;;12487:117;12643:2;12669:53;12714:7;12705:6;12694:9;12690:22;12669:53;:::i;:::-;12659:63;;12614:118;12265:474;;;;;:::o;12745:::-;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:141::-;17633:4;17656:3;17648:11;;17679:3;17676:1;17669:14;17713:4;17710:1;17700:18;17692:26;;17584:141;;;:::o;17731:93::-;17768:6;17815:2;17810;17803:5;17799:14;17795:23;17785:33;;17731:93;;;:::o;17830:107::-;17874:8;17924:5;17918:4;17914:16;17893:37;;17830:107;;;;:::o;17943:393::-;18012:6;18062:1;18050:10;18046:18;18085:97;18115:66;18104:9;18085:97;:::i;:::-;18203:39;18233:8;18222:9;18203:39;:::i;:::-;18191:51;;18275:4;18271:9;18264:5;18260:21;18251:30;;18324:4;18314:8;18310:19;18303:5;18300:30;18290:40;;18019:317;;17943:393;;;;;:::o;18342:60::-;18370:3;18391:5;18384:12;;18342:60;;;:::o;18408:142::-;18458:9;18491:53;18509:34;18518:24;18536:5;18518:24;:::i;:::-;18509:34;:::i;:::-;18491:53;:::i;:::-;18478:66;;18408:142;;;:::o;18556:75::-;18599:3;18620:5;18613:12;;18556:75;;;:::o;18637:269::-;18747:39;18778:7;18747:39;:::i;:::-;18808:91;18857:41;18881:16;18857:41;:::i;:::-;18849:6;18842:4;18836:11;18808:91;:::i;:::-;18802:4;18795:105;18713:193;18637:269;;;:::o;18912:73::-;18957:3;18912:73;:::o;18991:189::-;19068:32;;:::i;:::-;19109:65;19167:6;19159;19153:4;19109:65;:::i;:::-;19044:136;18991:189;;:::o;19186:186::-;19246:120;19263:3;19256:5;19253:14;19246:120;;;19317:39;19354:1;19347:5;19317:39;:::i;:::-;19290:1;19283:5;19279:13;19270:22;;19246:120;;;19186:186;;:::o;19378:543::-;19479:2;19474:3;19471:11;19468:446;;;19513:38;19545:5;19513:38;:::i;:::-;19597:29;19615:10;19597:29;:::i;:::-;19587:8;19583:44;19780:2;19768:10;19765:18;19762:49;;;19801:8;19786:23;;19762:49;19824:80;19880:22;19898:3;19880:22;:::i;:::-;19870:8;19866:37;19853:11;19824:80;:::i;:::-;19483:431;;19468:446;19378:543;;;:::o;19927:117::-;19981:8;20031:5;20025:4;20021:16;20000:37;;19927:117;;;;:::o;20050:169::-;20094:6;20127:51;20175:1;20171:6;20163:5;20160:1;20156:13;20127:51;:::i;:::-;20123:56;20208:4;20202;20198:15;20188:25;;20101:118;20050:169;;;;:::o;20224:295::-;20300:4;20446:29;20471:3;20465:4;20446:29;:::i;:::-;20438:37;;20508:3;20505:1;20501:11;20495:4;20492:21;20484:29;;20224:295;;;;:::o;20524:1395::-;20641:37;20674:3;20641:37;:::i;:::-;20743:18;20735:6;20732:30;20729:56;;;20765:18;;:::i;:::-;20729:56;20809:38;20841:4;20835:11;20809:38;:::i;:::-;20894:67;20954:6;20946;20940:4;20894:67;:::i;:::-;20988:1;21012:4;20999:17;;21044:2;21036:6;21033:14;21061:1;21056:618;;;;21718:1;21735:6;21732:77;;;21784:9;21779:3;21775:19;21769:26;21760:35;;21732:77;21835:67;21895:6;21888:5;21835:67;:::i;:::-;21829:4;21822:81;21691:222;21026:887;;21056:618;21108:4;21104:9;21096:6;21092:22;21142:37;21174:4;21142:37;:::i;:::-;21201:1;21215:208;21229:7;21226:1;21223:14;21215:208;;;21308:9;21303:3;21299:19;21293:26;21285:6;21278:42;21359:1;21351:6;21347:14;21337:24;;21406:2;21395:9;21391:18;21378:31;;21252:4;21249:1;21245:12;21240:17;;21215:208;;;21451:6;21442:7;21439:19;21436:179;;;21509:9;21504:3;21500:19;21494:26;21552:48;21594:4;21586:6;21582:17;21571:9;21552:48;:::i;:::-;21544:6;21537:64;21459:156;21436:179;21661:1;21657;21649:6;21645:14;21641:22;21635:4;21628:36;21063:611;;;21026:887;;20616:1303;;;20524:1395;;:::o;21925:180::-;22065:32;22061:1;22053:6;22049:14;22042:56;21925:180;:::o;22111:366::-;22253:3;22274:67;22338:2;22333:3;22274:67;:::i;:::-;22267:74;;22350:93;22439:3;22350:93;:::i;:::-;22468:2;22463:3;22459:12;22452:19;;22111:366;;;:::o;22483:419::-;22649:4;22687:2;22676:9;22672:18;22664:26;;22736:9;22730:4;22726:20;22722:1;22711:9;22707:17;22700:47;22764:131;22890:4;22764:131;:::i;:::-;22756:139;;22483:419;;;:::o;22908:180::-;22956:77;22953:1;22946:88;23053:4;23050:1;23043:15;23077:4;23074:1;23067:15;23094:194;23134:4;23154:20;23172:1;23154:20;:::i;:::-;23149:25;;23188:20;23206:1;23188:20;:::i;:::-;23183:25;;23232:1;23229;23225:9;23217:17;;23256:1;23250:4;23247:11;23244:37;;;23261:18;;:::i;:::-;23244:37;23094:194;;;;:::o;23294:410::-;23334:7;23357:20;23375:1;23357:20;:::i;:::-;23352:25;;23391:20;23409:1;23391:20;:::i;:::-;23386:25;;23446:1;23443;23439:9;23468:30;23486:11;23468:30;:::i;:::-;23457:41;;23647:1;23638:7;23634:15;23631:1;23628:22;23608:1;23601:9;23581:83;23558:139;;23677:18;;:::i;:::-;23558:139;23342:362;23294:410;;;;:::o;23710:191::-;23750:3;23769:20;23787:1;23769:20;:::i;:::-;23764:25;;23803:20;23821:1;23803:20;:::i;:::-;23798:25;;23846:1;23843;23839:9;23832:16;;23867:3;23864:1;23861:10;23858:36;;;23874:18;;:::i;:::-;23858:36;23710:191;;;;:::o;23907:169::-;24047:21;24043:1;24035:6;24031:14;24024:45;23907:169;:::o;24082:366::-;24224:3;24245:67;24309:2;24304:3;24245:67;:::i;:::-;24238:74;;24321:93;24410:3;24321:93;:::i;:::-;24439:2;24434:3;24430:12;24423:19;;24082:366;;;:::o;24454:419::-;24620:4;24658:2;24647:9;24643:18;24635:26;;24707:9;24701:4;24697:20;24693:1;24682:9;24678:17;24671:47;24735:131;24861:4;24735:131;:::i;:::-;24727:139;;24454:419;;;:::o;24879:163::-;25019:15;25015:1;25007:6;25003:14;24996:39;24879:163;:::o;25048:366::-;25190:3;25211:67;25275:2;25270:3;25211:67;:::i;:::-;25204:74;;25287:93;25376:3;25287:93;:::i;:::-;25405:2;25400:3;25396:12;25389:19;;25048:366;;;:::o;25420:419::-;25586:4;25624:2;25613:9;25609:18;25601:26;;25673:9;25667:4;25663:20;25659:1;25648:9;25644:17;25637:47;25701:131;25827:4;25701:131;:::i;:::-;25693:139;;25420:419;;;:::o;25845:179::-;25985:31;25981:1;25973:6;25969:14;25962:55;25845:179;:::o;26030:366::-;26172:3;26193:67;26257:2;26252:3;26193:67;:::i;:::-;26186:74;;26269:93;26358:3;26269:93;:::i;:::-;26387:2;26382:3;26378:12;26371:19;;26030:366;;;:::o;26402:419::-;26568:4;26606:2;26595:9;26591:18;26583:26;;26655:9;26649:4;26645:20;26641:1;26630:9;26626:17;26619:47;26683:131;26809:4;26683:131;:::i;:::-;26675:139;;26402:419;;;:::o;26827:240::-;26967:34;26963:1;26955:6;26951:14;26944:58;27036:23;27031:2;27023:6;27019:15;27012:48;26827:240;:::o;27073:366::-;27215:3;27236:67;27300:2;27295:3;27236:67;:::i;:::-;27229:74;;27312:93;27401:3;27312:93;:::i;:::-;27430:2;27425:3;27421:12;27414:19;;27073:366;;;:::o;27445:419::-;27611:4;27649:2;27638:9;27634:18;27626:26;;27698:9;27692:4;27688:20;27684:1;27673:9;27669:17;27662:47;27726:131;27852:4;27726:131;:::i;:::-;27718:139;;27445:419;;;:::o;27870:171::-;28010:23;28006:1;27998:6;27994:14;27987:47;27870:171;:::o;28047:366::-;28189:3;28210:67;28274:2;28269:3;28210:67;:::i;:::-;28203:74;;28286:93;28375:3;28286:93;:::i;:::-;28404:2;28399:3;28395:12;28388:19;;28047:366;;;:::o;28419:419::-;28585:4;28623:2;28612:9;28608:18;28600:26;;28672:9;28666:4;28662:20;28658:1;28647:9;28643:17;28636:47;28700:131;28826:4;28700:131;:::i;:::-;28692:139;;28419:419;;;:::o;28844:148::-;28946:11;28983:3;28968:18;;28844:148;;;;:::o;29022:874::-;29125:3;29162:5;29156:12;29191:36;29217:9;29191:36;:::i;:::-;29243:89;29325:6;29320:3;29243:89;:::i;:::-;29236:96;;29363:1;29352:9;29348:17;29379:1;29374:166;;;;29554:1;29549:341;;;;29341:549;;29374:166;29458:4;29454:9;29443;29439:25;29434:3;29427:38;29520:6;29513:14;29506:22;29498:6;29494:35;29489:3;29485:45;29478:52;;29374:166;;29549:341;29616:38;29648:5;29616:38;:::i;:::-;29676:1;29690:154;29704:6;29701:1;29698:13;29690:154;;;29778:7;29772:14;29768:1;29763:3;29759:11;29752:35;29828:1;29819:7;29815:15;29804:26;;29726:4;29723:1;29719:12;29714:17;;29690:154;;;29873:6;29868:3;29864:16;29857:23;;29556:334;;29341:549;;29129:767;;29022:874;;;;:::o;29902:390::-;30008:3;30036:39;30069:5;30036:39;:::i;:::-;30091:89;30173:6;30168:3;30091:89;:::i;:::-;30084:96;;30189:65;30247:6;30242:3;30235:4;30228:5;30224:16;30189:65;:::i;:::-;30279:6;30274:3;30270:16;30263:23;;30012:280;29902:390;;;;:::o;30298:429::-;30475:3;30497:92;30585:3;30576:6;30497:92;:::i;:::-;30490:99;;30606:95;30697:3;30688:6;30606:95;:::i;:::-;30599:102;;30718:3;30711:10;;30298:429;;;;;:::o;30733:225::-;30873:34;30869:1;30861:6;30857:14;30850:58;30942:8;30937:2;30929:6;30925:15;30918:33;30733:225;:::o;30964:366::-;31106:3;31127:67;31191:2;31186:3;31127:67;:::i;:::-;31120:74;;31203:93;31292:3;31203:93;:::i;:::-;31321:2;31316:3;31312:12;31305:19;;30964:366;;;:::o;31336:419::-;31502:4;31540:2;31529:9;31525:18;31517:26;;31589:9;31583:4;31579:20;31575:1;31564:9;31560:17;31553:47;31617:131;31743:4;31617:131;:::i;:::-;31609:139;;31336:419;;;:::o;31761:173::-;31901:25;31897:1;31889:6;31885:14;31878:49;31761:173;:::o;31940:366::-;32082:3;32103:67;32167:2;32162:3;32103:67;:::i;:::-;32096:74;;32179:93;32268:3;32179:93;:::i;:::-;32297:2;32292:3;32288:12;32281:19;;31940:366;;;:::o;32312:419::-;32478:4;32516:2;32505:9;32501:18;32493:26;;32565:9;32559:4;32555:20;32551:1;32540:9;32536:17;32529:47;32593:131;32719:4;32593:131;:::i;:::-;32585:139;;32312:419;;;:::o;32737:182::-;32877:34;32873:1;32865:6;32861:14;32854:58;32737:182;:::o;32925:366::-;33067:3;33088:67;33152:2;33147:3;33088:67;:::i;:::-;33081:74;;33164:93;33253:3;33164:93;:::i;:::-;33282:2;33277:3;33273:12;33266:19;;32925:366;;;:::o;33297:419::-;33463:4;33501:2;33490:9;33486:18;33478:26;;33550:9;33544:4;33540:20;33536:1;33525:9;33521:17;33514:47;33578:131;33704:4;33578:131;:::i;:::-;33570:139;;33297:419;;;:::o;33722:233::-;33761:3;33784:24;33802:5;33784:24;:::i;:::-;33775:33;;33830:66;33823:5;33820:77;33817:103;;33900:18;;:::i;:::-;33817:103;33947:1;33940:5;33936:13;33929:20;;33722:233;;;:::o;33961:180::-;34009:77;34006:1;33999:88;34106:4;34103:1;34096:15;34130:4;34127:1;34120:15;34147:185;34187:1;34204:20;34222:1;34204:20;:::i;:::-;34199:25;;34238:20;34256:1;34238:20;:::i;:::-;34233:25;;34277:1;34267:35;;34282:18;;:::i;:::-;34267:35;34324:1;34321;34317:9;34312:14;;34147:185;;;;:::o;34338:176::-;34370:1;34387:20;34405:1;34387:20;:::i;:::-;34382:25;;34421:20;34439:1;34421:20;:::i;:::-;34416:25;;34460:1;34450:35;;34465:18;;:::i;:::-;34450:35;34506:1;34503;34499:9;34494:14;;34338:176;;;;:::o;34520:180::-;34568:77;34565:1;34558:88;34665:4;34662:1;34655:15;34689:4;34686:1;34679:15;34706:98;34757:6;34791:5;34785:12;34775:22;;34706:98;;;:::o;34810:168::-;34893:11;34927:6;34922:3;34915:19;34967:4;34962:3;34958:14;34943:29;;34810:168;;;;:::o;34984:373::-;35070:3;35098:38;35130:5;35098:38;:::i;:::-;35152:70;35215:6;35210:3;35152:70;:::i;:::-;35145:77;;35231:65;35289:6;35284:3;35277:4;35270:5;35266:16;35231:65;:::i;:::-;35321:29;35343:6;35321:29;:::i;:::-;35316:3;35312:39;35305:46;;35074:283;34984:373;;;;:::o;35363:640::-;35558:4;35596:3;35585:9;35581:19;35573:27;;35610:71;35678:1;35667:9;35663:17;35654:6;35610:71;:::i;:::-;35691:72;35759:2;35748:9;35744:18;35735:6;35691:72;:::i;:::-;35773;35841:2;35830:9;35826:18;35817:6;35773:72;:::i;:::-;35892:9;35886:4;35882:20;35877:2;35866:9;35862:18;35855:48;35920:76;35991:4;35982:6;35920:76;:::i;:::-;35912:84;;35363:640;;;;;;;:::o;36009:141::-;36065:5;36096:6;36090:13;36081:22;;36112:32;36138:5;36112:32;:::i;:::-;36009:141;;;;:::o;36156:349::-;36225:6;36274:2;36262:9;36253:7;36249:23;36245:32;36242:119;;;36280:79;;:::i;:::-;36242:119;36400:1;36425:63;36480:7;36471:6;36460:9;36456:22;36425:63;:::i;:::-;36415:73;;36371:127;36156:349;;;;:::o
Swarm Source
ipfs://8327d2f8992d2878dd41edbf3f736ef80c1f1dac4119b618277dba734a9960be
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.