Overview
POL Balance
0 POL
POL Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 4,978 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Fulfill Availabl... | 40693443 | 635 days ago | IN | 2.9922 POL | 0.19322703 | ||||
Fulfill Availabl... | 40692188 | 635 days ago | IN | 0.4511 POL | 0.08302396 | ||||
Fulfill Availabl... | 40692176 | 635 days ago | IN | 0.4511 POL | 0.08018774 | ||||
Fulfill Availabl... | 40692151 | 635 days ago | IN | 0.4511 POL | 0.08758761 | ||||
Fulfill Availabl... | 40690755 | 635 days ago | IN | 0.4 POL | 0.03242201 | ||||
Fulfill Availabl... | 40690736 | 635 days ago | IN | 10 POL | 0.02935547 | ||||
Fulfill Availabl... | 40690463 | 635 days ago | IN | 16 POL | 0.04109636 | ||||
Fulfill Availabl... | 40690425 | 635 days ago | IN | 0.33 POL | 0.03099959 | ||||
Fulfill Availabl... | 40689936 | 635 days ago | IN | 0.404 POL | 0.03527067 | ||||
Fulfill Availabl... | 40689381 | 635 days ago | IN | 1.706 POL | 0.02523879 | ||||
Fulfill Availabl... | 40687804 | 635 days ago | IN | 0.1473 POL | 0.05500813 | ||||
Fulfill Availabl... | 40687543 | 635 days ago | IN | 1.338 POL | 0.0451236 | ||||
Fulfill Availabl... | 40685883 | 635 days ago | IN | 67.8 POL | 0.0533642 | ||||
Fulfill Availabl... | 40685376 | 635 days ago | IN | 0.957 POL | 0.0916328 | ||||
Fulfill Availabl... | 40685175 | 635 days ago | IN | 0.237 POL | 0.03475479 | ||||
Fulfill Availabl... | 40685064 | 635 days ago | IN | 0.262876 POL | 0.02969647 | ||||
Fulfill Availabl... | 40685056 | 635 days ago | IN | 0.262876 POL | 0.02791163 | ||||
Fulfill Availabl... | 40685050 | 635 days ago | IN | 0.262876 POL | 0.02938646 | ||||
Fulfill Availabl... | 40685002 | 635 days ago | IN | 7.6 POL | 0.06079383 | ||||
Fulfill Availabl... | 40684976 | 635 days ago | IN | 1.065 POL | 0.03118313 | ||||
Fulfill Availabl... | 40684652 | 635 days ago | IN | 0.43 POL | 0.0400815 | ||||
Fulfill Availabl... | 40684615 | 635 days ago | IN | 0.43 POL | 0.04637726 | ||||
Fulfill Availabl... | 40684257 | 635 days ago | IN | 0.207 POL | 0.0404289 | ||||
Fulfill Availabl... | 40683938 | 635 days ago | IN | 0.2693 POL | 0.10586834 | ||||
Fulfill Availabl... | 40683179 | 635 days ago | IN | 1.08 POL | 0.1152691 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
40693443 | 635 days ago | 0.19 POL | ||||
40693443 | 635 days ago | 2.8022 POL | ||||
40692188 | 635 days ago | 0.4511 POL | ||||
40692188 | 635 days ago | 0.095 POL | ||||
40692188 | 635 days ago | 0.3561 POL | ||||
40692176 | 635 days ago | 0.4511 POL | ||||
40692176 | 635 days ago | 0.095 POL | ||||
40692176 | 635 days ago | 0.3561 POL | ||||
40692151 | 635 days ago | 0.4511 POL | ||||
40692151 | 635 days ago | 0.095 POL | ||||
40692151 | 635 days ago | 0.3561 POL | ||||
40690755 | 635 days ago | 0.25 POL | ||||
40690755 | 635 days ago | 0.15 POL | ||||
40690736 | 635 days ago | 5 POL | ||||
40690736 | 635 days ago | 5 POL | ||||
40690463 | 635 days ago | 5 POL | ||||
40690463 | 635 days ago | 5 POL | ||||
40690463 | 635 days ago | 11 POL | ||||
40690425 | 635 days ago | 0.33 POL | ||||
40690425 | 635 days ago | 0.17 POL | ||||
40690425 | 635 days ago | 0.16 POL | ||||
40689936 | 635 days ago | 0.404 POL | ||||
40689936 | 635 days ago | 0.13 POL | ||||
40689936 | 635 days ago | 0.274 POL | ||||
40689381 | 635 days ago | 0.414 POL |
Loading...
Loading
Contract Name:
SeaportRouter
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.13; import { SeaportRouterInterface } from "../interfaces/SeaportRouterInterface.sol"; import { SeaportInterface } from "../interfaces/SeaportInterface.sol"; import { ReentrancyGuard } from "../lib/ReentrancyGuard.sol"; import { Execution, AdvancedOrder, CriteriaResolver, FulfillmentComponent } from "../lib/ConsiderationStructs.sol"; /** * @title SeaportRouter * @author Ryan Ghods (ralxz.eth), 0age (0age.eth), James Wenzel (emo.eth) * @notice A utility contract for fulfilling orders with multiple * Seaport versions. DISCLAIMER: This contract only works when * all consideration items across all listings are native tokens. */ contract SeaportRouter is SeaportRouterInterface, ReentrancyGuard { /// @dev The allowed v1.1 contract usable through this router. address private immutable _SEAPORT_V1_1; /// @dev The allowed v1.4 contract usable through this router. address private immutable _SEAPORT_V1_4; /** * @dev Deploy contract with the supported Seaport contracts. * * @param seaportV1point1 The address of the Seaport v1.1 contract. * @param seaportV1point4 The address of the Seaport v1.4 contract. */ constructor(address seaportV1point1, address seaportV1point4) { _SEAPORT_V1_1 = seaportV1point1; _SEAPORT_V1_4 = seaportV1point4; } /** * @dev Fallback function to receive excess ether, in case total amount of * ether sent is more than the amount required to fulfill the order. */ receive() external payable override { // Ensure we only receive ether from Seaport. _assertSeaportAllowed(msg.sender); } /** * @notice Fulfill available advanced orders through multiple Seaport * versions. * See {SeaportInterface-fulfillAvailableAdvancedOrders} * * @param params The parameters for fulfilling available advanced orders. */ function fulfillAvailableAdvancedOrders( FulfillAvailableAdvancedOrdersParams calldata params ) external payable override returns ( bool[][] memory availableOrders, Execution[][] memory executions ) { // Ensure this function cannot be triggered during a reentrant call. _setReentrancyGuard(true); // Put the number of Seaport contracts on the stack. uint256 seaportContractsLength = params.seaportContracts.length; // Set the availableOrders and executions arrays to the correct length. availableOrders = new bool[][](seaportContractsLength); executions = new Execution[][](seaportContractsLength); // Track the number of order fulfillments left. uint256 fulfillmentsLeft = params.maximumFulfilled; // To help avoid stack too deep errors, we format the calldata // params in a struct and put it on the stack. AdvancedOrder[] memory emptyAdvancedOrders; CriteriaResolver[] memory emptyCriteriaResolvers; FulfillmentComponent[][] memory emptyFulfillmentComponents; CalldataParams memory calldataParams = CalldataParams({ advancedOrders: emptyAdvancedOrders, criteriaResolvers: emptyCriteriaResolvers, offerFulfillments: emptyFulfillmentComponents, considerationFulfillments: emptyFulfillmentComponents, fulfillerConduitKey: params.fulfillerConduitKey, recipient: params.recipient, maximumFulfilled: fulfillmentsLeft }); // If recipient is not provided assign to msg.sender. if (calldataParams.recipient == address(0)) { calldataParams.recipient = msg.sender; } // Iterate through the provided Seaport contracts. for (uint256 i = 0; i < params.seaportContracts.length; ) { // Ensure the provided Seaport contract is allowed. _assertSeaportAllowed(params.seaportContracts[i]); // Put the order params on the stack. AdvancedOrderParams calldata orderParams = params .advancedOrderParams[i]; // Assign the variables to the calldata params. calldataParams.advancedOrders = orderParams.advancedOrders; calldataParams.criteriaResolvers = orderParams.criteriaResolvers; calldataParams.offerFulfillments = orderParams.offerFulfillments; calldataParams.considerationFulfillments = orderParams .considerationFulfillments; // Execute the orders, collecting availableOrders and executions. // This is wrapped in a try/catch in case a single order is // executed that is no longer available, leading to a revert // with `NoSpecifiedOrdersAvailable()`. try SeaportInterface(params.seaportContracts[i]) .fulfillAvailableAdvancedOrders{ value: orderParams.etherValue }( calldataParams.advancedOrders, calldataParams.criteriaResolvers, calldataParams.offerFulfillments, calldataParams.considerationFulfillments, calldataParams.fulfillerConduitKey, calldataParams.recipient, calldataParams.maximumFulfilled ) returns ( bool[] memory newAvailableOrders, Execution[] memory newExecutions ) { availableOrders[i] = newAvailableOrders; executions[i] = newExecutions; // Subtract the number of orders fulfilled. uint256 newAvailableOrdersLength = newAvailableOrders.length; for (uint256 j = 0; j < newAvailableOrdersLength; ) { if (newAvailableOrders[j]) { unchecked { --fulfillmentsLeft; ++j; } } } // Break if the maximum number of executions has been reached. if (fulfillmentsLeft == 0) { break; } } catch {} // Update fulfillments left. calldataParams.maximumFulfilled = fulfillmentsLeft; unchecked { ++i; } } // Return excess ether that may not have been used or was sent back. if (address(this).balance > 0) { _returnExcessEther(); } // Clear the reentrancy guard. _clearReentrancyGuard(); } /** * @notice Returns the Seaport contracts allowed to be used through this * router. */ function getAllowedSeaportContracts() external view override returns (address[] memory seaportContracts) { seaportContracts = new address[](2); seaportContracts[0] = _SEAPORT_V1_1; seaportContracts[1] = _SEAPORT_V1_4; } /** * @dev Reverts if the provided Seaport contract is not allowed. */ function _assertSeaportAllowed(address seaport) internal view { if ( _cast(seaport == _SEAPORT_V1_1) | _cast(seaport == _SEAPORT_V1_4) == 0 ) { revert SeaportNotAllowed(seaport); } } /** * @dev Function to return excess ether, in case total amount of * ether sent is more than the amount required to fulfill the order. */ function _returnExcessEther() private { // Send received funds back to msg.sender. (bool success, bytes memory data) = payable(msg.sender).call{ value: address(this).balance }(""); // Revert with an error if the ether transfer failed. if (!success) { revert EtherReturnTransferFailed( msg.sender, address(this).balance, data ); } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.13; type CalldataPointer is uint256; type ReturndataPointer is uint256; type MemoryPointer is uint256; using CalldataPointerLib for CalldataPointer global; using MemoryPointerLib for MemoryPointer global; using ReturndataPointerLib for ReturndataPointer global; using CalldataReaders for CalldataPointer global; using ReturndataReaders for ReturndataPointer global; using MemoryReaders for MemoryPointer global; using MemoryWriters for MemoryPointer global; CalldataPointer constant CalldataStart = CalldataPointer.wrap(0x04); MemoryPointer constant FreeMemoryPPtr = MemoryPointer.wrap(0x40); uint256 constant IdentityPrecompileAddress = 0x4; uint256 constant OffsetOrLengthMask = 0xffffffff; uint256 constant _OneWord = 0x20; uint256 constant _FreeMemoryPointerSlot = 0x40; /// @dev Allocates `size` bytes in memory by increasing the free memory pointer /// and returns the memory pointer to the first byte of the allocated region. // (Free functions cannot have visibility.) // solhint-disable-next-line func-visibility function malloc(uint256 size) pure returns (MemoryPointer mPtr) { assembly { mPtr := mload(_FreeMemoryPointerSlot) mstore(_FreeMemoryPointerSlot, add(mPtr, size)) } } // (Free functions cannot have visibility.) // solhint-disable-next-line func-visibility function getFreeMemoryPointer() pure returns (MemoryPointer mPtr) { mPtr = FreeMemoryPPtr.readMemoryPointer(); } // (Free functions cannot have visibility.) // solhint-disable-next-line func-visibility function setFreeMemoryPointer(MemoryPointer mPtr) pure { FreeMemoryPPtr.write(mPtr); } library CalldataPointerLib { function lt( CalldataPointer a, CalldataPointer b ) internal pure returns (bool c) { assembly { c := lt(a, b) } } function gt( CalldataPointer a, CalldataPointer b ) internal pure returns (bool c) { assembly { c := gt(a, b) } } function eq( CalldataPointer a, CalldataPointer b ) internal pure returns (bool c) { assembly { c := eq(a, b) } } /// @dev Resolves an offset stored at `cdPtr + headOffset` to a calldata. /// pointer `cdPtr` must point to some parent object with a dynamic /// type's head stored at `cdPtr + headOffset`. function pptr( CalldataPointer cdPtr, uint256 headOffset ) internal pure returns (CalldataPointer cdPtrChild) { cdPtrChild = cdPtr.offset( cdPtr.offset(headOffset).readUint256() & OffsetOrLengthMask ); } /// @dev Resolves an offset stored at `cdPtr` to a calldata pointer. /// `cdPtr` must point to some parent object with a dynamic type as its /// first member, e.g. `struct { bytes data; }` function pptr( CalldataPointer cdPtr ) internal pure returns (CalldataPointer cdPtrChild) { cdPtrChild = cdPtr.offset(cdPtr.readUint256() & OffsetOrLengthMask); } /// @dev Returns the calldata pointer one word after `cdPtr`. function next( CalldataPointer cdPtr ) internal pure returns (CalldataPointer cdPtrNext) { assembly { cdPtrNext := add(cdPtr, _OneWord) } } /// @dev Returns the calldata pointer `_offset` bytes after `cdPtr`. function offset( CalldataPointer cdPtr, uint256 _offset ) internal pure returns (CalldataPointer cdPtrNext) { assembly { cdPtrNext := add(cdPtr, _offset) } } /// @dev Copies `size` bytes from calldata starting at `src` to memory at /// `dst`. function copy( CalldataPointer src, MemoryPointer dst, uint256 size ) internal pure { assembly { calldatacopy(dst, src, size) } } } library ReturndataPointerLib { function lt( ReturndataPointer a, ReturndataPointer b ) internal pure returns (bool c) { assembly { c := lt(a, b) } } function gt( ReturndataPointer a, ReturndataPointer b ) internal pure returns (bool c) { assembly { c := gt(a, b) } } function eq( ReturndataPointer a, ReturndataPointer b ) internal pure returns (bool c) { assembly { c := eq(a, b) } } /// @dev Resolves an offset stored at `rdPtr + headOffset` to a returndata /// pointer. `rdPtr` must point to some parent object with a dynamic /// type's head stored at `rdPtr + headOffset`. function pptr( ReturndataPointer rdPtr, uint256 headOffset ) internal pure returns (ReturndataPointer rdPtrChild) { rdPtrChild = rdPtr.offset( rdPtr.offset(headOffset).readUint256() & OffsetOrLengthMask ); } /// @dev Resolves an offset stored at `rdPtr` to a returndata pointer. /// `rdPtr` must point to some parent object with a dynamic type as its /// first member, e.g. `struct { bytes data; }` function pptr( ReturndataPointer rdPtr ) internal pure returns (ReturndataPointer rdPtrChild) { rdPtrChild = rdPtr.offset(rdPtr.readUint256() & OffsetOrLengthMask); } /// @dev Returns the returndata pointer one word after `cdPtr`. function next( ReturndataPointer rdPtr ) internal pure returns (ReturndataPointer rdPtrNext) { assembly { rdPtrNext := add(rdPtr, _OneWord) } } /// @dev Returns the returndata pointer `_offset` bytes after `cdPtr`. function offset( ReturndataPointer rdPtr, uint256 _offset ) internal pure returns (ReturndataPointer rdPtrNext) { assembly { rdPtrNext := add(rdPtr, _offset) } } /// @dev Copies `size` bytes from returndata starting at `src` to memory at /// `dst`. function copy( ReturndataPointer src, MemoryPointer dst, uint256 size ) internal pure { assembly { returndatacopy(dst, src, size) } } } library MemoryPointerLib { function copy( MemoryPointer src, MemoryPointer dst, uint256 size ) internal view { assembly { let success := staticcall( gas(), IdentityPrecompileAddress, src, size, dst, size ) if or(iszero(returndatasize()), iszero(success)) { revert(0, 0) } } } function lt( MemoryPointer a, MemoryPointer b ) internal pure returns (bool c) { assembly { c := lt(a, b) } } function gt( MemoryPointer a, MemoryPointer b ) internal pure returns (bool c) { assembly { c := gt(a, b) } } function eq( MemoryPointer a, MemoryPointer b ) internal pure returns (bool c) { assembly { c := eq(a, b) } } /// @dev Returns the memory pointer one word after `mPtr`. function next( MemoryPointer mPtr ) internal pure returns (MemoryPointer mPtrNext) { assembly { mPtrNext := add(mPtr, _OneWord) } } /// @dev Returns the memory pointer `_offset` bytes after `mPtr`. function offset( MemoryPointer mPtr, uint256 _offset ) internal pure returns (MemoryPointer mPtrNext) { assembly { mPtrNext := add(mPtr, _offset) } } /// @dev Resolves a pointer pointer at `mPtr + headOffset` to a memory /// pointer. `mPtr` must point to some parent object with a dynamic /// type's pointer stored at `mPtr + headOffset`. function pptr( MemoryPointer mPtr, uint256 headOffset ) internal pure returns (MemoryPointer mPtrChild) { mPtrChild = mPtr.offset(headOffset).readMemoryPointer(); } /// @dev Resolves a pointer pointer stored at `mPtr` to a memory pointer. /// `mPtr` must point to some parent object with a dynamic type as its /// first member, e.g. `struct { bytes data; }` function pptr( MemoryPointer mPtr ) internal pure returns (MemoryPointer mPtrChild) { mPtrChild = mPtr.readMemoryPointer(); } } library CalldataReaders { /// @dev Reads the value at `cdPtr` and applies a mask to return only the /// last 4 bytes. function readMaskedUint256( CalldataPointer cdPtr ) internal pure returns (uint256 value) { value = cdPtr.readUint256() & OffsetOrLengthMask; } /// @dev Reads the bool at `cdPtr` in calldata. function readBool( CalldataPointer cdPtr ) internal pure returns (bool value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the address at `cdPtr` in calldata. function readAddress( CalldataPointer cdPtr ) internal pure returns (address value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the bytes1 at `cdPtr` in calldata. function readBytes1( CalldataPointer cdPtr ) internal pure returns (bytes1 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the bytes2 at `cdPtr` in calldata. function readBytes2( CalldataPointer cdPtr ) internal pure returns (bytes2 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the bytes3 at `cdPtr` in calldata. function readBytes3( CalldataPointer cdPtr ) internal pure returns (bytes3 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the bytes4 at `cdPtr` in calldata. function readBytes4( CalldataPointer cdPtr ) internal pure returns (bytes4 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the bytes5 at `cdPtr` in calldata. function readBytes5( CalldataPointer cdPtr ) internal pure returns (bytes5 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the bytes6 at `cdPtr` in calldata. function readBytes6( CalldataPointer cdPtr ) internal pure returns (bytes6 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the bytes7 at `cdPtr` in calldata. function readBytes7( CalldataPointer cdPtr ) internal pure returns (bytes7 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the bytes8 at `cdPtr` in calldata. function readBytes8( CalldataPointer cdPtr ) internal pure returns (bytes8 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the bytes9 at `cdPtr` in calldata. function readBytes9( CalldataPointer cdPtr ) internal pure returns (bytes9 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the bytes10 at `cdPtr` in calldata. function readBytes10( CalldataPointer cdPtr ) internal pure returns (bytes10 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the bytes11 at `cdPtr` in calldata. function readBytes11( CalldataPointer cdPtr ) internal pure returns (bytes11 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the bytes12 at `cdPtr` in calldata. function readBytes12( CalldataPointer cdPtr ) internal pure returns (bytes12 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the bytes13 at `cdPtr` in calldata. function readBytes13( CalldataPointer cdPtr ) internal pure returns (bytes13 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the bytes14 at `cdPtr` in calldata. function readBytes14( CalldataPointer cdPtr ) internal pure returns (bytes14 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the bytes15 at `cdPtr` in calldata. function readBytes15( CalldataPointer cdPtr ) internal pure returns (bytes15 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the bytes16 at `cdPtr` in calldata. function readBytes16( CalldataPointer cdPtr ) internal pure returns (bytes16 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the bytes17 at `cdPtr` in calldata. function readBytes17( CalldataPointer cdPtr ) internal pure returns (bytes17 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the bytes18 at `cdPtr` in calldata. function readBytes18( CalldataPointer cdPtr ) internal pure returns (bytes18 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the bytes19 at `cdPtr` in calldata. function readBytes19( CalldataPointer cdPtr ) internal pure returns (bytes19 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the bytes20 at `cdPtr` in calldata. function readBytes20( CalldataPointer cdPtr ) internal pure returns (bytes20 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the bytes21 at `cdPtr` in calldata. function readBytes21( CalldataPointer cdPtr ) internal pure returns (bytes21 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the bytes22 at `cdPtr` in calldata. function readBytes22( CalldataPointer cdPtr ) internal pure returns (bytes22 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the bytes23 at `cdPtr` in calldata. function readBytes23( CalldataPointer cdPtr ) internal pure returns (bytes23 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the bytes24 at `cdPtr` in calldata. function readBytes24( CalldataPointer cdPtr ) internal pure returns (bytes24 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the bytes25 at `cdPtr` in calldata. function readBytes25( CalldataPointer cdPtr ) internal pure returns (bytes25 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the bytes26 at `cdPtr` in calldata. function readBytes26( CalldataPointer cdPtr ) internal pure returns (bytes26 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the bytes27 at `cdPtr` in calldata. function readBytes27( CalldataPointer cdPtr ) internal pure returns (bytes27 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the bytes28 at `cdPtr` in calldata. function readBytes28( CalldataPointer cdPtr ) internal pure returns (bytes28 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the bytes29 at `cdPtr` in calldata. function readBytes29( CalldataPointer cdPtr ) internal pure returns (bytes29 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the bytes30 at `cdPtr` in calldata. function readBytes30( CalldataPointer cdPtr ) internal pure returns (bytes30 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the bytes31 at `cdPtr` in calldata. function readBytes31( CalldataPointer cdPtr ) internal pure returns (bytes31 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the bytes32 at `cdPtr` in calldata. function readBytes32( CalldataPointer cdPtr ) internal pure returns (bytes32 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the uint8 at `cdPtr` in calldata. function readUint8( CalldataPointer cdPtr ) internal pure returns (uint8 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the uint16 at `cdPtr` in calldata. function readUint16( CalldataPointer cdPtr ) internal pure returns (uint16 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the uint24 at `cdPtr` in calldata. function readUint24( CalldataPointer cdPtr ) internal pure returns (uint24 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the uint32 at `cdPtr` in calldata. function readUint32( CalldataPointer cdPtr ) internal pure returns (uint32 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the uint40 at `cdPtr` in calldata. function readUint40( CalldataPointer cdPtr ) internal pure returns (uint40 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the uint48 at `cdPtr` in calldata. function readUint48( CalldataPointer cdPtr ) internal pure returns (uint48 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the uint56 at `cdPtr` in calldata. function readUint56( CalldataPointer cdPtr ) internal pure returns (uint56 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the uint64 at `cdPtr` in calldata. function readUint64( CalldataPointer cdPtr ) internal pure returns (uint64 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the uint72 at `cdPtr` in calldata. function readUint72( CalldataPointer cdPtr ) internal pure returns (uint72 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the uint80 at `cdPtr` in calldata. function readUint80( CalldataPointer cdPtr ) internal pure returns (uint80 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the uint88 at `cdPtr` in calldata. function readUint88( CalldataPointer cdPtr ) internal pure returns (uint88 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the uint96 at `cdPtr` in calldata. function readUint96( CalldataPointer cdPtr ) internal pure returns (uint96 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the uint104 at `cdPtr` in calldata. function readUint104( CalldataPointer cdPtr ) internal pure returns (uint104 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the uint112 at `cdPtr` in calldata. function readUint112( CalldataPointer cdPtr ) internal pure returns (uint112 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the uint120 at `cdPtr` in calldata. function readUint120( CalldataPointer cdPtr ) internal pure returns (uint120 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the uint128 at `cdPtr` in calldata. function readUint128( CalldataPointer cdPtr ) internal pure returns (uint128 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the uint136 at `cdPtr` in calldata. function readUint136( CalldataPointer cdPtr ) internal pure returns (uint136 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the uint144 at `cdPtr` in calldata. function readUint144( CalldataPointer cdPtr ) internal pure returns (uint144 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the uint152 at `cdPtr` in calldata. function readUint152( CalldataPointer cdPtr ) internal pure returns (uint152 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the uint160 at `cdPtr` in calldata. function readUint160( CalldataPointer cdPtr ) internal pure returns (uint160 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the uint168 at `cdPtr` in calldata. function readUint168( CalldataPointer cdPtr ) internal pure returns (uint168 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the uint176 at `cdPtr` in calldata. function readUint176( CalldataPointer cdPtr ) internal pure returns (uint176 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the uint184 at `cdPtr` in calldata. function readUint184( CalldataPointer cdPtr ) internal pure returns (uint184 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the uint192 at `cdPtr` in calldata. function readUint192( CalldataPointer cdPtr ) internal pure returns (uint192 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the uint200 at `cdPtr` in calldata. function readUint200( CalldataPointer cdPtr ) internal pure returns (uint200 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the uint208 at `cdPtr` in calldata. function readUint208( CalldataPointer cdPtr ) internal pure returns (uint208 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the uint216 at `cdPtr` in calldata. function readUint216( CalldataPointer cdPtr ) internal pure returns (uint216 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the uint224 at `cdPtr` in calldata. function readUint224( CalldataPointer cdPtr ) internal pure returns (uint224 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the uint232 at `cdPtr` in calldata. function readUint232( CalldataPointer cdPtr ) internal pure returns (uint232 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the uint240 at `cdPtr` in calldata. function readUint240( CalldataPointer cdPtr ) internal pure returns (uint240 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the uint248 at `cdPtr` in calldata. function readUint248( CalldataPointer cdPtr ) internal pure returns (uint248 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the uint256 at `cdPtr` in calldata. function readUint256( CalldataPointer cdPtr ) internal pure returns (uint256 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the int8 at `cdPtr` in calldata. function readInt8( CalldataPointer cdPtr ) internal pure returns (int8 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the int16 at `cdPtr` in calldata. function readInt16( CalldataPointer cdPtr ) internal pure returns (int16 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the int24 at `cdPtr` in calldata. function readInt24( CalldataPointer cdPtr ) internal pure returns (int24 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the int32 at `cdPtr` in calldata. function readInt32( CalldataPointer cdPtr ) internal pure returns (int32 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the int40 at `cdPtr` in calldata. function readInt40( CalldataPointer cdPtr ) internal pure returns (int40 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the int48 at `cdPtr` in calldata. function readInt48( CalldataPointer cdPtr ) internal pure returns (int48 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the int56 at `cdPtr` in calldata. function readInt56( CalldataPointer cdPtr ) internal pure returns (int56 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the int64 at `cdPtr` in calldata. function readInt64( CalldataPointer cdPtr ) internal pure returns (int64 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the int72 at `cdPtr` in calldata. function readInt72( CalldataPointer cdPtr ) internal pure returns (int72 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the int80 at `cdPtr` in calldata. function readInt80( CalldataPointer cdPtr ) internal pure returns (int80 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the int88 at `cdPtr` in calldata. function readInt88( CalldataPointer cdPtr ) internal pure returns (int88 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the int96 at `cdPtr` in calldata. function readInt96( CalldataPointer cdPtr ) internal pure returns (int96 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the int104 at `cdPtr` in calldata. function readInt104( CalldataPointer cdPtr ) internal pure returns (int104 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the int112 at `cdPtr` in calldata. function readInt112( CalldataPointer cdPtr ) internal pure returns (int112 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the int120 at `cdPtr` in calldata. function readInt120( CalldataPointer cdPtr ) internal pure returns (int120 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the int128 at `cdPtr` in calldata. function readInt128( CalldataPointer cdPtr ) internal pure returns (int128 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the int136 at `cdPtr` in calldata. function readInt136( CalldataPointer cdPtr ) internal pure returns (int136 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the int144 at `cdPtr` in calldata. function readInt144( CalldataPointer cdPtr ) internal pure returns (int144 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the int152 at `cdPtr` in calldata. function readInt152( CalldataPointer cdPtr ) internal pure returns (int152 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the int160 at `cdPtr` in calldata. function readInt160( CalldataPointer cdPtr ) internal pure returns (int160 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the int168 at `cdPtr` in calldata. function readInt168( CalldataPointer cdPtr ) internal pure returns (int168 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the int176 at `cdPtr` in calldata. function readInt176( CalldataPointer cdPtr ) internal pure returns (int176 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the int184 at `cdPtr` in calldata. function readInt184( CalldataPointer cdPtr ) internal pure returns (int184 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the int192 at `cdPtr` in calldata. function readInt192( CalldataPointer cdPtr ) internal pure returns (int192 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the int200 at `cdPtr` in calldata. function readInt200( CalldataPointer cdPtr ) internal pure returns (int200 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the int208 at `cdPtr` in calldata. function readInt208( CalldataPointer cdPtr ) internal pure returns (int208 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the int216 at `cdPtr` in calldata. function readInt216( CalldataPointer cdPtr ) internal pure returns (int216 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the int224 at `cdPtr` in calldata. function readInt224( CalldataPointer cdPtr ) internal pure returns (int224 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the int232 at `cdPtr` in calldata. function readInt232( CalldataPointer cdPtr ) internal pure returns (int232 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the int240 at `cdPtr` in calldata. function readInt240( CalldataPointer cdPtr ) internal pure returns (int240 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the int248 at `cdPtr` in calldata. function readInt248( CalldataPointer cdPtr ) internal pure returns (int248 value) { assembly { value := calldataload(cdPtr) } } /// @dev Reads the int256 at `cdPtr` in calldata. function readInt256( CalldataPointer cdPtr ) internal pure returns (int256 value) { assembly { value := calldataload(cdPtr) } } } library ReturndataReaders { /// @dev Reads value at `rdPtr` & applies a mask to return only last 4 bytes function readMaskedUint256( ReturndataPointer rdPtr ) internal pure returns (uint256 value) { value = rdPtr.readUint256() & OffsetOrLengthMask; } /// @dev Reads the bool at `rdPtr` in returndata. function readBool( ReturndataPointer rdPtr ) internal pure returns (bool value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the address at `rdPtr` in returndata. function readAddress( ReturndataPointer rdPtr ) internal pure returns (address value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the bytes1 at `rdPtr` in returndata. function readBytes1( ReturndataPointer rdPtr ) internal pure returns (bytes1 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the bytes2 at `rdPtr` in returndata. function readBytes2( ReturndataPointer rdPtr ) internal pure returns (bytes2 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the bytes3 at `rdPtr` in returndata. function readBytes3( ReturndataPointer rdPtr ) internal pure returns (bytes3 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the bytes4 at `rdPtr` in returndata. function readBytes4( ReturndataPointer rdPtr ) internal pure returns (bytes4 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the bytes5 at `rdPtr` in returndata. function readBytes5( ReturndataPointer rdPtr ) internal pure returns (bytes5 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the bytes6 at `rdPtr` in returndata. function readBytes6( ReturndataPointer rdPtr ) internal pure returns (bytes6 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the bytes7 at `rdPtr` in returndata. function readBytes7( ReturndataPointer rdPtr ) internal pure returns (bytes7 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the bytes8 at `rdPtr` in returndata. function readBytes8( ReturndataPointer rdPtr ) internal pure returns (bytes8 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the bytes9 at `rdPtr` in returndata. function readBytes9( ReturndataPointer rdPtr ) internal pure returns (bytes9 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the bytes10 at `rdPtr` in returndata. function readBytes10( ReturndataPointer rdPtr ) internal pure returns (bytes10 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the bytes11 at `rdPtr` in returndata. function readBytes11( ReturndataPointer rdPtr ) internal pure returns (bytes11 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the bytes12 at `rdPtr` in returndata. function readBytes12( ReturndataPointer rdPtr ) internal pure returns (bytes12 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the bytes13 at `rdPtr` in returndata. function readBytes13( ReturndataPointer rdPtr ) internal pure returns (bytes13 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the bytes14 at `rdPtr` in returndata. function readBytes14( ReturndataPointer rdPtr ) internal pure returns (bytes14 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the bytes15 at `rdPtr` in returndata. function readBytes15( ReturndataPointer rdPtr ) internal pure returns (bytes15 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the bytes16 at `rdPtr` in returndata. function readBytes16( ReturndataPointer rdPtr ) internal pure returns (bytes16 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the bytes17 at `rdPtr` in returndata. function readBytes17( ReturndataPointer rdPtr ) internal pure returns (bytes17 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the bytes18 at `rdPtr` in returndata. function readBytes18( ReturndataPointer rdPtr ) internal pure returns (bytes18 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the bytes19 at `rdPtr` in returndata. function readBytes19( ReturndataPointer rdPtr ) internal pure returns (bytes19 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the bytes20 at `rdPtr` in returndata. function readBytes20( ReturndataPointer rdPtr ) internal pure returns (bytes20 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the bytes21 at `rdPtr` in returndata. function readBytes21( ReturndataPointer rdPtr ) internal pure returns (bytes21 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the bytes22 at `rdPtr` in returndata. function readBytes22( ReturndataPointer rdPtr ) internal pure returns (bytes22 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the bytes23 at `rdPtr` in returndata. function readBytes23( ReturndataPointer rdPtr ) internal pure returns (bytes23 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the bytes24 at `rdPtr` in returndata. function readBytes24( ReturndataPointer rdPtr ) internal pure returns (bytes24 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the bytes25 at `rdPtr` in returndata. function readBytes25( ReturndataPointer rdPtr ) internal pure returns (bytes25 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the bytes26 at `rdPtr` in returndata. function readBytes26( ReturndataPointer rdPtr ) internal pure returns (bytes26 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the bytes27 at `rdPtr` in returndata. function readBytes27( ReturndataPointer rdPtr ) internal pure returns (bytes27 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the bytes28 at `rdPtr` in returndata. function readBytes28( ReturndataPointer rdPtr ) internal pure returns (bytes28 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the bytes29 at `rdPtr` in returndata. function readBytes29( ReturndataPointer rdPtr ) internal pure returns (bytes29 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the bytes30 at `rdPtr` in returndata. function readBytes30( ReturndataPointer rdPtr ) internal pure returns (bytes30 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the bytes31 at `rdPtr` in returndata. function readBytes31( ReturndataPointer rdPtr ) internal pure returns (bytes31 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the bytes32 at `rdPtr` in returndata. function readBytes32( ReturndataPointer rdPtr ) internal pure returns (bytes32 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the uint8 at `rdPtr` in returndata. function readUint8( ReturndataPointer rdPtr ) internal pure returns (uint8 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the uint16 at `rdPtr` in returndata. function readUint16( ReturndataPointer rdPtr ) internal pure returns (uint16 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the uint24 at `rdPtr` in returndata. function readUint24( ReturndataPointer rdPtr ) internal pure returns (uint24 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the uint32 at `rdPtr` in returndata. function readUint32( ReturndataPointer rdPtr ) internal pure returns (uint32 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the uint40 at `rdPtr` in returndata. function readUint40( ReturndataPointer rdPtr ) internal pure returns (uint40 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the uint48 at `rdPtr` in returndata. function readUint48( ReturndataPointer rdPtr ) internal pure returns (uint48 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the uint56 at `rdPtr` in returndata. function readUint56( ReturndataPointer rdPtr ) internal pure returns (uint56 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the uint64 at `rdPtr` in returndata. function readUint64( ReturndataPointer rdPtr ) internal pure returns (uint64 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the uint72 at `rdPtr` in returndata. function readUint72( ReturndataPointer rdPtr ) internal pure returns (uint72 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the uint80 at `rdPtr` in returndata. function readUint80( ReturndataPointer rdPtr ) internal pure returns (uint80 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the uint88 at `rdPtr` in returndata. function readUint88( ReturndataPointer rdPtr ) internal pure returns (uint88 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the uint96 at `rdPtr` in returndata. function readUint96( ReturndataPointer rdPtr ) internal pure returns (uint96 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the uint104 at `rdPtr` in returndata. function readUint104( ReturndataPointer rdPtr ) internal pure returns (uint104 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the uint112 at `rdPtr` in returndata. function readUint112( ReturndataPointer rdPtr ) internal pure returns (uint112 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the uint120 at `rdPtr` in returndata. function readUint120( ReturndataPointer rdPtr ) internal pure returns (uint120 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the uint128 at `rdPtr` in returndata. function readUint128( ReturndataPointer rdPtr ) internal pure returns (uint128 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the uint136 at `rdPtr` in returndata. function readUint136( ReturndataPointer rdPtr ) internal pure returns (uint136 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the uint144 at `rdPtr` in returndata. function readUint144( ReturndataPointer rdPtr ) internal pure returns (uint144 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the uint152 at `rdPtr` in returndata. function readUint152( ReturndataPointer rdPtr ) internal pure returns (uint152 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the uint160 at `rdPtr` in returndata. function readUint160( ReturndataPointer rdPtr ) internal pure returns (uint160 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the uint168 at `rdPtr` in returndata. function readUint168( ReturndataPointer rdPtr ) internal pure returns (uint168 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the uint176 at `rdPtr` in returndata. function readUint176( ReturndataPointer rdPtr ) internal pure returns (uint176 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the uint184 at `rdPtr` in returndata. function readUint184( ReturndataPointer rdPtr ) internal pure returns (uint184 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the uint192 at `rdPtr` in returndata. function readUint192( ReturndataPointer rdPtr ) internal pure returns (uint192 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the uint200 at `rdPtr` in returndata. function readUint200( ReturndataPointer rdPtr ) internal pure returns (uint200 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the uint208 at `rdPtr` in returndata. function readUint208( ReturndataPointer rdPtr ) internal pure returns (uint208 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the uint216 at `rdPtr` in returndata. function readUint216( ReturndataPointer rdPtr ) internal pure returns (uint216 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the uint224 at `rdPtr` in returndata. function readUint224( ReturndataPointer rdPtr ) internal pure returns (uint224 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the uint232 at `rdPtr` in returndata. function readUint232( ReturndataPointer rdPtr ) internal pure returns (uint232 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the uint240 at `rdPtr` in returndata. function readUint240( ReturndataPointer rdPtr ) internal pure returns (uint240 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the uint248 at `rdPtr` in returndata. function readUint248( ReturndataPointer rdPtr ) internal pure returns (uint248 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the uint256 at `rdPtr` in returndata. function readUint256( ReturndataPointer rdPtr ) internal pure returns (uint256 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the int8 at `rdPtr` in returndata. function readInt8( ReturndataPointer rdPtr ) internal pure returns (int8 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the int16 at `rdPtr` in returndata. function readInt16( ReturndataPointer rdPtr ) internal pure returns (int16 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the int24 at `rdPtr` in returndata. function readInt24( ReturndataPointer rdPtr ) internal pure returns (int24 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the int32 at `rdPtr` in returndata. function readInt32( ReturndataPointer rdPtr ) internal pure returns (int32 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the int40 at `rdPtr` in returndata. function readInt40( ReturndataPointer rdPtr ) internal pure returns (int40 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the int48 at `rdPtr` in returndata. function readInt48( ReturndataPointer rdPtr ) internal pure returns (int48 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the int56 at `rdPtr` in returndata. function readInt56( ReturndataPointer rdPtr ) internal pure returns (int56 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the int64 at `rdPtr` in returndata. function readInt64( ReturndataPointer rdPtr ) internal pure returns (int64 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the int72 at `rdPtr` in returndata. function readInt72( ReturndataPointer rdPtr ) internal pure returns (int72 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the int80 at `rdPtr` in returndata. function readInt80( ReturndataPointer rdPtr ) internal pure returns (int80 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the int88 at `rdPtr` in returndata. function readInt88( ReturndataPointer rdPtr ) internal pure returns (int88 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the int96 at `rdPtr` in returndata. function readInt96( ReturndataPointer rdPtr ) internal pure returns (int96 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the int104 at `rdPtr` in returndata. function readInt104( ReturndataPointer rdPtr ) internal pure returns (int104 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the int112 at `rdPtr` in returndata. function readInt112( ReturndataPointer rdPtr ) internal pure returns (int112 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the int120 at `rdPtr` in returndata. function readInt120( ReturndataPointer rdPtr ) internal pure returns (int120 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the int128 at `rdPtr` in returndata. function readInt128( ReturndataPointer rdPtr ) internal pure returns (int128 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the int136 at `rdPtr` in returndata. function readInt136( ReturndataPointer rdPtr ) internal pure returns (int136 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the int144 at `rdPtr` in returndata. function readInt144( ReturndataPointer rdPtr ) internal pure returns (int144 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the int152 at `rdPtr` in returndata. function readInt152( ReturndataPointer rdPtr ) internal pure returns (int152 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the int160 at `rdPtr` in returndata. function readInt160( ReturndataPointer rdPtr ) internal pure returns (int160 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the int168 at `rdPtr` in returndata. function readInt168( ReturndataPointer rdPtr ) internal pure returns (int168 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the int176 at `rdPtr` in returndata. function readInt176( ReturndataPointer rdPtr ) internal pure returns (int176 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the int184 at `rdPtr` in returndata. function readInt184( ReturndataPointer rdPtr ) internal pure returns (int184 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the int192 at `rdPtr` in returndata. function readInt192( ReturndataPointer rdPtr ) internal pure returns (int192 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the int200 at `rdPtr` in returndata. function readInt200( ReturndataPointer rdPtr ) internal pure returns (int200 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the int208 at `rdPtr` in returndata. function readInt208( ReturndataPointer rdPtr ) internal pure returns (int208 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the int216 at `rdPtr` in returndata. function readInt216( ReturndataPointer rdPtr ) internal pure returns (int216 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the int224 at `rdPtr` in returndata. function readInt224( ReturndataPointer rdPtr ) internal pure returns (int224 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the int232 at `rdPtr` in returndata. function readInt232( ReturndataPointer rdPtr ) internal pure returns (int232 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the int240 at `rdPtr` in returndata. function readInt240( ReturndataPointer rdPtr ) internal pure returns (int240 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the int248 at `rdPtr` in returndata. function readInt248( ReturndataPointer rdPtr ) internal pure returns (int248 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } /// @dev Reads the int256 at `rdPtr` in returndata. function readInt256( ReturndataPointer rdPtr ) internal pure returns (int256 value) { assembly { returndatacopy(0, rdPtr, _OneWord) value := mload(0) } } } library MemoryReaders { /// @dev Reads the memory pointer at `mPtr` in memory. function readMemoryPointer( MemoryPointer mPtr ) internal pure returns (MemoryPointer value) { assembly { value := mload(mPtr) } } /// @dev Reads value at `mPtr` & applies a mask to return only last 4 bytes function readMaskedUint256( MemoryPointer mPtr ) internal pure returns (uint256 value) { value = mPtr.readUint256() & OffsetOrLengthMask; } /// @dev Reads the bool at `mPtr` in memory. function readBool(MemoryPointer mPtr) internal pure returns (bool value) { assembly { value := mload(mPtr) } } /// @dev Reads the address at `mPtr` in memory. function readAddress( MemoryPointer mPtr ) internal pure returns (address value) { assembly { value := mload(mPtr) } } /// @dev Reads the bytes1 at `mPtr` in memory. function readBytes1( MemoryPointer mPtr ) internal pure returns (bytes1 value) { assembly { value := mload(mPtr) } } /// @dev Reads the bytes2 at `mPtr` in memory. function readBytes2( MemoryPointer mPtr ) internal pure returns (bytes2 value) { assembly { value := mload(mPtr) } } /// @dev Reads the bytes3 at `mPtr` in memory. function readBytes3( MemoryPointer mPtr ) internal pure returns (bytes3 value) { assembly { value := mload(mPtr) } } /// @dev Reads the bytes4 at `mPtr` in memory. function readBytes4( MemoryPointer mPtr ) internal pure returns (bytes4 value) { assembly { value := mload(mPtr) } } /// @dev Reads the bytes5 at `mPtr` in memory. function readBytes5( MemoryPointer mPtr ) internal pure returns (bytes5 value) { assembly { value := mload(mPtr) } } /// @dev Reads the bytes6 at `mPtr` in memory. function readBytes6( MemoryPointer mPtr ) internal pure returns (bytes6 value) { assembly { value := mload(mPtr) } } /// @dev Reads the bytes7 at `mPtr` in memory. function readBytes7( MemoryPointer mPtr ) internal pure returns (bytes7 value) { assembly { value := mload(mPtr) } } /// @dev Reads the bytes8 at `mPtr` in memory. function readBytes8( MemoryPointer mPtr ) internal pure returns (bytes8 value) { assembly { value := mload(mPtr) } } /// @dev Reads the bytes9 at `mPtr` in memory. function readBytes9( MemoryPointer mPtr ) internal pure returns (bytes9 value) { assembly { value := mload(mPtr) } } /// @dev Reads the bytes10 at `mPtr` in memory. function readBytes10( MemoryPointer mPtr ) internal pure returns (bytes10 value) { assembly { value := mload(mPtr) } } /// @dev Reads the bytes11 at `mPtr` in memory. function readBytes11( MemoryPointer mPtr ) internal pure returns (bytes11 value) { assembly { value := mload(mPtr) } } /// @dev Reads the bytes12 at `mPtr` in memory. function readBytes12( MemoryPointer mPtr ) internal pure returns (bytes12 value) { assembly { value := mload(mPtr) } } /// @dev Reads the bytes13 at `mPtr` in memory. function readBytes13( MemoryPointer mPtr ) internal pure returns (bytes13 value) { assembly { value := mload(mPtr) } } /// @dev Reads the bytes14 at `mPtr` in memory. function readBytes14( MemoryPointer mPtr ) internal pure returns (bytes14 value) { assembly { value := mload(mPtr) } } /// @dev Reads the bytes15 at `mPtr` in memory. function readBytes15( MemoryPointer mPtr ) internal pure returns (bytes15 value) { assembly { value := mload(mPtr) } } /// @dev Reads the bytes16 at `mPtr` in memory. function readBytes16( MemoryPointer mPtr ) internal pure returns (bytes16 value) { assembly { value := mload(mPtr) } } /// @dev Reads the bytes17 at `mPtr` in memory. function readBytes17( MemoryPointer mPtr ) internal pure returns (bytes17 value) { assembly { value := mload(mPtr) } } /// @dev Reads the bytes18 at `mPtr` in memory. function readBytes18( MemoryPointer mPtr ) internal pure returns (bytes18 value) { assembly { value := mload(mPtr) } } /// @dev Reads the bytes19 at `mPtr` in memory. function readBytes19( MemoryPointer mPtr ) internal pure returns (bytes19 value) { assembly { value := mload(mPtr) } } /// @dev Reads the bytes20 at `mPtr` in memory. function readBytes20( MemoryPointer mPtr ) internal pure returns (bytes20 value) { assembly { value := mload(mPtr) } } /// @dev Reads the bytes21 at `mPtr` in memory. function readBytes21( MemoryPointer mPtr ) internal pure returns (bytes21 value) { assembly { value := mload(mPtr) } } /// @dev Reads the bytes22 at `mPtr` in memory. function readBytes22( MemoryPointer mPtr ) internal pure returns (bytes22 value) { assembly { value := mload(mPtr) } } /// @dev Reads the bytes23 at `mPtr` in memory. function readBytes23( MemoryPointer mPtr ) internal pure returns (bytes23 value) { assembly { value := mload(mPtr) } } /// @dev Reads the bytes24 at `mPtr` in memory. function readBytes24( MemoryPointer mPtr ) internal pure returns (bytes24 value) { assembly { value := mload(mPtr) } } /// @dev Reads the bytes25 at `mPtr` in memory. function readBytes25( MemoryPointer mPtr ) internal pure returns (bytes25 value) { assembly { value := mload(mPtr) } } /// @dev Reads the bytes26 at `mPtr` in memory. function readBytes26( MemoryPointer mPtr ) internal pure returns (bytes26 value) { assembly { value := mload(mPtr) } } /// @dev Reads the bytes27 at `mPtr` in memory. function readBytes27( MemoryPointer mPtr ) internal pure returns (bytes27 value) { assembly { value := mload(mPtr) } } /// @dev Reads the bytes28 at `mPtr` in memory. function readBytes28( MemoryPointer mPtr ) internal pure returns (bytes28 value) { assembly { value := mload(mPtr) } } /// @dev Reads the bytes29 at `mPtr` in memory. function readBytes29( MemoryPointer mPtr ) internal pure returns (bytes29 value) { assembly { value := mload(mPtr) } } /// @dev Reads the bytes30 at `mPtr` in memory. function readBytes30( MemoryPointer mPtr ) internal pure returns (bytes30 value) { assembly { value := mload(mPtr) } } /// @dev Reads the bytes31 at `mPtr` in memory. function readBytes31( MemoryPointer mPtr ) internal pure returns (bytes31 value) { assembly { value := mload(mPtr) } } /// @dev Reads the bytes32 at `mPtr` in memory. function readBytes32( MemoryPointer mPtr ) internal pure returns (bytes32 value) { assembly { value := mload(mPtr) } } /// @dev Reads the uint8 at `mPtr` in memory. function readUint8(MemoryPointer mPtr) internal pure returns (uint8 value) { assembly { value := mload(mPtr) } } /// @dev Reads the uint16 at `mPtr` in memory. function readUint16( MemoryPointer mPtr ) internal pure returns (uint16 value) { assembly { value := mload(mPtr) } } /// @dev Reads the uint24 at `mPtr` in memory. function readUint24( MemoryPointer mPtr ) internal pure returns (uint24 value) { assembly { value := mload(mPtr) } } /// @dev Reads the uint32 at `mPtr` in memory. function readUint32( MemoryPointer mPtr ) internal pure returns (uint32 value) { assembly { value := mload(mPtr) } } /// @dev Reads the uint40 at `mPtr` in memory. function readUint40( MemoryPointer mPtr ) internal pure returns (uint40 value) { assembly { value := mload(mPtr) } } /// @dev Reads the uint48 at `mPtr` in memory. function readUint48( MemoryPointer mPtr ) internal pure returns (uint48 value) { assembly { value := mload(mPtr) } } /// @dev Reads the uint56 at `mPtr` in memory. function readUint56( MemoryPointer mPtr ) internal pure returns (uint56 value) { assembly { value := mload(mPtr) } } /// @dev Reads the uint64 at `mPtr` in memory. function readUint64( MemoryPointer mPtr ) internal pure returns (uint64 value) { assembly { value := mload(mPtr) } } /// @dev Reads the uint72 at `mPtr` in memory. function readUint72( MemoryPointer mPtr ) internal pure returns (uint72 value) { assembly { value := mload(mPtr) } } /// @dev Reads the uint80 at `mPtr` in memory. function readUint80( MemoryPointer mPtr ) internal pure returns (uint80 value) { assembly { value := mload(mPtr) } } /// @dev Reads the uint88 at `mPtr` in memory. function readUint88( MemoryPointer mPtr ) internal pure returns (uint88 value) { assembly { value := mload(mPtr) } } /// @dev Reads the uint96 at `mPtr` in memory. function readUint96( MemoryPointer mPtr ) internal pure returns (uint96 value) { assembly { value := mload(mPtr) } } /// @dev Reads the uint104 at `mPtr` in memory. function readUint104( MemoryPointer mPtr ) internal pure returns (uint104 value) { assembly { value := mload(mPtr) } } /// @dev Reads the uint112 at `mPtr` in memory. function readUint112( MemoryPointer mPtr ) internal pure returns (uint112 value) { assembly { value := mload(mPtr) } } /// @dev Reads the uint120 at `mPtr` in memory. function readUint120( MemoryPointer mPtr ) internal pure returns (uint120 value) { assembly { value := mload(mPtr) } } /// @dev Reads the uint128 at `mPtr` in memory. function readUint128( MemoryPointer mPtr ) internal pure returns (uint128 value) { assembly { value := mload(mPtr) } } /// @dev Reads the uint136 at `mPtr` in memory. function readUint136( MemoryPointer mPtr ) internal pure returns (uint136 value) { assembly { value := mload(mPtr) } } /// @dev Reads the uint144 at `mPtr` in memory. function readUint144( MemoryPointer mPtr ) internal pure returns (uint144 value) { assembly { value := mload(mPtr) } } /// @dev Reads the uint152 at `mPtr` in memory. function readUint152( MemoryPointer mPtr ) internal pure returns (uint152 value) { assembly { value := mload(mPtr) } } /// @dev Reads the uint160 at `mPtr` in memory. function readUint160( MemoryPointer mPtr ) internal pure returns (uint160 value) { assembly { value := mload(mPtr) } } /// @dev Reads the uint168 at `mPtr` in memory. function readUint168( MemoryPointer mPtr ) internal pure returns (uint168 value) { assembly { value := mload(mPtr) } } /// @dev Reads the uint176 at `mPtr` in memory. function readUint176( MemoryPointer mPtr ) internal pure returns (uint176 value) { assembly { value := mload(mPtr) } } /// @dev Reads the uint184 at `mPtr` in memory. function readUint184( MemoryPointer mPtr ) internal pure returns (uint184 value) { assembly { value := mload(mPtr) } } /// @dev Reads the uint192 at `mPtr` in memory. function readUint192( MemoryPointer mPtr ) internal pure returns (uint192 value) { assembly { value := mload(mPtr) } } /// @dev Reads the uint200 at `mPtr` in memory. function readUint200( MemoryPointer mPtr ) internal pure returns (uint200 value) { assembly { value := mload(mPtr) } } /// @dev Reads the uint208 at `mPtr` in memory. function readUint208( MemoryPointer mPtr ) internal pure returns (uint208 value) { assembly { value := mload(mPtr) } } /// @dev Reads the uint216 at `mPtr` in memory. function readUint216( MemoryPointer mPtr ) internal pure returns (uint216 value) { assembly { value := mload(mPtr) } } /// @dev Reads the uint224 at `mPtr` in memory. function readUint224( MemoryPointer mPtr ) internal pure returns (uint224 value) { assembly { value := mload(mPtr) } } /// @dev Reads the uint232 at `mPtr` in memory. function readUint232( MemoryPointer mPtr ) internal pure returns (uint232 value) { assembly { value := mload(mPtr) } } /// @dev Reads the uint240 at `mPtr` in memory. function readUint240( MemoryPointer mPtr ) internal pure returns (uint240 value) { assembly { value := mload(mPtr) } } /// @dev Reads the uint248 at `mPtr` in memory. function readUint248( MemoryPointer mPtr ) internal pure returns (uint248 value) { assembly { value := mload(mPtr) } } /// @dev Reads the uint256 at `mPtr` in memory. function readUint256( MemoryPointer mPtr ) internal pure returns (uint256 value) { assembly { value := mload(mPtr) } } /// @dev Reads the int8 at `mPtr` in memory. function readInt8(MemoryPointer mPtr) internal pure returns (int8 value) { assembly { value := mload(mPtr) } } /// @dev Reads the int16 at `mPtr` in memory. function readInt16(MemoryPointer mPtr) internal pure returns (int16 value) { assembly { value := mload(mPtr) } } /// @dev Reads the int24 at `mPtr` in memory. function readInt24(MemoryPointer mPtr) internal pure returns (int24 value) { assembly { value := mload(mPtr) } } /// @dev Reads the int32 at `mPtr` in memory. function readInt32(MemoryPointer mPtr) internal pure returns (int32 value) { assembly { value := mload(mPtr) } } /// @dev Reads the int40 at `mPtr` in memory. function readInt40(MemoryPointer mPtr) internal pure returns (int40 value) { assembly { value := mload(mPtr) } } /// @dev Reads the int48 at `mPtr` in memory. function readInt48(MemoryPointer mPtr) internal pure returns (int48 value) { assembly { value := mload(mPtr) } } /// @dev Reads the int56 at `mPtr` in memory. function readInt56(MemoryPointer mPtr) internal pure returns (int56 value) { assembly { value := mload(mPtr) } } /// @dev Reads the int64 at `mPtr` in memory. function readInt64(MemoryPointer mPtr) internal pure returns (int64 value) { assembly { value := mload(mPtr) } } /// @dev Reads the int72 at `mPtr` in memory. function readInt72(MemoryPointer mPtr) internal pure returns (int72 value) { assembly { value := mload(mPtr) } } /// @dev Reads the int80 at `mPtr` in memory. function readInt80(MemoryPointer mPtr) internal pure returns (int80 value) { assembly { value := mload(mPtr) } } /// @dev Reads the int88 at `mPtr` in memory. function readInt88(MemoryPointer mPtr) internal pure returns (int88 value) { assembly { value := mload(mPtr) } } /// @dev Reads the int96 at `mPtr` in memory. function readInt96(MemoryPointer mPtr) internal pure returns (int96 value) { assembly { value := mload(mPtr) } } /// @dev Reads the int104 at `mPtr` in memory. function readInt104( MemoryPointer mPtr ) internal pure returns (int104 value) { assembly { value := mload(mPtr) } } /// @dev Reads the int112 at `mPtr` in memory. function readInt112( MemoryPointer mPtr ) internal pure returns (int112 value) { assembly { value := mload(mPtr) } } /// @dev Reads the int120 at `mPtr` in memory. function readInt120( MemoryPointer mPtr ) internal pure returns (int120 value) { assembly { value := mload(mPtr) } } /// @dev Reads the int128 at `mPtr` in memory. function readInt128( MemoryPointer mPtr ) internal pure returns (int128 value) { assembly { value := mload(mPtr) } } /// @dev Reads the int136 at `mPtr` in memory. function readInt136( MemoryPointer mPtr ) internal pure returns (int136 value) { assembly { value := mload(mPtr) } } /// @dev Reads the int144 at `mPtr` in memory. function readInt144( MemoryPointer mPtr ) internal pure returns (int144 value) { assembly { value := mload(mPtr) } } /// @dev Reads the int152 at `mPtr` in memory. function readInt152( MemoryPointer mPtr ) internal pure returns (int152 value) { assembly { value := mload(mPtr) } } /// @dev Reads the int160 at `mPtr` in memory. function readInt160( MemoryPointer mPtr ) internal pure returns (int160 value) { assembly { value := mload(mPtr) } } /// @dev Reads the int168 at `mPtr` in memory. function readInt168( MemoryPointer mPtr ) internal pure returns (int168 value) { assembly { value := mload(mPtr) } } /// @dev Reads the int176 at `mPtr` in memory. function readInt176( MemoryPointer mPtr ) internal pure returns (int176 value) { assembly { value := mload(mPtr) } } /// @dev Reads the int184 at `mPtr` in memory. function readInt184( MemoryPointer mPtr ) internal pure returns (int184 value) { assembly { value := mload(mPtr) } } /// @dev Reads the int192 at `mPtr` in memory. function readInt192( MemoryPointer mPtr ) internal pure returns (int192 value) { assembly { value := mload(mPtr) } } /// @dev Reads the int200 at `mPtr` in memory. function readInt200( MemoryPointer mPtr ) internal pure returns (int200 value) { assembly { value := mload(mPtr) } } /// @dev Reads the int208 at `mPtr` in memory. function readInt208( MemoryPointer mPtr ) internal pure returns (int208 value) { assembly { value := mload(mPtr) } } /// @dev Reads the int216 at `mPtr` in memory. function readInt216( MemoryPointer mPtr ) internal pure returns (int216 value) { assembly { value := mload(mPtr) } } /// @dev Reads the int224 at `mPtr` in memory. function readInt224( MemoryPointer mPtr ) internal pure returns (int224 value) { assembly { value := mload(mPtr) } } /// @dev Reads the int232 at `mPtr` in memory. function readInt232( MemoryPointer mPtr ) internal pure returns (int232 value) { assembly { value := mload(mPtr) } } /// @dev Reads the int240 at `mPtr` in memory. function readInt240( MemoryPointer mPtr ) internal pure returns (int240 value) { assembly { value := mload(mPtr) } } /// @dev Reads the int248 at `mPtr` in memory. function readInt248( MemoryPointer mPtr ) internal pure returns (int248 value) { assembly { value := mload(mPtr) } } /// @dev Reads the int256 at `mPtr` in memory. function readInt256( MemoryPointer mPtr ) internal pure returns (int256 value) { assembly { value := mload(mPtr) } } } library MemoryWriters { /// @dev Writes `valuePtr` to memory at `mPtr`. function write(MemoryPointer mPtr, MemoryPointer valuePtr) internal pure { assembly { mstore(mPtr, valuePtr) } } /// @dev Writes a boolean `value` to `mPtr` in memory. function write(MemoryPointer mPtr, bool value) internal pure { assembly { mstore(mPtr, value) } } /// @dev Writes an address `value` to `mPtr` in memory. function write(MemoryPointer mPtr, address value) internal pure { assembly { mstore(mPtr, value) } } /// @dev Writes a bytes32 `value` to `mPtr` in memory. /// Separate name to disambiguate literal write parameters. function writeBytes32(MemoryPointer mPtr, bytes32 value) internal pure { assembly { mstore(mPtr, value) } } /// @dev Writes a uint256 `value` to `mPtr` in memory. function write(MemoryPointer mPtr, uint256 value) internal pure { assembly { mstore(mPtr, value) } } /// @dev Writes an int256 `value` to `mPtr` in memory. /// Separate name to disambiguate literal write parameters. function writeInt(MemoryPointer mPtr, int256 value) internal pure { assembly { mstore(mPtr, value) } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.13; /** * @title ReentrancyErrors * @author 0age * @notice ReentrancyErrors contains errors related to reentrancy. */ interface ReentrancyErrors { /** * @dev Revert with an error when a caller attempts to reenter a protected * function. */ error NoReentrantCalls(); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.13; import { AdvancedOrder, BasicOrderParameters, CriteriaResolver, Execution, Fulfillment, FulfillmentComponent, Order, OrderComponents } from "../lib/ConsiderationStructs.sol"; /** * @title SeaportInterface * @author 0age * @custom:version 1.4 * @notice Seaport is a generalized native token/ERC20/ERC721/ERC1155 * marketplace. It minimizes external calls to the greatest extent * possible and provides lightweight methods for common routes as well * as more flexible methods for composing advanced orders. * * @dev SeaportInterface contains all external function interfaces for Seaport. */ interface SeaportInterface { /** * @notice Fulfill an order offering an ERC721 token by supplying Ether (or * the native token for the given chain) as consideration for the * order. An arbitrary number of "additional recipients" may also be * supplied which will each receive native tokens from the fulfiller * as consideration. * * @param parameters Additional information on the fulfilled order. Note * that the offerer must first approve this contract (or * their preferred conduit if indicated by the order) for * their offered ERC721 token to be transferred. * * @return fulfilled A boolean indicating whether the order has been * successfully fulfilled. */ function fulfillBasicOrder( BasicOrderParameters calldata parameters ) external payable returns (bool fulfilled); /** * @notice Fulfill an order with an arbitrary number of items for offer and * consideration. Note that this function does not support * criteria-based orders or partial filling of orders (though * filling the remainder of a partially-filled order is supported). * * @param order The order to fulfill. Note that both the * offerer and the fulfiller must first approve * this contract (or the corresponding conduit if * indicated) to transfer any relevant tokens on * their behalf and that contracts must implement * `onERC1155Received` to receive ERC1155 tokens * as consideration. * @param fulfillerConduitKey A bytes32 value indicating what conduit, if * any, to source the fulfiller's token approvals * from. The zero hash signifies that no conduit * should be used, with direct approvals set on * Seaport. * * @return fulfilled A boolean indicating whether the order has been * successfully fulfilled. */ function fulfillOrder( Order calldata order, bytes32 fulfillerConduitKey ) external payable returns (bool fulfilled); /** * @notice Fill an order, fully or partially, with an arbitrary number of * items for offer and consideration alongside criteria resolvers * containing specific token identifiers and associated proofs. * * @param advancedOrder The order to fulfill along with the fraction * of the order to attempt to fill. Note that * both the offerer and the fulfiller must first * approve this contract (or their preferred * conduit if indicated by the order) to transfer * any relevant tokens on their behalf and that * contracts must implement `onERC1155Received` * to receive ERC1155 tokens as consideration. * Also note that all offer and consideration * components must have no remainder after * multiplication of the respective amount with * the supplied fraction for the partial fill to * be considered valid. * @param criteriaResolvers An array where each element contains a * reference to a specific offer or * consideration, a token identifier, and a proof * that the supplied token identifier is * contained in the merkle root held by the item * in question's criteria element. Note that an * empty criteria indicates that any * (transferable) token identifier on the token * in question is valid and that no associated * proof needs to be supplied. * @param fulfillerConduitKey A bytes32 value indicating what conduit, if * any, to source the fulfiller's token approvals * from. The zero hash signifies that no conduit * should be used, with direct approvals set on * Seaport. * @param recipient The intended recipient for all received items, * with `address(0)` indicating that the caller * should receive the items. * * @return fulfilled A boolean indicating whether the order has been * successfully fulfilled. */ function fulfillAdvancedOrder( AdvancedOrder calldata advancedOrder, CriteriaResolver[] calldata criteriaResolvers, bytes32 fulfillerConduitKey, address recipient ) external payable returns (bool fulfilled); /** * @notice Attempt to fill a group of orders, each with an arbitrary number * of items for offer and consideration. Any order that is not * currently active, has already been fully filled, or has been * cancelled will be omitted. Remaining offer and consideration * items will then be aggregated where possible as indicated by the * supplied offer and consideration component arrays and aggregated * items will be transferred to the fulfiller or to each intended * recipient, respectively. Note that a failing item transfer or an * issue with order formatting will cause the entire batch to fail. * Note that this function does not support criteria-based orders or * partial filling of orders (though filling the remainder of a * partially-filled order is supported). * * @param orders The orders to fulfill. Note that both * the offerer and the fulfiller must first * approve this contract (or the * corresponding conduit if indicated) to * transfer any relevant tokens on their * behalf and that contracts must implement * `onERC1155Received` to receive ERC1155 * tokens as consideration. * @param offerFulfillments An array of FulfillmentComponent arrays * indicating which offer items to attempt * to aggregate when preparing executions. * @param considerationFulfillments An array of FulfillmentComponent arrays * indicating which consideration items to * attempt to aggregate when preparing * executions. * @param fulfillerConduitKey A bytes32 value indicating what conduit, * if any, to source the fulfiller's token * approvals from. The zero hash signifies * that no conduit should be used, with * direct approvals set on this contract. * @param maximumFulfilled The maximum number of orders to fulfill. * * @return availableOrders An array of booleans indicating if each order * with an index corresponding to the index of the * returned boolean was fulfillable or not. * @return executions An array of elements indicating the sequence of * transfers performed as part of matching the given * orders. Note that unspent offer item amounts or * native tokens will not be reflected as part of * this array. */ function fulfillAvailableOrders( Order[] calldata orders, FulfillmentComponent[][] calldata offerFulfillments, FulfillmentComponent[][] calldata considerationFulfillments, bytes32 fulfillerConduitKey, uint256 maximumFulfilled ) external payable returns (bool[] memory availableOrders, Execution[] memory executions); /** * @notice Attempt to fill a group of orders, fully or partially, with an * arbitrary number of items for offer and consideration per order * alongside criteria resolvers containing specific token * identifiers and associated proofs. Any order that is not * currently active, has already been fully filled, or has been * cancelled will be omitted. Remaining offer and consideration * items will then be aggregated where possible as indicated by the * supplied offer and consideration component arrays and aggregated * items will be transferred to the fulfiller or to each intended * recipient, respectively. Note that a failing item transfer or an * issue with order formatting will cause the entire batch to fail. * * @param advancedOrders The orders to fulfill along with the * fraction of those orders to attempt to * fill. Note that both the offerer and the * fulfiller must first approve this * contract (or their preferred conduit if * indicated by the order) to transfer any * relevant tokens on their behalf and that * contracts must implement * `onERC1155Received` to enable receipt of * ERC1155 tokens as consideration. Also * note that all offer and consideration * components must have no remainder after * multiplication of the respective amount * with the supplied fraction for an * order's partial fill amount to be * considered valid. * @param criteriaResolvers An array where each element contains a * reference to a specific offer or * consideration, a token identifier, and a * proof that the supplied token identifier * is contained in the merkle root held by * the item in question's criteria element. * Note that an empty criteria indicates * that any (transferable) token * identifier on the token in question is * valid and that no associated proof needs * to be supplied. * @param offerFulfillments An array of FulfillmentComponent arrays * indicating which offer items to attempt * to aggregate when preparing executions. * @param considerationFulfillments An array of FulfillmentComponent arrays * indicating which consideration items to * attempt to aggregate when preparing * executions. * @param fulfillerConduitKey A bytes32 value indicating what conduit, * if any, to source the fulfiller's token * approvals from. The zero hash signifies * that no conduit should be used, with * direct approvals set on this contract. * @param recipient The intended recipient for all received * items, with `address(0)` indicating that * the caller should receive the items. * @param maximumFulfilled The maximum number of orders to fulfill. * * @return availableOrders An array of booleans indicating if each order * with an index corresponding to the index of the * returned boolean was fulfillable or not. * @return executions An array of elements indicating the sequence of * transfers performed as part of matching the given * orders. Note that unspent offer item amounts or * native tokens will not be reflected as part of * this array. */ function fulfillAvailableAdvancedOrders( AdvancedOrder[] calldata advancedOrders, CriteriaResolver[] calldata criteriaResolvers, FulfillmentComponent[][] calldata offerFulfillments, FulfillmentComponent[][] calldata considerationFulfillments, bytes32 fulfillerConduitKey, address recipient, uint256 maximumFulfilled ) external payable returns (bool[] memory availableOrders, Execution[] memory executions); /** * @notice Match an arbitrary number of orders, each with an arbitrary * number of items for offer and consideration along with a set of * fulfillments allocating offer components to consideration * components. Note that this function does not support * criteria-based or partial filling of orders (though filling the * remainder of a partially-filled order is supported). Any unspent * offer item amounts or native tokens will be transferred to the * caller. * * @param orders The orders to match. Note that both the offerer and * fulfiller on each order must first approve this * contract (or their conduit if indicated by the order) * to transfer any relevant tokens on their behalf and * each consideration recipient must implement * `onERC1155Received` to enable ERC1155 token receipt. * @param fulfillments An array of elements allocating offer components to * consideration components. Note that each * consideration component must be fully met for the * match operation to be valid. * * @return executions An array of elements indicating the sequence of * transfers performed as part of matching the given * orders. Note that unspent offer item amounts or * native tokens will not be reflected as part of this * array. */ function matchOrders( Order[] calldata orders, Fulfillment[] calldata fulfillments ) external payable returns (Execution[] memory executions); /** * @notice Match an arbitrary number of full or partial orders, each with an * arbitrary number of items for offer and consideration, supplying * criteria resolvers containing specific token identifiers and * associated proofs as well as fulfillments allocating offer * components to consideration components. Any unspent offer item * amounts will be transferred to the designated recipient (with the * null address signifying to use the caller) and any unspent native * tokens will be returned to the caller. * * @param orders The advanced orders to match. Note that both the * offerer and fulfiller on each order must first * approve this contract (or a preferred conduit if * indicated by the order) to transfer any relevant * tokens on their behalf and each consideration * recipient must implement `onERC1155Received` in * order to receive ERC1155 tokens. Also note that * the offer and consideration components for each * order must have no remainder after multiplying * the respective amount with the supplied fraction * in order for the group of partial fills to be * considered valid. * @param criteriaResolvers An array where each element contains a reference * to a specific order as well as that order's * offer or consideration, a token identifier, and * a proof that the supplied token identifier is * contained in the order's merkle root. Note that * an empty root indicates that any (transferable) * token identifier is valid and that no associated * proof needs to be supplied. * @param fulfillments An array of elements allocating offer components * to consideration components. Note that each * consideration component must be fully met in * order for the match operation to be valid. * @param recipient The intended recipient for all unspent offer * item amounts, or the caller if the null address * is supplied. * * @return executions An array of elements indicating the sequence of * transfers performed as part of matching the given * orders. Note that unspent offer item amounts or native * tokens will not be reflected as part of this array. */ function matchAdvancedOrders( AdvancedOrder[] calldata orders, CriteriaResolver[] calldata criteriaResolvers, Fulfillment[] calldata fulfillments, address recipient ) external payable returns (Execution[] memory executions); /** * @notice Cancel an arbitrary number of orders. Note that only the offerer * or the zone of a given order may cancel it. Callers should ensure * that the intended order was cancelled by calling `getOrderStatus` * and confirming that `isCancelled` returns `true`. * * @param orders The orders to cancel. * * @return cancelled A boolean indicating whether the supplied orders have * been successfully cancelled. */ function cancel( OrderComponents[] calldata orders ) external returns (bool cancelled); /** * @notice Validate an arbitrary number of orders, thereby registering their * signatures as valid and allowing the fulfiller to skip signature * verification on fulfillment. Note that validated orders may still * be unfulfillable due to invalid item amounts or other factors; * callers should determine whether validated orders are fulfillable * by simulating the fulfillment call prior to execution. Also note * that anyone can validate a signed order, but only the offerer can * validate an order without supplying a signature. * * @param orders The orders to validate. * * @return validated A boolean indicating whether the supplied orders have * been successfully validated. */ function validate( Order[] calldata orders ) external returns (bool validated); /** * @notice Cancel all orders from a given offerer with a given zone in bulk * by incrementing a counter. Note that only the offerer may * increment the counter. * * @return newCounter The new counter. */ function incrementCounter() external returns (uint256 newCounter); /** * @notice Fulfill an order offering an ERC721 token by supplying Ether (or * the native token for the given chain) as consideration for the * order. An arbitrary number of "additional recipients" may also be * supplied which will each receive native tokens from the fulfiller * as consideration. Note that this function costs less gas than * `fulfillBasicOrder` due to the zero bytes in the function * selector (0x00000000) which also results in earlier function * dispatch. * * @param parameters Additional information on the fulfilled order. Note * that the offerer must first approve this contract (or * their preferred conduit if indicated by the order) for * their offered ERC721 token to be transferred. * * @return fulfilled A boolean indicating whether the order has been * successfully fulfilled. */ function fulfillBasicOrder_efficient_6GL6yc( BasicOrderParameters calldata parameters ) external payable returns (bool fulfilled); /** * @notice Retrieve the order hash for a given order. * * @param order The components of the order. * * @return orderHash The order hash. */ function getOrderHash( OrderComponents calldata order ) external view returns (bytes32 orderHash); /** * @notice Retrieve the status of a given order by hash, including whether * the order has been cancelled or validated and the fraction of the * order that has been filled. * * @param orderHash The order hash in question. * * @return isValidated A boolean indicating whether the order in question * has been validated (i.e. previously approved or * partially filled). * @return isCancelled A boolean indicating whether the order in question * has been cancelled. * @return totalFilled The total portion of the order that has been filled * (i.e. the "numerator"). * @return totalSize The total size of the order that is either filled or * unfilled (i.e. the "denominator"). */ function getOrderStatus( bytes32 orderHash ) external view returns ( bool isValidated, bool isCancelled, uint256 totalFilled, uint256 totalSize ); /** * @notice Retrieve the current counter for a given offerer. * * @param offerer The offerer in question. * * @return counter The current counter. */ function getCounter( address offerer ) external view returns (uint256 counter); /** * @notice Retrieve configuration information for this contract. * * @return version The contract version. * @return domainSeparator The domain separator for this contract. * @return conduitController The conduit Controller set for this contract. */ function information() external view returns ( string memory version, bytes32 domainSeparator, address conduitController ); function getContractOffererNonce( address contractOfferer ) external view returns (uint256 nonce); /** * @notice Retrieve the name of this contract. * * @return contractName The name of this contract. */ function name() external view returns (string memory contractName); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.13; import { AdvancedOrder, CriteriaResolver, FulfillmentComponent } from "../lib/ConsiderationStructs.sol"; import { Execution } from "../lib/ConsiderationStructs.sol"; /** * @title SeaportRouterInterface * @author Ryan Ghods (ralxz.eth), 0age (0age.eth), James Wenzel (emo.eth) * @notice A utility contract for fulfilling orders with multiple * Seaport versions. DISCLAIMER: This contract only works when * all consideration items across all listings are native tokens. */ interface SeaportRouterInterface { /** * @dev Advanced order parameters for use through the * FulfillAvailableAdvancedOrdersParams struct. */ struct AdvancedOrderParams { AdvancedOrder[] advancedOrders; CriteriaResolver[] criteriaResolvers; FulfillmentComponent[][] offerFulfillments; FulfillmentComponent[][] considerationFulfillments; uint256 etherValue; /// The ether value to send with the set of orders. } /** * @dev Parameters for using fulfillAvailableAdvancedOrders * through SeaportRouter. */ struct FulfillAvailableAdvancedOrdersParams { address[] seaportContracts; AdvancedOrderParams[] advancedOrderParams; bytes32 fulfillerConduitKey; address recipient; uint256 maximumFulfilled; } /** * @dev Calldata params for calling FulfillAvailableAdvancedOrders. */ struct CalldataParams { AdvancedOrder[] advancedOrders; CriteriaResolver[] criteriaResolvers; FulfillmentComponent[][] offerFulfillments; FulfillmentComponent[][] considerationFulfillments; bytes32 fulfillerConduitKey; address recipient; uint256 maximumFulfilled; } /** * @dev Revert with an error if a provided Seaport contract is not allowed * to be used in the router. */ error SeaportNotAllowed(address seaport); /** * @dev Revert with an error if an ether transfer back to the fulfiller * fails. */ error EtherReturnTransferFailed( address recipient, uint256 amount, bytes returnData ); /** * @dev Fallback function to receive excess ether, in case total amount of * ether sent is more than the amount required to fulfill the order. */ receive() external payable; /** * @notice Fulfill available advanced orders through multiple Seaport * versions. * See {SeaportInterface-fulfillAvailableAdvancedOrders} * * @param params The parameters for fulfilling available advanced orders. */ function fulfillAvailableAdvancedOrders( FulfillAvailableAdvancedOrdersParams calldata params ) external payable returns ( bool[][] memory availableOrders, Execution[][] memory executions ); /** * @notice Returns the Seaport contracts allowed to be used through this * router. */ function getAllowedSeaportContracts() external view returns (address[] memory); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.13; /* * -------------------------- Disambiguation & Other Notes --------------------- * - The term "head" is used as it is in the documentation for ABI encoding, * but only in reference to dynamic types, i.e. it always refers to the * offset or pointer to the body of a dynamic type. In calldata, the head * is always an offset (relative to the parent object), while in memory, * the head is always the pointer to the body. More information found here: * https://docs.soliditylang.org/en/v0.8.17/abi-spec.html#argument-encoding * - Note that the length of an array is separate from and precedes the * head of the array. * * - The term "body" is used in place of the term "head" used in the ABI * documentation. It refers to the start of the data for a dynamic type, * e.g. the first word of a struct or the first word of the first element * in an array. * * - The term "pointer" is used to describe the absolute position of a value * and never an offset relative to another value. * - The suffix "_ptr" refers to a memory pointer. * - The suffix "_cdPtr" refers to a calldata pointer. * * - The term "offset" is used to describe the position of a value relative * to some parent value. For example, OrderParameters_conduit_offset is the * offset to the "conduit" value in the OrderParameters struct relative to * the start of the body. * - Note: Offsets are used to derive pointers. * * - Some structs have pointers defined for all of their fields in this file. * Lines which are commented out are fields that are not used in the * codebase but have been left in for readability. */ // Declare constants for name, version, and reentrancy sentinel values. // Name is right padded, so it touches the length which is left padded. This // enables writing both values at once. Length goes at byte 95 in memory, and // name fills bytes 96-109, so both values can be written left-padded to 77. uint256 constant NameLengthPtr = 0x4D; uint256 constant NameWithLength = 0x0d436F6E73696465726174696F6E; uint256 constant information_version_offset = 0; uint256 constant information_version_cd_offset = 0x60; uint256 constant information_domainSeparator_offset = 0x20; uint256 constant information_conduitController_offset = 0x40; uint256 constant information_versionLengthPtr = 0x63; uint256 constant information_versionWithLength = 0x03312e34; // 1.4 uint256 constant information_length = 0xa0; uint256 constant _NOT_ENTERED = 1; uint256 constant _ENTERED = 2; uint256 constant _ENTERED_AND_ACCEPTING_NATIVE_TOKENS = 3; uint256 constant Offset_fulfillAdvancedOrder_criteriaResolvers = 0x20; uint256 constant Offset_fulfillAvailableOrders_offerFulfillments = 0x20; uint256 constant Offset_fulfillAvailableOrders_considerationFulfillments = 0x40; uint256 constant Offset_fulfillAvailableAdvancedOrders_criteriaResolvers = 0x20; uint256 constant Offset_fulfillAvailableAdvancedOrders_offerFulfillments = 0x40; uint256 constant Offset_fulfillAvailableAdvancedOrders_cnsdrationFlflmnts = ( 0x60 ); uint256 constant Offset_matchOrders_fulfillments = 0x20; uint256 constant Offset_matchAdvancedOrders_criteriaResolvers = 0x20; uint256 constant Offset_matchAdvancedOrders_fulfillments = 0x40; // Common Offsets // Offsets for identically positioned fields shared by: // OfferItem, ConsiderationItem, SpentItem, ReceivedItem uint256 constant Selector_length = 0x4; uint256 constant Common_token_offset = 0x20; uint256 constant Common_identifier_offset = 0x40; uint256 constant Common_amount_offset = 0x60; uint256 constant Common_endAmount_offset = 0x80; uint256 constant SpentItem_size = 0x80; uint256 constant SpentItem_size_shift = 0x7; uint256 constant OfferItem_size = 0xa0; uint256 constant OfferItem_size_with_length = 0xc0; uint256 constant ReceivedItem_size_excluding_recipient = 0x80; uint256 constant ReceivedItem_size = 0xa0; uint256 constant ReceivedItem_amount_offset = 0x60; uint256 constant ReceivedItem_recipient_offset = 0x80; uint256 constant ReceivedItem_CommonParams_size = 0x60; uint256 constant ConsiderationItem_size = 0xc0; uint256 constant ConsiderationItem_size_with_length = 0xe0; uint256 constant ConsiderationItem_recipient_offset = 0xa0; // Store the same constant in an abbreviated format for a line length fix. uint256 constant ConsiderItem_recipient_offset = 0xa0; uint256 constant Execution_offerer_offset = 0x20; uint256 constant Execution_conduit_offset = 0x40; // uint256 constant OrderParameters_offerer_offset = 0x00; uint256 constant OrderParameters_zone_offset = 0x20; uint256 constant OrderParameters_offer_head_offset = 0x40; uint256 constant OrderParameters_consideration_head_offset = 0x60; // uint256 constant OrderParameters_orderType_offset = 0x80; uint256 constant OrderParameters_startTime_offset = 0xa0; uint256 constant OrderParameters_endTime_offset = 0xc0; uint256 constant OrderParameters_zoneHash_offset = 0xe0; // uint256 constant OrderParameters_salt_offset = 0x100; uint256 constant OrderParameters_conduit_offset = 0x120; uint256 constant OrderParameters_counter_offset = 0x140; uint256 constant Fulfillment_itemIndex_offset = 0x20; uint256 constant AdvancedOrder_head_size = 0xa0; uint256 constant AdvancedOrder_numerator_offset = 0x20; uint256 constant AdvancedOrder_denominator_offset = 0x40; uint256 constant AdvancedOrder_signature_offset = 0x60; uint256 constant AdvancedOrder_extraData_offset = 0x80; uint256 constant OrderStatus_ValidatedAndNotCancelled = 1; uint256 constant OrderStatus_filledNumerator_offset = 0x10; uint256 constant OrderStatus_filledDenominator_offset = 0x88; uint256 constant ThirtyOneBytes = 0x1f; uint256 constant OneWord = 0x20; uint256 constant TwoWords = 0x40; uint256 constant ThreeWords = 0x60; uint256 constant FourWords = 0x80; uint256 constant FiveWords = 0xa0; uint256 constant OneWordShift = 0x5; uint256 constant TwoWordsShift = 0x6; uint256 constant SixtyThreeBytes = 0x3f; uint256 constant OnlyFullWordMask = 0xffffffe0; uint256 constant FreeMemoryPointerSlot = 0x40; uint256 constant ZeroSlot = 0x60; uint256 constant DefaultFreeMemoryPointer = 0x80; uint256 constant Slot0x80 = 0x80; uint256 constant Slot0xA0 = 0xa0; // uint256 constant BasicOrder_endAmount_cdPtr = 0x104; uint256 constant BasicOrder_common_params_size = 0xa0; uint256 constant BasicOrder_considerationHashesArray_ptr = 0x160; uint256 constant BasicOrder_receivedItemByteMap = ( 0x0000010102030000000000000000000000000000000000000000000000000000 ); uint256 constant BasicOrder_offeredItemByteMap = ( 0x0203020301010000000000000000000000000000000000000000000000000000 ); bytes32 constant OrdersMatchedTopic0 = ( 0x4b9f2d36e1b4c93de62cc077b00b1a91d84b6c31b4a14e012718dcca230689e7 ); uint256 constant EIP712_Order_size = 0x180; uint256 constant EIP712_OfferItem_size = 0xc0; uint256 constant EIP712_ConsiderationItem_size = 0xe0; uint256 constant AdditionalRecipient_size = 0x40; uint256 constant AdditionalRecipient_size_shift = 0x6; uint256 constant EIP712_DomainSeparator_offset = 0x02; uint256 constant EIP712_OrderHash_offset = 0x22; uint256 constant EIP712_DigestPayload_size = 0x42; uint256 constant EIP712_domainData_nameHash_offset = 0x20; uint256 constant EIP712_domainData_versionHash_offset = 0x40; uint256 constant EIP712_domainData_chainId_offset = 0x60; uint256 constant EIP712_domainData_verifyingContract_offset = 0x80; uint256 constant EIP712_domainData_size = 0xa0; // Minimum BulkOrder proof size: 64 bytes for signature + 3 for key + 32 for 1 // sibling. Maximum BulkOrder proof size: 65 bytes for signature + 3 for key + // 768 for 24 siblings. uint256 constant BulkOrderProof_minSize = 0x63; uint256 constant BulkOrderProof_rangeSize = 0x2e2; uint256 constant BulkOrderProof_lengthAdjustmentBeforeMask = 0x1d; uint256 constant BulkOrderProof_lengthRangeAfterMask = 0x2; uint256 constant BulkOrderProof_keyShift = 0xe8; uint256 constant BulkOrderProof_keySize = 0x3; uint256 constant BulkOrder_Typehash_Height_One = ( 0x3ca2711d29384747a8f61d60aad3c450405f7aaff5613541dee28df2d6986d32 ); uint256 constant BulkOrder_Typehash_Height_Two = ( 0xbf8e29b89f29ed9b529c154a63038ffca562f8d7cd1e2545dda53a1b582dde30 ); uint256 constant BulkOrder_Typehash_Height_Three = ( 0x53c6f6856e13104584dd0797ca2b2779202dc2597c6066a42e0d8fe990b0024d ); uint256 constant BulkOrder_Typehash_Height_Four = ( 0xa02eb7ff164c884e5e2c336dc85f81c6a93329d8e9adf214b32729b894de2af1 ); uint256 constant BulkOrder_Typehash_Height_Five = ( 0x39c9d33c18e050dda0aeb9a8086fb16fc12d5d64536780e1da7405a800b0b9f6 ); uint256 constant BulkOrder_Typehash_Height_Six = ( 0x1c19f71958cdd8f081b4c31f7caf5c010b29d12950be2fa1c95070dc47e30b55 ); uint256 constant BulkOrder_Typehash_Height_Seven = ( 0xca74fab2fece9a1d58234a274220ad05ca096a92ef6a1ca1750b9d90c948955c ); uint256 constant BulkOrder_Typehash_Height_Eight = ( 0x7ff98d9d4e55d876c5cfac10b43c04039522f3ddfb0ea9bfe70c68cfb5c7cc14 ); uint256 constant BulkOrder_Typehash_Height_Nine = ( 0xbed7be92d41c56f9e59ac7a6272185299b815ddfabc3f25deb51fe55fe2f9e8a ); uint256 constant BulkOrder_Typehash_Height_Ten = ( 0xd1d97d1ef5eaa37a4ee5fbf234e6f6d64eb511eb562221cd7edfbdde0848da05 ); uint256 constant BulkOrder_Typehash_Height_Eleven = ( 0x896c3f349c4da741c19b37fec49ed2e44d738e775a21d9c9860a69d67a3dae53 ); uint256 constant BulkOrder_Typehash_Height_Twelve = ( 0xbb98d87cc12922b83759626c5f07d72266da9702d19ffad6a514c73a89002f5f ); uint256 constant BulkOrder_Typehash_Height_Thirteen = ( 0xe6ae19322608dd1f8a8d56aab48ed9c28be489b689f4b6c91268563efc85f20e ); uint256 constant BulkOrder_Typehash_Height_Fourteen = ( 0x6b5b04cbae4fcb1a9d78e7b2dfc51a36933d023cf6e347e03d517b472a852590 ); uint256 constant BulkOrder_Typehash_Height_Fifteen = ( 0xd1eb68309202b7106b891e109739dbbd334a1817fe5d6202c939e75cf5e35ca9 ); uint256 constant BulkOrder_Typehash_Height_Sixteen = ( 0x1da3eed3ecef6ebaa6e5023c057ec2c75150693fd0dac5c90f4a142f9879fde8 ); uint256 constant BulkOrder_Typehash_Height_Seventeen = ( 0xeee9a1392aa395c7002308119a58f2582777a75e54e0c1d5d5437bd2e8bf6222 ); uint256 constant BulkOrder_Typehash_Height_Eighteen = ( 0xc3939feff011e53ab8c35ca3370aad54c5df1fc2938cd62543174fa6e7d85877 ); uint256 constant BulkOrder_Typehash_Height_Nineteen = ( 0x0efca7572ac20f5ae84db0e2940674f7eca0a4726fa1060ffc2d18cef54b203d ); uint256 constant BulkOrder_Typehash_Height_Twenty = ( 0x5a4f867d3d458dabecad65f6201ceeaba0096df2d0c491cc32e6ea4e64350017 ); uint256 constant BulkOrder_Typehash_Height_TwentyOne = ( 0x80987079d291feebf21c2230e69add0f283cee0b8be492ca8050b4185a2ff719 ); uint256 constant BulkOrder_Typehash_Height_TwentyTwo = ( 0x3bd8cff538aba49a9c374c806d277181e9651624b3e31111bc0624574f8bca1d ); uint256 constant BulkOrder_Typehash_Height_TwentyThree = ( 0x5d6a3f098a0bc373f808c619b1bb4028208721b3c4f8d6bc8a874d659814eb76 ); uint256 constant BulkOrder_Typehash_Height_TwentyFour = ( 0x1d51df90cba8de7637ca3e8fe1e3511d1dc2f23487d05dbdecb781860c21ac1c ); uint256 constant receivedItemsHash_ptr = 0x60; /* * Memory layout in _prepareBasicFulfillmentFromCalldata of * data for OrderFulfilled * * event OrderFulfilled( * bytes32 orderHash, * address indexed offerer, * address indexed zone, * address fulfiller, * SpentItem[] offer, * > (itemType, token, id, amount) * ReceivedItem[] consideration * > (itemType, token, id, amount, recipient) * ) * * - 0x00: orderHash * - 0x20: fulfiller * - 0x40: offer offset (0x80) * - 0x60: consideration offset (0x120) * - 0x80: offer.length (1) * - 0xa0: offerItemType * - 0xc0: offerToken * - 0xe0: offerIdentifier * - 0x100: offerAmount * - 0x120: consideration.length (1 + additionalRecipients.length) * - 0x140: considerationItemType * - 0x160: considerationToken * - 0x180: considerationIdentifier * - 0x1a0: considerationAmount * - 0x1c0: considerationRecipient * - ... */ // Minimum length of the OrderFulfilled event data. // Must be added to the size of the ReceivedItem array for additionalRecipients // (0xa0 * additionalRecipients.length) to calculate full size of the buffer. uint256 constant OrderFulfilled_baseSize = 0x1e0; uint256 constant OrderFulfilled_selector = ( 0x9d9af8e38d66c62e2c12f0225249fd9d721c54b83f48d9352c97c6cacdcb6f31 ); // Minimum offset in memory to OrderFulfilled event data. // Must be added to the size of the EIP712 hash array for additionalRecipients // (32 * additionalRecipients.length) to calculate the pointer to event data. uint256 constant OrderFulfilled_baseOffset = 0x180; uint256 constant OrderFulfilled_consideration_length_baseOffset = 0x2a0; uint256 constant OrderFulfilled_offer_length_baseOffset = 0x200; // Related constants used for restricted order checks on basic orders. uint256 constant OrderFulfilled_baseDataSize = 0x160; // uint256 constant ValidateOrder_offerDataOffset = 0x184; // uint256 constant RatifyOrder_offerDataOffset = 0xc4; // uint256 constant OrderFulfilled_orderHash_offset = 0x00; uint256 constant OrderFulfilled_fulfiller_offset = 0x20; uint256 constant OrderFulfilled_offer_head_offset = 0x40; uint256 constant OrderFulfilled_offer_body_offset = 0x80; uint256 constant OrderFulfilled_consideration_head_offset = 0x60; uint256 constant OrderFulfilled_consideration_body_offset = 0x120; // BasicOrderParameters uint256 constant BasicOrder_parameters_cdPtr = 0x04; uint256 constant BasicOrder_considerationToken_cdPtr = 0x24; uint256 constant BasicOrder_considerationIdentifier_cdPtr = 0x44; uint256 constant BasicOrder_considerationAmount_cdPtr = 0x64; uint256 constant BasicOrder_offerer_cdPtr = 0x84; uint256 constant BasicOrder_zone_cdPtr = 0xa4; uint256 constant BasicOrder_offerToken_cdPtr = 0xc4; uint256 constant BasicOrder_offerIdentifier_cdPtr = 0xe4; uint256 constant BasicOrder_offerAmount_cdPtr = 0x104; uint256 constant BasicOrder_basicOrderType_cdPtr = 0x124; uint256 constant BasicOrder_startTime_cdPtr = 0x144; uint256 constant BasicOrder_endTime_cdPtr = 0x164; // uint256 constant BasicOrder_zoneHash_cdPtr = 0x184; // uint256 constant BasicOrder_salt_cdPtr = 0x1a4; uint256 constant BasicOrder_offererConduit_cdPtr = 0x1c4; uint256 constant BasicOrder_fulfillerConduit_cdPtr = 0x1e4; uint256 constant BasicOrder_totalOriginalAdditionalRecipients_cdPtr = 0x204; uint256 constant BasicOrder_additionalRecipients_head_cdPtr = 0x224; uint256 constant BasicOrder_signature_cdPtr = 0x244; uint256 constant BasicOrder_additionalRecipients_length_cdPtr = 0x264; uint256 constant BasicOrder_additionalRecipients_data_cdPtr = 0x284; uint256 constant BasicOrder_parameters_ptr = 0x20; uint256 constant BasicOrder_basicOrderType_range = 0x18; // 24 values /* * Memory layout in _prepareBasicFulfillmentFromCalldata of * EIP712 data for ConsiderationItem * - 0x80: ConsiderationItem EIP-712 typehash (constant) * - 0xa0: itemType * - 0xc0: token * - 0xe0: identifier * - 0x100: startAmount * - 0x120: endAmount * - 0x140: recipient */ uint256 constant BasicOrder_considerationItem_typeHash_ptr = 0x80; // memoryPtr uint256 constant BasicOrder_considerationItem_itemType_ptr = 0xa0; uint256 constant BasicOrder_considerationItem_token_ptr = 0xc0; uint256 constant BasicOrder_considerationItem_identifier_ptr = 0xe0; uint256 constant BasicOrder_considerationItem_startAmount_ptr = 0x100; uint256 constant BasicOrder_considerationItem_endAmount_ptr = 0x120; // uint256 constant BasicOrder_considerationItem_recipient_ptr = 0x140; /* * Memory layout in _prepareBasicFulfillmentFromCalldata of * EIP712 data for OfferItem * - 0x80: OfferItem EIP-712 typehash (constant) * - 0xa0: itemType * - 0xc0: token * - 0xe0: identifier (reused for offeredItemsHash) * - 0x100: startAmount * - 0x120: endAmount */ uint256 constant BasicOrder_offerItem_typeHash_ptr = 0x80; uint256 constant BasicOrder_offerItem_itemType_ptr = 0xa0; uint256 constant BasicOrder_offerItem_token_ptr = 0xc0; // uint256 constant BasicOrder_offerItem_identifier_ptr = 0xe0; // uint256 constant BasicOrder_offerItem_startAmount_ptr = 0x100; uint256 constant BasicOrder_offerItem_endAmount_ptr = 0x120; /* * Memory layout in _prepareBasicFulfillmentFromCalldata of * EIP712 data for Order * - 0x80: Order EIP-712 typehash (constant) * - 0xa0: orderParameters.offerer * - 0xc0: orderParameters.zone * - 0xe0: keccak256(abi.encodePacked(offerHashes)) * - 0x100: keccak256(abi.encodePacked(considerationHashes)) * - 0x120: orderType * - 0x140: startTime * - 0x160: endTime * - 0x180: zoneHash * - 0x1a0: salt * - 0x1c0: conduit * - 0x1e0: _counters[orderParameters.offerer] (from storage) */ uint256 constant BasicOrder_order_typeHash_ptr = 0x80; uint256 constant BasicOrder_order_offerer_ptr = 0xa0; // uint256 constant BasicOrder_order_zone_ptr = 0xc0; uint256 constant BasicOrder_order_offerHashes_ptr = 0xe0; uint256 constant BasicOrder_order_considerationHashes_ptr = 0x100; uint256 constant BasicOrder_order_orderType_ptr = 0x120; uint256 constant BasicOrder_order_startTime_ptr = 0x140; // uint256 constant BasicOrder_order_endTime_ptr = 0x160; // uint256 constant BasicOrder_order_zoneHash_ptr = 0x180; // uint256 constant BasicOrder_order_salt_ptr = 0x1a0; // uint256 constant BasicOrder_order_conduitKey_ptr = 0x1c0; uint256 constant BasicOrder_order_counter_ptr = 0x1e0; uint256 constant BasicOrder_additionalRecipients_head_ptr = 0x240; uint256 constant BasicOrder_signature_ptr = 0x260; uint256 constant BasicOrder_startTimeThroughZoneHash_size = 0x60; uint256 constant ContractOrder_orderHash_offerer_shift = 0x60; uint256 constant Counter_blockhash_shift = 0x80; // Signature-related bytes32 constant EIP2098_allButHighestBitMask = ( 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ); bytes32 constant ECDSA_twentySeventhAndTwentyEighthBytesSet = ( 0x0000000000000000000000000000000000000000000000000000000101000000 ); uint256 constant ECDSA_MaxLength = 65; uint256 constant ECDSA_signature_s_offset = 0x40; uint256 constant ECDSA_signature_v_offset = 0x60; bytes32 constant EIP1271_isValidSignature_selector = ( 0x1626ba7e00000000000000000000000000000000000000000000000000000000 ); uint256 constant EIP1271_isValidSignature_digest_negativeOffset = 0x40; uint256 constant EIP1271_isValidSignature_selector_negativeOffset = 0x44; uint256 constant EIP1271_isValidSignature_calldata_baseLength = 0x64; uint256 constant EIP1271_isValidSignature_signature_head_offset = 0x40; uint256 constant EIP_712_PREFIX = ( 0x1901000000000000000000000000000000000000000000000000000000000000 ); uint256 constant ExtraGasBuffer = 0x20; uint256 constant CostPerWord = 0x3; uint256 constant MemoryExpansionCoefficientShift = 0x9; uint256 constant Create2AddressDerivation_ptr = 0x0b; uint256 constant Create2AddressDerivation_length = 0x55; uint256 constant MaskOverByteTwelve = ( 0x0000000000000000000000ff0000000000000000000000000000000000000000 ); uint256 constant MaskOverLastTwentyBytes = ( 0x000000000000000000000000ffffffffffffffffffffffffffffffffffffffff ); uint256 constant AddressDirtyUpperBitThreshold = ( 0x0000000000000000000000010000000000000000000000000000000000000000 ); uint256 constant MaskOverFirstFourBytes = ( 0xffffffff00000000000000000000000000000000000000000000000000000000 ); uint256 constant Conduit_execute_signature = ( 0x4ce34aa200000000000000000000000000000000000000000000000000000000 ); uint256 constant MaxUint8 = 0xff; uint256 constant MaxUint120 = 0xffffffffffffffffffffffffffffff; uint256 constant Conduit_execute_ConduitTransfer_ptr = 0x20; uint256 constant Conduit_execute_ConduitTransfer_length = 0x01; uint256 constant Conduit_execute_ConduitTransfer_offset_ptr = 0x04; uint256 constant Conduit_execute_ConduitTransfer_length_ptr = 0x24; uint256 constant Conduit_execute_transferItemType_ptr = 0x44; uint256 constant Conduit_execute_transferToken_ptr = 0x64; uint256 constant Conduit_execute_transferFrom_ptr = 0x84; uint256 constant Conduit_execute_transferTo_ptr = 0xa4; uint256 constant Conduit_execute_transferIdentifier_ptr = 0xc4; uint256 constant Conduit_execute_transferAmount_ptr = 0xe4; uint256 constant OneConduitExecute_size = 0x104; // Sentinel value to indicate that the conduit accumulator is not armed. uint256 constant AccumulatorDisarmed = 0x20; uint256 constant AccumulatorArmed = 0x40; uint256 constant Accumulator_conduitKey_ptr = 0x20; uint256 constant Accumulator_selector_ptr = 0x40; uint256 constant Accumulator_array_offset_ptr = 0x44; uint256 constant Accumulator_array_length_ptr = 0x64; uint256 constant Accumulator_itemSizeOffsetDifference = 0x3c; uint256 constant Accumulator_array_offset = 0x20; uint256 constant Conduit_transferItem_size = 0xc0; uint256 constant Conduit_transferItem_token_ptr = 0x20; uint256 constant Conduit_transferItem_from_ptr = 0x40; uint256 constant Conduit_transferItem_to_ptr = 0x60; uint256 constant Conduit_transferItem_identifier_ptr = 0x80; uint256 constant Conduit_transferItem_amount_ptr = 0xa0; uint256 constant Ecrecover_precompile = 0x1; uint256 constant Ecrecover_args_size = 0x80; uint256 constant Signature_lower_v = 27; // Bitmask that only gives a non-zero value if masked with a non-match selector. uint256 constant NonMatchSelector_MagicMask = ( 0x4000000000000000000000000000000000000000000000000000000000 ); // First bit indicates that a NATIVE offer items has been used and the 231st bit // indicates that a non match selector has been called. uint256 constant NonMatchSelector_InvalidErrorValue = ( 0x4000000000000000000000000000000000000000000000000000000001 ); /** * @dev Selector and offsets for generateOrder * * function generateOrder( * address fulfiller, * SpentItem[] calldata minimumReceived, * SpentItem[] calldata maximumSpent, * bytes calldata context * ) */ uint256 constant generateOrder_selector = 0x98919765; uint256 constant generateOrder_selector_offset = 0x1c; uint256 constant generateOrder_head_offset = 0x04; uint256 constant generateOrder_minimumReceived_head_offset = 0x20; uint256 constant generateOrder_maximumSpent_head_offset = 0x40; uint256 constant generateOrder_context_head_offset = 0x60; uint256 constant generateOrder_base_tail_offset = 0x80; uint256 constant generateOrder_maximum_returndatasize = 0xffff; uint256 constant ratifyOrder_selector = 0xf4dd92ce; uint256 constant ratifyOrder_selector_offset = 0x1c; uint256 constant ratifyOrder_head_offset = 0x04; // uint256 constant ratifyOrder_offer_head_offset = 0x00; uint256 constant ratifyOrder_consideration_head_offset = 0x20; uint256 constant ratifyOrder_context_head_offset = 0x40; uint256 constant ratifyOrder_orderHashes_head_offset = 0x60; uint256 constant ratifyOrder_contractNonce_offset = 0x80; uint256 constant ratifyOrder_base_tail_offset = 0xa0; uint256 constant validateOrder_selector = 0x17b1f942; uint256 constant validateOrder_selector_offset = 0x1c; uint256 constant validateOrder_head_offset = 0x04; uint256 constant validateOrder_zoneParameters_offset = 0x20; // uint256 constant ZoneParameters_orderHash_offset = 0x00; uint256 constant ZoneParameters_fulfiller_offset = 0x20; uint256 constant ZoneParameters_offerer_offset = 0x40; uint256 constant ZoneParameters_offer_head_offset = 0x60; uint256 constant ZoneParameters_consideration_head_offset = 0x80; uint256 constant ZoneParameters_extraData_head_offset = 0xa0; uint256 constant ZoneParameters_orderHashes_head_offset = 0xc0; uint256 constant ZoneParameters_startTime_offset = 0xe0; uint256 constant ZoneParameters_endTime_offset = 0x100; uint256 constant ZoneParameters_zoneHash_offset = 0x120; uint256 constant ZoneParameters_base_tail_offset = 0x140; uint256 constant ZoneParameters_selectorAndPointer_length = 0x24; uint256 constant ZoneParameters_basicOrderFixedElements_length = 0x64; // ConsiderationDecoder Constants uint256 constant OrderParameters_head_size = 0x0160; uint256 constant OrderParameters_totalOriginalConsiderationItems_offset = ( 0x0140 ); uint256 constant AdvancedOrderPlusOrderParameters_head_size = 0x0200; uint256 constant Order_signature_offset = 0x20; uint256 constant Order_head_size = 0x40; uint256 constant AdvancedOrder_fixed_segment_0 = 0x40; uint256 constant CriteriaResolver_head_size = 0xa0; uint256 constant CriteriaResolver_fixed_segment_0 = 0x80; uint256 constant CriteriaResolver_criteriaProof_offset = 0x80; uint256 constant FulfillmentComponent_mem_tail_size = 0x40; uint256 constant FulfillmentComponent_mem_tail_size_shift = 0x6; uint256 constant Fulfillment_head_size = 0x40; uint256 constant Fulfillment_considerationComponents_offset = 0x20; uint256 constant OrderComponents_OrderParameters_common_head_size = 0x0140;
// SPDX-License-Identifier: MIT pragma solidity ^0.8.13; enum OrderType { // 0: no partial fills, anyone can execute FULL_OPEN, // 1: partial fills supported, anyone can execute PARTIAL_OPEN, // 2: no partial fills, only offerer or zone can execute FULL_RESTRICTED, // 3: partial fills supported, only offerer or zone can execute PARTIAL_RESTRICTED, // 4: contract order type CONTRACT } enum BasicOrderType { // 0: no partial fills, anyone can execute ETH_TO_ERC721_FULL_OPEN, // 1: partial fills supported, anyone can execute ETH_TO_ERC721_PARTIAL_OPEN, // 2: no partial fills, only offerer or zone can execute ETH_TO_ERC721_FULL_RESTRICTED, // 3: partial fills supported, only offerer or zone can execute ETH_TO_ERC721_PARTIAL_RESTRICTED, // 4: no partial fills, anyone can execute ETH_TO_ERC1155_FULL_OPEN, // 5: partial fills supported, anyone can execute ETH_TO_ERC1155_PARTIAL_OPEN, // 6: no partial fills, only offerer or zone can execute ETH_TO_ERC1155_FULL_RESTRICTED, // 7: partial fills supported, only offerer or zone can execute ETH_TO_ERC1155_PARTIAL_RESTRICTED, // 8: no partial fills, anyone can execute ERC20_TO_ERC721_FULL_OPEN, // 9: partial fills supported, anyone can execute ERC20_TO_ERC721_PARTIAL_OPEN, // 10: no partial fills, only offerer or zone can execute ERC20_TO_ERC721_FULL_RESTRICTED, // 11: partial fills supported, only offerer or zone can execute ERC20_TO_ERC721_PARTIAL_RESTRICTED, // 12: no partial fills, anyone can execute ERC20_TO_ERC1155_FULL_OPEN, // 13: partial fills supported, anyone can execute ERC20_TO_ERC1155_PARTIAL_OPEN, // 14: no partial fills, only offerer or zone can execute ERC20_TO_ERC1155_FULL_RESTRICTED, // 15: partial fills supported, only offerer or zone can execute ERC20_TO_ERC1155_PARTIAL_RESTRICTED, // 16: no partial fills, anyone can execute ERC721_TO_ERC20_FULL_OPEN, // 17: partial fills supported, anyone can execute ERC721_TO_ERC20_PARTIAL_OPEN, // 18: no partial fills, only offerer or zone can execute ERC721_TO_ERC20_FULL_RESTRICTED, // 19: partial fills supported, only offerer or zone can execute ERC721_TO_ERC20_PARTIAL_RESTRICTED, // 20: no partial fills, anyone can execute ERC1155_TO_ERC20_FULL_OPEN, // 21: partial fills supported, anyone can execute ERC1155_TO_ERC20_PARTIAL_OPEN, // 22: no partial fills, only offerer or zone can execute ERC1155_TO_ERC20_FULL_RESTRICTED, // 23: partial fills supported, only offerer or zone can execute ERC1155_TO_ERC20_PARTIAL_RESTRICTED } enum BasicOrderRouteType { // 0: provide Ether (or other native token) to receive offered ERC721 item. ETH_TO_ERC721, // 1: provide Ether (or other native token) to receive offered ERC1155 item. ETH_TO_ERC1155, // 2: provide ERC20 item to receive offered ERC721 item. ERC20_TO_ERC721, // 3: provide ERC20 item to receive offered ERC1155 item. ERC20_TO_ERC1155, // 4: provide ERC721 item to receive offered ERC20 item. ERC721_TO_ERC20, // 5: provide ERC1155 item to receive offered ERC20 item. ERC1155_TO_ERC20 } enum ItemType { // 0: ETH on mainnet, MATIC on polygon, etc. NATIVE, // 1: ERC20 items (ERC777 and ERC20 analogues could also technically work) ERC20, // 2: ERC721 items ERC721, // 3: ERC1155 items ERC1155, // 4: ERC721 items where a number of tokenIds are supported ERC721_WITH_CRITERIA, // 5: ERC1155 items where a number of ids are supported ERC1155_WITH_CRITERIA } enum Side { // 0: Items that can be spent OFFER, // 1: Items that must be received CONSIDERATION }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.13; uint256 constant Error_selector_offset = 0x1c; /* * error MissingFulfillmentComponentOnAggregation(uint8 side) * - Defined in FulfillmentApplicationErrors.sol * Memory layout: * - 0x00: Left-padded selector (data begins at 0x1c) * - 0x20: side * Revert buffer is memory[0x1c:0x40] */ uint256 constant MissingFulfillmentComponentOnAggregation_error_selector = ( 0x375c24c1 ); uint256 constant MissingFulfillmentComponentOnAggregation_error_side_ptr = 0x20; uint256 constant MissingFulfillmentComponentOnAggregation_error_length = 0x24; /* * error OfferAndConsiderationRequiredOnFulfillment() * - Defined in FulfillmentApplicationErrors.sol * Memory layout: * - 0x00: Left-padded selector (data begins at 0x1c) * Revert buffer is memory[0x1c:0x20] */ uint256 constant OfferAndConsiderationRequiredOnFulfillment_error_selector = ( 0x98e9db6e ); uint256 constant OfferAndConsiderationRequiredOnFulfillment_error_length = 0x04; /* * error MismatchedFulfillmentOfferAndConsiderationComponents( * uint256 fulfillmentIndex * ) * - Defined in FulfillmentApplicationErrors.sol * Memory layout: * - 0x00: Left-padded selector (data begins at 0x1c) * - 0x20: fulfillmentIndex * Revert buffer is memory[0x1c:0x40] */ uint256 constant MismatchedOfferAndConsiderationComponents_error_selector = ( 0xbced929d ); uint256 constant MismatchedOfferAndConsiderationComponents_error_idx_ptr = 0x20; uint256 constant MismatchedOfferAndConsiderationComponents_error_length = 0x24; /* * error InvalidFulfillmentComponentData() * - Defined in FulfillmentApplicationErrors.sol * Memory layout: * - 0x00: Left-padded selector (data begins at 0x1c) * Revert buffer is memory[0x1c:0x20] */ uint256 constant InvalidFulfillmentComponentData_error_selector = 0x7fda7279; uint256 constant InvalidFulfillmentComponentData_error_length = 0x04; /* * error InexactFraction() * - Defined in AmountDerivationErrors.sol * Memory layout: * - 0x00: Left-padded selector (data begins at 0x1c) * Revert buffer is memory[0x1c:0x20] */ uint256 constant InexactFraction_error_selector = 0xc63cf089; uint256 constant InexactFraction_error_length = 0x04; /* * error OrderCriteriaResolverOutOfRange(uint8 side) * - Defined in CriteriaResolutionErrors.sol * Memory layout: * - 0x00: Left-padded selector (data begins at 0x1c) * - 0x20: side * Revert buffer is memory[0x1c:0x40] */ uint256 constant OrderCriteriaResolverOutOfRange_error_selector = 0x133c37c6; uint256 constant OrderCriteriaResolverOutOfRange_error_side_ptr = 0x20; uint256 constant OrderCriteriaResolverOutOfRange_error_length = 0x24; /* * error UnresolvedOfferCriteria(uint256 orderIndex, uint256 offerIndex) * - Defined in CriteriaResolutionErrors.sol * Memory layout: * - 0x00: Left-padded selector (data begins at 0x1c) * - 0x20: orderIndex * - 0x40: offerIndex * Revert buffer is memory[0x1c:0x60] */ uint256 constant UnresolvedOfferCriteria_error_selector = 0xd6929332; uint256 constant UnresolvedOfferCriteria_error_orderIndex_ptr = 0x20; uint256 constant UnresolvedOfferCriteria_error_offerIndex_ptr = 0x40; uint256 constant UnresolvedOfferCriteria_error_length = 0x44; /* * error UnresolvedConsiderationCriteria( * uint256 orderIndex, * uint256 considerationIndex * ) * - Defined in CriteriaResolutionErrors.sol * Memory layout: * - 0x00: Left-padded selector (data begins at 0x1c) * - 0x20: orderIndex * - 0x40: considerationIndex * Revert buffer is memory[0x1c:0x60] */ uint256 constant UnresolvedConsiderationCriteria_error_selector = 0xa8930e9a; uint256 constant UnresolvedConsiderationCriteria_error_orderIndex_ptr = 0x20; uint256 constant UnresolvedConsiderationCriteria_error_considerationIdx_ptr = ( 0x40 ); uint256 constant UnresolvedConsiderationCriteria_error_length = 0x44; /* * error OfferCriteriaResolverOutOfRange() * - Defined in CriteriaResolutionErrors.sol * Memory layout: * - 0x00: Left-padded selector (data begins at 0x1c) * Revert buffer is memory[0x1c:0x20] */ uint256 constant OfferCriteriaResolverOutOfRange_error_selector = 0xbfb3f8ce; // uint256 constant OfferCriteriaResolverOutOfRange_error_length = 0x04; /* * error ConsiderationCriteriaResolverOutOfRange() * - Defined in CriteriaResolutionErrors.sol * Memory layout: * - 0x00: Left-padded selector (data begins at 0x1c) * Revert buffer is memory[0x1c:0x20] */ uint256 constant ConsiderationCriteriaResolverOutOfRange_error_selector = ( 0x6088d7de ); uint256 constant ConsiderationCriteriaResolverOutOfRange_err_selector = ( 0x6088d7de ); // uint256 constant ConsiderationCriteriaResolverOutOfRange_error_length = 0x04; /* * error CriteriaNotEnabledForItem() * - Defined in CriteriaResolutionErrors.sol * Memory layout: * - 0x00: Left-padded selector (data begins at 0x1c) * Revert buffer is memory[0x1c:0x20] */ uint256 constant CriteriaNotEnabledForItem_error_selector = 0x94eb6af6; uint256 constant CriteriaNotEnabledForItem_error_length = 0x04; /* * error InvalidProof() * - Defined in CriteriaResolutionErrors.sol * Memory layout: * - 0x00: Left-padded selector (data begins at 0x1c) * Revert buffer is memory[0x1c:0x20] */ uint256 constant InvalidProof_error_selector = 0x09bde339; uint256 constant InvalidProof_error_length = 0x04; /* * error InvalidRestrictedOrder(bytes32 orderHash) * - Defined in ZoneInteractionErrors.sol * Memory layout: * - 0x00: Left-padded selector (data begins at 0x1c) * - 0x20: orderHash * Revert buffer is memory[0x1c:0x40] */ uint256 constant InvalidRestrictedOrder_error_selector = 0xfb5014fc; uint256 constant InvalidRestrictedOrder_error_orderHash_ptr = 0x20; uint256 constant InvalidRestrictedOrder_error_length = 0x24; /* * error InvalidContractOrder(bytes32 orderHash) * - Defined in ZoneInteractionErrors.sol * Memory layout: * - 0x00: Left-padded selector (data begins at 0x1c) * - 0x20: orderHash * Revert buffer is memory[0x1c:0x40] */ uint256 constant InvalidContractOrder_error_selector = 0x93979285; uint256 constant InvalidContractOrder_error_orderHash_ptr = 0x20; uint256 constant InvalidContractOrder_error_length = 0x24; /* * error BadSignatureV(uint8 v) * - Defined in SignatureVerificationErrors.sol * Memory layout: * - 0x00: Left-padded selector (data begins at 0x1c) * - 0x20: v * Revert buffer is memory[0x1c:0x40] */ uint256 constant BadSignatureV_error_selector = 0x1f003d0a; uint256 constant BadSignatureV_error_v_ptr = 0x20; uint256 constant BadSignatureV_error_length = 0x24; /* * error InvalidSigner() * - Defined in SignatureVerificationErrors.sol * Memory layout: * - 0x00: Left-padded selector (data begins at 0x1c) * Revert buffer is memory[0x1c:0x20] */ uint256 constant InvalidSigner_error_selector = 0x815e1d64; uint256 constant InvalidSigner_error_length = 0x04; /* * error InvalidSignature() * - Defined in SignatureVerificationErrors.sol * Memory layout: * - 0x00: Left-padded selector (data begins at 0x1c) * Revert buffer is memory[0x1c:0x20] */ uint256 constant InvalidSignature_error_selector = 0x8baa579f; uint256 constant InvalidSignature_error_length = 0x04; /* * error BadContractSignature() * - Defined in SignatureVerificationErrors.sol * Memory layout: * - 0x00: Left-padded selector (data begins at 0x1c) * Revert buffer is memory[0x1c:0x20] */ uint256 constant BadContractSignature_error_selector = 0x4f7fb80d; uint256 constant BadContractSignature_error_length = 0x04; /* * error InvalidERC721TransferAmount(uint256 amount) * - Defined in TokenTransferrerErrors.sol * Memory layout: * - 0x00: Left-padded selector (data begins at 0x1c) * - 0x20: amount * Revert buffer is memory[0x1c:0x40] */ uint256 constant InvalidERC721TransferAmount_error_selector = 0x69f95827; uint256 constant InvalidERC721TransferAmount_error_amount_ptr = 0x20; uint256 constant InvalidERC721TransferAmount_error_length = 0x24; /* * error MissingItemAmount() * - Defined in TokenTransferrerErrors.sol * Memory layout: * - 0x00: Left-padded selector (data begins at 0x1c) * Revert buffer is memory[0x1c:0x20] */ uint256 constant MissingItemAmount_error_selector = 0x91b3e514; uint256 constant MissingItemAmount_error_length = 0x04; /* * error UnusedItemParameters() * - Defined in TokenTransferrerErrors.sol * Memory layout: * - 0x00: Left-padded selector (data begins at 0x1c) * Revert buffer is memory[0x1c:0x20] */ uint256 constant UnusedItemParameters_error_selector = 0x6ab37ce7; uint256 constant UnusedItemParameters_error_length = 0x04; /* * error NoReentrantCalls() * - Defined in ReentrancyErrors.sol * Memory layout: * - 0x00: Left-padded selector (data begins at 0x1c) * Revert buffer is memory[0x1c:0x20] */ uint256 constant NoReentrantCalls_error_selector = 0x7fa8a987; uint256 constant NoReentrantCalls_error_length = 0x04; /* * error OrderAlreadyFilled(bytes32 orderHash) * - Defined in ConsiderationEventsAndErrors.sol * Memory layout: * - 0x00: Left-padded selector (data begins at 0x1c) * - 0x20: orderHash * Revert buffer is memory[0x1c:0x40] */ uint256 constant OrderAlreadyFilled_error_selector = 0x10fda3e1; uint256 constant OrderAlreadyFilled_error_orderHash_ptr = 0x20; uint256 constant OrderAlreadyFilled_error_length = 0x24; /* * error InvalidTime(uint256 startTime, uint256 endTime) * - Defined in ConsiderationEventsAndErrors.sol * Memory layout: * - 0x00: Left-padded selector (data begins at 0x1c) * - 0x20: startTime * - 0x40: endTime * Revert buffer is memory[0x1c:0x60] */ uint256 constant InvalidTime_error_selector = 0x21ccfeb7; uint256 constant InvalidTime_error_startTime_ptr = 0x20; uint256 constant InvalidTime_error_endTime_ptr = 0x40; uint256 constant InvalidTime_error_length = 0x44; /* * error InvalidConduit(bytes32 conduitKey, address conduit) * - Defined in ConsiderationEventsAndErrors.sol * Memory layout: * - 0x00: Left-padded selector (data begins at 0x1c) * - 0x20: conduitKey * - 0x40: conduit * Revert buffer is memory[0x1c:0x60] */ uint256 constant InvalidConduit_error_selector = 0x1cf99b26; uint256 constant InvalidConduit_error_conduitKey_ptr = 0x20; uint256 constant InvalidConduit_error_conduit_ptr = 0x40; uint256 constant InvalidConduit_error_length = 0x44; /* * error MissingOriginalConsiderationItems() * - Defined in ConsiderationEventsAndErrors.sol * Memory layout: * - 0x00: Left-padded selector (data begins at 0x1c) * Revert buffer is memory[0x1c:0x20] */ uint256 constant MissingOriginalConsiderationItems_error_selector = 0x466aa616; uint256 constant MissingOriginalConsiderationItems_error_length = 0x04; /* * error InvalidCallToConduit(address conduit) * - Defined in ConsiderationEventsAndErrors.sol * Memory layout: * - 0x00: Left-padded selector (data begins at 0x1c) * - 0x20: conduit * Revert buffer is memory[0x1c:0x40] */ uint256 constant InvalidCallToConduit_error_selector = 0xd13d53d4; uint256 constant InvalidCallToConduit_error_conduit_ptr = 0x20; uint256 constant InvalidCallToConduit_error_length = 0x24; /* * error ConsiderationNotMet( * uint256 orderIndex, * uint256 considerationIndex, * uint256 shortfallAmount * ) * - Defined in ConsiderationEventsAndErrors.sol * Memory layout: * - 0x00: Left-padded selector (data begins at 0x1c) * - 0x20: orderIndex * - 0x40: considerationIndex * - 0x60: shortfallAmount * Revert buffer is memory[0x1c:0x80] */ uint256 constant ConsiderationNotMet_error_selector = 0xa5f54208; uint256 constant ConsiderationNotMet_error_orderIndex_ptr = 0x20; uint256 constant ConsiderationNotMet_error_considerationIndex_ptr = 0x40; uint256 constant ConsiderationNotMet_error_shortfallAmount_ptr = 0x60; uint256 constant ConsiderationNotMet_error_length = 0x64; /* * error InsufficientNativeTokensSupplied() * - Defined in ConsiderationEventsAndErrors.sol * Memory layout: * - 0x00: Left-padded selector (data begins at 0x1c) * Revert buffer is memory[0x1c:0x20] */ uint256 constant InsufficientNativeTokensSupplied_error_selector = 0x8ffff980; uint256 constant InsufficientNativeTokensSupplied_error_length = 0x04; /* * error NativeTokenTransferGenericFailure(address account, uint256 amount) * - Defined in ConsiderationEventsAndErrors.sol * Memory layout: * - 0x00: Left-padded selector (data begins at 0x1c) * - 0x20: account * - 0x40: amount * Revert buffer is memory[0x1c:0x60] */ uint256 constant NativeTokenTransferGenericFailure_error_selector = 0xbc806b96; uint256 constant NativeTokenTransferGenericFailure_error_account_ptr = 0x20; uint256 constant NativeTokenTransferGenericFailure_error_amount_ptr = 0x40; uint256 constant NativeTokenTransferGenericFailure_error_length = 0x44; /* * error PartialFillsNotEnabledForOrder() * - Defined in ConsiderationEventsAndErrors.sol * Memory layout: * - 0x00: Left-padded selector (data begins at 0x1c) * Revert buffer is memory[0x1c:0x20] */ uint256 constant PartialFillsNotEnabledForOrder_error_selector = 0xa11b63ff; uint256 constant PartialFillsNotEnabledForOrder_error_length = 0x04; /* * error OrderIsCancelled(bytes32 orderHash) * - Defined in ConsiderationEventsAndErrors.sol * Memory layout: * - 0x00: Left-padded selector (data begins at 0x1c) * - 0x20: orderHash * Revert buffer is memory[0x1c:0x40] */ uint256 constant OrderIsCancelled_error_selector = 0x1a515574; uint256 constant OrderIsCancelled_error_orderHash_ptr = 0x20; uint256 constant OrderIsCancelled_error_length = 0x24; /* * error OrderPartiallyFilled(bytes32 orderHash) * - Defined in ConsiderationEventsAndErrors.sol * Memory layout: * - 0x00: Left-padded selector (data begins at 0x1c) * - 0x20: orderHash * Revert buffer is memory[0x1c:0x40] */ uint256 constant OrderPartiallyFilled_error_selector = 0xee9e0e63; uint256 constant OrderPartiallyFilled_error_orderHash_ptr = 0x20; uint256 constant OrderPartiallyFilled_error_length = 0x24; /* * error CannotCancelOrder() * - Defined in ConsiderationEventsAndErrors.sol * Memory layout: * - 0x00: Left-padded selector (data begins at 0x1c) * Revert buffer is memory[0x1c:0x20] */ uint256 constant CannotCancelOrder_error_selector = 0xfed398fc; uint256 constant CannotCancelOrder_error_length = 0x04; /* * error BadFraction() * - Defined in ConsiderationEventsAndErrors.sol * Memory layout: * - 0x00: Left-padded selector (data begins at 0x1c) * Revert buffer is memory[0x1c:0x20] */ uint256 constant BadFraction_error_selector = 0x5a052b32; uint256 constant BadFraction_error_length = 0x04; /* * error InvalidMsgValue(uint256 value) * - Defined in ConsiderationEventsAndErrors.sol * Memory layout: * - 0x00: Left-padded selector (data begins at 0x1c) * - 0x20: value * Revert buffer is memory[0x1c:0x40] */ uint256 constant InvalidMsgValue_error_selector = 0xa61be9f0; uint256 constant InvalidMsgValue_error_value_ptr = 0x20; uint256 constant InvalidMsgValue_error_length = 0x24; /* * error InvalidBasicOrderParameterEncoding() * - Defined in ConsiderationEventsAndErrors.sol * Memory layout: * - 0x00: Left-padded selector (data begins at 0x1c) * Revert buffer is memory[0x1c:0x20] */ uint256 constant InvalidBasicOrderParameterEncoding_error_selector = 0x39f3e3fd; uint256 constant InvalidBasicOrderParameterEncoding_error_length = 0x04; /* * error NoSpecifiedOrdersAvailable() * - Defined in ConsiderationEventsAndErrors.sol * Memory layout: * - 0x00: Left-padded selector (data begins at 0x1c) * Revert buffer is memory[0x1c:0x20] */ uint256 constant NoSpecifiedOrdersAvailable_error_selector = 0xd5da9a1b; uint256 constant NoSpecifiedOrdersAvailable_error_length = 0x04; /* * error InvalidNativeOfferItem() * - Defined in ConsiderationEventsAndErrors.sol * Memory layout: * - 0x00: Left-padded selector (data begins at 0x1c) * Revert buffer is memory[0x1c:0x20] */ uint256 constant InvalidNativeOfferItem_error_selector = 0x12d3f5a3; uint256 constant InvalidNativeOfferItem_error_length = 0x04; /* * error ConsiderationLengthNotEqualToTotalOriginal() * - Defined in ConsiderationEventsAndErrors.sol * Memory layout: * - 0x00: Left-padded selector (data begins at 0x1c) * Revert buffer is memory[0x1c:0x20] */ uint256 constant ConsiderationLengthNotEqualToTotalOriginal_error_selector = ( 0x2165628a ); uint256 constant ConsiderationLengthNotEqualToTotalOriginal_error_length = 0x04; /* * error Panic(uint256 code) * - Built-in Solidity error * Memory layout: * - 0x00: Left-padded selector (data begins at 0x1c) * - 0x20: code * Revert buffer is memory[0x1c:0x40] */ uint256 constant Panic_error_selector = 0x4e487b71; uint256 constant Panic_error_code_ptr = 0x20; uint256 constant Panic_error_length = 0x24; uint256 constant Panic_arithmetic = 0x11; // uint256 constant Panic_resource = 0x41;
// SPDX-License-Identifier: MIT pragma solidity 0.8.17; import { Side } from "./ConsiderationEnums.sol"; import { BadFraction_error_length, BadFraction_error_selector, CannotCancelOrder_error_length, CannotCancelOrder_error_selector, ConsiderationLengthNotEqualToTotalOriginal_error_length, ConsiderationLengthNotEqualToTotalOriginal_error_selector, ConsiderationNotMet_error_considerationIndex_ptr, ConsiderationNotMet_error_length, ConsiderationNotMet_error_orderIndex_ptr, ConsiderationNotMet_error_selector, ConsiderationNotMet_error_shortfallAmount_ptr, CriteriaNotEnabledForItem_error_length, CriteriaNotEnabledForItem_error_selector, Error_selector_offset, InsufficientNativeTokensSupplied_error_length, InsufficientNativeTokensSupplied_error_selector, InvalidBasicOrderParameterEncoding_error_length, InvalidBasicOrderParameterEncoding_error_selector, InvalidCallToConduit_error_conduit_ptr, InvalidCallToConduit_error_length, InvalidCallToConduit_error_selector, InvalidConduit_error_conduit_ptr, InvalidConduit_error_conduitKey_ptr, InvalidConduit_error_length, InvalidConduit_error_selector, InvalidContractOrder_error_length, InvalidContractOrder_error_orderHash_ptr, InvalidContractOrder_error_selector, InvalidERC721TransferAmount_error_amount_ptr, InvalidERC721TransferAmount_error_length, InvalidERC721TransferAmount_error_selector, InvalidMsgValue_error_length, InvalidMsgValue_error_selector, InvalidMsgValue_error_value_ptr, InvalidNativeOfferItem_error_length, InvalidNativeOfferItem_error_selector, InvalidProof_error_length, InvalidProof_error_selector, InvalidTime_error_endTime_ptr, InvalidTime_error_length, InvalidTime_error_selector, InvalidTime_error_startTime_ptr, MismatchedOfferAndConsiderationComponents_error_idx_ptr, MismatchedOfferAndConsiderationComponents_error_length, MismatchedOfferAndConsiderationComponents_error_selector, MissingFulfillmentComponentOnAggregation_error_length, MissingFulfillmentComponentOnAggregation_error_selector, MissingFulfillmentComponentOnAggregation_error_side_ptr, MissingOriginalConsiderationItems_error_length, MissingOriginalConsiderationItems_error_selector, NoReentrantCalls_error_length, NoReentrantCalls_error_selector, NoSpecifiedOrdersAvailable_error_length, NoSpecifiedOrdersAvailable_error_selector, OfferAndConsiderationRequiredOnFulfillment_error_length, OfferAndConsiderationRequiredOnFulfillment_error_selector, OrderAlreadyFilled_error_length, OrderAlreadyFilled_error_orderHash_ptr, OrderAlreadyFilled_error_selector, OrderCriteriaResolverOutOfRange_error_length, OrderCriteriaResolverOutOfRange_error_selector, OrderCriteriaResolverOutOfRange_error_side_ptr, OrderIsCancelled_error_length, OrderIsCancelled_error_orderHash_ptr, OrderIsCancelled_error_selector, OrderPartiallyFilled_error_length, OrderPartiallyFilled_error_orderHash_ptr, OrderPartiallyFilled_error_selector, PartialFillsNotEnabledForOrder_error_length, PartialFillsNotEnabledForOrder_error_selector, UnresolvedConsiderationCriteria_error_considerationIdx_ptr, UnresolvedConsiderationCriteria_error_length, UnresolvedConsiderationCriteria_error_orderIndex_ptr, UnresolvedConsiderationCriteria_error_selector, UnresolvedOfferCriteria_error_length, UnresolvedOfferCriteria_error_offerIndex_ptr, UnresolvedOfferCriteria_error_orderIndex_ptr, UnresolvedOfferCriteria_error_selector, UnusedItemParameters_error_length, UnusedItemParameters_error_selector } from "./ConsiderationErrorConstants.sol"; /** * @dev Reverts the current transaction with a "BadFraction" error message. */ function _revertBadFraction() pure { assembly { // Store left-padded selector with push4 (reduces bytecode), // mem[28:32] = selector mstore(0, BadFraction_error_selector) // revert(abi.encodeWithSignature("BadFraction()")) revert(Error_selector_offset, BadFraction_error_length) } } /** * @dev Reverts the current transaction with a "ConsiderationNotMet" error * message, including the provided order index, consideration index, and * shortfall amount. * * @param orderIndex The index of the order that did not meet the * consideration criteria. * @param considerationIndex The index of the consideration item that did not * meet its criteria. * @param shortfallAmount The amount by which the consideration criteria were * not met. */ function _revertConsiderationNotMet( uint256 orderIndex, uint256 considerationIndex, uint256 shortfallAmount ) pure { assembly { // Store left-padded selector with push4 (reduces bytecode), // mem[28:32] = selector mstore(0, ConsiderationNotMet_error_selector) // Store arguments. mstore(ConsiderationNotMet_error_orderIndex_ptr, orderIndex) mstore( ConsiderationNotMet_error_considerationIndex_ptr, considerationIndex ) mstore(ConsiderationNotMet_error_shortfallAmount_ptr, shortfallAmount) // revert(abi.encodeWithSignature( // "ConsiderationNotMet(uint256,uint256,uint256)", // orderIndex, // considerationIndex, // shortfallAmount // )) revert(Error_selector_offset, ConsiderationNotMet_error_length) } } /** * @dev Reverts the current transaction with a "CriteriaNotEnabledForItem" error * message. */ function _revertCriteriaNotEnabledForItem() pure { assembly { // Store left-padded selector with push4 (reduces bytecode), // mem[28:32] = selector mstore(0, CriteriaNotEnabledForItem_error_selector) // revert(abi.encodeWithSignature("CriteriaNotEnabledForItem()")) revert(Error_selector_offset, CriteriaNotEnabledForItem_error_length) } } /** * @dev Reverts the current transaction with an * "InsufficientNativeTokensSupplied" error message. */ function _revertInsufficientNativeTokensSupplied() pure { assembly { // Store left-padded selector with push4 (reduces bytecode), // mem[28:32] = selector mstore(0, InsufficientNativeTokensSupplied_error_selector) // revert(abi.encodeWithSignature("InsufficientNativeTokensSupplied()")) revert( Error_selector_offset, InsufficientNativeTokensSupplied_error_length ) } } /** * @dev Reverts the current transaction with an * "InvalidBasicOrderParameterEncoding" error message. */ function _revertInvalidBasicOrderParameterEncoding() pure { assembly { // Store left-padded selector with push4 (reduces bytecode), // mem[28:32] = selector mstore(0, InvalidBasicOrderParameterEncoding_error_selector) // revert(abi.encodeWithSignature( // "InvalidBasicOrderParameterEncoding()" // )) revert( Error_selector_offset, InvalidBasicOrderParameterEncoding_error_length ) } } /** * @dev Reverts the current transaction with an "InvalidCallToConduit" error * message, including the provided address of the conduit that was called * improperly. * * @param conduit The address of the conduit that was called improperly. */ function _revertInvalidCallToConduit(address conduit) pure { assembly { // Store left-padded selector with push4 (reduces bytecode), // mem[28:32] = selector mstore(0, InvalidCallToConduit_error_selector) // Store argument. mstore(InvalidCallToConduit_error_conduit_ptr, conduit) // revert(abi.encodeWithSignature( // "InvalidCallToConduit(address)", // conduit // )) revert(Error_selector_offset, InvalidCallToConduit_error_length) } } /** * @dev Reverts the current transaction with an "CannotCancelOrder" error * message. */ function _revertCannotCancelOrder() pure { assembly { // Store left-padded selector with push4 (reduces bytecode), // mem[28:32] = selector mstore(0, CannotCancelOrder_error_selector) // revert(abi.encodeWithSignature("CannotCancelOrder()")) revert(Error_selector_offset, CannotCancelOrder_error_length) } } /** * @dev Reverts the current transaction with an "InvalidConduit" error message, * including the provided key and address of the invalid conduit. * * @param conduitKey The key of the invalid conduit. * @param conduit The address of the invalid conduit. */ function _revertInvalidConduit(bytes32 conduitKey, address conduit) pure { assembly { // Store left-padded selector with push4 (reduces bytecode), // mem[28:32] = selector mstore(0, InvalidConduit_error_selector) // Store arguments. mstore(InvalidConduit_error_conduitKey_ptr, conduitKey) mstore(InvalidConduit_error_conduit_ptr, conduit) // revert(abi.encodeWithSignature( // "InvalidConduit(bytes32,address)", // conduitKey, // conduit // )) revert(Error_selector_offset, InvalidConduit_error_length) } } /** * @dev Reverts the current transaction with an "InvalidERC721TransferAmount" * error message. * * @param amount The invalid amount. */ function _revertInvalidERC721TransferAmount(uint256 amount) pure { assembly { // Store left-padded selector with push4 (reduces bytecode), // mem[28:32] = selector mstore(0, InvalidERC721TransferAmount_error_selector) // Store argument. mstore(InvalidERC721TransferAmount_error_amount_ptr, amount) // revert(abi.encodeWithSignature( // "InvalidERC721TransferAmount(uint256)", // amount // )) revert(Error_selector_offset, InvalidERC721TransferAmount_error_length) } } /** * @dev Reverts the current transaction with an "InvalidMsgValue" error message, * including the invalid value that was sent in the transaction's * `msg.value` field. * * @param value The invalid value that was sent in the transaction's `msg.value` * field. */ function _revertInvalidMsgValue(uint256 value) pure { assembly { // Store left-padded selector with push4 (reduces bytecode), // mem[28:32] = selector mstore(0, InvalidMsgValue_error_selector) // Store argument. mstore(InvalidMsgValue_error_value_ptr, value) // revert(abi.encodeWithSignature("InvalidMsgValue(uint256)", value)) revert(Error_selector_offset, InvalidMsgValue_error_length) } } /** * @dev Reverts the current transaction with an "InvalidNativeOfferItem" error * message. */ function _revertInvalidNativeOfferItem() pure { assembly { // Store left-padded selector with push4 (reduces bytecode), // mem[28:32] = selector mstore(0, InvalidNativeOfferItem_error_selector) // revert(abi.encodeWithSignature("InvalidNativeOfferItem()")) revert(Error_selector_offset, InvalidNativeOfferItem_error_length) } } /** * @dev Reverts the current transaction with an "InvalidProof" error message. */ function _revertInvalidProof() pure { assembly { // Store left-padded selector with push4 (reduces bytecode), // mem[28:32] = selector mstore(0, InvalidProof_error_selector) // revert(abi.encodeWithSignature("InvalidProof()")) revert(Error_selector_offset, InvalidProof_error_length) } } /** * @dev Reverts the current transaction with an "InvalidContractOrder" error * message. * * @param orderHash The hash of the contract order that caused the error. */ function _revertInvalidContractOrder(bytes32 orderHash) pure { assembly { // Store left-padded selector with push4 (reduces bytecode), // mem[28:32] = selector mstore(0, InvalidContractOrder_error_selector) // Store arguments. mstore(InvalidContractOrder_error_orderHash_ptr, orderHash) // revert(abi.encodeWithSignature( // "InvalidContractOrder(bytes32)", // orderHash // )) revert(Error_selector_offset, InvalidContractOrder_error_length) } } /** * @dev Reverts the current transaction with an "InvalidTime" error message. * * @param startTime The time at which the order becomes active. * @param endTime The time at which the order becomes inactive. */ function _revertInvalidTime(uint256 startTime, uint256 endTime) pure { assembly { // Store left-padded selector with push4 (reduces bytecode), // mem[28:32] = selector mstore(0, InvalidTime_error_selector) // Store arguments. mstore(InvalidTime_error_startTime_ptr, startTime) mstore(InvalidTime_error_endTime_ptr, endTime) // revert(abi.encodeWithSignature( // "InvalidTime(uint256,uint256)", // startTime, // endTime // )) revert(Error_selector_offset, InvalidTime_error_length) } } /** * @dev Reverts execution with a * "MismatchedFulfillmentOfferAndConsiderationComponents" error message. * * @param fulfillmentIndex The index of the fulfillment that caused the * error. */ function _revertMismatchedFulfillmentOfferAndConsiderationComponents( uint256 fulfillmentIndex ) pure { assembly { // Store left-padded selector with push4 (reduces bytecode), // mem[28:32] = selector mstore(0, MismatchedOfferAndConsiderationComponents_error_selector) // Store fulfillment index argument. mstore( MismatchedOfferAndConsiderationComponents_error_idx_ptr, fulfillmentIndex ) // revert(abi.encodeWithSignature( // "MismatchedFulfillmentOfferAndConsiderationComponents(uint256)", // fulfillmentIndex // )) revert( Error_selector_offset, MismatchedOfferAndConsiderationComponents_error_length ) } } /** * @dev Reverts execution with a "MissingFulfillmentComponentOnAggregation" * error message. * * @param side The side of the fulfillment component that is missing (0 for * offer, 1 for consideration). * */ function _revertMissingFulfillmentComponentOnAggregation(Side side) pure { assembly { // Store left-padded selector with push4 (reduces bytecode), // mem[28:32] = selector mstore(0, MissingFulfillmentComponentOnAggregation_error_selector) // Store argument. mstore(MissingFulfillmentComponentOnAggregation_error_side_ptr, side) // revert(abi.encodeWithSignature( // "MissingFulfillmentComponentOnAggregation(uint8)", // side // )) revert( Error_selector_offset, MissingFulfillmentComponentOnAggregation_error_length ) } } /** * @dev Reverts execution with a "MissingOriginalConsiderationItems" error * message. */ function _revertMissingOriginalConsiderationItems() pure { assembly { // Store left-padded selector with push4 (reduces bytecode), // mem[28:32] = selector mstore(0, MissingOriginalConsiderationItems_error_selector) // revert(abi.encodeWithSignature( // "MissingOriginalConsiderationItems()" // )) revert( Error_selector_offset, MissingOriginalConsiderationItems_error_length ) } } /** * @dev Reverts execution with a "NoReentrantCalls" error message. */ function _revertNoReentrantCalls() pure { assembly { // Store left-padded selector with push4 (reduces bytecode), // mem[28:32] = selector mstore(0, NoReentrantCalls_error_selector) // revert(abi.encodeWithSignature("NoReentrantCalls()")) revert(Error_selector_offset, NoReentrantCalls_error_length) } } /** * @dev Reverts execution with a "NoSpecifiedOrdersAvailable" error message. */ function _revertNoSpecifiedOrdersAvailable() pure { assembly { // Store left-padded selector with push4 (reduces bytecode), // mem[28:32] = selector mstore(0, NoSpecifiedOrdersAvailable_error_selector) // revert(abi.encodeWithSignature("NoSpecifiedOrdersAvailable()")) revert(Error_selector_offset, NoSpecifiedOrdersAvailable_error_length) } } /** * @dev Reverts execution with a "OfferAndConsiderationRequiredOnFulfillment" * error message. */ function _revertOfferAndConsiderationRequiredOnFulfillment() pure { assembly { // Store left-padded selector with push4 (reduces bytecode), // mem[28:32] = selector mstore(0, OfferAndConsiderationRequiredOnFulfillment_error_selector) // revert(abi.encodeWithSignature( // "OfferAndConsiderationRequiredOnFulfillment()" // )) revert( Error_selector_offset, OfferAndConsiderationRequiredOnFulfillment_error_length ) } } /** * @dev Reverts execution with an "OrderAlreadyFilled" error message. * * @param orderHash The hash of the order that has already been filled. */ function _revertOrderAlreadyFilled(bytes32 orderHash) pure { assembly { // Store left-padded selector with push4 (reduces bytecode), // mem[28:32] = selector mstore(0, OrderAlreadyFilled_error_selector) // Store argument. mstore(OrderAlreadyFilled_error_orderHash_ptr, orderHash) // revert(abi.encodeWithSignature( // "OrderAlreadyFilled(bytes32)", // orderHash // )) revert(Error_selector_offset, OrderAlreadyFilled_error_length) } } /** * @dev Reverts execution with an "OrderCriteriaResolverOutOfRange" error * message. * * @param side The side of the criteria that is missing (0 for offer, 1 for * consideration). * */ function _revertOrderCriteriaResolverOutOfRange(Side side) pure { assembly { // Store left-padded selector with push4 (reduces bytecode), // mem[28:32] = selector mstore(0, OrderCriteriaResolverOutOfRange_error_selector) // Store argument. mstore(OrderCriteriaResolverOutOfRange_error_side_ptr, side) // revert(abi.encodeWithSignature( // "OrderCriteriaResolverOutOfRange(uint8)", // side // )) revert( Error_selector_offset, OrderCriteriaResolverOutOfRange_error_length ) } } /** * @dev Reverts execution with an "OrderIsCancelled" error message. * * @param orderHash The hash of the order that has already been cancelled. */ function _revertOrderIsCancelled(bytes32 orderHash) pure { assembly { // Store left-padded selector with push4 (reduces bytecode), // mem[28:32] = selector mstore(0, OrderIsCancelled_error_selector) // Store argument. mstore(OrderIsCancelled_error_orderHash_ptr, orderHash) // revert(abi.encodeWithSignature( // "OrderIsCancelled(bytes32)", // orderHash // )) revert(Error_selector_offset, OrderIsCancelled_error_length) } } /** * @dev Reverts execution with an "OrderPartiallyFilled" error message. * * @param orderHash The hash of the order that has already been partially * filled. */ function _revertOrderPartiallyFilled(bytes32 orderHash) pure { assembly { // Store left-padded selector with push4 (reduces bytecode), // mem[28:32] = selector mstore(0, OrderPartiallyFilled_error_selector) // Store argument. mstore(OrderPartiallyFilled_error_orderHash_ptr, orderHash) // revert(abi.encodeWithSignature( // "OrderPartiallyFilled(bytes32)", // orderHash // )) revert(Error_selector_offset, OrderPartiallyFilled_error_length) } } /** * @dev Reverts execution with a "PartialFillsNotEnabledForOrder" error message. */ function _revertPartialFillsNotEnabledForOrder() pure { assembly { // Store left-padded selector with push4 (reduces bytecode), // mem[28:32] = selector mstore(0, PartialFillsNotEnabledForOrder_error_selector) // revert(abi.encodeWithSignature("PartialFillsNotEnabledForOrder()")) revert( Error_selector_offset, PartialFillsNotEnabledForOrder_error_length ) } } /** * @dev Reverts execution with an "UnresolvedConsiderationCriteria" error * message. */ function _revertUnresolvedConsiderationCriteria( uint256 orderIndex, uint256 considerationIndex ) pure { assembly { // Store left-padded selector with push4 (reduces bytecode), // mem[28:32] = selector mstore(0, UnresolvedConsiderationCriteria_error_selector) // Store orderIndex and considerationIndex arguments. mstore(UnresolvedConsiderationCriteria_error_orderIndex_ptr, orderIndex) mstore( UnresolvedConsiderationCriteria_error_considerationIdx_ptr, considerationIndex ) // revert(abi.encodeWithSignature( // "UnresolvedConsiderationCriteria(uint256, uint256)", // orderIndex, // considerationIndex // )) revert( Error_selector_offset, UnresolvedConsiderationCriteria_error_length ) } } /** * @dev Reverts execution with an "UnresolvedOfferCriteria" error message. */ function _revertUnresolvedOfferCriteria( uint256 orderIndex, uint256 offerIndex ) pure { assembly { // Store left-padded selector with push4 (reduces bytecode), // mem[28:32] = selector mstore(0, UnresolvedOfferCriteria_error_selector) // Store arguments. mstore(UnresolvedOfferCriteria_error_orderIndex_ptr, orderIndex) mstore(UnresolvedOfferCriteria_error_offerIndex_ptr, offerIndex) // revert(abi.encodeWithSignature( // "UnresolvedOfferCriteria(uint256, uint256)", // orderIndex, // offerIndex // )) revert(Error_selector_offset, UnresolvedOfferCriteria_error_length) } } /** * @dev Reverts execution with an "UnusedItemParameters" error message. */ function _revertUnusedItemParameters() pure { assembly { // Store left-padded selector with push4 (reduces bytecode), // mem[28:32] = selector mstore(0, UnusedItemParameters_error_selector) // revert(abi.encodeWithSignature("UnusedItemParameters()")) revert(Error_selector_offset, UnusedItemParameters_error_length) } } /** * @dev Reverts execution with a "ConsiderationLengthNotEqualToTotalOriginal" * error message. */ function _revertConsiderationLengthNotEqualToTotalOriginal() pure { assembly { // Store left-padded selector with push4 (reduces bytecode), // mem[28:32] = selector mstore(0, ConsiderationLengthNotEqualToTotalOriginal_error_selector) // revert(abi.encodeWithSignature( // "ConsiderationLengthNotEqualToTotalOriginal()" // )) revert( Error_selector_offset, ConsiderationLengthNotEqualToTotalOriginal_error_length ) } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.13; import { BasicOrderType, ItemType, OrderType, Side } from "./ConsiderationEnums.sol"; import { CalldataPointer, MemoryPointer } from "../helpers/PointerLibraries.sol"; /** * @dev An order contains eleven components: an offerer, a zone (or account that * can cancel the order or restrict who can fulfill the order depending on * the type), the order type (specifying partial fill support as well as * restricted order status), the start and end time, a hash that will be * provided to the zone when validating restricted orders, a salt, a key * corresponding to a given conduit, a counter, and an arbitrary number of * offer items that can be spent along with consideration items that must * be received by their respective recipient. */ struct OrderComponents { address offerer; address zone; OfferItem[] offer; ConsiderationItem[] consideration; OrderType orderType; uint256 startTime; uint256 endTime; bytes32 zoneHash; uint256 salt; bytes32 conduitKey; uint256 counter; } /** * @dev An offer item has five components: an item type (ETH or other native * tokens, ERC20, ERC721, and ERC1155, as well as criteria-based ERC721 and * ERC1155), a token address, a dual-purpose "identifierOrCriteria" * component that will either represent a tokenId or a merkle root * depending on the item type, and a start and end amount that support * increasing or decreasing amounts over the duration of the respective * order. */ struct OfferItem { ItemType itemType; address token; uint256 identifierOrCriteria; uint256 startAmount; uint256 endAmount; } /** * @dev A consideration item has the same five components as an offer item and * an additional sixth component designating the required recipient of the * item. */ struct ConsiderationItem { ItemType itemType; address token; uint256 identifierOrCriteria; uint256 startAmount; uint256 endAmount; address payable recipient; } /** * @dev A spent item is translated from a utilized offer item and has four * components: an item type (ETH or other native tokens, ERC20, ERC721, and * ERC1155), a token address, a tokenId, and an amount. */ struct SpentItem { ItemType itemType; address token; uint256 identifier; uint256 amount; } /** * @dev A received item is translated from a utilized consideration item and has * the same four components as a spent item, as well as an additional fifth * component designating the required recipient of the item. */ struct ReceivedItem { ItemType itemType; address token; uint256 identifier; uint256 amount; address payable recipient; } /** * @dev For basic orders involving ETH / native / ERC20 <=> ERC721 / ERC1155 * matching, a group of six functions may be called that only requires a * subset of the usual order arguments. Note the use of a "basicOrderType" * enum; this represents both the usual order type as well as the "route" * of the basic order (a simple derivation function for the basic order * type is `basicOrderType = orderType + (4 * basicOrderRoute)`.) */ struct BasicOrderParameters { // calldata offset address considerationToken; // 0x24 uint256 considerationIdentifier; // 0x44 uint256 considerationAmount; // 0x64 address payable offerer; // 0x84 address zone; // 0xa4 address offerToken; // 0xc4 uint256 offerIdentifier; // 0xe4 uint256 offerAmount; // 0x104 BasicOrderType basicOrderType; // 0x124 uint256 startTime; // 0x144 uint256 endTime; // 0x164 bytes32 zoneHash; // 0x184 uint256 salt; // 0x1a4 bytes32 offererConduitKey; // 0x1c4 bytes32 fulfillerConduitKey; // 0x1e4 uint256 totalOriginalAdditionalRecipients; // 0x204 AdditionalRecipient[] additionalRecipients; // 0x224 bytes signature; // 0x244 // Total length, excluding dynamic array data: 0x264 (580) } /** * @dev Basic orders can supply any number of additional recipients, with the * implied assumption that they are supplied from the offered ETH (or other * native token) or ERC20 token for the order. */ struct AdditionalRecipient { uint256 amount; address payable recipient; } /** * @dev The full set of order components, with the exception of the counter, * must be supplied when fulfilling more sophisticated orders or groups of * orders. The total number of original consideration items must also be * supplied, as the caller may specify additional consideration items. */ struct OrderParameters { address offerer; // 0x00 address zone; // 0x20 OfferItem[] offer; // 0x40 ConsiderationItem[] consideration; // 0x60 OrderType orderType; // 0x80 uint256 startTime; // 0xa0 uint256 endTime; // 0xc0 bytes32 zoneHash; // 0xe0 uint256 salt; // 0x100 bytes32 conduitKey; // 0x120 uint256 totalOriginalConsiderationItems; // 0x140 // offer.length // 0x160 } /** * @dev Orders require a signature in addition to the other order parameters. */ struct Order { OrderParameters parameters; bytes signature; } /** * @dev Advanced orders include a numerator (i.e. a fraction to attempt to fill) * and a denominator (the total size of the order) in addition to the * signature and other order parameters. It also supports an optional field * for supplying extra data; this data will be provided to the zone if the * order type is restricted and the zone is not the caller, or will be * provided to the offerer as context for contract order types. */ struct AdvancedOrder { OrderParameters parameters; uint120 numerator; uint120 denominator; bytes signature; bytes extraData; } /** * @dev Orders can be validated (either explicitly via `validate`, or as a * consequence of a full or partial fill), specifically cancelled (they can * also be cancelled in bulk via incrementing a per-zone counter), and * partially or fully filled (with the fraction filled represented by a * numerator and denominator). */ struct OrderStatus { bool isValidated; bool isCancelled; uint120 numerator; uint120 denominator; } /** * @dev A criteria resolver specifies an order, side (offer vs. consideration), * and item index. It then provides a chosen identifier (i.e. tokenId) * alongside a merkle proof demonstrating the identifier meets the required * criteria. */ struct CriteriaResolver { uint256 orderIndex; Side side; uint256 index; uint256 identifier; bytes32[] criteriaProof; } /** * @dev A fulfillment is applied to a group of orders. It decrements a series of * offer and consideration items, then generates a single execution * element. A given fulfillment can be applied to as many offer and * consideration items as desired, but must contain at least one offer and * at least one consideration that match. The fulfillment must also remain * consistent on all key parameters across all offer items (same offerer, * token, type, tokenId, and conduit preference) as well as across all * consideration items (token, type, tokenId, and recipient). */ struct Fulfillment { FulfillmentComponent[] offerComponents; FulfillmentComponent[] considerationComponents; } /** * @dev Each fulfillment component contains one index referencing a specific * order and another referencing a specific offer or consideration item. */ struct FulfillmentComponent { uint256 orderIndex; uint256 itemIndex; } /** * @dev An execution is triggered once all consideration items have been zeroed * out. It sends the item in question from the offerer to the item's * recipient, optionally sourcing approvals from either this contract * directly or from the offerer's chosen conduit if one is specified. An * execution is not provided as an argument, but rather is derived via * orders, criteria resolvers, and fulfillments (where the total number of * executions will be less than or equal to the total number of indicated * fulfillments) and returned as part of `matchOrders`. */ struct Execution { ReceivedItem item; address offerer; bytes32 conduitKey; } /** * @dev Restricted orders are validated post-execution by calling validateOrder * on the zone. This struct provides context about the order fulfillment * and any supplied extraData, as well as all order hashes fulfilled in a * call to a match or fulfillAvailable method. */ struct ZoneParameters { bytes32 orderHash; address fulfiller; address offerer; SpentItem[] offer; ReceivedItem[] consideration; bytes extraData; bytes32[] orderHashes; uint256 startTime; uint256 endTime; bytes32 zoneHash; } /** * @dev Zones and contract offerers can communicate which schemas they implement * along with any associated metadata related to each schema. */ struct Schema { uint256 id; bytes metadata; } using StructPointers for OrderComponents global; using StructPointers for OfferItem global; using StructPointers for ConsiderationItem global; using StructPointers for SpentItem global; using StructPointers for ReceivedItem global; using StructPointers for BasicOrderParameters global; using StructPointers for AdditionalRecipient global; using StructPointers for OrderParameters global; using StructPointers for Order global; using StructPointers for AdvancedOrder global; using StructPointers for OrderStatus global; using StructPointers for CriteriaResolver global; using StructPointers for Fulfillment global; using StructPointers for FulfillmentComponent global; using StructPointers for Execution global; using StructPointers for ZoneParameters global; /** * @dev This library provides a set of functions for converting structs to * pointers. */ library StructPointers { /** * @dev Get a MemoryPointer from OrderComponents. * * @param obj The OrderComponents object. * * @return ptr The MemoryPointer. */ function toMemoryPointer( OrderComponents memory obj ) internal pure returns (MemoryPointer ptr) { assembly { ptr := obj } } /** * @dev Get a CalldataPointer from OrderComponents. * * @param obj The OrderComponents object. * * @return ptr The CalldataPointer. */ function toCalldataPointer( OrderComponents calldata obj ) internal pure returns (CalldataPointer ptr) { assembly { ptr := obj } } /** * @dev Get a MemoryPointer from OfferItem. * * @param obj The OfferItem object. * * @return ptr The MemoryPointer. */ function toMemoryPointer( OfferItem memory obj ) internal pure returns (MemoryPointer ptr) { assembly { ptr := obj } } /** * @dev Get a CalldataPointer from OfferItem. * * @param obj The OfferItem object. * * @return ptr The CalldataPointer. */ function toCalldataPointer( OfferItem calldata obj ) internal pure returns (CalldataPointer ptr) { assembly { ptr := obj } } /** * @dev Get a MemoryPointer from ConsiderationItem. * * @param obj The ConsiderationItem object. * * @return ptr The MemoryPointer. */ function toMemoryPointer( ConsiderationItem memory obj ) internal pure returns (MemoryPointer ptr) { assembly { ptr := obj } } /** * @dev Get a CalldataPointer from ConsiderationItem. * * @param obj The ConsiderationItem object. * * @return ptr The CalldataPointer. */ function toCalldataPointer( ConsiderationItem calldata obj ) internal pure returns (CalldataPointer ptr) { assembly { ptr := obj } } /** * @dev Get a MemoryPointer from SpentItem. * * @param obj The SpentItem object. * * @return ptr The MemoryPointer. */ function toMemoryPointer( SpentItem memory obj ) internal pure returns (MemoryPointer ptr) { assembly { ptr := obj } } /** * @dev Get a CalldataPointer from SpentItem. * * @param obj The SpentItem object. * * @return ptr The CalldataPointer. */ function toCalldataPointer( SpentItem calldata obj ) internal pure returns (CalldataPointer ptr) { assembly { ptr := obj } } /** * @dev Get a MemoryPointer from ReceivedItem. * * @param obj The ReceivedItem object. * * @return ptr The MemoryPointer. */ function toMemoryPointer( ReceivedItem memory obj ) internal pure returns (MemoryPointer ptr) { assembly { ptr := obj } } /** * @dev Get a CalldataPointer from ReceivedItem. * * @param obj The ReceivedItem object. * * @return ptr The CalldataPointer. */ function toCalldataPointer( ReceivedItem calldata obj ) internal pure returns (CalldataPointer ptr) { assembly { ptr := obj } } /** * @dev Get a MemoryPointer from BasicOrderParameters. * * @param obj The BasicOrderParameters object. * * @return ptr The MemoryPointer. */ function toMemoryPointer( BasicOrderParameters memory obj ) internal pure returns (MemoryPointer ptr) { assembly { ptr := obj } } /** * @dev Get a CalldataPointer from BasicOrderParameters. * * @param obj The BasicOrderParameters object. * * @return ptr The CalldataPointer. */ function toCalldataPointer( BasicOrderParameters calldata obj ) internal pure returns (CalldataPointer ptr) { assembly { ptr := obj } } /** * @dev Get a MemoryPointer from AdditionalRecipient. * * @param obj The AdditionalRecipient object. * * @return ptr The MemoryPointer. */ function toMemoryPointer( AdditionalRecipient memory obj ) internal pure returns (MemoryPointer ptr) { assembly { ptr := obj } } /** * @dev Get a CalldataPointer from AdditionalRecipient. * * @param obj The AdditionalRecipient object. * * @return ptr The CalldataPointer. */ function toCalldataPointer( AdditionalRecipient calldata obj ) internal pure returns (CalldataPointer ptr) { assembly { ptr := obj } } /** * @dev Get a MemoryPointer from OrderParameters. * * @param obj The OrderParameters object. * * @return ptr The MemoryPointer. */ function toMemoryPointer( OrderParameters memory obj ) internal pure returns (MemoryPointer ptr) { assembly { ptr := obj } } /** * @dev Get a CalldataPointer from OrderParameters. * * @param obj The OrderParameters object. * * @return ptr The CalldataPointer. */ function toCalldataPointer( OrderParameters calldata obj ) internal pure returns (CalldataPointer ptr) { assembly { ptr := obj } } /** * @dev Get a MemoryPointer from Order. * * @param obj The Order object. * * @return ptr The MemoryPointer. */ function toMemoryPointer( Order memory obj ) internal pure returns (MemoryPointer ptr) { assembly { ptr := obj } } /** * @dev Get a CalldataPointer from Order. * * @param obj The Order object. * * @return ptr The CalldataPointer. */ function toCalldataPointer( Order calldata obj ) internal pure returns (CalldataPointer ptr) { assembly { ptr := obj } } /** * @dev Get a MemoryPointer from AdvancedOrder. * * @param obj The AdvancedOrder object. * * @return ptr The MemoryPointer. */ function toMemoryPointer( AdvancedOrder memory obj ) internal pure returns (MemoryPointer ptr) { assembly { ptr := obj } } /** * @dev Get a CalldataPointer from AdvancedOrder. * * @param obj The AdvancedOrder object. * * @return ptr The CalldataPointer. */ function toCalldataPointer( AdvancedOrder calldata obj ) internal pure returns (CalldataPointer ptr) { assembly { ptr := obj } } /** * @dev Get a MemoryPointer from OrderStatus. * * @param obj The OrderStatus object. * * @return ptr The MemoryPointer. */ function toMemoryPointer( OrderStatus memory obj ) internal pure returns (MemoryPointer ptr) { assembly { ptr := obj } } /** * @dev Get a CalldataPointer from OrderStatus. * * @param obj The OrderStatus object. * * @return ptr The CalldataPointer. */ function toCalldataPointer( OrderStatus calldata obj ) internal pure returns (CalldataPointer ptr) { assembly { ptr := obj } } /** * @dev Get a MemoryPointer from CriteriaResolver. * * @param obj The CriteriaResolver object. * * @return ptr The MemoryPointer. */ function toMemoryPointer( CriteriaResolver memory obj ) internal pure returns (MemoryPointer ptr) { assembly { ptr := obj } } /** * @dev Get a CalldataPointer from CriteriaResolver. * * @param obj The CriteriaResolver object. * * @return ptr The CalldataPointer. */ function toCalldataPointer( CriteriaResolver calldata obj ) internal pure returns (CalldataPointer ptr) { assembly { ptr := obj } } /** * @dev Get a MemoryPointer from Fulfillment. * * @param obj The Fulfillment object. * * @return ptr The MemoryPointer. */ function toMemoryPointer( Fulfillment memory obj ) internal pure returns (MemoryPointer ptr) { assembly { ptr := obj } } /** * @dev Get a CalldataPointer from Fulfillment. * * @param obj The Fulfillment object. * * @return ptr The CalldataPointer. */ function toCalldataPointer( Fulfillment calldata obj ) internal pure returns (CalldataPointer ptr) { assembly { ptr := obj } } /** * @dev Get a MemoryPointer from FulfillmentComponent. * * @param obj The FulfillmentComponent object. * * @return ptr The MemoryPointer. */ function toMemoryPointer( FulfillmentComponent memory obj ) internal pure returns (MemoryPointer ptr) { assembly { ptr := obj } } /** * @dev Get a CalldataPointer from FulfillmentComponent. * * @param obj The FulfillmentComponent object. * * @return ptr The CalldataPointer. */ function toCalldataPointer( FulfillmentComponent calldata obj ) internal pure returns (CalldataPointer ptr) { assembly { ptr := obj } } /** * @dev Get a MemoryPointer from Execution. * * @param obj The Execution object. * * @return ptr The MemoryPointer. */ function toMemoryPointer( Execution memory obj ) internal pure returns (MemoryPointer ptr) { assembly { ptr := obj } } /** * @dev Get a CalldataPointer from Execution. * * @param obj The Execution object. * * @return ptr The CalldataPointer. */ function toCalldataPointer( Execution calldata obj ) internal pure returns (CalldataPointer ptr) { assembly { ptr := obj } } /** * @dev Get a MemoryPointer from ZoneParameters. * * @param obj The ZoneParameters object. * * @return ptr The MemoryPointer. */ function toMemoryPointer( ZoneParameters memory obj ) internal pure returns (MemoryPointer ptr) { assembly { ptr := obj } } /** * @dev Get a CalldataPointer from ZoneParameters. * * @param obj The ZoneParameters object. * * @return ptr The CalldataPointer. */ function toCalldataPointer( ZoneParameters calldata obj ) internal pure returns (CalldataPointer ptr) { assembly { ptr := obj } } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.17; import { CostPerWord, ExtraGasBuffer, FreeMemoryPointerSlot, MemoryExpansionCoefficientShift, OneWord, OneWordShift, ThirtyOneBytes } from "./ConsiderationConstants.sol"; /** * @title LowLevelHelpers * @author 0age * @notice LowLevelHelpers contains logic for performing various low-level * operations. */ contract LowLevelHelpers { /** * @dev Internal view function to revert and pass along the revert reason if * data was returned by the last call and that the size of that data * does not exceed the currently allocated memory size. */ function _revertWithReasonIfOneIsReturned() internal view { assembly { // If it returned a message, bubble it up as long as sufficient gas // remains to do so: if returndatasize() { // Ensure that sufficient gas is available to copy returndata // while expanding memory where necessary. Start by computing // the word size of returndata and allocated memory. let returnDataWords := shr( OneWordShift, add(returndatasize(), ThirtyOneBytes) ) // Note: use the free memory pointer in place of msize() to work // around a Yul warning that prevents accessing msize directly // when the IR pipeline is activated. let msizeWords := shr( OneWordShift, mload(FreeMemoryPointerSlot) ) // Next, compute the cost of the returndatacopy. let cost := mul(CostPerWord, returnDataWords) // Then, compute cost of new memory allocation. if gt(returnDataWords, msizeWords) { cost := add( cost, add( mul(sub(returnDataWords, msizeWords), CostPerWord), shr( MemoryExpansionCoefficientShift, sub( mul(returnDataWords, returnDataWords), mul(msizeWords, msizeWords) ) ) ) ) } // Finally, add a small constant and compare to gas remaining; // bubble up the revert data if enough gas is still available. if lt(add(cost, ExtraGasBuffer), gas()) { // Copy returndata to memory; overwrite existing memory. returndatacopy(0, 0, returndatasize()) // Revert, specifying memory region with copied returndata. revert(0, returndatasize()) } } } } /** * @dev Internal view function to branchlessly select either the caller (if * a supplied recipient is equal to zero) or the supplied recipient (if * that recipient is a nonzero value). * * @param recipient The supplied recipient. * * @return updatedRecipient The updated recipient. */ function _substituteCallerForEmptyRecipient( address recipient ) internal view returns (address updatedRecipient) { // Utilize assembly to perform a branchless operation on the recipient. assembly { // Add caller to recipient if recipient equals 0; otherwise add 0. updatedRecipient := add(recipient, mul(iszero(recipient), caller())) } } /** * @dev Internal pure function to cast a `bool` value to a `uint256` value. * * @param b The `bool` value to cast. * * @return u The `uint256` value. */ function _cast(bool b) internal pure returns (uint256 u) { assembly { u := b } } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.17; import { ReentrancyErrors } from "../interfaces/ReentrancyErrors.sol"; import { LowLevelHelpers } from "./LowLevelHelpers.sol"; import { _revertInvalidMsgValue, _revertNoReentrantCalls } from "./ConsiderationErrors.sol"; import { _ENTERED_AND_ACCEPTING_NATIVE_TOKENS, _ENTERED, _NOT_ENTERED } from "./ConsiderationConstants.sol"; /** * @title ReentrancyGuard * @author 0age * @notice ReentrancyGuard contains a storage variable and related functionality * for protecting against reentrancy. */ contract ReentrancyGuard is ReentrancyErrors, LowLevelHelpers { // Prevent reentrant calls on protected functions. uint256 private _reentrancyGuard; /** * @dev Initialize the reentrancy guard during deployment. */ constructor() { // Initialize the reentrancy guard in a cleared state. _reentrancyGuard = _NOT_ENTERED; } /** * @dev Internal function to ensure that a sentinel value for the reentrancy * guard is not currently set and, if not, to set a sentinel value for * the reentrancy guard based on whether or not native tokens may be * received during execution or not. * * @param acceptNativeTokens A boolean indicating whether native tokens may * be received during execution or not. */ function _setReentrancyGuard(bool acceptNativeTokens) internal { // Ensure that the reentrancy guard is not already set. _assertNonReentrant(); // Set the reentrancy guard. A value of 2 indicates that native tokens // may not be accepted during execution, whereas a value of 3 indicates // that they will be accepted (with any remaining native tokens returned // to the caller). unchecked { _reentrancyGuard = _ENTERED + _cast(acceptNativeTokens); } } /** * @dev Internal function to unset the reentrancy guard sentinel value. */ function _clearReentrancyGuard() internal { // Clear the reentrancy guard. _reentrancyGuard = _NOT_ENTERED; } /** * @dev Internal view function to ensure that a sentinel value for the reentrancy guard is not currently set. */ function _assertNonReentrant() internal view { // Ensure that the reentrancy guard is not currently set. if (_reentrancyGuard != _NOT_ENTERED) { _revertNoReentrantCalls(); } } /** * @dev Internal view function to ensure that the sentinel value indicating * native tokens may be received during execution is currently set. */ function _assertAcceptingNativeTokens() internal view { // Ensure that the reentrancy guard is not currently set. if (_reentrancyGuard != _ENTERED_AND_ACCEPTING_NATIVE_TOKENS) { _revertInvalidMsgValue(msg.value); } } }
{ "remappings": [ "@rari-capital/=node_modules/@rari-capital/", "@rari-capital/solmate/=lib/solmate/", "ERC721A/=lib/utility-contracts/lib/ERC721A/contracts/", "ds-test/=lib/ds-test/src/", "eth-gas-reporter/=node_modules/eth-gas-reporter/", "forge-std/=lib/forge-std/src/", "hardhat/=node_modules/hardhat/", "murky/=lib/murky/src/", "openzeppelin-contracts/=lib/openzeppelin-contracts/", "seaport-sol/=contracts/helpers/sol/", "solmate/=lib/solmate/src/", "utility-contracts/=lib/utility-contracts/src/" ], "optimizer": { "enabled": true, "runs": 5000000 }, "metadata": { "bytecodeHash": "ipfs" }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } }, "evmVersion": "london", "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"seaportV1point1","type":"address"},{"internalType":"address","name":"seaportV1point4","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"name":"EtherReturnTransferFailed","type":"error"},{"inputs":[],"name":"NoReentrantCalls","type":"error"},{"inputs":[{"internalType":"address","name":"seaport","type":"address"}],"name":"SeaportNotAllowed","type":"error"},{"inputs":[{"components":[{"internalType":"address[]","name":"seaportContracts","type":"address[]"},{"components":[{"components":[{"components":[{"internalType":"address","name":"offerer","type":"address"},{"internalType":"address","name":"zone","type":"address"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"}],"internalType":"struct OfferItem[]","name":"offer","type":"tuple[]"},{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifierOrCriteria","type":"uint256"},{"internalType":"uint256","name":"startAmount","type":"uint256"},{"internalType":"uint256","name":"endAmount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ConsiderationItem[]","name":"consideration","type":"tuple[]"},{"internalType":"enum OrderType","name":"orderType","type":"uint8"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bytes32","name":"zoneHash","type":"bytes32"},{"internalType":"uint256","name":"salt","type":"uint256"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"},{"internalType":"uint256","name":"totalOriginalConsiderationItems","type":"uint256"}],"internalType":"struct OrderParameters","name":"parameters","type":"tuple"},{"internalType":"uint120","name":"numerator","type":"uint120"},{"internalType":"uint120","name":"denominator","type":"uint120"},{"internalType":"bytes","name":"signature","type":"bytes"},{"internalType":"bytes","name":"extraData","type":"bytes"}],"internalType":"struct AdvancedOrder[]","name":"advancedOrders","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"enum Side","name":"side","type":"uint8"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"bytes32[]","name":"criteriaProof","type":"bytes32[]"}],"internalType":"struct CriteriaResolver[]","name":"criteriaResolvers","type":"tuple[]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"struct FulfillmentComponent[][]","name":"offerFulfillments","type":"tuple[][]"},{"components":[{"internalType":"uint256","name":"orderIndex","type":"uint256"},{"internalType":"uint256","name":"itemIndex","type":"uint256"}],"internalType":"struct FulfillmentComponent[][]","name":"considerationFulfillments","type":"tuple[][]"},{"internalType":"uint256","name":"etherValue","type":"uint256"}],"internalType":"struct SeaportRouterInterface.AdvancedOrderParams[]","name":"advancedOrderParams","type":"tuple[]"},{"internalType":"bytes32","name":"fulfillerConduitKey","type":"bytes32"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"maximumFulfilled","type":"uint256"}],"internalType":"struct SeaportRouterInterface.FulfillAvailableAdvancedOrdersParams","name":"params","type":"tuple"}],"name":"fulfillAvailableAdvancedOrders","outputs":[{"internalType":"bool[][]","name":"availableOrders","type":"bool[][]"},{"components":[{"components":[{"internalType":"enum ItemType","name":"itemType","type":"uint8"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"identifier","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address payable","name":"recipient","type":"address"}],"internalType":"struct ReceivedItem","name":"item","type":"tuple"},{"internalType":"address","name":"offerer","type":"address"},{"internalType":"bytes32","name":"conduitKey","type":"bytes32"}],"internalType":"struct Execution[][]","name":"executions","type":"tuple[][]"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getAllowedSeaportContracts","outputs":[{"internalType":"address[]","name":"seaportContracts","type":"address[]"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040523480156200001157600080fd5b5060405162001a9438038062001a9483398101604081905262000034916200006e565b60016000556001600160a01b039182166080521660a052620000a6565b80516001600160a01b03811681146200006957600080fd5b919050565b600080604083850312156200008257600080fd5b6200008d8362000051565b91506200009d6020840162000051565b90509250929050565b60805160a0516119bc620000d8600039600081816093015261022201526000818160e801526101b401526119bc6000f3fe60806040526004361061002d5760003560e01c806330af8b5614610042578063fc2a350b1461006d57600080fd5b3661003d5761003b3361008e565b005b600080fd5b34801561004e57600080fd5b50610057610192565b604051610064919061074f565b60405180910390f35b61008061007b3660046107a9565b610291565b60405161006492919061090b565b6100e37f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161490565b6101387f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161490565b1760000361018f576040517f98d2897d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b50565b60408051600280825260608083018452926020830190803683370190505090507f0000000000000000000000000000000000000000000000000000000000000000816000815181106101e6576101e66109f8565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000081600181518110610254576102546109f8565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505090565b60608061029e600161068e565b60006102aa8480610a27565b905090508067ffffffffffffffff8111156102c7576102c76109c9565b6040519080825280602002602001820160405280156102fa57816020015b60608152602001906001900390816102e55790505b5092508067ffffffffffffffff811115610316576103166109c9565b60405190808252806020026020018201604052801561034957816020015b60608152602001906001900390816103345790505b509150600084608001359050606080606060006040518060e001604052808581526020018481526020018381526020018381526020018a6040013581526020018a606001602081019061039c9190610ac8565b73ffffffffffffffffffffffffffffffffffffffff9081168252602090910187905260a0820151919250166103d2573360a08201525b60005b6103df8a80610a27565b905081101561066a5761041f6103f58b80610a27565b83818110610405576104056109f8565b905060200201602081019061041a9190610ac8565b61008e565b3661042d60208c018c610a27565b8381811061043d5761043d6109f8565b905060200281019061044f9190610ae5565b905061045b8180610a27565b61046491610f79565b83526104736020820182610a27565b61047c9161108e565b602084015261048e6040820182610a27565b610497916111c3565b60408401526104a96060820182610a27565b6104b2916111c3565b60608401526104c18b80610a27565b838181106104d1576104d16109f8565b90506020020160208101906104e69190610ac8565b73ffffffffffffffffffffffffffffffffffffffff166387201b418260800135856000015186602001518760400151886060015189608001518a60a001518b60c001516040518963ffffffff1660e01b815260040161054b979695949392919061154e565b60006040518083038185885af1935050505080156105a957506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526105a69190810190611886565b60015b1561065a57818c85815181106105c1576105c16109f8565b6020026020010181905250808b85815181106105df576105df6109f8565b6020908102919091010152815160005b8181101561064457838181518110610609576106096109f8565b60200260200101511561063f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909a01996001015b6105ef565b5089600003610656575050505061066a565b5050505b5060c082018690526001016103d5565b5047156106795761067961069e565b6106836001600055565b505050505050915091565b61069661072d565b600201600055565b6040516000908190339047908381818185875af1925050503d80600081146106e2576040519150601f19603f3d011682016040523d82523d6000602084013e6106e7565b606091505b509150915081610729573347826040517fb188829100000000000000000000000000000000000000000000000000000000815260040161018693929190611951565b5050565b60016000541461073f5761073f610741565b565b637fa8a9876000526004601cfd5b6020808252825182820181905260009190848201906040850190845b8181101561079d57835173ffffffffffffffffffffffffffffffffffffffff168352928401929184019160010161076b565b50909695505050505050565b6000602082840312156107bb57600080fd5b813567ffffffffffffffff8111156107d257600080fd5b820160a081850312156107e457600080fd5b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6006811061082a5761082a6107eb565b9052565b600081518084526020808501808196508360051b810191508286016000805b868110156108fd578385038a52825180518087529087019087870190845b818110156108e8578351805161088285825161081a565b808c015173ffffffffffffffffffffffffffffffffffffffff908116868e01526040808301518188015260608084015190880152608092830151821692870192909252828d01511660a0860152015160c08401529289019260e09092019160010161086b565b50509a87019a9550509185019160010161084d565b509298975050505050505050565b6000604082016040835280855180835260608501915060608160051b860101925060208088016000805b848110156109a9578887037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0018652825180518089529085019085890190845b81811015610993578351151583529287019291870191600101610975565b5090985050509483019491830191600101610935565b505050858403818701525050506109c0818561082e565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112610a5c57600080fd5b83018035915067ffffffffffffffff821115610a7757600080fd5b6020019150600581901b3603821315610a8f57600080fd5b9250929050565b73ffffffffffffffffffffffffffffffffffffffff8116811461018f57600080fd5b8035610ac381610a96565b919050565b600060208284031215610ada57600080fd5b81356107e481610a96565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112610b1957600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715610b4657610b466109c9565b60405290565b60405160c0810167ffffffffffffffff81118282101715610b4657610b466109c9565b604051610160810167ffffffffffffffff81118282101715610b4657610b466109c9565b6040805190810167ffffffffffffffff81118282101715610b4657610b466109c9565b6040516060810167ffffffffffffffff81118282101715610b4657610b466109c9565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610c2057610c206109c9565b604052919050565b600067ffffffffffffffff821115610c4257610c426109c9565b5060051b60200190565b6006811061018f57600080fd5b600082601f830112610c6a57600080fd5b81356020610c7f610c7a83610c28565b610bd9565b82815260a09283028501820192828201919087851115610c9e57600080fd5b8387015b85811015610d0b5781818a031215610cba5760008081fd5b610cc2610b23565b8135610ccd81610c4c565b815281860135610cdc81610a96565b818701526040828101359082015260608083013590820152608080830135908201528452928401928101610ca2565b5090979650505050505050565b600082601f830112610d2957600080fd5b81356020610d39610c7a83610c28565b82815260c09283028501820192828201919087851115610d5857600080fd5b8387015b85811015610d0b5781818a031215610d745760008081fd5b610d7c610b4c565b8135610d8781610c4c565b815281860135610d9681610a96565b8187015260408281013590820152606080830135908201526080808301359082015260a080830135610dc781610a96565b908201528452928401928101610d5c565b803560058110610ac357600080fd5b60006101608284031215610dfa57600080fd5b610e02610b6f565b9050610e0d82610ab8565b8152610e1b60208301610ab8565b6020820152604082013567ffffffffffffffff80821115610e3b57600080fd5b610e4785838601610c59565b60408401526060840135915080821115610e6057600080fd5b50610e6d84828501610d18565b606083015250610e7f60808301610dd8565b608082015260a082013560a082015260c082013560c082015260e082013560e082015261010080830135818301525061012080830135818301525061014080830135818301525092915050565b80356effffffffffffffffffffffffffffff81168114610ac357600080fd5b600082601f830112610efc57600080fd5b813567ffffffffffffffff811115610f1657610f166109c9565b610f4760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610bd9565b818152846020838601011115610f5c57600080fd5b816020850160208301376000918101602001919091529392505050565b6000610f87610c7a84610c28565b80848252602080830192508560051b850136811115610fa557600080fd5b855b8181101561108257803567ffffffffffffffff80821115610fc85760008081fd5b818901915060a08236031215610fde5760008081fd5b610fe6610b23565b823582811115610ff65760008081fd5b61100236828601610de7565b825250611010868401610ecc565b868201526040611021818501610ecc565b90820152606083810135838111156110395760008081fd5b61104536828701610eeb565b8284015250506080808401358381111561105f5760008081fd5b61106b36828701610eeb565b918301919091525087525050938201938201610fa7565b50919695505050505050565b600061109c610c7a84610c28565b83815260208082019190600586811b8601368111156110ba57600080fd5b865b818110156111b657803567ffffffffffffffff808211156110dd5760008081fd5b818a01915060a082360312156110f35760008081fd5b6110fb610b23565b8235815286830135600281106111115760008081fd5b8188015260408381013590820152606080840135908201526080808401358381111561113d5760008081fd5b939093019236601f85011261115457600092508283fd5b83359250611164610c7a84610c28565b83815292871b840188019288810190368511156111815760008081fd5b948901945b8486101561119f57853582529489019490890190611186565b9183019190915250885250509483019483016110bc565b5092979650505050505050565b60006111d1610c7a84610c28565b80848252602080830192508560051b8501368111156111ef57600080fd5b855b8181101561108257803567ffffffffffffffff8111156112115760008081fd5b870136601f8201126112235760008081fd5b8035611231610c7a82610c28565b81815260069190911b820185019085810190368311156112515760008081fd5b928601925b82841015611294576040843603121561126f5760008081fd5b611277610b93565b843581528785013588820152825260409093019290860190611256565b88525050509382019382016111f1565b600081518084526020808501945080840160005b8381101561131b5781516112cd88825161081a565b8084015173ffffffffffffffffffffffffffffffffffffffff168885015260408082015190890152606080820151908901526080908101519088015260a090960195908201906001016112b8565b509495945050505050565b600081518084526020808501945080840160005b8381101561131b57815161134f88825161081a565b8084015173ffffffffffffffffffffffffffffffffffffffff90811689860152604080830151908a0152606080830151908a0152608080830151908a015260a091820151169088015260c0909601959082019060010161133a565b6005811061082a5761082a6107eb565b6000815180845260005b818110156113e0576020818501810151868301820152016113c4565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b600081518084526020808501808196508360051b810191508286016000805b868110156108fd578385038a52825160a0808701825188528883015160028110611469576114696107eb565b888a01526040838101519089015260608084015190890152608092830151928801919091528151908190529087019060c087019084905b808210156114c057835183529289019291890191600191909101906114a0565b50509a87019a9550509185019160010161143d565b600081518084526020808501808196508360051b810191508286016000805b868110156108fd578385038a52825180518087529087019087870190845b81811015611539578351805184528a01518a84015292890192604090920191600101611512565b50509a87019a955050918501916001016114f4565b600060e0820160e08352808a5180835261010092508285019150828160051b8601016020808e0160005b84811015611712577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008985030186528151805160a086526115d260a08701825173ffffffffffffffffffffffffffffffffffffffff169052565b8481015173ffffffffffffffffffffffffffffffffffffffff1660c0870152604081015161016060e0880181905261160e6102008901836112a4565b91506060808401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff608a8503018d8b01526116498482611326565b935050608080850151610120611661818d01836113aa565b60a08701516101408d81019190915260c0880151868e015260e08801516101808e01528f8801516101a08e0152908701516101c08d0152909501516101e08b0152888601516effffffffffffffffffffffffffffff9081168a8c0152604080880151909116908b0152818601518a8503838c015294506116e184866113ba565b9450808601519550898503818b0152505050506116fe81836113ba565b978501979550505090820190600101611578565b505086820390870152611725818d61141e565b9350505050828103604084015261173c81896114d5565b9050828103606084015261175081886114d5565b91505084608083015261177b60a083018573ffffffffffffffffffffffffffffffffffffffff169052565b8260c083015298975050505050505050565b8051610ac381610a96565b600082601f8301126117a957600080fd5b815160206117b9610c7a83610c28565b82815260e092830285018201928282019190878511156117d857600080fd5b8387015b85811015610d0b57808903828112156117f55760008081fd5b6117fd610bb6565b60a08083121561180d5760008081fd5b611815610b23565b9250835161182281610c4c565b83528388015161183181610a96565b83890152604084810151818501526060808601519085015260808086015161185881610a96565b9085015283835261186a85830161178d565b838a015260c085015190830152508552509284019281016117dc565b6000806040838503121561189957600080fd5b825167ffffffffffffffff808211156118b157600080fd5b818501915085601f8301126118c557600080fd5b815160206118d5610c7a83610c28565b82815260059290921b840181019181810190898411156118f457600080fd5b948201945b8386101561192157855180151581146119125760008081fd5b825294820194908201906118f9565b9188015191965090935050508082111561193a57600080fd5b5061194785828601611798565b9150509250929050565b73ffffffffffffffffffffffffffffffffffffffff841681528260208201526060604082015260006109c060608301846113ba56fea264697066735822122043e7378e8b5e2d869b70a162db70b12ffb9f61e5f16c0563fa3dc4328eae63d864736f6c6343000811003300000000000000000000000000000000006c3852cbef3e08e8df289169ede58100000000000000000000000000000000000001ad428e4906ae43d8f9852d0dd6
Deployed Bytecode
0x60806040526004361061002d5760003560e01c806330af8b5614610042578063fc2a350b1461006d57600080fd5b3661003d5761003b3361008e565b005b600080fd5b34801561004e57600080fd5b50610057610192565b604051610064919061074f565b60405180910390f35b61008061007b3660046107a9565b610291565b60405161006492919061090b565b6100e37f00000000000000000000000000000000000001ad428e4906ae43d8f9852d0dd673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161490565b6101387f00000000000000000000000000000000006c3852cbef3e08e8df289169ede58173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161490565b1760000361018f576040517f98d2897d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024015b60405180910390fd5b50565b60408051600280825260608083018452926020830190803683370190505090507f00000000000000000000000000000000006c3852cbef3e08e8df289169ede581816000815181106101e6576101e66109f8565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f00000000000000000000000000000000000001ad428e4906ae43d8f9852d0dd681600181518110610254576102546109f8565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505090565b60608061029e600161068e565b60006102aa8480610a27565b905090508067ffffffffffffffff8111156102c7576102c76109c9565b6040519080825280602002602001820160405280156102fa57816020015b60608152602001906001900390816102e55790505b5092508067ffffffffffffffff811115610316576103166109c9565b60405190808252806020026020018201604052801561034957816020015b60608152602001906001900390816103345790505b509150600084608001359050606080606060006040518060e001604052808581526020018481526020018381526020018381526020018a6040013581526020018a606001602081019061039c9190610ac8565b73ffffffffffffffffffffffffffffffffffffffff9081168252602090910187905260a0820151919250166103d2573360a08201525b60005b6103df8a80610a27565b905081101561066a5761041f6103f58b80610a27565b83818110610405576104056109f8565b905060200201602081019061041a9190610ac8565b61008e565b3661042d60208c018c610a27565b8381811061043d5761043d6109f8565b905060200281019061044f9190610ae5565b905061045b8180610a27565b61046491610f79565b83526104736020820182610a27565b61047c9161108e565b602084015261048e6040820182610a27565b610497916111c3565b60408401526104a96060820182610a27565b6104b2916111c3565b60608401526104c18b80610a27565b838181106104d1576104d16109f8565b90506020020160208101906104e69190610ac8565b73ffffffffffffffffffffffffffffffffffffffff166387201b418260800135856000015186602001518760400151886060015189608001518a60a001518b60c001516040518963ffffffff1660e01b815260040161054b979695949392919061154e565b60006040518083038185885af1935050505080156105a957506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526105a69190810190611886565b60015b1561065a57818c85815181106105c1576105c16109f8565b6020026020010181905250808b85815181106105df576105df6109f8565b6020908102919091010152815160005b8181101561064457838181518110610609576106096109f8565b60200260200101511561063f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909a01996001015b6105ef565b5089600003610656575050505061066a565b5050505b5060c082018690526001016103d5565b5047156106795761067961069e565b6106836001600055565b505050505050915091565b61069661072d565b600201600055565b6040516000908190339047908381818185875af1925050503d80600081146106e2576040519150601f19603f3d011682016040523d82523d6000602084013e6106e7565b606091505b509150915081610729573347826040517fb188829100000000000000000000000000000000000000000000000000000000815260040161018693929190611951565b5050565b60016000541461073f5761073f610741565b565b637fa8a9876000526004601cfd5b6020808252825182820181905260009190848201906040850190845b8181101561079d57835173ffffffffffffffffffffffffffffffffffffffff168352928401929184019160010161076b565b50909695505050505050565b6000602082840312156107bb57600080fd5b813567ffffffffffffffff8111156107d257600080fd5b820160a081850312156107e457600080fd5b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6006811061082a5761082a6107eb565b9052565b600081518084526020808501808196508360051b810191508286016000805b868110156108fd578385038a52825180518087529087019087870190845b818110156108e8578351805161088285825161081a565b808c015173ffffffffffffffffffffffffffffffffffffffff908116868e01526040808301518188015260608084015190880152608092830151821692870192909252828d01511660a0860152015160c08401529289019260e09092019160010161086b565b50509a87019a9550509185019160010161084d565b509298975050505050505050565b6000604082016040835280855180835260608501915060608160051b860101925060208088016000805b848110156109a9578887037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0018652825180518089529085019085890190845b81811015610993578351151583529287019291870191600101610975565b5090985050509483019491830191600101610935565b505050858403818701525050506109c0818561082e565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112610a5c57600080fd5b83018035915067ffffffffffffffff821115610a7757600080fd5b6020019150600581901b3603821315610a8f57600080fd5b9250929050565b73ffffffffffffffffffffffffffffffffffffffff8116811461018f57600080fd5b8035610ac381610a96565b919050565b600060208284031215610ada57600080fd5b81356107e481610a96565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61833603018112610b1957600080fd5b9190910192915050565b60405160a0810167ffffffffffffffff81118282101715610b4657610b466109c9565b60405290565b60405160c0810167ffffffffffffffff81118282101715610b4657610b466109c9565b604051610160810167ffffffffffffffff81118282101715610b4657610b466109c9565b6040805190810167ffffffffffffffff81118282101715610b4657610b466109c9565b6040516060810167ffffffffffffffff81118282101715610b4657610b466109c9565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715610c2057610c206109c9565b604052919050565b600067ffffffffffffffff821115610c4257610c426109c9565b5060051b60200190565b6006811061018f57600080fd5b600082601f830112610c6a57600080fd5b81356020610c7f610c7a83610c28565b610bd9565b82815260a09283028501820192828201919087851115610c9e57600080fd5b8387015b85811015610d0b5781818a031215610cba5760008081fd5b610cc2610b23565b8135610ccd81610c4c565b815281860135610cdc81610a96565b818701526040828101359082015260608083013590820152608080830135908201528452928401928101610ca2565b5090979650505050505050565b600082601f830112610d2957600080fd5b81356020610d39610c7a83610c28565b82815260c09283028501820192828201919087851115610d5857600080fd5b8387015b85811015610d0b5781818a031215610d745760008081fd5b610d7c610b4c565b8135610d8781610c4c565b815281860135610d9681610a96565b8187015260408281013590820152606080830135908201526080808301359082015260a080830135610dc781610a96565b908201528452928401928101610d5c565b803560058110610ac357600080fd5b60006101608284031215610dfa57600080fd5b610e02610b6f565b9050610e0d82610ab8565b8152610e1b60208301610ab8565b6020820152604082013567ffffffffffffffff80821115610e3b57600080fd5b610e4785838601610c59565b60408401526060840135915080821115610e6057600080fd5b50610e6d84828501610d18565b606083015250610e7f60808301610dd8565b608082015260a082013560a082015260c082013560c082015260e082013560e082015261010080830135818301525061012080830135818301525061014080830135818301525092915050565b80356effffffffffffffffffffffffffffff81168114610ac357600080fd5b600082601f830112610efc57600080fd5b813567ffffffffffffffff811115610f1657610f166109c9565b610f4760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601610bd9565b818152846020838601011115610f5c57600080fd5b816020850160208301376000918101602001919091529392505050565b6000610f87610c7a84610c28565b80848252602080830192508560051b850136811115610fa557600080fd5b855b8181101561108257803567ffffffffffffffff80821115610fc85760008081fd5b818901915060a08236031215610fde5760008081fd5b610fe6610b23565b823582811115610ff65760008081fd5b61100236828601610de7565b825250611010868401610ecc565b868201526040611021818501610ecc565b90820152606083810135838111156110395760008081fd5b61104536828701610eeb565b8284015250506080808401358381111561105f5760008081fd5b61106b36828701610eeb565b918301919091525087525050938201938201610fa7565b50919695505050505050565b600061109c610c7a84610c28565b83815260208082019190600586811b8601368111156110ba57600080fd5b865b818110156111b657803567ffffffffffffffff808211156110dd5760008081fd5b818a01915060a082360312156110f35760008081fd5b6110fb610b23565b8235815286830135600281106111115760008081fd5b8188015260408381013590820152606080840135908201526080808401358381111561113d5760008081fd5b939093019236601f85011261115457600092508283fd5b83359250611164610c7a84610c28565b83815292871b840188019288810190368511156111815760008081fd5b948901945b8486101561119f57853582529489019490890190611186565b9183019190915250885250509483019483016110bc565b5092979650505050505050565b60006111d1610c7a84610c28565b80848252602080830192508560051b8501368111156111ef57600080fd5b855b8181101561108257803567ffffffffffffffff8111156112115760008081fd5b870136601f8201126112235760008081fd5b8035611231610c7a82610c28565b81815260069190911b820185019085810190368311156112515760008081fd5b928601925b82841015611294576040843603121561126f5760008081fd5b611277610b93565b843581528785013588820152825260409093019290860190611256565b88525050509382019382016111f1565b600081518084526020808501945080840160005b8381101561131b5781516112cd88825161081a565b8084015173ffffffffffffffffffffffffffffffffffffffff168885015260408082015190890152606080820151908901526080908101519088015260a090960195908201906001016112b8565b509495945050505050565b600081518084526020808501945080840160005b8381101561131b57815161134f88825161081a565b8084015173ffffffffffffffffffffffffffffffffffffffff90811689860152604080830151908a0152606080830151908a0152608080830151908a015260a091820151169088015260c0909601959082019060010161133a565b6005811061082a5761082a6107eb565b6000815180845260005b818110156113e0576020818501810151868301820152016113c4565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b600081518084526020808501808196508360051b810191508286016000805b868110156108fd578385038a52825160a0808701825188528883015160028110611469576114696107eb565b888a01526040838101519089015260608084015190890152608092830151928801919091528151908190529087019060c087019084905b808210156114c057835183529289019291890191600191909101906114a0565b50509a87019a9550509185019160010161143d565b600081518084526020808501808196508360051b810191508286016000805b868110156108fd578385038a52825180518087529087019087870190845b81811015611539578351805184528a01518a84015292890192604090920191600101611512565b50509a87019a955050918501916001016114f4565b600060e0820160e08352808a5180835261010092508285019150828160051b8601016020808e0160005b84811015611712577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008985030186528151805160a086526115d260a08701825173ffffffffffffffffffffffffffffffffffffffff169052565b8481015173ffffffffffffffffffffffffffffffffffffffff1660c0870152604081015161016060e0880181905261160e6102008901836112a4565b91506060808401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff608a8503018d8b01526116498482611326565b935050608080850151610120611661818d01836113aa565b60a08701516101408d81019190915260c0880151868e015260e08801516101808e01528f8801516101a08e0152908701516101c08d0152909501516101e08b0152888601516effffffffffffffffffffffffffffff9081168a8c0152604080880151909116908b0152818601518a8503838c015294506116e184866113ba565b9450808601519550898503818b0152505050506116fe81836113ba565b978501979550505090820190600101611578565b505086820390870152611725818d61141e565b9350505050828103604084015261173c81896114d5565b9050828103606084015261175081886114d5565b91505084608083015261177b60a083018573ffffffffffffffffffffffffffffffffffffffff169052565b8260c083015298975050505050505050565b8051610ac381610a96565b600082601f8301126117a957600080fd5b815160206117b9610c7a83610c28565b82815260e092830285018201928282019190878511156117d857600080fd5b8387015b85811015610d0b57808903828112156117f55760008081fd5b6117fd610bb6565b60a08083121561180d5760008081fd5b611815610b23565b9250835161182281610c4c565b83528388015161183181610a96565b83890152604084810151818501526060808601519085015260808086015161185881610a96565b9085015283835261186a85830161178d565b838a015260c085015190830152508552509284019281016117dc565b6000806040838503121561189957600080fd5b825167ffffffffffffffff808211156118b157600080fd5b818501915085601f8301126118c557600080fd5b815160206118d5610c7a83610c28565b82815260059290921b840181019181810190898411156118f457600080fd5b948201945b8386101561192157855180151581146119125760008081fd5b825294820194908201906118f9565b9188015191965090935050508082111561193a57600080fd5b5061194785828601611798565b9150509250929050565b73ffffffffffffffffffffffffffffffffffffffff841681528260208201526060604082015260006109c060608301846113ba56fea264697066735822122043e7378e8b5e2d869b70a162db70b12ffb9f61e5f16c0563fa3dc4328eae63d864736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000006c3852cbef3e08e8df289169ede58100000000000000000000000000000000000001ad428e4906ae43d8f9852d0dd6
-----Decoded View---------------
Arg [0] : seaportV1point1 (address): 0x00000000006c3852cbEf3e08E8dF289169EdE581
Arg [1] : seaportV1point4 (address): 0x00000000000001ad428e4906aE43D8F9852d0dD6
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000006c3852cbef3e08e8df289169ede581
Arg [1] : 00000000000000000000000000000000000001ad428e4906ae43d8f9852d0dd6
Deployed Bytecode Sourcemap
733:7417:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1693:33;1715:10;1693:21;:33::i;:::-;733:7417;;;;;6891:283;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2008:4761;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;7265:246::-;7388:31;7405:13;7394:24;;:7;:24;;;4028:1:10;3933:112;7388:31:1;7354;7371:13;7360:24;;:7;:24;;;4028:1:10;3933:112;7354:31:1;:65;7435:1;7354:82;7337:168;;7468:26;;;;;5212:42:12;5200:55;;7468:26:1;;;5182:74:12;5155:18;;7468:26:1;;;;;;;;7337:168;7265:246;:::o;6891:283::-;7061:16;;;7075:1;7061:16;;;6993:33;7061:16;;;;;6993:33;7061:16;;;;;;;;;;-1:-1:-1;7061:16:1;7042:35;;7109:13;7087:16;7104:1;7087:19;;;;;;;;:::i;:::-;;;;;;:35;;;;;;;;;;;7154:13;7132:16;7149:1;7132:19;;;;;;;;:::i;:::-;;;;;;:35;;;;;;;;;;;6891:283;:::o;2008:4761::-;2196:31;2241;2374:25;2394:4;2374:19;:25::i;:::-;2471:30;2504:23;:6;;:23;:::i;:::-;:30;;2471:63;;2656:22;2643:36;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2625:54;;2720:22;2702:41;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2689:54;;2810:24;2837:6;:23;;;2810:50;;2997:42;3049:48;3107:58;3175:36;3214:406;;;;;;;;3259:19;3214:406;;;;3311:22;3214:406;;;;3366:26;3214:406;;;;3433:26;3214:406;;;;3494:6;:26;;;3214:406;;;;3545:6;:16;;;;;;;;;;:::i;:::-;3214:406;;;;;;;;;;;;;3697:24;;;;3175:445;;-1:-1:-1;3697:38:1;3693:106;;3778:10;3751:24;;;:37;3693:106;3873:9;3868:2659;3892:23;:6;;:23;:::i;:::-;:30;;3888:1;:34;3868:2659;;;4004:49;4026:23;:6;;:23;:::i;:::-;4050:1;4026:26;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;4004:21;:49::i;:::-;4118:40;4161:43;;;;:6;:43;:::i;:::-;4205:1;4161:46;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;4118:89;-1:-1:-1;4314:26:1;4118:89;;4314:26;:::i;:::-;4282:58;;;:::i;:::-;;;4389:29;;;;:11;:29;:::i;:::-;4354:64;;;:::i;:::-;:32;;;:64;4467:29;;;;:11;:29;:::i;:::-;4432:64;;;:::i;:::-;:32;;;:64;4553:54;;;;:11;:54;:::i;:::-;4510:97;;;:::i;:::-;:40;;;:97;4934:23;:6;;:23;:::i;:::-;4958:1;4934:26;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;4917:96;;;5042:11;:22;;;5104:14;:29;;;5155:14;:32;;;5209:14;:32;;;5263:14;:40;;;5325:14;:34;;;5381:14;:24;;;5427:14;:31;;;4917:559;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;4897:1454;;;5651:18;5630:15;5646:1;5630:18;;;;;;;;:::i;:::-;;;;;;:39;;;;5703:13;5687:10;5698:1;5687:13;;;;;;;;:::i;:::-;;;;;;;;;;:29;5830:25;;5795:32;5873:285;5897:24;5893:1;:28;5873:285;;;5951:18;5970:1;5951:21;;;;;;;;:::i;:::-;;;;;;;5947:193;;;6040:18;;;;;;6088:3;5947:193;5873:285;;;;6259:16;6279:1;6259:21;6255:73;;6304:5;;;;;;6255:73;5612:730;5489:853;;4897:1454;-1:-1:-1;6406:31:1;;;:50;;;6499:3;;3868:2659;;;-1:-1:-1;6618:21:1;:25;6614:76;;6659:20;:18;:20::i;:::-;6739:23;2627:1:5;2139:16:11;:31;2048:129;6739:23:1;2287:4482;;;;;;2008:4761;;;:::o;1418:532:11:-;1555:21;:19;:21::i;:::-;2658:1:5;1897:36:11;1878:16;:55;1418:532::o;7680:468:1:-;7815:80;;7780:12;;;;7823:10;;7860:21;;7780:12;7815:80;7780:12;7815:80;7860:21;7823:10;7815:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7779:116;;;;7973:7;7968:174;;8046:10;8074:21;8113:4;8003:128;;;;;;;;;;;;;:::i;7968:174::-;7718:430;;7680:468::o;2325:215:11:-;2627:1:5;2450:16:11;;:32;2446:88;;2498:25;:23;:25::i;:::-;2325:215::o;15967:352:8:-;16144:31;16141:1;16134:42;16281:29;16258:21;16251:60;146:681:12;317:2;369:21;;;439:13;;342:18;;;461:22;;;288:4;;317:2;540:15;;;;514:2;499:18;;;288:4;583:218;597:6;594:1;591:13;583:218;;;662:13;;677:42;658:62;646:75;;776:15;;;;741:12;;;;619:1;612:9;583:218;;;-1:-1:-1;818:3:12;;146:681;-1:-1:-1;;;;;;146:681:12:o;832:416::-;947:6;1000:2;988:9;979:7;975:23;971:32;968:52;;;1016:1;1013;1006:12;968:52;1056:9;1043:23;1089:18;1081:6;1078:30;1075:50;;;1121:1;1118;1111:12;1075:50;1144:22;;1200:3;1182:16;;;1178:26;1175:46;;;1217:1;1214;1207:12;1175:46;1240:2;832:416;-1:-1:-1;;;832:416:12:o;1253:184::-;1305:77;1302:1;1295:88;1402:4;1399:1;1392:15;1426:4;1423:1;1416:15;1442:139;1522:1;1515:5;1512:12;1502:46;;1528:18;;:::i;:::-;1557;;1442:139::o;1586:1779::-;1658:3;1696:5;1690:12;1723:6;1718:3;1711:19;1749:4;1790:2;1785:3;1781:12;1815:11;1842;1835:18;;1892:6;1889:1;1885:14;1878:5;1874:26;1862:38;;1934:2;1927:5;1923:14;1955:1;1976;1986:1353;2002:6;1997:3;1994:15;1986:1353;;;2067:16;;;2055:29;;2107:13;;2179:9;;2201:22;;;2287:11;;;;2245:13;;;;2322:1;2336:897;2352:8;2347:3;2344:17;2336:897;;;2431:8;2425:15;2473:2;2467:9;2493:42;2529:5;2524:2;2518:9;2493:42;:::i;:::-;2578:11;;;2572:18;2617:42;2699:21;;;2683:14;;;2676:45;2748:4;2798:11;;;2792:18;2776:14;;;2769:42;2838:4;2888:11;;;2882:18;2866:14;;;2859:42;2928:4;2982:11;;;2976:18;2972:27;;2956:14;;;2949:51;;;;3052:11;;;3046:18;3042:27;3035:4;3024:16;;3017:53;3118:11;3112:18;3105:4;3094:16;;3087:44;3202:17;;;;3168:4;3157:16;;;;2380:1;2371:11;2336:897;;;-1:-1:-1;;3317:12:12;;;;3254:5;-1:-1:-1;;3282:15:12;;;;2028:1;2019:11;1986:1353;;;-1:-1:-1;3355:4:12;;1586:1779;-1:-1:-1;;;;;;;;1586:1779:12:o;3370:1661::-;3738:4;3786:2;3775:9;3771:18;3816:2;3805:9;3798:21;3839:6;3874;3868:13;3905:6;3897;3890:22;3943:2;3932:9;3928:18;3921:25;;4005:2;3995:6;3992:1;3988:14;3977:9;3973:30;3969:39;3955:53;;4027:4;4066:2;4058:6;4054:15;4087:1;4108;4118:768;4134:6;4129:3;4126:15;4118:768;;;4203:22;;;4227:66;4199:95;4187:108;;4318:13;;4392:9;;4414:24;;;4504:11;;;;4460:15;;;;4539:1;4553:225;4569:8;4564:3;4561:17;4553:225;;;4660:15;;4653:23;4646:31;4632:46;;4747:17;;;;4704:14;;;;4597:1;4588:11;4553:225;;;-1:-1:-1;4801:5:12;;-1:-1:-1;;;4864:12:12;;;;4829:15;;;;4160:1;4151:11;4118:768;;;4122:3;;;4934:9;4926:6;4922:22;4917:2;4906:9;4902:18;4895:50;;;;4962:63;5018:6;5010;4962:63;:::i;:::-;4954:71;3370:1661;-1:-1:-1;;;;;3370:1661:12:o;5267:184::-;5319:77;5316:1;5309:88;5416:4;5413:1;5406:15;5440:4;5437:1;5430:15;5456:184;5508:77;5505:1;5498:88;5605:4;5602:1;5595:15;5629:4;5626:1;5619:15;5645:604;5738:4;5744:6;5804:11;5791:25;5894:66;5883:8;5867:14;5863:29;5859:102;5839:18;5835:127;5825:155;;5976:1;5973;5966:12;5825:155;6003:33;;6055:20;;;-1:-1:-1;6098:18:12;6087:30;;6084:50;;;6130:1;6127;6120:12;6084:50;6163:4;6151:17;;-1:-1:-1;6214:1:12;6210:14;;;6194;6190:35;6180:46;;6177:66;;;6239:1;6236;6229:12;6177:66;5645:604;;;;;:::o;6254:154::-;6340:42;6333:5;6329:54;6322:5;6319:65;6309:93;;6398:1;6395;6388:12;6413:134;6481:20;;6510:31;6481:20;6510:31;:::i;:::-;6413:134;;;:::o;6552:247::-;6611:6;6664:2;6652:9;6643:7;6639:23;6635:32;6632:52;;;6680:1;6677;6670:12;6632:52;6719:9;6706:23;6738:31;6763:5;6738:31;:::i;7452:395::-;7557:4;7615:11;7602:25;7705:66;7694:8;7678:14;7674:29;7670:102;7650:18;7646:127;7636:155;;7787:1;7784;7777:12;7636:155;7808:33;;;;;7452:395;-1:-1:-1;;7452:395:12:o;8494:253::-;8566:2;8560:9;8608:4;8596:17;;8643:18;8628:34;;8664:22;;;8625:62;8622:88;;;8690:18;;:::i;:::-;8726:2;8719:22;8494:253;:::o;8752:::-;8824:2;8818:9;8866:4;8854:17;;8901:18;8886:34;;8922:22;;;8883:62;8880:88;;;8948:18;;:::i;9010:255::-;9082:2;9076:9;9124:6;9112:19;;9161:18;9146:34;;9182:22;;;9143:62;9140:88;;;9208:18;;:::i;9270:257::-;9342:4;9336:11;;;9374:17;;9421:18;9406:34;;9442:22;;;9403:62;9400:88;;;9468:18;;:::i;9532:253::-;9604:2;9598:9;9646:4;9634:17;;9681:18;9666:34;;9702:22;;;9663:62;9660:88;;;9728:18;;:::i;9790:334::-;9861:2;9855:9;9917:2;9907:13;;9922:66;9903:86;9891:99;;10020:18;10005:34;;10041:22;;;10002:62;9999:88;;;10067:18;;:::i;:::-;10103:2;10096:22;9790:334;;-1:-1:-1;9790:334:12:o;10129:196::-;10202:4;10235:18;10227:6;10224:30;10221:56;;;10257:18;;:::i;:::-;-1:-1:-1;10302:1:12;10298:14;10314:4;10294:25;;10129:196::o;10330:107::-;10411:1;10404:5;10401:12;10391:40;;10427:1;10424;10417:12;10442:1410;10505:5;10558:3;10551:4;10543:6;10539:17;10535:27;10525:55;;10576:1;10573;10566:12;10525:55;10612:6;10599:20;10638:4;10662:73;10678:56;10731:2;10678:56;:::i;:::-;10662:73;:::i;:::-;10769:15;;;10831:4;10874:11;;;10862:24;;10858:33;;;10800:12;;;;10757:3;10903:15;;;10900:35;;;10931:1;10928;10921:12;10900:35;10967:2;10959:6;10955:15;10979:844;10995:6;10990:3;10987:15;10979:844;;;11071:2;11065:3;11060;11056:13;11052:22;11049:112;;;11115:1;11144:2;11140;11133:14;11049:112;11187:22;;:::i;:::-;11250:3;11237:17;11267:39;11298:7;11267:39;:::i;:::-;11319:22;;11382:12;;;11369:26;11408:33;11369:26;11408:33;:::i;:::-;11461:14;;;11454:31;11508:2;11559:12;;;11546:26;11530:14;;;11523:50;11596:2;11647:12;;;11634:26;11618:14;;;11611:50;11684:3;11736:12;;;11723:26;11707:14;;;11700:50;11763:18;;11801:12;;;;11012;;10979:844;;;-1:-1:-1;11841:5:12;;10442:1410;-1:-1:-1;;;;;;;10442:1410:12:o;11857:1588::-;11928:5;11981:3;11974:4;11966:6;11962:17;11958:27;11948:55;;11999:1;11996;11989:12;11948:55;12035:6;12022:20;12061:4;12085:73;12101:56;12154:2;12101:56;:::i;12085:73::-;12192:15;;;12254:4;12297:11;;;12285:24;;12281:33;;;12223:12;;;;12180:3;12326:15;;;12323:35;;;12354:1;12351;12344:12;12323:35;12390:2;12382:6;12378:15;12402:1014;12418:6;12413:3;12410:15;12402:1014;;;12494:2;12488:3;12483;12479:13;12475:22;12472:112;;;12538:1;12567:2;12563;12556:14;12472:112;12610:22;;:::i;:::-;12673:3;12660:17;12690:39;12721:7;12690:39;:::i;:::-;12742:22;;12805:12;;;12792:26;12831:33;12792:26;12831:33;:::i;:::-;12884:14;;;12877:31;12931:2;12982:12;;;12969:26;12953:14;;;12946:50;13019:2;13070:12;;;13057:26;13041:14;;;13034:50;13107:3;13159:12;;;13146:26;13130:14;;;13123:50;13196:3;13240:12;;;13227:26;13266:33;13227:26;13266:33;:::i;:::-;13319:14;;;13312:31;13356:18;;13394:12;;;;12435;;12402:1014;;13450:150;13525:20;;13574:1;13564:12;;13554:40;;13590:1;13587;13580:12;13605:1291;13667:5;13715:6;13703:9;13698:3;13694:19;13690:32;13687:52;;;13735:1;13732;13725:12;13687:52;13757:22;;:::i;:::-;13748:31;;13802:29;13821:9;13802:29;:::i;:::-;13795:5;13788:44;13864:38;13898:2;13887:9;13883:18;13864:38;:::i;:::-;13859:2;13852:5;13848:14;13841:62;13954:2;13943:9;13939:18;13926:32;13977:18;14018:2;14010:6;14007:14;14004:34;;;14034:1;14031;14024:12;14004:34;14070:66;14132:3;14123:6;14112:9;14108:22;14070:66;:::i;:::-;14065:2;14058:5;14054:14;14047:90;14190:2;14179:9;14175:18;14162:32;14146:48;;14219:2;14209:8;14206:16;14203:36;;;14235:1;14232;14225:12;14203:36;;14271:76;14343:3;14332:8;14321:9;14317:24;14271:76;:::i;:::-;14266:2;14259:5;14255:14;14248:100;;14381:46;14422:3;14411:9;14407:19;14381:46;:::i;:::-;14375:3;14368:5;14364:15;14357:71;14489:3;14478:9;14474:19;14461:33;14455:3;14448:5;14444:15;14437:58;14556:3;14545:9;14541:19;14528:33;14522:3;14515:5;14511:15;14504:58;14623:3;14612:9;14608:19;14595:33;14589:3;14582:5;14578:15;14571:58;14648:3;14711:2;14700:9;14696:18;14683:32;14678:2;14671:5;14667:14;14660:56;;14735:3;14798:2;14787:9;14783:18;14770:32;14765:2;14758:5;14754:14;14747:56;;14822:3;14885:2;14874:9;14870:18;14857:32;14852:2;14845:5;14841:14;14834:56;;13605:1291;;;;:::o;14901:186::-;14969:20;;15029:32;15018:44;;15008:55;;14998:83;;15077:1;15074;15067:12;15092:589;15134:5;15187:3;15180:4;15172:6;15168:17;15164:27;15154:55;;15205:1;15202;15195:12;15154:55;15241:6;15228:20;15267:18;15263:2;15260:26;15257:52;;;15289:18;;:::i;:::-;15333:114;15441:4;15372:66;15365:4;15361:2;15357:13;15353:86;15349:97;15333:114;:::i;:::-;15472:2;15463:7;15456:19;15518:3;15511:4;15506:2;15498:6;15494:15;15490:26;15487:35;15484:55;;;15535:1;15532;15525:12;15484:55;15600:2;15593:4;15585:6;15581:17;15574:4;15565:7;15561:18;15548:55;15648:1;15623:16;;;15641:4;15619:27;15612:38;;;;15627:7;15092:589;-1:-1:-1;;;15092:589:12:o;15686:2148::-;15866:9;15901:77;15917:60;15970:6;15917:60;:::i;15901:77::-;16000:3;16024:6;16019:3;16012:19;16050:4;16079:2;16074:3;16070:12;16063:19;;16123:6;16120:1;16116:14;16109:5;16105:26;16154:14;16146:6;16143:26;16140:46;;;16182:1;16179;16172:12;16140:46;16206:5;16220:1581;16236:6;16231:3;16228:15;16220:1581;;;16322:3;16309:17;16349:18;16399:2;16386:11;16383:19;16380:109;;;16443:1;16472:2;16468;16461:14;16380:109;16523:11;16516:5;16512:23;16502:33;;16580:4;16575:2;16559:14;16555:23;16551:34;16548:124;;;16626:1;16655:2;16651;16644:14;16548:124;16700:22;;:::i;:::-;16762:2;16749:16;16792:2;16784:6;16781:14;16778:104;;;16836:1;16865:2;16861;16854:14;16778:104;16911:66;16962:14;16953:6;16949:2;16945:15;16911:66;:::i;:::-;16902:7;16895:83;;17016:31;17043:2;17039;17035:11;17016:31;:::i;:::-;17011:2;17002:7;16998:16;16991:57;17071:2;17111:31;17138:2;17134;17130:11;17111:31;:::i;:::-;17093:16;;;17086:57;17166:2;17210:11;;;17197:25;17238:16;;;17235:106;;;17295:1;17324:2;17320;17313:14;17235:106;17379:51;17415:14;17404:8;17400:2;17396:17;17379:51;:::i;:::-;17374:2;17365:7;17361:16;17354:77;;;17455:3;17508;17504:2;17500:12;17487:26;17542:2;17532:8;17529:16;17526:109;;;17587:1;17617:3;17612;17605:16;17526:109;17674:51;17710:14;17699:8;17695:2;17691:17;17674:51;:::i;:::-;17655:17;;;17648:78;;;;-1:-1:-1;17739:20:12;;-1:-1:-1;;17779:12:12;;;;16253;;16220:1581;;;-1:-1:-1;17823:5:12;;15686:2148;-1:-1:-1;;;;;;15686:2148:12:o;18484:2710::-;18670:9;18705:77;18721:60;18774:6;18721:60;:::i;18705:77::-;18816:19;;;18854:4;18874:12;;;;18804:3;18905:1;18940:15;;;18929:27;;18979:14;18968:26;;18965:46;;;19007:1;19004;18997:12;18965:46;19031:5;19045:2116;19061:6;19056:3;19053:15;19045:2116;;;19147:3;19134:17;19174:18;19224:2;19211:11;19208:19;19205:109;;;19268:1;19297:2;19293;19286:14;19205:109;19348:11;19341:5;19337:23;19327:33;;19405:4;19400:2;19384:14;19380:23;19376:34;19373:124;;;19451:1;19480:2;19476;19469:14;19373:124;19525:22;;:::i;:::-;19589:2;19576:16;19567:7;19560:33;19642:2;19638;19634:11;19621:25;19681:1;19672:7;19669:14;19659:112;;19725:1;19754:2;19750;19743:14;19659:112;19791:16;;;19784:33;19840:2;19893:11;;;19880:25;19862:16;;;19855:51;19929:2;19982:11;;;19969:25;19951:16;;;19944:51;20019:3;20062:12;;;20049:26;20091:14;;;20088:107;;;20147:1;20177:3;20172;20165:16;20088:107;20219:15;;;;;20277:14;20270:4;20261:14;;20257:35;20247:136;;20335:1;20324:12;;20365:3;20360;20353:16;20247:136;20420:3;20407:17;20396:28;;20450:74;20466:57;20519:3;20466:57;:::i;20450:74::-;20568:18;;;20664:12;;;20655:22;;20651:31;;;20608:14;;;;20711;20698:28;;20695:121;;;20768:1;20798:3;20793;20786:16;20695:121;20842:12;;;;20867:174;20885:8;20878:5;20875:19;20867:174;;;20967:19;;20953:34;;20906:14;;;;21013;;;;20867:174;;;21061:17;;;21054:32;;;;-1:-1:-1;21099:20:12;;-1:-1:-1;;21139:12:12;;;;19078;;19045:2116;;;-1:-1:-1;21183:5:12;;18484:2710;-1:-1:-1;;;;;;;18484:2710:12:o;21875:2116::-;22121:9;22156:77;22172:60;22225:6;22172:60;:::i;22156:77::-;22255:3;22279:6;22274:3;22267:19;22305:4;22334:2;22329:3;22325:12;22318:19;;22378:6;22375:1;22371:14;22364:5;22360:26;22409:14;22401:6;22398:26;22395:46;;;22437:1;22434;22427:12;22395:46;22461:5;22475:1483;22491:6;22486:3;22483:15;22475:1483;;;22577:3;22564:17;22613:18;22600:11;22597:35;22594:125;;;22673:1;22702:2;22698;22691:14;22594:125;22742:23;;22807:14;22800:4;22792:13;;22788:34;22778:132;;22864:1;22893:2;22889;22882:14;22778:132;22946:2;22933:16;22975:73;22991:56;23044:2;22991:56;:::i;22975:73::-;23092:17;;;23190:1;23186:10;;;;23178:19;;23174:28;;;23131:14;;;;23231;23218:28;;23215:118;;;23287:1;23316:2;23312;23305:14;23215:118;23359:11;;;;23383:502;23401:8;23394:5;23391:19;23383:502;;;23506:4;23498:5;23482:14;23478:26;23474:37;23471:143;;;23560:1;23593:2;23589;23582:14;23471:143;23646:22;;:::i;:::-;23701:19;;23685:36;;23776:14;;;23763:28;23745:16;;;23738:54;23809:22;;23433:4;23422:16;;;;23857:14;;;;23383:502;;;23898:18;;-1:-1:-1;;;23936:12:12;;;;22508;;22475:1483;;23996:838;24058:3;24096:5;24090:12;24123:6;24118:3;24111:19;24149:4;24178:2;24173:3;24169:12;24162:19;;24215:2;24208:5;24204:14;24236:1;24246:563;24260:6;24257:1;24254:13;24246:563;;;24325:6;24319:13;24345:40;24381:3;24376:2;24370:9;24345:40;:::i;:::-;24429:11;;;24423:18;24443:42;24419:67;24405:12;;;24398:89;24510:4;24554:11;;;24548:18;24534:12;;;24527:40;24590:4;24634:11;;;24628:18;24614:12;;;24607:40;24670:4;24714:11;;;24708:18;24694:12;;;24687:40;24756:4;24747:14;;;;24784:15;;;;24282:1;24275:9;24246:563;;;-1:-1:-1;24825:3:12;;23996:838;-1:-1:-1;;;;;23996:838:12:o;24839:1005::-;24909:3;24947:5;24941:12;24974:6;24969:3;24962:19;25000:4;25029:2;25024:3;25020:12;25013:19;;25066:2;25059:5;25055:14;25087:1;25097:722;25111:6;25108:1;25105:13;25097:722;;;25176:6;25170:13;25196:40;25232:3;25227:2;25221:9;25196:40;:::i;:::-;25275:11;;;25269:18;25310:42;25386:21;;;25372:12;;;25365:43;25431:4;25475:11;;;25469:18;25455:12;;;25448:40;25511:4;25555:11;;;25549:18;25535:12;;;25528:40;25591:4;25635:11;;;25629:18;25615:12;;;25608:40;25671:4;25719:11;;;25713:18;25709:27;25695:12;;;25688:49;25766:4;25757:14;;;;25794:15;;;;25133:1;25126:9;25097:722;;25849:140;25930:1;25923:5;25920:12;25910:46;;25936:18;;:::i;26116:481::-;26157:3;26195:5;26189:12;26222:6;26217:3;26210:19;26247:1;26257:162;26271:6;26268:1;26265:13;26257:162;;;26333:4;26389:13;;;26385:22;;26379:29;26361:11;;;26357:20;;26350:59;26286:12;26257:162;;;26261:3;26464:1;26457:4;26448:6;26443:3;26439:16;26435:27;26428:38;26586:4;26516:66;26511:2;26503:6;26499:15;26495:88;26490:3;26486:98;26482:109;26475:116;;;26116:481;;;;:::o;26602:1665::-;26671:3;26709:5;26703:12;26736:6;26731:3;26724:19;26762:4;26803:2;26798:3;26794:12;26828:11;26855;26848:18;;26905:6;26902:1;26898:14;26891:5;26887:26;26875:38;;26947:2;26940:5;26936:14;26968:1;26989;26999:1242;27015:6;27010:3;27007:15;26999:1242;;;27090:5;27084:4;27080:16;27075:3;27068:29;27126:6;27120:13;27156:4;27197:2;27191:4;27187:13;27232:2;27226:9;27220:4;27213:23;27283:2;27279;27275:11;27269:18;27327:1;27313:12;27310:19;27300:53;;27333:18;;:::i;:::-;27373:13;;;27366:35;27424:4;27469:11;;;27463:18;27448:13;;;27441:41;27505:4;27550:11;;;27544:18;27529:13;;;27522:41;27586:4;27631:11;;;27625:18;27663:13;;;27656:25;;;;27742:21;;27776:24;;;;27865:23;;;;27832:3;27822:14;;;27912:1;;27926:209;27942:8;27937:3;27934:17;27926:209;;;28019:15;;28005:30;;28104:17;;;;28061:14;;;;27970:1;27961:11;;;;;27926:209;;;-1:-1:-1;;28219:12:12;;;;28156:5;-1:-1:-1;;28184:15:12;;;;27041:1;27032:11;26999:1242;;28272:1199;28355:3;28393:5;28387:12;28420:6;28415:3;28408:19;28446:4;28487:2;28482:3;28478:12;28512:11;28539;28532:18;;28589:6;28586:1;28582:14;28575:5;28571:26;28559:38;;28631:2;28624:5;28620:14;28652:1;28673;28683:762;28699:6;28694:3;28691:15;28683:762;;;28764:16;;;28752:29;;28804:13;;28876:9;;28898:22;;;28984:11;;;;28942:13;;;;29019:1;29033:306;29049:8;29044:3;29041:17;29033:306;;;29122:15;;29168:9;;29154:24;;29224:11;;29218:18;29202:14;;;29195:42;29308:17;;;;29274:4;29263:16;;;;29077:1;29068:11;29033:306;;;-1:-1:-1;;29423:12:12;;;;29360:5;-1:-1:-1;;29388:15:12;;;;28725:1;28716:11;28683:762;;29476:4169;30318:4;30366:3;30355:9;30351:19;30397:3;30386:9;30379:22;30421:6;30456;30450:13;30487:6;30479;30472:22;30513:3;30503:13;;30547:2;30536:9;30532:18;30525:25;;30609:2;30599:6;30596:1;30592:14;30581:9;30577:30;30573:39;30631:4;30670:2;30662:6;30658:15;30691:1;30701:2340;30715:6;30712:1;30709:13;30701:2340;;;30804:66;30792:9;30784:6;30780:22;30776:95;30771:3;30764:108;30901:6;30895:13;30947:2;30941:9;30978:4;30970:6;30963:20;30996:58;31048:4;31040:6;31036:17;31021:12;31015:19;91:42;80:54;68:67;;14:127;30996:58;31095:21;;;31089:28;91:42;80:54;31177:3;31165:16;;68:67;31241:4;31223:23;;31217:30;31270:6;31308:3;31296:16;;31289:28;;;31344:71;31410:3;31398:16;;31217:30;31344:71;:::i;:::-;31330:85;;31438:4;31501:2;31487:12;31483:21;31477:28;31567:66;31558:6;31550;31546:19;31542:92;31537:2;31529:6;31525:15;31518:117;31662:69;31724:6;31708:14;31662:69;:::i;:::-;31648:83;;;31754:4;31817:2;31803:12;31799:21;31793:28;31844:3;31860:58;31914:2;31906:6;31902:15;31886:14;31860:58;:::i;:::-;31965:4;31947:23;;31941:30;31994:3;32017:15;;;32010:27;;;;32098:3;32080:22;;32074:29;32057:15;;;32050:54;32166:3;32148:22;;32142:29;32136:3;32124:16;;32117:55;32216:21;;;32210:28;32204:3;32192:16;;32185:54;32283:21;;;32277:28;32271:3;32259:16;;32252:54;32350:21;;;32344:28;32338:3;32326:16;;32319:54;32414:11;;;32408:18;26071:32;26060:44;;;32474:15;;;26048:57;32539:4;32531:13;;;32525:20;26060:44;;;32593:17;;;26048:57;32652:11;;;32646:18;32701:19;;;32684:15;;;32677:44;32646:18;-1:-1:-1;32748:40:12;32705:6;32646:18;32748:40;:::i;:::-;32734:54;;32837:2;32833;32829:11;32823:18;32801:40;;32890:6;32882;32878:19;32873:2;32865:6;32861:15;32854:44;;;;;32921:40;32954:6;32938:14;32921:40;:::i;:::-;33019:12;;;;32911:50;-1:-1:-1;;;32984:15:12;;;;30737:1;30730:9;30701:2340;;;-1:-1:-1;;33077:22:12;;;33057:18;;;33050:50;33123:60;33081:6;33168;33123:60;:::i;:::-;33109:74;;;;;33233:9;33225:6;33221:22;33214:4;33203:9;33199:20;33192:52;33267:74;33334:6;33326;33267:74;:::i;:::-;33253:88;;33391:9;33383:6;33379:22;33372:4;33361:9;33357:20;33350:52;33419:74;33486:6;33478;33419:74;:::i;:::-;33411:82;;;33531:6;33524:4;33513:9;33509:20;33502:36;33547:48;33589:4;33578:9;33574:20;33566:6;91:42;80:54;68:67;;14:127;33547:48;33632:6;33626:3;33615:9;33611:19;33604:35;29476:4169;;;;;;;;;;:::o;33650:138::-;33729:13;;33751:31;33729:13;33751:31;:::i;33793:1863::-;33867:5;33920:3;33913:4;33905:6;33901:17;33897:27;33887:55;;33938:1;33935;33928:12;33887:55;33967:6;33961:13;33993:4;34017:73;34033:56;34086:2;34033:56;:::i;34017:73::-;34124:15;;;34186:4;34229:11;;;34217:24;;34213:33;;;34155:12;;;;34112:3;34258:15;;;34255:35;;;34286:1;34283;34276:12;34255:35;34322:2;34314:6;34310:15;34334:1293;34350:6;34345:3;34342:15;34334:1293;;;34423:3;34418;34414:13;34451:2;34447;34443:11;34440:101;;;34495:1;34524:2;34520;34513:14;34440:101;34567:22;;:::i;:::-;34612:4;34640:2;34636;34632:11;34629:101;;;34684:1;34713:2;34709;34702:14;34629:101;34758:22;;:::i;:::-;34743:37;;34814:3;34808:10;34831:39;34862:7;34831:39;:::i;:::-;34883:24;;34941:12;;;34935:19;34967:33;34935:19;34967:33;:::i;:::-;35020:16;;;35013:33;35069:2;35115:12;;;35109:19;35091:16;;;35084:45;35152:4;35200:12;;;35194:19;35176:16;;;35169:45;35238:3;35275:13;;;35269:20;35302:33;35269:20;35302:33;:::i;:::-;35355:17;;;35348:34;35395:22;;;35453:43;35483:12;;;35453:43;:::i;:::-;35437:14;;;35430:67;35548:3;35539:13;;35533:20;35517:14;;;35510:44;-1:-1:-1;35567:18:12;;-1:-1:-1;35605:12:12;;;;34367;;34334:1293;;35661:1354;35814:6;35822;35875:2;35863:9;35854:7;35850:23;35846:32;35843:52;;;35891:1;35888;35881:12;35843:52;35924:9;35918:16;35953:18;35994:2;35986:6;35983:14;35980:34;;;36010:1;36007;36000:12;35980:34;36048:6;36037:9;36033:22;36023:32;;36093:7;36086:4;36082:2;36078:13;36074:27;36064:55;;36115:1;36112;36105:12;36064:55;36144:2;36138:9;36166:4;36190:73;36206:56;36259:2;36206:56;:::i;36190:73::-;36297:15;;;36379:1;36375:10;;;;36367:19;;36363:28;;;36328:12;;;;36403:19;;;36400:39;;;36435:1;36432;36425:12;36400:39;36459:11;;;;36479:309;36495:6;36490:3;36487:15;36479:309;;;36568:3;36562:10;36619:5;36612:13;36605:21;36598:5;36595:32;36585:130;;36669:1;36698:2;36694;36687:14;36585:130;36728:18;;36512:12;;;;36766;;;;36479:309;;;36843:18;;;36837:25;36807:5;;-1:-1:-1;36837:25:12;;-1:-1:-1;;;36874:16:12;;;36871:36;;;36903:1;36900;36893:12;36871:36;;36926:83;37001:7;36990:8;36979:9;36975:24;36926:83;:::i;:::-;36916:93;;;35661:1354;;;;;:::o;37230:408::-;37445:42;37437:6;37433:55;37422:9;37415:74;37525:6;37520:2;37509:9;37505:18;37498:34;37568:2;37563;37552:9;37548:18;37541:30;37396:4;37588:44;37628:2;37617:9;37613:18;37605:6;37588:44;:::i
Swarm Source
ipfs://43e7378e8b5e2d869b70a162db70b12ffb9f61e5f16c0563fa3dc4328eae63d8
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
CELO | 100.00% | $0.75064 | 0.00057 | $0.000428 |
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.