More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 6,465 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Compound | 65058976 | 2 hrs ago | IN | 0 POL | 0.0021427 | ||||
Compound | 65058953 | 2 hrs ago | IN | 0 POL | 0.0021427 | ||||
Compound | 65058924 | 2 hrs ago | IN | 0 POL | 0.0021427 | ||||
Compound | 65058905 | 2 hrs ago | IN | 0 POL | 0.00214271 | ||||
Compound | 65058895 | 2 hrs ago | IN | 0 POL | 0.00214271 | ||||
Compound | 65058882 | 2 hrs ago | IN | 0 POL | 0.00214272 | ||||
Compound | 65026076 | 21 hrs ago | IN | 0 POL | 0.01314377 | ||||
Compound | 65026068 | 21 hrs ago | IN | 0 POL | 0.01399855 | ||||
Compound | 65022303 | 23 hrs ago | IN | 0 POL | 0.0034209 | ||||
Compound | 65022265 | 23 hrs ago | IN | 0 POL | 0.0032748 | ||||
Compound | 65019609 | 25 hrs ago | IN | 0 POL | 0.00258127 | ||||
Compound | 65019584 | 25 hrs ago | IN | 0 POL | 0.00261298 | ||||
Compound | 65019570 | 25 hrs ago | IN | 0 POL | 0.00246022 | ||||
Compound | 65019549 | 25 hrs ago | IN | 0 POL | 0.00254493 | ||||
Compound | 65019536 | 25 hrs ago | IN | 0 POL | 0.00224111 | ||||
Compound | 65019475 | 25 hrs ago | IN | 0 POL | 0.00238876 | ||||
Compound | 65017584 | 26 hrs ago | IN | 0 POL | 0.00258851 | ||||
Stake | 64985005 | 46 hrs ago | IN | 0 POL | 0.00603623 | ||||
Compound | 64976258 | 2 days ago | IN | 0 POL | 0.00418546 | ||||
Compound | 64976203 | 2 days ago | IN | 0 POL | 0.00502642 | ||||
Compound | 64976130 | 2 days ago | IN | 0 POL | 0.00497629 | ||||
Compound | 64976115 | 2 days ago | IN | 0 POL | 0.00442287 | ||||
Compound | 64976093 | 2 days ago | IN | 0 POL | 0.00423718 | ||||
Compound | 64976079 | 2 days ago | IN | 0 POL | 0.00457278 | ||||
Compound | 64955259 | 2 days ago | IN | 0 POL | 0.00626085 |
Loading...
Loading
Contract Name:
StakingPoolManager
Compiler Version
v0.8.21+commit.d9974bed
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.21; import {IERC20} from "openzeppelin/token/ERC20/IERC20.sol"; import {Test, console2} from "forge-std/Test.sol"; contract StakingPoolManager { address public gov; address public constant CRE = 0xe81432473290F4ffCFc5E823F8069Db83e8A677B; struct UserInfo { uint256 staked; int256 debt; } mapping(uint256 => mapping(address => UserInfo)) public userInfo; struct PoolInfo { uint256 allocatedReward; uint256 start; uint256 period; uint256 totalStaked; uint256 totalClaimed; int256 totalDebt; uint256 withdrawDelay; uint256 lastUpdateTimestamp; uint256 rewardPerCRE; bool closed; } mapping(uint256 => PoolInfo) public poolInfo; uint256 public poolIdx; struct WithdrawalRequest { uint256 poolId; uint256 amount; uint256 requestTime; } mapping(address => WithdrawalRequest[]) public withdrawalRequests; event Stake(uint256 poolId, address account, uint256 amount); event Unstake(uint256 poolId, address account, uint256 amount); event Claim(uint256 poolId, address account, uint256 amount); event Compound(uint256 poolId, address account, uint256 amount); event Withdraw(uint256 poolId, address account, uint256 amount); modifier onlyGov() { require(msg.sender == gov, "StakingPool: forbidden"); _; } modifier notClosed(uint256 poolId) { require(!poolInfo[poolId].closed, "StakingPool: closed"); _; } constructor(address gov_) { gov = gov_; } function setGov(address gov_) external onlyGov { gov = gov_; } function _calcRewardPerCRE(uint256 poolId) internal view returns (uint256) { PoolInfo storage pool = poolInfo[poolId]; uint256 totalStaked = pool.totalStaked; uint256 lastUpdateTimestamp = pool.lastUpdateTimestamp; uint256 period = pool.period; uint256 end = pool.start + period; if (totalStaked > 0 && lastUpdateTimestamp < end) { uint256 timeDelta; if (block.timestamp > end) { timeDelta = end - lastUpdateTimestamp; } else { timeDelta = block.timestamp - lastUpdateTimestamp; } uint256 rewards = (timeDelta * pool.allocatedReward) / period; // 새로 생성된 리워드 적립 return pool.rewardPerCRE + ((rewards * 1e18) / totalStaked); } else { return pool.rewardPerCRE; } } function createPool( uint256 allocatedReward, uint256 start, uint256 period, uint256 withdrawDelay ) external onlyGov returns (uint256) { uint256 poolId = poolIdx++; poolInfo[poolId].allocatedReward = allocatedReward; poolInfo[poolId].start = start; poolInfo[poolId].period = period; poolInfo[poolId].withdrawDelay = withdrawDelay; IERC20(CRE).transferFrom(msg.sender, address(this), allocatedReward); return poolId; } /// @notice 스테이킹 풀을 중단 또는 재개하는 함수 /// 스테이킹 풀이 중단되면 사용자들은 리워드를 정산하거나, 토큰을 인출하는 것만 가능하고, /// 거버넌스는 지급된 리워드를 제외하고, 남은 토큰만 인출할 수 있음. function close(uint256 poolId) external onlyGov { require(!poolInfo[poolId].closed, "StakingPool: already closed"); _update(poolId); poolInfo[poolId].closed = true; } /// @notice 중단된 스테이킹 풀에서 남은 리워드를 인출하는 함수 function collect(uint256 poolId, address to) external onlyGov { require(poolInfo[poolId].closed, "StakingPool: not closed"); uint256 remainTokens = uint256( int256( poolInfo[poolId].allocatedReward - ((poolInfo[poolId].totalStaked * poolInfo[poolId].rewardPerCRE) / 1e18) ) + poolInfo[poolId].totalDebt - int256(poolInfo[poolId].totalClaimed) ); IERC20(CRE).transfer(to, remainTokens); } function _update(uint256 poolId) internal { if (poolInfo[poolId].lastUpdateTimestamp != block.timestamp) { poolInfo[poolId].rewardPerCRE = _calcRewardPerCRE(poolId); poolInfo[poolId].lastUpdateTimestamp = block.timestamp; } } function _stake(uint256 poolId, uint256 amount) private { UserInfo storage user = userInfo[poolId][msg.sender]; // 스테이킹된 토큰 수량 증가 user.staked += amount; int256 debt = int256((amount * poolInfo[poolId].rewardPerCRE) / 1e18); user.debt += debt; poolInfo[poolId].totalDebt += debt; poolInfo[poolId].totalStaked += amount; } function stake(uint256 poolId, uint256 amount) public notClosed(poolId) { require( block.timestamp >= poolInfo[poolId].start, "StakingPool: not started yet" ); require( block.timestamp < poolInfo[poolId].start + poolInfo[poolId].period, "StakingPool: already ended" ); _update(poolId); _stake(poolId, amount); IERC20(CRE).transferFrom(msg.sender, address(this), amount); emit Stake(poolId, msg.sender, amount); } function compound(uint256 poolId) public notClosed(poolId) { uint256 start = poolInfo[poolId].start; require(block.timestamp >= start, "StakingPool: not started yet"); require( block.timestamp < start + poolInfo[poolId].period, "StakingPool: already ended" ); UserInfo storage user = userInfo[poolId][msg.sender]; require( stakedOf(poolId, msg.sender) > 0, "StakingPool: no stake to compound" ); _update(poolId); uint256 rewardPerCRE = poolInfo[poolId].rewardPerCRE; int256 reward = int256((user.staked * rewardPerCRE) / 1e18) - user.debt; user.debt += reward; poolInfo[poolId].totalDebt += reward; poolInfo[poolId].totalClaimed += uint256(reward); _stake(poolId, uint256(reward)); emit Compound(poolId, msg.sender, uint256(reward)); } function claim(uint256 poolId) external notClosed(poolId) { PoolInfo storage pool = poolInfo[poolId]; UserInfo storage user = userInfo[poolId][msg.sender]; _update(poolId); uint256 rewardPerCRE = poolInfo[poolId].rewardPerCRE; int256 reward = int256((user.staked * rewardPerCRE) / 1e18) - user.debt; user.debt += reward; pool.totalDebt += reward; pool.totalClaimed += uint256(reward); IERC20(CRE).transfer(msg.sender, uint256(reward)); emit Claim(poolId, msg.sender, uint256(reward)); } function unstake( uint256 poolId, uint256 amount ) external notClosed(poolId) { PoolInfo storage pool = poolInfo[poolId]; UserInfo storage user = userInfo[poolId][msg.sender]; _update(poolId); user.staked -= amount; pool.totalStaked -= amount; int256 debt = int256((amount * pool.rewardPerCRE) / 1e18); pool.totalDebt -= debt; user.debt -= debt; _addWithdrawalRequest(poolId, amount); emit Unstake(poolId, msg.sender, amount); } function unstakeAll(uint256 poolId) external notClosed(poolId) { PoolInfo storage pool = poolInfo[poolId]; UserInfo storage user = userInfo[poolId][msg.sender]; _update(poolId); uint256 staked = user.staked; int256 debt = user.debt; user.staked = 0; user.debt = 0; pool.totalStaked -= staked; pool.totalDebt -= debt; _addWithdrawalRequest(poolId, staked); IERC20(CRE).transfer( msg.sender, uint256(int256((staked * _calcRewardPerCRE(poolId)) / 1e18) - debt) ); } function _addWithdrawalRequest(uint256 poolId, uint256 amount) private { withdrawalRequests[msg.sender].push( WithdrawalRequest(poolId, amount, block.timestamp) ); } function _removeWithdrawalRequest(uint256 id) private { WithdrawalRequest[] storage requests = withdrawalRequests[msg.sender]; uint256 len = requests.length; requests[id] = requests[len - 1]; requests[len - 1].amount = 0; } function cancelWithdrawalRequest(uint256 id) external { uint256 numRequests = withdrawalRequests[msg.sender].length; require(numRequests > id, "StakingPool: invalid withdraw id"); WithdrawalRequest storage request = withdrawalRequests[msg.sender][id]; require(!poolInfo[request.poolId].closed, "StakingPool: closed"); require( block.timestamp < poolInfo[request.poolId].start + poolInfo[request.poolId].period, "StakingPool: already ended" ); uint256 amount = request.amount; _removeWithdrawalRequest(id); _stake(request.poolId, amount); } function withdraw(uint256 id) external { uint256 numRequests = withdrawalRequests[msg.sender].length; require(numRequests > id, "StakingPool: invalid withdraw id"); WithdrawalRequest storage request = withdrawalRequests[msg.sender][id]; uint256 poolId = request.poolId; uint256 withdrawableTime; if (!poolInfo[poolId].closed) { withdrawableTime = request.requestTime + poolInfo[poolId].withdrawDelay; } require( withdrawableTime < block.timestamp, "StakingPool: not ready to withdraw" ); uint256 amount = request.amount; _removeWithdrawalRequest(id); IERC20(CRE).transfer(msg.sender, amount); emit Withdraw(poolId, msg.sender, amount); } function exit(uint256 poolId) external { PoolInfo storage pool = poolInfo[poolId]; require(pool.closed, "StakingPool: not closed"); UserInfo storage user = userInfo[poolId][msg.sender]; int256 debt = user.debt; uint256 staked = user.staked; uint256 reward = uint256( int256(staked * pool.rewardPerCRE) / 1e18 - debt ); user.staked = 0; user.debt = 0; pool.totalStaked -= staked; IERC20(CRE).transfer(msg.sender, staked + reward); } function pendingWithdrawalRequests( address account ) external view returns (WithdrawalRequest[] memory) { uint256 numRequests = withdrawalRequests[account].length; WithdrawalRequest[] memory requests = new WithdrawalRequest[]( numRequests ); for (uint256 idx = 0; idx < numRequests; idx++) { requests[idx] = withdrawalRequests[account][idx]; } return requests; } /// @notice 계정의 출금 대기 중인 CRE 토큰 수량 조회 function pendingWithdrawalAmount( address account ) external view returns (uint256) { uint256 amount = 0; for (uint256 idx = 0; idx < withdrawalRequests[account].length; idx++) { amount += withdrawalRequests[account][idx].amount; } return amount; } function stakedOf( uint256 poolId, address account ) public view returns (uint256) { return userInfo[poolId][account].staked; } // compound되지 않고 누적되어 있는 리워드 수량 function rewardOf( uint256 poolId, address account ) external view returns (uint256) { uint256 staked = userInfo[poolId][account].staked; return uint256( int256((staked * _calcRewardPerCRE(poolId)) / 1e18) - userInfo[poolId][account].debt ); } function remainRewardOf(uint256 poolId) public view returns (uint256) { if (poolInfo[poolId].closed) return 0; return uint256( int256(poolInfo[poolId].allocatedReward) + poolInfo[poolId].totalDebt - int256( (poolInfo[poolId].totalStaked * _calcRewardPerCRE(poolId)) / 1e18 ) - int256(poolInfo[poolId].totalClaimed) ); } function getPoolInfo(uint256 poolId) public view returns (bytes memory) { return abi.encode( poolInfo[poolId].allocatedReward, poolInfo[poolId].start, poolInfo[poolId].period, poolInfo[poolId].totalStaked, poolInfo[poolId].totalDebt, poolInfo[poolId].withdrawDelay, poolInfo[poolId].lastUpdateTimestamp, poolInfo[poolId].rewardPerCRE, poolInfo[poolId].closed, remainRewardOf(poolId) ); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 amount) external returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.2 <0.9.0; pragma experimental ABIEncoderV2; // 💬 ABOUT // Forge Std's default Test. // 🧩 MODULES import {console} from "./console.sol"; import {console2} from "./console2.sol"; import {safeconsole} from "./safeconsole.sol"; import {StdAssertions} from "./StdAssertions.sol"; import {StdChains} from "./StdChains.sol"; import {StdCheats} from "./StdCheats.sol"; import {stdError} from "./StdError.sol"; import {StdInvariant} from "./StdInvariant.sol"; import {stdJson} from "./StdJson.sol"; import {stdMath} from "./StdMath.sol"; import {StdStorage, stdStorage} from "./StdStorage.sol"; import {StdStyle} from "./StdStyle.sol"; import {StdUtils} from "./StdUtils.sol"; import {Vm} from "./Vm.sol"; // 📦 BOILERPLATE import {TestBase} from "./Base.sol"; import {DSTest} from "ds-test/test.sol"; // ⭐️ TEST abstract contract Test is TestBase, DSTest, StdAssertions, StdChains, StdCheats, StdInvariant, StdUtils { // Note: IS_TEST() must return true. // Note: Must have failure system, https://github.com/dapphub/ds-test/blob/cd98eff28324bfac652e63a239a60632a761790b/src/test.sol#L39-L76. }
// SPDX-License-Identifier: MIT pragma solidity >=0.4.22 <0.9.0; library console { address constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67); function _sendLogPayload(bytes memory payload) private view { uint256 payloadLength = payload.length; address consoleAddress = CONSOLE_ADDRESS; /// @solidity memory-safe-assembly assembly { let payloadStart := add(payload, 32) let r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0) } } function log() internal view { _sendLogPayload(abi.encodeWithSignature("log()")); } function logInt(int p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(int)", p0)); } function logUint(uint p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint)", p0)); } function logString(string memory p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(string)", p0)); } function logBool(bool p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool)", p0)); } function logAddress(address p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(address)", p0)); } function logBytes(bytes memory p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes)", p0)); } function logBytes1(bytes1 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes1)", p0)); } function logBytes2(bytes2 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes2)", p0)); } function logBytes3(bytes3 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes3)", p0)); } function logBytes4(bytes4 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes4)", p0)); } function logBytes5(bytes5 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes5)", p0)); } function logBytes6(bytes6 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes6)", p0)); } function logBytes7(bytes7 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes7)", p0)); } function logBytes8(bytes8 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes8)", p0)); } function logBytes9(bytes9 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes9)", p0)); } function logBytes10(bytes10 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes10)", p0)); } function logBytes11(bytes11 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes11)", p0)); } function logBytes12(bytes12 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes12)", p0)); } function logBytes13(bytes13 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes13)", p0)); } function logBytes14(bytes14 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes14)", p0)); } function logBytes15(bytes15 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes15)", p0)); } function logBytes16(bytes16 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes16)", p0)); } function logBytes17(bytes17 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes17)", p0)); } function logBytes18(bytes18 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes18)", p0)); } function logBytes19(bytes19 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes19)", p0)); } function logBytes20(bytes20 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes20)", p0)); } function logBytes21(bytes21 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes21)", p0)); } function logBytes22(bytes22 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes22)", p0)); } function logBytes23(bytes23 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes23)", p0)); } function logBytes24(bytes24 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes24)", p0)); } function logBytes25(bytes25 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes25)", p0)); } function logBytes26(bytes26 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes26)", p0)); } function logBytes27(bytes27 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes27)", p0)); } function logBytes28(bytes28 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes28)", p0)); } function logBytes29(bytes29 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes29)", p0)); } function logBytes30(bytes30 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes30)", p0)); } function logBytes31(bytes31 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes31)", p0)); } function logBytes32(bytes32 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes32)", p0)); } function log(uint p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint)", p0)); } function log(string memory p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(string)", p0)); } function log(bool p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool)", p0)); } function log(address p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(address)", p0)); } function log(uint p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint)", p0, p1)); } function log(uint p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string)", p0, p1)); } function log(uint p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool)", p0, p1)); } function log(uint p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address)", p0, p1)); } function log(string memory p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint)", p0, p1)); } function log(string memory p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string)", p0, p1)); } function log(string memory p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool)", p0, p1)); } function log(string memory p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address)", p0, p1)); } function log(bool p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint)", p0, p1)); } function log(bool p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string)", p0, p1)); } function log(bool p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool)", p0, p1)); } function log(bool p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address)", p0, p1)); } function log(address p0, uint p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint)", p0, p1)); } function log(address p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string)", p0, p1)); } function log(address p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool)", p0, p1)); } function log(address p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address)", p0, p1)); } function log(uint p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint)", p0, p1, p2)); } function log(uint p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string)", p0, p1, p2)); } function log(uint p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool)", p0, p1, p2)); } function log(uint p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address)", p0, p1, p2)); } function log(uint p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint)", p0, p1, p2)); } function log(uint p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string)", p0, p1, p2)); } function log(uint p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool)", p0, p1, p2)); } function log(uint p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address)", p0, p1, p2)); } function log(uint p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint)", p0, p1, p2)); } function log(uint p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string)", p0, p1, p2)); } function log(uint p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool)", p0, p1, p2)); } function log(uint p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address)", p0, p1, p2)); } function log(uint p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint)", p0, p1, p2)); } function log(uint p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string)", p0, p1, p2)); } function log(uint p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool)", p0, p1, p2)); } function log(uint p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address)", p0, p1, p2)); } function log(string memory p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint)", p0, p1, p2)); } function log(string memory p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string)", p0, p1, p2)); } function log(string memory p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool)", p0, p1, p2)); } function log(string memory p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address)", p0, p1, p2)); } function log(string memory p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint)", p0, p1, p2)); } function log(string memory p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string)", p0, p1, p2)); } function log(string memory p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool)", p0, p1, p2)); } function log(string memory p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address)", p0, p1, p2)); } function log(string memory p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint)", p0, p1, p2)); } function log(string memory p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string)", p0, p1, p2)); } function log(string memory p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool)", p0, p1, p2)); } function log(string memory p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address)", p0, p1, p2)); } function log(string memory p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint)", p0, p1, p2)); } function log(string memory p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string)", p0, p1, p2)); } function log(string memory p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool)", p0, p1, p2)); } function log(string memory p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address)", p0, p1, p2)); } function log(bool p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint)", p0, p1, p2)); } function log(bool p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string)", p0, p1, p2)); } function log(bool p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool)", p0, p1, p2)); } function log(bool p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address)", p0, p1, p2)); } function log(bool p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint)", p0, p1, p2)); } function log(bool p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string)", p0, p1, p2)); } function log(bool p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool)", p0, p1, p2)); } function log(bool p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address)", p0, p1, p2)); } function log(bool p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint)", p0, p1, p2)); } function log(bool p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string)", p0, p1, p2)); } function log(bool p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool)", p0, p1, p2)); } function log(bool p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address)", p0, p1, p2)); } function log(bool p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint)", p0, p1, p2)); } function log(bool p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string)", p0, p1, p2)); } function log(bool p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool)", p0, p1, p2)); } function log(bool p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address)", p0, p1, p2)); } function log(address p0, uint p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint)", p0, p1, p2)); } function log(address p0, uint p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string)", p0, p1, p2)); } function log(address p0, uint p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool)", p0, p1, p2)); } function log(address p0, uint p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address)", p0, p1, p2)); } function log(address p0, string memory p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint)", p0, p1, p2)); } function log(address p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string)", p0, p1, p2)); } function log(address p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool)", p0, p1, p2)); } function log(address p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address)", p0, p1, p2)); } function log(address p0, bool p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint)", p0, p1, p2)); } function log(address p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string)", p0, p1, p2)); } function log(address p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool)", p0, p1, p2)); } function log(address p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address)", p0, p1, p2)); } function log(address p0, address p1, uint p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint)", p0, p1, p2)); } function log(address p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string)", p0, p1, p2)); } function log(address p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool)", p0, p1, p2)); } function log(address p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address)", p0, p1, p2)); } function log(uint p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,address)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,address)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,address)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,uint)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,string)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,bool)", p0, p1, p2, p3)); } function log(uint p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,string,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,address)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,uint)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,string)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,bool)", p0, p1, p2, p3)); } function log(uint p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,string,address,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,address)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,uint)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,string)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,bool)", p0, p1, p2, p3)); } function log(uint p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,string,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,address)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,uint)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,string)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,bool)", p0, p1, p2, p3)); } function log(uint p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint,address,address,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,string,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,string)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint,address,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,uint)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,address)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,uint)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,string)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,bool)", p0, p1, p2, p3)); } function log(bool p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,uint)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,uint)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,uint)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,string,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,address)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,uint)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,string)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,bool)", p0, p1, p2, p3)); } function log(address p0, uint p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint,address,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,uint)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,uint)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,address)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,string)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, uint p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint,address)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,string)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,address)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,string)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,address)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, uint p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,uint)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,string)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,address)", p0, p1, p2, p3)); } }
// SPDX-License-Identifier: MIT pragma solidity >=0.4.22 <0.9.0; /// @dev The original console.sol uses `int` and `uint` for computing function selectors, but it should /// use `int256` and `uint256`. This modified version fixes that. This version is recommended /// over `console.sol` if you don't need compatibility with Hardhat as the logs will show up in /// forge stack traces. If you do need compatibility with Hardhat, you must use `console.sol`. /// Reference: https://github.com/NomicFoundation/hardhat/issues/2178 library console2 { address constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67); function _castLogPayloadViewToPure( function(bytes memory) internal view fnIn ) internal pure returns (function(bytes memory) internal pure fnOut) { assembly { fnOut := fnIn } } function _sendLogPayload(bytes memory payload) internal pure { _castLogPayloadViewToPure(_sendLogPayloadView)(payload); } function _sendLogPayloadView(bytes memory payload) private view { uint256 payloadLength = payload.length; address consoleAddress = CONSOLE_ADDRESS; /// @solidity memory-safe-assembly assembly { let payloadStart := add(payload, 32) let r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0) } } function log() internal pure { _sendLogPayload(abi.encodeWithSignature("log()")); } function logInt(int256 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(int256)", p0)); } function logUint(uint256 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256)", p0)); } function logString(string memory p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string)", p0)); } function logBool(bool p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool)", p0)); } function logAddress(address p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address)", p0)); } function logBytes(bytes memory p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes)", p0)); } function logBytes1(bytes1 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes1)", p0)); } function logBytes2(bytes2 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes2)", p0)); } function logBytes3(bytes3 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes3)", p0)); } function logBytes4(bytes4 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes4)", p0)); } function logBytes5(bytes5 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes5)", p0)); } function logBytes6(bytes6 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes6)", p0)); } function logBytes7(bytes7 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes7)", p0)); } function logBytes8(bytes8 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes8)", p0)); } function logBytes9(bytes9 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes9)", p0)); } function logBytes10(bytes10 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes10)", p0)); } function logBytes11(bytes11 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes11)", p0)); } function logBytes12(bytes12 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes12)", p0)); } function logBytes13(bytes13 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes13)", p0)); } function logBytes14(bytes14 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes14)", p0)); } function logBytes15(bytes15 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes15)", p0)); } function logBytes16(bytes16 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes16)", p0)); } function logBytes17(bytes17 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes17)", p0)); } function logBytes18(bytes18 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes18)", p0)); } function logBytes19(bytes19 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes19)", p0)); } function logBytes20(bytes20 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes20)", p0)); } function logBytes21(bytes21 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes21)", p0)); } function logBytes22(bytes22 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes22)", p0)); } function logBytes23(bytes23 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes23)", p0)); } function logBytes24(bytes24 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes24)", p0)); } function logBytes25(bytes25 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes25)", p0)); } function logBytes26(bytes26 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes26)", p0)); } function logBytes27(bytes27 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes27)", p0)); } function logBytes28(bytes28 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes28)", p0)); } function logBytes29(bytes29 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes29)", p0)); } function logBytes30(bytes30 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes30)", p0)); } function logBytes31(bytes31 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes31)", p0)); } function logBytes32(bytes32 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bytes32)", p0)); } function log(uint256 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256)", p0)); } function log(int256 p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(int256)", p0)); } function log(string memory p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string)", p0)); } function log(bool p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool)", p0)); } function log(address p0) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address)", p0)); } function log(uint256 p0, uint256 p1) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256)", p0, p1)); } function log(uint256 p0, string memory p1) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,string)", p0, p1)); } function log(uint256 p0, bool p1) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool)", p0, p1)); } function log(uint256 p0, address p1) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,address)", p0, p1)); } function log(string memory p0, uint256 p1) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,uint256)", p0, p1)); } function log(string memory p0, int256 p1) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,int256)", p0, p1)); } function log(string memory p0, string memory p1) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,string)", p0, p1)); } function log(string memory p0, bool p1) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,bool)", p0, p1)); } function log(string memory p0, address p1) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,address)", p0, p1)); } function log(bool p0, uint256 p1) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256)", p0, p1)); } function log(bool p0, string memory p1) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,string)", p0, p1)); } function log(bool p0, bool p1) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,bool)", p0, p1)); } function log(bool p0, address p1) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,address)", p0, p1)); } function log(address p0, uint256 p1) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,uint256)", p0, p1)); } function log(address p0, string memory p1) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,string)", p0, p1)); } function log(address p0, bool p1) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,bool)", p0, p1)); } function log(address p0, address p1) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,address)", p0, p1)); } function log(uint256 p0, uint256 p1, uint256 p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256)", p0, p1, p2)); } function log(uint256 p0, uint256 p1, string memory p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string)", p0, p1, p2)); } function log(uint256 p0, uint256 p1, bool p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool)", p0, p1, p2)); } function log(uint256 p0, uint256 p1, address p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address)", p0, p1, p2)); } function log(uint256 p0, string memory p1, uint256 p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256)", p0, p1, p2)); } function log(uint256 p0, string memory p1, string memory p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,string)", p0, p1, p2)); } function log(uint256 p0, string memory p1, bool p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool)", p0, p1, p2)); } function log(uint256 p0, string memory p1, address p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,address)", p0, p1, p2)); } function log(uint256 p0, bool p1, uint256 p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256)", p0, p1, p2)); } function log(uint256 p0, bool p1, string memory p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string)", p0, p1, p2)); } function log(uint256 p0, bool p1, bool p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool)", p0, p1, p2)); } function log(uint256 p0, bool p1, address p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address)", p0, p1, p2)); } function log(uint256 p0, address p1, uint256 p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256)", p0, p1, p2)); } function log(uint256 p0, address p1, string memory p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,string)", p0, p1, p2)); } function log(uint256 p0, address p1, bool p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool)", p0, p1, p2)); } function log(uint256 p0, address p1, address p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,address)", p0, p1, p2)); } function log(string memory p0, uint256 p1, uint256 p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256)", p0, p1, p2)); } function log(string memory p0, uint256 p1, string memory p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,string)", p0, p1, p2)); } function log(string memory p0, uint256 p1, bool p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool)", p0, p1, p2)); } function log(string memory p0, uint256 p1, address p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,address)", p0, p1, p2)); } function log(string memory p0, string memory p1, uint256 p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint256)", p0, p1, p2)); } function log(string memory p0, string memory p1, string memory p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,string,string)", p0, p1, p2)); } function log(string memory p0, string memory p1, bool p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool)", p0, p1, p2)); } function log(string memory p0, string memory p1, address p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,string,address)", p0, p1, p2)); } function log(string memory p0, bool p1, uint256 p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256)", p0, p1, p2)); } function log(string memory p0, bool p1, string memory p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string)", p0, p1, p2)); } function log(string memory p0, bool p1, bool p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool)", p0, p1, p2)); } function log(string memory p0, bool p1, address p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address)", p0, p1, p2)); } function log(string memory p0, address p1, uint256 p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint256)", p0, p1, p2)); } function log(string memory p0, address p1, string memory p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,address,string)", p0, p1, p2)); } function log(string memory p0, address p1, bool p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool)", p0, p1, p2)); } function log(string memory p0, address p1, address p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,address,address)", p0, p1, p2)); } function log(bool p0, uint256 p1, uint256 p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256)", p0, p1, p2)); } function log(bool p0, uint256 p1, string memory p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string)", p0, p1, p2)); } function log(bool p0, uint256 p1, bool p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool)", p0, p1, p2)); } function log(bool p0, uint256 p1, address p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address)", p0, p1, p2)); } function log(bool p0, string memory p1, uint256 p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256)", p0, p1, p2)); } function log(bool p0, string memory p1, string memory p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string)", p0, p1, p2)); } function log(bool p0, string memory p1, bool p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool)", p0, p1, p2)); } function log(bool p0, string memory p1, address p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address)", p0, p1, p2)); } function log(bool p0, bool p1, uint256 p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256)", p0, p1, p2)); } function log(bool p0, bool p1, string memory p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string)", p0, p1, p2)); } function log(bool p0, bool p1, bool p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool)", p0, p1, p2)); } function log(bool p0, bool p1, address p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address)", p0, p1, p2)); } function log(bool p0, address p1, uint256 p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256)", p0, p1, p2)); } function log(bool p0, address p1, string memory p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string)", p0, p1, p2)); } function log(bool p0, address p1, bool p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool)", p0, p1, p2)); } function log(bool p0, address p1, address p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address)", p0, p1, p2)); } function log(address p0, uint256 p1, uint256 p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256)", p0, p1, p2)); } function log(address p0, uint256 p1, string memory p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,string)", p0, p1, p2)); } function log(address p0, uint256 p1, bool p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool)", p0, p1, p2)); } function log(address p0, uint256 p1, address p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,address)", p0, p1, p2)); } function log(address p0, string memory p1, uint256 p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint256)", p0, p1, p2)); } function log(address p0, string memory p1, string memory p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,string,string)", p0, p1, p2)); } function log(address p0, string memory p1, bool p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool)", p0, p1, p2)); } function log(address p0, string memory p1, address p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,string,address)", p0, p1, p2)); } function log(address p0, bool p1, uint256 p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256)", p0, p1, p2)); } function log(address p0, bool p1, string memory p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string)", p0, p1, p2)); } function log(address p0, bool p1, bool p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool)", p0, p1, p2)); } function log(address p0, bool p1, address p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address)", p0, p1, p2)); } function log(address p0, address p1, uint256 p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint256)", p0, p1, p2)); } function log(address p0, address p1, string memory p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,address,string)", p0, p1, p2)); } function log(address p0, address p1, bool p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool)", p0, p1, p2)); } function log(address p0, address p1, address p2) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,address,address)", p0, p1, p2)); } function log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,string)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,bool)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, uint256 p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,address)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,string)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, string memory p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,bool)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, string memory p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,address)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, bool p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,string)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, bool p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,bool)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, bool p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,address)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, address p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, address p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,string)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, address p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,bool)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, address p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,address)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,string)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, uint256 p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,bool)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, uint256 p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,address)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, string memory p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,string)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, string memory p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,bool)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, string memory p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,address)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, bool p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, bool p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,string)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, bool p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,bool)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, bool p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,address)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, address p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, address p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,string)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, address p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,bool)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, address p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,address)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, uint256 p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,string)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, uint256 p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,bool)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, uint256 p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,address)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, string memory p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, string memory p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,string)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, string memory p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,bool)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, string memory p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,address)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, bool p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, bool p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,string)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, bool p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,bool)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, bool p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,address)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, address p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, address p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,string)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, address p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,bool)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, address p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,address)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, uint256 p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, uint256 p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,string)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, uint256 p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,bool)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, uint256 p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,address)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, string memory p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, string memory p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,string)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, string memory p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,bool)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, string memory p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,address)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, bool p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, bool p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,string)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, bool p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,bool)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, bool p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,address)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, address p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, address p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,string)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, address p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,bool)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, address p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,address)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,uint256)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,string)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, uint256 p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, uint256 p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,address)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,uint256)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, string memory p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,string)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, string memory p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, string memory p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,address)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, bool p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,uint256)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, bool p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, bool p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, bool p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, address p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,uint256)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, address p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,string)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, address p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, address p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,uint256)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint256 p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint256 p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint256 p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,uint256)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,uint256)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,uint256)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint256 p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,uint256)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint256 p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint256 p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint256 p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,uint256)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,uint256)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,uint256)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint256 p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,uint256)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint256 p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint256 p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint256 p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,uint256)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,uint256)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,uint256)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,address)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,uint256)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, uint256 p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,string)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, uint256 p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,bool)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, uint256 p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,address)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, string memory p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,uint256)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, string memory p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,string)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, string memory p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,bool)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, string memory p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,address)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, bool p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,uint256)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, bool p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,string)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, bool p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, bool p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,address)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, address p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,uint256)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, address p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,string)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, address p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,bool)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, address p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint256 p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,uint256)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint256 p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint256 p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint256 p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,uint256)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,uint256)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,uint256)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint256 p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,uint256)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint256 p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint256 p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint256 p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,uint256)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,uint256)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,uint256)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint256 p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,uint256)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint256 p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint256 p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint256 p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,uint256)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,uint256)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,uint256)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,address)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, uint256 p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,uint256)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, uint256 p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,string)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, uint256 p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,bool)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, uint256 p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,address)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, string memory p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,uint256)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, string memory p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,string)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, string memory p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,bool)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, string memory p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,address)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, bool p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,uint256)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, bool p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,string)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, bool p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,bool)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, bool p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,address)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, address p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,uint256)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, address p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,string)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, address p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,bool)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, address p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint256 p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,uint256)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint256 p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint256 p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint256 p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,uint256)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,uint256)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,uint256)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint256 p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,uint256)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint256 p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint256 p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint256 p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,uint256)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,uint256)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,uint256)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,address)", p0, p1, p2, p3)); } function log(address p0, address p1, uint256 p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,uint256)", p0, p1, p2, p3)); } function log(address p0, address p1, uint256 p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,string)", p0, p1, p2, p3)); } function log(address p0, address p1, uint256 p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, uint256 p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,address)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,uint256)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,string)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,address)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,uint256)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,string)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,address)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, uint256 p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,uint256)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, string memory p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,string)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, bool p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, address p3) internal pure { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,address)", p0, p1, p2, p3)); } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.2 <0.9.0; /// @author philogy <https://github.com/philogy> /// @dev Code generated automatically by script. library safeconsole { uint256 constant CONSOLE_ADDR = 0x000000000000000000000000000000000000000000636F6e736F6c652e6c6f67; // Credit to [0age](https://twitter.com/z0age/status/1654922202930888704) and [0xdapper](https://github.com/foundry-rs/forge-std/pull/374) // for the view-to-pure log trick. function _sendLogPayload(uint256 offset, uint256 size) private pure { function(uint256, uint256) internal view fnIn = _sendLogPayloadView; function(uint256, uint256) internal pure pureSendLogPayload; assembly { pureSendLogPayload := fnIn } pureSendLogPayload(offset, size); } function _sendLogPayloadView(uint256 offset, uint256 size) private view { assembly { pop(staticcall(gas(), CONSOLE_ADDR, offset, size, 0x0, 0x0)) } } function _memcopy(uint256 fromOffset, uint256 toOffset, uint256 length) private pure { function(uint256, uint256, uint256) internal view fnIn = _memcopyView; function(uint256, uint256, uint256) internal pure pureMemcopy; assembly { pureMemcopy := fnIn } pureMemcopy(fromOffset, toOffset, length); } function _memcopyView(uint256 fromOffset, uint256 toOffset, uint256 length) private view { assembly { pop(staticcall(gas(), 0x4, fromOffset, length, toOffset, length)) } } function logMemory(uint256 offset, uint256 length) internal pure { if (offset >= 0x60) { // Sufficient memory before slice to prepare call header. bytes32 m0; bytes32 m1; bytes32 m2; assembly { m0 := mload(sub(offset, 0x60)) m1 := mload(sub(offset, 0x40)) m2 := mload(sub(offset, 0x20)) // Selector of `logBytes(bytes)`. mstore(sub(offset, 0x60), 0xe17bf956) mstore(sub(offset, 0x40), 0x20) mstore(sub(offset, 0x20), length) } _sendLogPayload(offset - 0x44, length + 0x44); assembly { mstore(sub(offset, 0x60), m0) mstore(sub(offset, 0x40), m1) mstore(sub(offset, 0x20), m2) } } else { // Insufficient space, so copy slice forward, add header and reverse. bytes32 m0; bytes32 m1; bytes32 m2; uint256 endOffset = offset + length; assembly { m0 := mload(add(endOffset, 0x00)) m1 := mload(add(endOffset, 0x20)) m2 := mload(add(endOffset, 0x40)) } _memcopy(offset, offset + 0x60, length); assembly { // Selector of `logBytes(bytes)`. mstore(add(offset, 0x00), 0xe17bf956) mstore(add(offset, 0x20), 0x20) mstore(add(offset, 0x40), length) } _sendLogPayload(offset + 0x1c, length + 0x44); _memcopy(offset + 0x60, offset, length); assembly { mstore(add(endOffset, 0x00), m0) mstore(add(endOffset, 0x20), m1) mstore(add(endOffset, 0x40), m2) } } } function log(address p0) internal pure { bytes32 m0; bytes32 m1; assembly { m0 := mload(0x00) m1 := mload(0x20) // Selector of `log(address)`. mstore(0x00, 0x2c2ecbc2) mstore(0x20, p0) } _sendLogPayload(0x1c, 0x24); assembly { mstore(0x00, m0) mstore(0x20, m1) } } function log(bool p0) internal pure { bytes32 m0; bytes32 m1; assembly { m0 := mload(0x00) m1 := mload(0x20) // Selector of `log(bool)`. mstore(0x00, 0x32458eed) mstore(0x20, p0) } _sendLogPayload(0x1c, 0x24); assembly { mstore(0x00, m0) mstore(0x20, m1) } } function log(uint256 p0) internal pure { bytes32 m0; bytes32 m1; assembly { m0 := mload(0x00) m1 := mload(0x20) // Selector of `log(uint256)`. mstore(0x00, 0xf82c50f1) mstore(0x20, p0) } _sendLogPayload(0x1c, 0x24); assembly { mstore(0x00, m0) mstore(0x20, m1) } } function log(bytes32 p0) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) // Selector of `log(string)`. mstore(0x00, 0x41304fac) mstore(0x20, 0x20) writeString(0x40, p0) } _sendLogPayload(0x1c, 0x64); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) } } function log(address p0, address p1) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) // Selector of `log(address,address)`. mstore(0x00, 0xdaf0d4aa) mstore(0x20, p0) mstore(0x40, p1) } _sendLogPayload(0x1c, 0x44); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) } } function log(address p0, bool p1) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) // Selector of `log(address,bool)`. mstore(0x00, 0x75b605d3) mstore(0x20, p0) mstore(0x40, p1) } _sendLogPayload(0x1c, 0x44); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) } } function log(address p0, uint256 p1) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) // Selector of `log(address,uint256)`. mstore(0x00, 0x8309e8a8) mstore(0x20, p0) mstore(0x40, p1) } _sendLogPayload(0x1c, 0x44); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) } } function log(address p0, bytes32 p1) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(address,string)`. mstore(0x00, 0x759f86bb) mstore(0x20, p0) mstore(0x40, 0x40) writeString(0x60, p1) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(bool p0, address p1) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) // Selector of `log(bool,address)`. mstore(0x00, 0x853c4849) mstore(0x20, p0) mstore(0x40, p1) } _sendLogPayload(0x1c, 0x44); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) } } function log(bool p0, bool p1) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) // Selector of `log(bool,bool)`. mstore(0x00, 0x2a110e83) mstore(0x20, p0) mstore(0x40, p1) } _sendLogPayload(0x1c, 0x44); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) } } function log(bool p0, uint256 p1) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) // Selector of `log(bool,uint256)`. mstore(0x00, 0x399174d3) mstore(0x20, p0) mstore(0x40, p1) } _sendLogPayload(0x1c, 0x44); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) } } function log(bool p0, bytes32 p1) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(bool,string)`. mstore(0x00, 0x8feac525) mstore(0x20, p0) mstore(0x40, 0x40) writeString(0x60, p1) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(uint256 p0, address p1) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) // Selector of `log(uint256,address)`. mstore(0x00, 0x69276c86) mstore(0x20, p0) mstore(0x40, p1) } _sendLogPayload(0x1c, 0x44); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) } } function log(uint256 p0, bool p1) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) // Selector of `log(uint256,bool)`. mstore(0x00, 0x1c9d7eb3) mstore(0x20, p0) mstore(0x40, p1) } _sendLogPayload(0x1c, 0x44); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) } } function log(uint256 p0, uint256 p1) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) // Selector of `log(uint256,uint256)`. mstore(0x00, 0xf666715a) mstore(0x20, p0) mstore(0x40, p1) } _sendLogPayload(0x1c, 0x44); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) } } function log(uint256 p0, bytes32 p1) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(uint256,string)`. mstore(0x00, 0x643fd0df) mstore(0x20, p0) mstore(0x40, 0x40) writeString(0x60, p1) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(bytes32 p0, address p1) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(string,address)`. mstore(0x00, 0x319af333) mstore(0x20, 0x40) mstore(0x40, p1) writeString(0x60, p0) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(bytes32 p0, bool p1) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(string,bool)`. mstore(0x00, 0xc3b55635) mstore(0x20, 0x40) mstore(0x40, p1) writeString(0x60, p0) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(bytes32 p0, uint256 p1) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(string,uint256)`. mstore(0x00, 0xb60e72cc) mstore(0x20, 0x40) mstore(0x40, p1) writeString(0x60, p0) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(bytes32 p0, bytes32 p1) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(string,string)`. mstore(0x00, 0x4b5c4277) mstore(0x20, 0x40) mstore(0x40, 0x80) writeString(0x60, p0) writeString(0xa0, p1) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(address p0, address p1, address p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) // Selector of `log(address,address,address)`. mstore(0x00, 0x018c84c2) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) } _sendLogPayload(0x1c, 0x64); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) } } function log(address p0, address p1, bool p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) // Selector of `log(address,address,bool)`. mstore(0x00, 0xf2a66286) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) } _sendLogPayload(0x1c, 0x64); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) } } function log(address p0, address p1, uint256 p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) // Selector of `log(address,address,uint256)`. mstore(0x00, 0x17fe6185) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) } _sendLogPayload(0x1c, 0x64); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) } } function log(address p0, address p1, bytes32 p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) // Selector of `log(address,address,string)`. mstore(0x00, 0x007150be) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, 0x60) writeString(0x80, p2) } _sendLogPayload(0x1c, 0xa4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) } } function log(address p0, bool p1, address p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) // Selector of `log(address,bool,address)`. mstore(0x00, 0xf11699ed) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) } _sendLogPayload(0x1c, 0x64); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) } } function log(address p0, bool p1, bool p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) // Selector of `log(address,bool,bool)`. mstore(0x00, 0xeb830c92) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) } _sendLogPayload(0x1c, 0x64); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) } } function log(address p0, bool p1, uint256 p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) // Selector of `log(address,bool,uint256)`. mstore(0x00, 0x9c4f99fb) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) } _sendLogPayload(0x1c, 0x64); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) } } function log(address p0, bool p1, bytes32 p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) // Selector of `log(address,bool,string)`. mstore(0x00, 0x212255cc) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, 0x60) writeString(0x80, p2) } _sendLogPayload(0x1c, 0xa4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) } } function log(address p0, uint256 p1, address p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) // Selector of `log(address,uint256,address)`. mstore(0x00, 0x7bc0d848) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) } _sendLogPayload(0x1c, 0x64); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) } } function log(address p0, uint256 p1, bool p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) // Selector of `log(address,uint256,bool)`. mstore(0x00, 0x678209a8) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) } _sendLogPayload(0x1c, 0x64); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) } } function log(address p0, uint256 p1, uint256 p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) // Selector of `log(address,uint256,uint256)`. mstore(0x00, 0xb69bcaf6) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) } _sendLogPayload(0x1c, 0x64); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) } } function log(address p0, uint256 p1, bytes32 p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) // Selector of `log(address,uint256,string)`. mstore(0x00, 0xa1f2e8aa) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, 0x60) writeString(0x80, p2) } _sendLogPayload(0x1c, 0xa4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) } } function log(address p0, bytes32 p1, address p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) // Selector of `log(address,string,address)`. mstore(0x00, 0xf08744e8) mstore(0x20, p0) mstore(0x40, 0x60) mstore(0x60, p2) writeString(0x80, p1) } _sendLogPayload(0x1c, 0xa4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) } } function log(address p0, bytes32 p1, bool p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) // Selector of `log(address,string,bool)`. mstore(0x00, 0xcf020fb1) mstore(0x20, p0) mstore(0x40, 0x60) mstore(0x60, p2) writeString(0x80, p1) } _sendLogPayload(0x1c, 0xa4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) } } function log(address p0, bytes32 p1, uint256 p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) // Selector of `log(address,string,uint256)`. mstore(0x00, 0x67dd6ff1) mstore(0x20, p0) mstore(0x40, 0x60) mstore(0x60, p2) writeString(0x80, p1) } _sendLogPayload(0x1c, 0xa4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) } } function log(address p0, bytes32 p1, bytes32 p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) // Selector of `log(address,string,string)`. mstore(0x00, 0xfb772265) mstore(0x20, p0) mstore(0x40, 0x60) mstore(0x60, 0xa0) writeString(0x80, p1) writeString(0xc0, p2) } _sendLogPayload(0x1c, 0xe4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) } } function log(bool p0, address p1, address p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) // Selector of `log(bool,address,address)`. mstore(0x00, 0xd2763667) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) } _sendLogPayload(0x1c, 0x64); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) } } function log(bool p0, address p1, bool p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) // Selector of `log(bool,address,bool)`. mstore(0x00, 0x18c9c746) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) } _sendLogPayload(0x1c, 0x64); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) } } function log(bool p0, address p1, uint256 p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) // Selector of `log(bool,address,uint256)`. mstore(0x00, 0x5f7b9afb) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) } _sendLogPayload(0x1c, 0x64); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) } } function log(bool p0, address p1, bytes32 p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) // Selector of `log(bool,address,string)`. mstore(0x00, 0xde9a9270) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, 0x60) writeString(0x80, p2) } _sendLogPayload(0x1c, 0xa4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) } } function log(bool p0, bool p1, address p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) // Selector of `log(bool,bool,address)`. mstore(0x00, 0x1078f68d) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) } _sendLogPayload(0x1c, 0x64); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) } } function log(bool p0, bool p1, bool p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) // Selector of `log(bool,bool,bool)`. mstore(0x00, 0x50709698) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) } _sendLogPayload(0x1c, 0x64); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) } } function log(bool p0, bool p1, uint256 p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) // Selector of `log(bool,bool,uint256)`. mstore(0x00, 0x12f21602) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) } _sendLogPayload(0x1c, 0x64); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) } } function log(bool p0, bool p1, bytes32 p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) // Selector of `log(bool,bool,string)`. mstore(0x00, 0x2555fa46) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, 0x60) writeString(0x80, p2) } _sendLogPayload(0x1c, 0xa4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) } } function log(bool p0, uint256 p1, address p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) // Selector of `log(bool,uint256,address)`. mstore(0x00, 0x088ef9d2) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) } _sendLogPayload(0x1c, 0x64); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) } } function log(bool p0, uint256 p1, bool p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) // Selector of `log(bool,uint256,bool)`. mstore(0x00, 0xe8defba9) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) } _sendLogPayload(0x1c, 0x64); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) } } function log(bool p0, uint256 p1, uint256 p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) // Selector of `log(bool,uint256,uint256)`. mstore(0x00, 0x37103367) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) } _sendLogPayload(0x1c, 0x64); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) } } function log(bool p0, uint256 p1, bytes32 p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) // Selector of `log(bool,uint256,string)`. mstore(0x00, 0xc3fc3970) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, 0x60) writeString(0x80, p2) } _sendLogPayload(0x1c, 0xa4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) } } function log(bool p0, bytes32 p1, address p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) // Selector of `log(bool,string,address)`. mstore(0x00, 0x9591b953) mstore(0x20, p0) mstore(0x40, 0x60) mstore(0x60, p2) writeString(0x80, p1) } _sendLogPayload(0x1c, 0xa4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) } } function log(bool p0, bytes32 p1, bool p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) // Selector of `log(bool,string,bool)`. mstore(0x00, 0xdbb4c247) mstore(0x20, p0) mstore(0x40, 0x60) mstore(0x60, p2) writeString(0x80, p1) } _sendLogPayload(0x1c, 0xa4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) } } function log(bool p0, bytes32 p1, uint256 p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) // Selector of `log(bool,string,uint256)`. mstore(0x00, 0x1093ee11) mstore(0x20, p0) mstore(0x40, 0x60) mstore(0x60, p2) writeString(0x80, p1) } _sendLogPayload(0x1c, 0xa4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) } } function log(bool p0, bytes32 p1, bytes32 p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) // Selector of `log(bool,string,string)`. mstore(0x00, 0xb076847f) mstore(0x20, p0) mstore(0x40, 0x60) mstore(0x60, 0xa0) writeString(0x80, p1) writeString(0xc0, p2) } _sendLogPayload(0x1c, 0xe4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) } } function log(uint256 p0, address p1, address p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) // Selector of `log(uint256,address,address)`. mstore(0x00, 0xbcfd9be0) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) } _sendLogPayload(0x1c, 0x64); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) } } function log(uint256 p0, address p1, bool p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) // Selector of `log(uint256,address,bool)`. mstore(0x00, 0x9b6ec042) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) } _sendLogPayload(0x1c, 0x64); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) } } function log(uint256 p0, address p1, uint256 p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) // Selector of `log(uint256,address,uint256)`. mstore(0x00, 0x5a9b5ed5) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) } _sendLogPayload(0x1c, 0x64); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) } } function log(uint256 p0, address p1, bytes32 p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) // Selector of `log(uint256,address,string)`. mstore(0x00, 0x63cb41f9) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, 0x60) writeString(0x80, p2) } _sendLogPayload(0x1c, 0xa4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) } } function log(uint256 p0, bool p1, address p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) // Selector of `log(uint256,bool,address)`. mstore(0x00, 0x35085f7b) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) } _sendLogPayload(0x1c, 0x64); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) } } function log(uint256 p0, bool p1, bool p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) // Selector of `log(uint256,bool,bool)`. mstore(0x00, 0x20718650) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) } _sendLogPayload(0x1c, 0x64); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) } } function log(uint256 p0, bool p1, uint256 p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) // Selector of `log(uint256,bool,uint256)`. mstore(0x00, 0x20098014) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) } _sendLogPayload(0x1c, 0x64); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) } } function log(uint256 p0, bool p1, bytes32 p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) // Selector of `log(uint256,bool,string)`. mstore(0x00, 0x85775021) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, 0x60) writeString(0x80, p2) } _sendLogPayload(0x1c, 0xa4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) } } function log(uint256 p0, uint256 p1, address p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) // Selector of `log(uint256,uint256,address)`. mstore(0x00, 0x5c96b331) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) } _sendLogPayload(0x1c, 0x64); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) } } function log(uint256 p0, uint256 p1, bool p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) // Selector of `log(uint256,uint256,bool)`. mstore(0x00, 0x4766da72) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) } _sendLogPayload(0x1c, 0x64); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) } } function log(uint256 p0, uint256 p1, uint256 p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) // Selector of `log(uint256,uint256,uint256)`. mstore(0x00, 0xd1ed7a3c) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) } _sendLogPayload(0x1c, 0x64); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) } } function log(uint256 p0, uint256 p1, bytes32 p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) // Selector of `log(uint256,uint256,string)`. mstore(0x00, 0x71d04af2) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, 0x60) writeString(0x80, p2) } _sendLogPayload(0x1c, 0xa4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) } } function log(uint256 p0, bytes32 p1, address p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) // Selector of `log(uint256,string,address)`. mstore(0x00, 0x7afac959) mstore(0x20, p0) mstore(0x40, 0x60) mstore(0x60, p2) writeString(0x80, p1) } _sendLogPayload(0x1c, 0xa4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) } } function log(uint256 p0, bytes32 p1, bool p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) // Selector of `log(uint256,string,bool)`. mstore(0x00, 0x4ceda75a) mstore(0x20, p0) mstore(0x40, 0x60) mstore(0x60, p2) writeString(0x80, p1) } _sendLogPayload(0x1c, 0xa4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) } } function log(uint256 p0, bytes32 p1, uint256 p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) // Selector of `log(uint256,string,uint256)`. mstore(0x00, 0x37aa7d4c) mstore(0x20, p0) mstore(0x40, 0x60) mstore(0x60, p2) writeString(0x80, p1) } _sendLogPayload(0x1c, 0xa4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) } } function log(uint256 p0, bytes32 p1, bytes32 p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) // Selector of `log(uint256,string,string)`. mstore(0x00, 0xb115611f) mstore(0x20, p0) mstore(0x40, 0x60) mstore(0x60, 0xa0) writeString(0x80, p1) writeString(0xc0, p2) } _sendLogPayload(0x1c, 0xe4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) } } function log(bytes32 p0, address p1, address p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) // Selector of `log(string,address,address)`. mstore(0x00, 0xfcec75e0) mstore(0x20, 0x60) mstore(0x40, p1) mstore(0x60, p2) writeString(0x80, p0) } _sendLogPayload(0x1c, 0xa4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) } } function log(bytes32 p0, address p1, bool p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) // Selector of `log(string,address,bool)`. mstore(0x00, 0xc91d5ed4) mstore(0x20, 0x60) mstore(0x40, p1) mstore(0x60, p2) writeString(0x80, p0) } _sendLogPayload(0x1c, 0xa4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) } } function log(bytes32 p0, address p1, uint256 p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) // Selector of `log(string,address,uint256)`. mstore(0x00, 0x0d26b925) mstore(0x20, 0x60) mstore(0x40, p1) mstore(0x60, p2) writeString(0x80, p0) } _sendLogPayload(0x1c, 0xa4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) } } function log(bytes32 p0, address p1, bytes32 p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) // Selector of `log(string,address,string)`. mstore(0x00, 0xe0e9ad4f) mstore(0x20, 0x60) mstore(0x40, p1) mstore(0x60, 0xa0) writeString(0x80, p0) writeString(0xc0, p2) } _sendLogPayload(0x1c, 0xe4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) } } function log(bytes32 p0, bool p1, address p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) // Selector of `log(string,bool,address)`. mstore(0x00, 0x932bbb38) mstore(0x20, 0x60) mstore(0x40, p1) mstore(0x60, p2) writeString(0x80, p0) } _sendLogPayload(0x1c, 0xa4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) } } function log(bytes32 p0, bool p1, bool p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) // Selector of `log(string,bool,bool)`. mstore(0x00, 0x850b7ad6) mstore(0x20, 0x60) mstore(0x40, p1) mstore(0x60, p2) writeString(0x80, p0) } _sendLogPayload(0x1c, 0xa4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) } } function log(bytes32 p0, bool p1, uint256 p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) // Selector of `log(string,bool,uint256)`. mstore(0x00, 0xc95958d6) mstore(0x20, 0x60) mstore(0x40, p1) mstore(0x60, p2) writeString(0x80, p0) } _sendLogPayload(0x1c, 0xa4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) } } function log(bytes32 p0, bool p1, bytes32 p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) // Selector of `log(string,bool,string)`. mstore(0x00, 0xe298f47d) mstore(0x20, 0x60) mstore(0x40, p1) mstore(0x60, 0xa0) writeString(0x80, p0) writeString(0xc0, p2) } _sendLogPayload(0x1c, 0xe4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) } } function log(bytes32 p0, uint256 p1, address p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) // Selector of `log(string,uint256,address)`. mstore(0x00, 0x1c7ec448) mstore(0x20, 0x60) mstore(0x40, p1) mstore(0x60, p2) writeString(0x80, p0) } _sendLogPayload(0x1c, 0xa4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) } } function log(bytes32 p0, uint256 p1, bool p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) // Selector of `log(string,uint256,bool)`. mstore(0x00, 0xca7733b1) mstore(0x20, 0x60) mstore(0x40, p1) mstore(0x60, p2) writeString(0x80, p0) } _sendLogPayload(0x1c, 0xa4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) } } function log(bytes32 p0, uint256 p1, uint256 p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) // Selector of `log(string,uint256,uint256)`. mstore(0x00, 0xca47c4eb) mstore(0x20, 0x60) mstore(0x40, p1) mstore(0x60, p2) writeString(0x80, p0) } _sendLogPayload(0x1c, 0xa4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) } } function log(bytes32 p0, uint256 p1, bytes32 p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) // Selector of `log(string,uint256,string)`. mstore(0x00, 0x5970e089) mstore(0x20, 0x60) mstore(0x40, p1) mstore(0x60, 0xa0) writeString(0x80, p0) writeString(0xc0, p2) } _sendLogPayload(0x1c, 0xe4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) } } function log(bytes32 p0, bytes32 p1, address p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) // Selector of `log(string,string,address)`. mstore(0x00, 0x95ed0195) mstore(0x20, 0x60) mstore(0x40, 0xa0) mstore(0x60, p2) writeString(0x80, p0) writeString(0xc0, p1) } _sendLogPayload(0x1c, 0xe4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) } } function log(bytes32 p0, bytes32 p1, bool p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) // Selector of `log(string,string,bool)`. mstore(0x00, 0xb0e0f9b5) mstore(0x20, 0x60) mstore(0x40, 0xa0) mstore(0x60, p2) writeString(0x80, p0) writeString(0xc0, p1) } _sendLogPayload(0x1c, 0xe4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) } } function log(bytes32 p0, bytes32 p1, uint256 p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) // Selector of `log(string,string,uint256)`. mstore(0x00, 0x5821efa1) mstore(0x20, 0x60) mstore(0x40, 0xa0) mstore(0x60, p2) writeString(0x80, p0) writeString(0xc0, p1) } _sendLogPayload(0x1c, 0xe4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) } } function log(bytes32 p0, bytes32 p1, bytes32 p2) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; bytes32 m9; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) m9 := mload(0x120) // Selector of `log(string,string,string)`. mstore(0x00, 0x2ced7cef) mstore(0x20, 0x60) mstore(0x40, 0xa0) mstore(0x60, 0xe0) writeString(0x80, p0) writeString(0xc0, p1) writeString(0x100, p2) } _sendLogPayload(0x1c, 0x124); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) mstore(0x120, m9) } } function log(address p0, address p1, address p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(address,address,address,address)`. mstore(0x00, 0x665bf134) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(address p0, address p1, address p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(address,address,address,bool)`. mstore(0x00, 0x0e378994) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(address p0, address p1, address p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(address,address,address,uint256)`. mstore(0x00, 0x94250d77) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(address p0, address p1, address p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(address,address,address,string)`. mstore(0x00, 0xf808da20) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, 0x80) writeString(0xa0, p3) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(address p0, address p1, bool p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(address,address,bool,address)`. mstore(0x00, 0x9f1bc36e) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(address p0, address p1, bool p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(address,address,bool,bool)`. mstore(0x00, 0x2cd4134a) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(address p0, address p1, bool p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(address,address,bool,uint256)`. mstore(0x00, 0x3971e78c) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(address p0, address p1, bool p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(address,address,bool,string)`. mstore(0x00, 0xaa6540c8) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, 0x80) writeString(0xa0, p3) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(address p0, address p1, uint256 p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(address,address,uint256,address)`. mstore(0x00, 0x8da6def5) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(address p0, address p1, uint256 p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(address,address,uint256,bool)`. mstore(0x00, 0x9b4254e2) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(address p0, address p1, uint256 p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(address,address,uint256,uint256)`. mstore(0x00, 0xbe553481) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(address p0, address p1, uint256 p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(address,address,uint256,string)`. mstore(0x00, 0xfdb4f990) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, 0x80) writeString(0xa0, p3) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(address p0, address p1, bytes32 p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(address,address,string,address)`. mstore(0x00, 0x8f736d16) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, 0x80) mstore(0x80, p3) writeString(0xa0, p2) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(address p0, address p1, bytes32 p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(address,address,string,bool)`. mstore(0x00, 0x6f1a594e) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, 0x80) mstore(0x80, p3) writeString(0xa0, p2) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(address p0, address p1, bytes32 p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(address,address,string,uint256)`. mstore(0x00, 0xef1cefe7) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, 0x80) mstore(0x80, p3) writeString(0xa0, p2) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(address p0, address p1, bytes32 p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) // Selector of `log(address,address,string,string)`. mstore(0x00, 0x21bdaf25) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, 0x80) mstore(0x80, 0xc0) writeString(0xa0, p2) writeString(0xe0, p3) } _sendLogPayload(0x1c, 0x104); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) } } function log(address p0, bool p1, address p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(address,bool,address,address)`. mstore(0x00, 0x660375dd) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(address p0, bool p1, address p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(address,bool,address,bool)`. mstore(0x00, 0xa6f50b0f) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(address p0, bool p1, address p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(address,bool,address,uint256)`. mstore(0x00, 0xa75c59de) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(address p0, bool p1, address p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(address,bool,address,string)`. mstore(0x00, 0x2dd778e6) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, 0x80) writeString(0xa0, p3) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(address p0, bool p1, bool p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(address,bool,bool,address)`. mstore(0x00, 0xcf394485) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(address p0, bool p1, bool p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(address,bool,bool,bool)`. mstore(0x00, 0xcac43479) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(address p0, bool p1, bool p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(address,bool,bool,uint256)`. mstore(0x00, 0x8c4e5de6) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(address p0, bool p1, bool p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(address,bool,bool,string)`. mstore(0x00, 0xdfc4a2e8) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, 0x80) writeString(0xa0, p3) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(address p0, bool p1, uint256 p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(address,bool,uint256,address)`. mstore(0x00, 0xccf790a1) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(address p0, bool p1, uint256 p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(address,bool,uint256,bool)`. mstore(0x00, 0xc4643e20) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(address p0, bool p1, uint256 p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(address,bool,uint256,uint256)`. mstore(0x00, 0x386ff5f4) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(address p0, bool p1, uint256 p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(address,bool,uint256,string)`. mstore(0x00, 0x0aa6cfad) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, 0x80) writeString(0xa0, p3) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(address p0, bool p1, bytes32 p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(address,bool,string,address)`. mstore(0x00, 0x19fd4956) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, 0x80) mstore(0x80, p3) writeString(0xa0, p2) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(address p0, bool p1, bytes32 p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(address,bool,string,bool)`. mstore(0x00, 0x50ad461d) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, 0x80) mstore(0x80, p3) writeString(0xa0, p2) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(address p0, bool p1, bytes32 p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(address,bool,string,uint256)`. mstore(0x00, 0x80e6a20b) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, 0x80) mstore(0x80, p3) writeString(0xa0, p2) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(address p0, bool p1, bytes32 p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) // Selector of `log(address,bool,string,string)`. mstore(0x00, 0x475c5c33) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, 0x80) mstore(0x80, 0xc0) writeString(0xa0, p2) writeString(0xe0, p3) } _sendLogPayload(0x1c, 0x104); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) } } function log(address p0, uint256 p1, address p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(address,uint256,address,address)`. mstore(0x00, 0x478d1c62) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(address p0, uint256 p1, address p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(address,uint256,address,bool)`. mstore(0x00, 0xa1bcc9b3) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(address p0, uint256 p1, address p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(address,uint256,address,uint256)`. mstore(0x00, 0x100f650e) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(address p0, uint256 p1, address p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(address,uint256,address,string)`. mstore(0x00, 0x1da986ea) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, 0x80) writeString(0xa0, p3) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(address p0, uint256 p1, bool p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(address,uint256,bool,address)`. mstore(0x00, 0xa31bfdcc) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(address p0, uint256 p1, bool p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(address,uint256,bool,bool)`. mstore(0x00, 0x3bf5e537) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(address p0, uint256 p1, bool p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(address,uint256,bool,uint256)`. mstore(0x00, 0x22f6b999) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(address p0, uint256 p1, bool p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(address,uint256,bool,string)`. mstore(0x00, 0xc5ad85f9) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, 0x80) writeString(0xa0, p3) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(address p0, uint256 p1, uint256 p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(address,uint256,uint256,address)`. mstore(0x00, 0x20e3984d) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(address p0, uint256 p1, uint256 p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(address,uint256,uint256,bool)`. mstore(0x00, 0x66f1bc67) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(address p0, uint256 p1, uint256 p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(address,uint256,uint256,uint256)`. mstore(0x00, 0x34f0e636) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(address p0, uint256 p1, uint256 p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(address,uint256,uint256,string)`. mstore(0x00, 0x4a28c017) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, 0x80) writeString(0xa0, p3) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(address p0, uint256 p1, bytes32 p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(address,uint256,string,address)`. mstore(0x00, 0x5c430d47) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, 0x80) mstore(0x80, p3) writeString(0xa0, p2) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(address p0, uint256 p1, bytes32 p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(address,uint256,string,bool)`. mstore(0x00, 0xcf18105c) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, 0x80) mstore(0x80, p3) writeString(0xa0, p2) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(address p0, uint256 p1, bytes32 p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(address,uint256,string,uint256)`. mstore(0x00, 0xbf01f891) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, 0x80) mstore(0x80, p3) writeString(0xa0, p2) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(address p0, uint256 p1, bytes32 p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) // Selector of `log(address,uint256,string,string)`. mstore(0x00, 0x88a8c406) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, 0x80) mstore(0x80, 0xc0) writeString(0xa0, p2) writeString(0xe0, p3) } _sendLogPayload(0x1c, 0x104); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) } } function log(address p0, bytes32 p1, address p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(address,string,address,address)`. mstore(0x00, 0x0d36fa20) mstore(0x20, p0) mstore(0x40, 0x80) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p1) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(address p0, bytes32 p1, address p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(address,string,address,bool)`. mstore(0x00, 0x0df12b76) mstore(0x20, p0) mstore(0x40, 0x80) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p1) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(address p0, bytes32 p1, address p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(address,string,address,uint256)`. mstore(0x00, 0x457fe3cf) mstore(0x20, p0) mstore(0x40, 0x80) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p1) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(address p0, bytes32 p1, address p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) // Selector of `log(address,string,address,string)`. mstore(0x00, 0xf7e36245) mstore(0x20, p0) mstore(0x40, 0x80) mstore(0x60, p2) mstore(0x80, 0xc0) writeString(0xa0, p1) writeString(0xe0, p3) } _sendLogPayload(0x1c, 0x104); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) } } function log(address p0, bytes32 p1, bool p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(address,string,bool,address)`. mstore(0x00, 0x205871c2) mstore(0x20, p0) mstore(0x40, 0x80) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p1) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(address p0, bytes32 p1, bool p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(address,string,bool,bool)`. mstore(0x00, 0x5f1d5c9f) mstore(0x20, p0) mstore(0x40, 0x80) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p1) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(address p0, bytes32 p1, bool p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(address,string,bool,uint256)`. mstore(0x00, 0x515e38b6) mstore(0x20, p0) mstore(0x40, 0x80) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p1) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(address p0, bytes32 p1, bool p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) // Selector of `log(address,string,bool,string)`. mstore(0x00, 0xbc0b61fe) mstore(0x20, p0) mstore(0x40, 0x80) mstore(0x60, p2) mstore(0x80, 0xc0) writeString(0xa0, p1) writeString(0xe0, p3) } _sendLogPayload(0x1c, 0x104); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) } } function log(address p0, bytes32 p1, uint256 p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(address,string,uint256,address)`. mstore(0x00, 0x63183678) mstore(0x20, p0) mstore(0x40, 0x80) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p1) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(address p0, bytes32 p1, uint256 p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(address,string,uint256,bool)`. mstore(0x00, 0x0ef7e050) mstore(0x20, p0) mstore(0x40, 0x80) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p1) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(address p0, bytes32 p1, uint256 p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(address,string,uint256,uint256)`. mstore(0x00, 0x1dc8e1b8) mstore(0x20, p0) mstore(0x40, 0x80) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p1) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(address p0, bytes32 p1, uint256 p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) // Selector of `log(address,string,uint256,string)`. mstore(0x00, 0x448830a8) mstore(0x20, p0) mstore(0x40, 0x80) mstore(0x60, p2) mstore(0x80, 0xc0) writeString(0xa0, p1) writeString(0xe0, p3) } _sendLogPayload(0x1c, 0x104); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) } } function log(address p0, bytes32 p1, bytes32 p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) // Selector of `log(address,string,string,address)`. mstore(0x00, 0xa04e2f87) mstore(0x20, p0) mstore(0x40, 0x80) mstore(0x60, 0xc0) mstore(0x80, p3) writeString(0xa0, p1) writeString(0xe0, p2) } _sendLogPayload(0x1c, 0x104); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) } } function log(address p0, bytes32 p1, bytes32 p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) // Selector of `log(address,string,string,bool)`. mstore(0x00, 0x35a5071f) mstore(0x20, p0) mstore(0x40, 0x80) mstore(0x60, 0xc0) mstore(0x80, p3) writeString(0xa0, p1) writeString(0xe0, p2) } _sendLogPayload(0x1c, 0x104); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) } } function log(address p0, bytes32 p1, bytes32 p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) // Selector of `log(address,string,string,uint256)`. mstore(0x00, 0x159f8927) mstore(0x20, p0) mstore(0x40, 0x80) mstore(0x60, 0xc0) mstore(0x80, p3) writeString(0xa0, p1) writeString(0xe0, p2) } _sendLogPayload(0x1c, 0x104); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) } } function log(address p0, bytes32 p1, bytes32 p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; bytes32 m9; bytes32 m10; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) m9 := mload(0x120) m10 := mload(0x140) // Selector of `log(address,string,string,string)`. mstore(0x00, 0x5d02c50b) mstore(0x20, p0) mstore(0x40, 0x80) mstore(0x60, 0xc0) mstore(0x80, 0x100) writeString(0xa0, p1) writeString(0xe0, p2) writeString(0x120, p3) } _sendLogPayload(0x1c, 0x144); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) mstore(0x120, m9) mstore(0x140, m10) } } function log(bool p0, address p1, address p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(bool,address,address,address)`. mstore(0x00, 0x1d14d001) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(bool p0, address p1, address p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(bool,address,address,bool)`. mstore(0x00, 0x46600be0) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(bool p0, address p1, address p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(bool,address,address,uint256)`. mstore(0x00, 0x0c66d1be) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(bool p0, address p1, address p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(bool,address,address,string)`. mstore(0x00, 0xd812a167) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, 0x80) writeString(0xa0, p3) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(bool p0, address p1, bool p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(bool,address,bool,address)`. mstore(0x00, 0x1c41a336) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(bool p0, address p1, bool p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(bool,address,bool,bool)`. mstore(0x00, 0x6a9c478b) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(bool p0, address p1, bool p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(bool,address,bool,uint256)`. mstore(0x00, 0x07831502) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(bool p0, address p1, bool p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(bool,address,bool,string)`. mstore(0x00, 0x4a66cb34) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, 0x80) writeString(0xa0, p3) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(bool p0, address p1, uint256 p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(bool,address,uint256,address)`. mstore(0x00, 0x136b05dd) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(bool p0, address p1, uint256 p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(bool,address,uint256,bool)`. mstore(0x00, 0xd6019f1c) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(bool p0, address p1, uint256 p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(bool,address,uint256,uint256)`. mstore(0x00, 0x7bf181a1) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(bool p0, address p1, uint256 p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(bool,address,uint256,string)`. mstore(0x00, 0x51f09ff8) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, 0x80) writeString(0xa0, p3) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(bool p0, address p1, bytes32 p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(bool,address,string,address)`. mstore(0x00, 0x6f7c603e) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, 0x80) mstore(0x80, p3) writeString(0xa0, p2) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(bool p0, address p1, bytes32 p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(bool,address,string,bool)`. mstore(0x00, 0xe2bfd60b) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, 0x80) mstore(0x80, p3) writeString(0xa0, p2) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(bool p0, address p1, bytes32 p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(bool,address,string,uint256)`. mstore(0x00, 0xc21f64c7) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, 0x80) mstore(0x80, p3) writeString(0xa0, p2) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(bool p0, address p1, bytes32 p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) // Selector of `log(bool,address,string,string)`. mstore(0x00, 0xa73c1db6) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, 0x80) mstore(0x80, 0xc0) writeString(0xa0, p2) writeString(0xe0, p3) } _sendLogPayload(0x1c, 0x104); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) } } function log(bool p0, bool p1, address p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(bool,bool,address,address)`. mstore(0x00, 0xf4880ea4) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(bool p0, bool p1, address p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(bool,bool,address,bool)`. mstore(0x00, 0xc0a302d8) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(bool p0, bool p1, address p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(bool,bool,address,uint256)`. mstore(0x00, 0x4c123d57) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(bool p0, bool p1, address p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(bool,bool,address,string)`. mstore(0x00, 0xa0a47963) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, 0x80) writeString(0xa0, p3) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(bool p0, bool p1, bool p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(bool,bool,bool,address)`. mstore(0x00, 0x8c329b1a) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(bool p0, bool p1, bool p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(bool,bool,bool,bool)`. mstore(0x00, 0x3b2a5ce0) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(bool p0, bool p1, bool p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(bool,bool,bool,uint256)`. mstore(0x00, 0x6d7045c1) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(bool p0, bool p1, bool p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(bool,bool,bool,string)`. mstore(0x00, 0x2ae408d4) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, 0x80) writeString(0xa0, p3) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(bool p0, bool p1, uint256 p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(bool,bool,uint256,address)`. mstore(0x00, 0x54a7a9a0) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(bool p0, bool p1, uint256 p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(bool,bool,uint256,bool)`. mstore(0x00, 0x619e4d0e) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(bool p0, bool p1, uint256 p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(bool,bool,uint256,uint256)`. mstore(0x00, 0x0bb00eab) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(bool p0, bool p1, uint256 p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(bool,bool,uint256,string)`. mstore(0x00, 0x7dd4d0e0) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, 0x80) writeString(0xa0, p3) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(bool p0, bool p1, bytes32 p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(bool,bool,string,address)`. mstore(0x00, 0xf9ad2b89) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, 0x80) mstore(0x80, p3) writeString(0xa0, p2) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(bool p0, bool p1, bytes32 p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(bool,bool,string,bool)`. mstore(0x00, 0xb857163a) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, 0x80) mstore(0x80, p3) writeString(0xa0, p2) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(bool p0, bool p1, bytes32 p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(bool,bool,string,uint256)`. mstore(0x00, 0xe3a9ca2f) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, 0x80) mstore(0x80, p3) writeString(0xa0, p2) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(bool p0, bool p1, bytes32 p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) // Selector of `log(bool,bool,string,string)`. mstore(0x00, 0x6d1e8751) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, 0x80) mstore(0x80, 0xc0) writeString(0xa0, p2) writeString(0xe0, p3) } _sendLogPayload(0x1c, 0x104); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) } } function log(bool p0, uint256 p1, address p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(bool,uint256,address,address)`. mstore(0x00, 0x26f560a8) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(bool p0, uint256 p1, address p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(bool,uint256,address,bool)`. mstore(0x00, 0xb4c314ff) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(bool p0, uint256 p1, address p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(bool,uint256,address,uint256)`. mstore(0x00, 0x1537dc87) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(bool p0, uint256 p1, address p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(bool,uint256,address,string)`. mstore(0x00, 0x1bb3b09a) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, 0x80) writeString(0xa0, p3) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(bool p0, uint256 p1, bool p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(bool,uint256,bool,address)`. mstore(0x00, 0x9acd3616) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(bool p0, uint256 p1, bool p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(bool,uint256,bool,bool)`. mstore(0x00, 0xceb5f4d7) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(bool p0, uint256 p1, bool p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(bool,uint256,bool,uint256)`. mstore(0x00, 0x7f9bbca2) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(bool p0, uint256 p1, bool p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(bool,uint256,bool,string)`. mstore(0x00, 0x9143dbb1) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, 0x80) writeString(0xa0, p3) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(bool p0, uint256 p1, uint256 p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(bool,uint256,uint256,address)`. mstore(0x00, 0x00dd87b9) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(bool p0, uint256 p1, uint256 p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(bool,uint256,uint256,bool)`. mstore(0x00, 0xbe984353) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(bool,uint256,uint256,uint256)`. mstore(0x00, 0x374bb4b2) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(bool p0, uint256 p1, uint256 p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(bool,uint256,uint256,string)`. mstore(0x00, 0x8e69fb5d) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, 0x80) writeString(0xa0, p3) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(bool p0, uint256 p1, bytes32 p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(bool,uint256,string,address)`. mstore(0x00, 0xfedd1fff) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, 0x80) mstore(0x80, p3) writeString(0xa0, p2) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(bool p0, uint256 p1, bytes32 p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(bool,uint256,string,bool)`. mstore(0x00, 0xe5e70b2b) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, 0x80) mstore(0x80, p3) writeString(0xa0, p2) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(bool p0, uint256 p1, bytes32 p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(bool,uint256,string,uint256)`. mstore(0x00, 0x6a1199e2) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, 0x80) mstore(0x80, p3) writeString(0xa0, p2) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(bool p0, uint256 p1, bytes32 p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) // Selector of `log(bool,uint256,string,string)`. mstore(0x00, 0xf5bc2249) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, 0x80) mstore(0x80, 0xc0) writeString(0xa0, p2) writeString(0xe0, p3) } _sendLogPayload(0x1c, 0x104); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) } } function log(bool p0, bytes32 p1, address p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(bool,string,address,address)`. mstore(0x00, 0x2b2b18dc) mstore(0x20, p0) mstore(0x40, 0x80) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p1) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(bool p0, bytes32 p1, address p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(bool,string,address,bool)`. mstore(0x00, 0x6dd434ca) mstore(0x20, p0) mstore(0x40, 0x80) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p1) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(bool p0, bytes32 p1, address p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(bool,string,address,uint256)`. mstore(0x00, 0xa5cada94) mstore(0x20, p0) mstore(0x40, 0x80) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p1) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(bool p0, bytes32 p1, address p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) // Selector of `log(bool,string,address,string)`. mstore(0x00, 0x12d6c788) mstore(0x20, p0) mstore(0x40, 0x80) mstore(0x60, p2) mstore(0x80, 0xc0) writeString(0xa0, p1) writeString(0xe0, p3) } _sendLogPayload(0x1c, 0x104); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) } } function log(bool p0, bytes32 p1, bool p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(bool,string,bool,address)`. mstore(0x00, 0x538e06ab) mstore(0x20, p0) mstore(0x40, 0x80) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p1) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(bool p0, bytes32 p1, bool p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(bool,string,bool,bool)`. mstore(0x00, 0xdc5e935b) mstore(0x20, p0) mstore(0x40, 0x80) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p1) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(bool p0, bytes32 p1, bool p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(bool,string,bool,uint256)`. mstore(0x00, 0x1606a393) mstore(0x20, p0) mstore(0x40, 0x80) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p1) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(bool p0, bytes32 p1, bool p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) // Selector of `log(bool,string,bool,string)`. mstore(0x00, 0x483d0416) mstore(0x20, p0) mstore(0x40, 0x80) mstore(0x60, p2) mstore(0x80, 0xc0) writeString(0xa0, p1) writeString(0xe0, p3) } _sendLogPayload(0x1c, 0x104); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) } } function log(bool p0, bytes32 p1, uint256 p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(bool,string,uint256,address)`. mstore(0x00, 0x1596a1ce) mstore(0x20, p0) mstore(0x40, 0x80) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p1) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(bool p0, bytes32 p1, uint256 p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(bool,string,uint256,bool)`. mstore(0x00, 0x6b0e5d53) mstore(0x20, p0) mstore(0x40, 0x80) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p1) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(bool p0, bytes32 p1, uint256 p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(bool,string,uint256,uint256)`. mstore(0x00, 0x28863fcb) mstore(0x20, p0) mstore(0x40, 0x80) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p1) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(bool p0, bytes32 p1, uint256 p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) // Selector of `log(bool,string,uint256,string)`. mstore(0x00, 0x1ad96de6) mstore(0x20, p0) mstore(0x40, 0x80) mstore(0x60, p2) mstore(0x80, 0xc0) writeString(0xa0, p1) writeString(0xe0, p3) } _sendLogPayload(0x1c, 0x104); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) } } function log(bool p0, bytes32 p1, bytes32 p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) // Selector of `log(bool,string,string,address)`. mstore(0x00, 0x97d394d8) mstore(0x20, p0) mstore(0x40, 0x80) mstore(0x60, 0xc0) mstore(0x80, p3) writeString(0xa0, p1) writeString(0xe0, p2) } _sendLogPayload(0x1c, 0x104); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) } } function log(bool p0, bytes32 p1, bytes32 p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) // Selector of `log(bool,string,string,bool)`. mstore(0x00, 0x1e4b87e5) mstore(0x20, p0) mstore(0x40, 0x80) mstore(0x60, 0xc0) mstore(0x80, p3) writeString(0xa0, p1) writeString(0xe0, p2) } _sendLogPayload(0x1c, 0x104); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) } } function log(bool p0, bytes32 p1, bytes32 p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) // Selector of `log(bool,string,string,uint256)`. mstore(0x00, 0x7be0c3eb) mstore(0x20, p0) mstore(0x40, 0x80) mstore(0x60, 0xc0) mstore(0x80, p3) writeString(0xa0, p1) writeString(0xe0, p2) } _sendLogPayload(0x1c, 0x104); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) } } function log(bool p0, bytes32 p1, bytes32 p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; bytes32 m9; bytes32 m10; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) m9 := mload(0x120) m10 := mload(0x140) // Selector of `log(bool,string,string,string)`. mstore(0x00, 0x1762e32a) mstore(0x20, p0) mstore(0x40, 0x80) mstore(0x60, 0xc0) mstore(0x80, 0x100) writeString(0xa0, p1) writeString(0xe0, p2) writeString(0x120, p3) } _sendLogPayload(0x1c, 0x144); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) mstore(0x120, m9) mstore(0x140, m10) } } function log(uint256 p0, address p1, address p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(uint256,address,address,address)`. mstore(0x00, 0x2488b414) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(uint256 p0, address p1, address p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(uint256,address,address,bool)`. mstore(0x00, 0x091ffaf5) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(uint256 p0, address p1, address p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(uint256,address,address,uint256)`. mstore(0x00, 0x736efbb6) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(uint256 p0, address p1, address p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(uint256,address,address,string)`. mstore(0x00, 0x031c6f73) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, 0x80) writeString(0xa0, p3) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(uint256 p0, address p1, bool p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(uint256,address,bool,address)`. mstore(0x00, 0xef72c513) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(uint256 p0, address p1, bool p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(uint256,address,bool,bool)`. mstore(0x00, 0xe351140f) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(uint256 p0, address p1, bool p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(uint256,address,bool,uint256)`. mstore(0x00, 0x5abd992a) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(uint256 p0, address p1, bool p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(uint256,address,bool,string)`. mstore(0x00, 0x90fb06aa) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, 0x80) writeString(0xa0, p3) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(uint256 p0, address p1, uint256 p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(uint256,address,uint256,address)`. mstore(0x00, 0x15c127b5) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(uint256 p0, address p1, uint256 p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(uint256,address,uint256,bool)`. mstore(0x00, 0x5f743a7c) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(uint256 p0, address p1, uint256 p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(uint256,address,uint256,uint256)`. mstore(0x00, 0x0c9cd9c1) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(uint256 p0, address p1, uint256 p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(uint256,address,uint256,string)`. mstore(0x00, 0xddb06521) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, 0x80) writeString(0xa0, p3) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(uint256 p0, address p1, bytes32 p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(uint256,address,string,address)`. mstore(0x00, 0x9cba8fff) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, 0x80) mstore(0x80, p3) writeString(0xa0, p2) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(uint256 p0, address p1, bytes32 p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(uint256,address,string,bool)`. mstore(0x00, 0xcc32ab07) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, 0x80) mstore(0x80, p3) writeString(0xa0, p2) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(uint256 p0, address p1, bytes32 p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(uint256,address,string,uint256)`. mstore(0x00, 0x46826b5d) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, 0x80) mstore(0x80, p3) writeString(0xa0, p2) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(uint256 p0, address p1, bytes32 p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) // Selector of `log(uint256,address,string,string)`. mstore(0x00, 0x3e128ca3) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, 0x80) mstore(0x80, 0xc0) writeString(0xa0, p2) writeString(0xe0, p3) } _sendLogPayload(0x1c, 0x104); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) } } function log(uint256 p0, bool p1, address p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(uint256,bool,address,address)`. mstore(0x00, 0xa1ef4cbb) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(uint256 p0, bool p1, address p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(uint256,bool,address,bool)`. mstore(0x00, 0x454d54a5) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(uint256 p0, bool p1, address p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(uint256,bool,address,uint256)`. mstore(0x00, 0x078287f5) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(uint256 p0, bool p1, address p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(uint256,bool,address,string)`. mstore(0x00, 0xade052c7) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, 0x80) writeString(0xa0, p3) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(uint256 p0, bool p1, bool p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(uint256,bool,bool,address)`. mstore(0x00, 0x69640b59) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(uint256 p0, bool p1, bool p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(uint256,bool,bool,bool)`. mstore(0x00, 0xb6f577a1) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(uint256 p0, bool p1, bool p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(uint256,bool,bool,uint256)`. mstore(0x00, 0x7464ce23) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(uint256 p0, bool p1, bool p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(uint256,bool,bool,string)`. mstore(0x00, 0xdddb9561) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, 0x80) writeString(0xa0, p3) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(uint256 p0, bool p1, uint256 p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(uint256,bool,uint256,address)`. mstore(0x00, 0x88cb6041) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(uint256 p0, bool p1, uint256 p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(uint256,bool,uint256,bool)`. mstore(0x00, 0x91a02e2a) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(uint256,bool,uint256,uint256)`. mstore(0x00, 0xc6acc7a8) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(uint256 p0, bool p1, uint256 p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(uint256,bool,uint256,string)`. mstore(0x00, 0xde03e774) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, 0x80) writeString(0xa0, p3) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(uint256 p0, bool p1, bytes32 p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(uint256,bool,string,address)`. mstore(0x00, 0xef529018) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, 0x80) mstore(0x80, p3) writeString(0xa0, p2) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(uint256 p0, bool p1, bytes32 p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(uint256,bool,string,bool)`. mstore(0x00, 0xeb928d7f) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, 0x80) mstore(0x80, p3) writeString(0xa0, p2) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(uint256 p0, bool p1, bytes32 p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(uint256,bool,string,uint256)`. mstore(0x00, 0x2c1d0746) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, 0x80) mstore(0x80, p3) writeString(0xa0, p2) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(uint256 p0, bool p1, bytes32 p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) // Selector of `log(uint256,bool,string,string)`. mstore(0x00, 0x68c8b8bd) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, 0x80) mstore(0x80, 0xc0) writeString(0xa0, p2) writeString(0xe0, p3) } _sendLogPayload(0x1c, 0x104); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) } } function log(uint256 p0, uint256 p1, address p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(uint256,uint256,address,address)`. mstore(0x00, 0x56a5d1b1) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(uint256 p0, uint256 p1, address p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(uint256,uint256,address,bool)`. mstore(0x00, 0x15cac476) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(uint256 p0, uint256 p1, address p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(uint256,uint256,address,uint256)`. mstore(0x00, 0x88f6e4b2) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(uint256 p0, uint256 p1, address p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(uint256,uint256,address,string)`. mstore(0x00, 0x6cde40b8) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, 0x80) writeString(0xa0, p3) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(uint256 p0, uint256 p1, bool p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(uint256,uint256,bool,address)`. mstore(0x00, 0x9a816a83) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(uint256 p0, uint256 p1, bool p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(uint256,uint256,bool,bool)`. mstore(0x00, 0xab085ae6) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(uint256,uint256,bool,uint256)`. mstore(0x00, 0xeb7f6fd2) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(uint256 p0, uint256 p1, bool p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(uint256,uint256,bool,string)`. mstore(0x00, 0xa5b4fc99) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, 0x80) writeString(0xa0, p3) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(uint256 p0, uint256 p1, uint256 p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(uint256,uint256,uint256,address)`. mstore(0x00, 0xfa8185af) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(uint256,uint256,uint256,bool)`. mstore(0x00, 0xc598d185) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; assembly { m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) // Selector of `log(uint256,uint256,uint256,uint256)`. mstore(0x00, 0x193fb800) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) } _sendLogPayload(0x1c, 0x84); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) } } function log(uint256 p0, uint256 p1, uint256 p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(uint256,uint256,uint256,string)`. mstore(0x00, 0x59cfcbe3) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, 0x80) writeString(0xa0, p3) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(uint256 p0, uint256 p1, bytes32 p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(uint256,uint256,string,address)`. mstore(0x00, 0x42d21db7) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, 0x80) mstore(0x80, p3) writeString(0xa0, p2) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(uint256 p0, uint256 p1, bytes32 p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(uint256,uint256,string,bool)`. mstore(0x00, 0x7af6ab25) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, 0x80) mstore(0x80, p3) writeString(0xa0, p2) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(uint256 p0, uint256 p1, bytes32 p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(uint256,uint256,string,uint256)`. mstore(0x00, 0x5da297eb) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, 0x80) mstore(0x80, p3) writeString(0xa0, p2) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(uint256 p0, uint256 p1, bytes32 p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) // Selector of `log(uint256,uint256,string,string)`. mstore(0x00, 0x27d8afd2) mstore(0x20, p0) mstore(0x40, p1) mstore(0x60, 0x80) mstore(0x80, 0xc0) writeString(0xa0, p2) writeString(0xe0, p3) } _sendLogPayload(0x1c, 0x104); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) } } function log(uint256 p0, bytes32 p1, address p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(uint256,string,address,address)`. mstore(0x00, 0x6168ed61) mstore(0x20, p0) mstore(0x40, 0x80) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p1) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(uint256 p0, bytes32 p1, address p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(uint256,string,address,bool)`. mstore(0x00, 0x90c30a56) mstore(0x20, p0) mstore(0x40, 0x80) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p1) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(uint256 p0, bytes32 p1, address p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(uint256,string,address,uint256)`. mstore(0x00, 0xe8d3018d) mstore(0x20, p0) mstore(0x40, 0x80) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p1) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(uint256 p0, bytes32 p1, address p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) // Selector of `log(uint256,string,address,string)`. mstore(0x00, 0x9c3adfa1) mstore(0x20, p0) mstore(0x40, 0x80) mstore(0x60, p2) mstore(0x80, 0xc0) writeString(0xa0, p1) writeString(0xe0, p3) } _sendLogPayload(0x1c, 0x104); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) } } function log(uint256 p0, bytes32 p1, bool p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(uint256,string,bool,address)`. mstore(0x00, 0xae2ec581) mstore(0x20, p0) mstore(0x40, 0x80) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p1) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(uint256 p0, bytes32 p1, bool p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(uint256,string,bool,bool)`. mstore(0x00, 0xba535d9c) mstore(0x20, p0) mstore(0x40, 0x80) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p1) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(uint256 p0, bytes32 p1, bool p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(uint256,string,bool,uint256)`. mstore(0x00, 0xcf009880) mstore(0x20, p0) mstore(0x40, 0x80) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p1) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(uint256 p0, bytes32 p1, bool p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) // Selector of `log(uint256,string,bool,string)`. mstore(0x00, 0xd2d423cd) mstore(0x20, p0) mstore(0x40, 0x80) mstore(0x60, p2) mstore(0x80, 0xc0) writeString(0xa0, p1) writeString(0xe0, p3) } _sendLogPayload(0x1c, 0x104); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) } } function log(uint256 p0, bytes32 p1, uint256 p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(uint256,string,uint256,address)`. mstore(0x00, 0x3b2279b4) mstore(0x20, p0) mstore(0x40, 0x80) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p1) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(uint256 p0, bytes32 p1, uint256 p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(uint256,string,uint256,bool)`. mstore(0x00, 0x691a8f74) mstore(0x20, p0) mstore(0x40, 0x80) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p1) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(uint256 p0, bytes32 p1, uint256 p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(uint256,string,uint256,uint256)`. mstore(0x00, 0x82c25b74) mstore(0x20, p0) mstore(0x40, 0x80) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p1) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(uint256 p0, bytes32 p1, uint256 p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) // Selector of `log(uint256,string,uint256,string)`. mstore(0x00, 0xb7b914ca) mstore(0x20, p0) mstore(0x40, 0x80) mstore(0x60, p2) mstore(0x80, 0xc0) writeString(0xa0, p1) writeString(0xe0, p3) } _sendLogPayload(0x1c, 0x104); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) } } function log(uint256 p0, bytes32 p1, bytes32 p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) // Selector of `log(uint256,string,string,address)`. mstore(0x00, 0xd583c602) mstore(0x20, p0) mstore(0x40, 0x80) mstore(0x60, 0xc0) mstore(0x80, p3) writeString(0xa0, p1) writeString(0xe0, p2) } _sendLogPayload(0x1c, 0x104); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) } } function log(uint256 p0, bytes32 p1, bytes32 p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) // Selector of `log(uint256,string,string,bool)`. mstore(0x00, 0xb3a6b6bd) mstore(0x20, p0) mstore(0x40, 0x80) mstore(0x60, 0xc0) mstore(0x80, p3) writeString(0xa0, p1) writeString(0xe0, p2) } _sendLogPayload(0x1c, 0x104); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) } } function log(uint256 p0, bytes32 p1, bytes32 p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) // Selector of `log(uint256,string,string,uint256)`. mstore(0x00, 0xb028c9bd) mstore(0x20, p0) mstore(0x40, 0x80) mstore(0x60, 0xc0) mstore(0x80, p3) writeString(0xa0, p1) writeString(0xe0, p2) } _sendLogPayload(0x1c, 0x104); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) } } function log(uint256 p0, bytes32 p1, bytes32 p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; bytes32 m9; bytes32 m10; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) m9 := mload(0x120) m10 := mload(0x140) // Selector of `log(uint256,string,string,string)`. mstore(0x00, 0x21ad0683) mstore(0x20, p0) mstore(0x40, 0x80) mstore(0x60, 0xc0) mstore(0x80, 0x100) writeString(0xa0, p1) writeString(0xe0, p2) writeString(0x120, p3) } _sendLogPayload(0x1c, 0x144); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) mstore(0x120, m9) mstore(0x140, m10) } } function log(bytes32 p0, address p1, address p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(string,address,address,address)`. mstore(0x00, 0xed8f28f6) mstore(0x20, 0x80) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p0) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(bytes32 p0, address p1, address p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(string,address,address,bool)`. mstore(0x00, 0xb59dbd60) mstore(0x20, 0x80) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p0) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(bytes32 p0, address p1, address p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(string,address,address,uint256)`. mstore(0x00, 0x8ef3f399) mstore(0x20, 0x80) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p0) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(bytes32 p0, address p1, address p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) // Selector of `log(string,address,address,string)`. mstore(0x00, 0x800a1c67) mstore(0x20, 0x80) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, 0xc0) writeString(0xa0, p0) writeString(0xe0, p3) } _sendLogPayload(0x1c, 0x104); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) } } function log(bytes32 p0, address p1, bool p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(string,address,bool,address)`. mstore(0x00, 0x223603bd) mstore(0x20, 0x80) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p0) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(bytes32 p0, address p1, bool p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(string,address,bool,bool)`. mstore(0x00, 0x79884c2b) mstore(0x20, 0x80) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p0) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(bytes32 p0, address p1, bool p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(string,address,bool,uint256)`. mstore(0x00, 0x3e9f866a) mstore(0x20, 0x80) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p0) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(bytes32 p0, address p1, bool p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) // Selector of `log(string,address,bool,string)`. mstore(0x00, 0x0454c079) mstore(0x20, 0x80) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, 0xc0) writeString(0xa0, p0) writeString(0xe0, p3) } _sendLogPayload(0x1c, 0x104); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) } } function log(bytes32 p0, address p1, uint256 p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(string,address,uint256,address)`. mstore(0x00, 0x63fb8bc5) mstore(0x20, 0x80) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p0) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(bytes32 p0, address p1, uint256 p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(string,address,uint256,bool)`. mstore(0x00, 0xfc4845f0) mstore(0x20, 0x80) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p0) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(bytes32 p0, address p1, uint256 p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(string,address,uint256,uint256)`. mstore(0x00, 0xf8f51b1e) mstore(0x20, 0x80) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p0) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(bytes32 p0, address p1, uint256 p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) // Selector of `log(string,address,uint256,string)`. mstore(0x00, 0x5a477632) mstore(0x20, 0x80) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, 0xc0) writeString(0xa0, p0) writeString(0xe0, p3) } _sendLogPayload(0x1c, 0x104); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) } } function log(bytes32 p0, address p1, bytes32 p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) // Selector of `log(string,address,string,address)`. mstore(0x00, 0xaabc9a31) mstore(0x20, 0x80) mstore(0x40, p1) mstore(0x60, 0xc0) mstore(0x80, p3) writeString(0xa0, p0) writeString(0xe0, p2) } _sendLogPayload(0x1c, 0x104); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) } } function log(bytes32 p0, address p1, bytes32 p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) // Selector of `log(string,address,string,bool)`. mstore(0x00, 0x5f15d28c) mstore(0x20, 0x80) mstore(0x40, p1) mstore(0x60, 0xc0) mstore(0x80, p3) writeString(0xa0, p0) writeString(0xe0, p2) } _sendLogPayload(0x1c, 0x104); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) } } function log(bytes32 p0, address p1, bytes32 p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) // Selector of `log(string,address,string,uint256)`. mstore(0x00, 0x91d1112e) mstore(0x20, 0x80) mstore(0x40, p1) mstore(0x60, 0xc0) mstore(0x80, p3) writeString(0xa0, p0) writeString(0xe0, p2) } _sendLogPayload(0x1c, 0x104); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) } } function log(bytes32 p0, address p1, bytes32 p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; bytes32 m9; bytes32 m10; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) m9 := mload(0x120) m10 := mload(0x140) // Selector of `log(string,address,string,string)`. mstore(0x00, 0x245986f2) mstore(0x20, 0x80) mstore(0x40, p1) mstore(0x60, 0xc0) mstore(0x80, 0x100) writeString(0xa0, p0) writeString(0xe0, p2) writeString(0x120, p3) } _sendLogPayload(0x1c, 0x144); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) mstore(0x120, m9) mstore(0x140, m10) } } function log(bytes32 p0, bool p1, address p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(string,bool,address,address)`. mstore(0x00, 0x33e9dd1d) mstore(0x20, 0x80) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p0) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(bytes32 p0, bool p1, address p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(string,bool,address,bool)`. mstore(0x00, 0x958c28c6) mstore(0x20, 0x80) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p0) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(bytes32 p0, bool p1, address p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(string,bool,address,uint256)`. mstore(0x00, 0x5d08bb05) mstore(0x20, 0x80) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p0) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(bytes32 p0, bool p1, address p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) // Selector of `log(string,bool,address,string)`. mstore(0x00, 0x2d8e33a4) mstore(0x20, 0x80) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, 0xc0) writeString(0xa0, p0) writeString(0xe0, p3) } _sendLogPayload(0x1c, 0x104); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) } } function log(bytes32 p0, bool p1, bool p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(string,bool,bool,address)`. mstore(0x00, 0x7190a529) mstore(0x20, 0x80) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p0) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(bytes32 p0, bool p1, bool p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(string,bool,bool,bool)`. mstore(0x00, 0x895af8c5) mstore(0x20, 0x80) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p0) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(bytes32 p0, bool p1, bool p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(string,bool,bool,uint256)`. mstore(0x00, 0x8e3f78a9) mstore(0x20, 0x80) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p0) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(bytes32 p0, bool p1, bool p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) // Selector of `log(string,bool,bool,string)`. mstore(0x00, 0x9d22d5dd) mstore(0x20, 0x80) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, 0xc0) writeString(0xa0, p0) writeString(0xe0, p3) } _sendLogPayload(0x1c, 0x104); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) } } function log(bytes32 p0, bool p1, uint256 p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(string,bool,uint256,address)`. mstore(0x00, 0x935e09bf) mstore(0x20, 0x80) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p0) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(bytes32 p0, bool p1, uint256 p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(string,bool,uint256,bool)`. mstore(0x00, 0x8af7cf8a) mstore(0x20, 0x80) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p0) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(bytes32 p0, bool p1, uint256 p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(string,bool,uint256,uint256)`. mstore(0x00, 0x64b5bb67) mstore(0x20, 0x80) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p0) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(bytes32 p0, bool p1, uint256 p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) // Selector of `log(string,bool,uint256,string)`. mstore(0x00, 0x742d6ee7) mstore(0x20, 0x80) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, 0xc0) writeString(0xa0, p0) writeString(0xe0, p3) } _sendLogPayload(0x1c, 0x104); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) } } function log(bytes32 p0, bool p1, bytes32 p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) // Selector of `log(string,bool,string,address)`. mstore(0x00, 0xe0625b29) mstore(0x20, 0x80) mstore(0x40, p1) mstore(0x60, 0xc0) mstore(0x80, p3) writeString(0xa0, p0) writeString(0xe0, p2) } _sendLogPayload(0x1c, 0x104); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) } } function log(bytes32 p0, bool p1, bytes32 p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) // Selector of `log(string,bool,string,bool)`. mstore(0x00, 0x3f8a701d) mstore(0x20, 0x80) mstore(0x40, p1) mstore(0x60, 0xc0) mstore(0x80, p3) writeString(0xa0, p0) writeString(0xe0, p2) } _sendLogPayload(0x1c, 0x104); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) } } function log(bytes32 p0, bool p1, bytes32 p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) // Selector of `log(string,bool,string,uint256)`. mstore(0x00, 0x24f91465) mstore(0x20, 0x80) mstore(0x40, p1) mstore(0x60, 0xc0) mstore(0x80, p3) writeString(0xa0, p0) writeString(0xe0, p2) } _sendLogPayload(0x1c, 0x104); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) } } function log(bytes32 p0, bool p1, bytes32 p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; bytes32 m9; bytes32 m10; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) m9 := mload(0x120) m10 := mload(0x140) // Selector of `log(string,bool,string,string)`. mstore(0x00, 0xa826caeb) mstore(0x20, 0x80) mstore(0x40, p1) mstore(0x60, 0xc0) mstore(0x80, 0x100) writeString(0xa0, p0) writeString(0xe0, p2) writeString(0x120, p3) } _sendLogPayload(0x1c, 0x144); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) mstore(0x120, m9) mstore(0x140, m10) } } function log(bytes32 p0, uint256 p1, address p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(string,uint256,address,address)`. mstore(0x00, 0x5ea2b7ae) mstore(0x20, 0x80) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p0) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(bytes32 p0, uint256 p1, address p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(string,uint256,address,bool)`. mstore(0x00, 0x82112a42) mstore(0x20, 0x80) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p0) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(bytes32 p0, uint256 p1, address p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(string,uint256,address,uint256)`. mstore(0x00, 0x4f04fdc6) mstore(0x20, 0x80) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p0) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(bytes32 p0, uint256 p1, address p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) // Selector of `log(string,uint256,address,string)`. mstore(0x00, 0x9ffb2f93) mstore(0x20, 0x80) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, 0xc0) writeString(0xa0, p0) writeString(0xe0, p3) } _sendLogPayload(0x1c, 0x104); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) } } function log(bytes32 p0, uint256 p1, bool p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(string,uint256,bool,address)`. mstore(0x00, 0xe0e95b98) mstore(0x20, 0x80) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p0) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(bytes32 p0, uint256 p1, bool p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(string,uint256,bool,bool)`. mstore(0x00, 0x354c36d6) mstore(0x20, 0x80) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p0) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(bytes32 p0, uint256 p1, bool p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(string,uint256,bool,uint256)`. mstore(0x00, 0xe41b6f6f) mstore(0x20, 0x80) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p0) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(bytes32 p0, uint256 p1, bool p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) // Selector of `log(string,uint256,bool,string)`. mstore(0x00, 0xabf73a98) mstore(0x20, 0x80) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, 0xc0) writeString(0xa0, p0) writeString(0xe0, p3) } _sendLogPayload(0x1c, 0x104); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) } } function log(bytes32 p0, uint256 p1, uint256 p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(string,uint256,uint256,address)`. mstore(0x00, 0xe21de278) mstore(0x20, 0x80) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p0) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(bytes32 p0, uint256 p1, uint256 p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(string,uint256,uint256,bool)`. mstore(0x00, 0x7626db92) mstore(0x20, 0x80) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p0) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(bytes32 p0, uint256 p1, uint256 p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) // Selector of `log(string,uint256,uint256,uint256)`. mstore(0x00, 0xa7a87853) mstore(0x20, 0x80) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p0) } _sendLogPayload(0x1c, 0xc4); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) } } function log(bytes32 p0, uint256 p1, uint256 p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) // Selector of `log(string,uint256,uint256,string)`. mstore(0x00, 0x854b3496) mstore(0x20, 0x80) mstore(0x40, p1) mstore(0x60, p2) mstore(0x80, 0xc0) writeString(0xa0, p0) writeString(0xe0, p3) } _sendLogPayload(0x1c, 0x104); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) } } function log(bytes32 p0, uint256 p1, bytes32 p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) // Selector of `log(string,uint256,string,address)`. mstore(0x00, 0x7c4632a4) mstore(0x20, 0x80) mstore(0x40, p1) mstore(0x60, 0xc0) mstore(0x80, p3) writeString(0xa0, p0) writeString(0xe0, p2) } _sendLogPayload(0x1c, 0x104); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) } } function log(bytes32 p0, uint256 p1, bytes32 p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) // Selector of `log(string,uint256,string,bool)`. mstore(0x00, 0x7d24491d) mstore(0x20, 0x80) mstore(0x40, p1) mstore(0x60, 0xc0) mstore(0x80, p3) writeString(0xa0, p0) writeString(0xe0, p2) } _sendLogPayload(0x1c, 0x104); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) } } function log(bytes32 p0, uint256 p1, bytes32 p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) // Selector of `log(string,uint256,string,uint256)`. mstore(0x00, 0xc67ea9d1) mstore(0x20, 0x80) mstore(0x40, p1) mstore(0x60, 0xc0) mstore(0x80, p3) writeString(0xa0, p0) writeString(0xe0, p2) } _sendLogPayload(0x1c, 0x104); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) } } function log(bytes32 p0, uint256 p1, bytes32 p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; bytes32 m9; bytes32 m10; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) m9 := mload(0x120) m10 := mload(0x140) // Selector of `log(string,uint256,string,string)`. mstore(0x00, 0x5ab84e1f) mstore(0x20, 0x80) mstore(0x40, p1) mstore(0x60, 0xc0) mstore(0x80, 0x100) writeString(0xa0, p0) writeString(0xe0, p2) writeString(0x120, p3) } _sendLogPayload(0x1c, 0x144); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) mstore(0x120, m9) mstore(0x140, m10) } } function log(bytes32 p0, bytes32 p1, address p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) // Selector of `log(string,string,address,address)`. mstore(0x00, 0x439c7bef) mstore(0x20, 0x80) mstore(0x40, 0xc0) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p0) writeString(0xe0, p1) } _sendLogPayload(0x1c, 0x104); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) } } function log(bytes32 p0, bytes32 p1, address p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) // Selector of `log(string,string,address,bool)`. mstore(0x00, 0x5ccd4e37) mstore(0x20, 0x80) mstore(0x40, 0xc0) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p0) writeString(0xe0, p1) } _sendLogPayload(0x1c, 0x104); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) } } function log(bytes32 p0, bytes32 p1, address p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) // Selector of `log(string,string,address,uint256)`. mstore(0x00, 0x7cc3c607) mstore(0x20, 0x80) mstore(0x40, 0xc0) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p0) writeString(0xe0, p1) } _sendLogPayload(0x1c, 0x104); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) } } function log(bytes32 p0, bytes32 p1, address p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; bytes32 m9; bytes32 m10; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) m9 := mload(0x120) m10 := mload(0x140) // Selector of `log(string,string,address,string)`. mstore(0x00, 0xeb1bff80) mstore(0x20, 0x80) mstore(0x40, 0xc0) mstore(0x60, p2) mstore(0x80, 0x100) writeString(0xa0, p0) writeString(0xe0, p1) writeString(0x120, p3) } _sendLogPayload(0x1c, 0x144); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) mstore(0x120, m9) mstore(0x140, m10) } } function log(bytes32 p0, bytes32 p1, bool p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) // Selector of `log(string,string,bool,address)`. mstore(0x00, 0xc371c7db) mstore(0x20, 0x80) mstore(0x40, 0xc0) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p0) writeString(0xe0, p1) } _sendLogPayload(0x1c, 0x104); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) } } function log(bytes32 p0, bytes32 p1, bool p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) // Selector of `log(string,string,bool,bool)`. mstore(0x00, 0x40785869) mstore(0x20, 0x80) mstore(0x40, 0xc0) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p0) writeString(0xe0, p1) } _sendLogPayload(0x1c, 0x104); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) } } function log(bytes32 p0, bytes32 p1, bool p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) // Selector of `log(string,string,bool,uint256)`. mstore(0x00, 0xd6aefad2) mstore(0x20, 0x80) mstore(0x40, 0xc0) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p0) writeString(0xe0, p1) } _sendLogPayload(0x1c, 0x104); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) } } function log(bytes32 p0, bytes32 p1, bool p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; bytes32 m9; bytes32 m10; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) m9 := mload(0x120) m10 := mload(0x140) // Selector of `log(string,string,bool,string)`. mstore(0x00, 0x5e84b0ea) mstore(0x20, 0x80) mstore(0x40, 0xc0) mstore(0x60, p2) mstore(0x80, 0x100) writeString(0xa0, p0) writeString(0xe0, p1) writeString(0x120, p3) } _sendLogPayload(0x1c, 0x144); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) mstore(0x120, m9) mstore(0x140, m10) } } function log(bytes32 p0, bytes32 p1, uint256 p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) // Selector of `log(string,string,uint256,address)`. mstore(0x00, 0x1023f7b2) mstore(0x20, 0x80) mstore(0x40, 0xc0) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p0) writeString(0xe0, p1) } _sendLogPayload(0x1c, 0x104); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) } } function log(bytes32 p0, bytes32 p1, uint256 p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) // Selector of `log(string,string,uint256,bool)`. mstore(0x00, 0xc3a8a654) mstore(0x20, 0x80) mstore(0x40, 0xc0) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p0) writeString(0xe0, p1) } _sendLogPayload(0x1c, 0x104); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) } } function log(bytes32 p0, bytes32 p1, uint256 p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) // Selector of `log(string,string,uint256,uint256)`. mstore(0x00, 0xf45d7d2c) mstore(0x20, 0x80) mstore(0x40, 0xc0) mstore(0x60, p2) mstore(0x80, p3) writeString(0xa0, p0) writeString(0xe0, p1) } _sendLogPayload(0x1c, 0x104); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) } } function log(bytes32 p0, bytes32 p1, uint256 p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; bytes32 m9; bytes32 m10; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) m9 := mload(0x120) m10 := mload(0x140) // Selector of `log(string,string,uint256,string)`. mstore(0x00, 0x5d1a971a) mstore(0x20, 0x80) mstore(0x40, 0xc0) mstore(0x60, p2) mstore(0x80, 0x100) writeString(0xa0, p0) writeString(0xe0, p1) writeString(0x120, p3) } _sendLogPayload(0x1c, 0x144); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) mstore(0x120, m9) mstore(0x140, m10) } } function log(bytes32 p0, bytes32 p1, bytes32 p2, address p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; bytes32 m9; bytes32 m10; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) m9 := mload(0x120) m10 := mload(0x140) // Selector of `log(string,string,string,address)`. mstore(0x00, 0x6d572f44) mstore(0x20, 0x80) mstore(0x40, 0xc0) mstore(0x60, 0x100) mstore(0x80, p3) writeString(0xa0, p0) writeString(0xe0, p1) writeString(0x120, p2) } _sendLogPayload(0x1c, 0x144); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) mstore(0x120, m9) mstore(0x140, m10) } } function log(bytes32 p0, bytes32 p1, bytes32 p2, bool p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; bytes32 m9; bytes32 m10; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) m9 := mload(0x120) m10 := mload(0x140) // Selector of `log(string,string,string,bool)`. mstore(0x00, 0x2c1754ed) mstore(0x20, 0x80) mstore(0x40, 0xc0) mstore(0x60, 0x100) mstore(0x80, p3) writeString(0xa0, p0) writeString(0xe0, p1) writeString(0x120, p2) } _sendLogPayload(0x1c, 0x144); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) mstore(0x120, m9) mstore(0x140, m10) } } function log(bytes32 p0, bytes32 p1, bytes32 p2, uint256 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; bytes32 m9; bytes32 m10; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) m9 := mload(0x120) m10 := mload(0x140) // Selector of `log(string,string,string,uint256)`. mstore(0x00, 0x8eafb02b) mstore(0x20, 0x80) mstore(0x40, 0xc0) mstore(0x60, 0x100) mstore(0x80, p3) writeString(0xa0, p0) writeString(0xe0, p1) writeString(0x120, p2) } _sendLogPayload(0x1c, 0x144); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) mstore(0x120, m9) mstore(0x140, m10) } } function log(bytes32 p0, bytes32 p1, bytes32 p2, bytes32 p3) internal pure { bytes32 m0; bytes32 m1; bytes32 m2; bytes32 m3; bytes32 m4; bytes32 m5; bytes32 m6; bytes32 m7; bytes32 m8; bytes32 m9; bytes32 m10; bytes32 m11; bytes32 m12; assembly { function writeString(pos, w) { let length := 0 for {} lt(length, 0x20) { length := add(length, 1) } { if iszero(byte(length, w)) { break } } mstore(pos, length) let shift := sub(256, shl(3, length)) mstore(add(pos, 0x20), shl(shift, shr(shift, w))) } m0 := mload(0x00) m1 := mload(0x20) m2 := mload(0x40) m3 := mload(0x60) m4 := mload(0x80) m5 := mload(0xa0) m6 := mload(0xc0) m7 := mload(0xe0) m8 := mload(0x100) m9 := mload(0x120) m10 := mload(0x140) m11 := mload(0x160) m12 := mload(0x180) // Selector of `log(string,string,string,string)`. mstore(0x00, 0xde68f20a) mstore(0x20, 0x80) mstore(0x40, 0xc0) mstore(0x60, 0x100) mstore(0x80, 0x140) writeString(0xa0, p0) writeString(0xe0, p1) writeString(0x120, p2) writeString(0x160, p3) } _sendLogPayload(0x1c, 0x184); assembly { mstore(0x00, m0) mstore(0x20, m1) mstore(0x40, m2) mstore(0x60, m3) mstore(0x80, m4) mstore(0xa0, m5) mstore(0xc0, m6) mstore(0xe0, m7) mstore(0x100, m8) mstore(0x120, m9) mstore(0x140, m10) mstore(0x160, m11) mstore(0x180, m12) } } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.2 <0.9.0; import {DSTest} from "ds-test/test.sol"; import {stdMath} from "./StdMath.sol"; abstract contract StdAssertions is DSTest { event log_array(uint256[] val); event log_array(int256[] val); event log_array(address[] val); event log_named_array(string key, uint256[] val); event log_named_array(string key, int256[] val); event log_named_array(string key, address[] val); function fail(string memory err) internal virtual { emit log_named_string("Error", err); fail(); } function assertFalse(bool data) internal virtual { assertTrue(!data); } function assertFalse(bool data, string memory err) internal virtual { assertTrue(!data, err); } function assertEq(bool a, bool b) internal virtual { if (a != b) { emit log("Error: a == b not satisfied [bool]"); emit log_named_string(" Left", a ? "true" : "false"); emit log_named_string(" Right", b ? "true" : "false"); fail(); } } function assertEq(bool a, bool b, string memory err) internal virtual { if (a != b) { emit log_named_string("Error", err); assertEq(a, b); } } function assertEq(bytes memory a, bytes memory b) internal virtual { assertEq0(a, b); } function assertEq(bytes memory a, bytes memory b, string memory err) internal virtual { assertEq0(a, b, err); } function assertEq(uint256[] memory a, uint256[] memory b) internal virtual { if (keccak256(abi.encode(a)) != keccak256(abi.encode(b))) { emit log("Error: a == b not satisfied [uint[]]"); emit log_named_array(" Left", a); emit log_named_array(" Right", b); fail(); } } function assertEq(int256[] memory a, int256[] memory b) internal virtual { if (keccak256(abi.encode(a)) != keccak256(abi.encode(b))) { emit log("Error: a == b not satisfied [int[]]"); emit log_named_array(" Left", a); emit log_named_array(" Right", b); fail(); } } function assertEq(address[] memory a, address[] memory b) internal virtual { if (keccak256(abi.encode(a)) != keccak256(abi.encode(b))) { emit log("Error: a == b not satisfied [address[]]"); emit log_named_array(" Left", a); emit log_named_array(" Right", b); fail(); } } function assertEq(uint256[] memory a, uint256[] memory b, string memory err) internal virtual { if (keccak256(abi.encode(a)) != keccak256(abi.encode(b))) { emit log_named_string("Error", err); assertEq(a, b); } } function assertEq(int256[] memory a, int256[] memory b, string memory err) internal virtual { if (keccak256(abi.encode(a)) != keccak256(abi.encode(b))) { emit log_named_string("Error", err); assertEq(a, b); } } function assertEq(address[] memory a, address[] memory b, string memory err) internal virtual { if (keccak256(abi.encode(a)) != keccak256(abi.encode(b))) { emit log_named_string("Error", err); assertEq(a, b); } } // Legacy helper function assertEqUint(uint256 a, uint256 b) internal virtual { assertEq(uint256(a), uint256(b)); } function assertApproxEqAbs(uint256 a, uint256 b, uint256 maxDelta) internal virtual { uint256 delta = stdMath.delta(a, b); if (delta > maxDelta) { emit log("Error: a ~= b not satisfied [uint]"); emit log_named_uint(" Left", a); emit log_named_uint(" Right", b); emit log_named_uint(" Max Delta", maxDelta); emit log_named_uint(" Delta", delta); fail(); } } function assertApproxEqAbs(uint256 a, uint256 b, uint256 maxDelta, string memory err) internal virtual { uint256 delta = stdMath.delta(a, b); if (delta > maxDelta) { emit log_named_string("Error", err); assertApproxEqAbs(a, b, maxDelta); } } function assertApproxEqAbsDecimal(uint256 a, uint256 b, uint256 maxDelta, uint256 decimals) internal virtual { uint256 delta = stdMath.delta(a, b); if (delta > maxDelta) { emit log("Error: a ~= b not satisfied [uint]"); emit log_named_decimal_uint(" Left", a, decimals); emit log_named_decimal_uint(" Right", b, decimals); emit log_named_decimal_uint(" Max Delta", maxDelta, decimals); emit log_named_decimal_uint(" Delta", delta, decimals); fail(); } } function assertApproxEqAbsDecimal(uint256 a, uint256 b, uint256 maxDelta, uint256 decimals, string memory err) internal virtual { uint256 delta = stdMath.delta(a, b); if (delta > maxDelta) { emit log_named_string("Error", err); assertApproxEqAbsDecimal(a, b, maxDelta, decimals); } } function assertApproxEqAbs(int256 a, int256 b, uint256 maxDelta) internal virtual { uint256 delta = stdMath.delta(a, b); if (delta > maxDelta) { emit log("Error: a ~= b not satisfied [int]"); emit log_named_int(" Left", a); emit log_named_int(" Right", b); emit log_named_uint(" Max Delta", maxDelta); emit log_named_uint(" Delta", delta); fail(); } } function assertApproxEqAbs(int256 a, int256 b, uint256 maxDelta, string memory err) internal virtual { uint256 delta = stdMath.delta(a, b); if (delta > maxDelta) { emit log_named_string("Error", err); assertApproxEqAbs(a, b, maxDelta); } } function assertApproxEqAbsDecimal(int256 a, int256 b, uint256 maxDelta, uint256 decimals) internal virtual { uint256 delta = stdMath.delta(a, b); if (delta > maxDelta) { emit log("Error: a ~= b not satisfied [int]"); emit log_named_decimal_int(" Left", a, decimals); emit log_named_decimal_int(" Right", b, decimals); emit log_named_decimal_uint(" Max Delta", maxDelta, decimals); emit log_named_decimal_uint(" Delta", delta, decimals); fail(); } } function assertApproxEqAbsDecimal(int256 a, int256 b, uint256 maxDelta, uint256 decimals, string memory err) internal virtual { uint256 delta = stdMath.delta(a, b); if (delta > maxDelta) { emit log_named_string("Error", err); assertApproxEqAbsDecimal(a, b, maxDelta, decimals); } } function assertApproxEqRel( uint256 a, uint256 b, uint256 maxPercentDelta // An 18 decimal fixed point number, where 1e18 == 100% ) internal virtual { if (b == 0) return assertEq(a, b); // If the left is 0, right must be too. uint256 percentDelta = stdMath.percentDelta(a, b); if (percentDelta > maxPercentDelta) { emit log("Error: a ~= b not satisfied [uint]"); emit log_named_uint(" Left", a); emit log_named_uint(" Right", b); emit log_named_decimal_uint(" Max % Delta", maxPercentDelta * 100, 18); emit log_named_decimal_uint(" % Delta", percentDelta * 100, 18); fail(); } } function assertApproxEqRel( uint256 a, uint256 b, uint256 maxPercentDelta, // An 18 decimal fixed point number, where 1e18 == 100% string memory err ) internal virtual { if (b == 0) return assertEq(a, b, err); // If the left is 0, right must be too. uint256 percentDelta = stdMath.percentDelta(a, b); if (percentDelta > maxPercentDelta) { emit log_named_string("Error", err); assertApproxEqRel(a, b, maxPercentDelta); } } function assertApproxEqRelDecimal( uint256 a, uint256 b, uint256 maxPercentDelta, // An 18 decimal fixed point number, where 1e18 == 100% uint256 decimals ) internal virtual { if (b == 0) return assertEq(a, b); // If the left is 0, right must be too. uint256 percentDelta = stdMath.percentDelta(a, b); if (percentDelta > maxPercentDelta) { emit log("Error: a ~= b not satisfied [uint]"); emit log_named_decimal_uint(" Left", a, decimals); emit log_named_decimal_uint(" Right", b, decimals); emit log_named_decimal_uint(" Max % Delta", maxPercentDelta * 100, 18); emit log_named_decimal_uint(" % Delta", percentDelta * 100, 18); fail(); } } function assertApproxEqRelDecimal( uint256 a, uint256 b, uint256 maxPercentDelta, // An 18 decimal fixed point number, where 1e18 == 100% uint256 decimals, string memory err ) internal virtual { if (b == 0) return assertEq(a, b, err); // If the left is 0, right must be too. uint256 percentDelta = stdMath.percentDelta(a, b); if (percentDelta > maxPercentDelta) { emit log_named_string("Error", err); assertApproxEqRelDecimal(a, b, maxPercentDelta, decimals); } } function assertApproxEqRel(int256 a, int256 b, uint256 maxPercentDelta) internal virtual { if (b == 0) return assertEq(a, b); // If the left is 0, right must be too. uint256 percentDelta = stdMath.percentDelta(a, b); if (percentDelta > maxPercentDelta) { emit log("Error: a ~= b not satisfied [int]"); emit log_named_int(" Left", a); emit log_named_int(" Right", b); emit log_named_decimal_uint(" Max % Delta", maxPercentDelta * 100, 18); emit log_named_decimal_uint(" % Delta", percentDelta * 100, 18); fail(); } } function assertApproxEqRel(int256 a, int256 b, uint256 maxPercentDelta, string memory err) internal virtual { if (b == 0) return assertEq(a, b, err); // If the left is 0, right must be too. uint256 percentDelta = stdMath.percentDelta(a, b); if (percentDelta > maxPercentDelta) { emit log_named_string("Error", err); assertApproxEqRel(a, b, maxPercentDelta); } } function assertApproxEqRelDecimal(int256 a, int256 b, uint256 maxPercentDelta, uint256 decimals) internal virtual { if (b == 0) return assertEq(a, b); // If the left is 0, right must be too. uint256 percentDelta = stdMath.percentDelta(a, b); if (percentDelta > maxPercentDelta) { emit log("Error: a ~= b not satisfied [int]"); emit log_named_decimal_int(" Left", a, decimals); emit log_named_decimal_int(" Right", b, decimals); emit log_named_decimal_uint(" Max % Delta", maxPercentDelta * 100, 18); emit log_named_decimal_uint(" % Delta", percentDelta * 100, 18); fail(); } } function assertApproxEqRelDecimal(int256 a, int256 b, uint256 maxPercentDelta, uint256 decimals, string memory err) internal virtual { if (b == 0) return assertEq(a, b, err); // If the left is 0, right must be too. uint256 percentDelta = stdMath.percentDelta(a, b); if (percentDelta > maxPercentDelta) { emit log_named_string("Error", err); assertApproxEqRelDecimal(a, b, maxPercentDelta, decimals); } } function assertEqCall(address target, bytes memory callDataA, bytes memory callDataB) internal virtual { assertEqCall(target, callDataA, target, callDataB, true); } function assertEqCall(address targetA, bytes memory callDataA, address targetB, bytes memory callDataB) internal virtual { assertEqCall(targetA, callDataA, targetB, callDataB, true); } function assertEqCall(address target, bytes memory callDataA, bytes memory callDataB, bool strictRevertData) internal virtual { assertEqCall(target, callDataA, target, callDataB, strictRevertData); } function assertEqCall( address targetA, bytes memory callDataA, address targetB, bytes memory callDataB, bool strictRevertData ) internal virtual { (bool successA, bytes memory returnDataA) = address(targetA).call(callDataA); (bool successB, bytes memory returnDataB) = address(targetB).call(callDataB); if (successA && successB) { assertEq(returnDataA, returnDataB, "Call return data does not match"); } if (!successA && !successB && strictRevertData) { assertEq(returnDataA, returnDataB, "Call revert data does not match"); } if (!successA && successB) { emit log("Error: Calls were not equal"); emit log_named_bytes(" Left call revert data", returnDataA); emit log_named_bytes(" Right call return data", returnDataB); fail(); } if (successA && !successB) { emit log("Error: Calls were not equal"); emit log_named_bytes(" Left call return data", returnDataA); emit log_named_bytes(" Right call revert data", returnDataB); fail(); } } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.2 <0.9.0; import {VmSafe} from "./Vm.sol"; /** * StdChains provides information about EVM compatible chains that can be used in scripts/tests. * For each chain, the chain's name, chain ID, and a default RPC URL are provided. Chains are * identified by their alias, which is the same as the alias in the `[rpc_endpoints]` section of * the `foundry.toml` file. For best UX, ensure the alias in the `foundry.toml` file match the * alias used in this contract, which can be found as the first argument to the * `setChainWithDefaultRpcUrl` call in the `initializeStdChains` function. * * There are two main ways to use this contract: * 1. Set a chain with `setChain(string memory chainAlias, ChainData memory chain)` or * `setChain(string memory chainAlias, Chain memory chain)` * 2. Get a chain with `getChain(string memory chainAlias)` or `getChain(uint256 chainId)`. * * The first time either of those are used, chains are initialized with the default set of RPC URLs. * This is done in `initializeStdChains`, which uses `setChainWithDefaultRpcUrl`. Defaults are recorded in * `defaultRpcUrls`. * * The `setChain` function is straightforward, and it simply saves off the given chain data. * * The `getChain` methods use `getChainWithUpdatedRpcUrl` to return a chain. For example, let's say * we want to retrieve the RPC URL for `mainnet`: * - If you have specified data with `setChain`, it will return that. * - If you have configured a mainnet RPC URL in `foundry.toml`, it will return the URL, provided it * is valid (e.g. a URL is specified, or an environment variable is given and exists). * - If neither of the above conditions is met, the default data is returned. * * Summarizing the above, the prioritization hierarchy is `setChain` -> `foundry.toml` -> environment variable -> defaults. */ abstract contract StdChains { VmSafe private constant vm = VmSafe(address(uint160(uint256(keccak256("hevm cheat code"))))); bool private stdChainsInitialized; struct ChainData { string name; uint256 chainId; string rpcUrl; } struct Chain { // The chain name. string name; // The chain's Chain ID. uint256 chainId; // The chain's alias. (i.e. what gets specified in `foundry.toml`). string chainAlias; // A default RPC endpoint for this chain. // NOTE: This default RPC URL is included for convenience to facilitate quick tests and // experimentation. Do not use this RPC URL for production test suites, CI, or other heavy // usage as you will be throttled and this is a disservice to others who need this endpoint. string rpcUrl; } // Maps from the chain's alias (matching the alias in the `foundry.toml` file) to chain data. mapping(string => Chain) private chains; // Maps from the chain's alias to it's default RPC URL. mapping(string => string) private defaultRpcUrls; // Maps from a chain ID to it's alias. mapping(uint256 => string) private idToAlias; bool private fallbackToDefaultRpcUrls = true; // The RPC URL will be fetched from config or defaultRpcUrls if possible. function getChain(string memory chainAlias) internal virtual returns (Chain memory chain) { require(bytes(chainAlias).length != 0, "StdChains getChain(string): Chain alias cannot be the empty string."); initializeStdChains(); chain = chains[chainAlias]; require( chain.chainId != 0, string(abi.encodePacked("StdChains getChain(string): Chain with alias \"", chainAlias, "\" not found.")) ); chain = getChainWithUpdatedRpcUrl(chainAlias, chain); } function getChain(uint256 chainId) internal virtual returns (Chain memory chain) { require(chainId != 0, "StdChains getChain(uint256): Chain ID cannot be 0."); initializeStdChains(); string memory chainAlias = idToAlias[chainId]; chain = chains[chainAlias]; require( chain.chainId != 0, string(abi.encodePacked("StdChains getChain(uint256): Chain with ID ", vm.toString(chainId), " not found.")) ); chain = getChainWithUpdatedRpcUrl(chainAlias, chain); } // set chain info, with priority to argument's rpcUrl field. function setChain(string memory chainAlias, ChainData memory chain) internal virtual { require( bytes(chainAlias).length != 0, "StdChains setChain(string,ChainData): Chain alias cannot be the empty string." ); require(chain.chainId != 0, "StdChains setChain(string,ChainData): Chain ID cannot be 0."); initializeStdChains(); string memory foundAlias = idToAlias[chain.chainId]; require( bytes(foundAlias).length == 0 || keccak256(bytes(foundAlias)) == keccak256(bytes(chainAlias)), string( abi.encodePacked( "StdChains setChain(string,ChainData): Chain ID ", vm.toString(chain.chainId), " already used by \"", foundAlias, "\"." ) ) ); uint256 oldChainId = chains[chainAlias].chainId; delete idToAlias[oldChainId]; chains[chainAlias] = Chain({name: chain.name, chainId: chain.chainId, chainAlias: chainAlias, rpcUrl: chain.rpcUrl}); idToAlias[chain.chainId] = chainAlias; } // set chain info, with priority to argument's rpcUrl field. function setChain(string memory chainAlias, Chain memory chain) internal virtual { setChain(chainAlias, ChainData({name: chain.name, chainId: chain.chainId, rpcUrl: chain.rpcUrl})); } function _toUpper(string memory str) private pure returns (string memory) { bytes memory strb = bytes(str); bytes memory copy = new bytes(strb.length); for (uint256 i = 0; i < strb.length; i++) { bytes1 b = strb[i]; if (b >= 0x61 && b <= 0x7A) { copy[i] = bytes1(uint8(b) - 32); } else { copy[i] = b; } } return string(copy); } // lookup rpcUrl, in descending order of priority: // current -> config (foundry.toml) -> environment variable -> default function getChainWithUpdatedRpcUrl(string memory chainAlias, Chain memory chain) private returns (Chain memory) { if (bytes(chain.rpcUrl).length == 0) { try vm.rpcUrl(chainAlias) returns (string memory configRpcUrl) { chain.rpcUrl = configRpcUrl; } catch (bytes memory err) { string memory envName = string(abi.encodePacked(_toUpper(chainAlias), "_RPC_URL")); if (fallbackToDefaultRpcUrls) { chain.rpcUrl = vm.envOr(envName, defaultRpcUrls[chainAlias]); } else { chain.rpcUrl = vm.envString(envName); } // distinguish 'not found' from 'cannot read' bytes memory notFoundError = abi.encodeWithSignature("CheatCodeError", string(abi.encodePacked("invalid rpc url ", chainAlias))); if (keccak256(notFoundError) != keccak256(err) || bytes(chain.rpcUrl).length == 0) { /// @solidity memory-safe-assembly assembly { revert(add(32, err), mload(err)) } } } } return chain; } function setFallbackToDefaultRpcUrls(bool useDefault) internal { fallbackToDefaultRpcUrls = useDefault; } function initializeStdChains() private { if (stdChainsInitialized) return; stdChainsInitialized = true; // If adding an RPC here, make sure to test the default RPC URL in `testRpcs` setChainWithDefaultRpcUrl("anvil", ChainData("Anvil", 31337, "http://127.0.0.1:8545")); setChainWithDefaultRpcUrl( "mainnet", ChainData("Mainnet", 1, "https://mainnet.infura.io/v3/b9794ad1ddf84dfb8c34d6bb5dca2001") ); setChainWithDefaultRpcUrl( "goerli", ChainData("Goerli", 5, "https://goerli.infura.io/v3/b9794ad1ddf84dfb8c34d6bb5dca2001") ); setChainWithDefaultRpcUrl( "sepolia", ChainData("Sepolia", 11155111, "https://sepolia.infura.io/v3/b9794ad1ddf84dfb8c34d6bb5dca2001") ); setChainWithDefaultRpcUrl("optimism", ChainData("Optimism", 10, "https://mainnet.optimism.io")); setChainWithDefaultRpcUrl("optimism_goerli", ChainData("Optimism Goerli", 420, "https://goerli.optimism.io")); setChainWithDefaultRpcUrl("arbitrum_one", ChainData("Arbitrum One", 42161, "https://arb1.arbitrum.io/rpc")); setChainWithDefaultRpcUrl( "arbitrum_one_goerli", ChainData("Arbitrum One Goerli", 421613, "https://goerli-rollup.arbitrum.io/rpc") ); setChainWithDefaultRpcUrl("arbitrum_nova", ChainData("Arbitrum Nova", 42170, "https://nova.arbitrum.io/rpc")); setChainWithDefaultRpcUrl("polygon", ChainData("Polygon", 137, "https://polygon-rpc.com")); setChainWithDefaultRpcUrl( "polygon_mumbai", ChainData("Polygon Mumbai", 80001, "https://rpc-mumbai.maticvigil.com") ); setChainWithDefaultRpcUrl("avalanche", ChainData("Avalanche", 43114, "https://api.avax.network/ext/bc/C/rpc")); setChainWithDefaultRpcUrl( "avalanche_fuji", ChainData("Avalanche Fuji", 43113, "https://api.avax-test.network/ext/bc/C/rpc") ); setChainWithDefaultRpcUrl( "bnb_smart_chain", ChainData("BNB Smart Chain", 56, "https://bsc-dataseed1.binance.org") ); setChainWithDefaultRpcUrl( "bnb_smart_chain_testnet", ChainData("BNB Smart Chain Testnet", 97, "https://rpc.ankr.com/bsc_testnet_chapel") ); setChainWithDefaultRpcUrl("gnosis_chain", ChainData("Gnosis Chain", 100, "https://rpc.gnosischain.com")); setChainWithDefaultRpcUrl("moonbeam", ChainData("Moonbeam", 1284, "https://rpc.api.moonbeam.network")); setChainWithDefaultRpcUrl( "moonriver", ChainData("Moonriver", 1285, "https://rpc.api.moonriver.moonbeam.network") ); setChainWithDefaultRpcUrl("moonbase", ChainData("Moonbase", 1287, "https://rpc.testnet.moonbeam.network")); setChainWithDefaultRpcUrl("base_goerli", ChainData("Base Goerli", 84531, "https://goerli.base.org")); setChainWithDefaultRpcUrl("base", ChainData("Base", 8453, "https://mainnet.base.org")); } // set chain info, with priority to chainAlias' rpc url in foundry.toml function setChainWithDefaultRpcUrl(string memory chainAlias, ChainData memory chain) private { string memory rpcUrl = chain.rpcUrl; defaultRpcUrls[chainAlias] = rpcUrl; chain.rpcUrl = ""; setChain(chainAlias, chain); chain.rpcUrl = rpcUrl; // restore argument } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.2 <0.9.0; pragma experimental ABIEncoderV2; import {StdStorage, stdStorage} from "./StdStorage.sol"; import {console2} from "./console2.sol"; import {Vm} from "./Vm.sol"; abstract contract StdCheatsSafe { Vm private constant vm = Vm(address(uint160(uint256(keccak256("hevm cheat code"))))); uint256 private constant UINT256_MAX = 115792089237316195423570985008687907853269984665640564039457584007913129639935; bool private gasMeteringOff; // Data structures to parse Transaction objects from the broadcast artifact // that conform to EIP1559. The Raw structs is what is parsed from the JSON // and then converted to the one that is used by the user for better UX. struct RawTx1559 { string[] arguments; address contractAddress; string contractName; // json value name = function string functionSig; bytes32 hash; // json value name = tx RawTx1559Detail txDetail; // json value name = type string opcode; } struct RawTx1559Detail { AccessList[] accessList; bytes data; address from; bytes gas; bytes nonce; address to; bytes txType; bytes value; } struct Tx1559 { string[] arguments; address contractAddress; string contractName; string functionSig; bytes32 hash; Tx1559Detail txDetail; string opcode; } struct Tx1559Detail { AccessList[] accessList; bytes data; address from; uint256 gas; uint256 nonce; address to; uint256 txType; uint256 value; } // Data structures to parse Transaction objects from the broadcast artifact // that DO NOT conform to EIP1559. The Raw structs is what is parsed from the JSON // and then converted to the one that is used by the user for better UX. struct TxLegacy { string[] arguments; address contractAddress; string contractName; string functionSig; string hash; string opcode; TxDetailLegacy transaction; } struct TxDetailLegacy { AccessList[] accessList; uint256 chainId; bytes data; address from; uint256 gas; uint256 gasPrice; bytes32 hash; uint256 nonce; bytes1 opcode; bytes32 r; bytes32 s; uint256 txType; address to; uint8 v; uint256 value; } struct AccessList { address accessAddress; bytes32[] storageKeys; } // Data structures to parse Receipt objects from the broadcast artifact. // The Raw structs is what is parsed from the JSON // and then converted to the one that is used by the user for better UX. struct RawReceipt { bytes32 blockHash; bytes blockNumber; address contractAddress; bytes cumulativeGasUsed; bytes effectiveGasPrice; address from; bytes gasUsed; RawReceiptLog[] logs; bytes logsBloom; bytes status; address to; bytes32 transactionHash; bytes transactionIndex; } struct Receipt { bytes32 blockHash; uint256 blockNumber; address contractAddress; uint256 cumulativeGasUsed; uint256 effectiveGasPrice; address from; uint256 gasUsed; ReceiptLog[] logs; bytes logsBloom; uint256 status; address to; bytes32 transactionHash; uint256 transactionIndex; } // Data structures to parse the entire broadcast artifact, assuming the // transactions conform to EIP1559. struct EIP1559ScriptArtifact { string[] libraries; string path; string[] pending; Receipt[] receipts; uint256 timestamp; Tx1559[] transactions; TxReturn[] txReturns; } struct RawEIP1559ScriptArtifact { string[] libraries; string path; string[] pending; RawReceipt[] receipts; TxReturn[] txReturns; uint256 timestamp; RawTx1559[] transactions; } struct RawReceiptLog { // json value = address address logAddress; bytes32 blockHash; bytes blockNumber; bytes data; bytes logIndex; bool removed; bytes32[] topics; bytes32 transactionHash; bytes transactionIndex; bytes transactionLogIndex; } struct ReceiptLog { // json value = address address logAddress; bytes32 blockHash; uint256 blockNumber; bytes data; uint256 logIndex; bytes32[] topics; uint256 transactionIndex; uint256 transactionLogIndex; bool removed; } struct TxReturn { string internalType; string value; } struct Account { address addr; uint256 key; } enum AddressType { Payable, NonPayable, ZeroAddress, Precompile, ForgeAddress } // Checks that `addr` is not blacklisted by token contracts that have a blacklist. function assumeNotBlacklisted(address token, address addr) internal view virtual { // Nothing to check if `token` is not a contract. uint256 tokenCodeSize; assembly { tokenCodeSize := extcodesize(token) } require(tokenCodeSize > 0, "StdCheats assumeNotBlacklisted(address,address): Token address is not a contract."); bool success; bytes memory returnData; // 4-byte selector for `isBlacklisted(address)`, used by USDC. (success, returnData) = token.staticcall(abi.encodeWithSelector(0xfe575a87, addr)); vm.assume(!success || abi.decode(returnData, (bool)) == false); // 4-byte selector for `isBlackListed(address)`, used by USDT. (success, returnData) = token.staticcall(abi.encodeWithSelector(0xe47d6060, addr)); vm.assume(!success || abi.decode(returnData, (bool)) == false); } // Checks that `addr` is not blacklisted by token contracts that have a blacklist. // This is identical to `assumeNotBlacklisted(address,address)` but with a different name, for // backwards compatibility, since this name was used in the original PR which has already has // a release. This function can be removed in a future release once we want a breaking change. function assumeNoBlacklisted(address token, address addr) internal view virtual { assumeNotBlacklisted(token, addr); } function assumeAddressIsNot(address addr, AddressType addressType) internal virtual { if (addressType == AddressType.Payable) { assumeNotPayable(addr); } else if (addressType == AddressType.NonPayable) { assumePayable(addr); } else if (addressType == AddressType.ZeroAddress) { assumeNotZeroAddress(addr); } else if (addressType == AddressType.Precompile) { assumeNotPrecompile(addr); } else if (addressType == AddressType.ForgeAddress) { assumeNotForgeAddress(addr); } } function assumeAddressIsNot(address addr, AddressType addressType1, AddressType addressType2) internal virtual { assumeAddressIsNot(addr, addressType1); assumeAddressIsNot(addr, addressType2); } function assumeAddressIsNot( address addr, AddressType addressType1, AddressType addressType2, AddressType addressType3 ) internal virtual { assumeAddressIsNot(addr, addressType1); assumeAddressIsNot(addr, addressType2); assumeAddressIsNot(addr, addressType3); } function assumeAddressIsNot( address addr, AddressType addressType1, AddressType addressType2, AddressType addressType3, AddressType addressType4 ) internal virtual { assumeAddressIsNot(addr, addressType1); assumeAddressIsNot(addr, addressType2); assumeAddressIsNot(addr, addressType3); assumeAddressIsNot(addr, addressType4); } // This function checks whether an address, `addr`, is payable. It works by sending 1 wei to // `addr` and checking the `success` return value. // NOTE: This function may result in state changes depending on the fallback/receive logic // implemented by `addr`, which should be taken into account when this function is used. function _isPayable(address addr) private returns (bool) { require( addr.balance < UINT256_MAX, "StdCheats _isPayable(address): Balance equals max uint256, so it cannot receive any more funds" ); uint256 origBalanceTest = address(this).balance; uint256 origBalanceAddr = address(addr).balance; vm.deal(address(this), 1); (bool success,) = payable(addr).call{value: 1}(""); // reset balances vm.deal(address(this), origBalanceTest); vm.deal(addr, origBalanceAddr); return success; } // NOTE: This function may result in state changes depending on the fallback/receive logic // implemented by `addr`, which should be taken into account when this function is used. See the // `_isPayable` method for more information. function assumePayable(address addr) internal virtual { vm.assume(_isPayable(addr)); } function assumeNotPayable(address addr) internal virtual { vm.assume(!_isPayable(addr)); } function assumeNotZeroAddress(address addr) internal pure virtual { vm.assume(addr != address(0)); } function assumeNotPrecompile(address addr) internal pure virtual { assumeNotPrecompile(addr, _pureChainId()); } function assumeNotPrecompile(address addr, uint256 chainId) internal pure virtual { // Note: For some chains like Optimism these are technically predeploys (i.e. bytecode placed at a specific // address), but the same rationale for excluding them applies so we include those too. // These should be present on all EVM-compatible chains. vm.assume(addr < address(0x1) || addr > address(0x9)); // forgefmt: disable-start if (chainId == 10 || chainId == 420) { // https://github.com/ethereum-optimism/optimism/blob/eaa371a0184b56b7ca6d9eb9cb0a2b78b2ccd864/op-bindings/predeploys/addresses.go#L6-L21 vm.assume(addr < address(0x4200000000000000000000000000000000000000) || addr > address(0x4200000000000000000000000000000000000800)); } else if (chainId == 42161 || chainId == 421613) { // https://developer.arbitrum.io/useful-addresses#arbitrum-precompiles-l2-same-on-all-arb-chains vm.assume(addr < address(0x0000000000000000000000000000000000000064) || addr > address(0x0000000000000000000000000000000000000068)); } else if (chainId == 43114 || chainId == 43113) { // https://github.com/ava-labs/subnet-evm/blob/47c03fd007ecaa6de2c52ea081596e0a88401f58/precompile/params.go#L18-L59 vm.assume(addr < address(0x0100000000000000000000000000000000000000) || addr > address(0x01000000000000000000000000000000000000ff)); vm.assume(addr < address(0x0200000000000000000000000000000000000000) || addr > address(0x02000000000000000000000000000000000000FF)); vm.assume(addr < address(0x0300000000000000000000000000000000000000) || addr > address(0x03000000000000000000000000000000000000Ff)); } // forgefmt: disable-end } function assumeNotForgeAddress(address addr) internal pure virtual { // vm, console, and Create2Deployer addresses vm.assume( addr != address(vm) && addr != 0x000000000000000000636F6e736F6c652e6c6f67 && addr != 0x4e59b44847b379578588920cA78FbF26c0B4956C ); } function readEIP1559ScriptArtifact(string memory path) internal view virtual returns (EIP1559ScriptArtifact memory) { string memory data = vm.readFile(path); bytes memory parsedData = vm.parseJson(data); RawEIP1559ScriptArtifact memory rawArtifact = abi.decode(parsedData, (RawEIP1559ScriptArtifact)); EIP1559ScriptArtifact memory artifact; artifact.libraries = rawArtifact.libraries; artifact.path = rawArtifact.path; artifact.timestamp = rawArtifact.timestamp; artifact.pending = rawArtifact.pending; artifact.txReturns = rawArtifact.txReturns; artifact.receipts = rawToConvertedReceipts(rawArtifact.receipts); artifact.transactions = rawToConvertedEIPTx1559s(rawArtifact.transactions); return artifact; } function rawToConvertedEIPTx1559s(RawTx1559[] memory rawTxs) internal pure virtual returns (Tx1559[] memory) { Tx1559[] memory txs = new Tx1559[](rawTxs.length); for (uint256 i; i < rawTxs.length; i++) { txs[i] = rawToConvertedEIPTx1559(rawTxs[i]); } return txs; } function rawToConvertedEIPTx1559(RawTx1559 memory rawTx) internal pure virtual returns (Tx1559 memory) { Tx1559 memory transaction; transaction.arguments = rawTx.arguments; transaction.contractName = rawTx.contractName; transaction.functionSig = rawTx.functionSig; transaction.hash = rawTx.hash; transaction.txDetail = rawToConvertedEIP1559Detail(rawTx.txDetail); transaction.opcode = rawTx.opcode; return transaction; } function rawToConvertedEIP1559Detail(RawTx1559Detail memory rawDetail) internal pure virtual returns (Tx1559Detail memory) { Tx1559Detail memory txDetail; txDetail.data = rawDetail.data; txDetail.from = rawDetail.from; txDetail.to = rawDetail.to; txDetail.nonce = _bytesToUint(rawDetail.nonce); txDetail.txType = _bytesToUint(rawDetail.txType); txDetail.value = _bytesToUint(rawDetail.value); txDetail.gas = _bytesToUint(rawDetail.gas); txDetail.accessList = rawDetail.accessList; return txDetail; } function readTx1559s(string memory path) internal view virtual returns (Tx1559[] memory) { string memory deployData = vm.readFile(path); bytes memory parsedDeployData = vm.parseJson(deployData, ".transactions"); RawTx1559[] memory rawTxs = abi.decode(parsedDeployData, (RawTx1559[])); return rawToConvertedEIPTx1559s(rawTxs); } function readTx1559(string memory path, uint256 index) internal view virtual returns (Tx1559 memory) { string memory deployData = vm.readFile(path); string memory key = string(abi.encodePacked(".transactions[", vm.toString(index), "]")); bytes memory parsedDeployData = vm.parseJson(deployData, key); RawTx1559 memory rawTx = abi.decode(parsedDeployData, (RawTx1559)); return rawToConvertedEIPTx1559(rawTx); } // Analogous to readTransactions, but for receipts. function readReceipts(string memory path) internal view virtual returns (Receipt[] memory) { string memory deployData = vm.readFile(path); bytes memory parsedDeployData = vm.parseJson(deployData, ".receipts"); RawReceipt[] memory rawReceipts = abi.decode(parsedDeployData, (RawReceipt[])); return rawToConvertedReceipts(rawReceipts); } function readReceipt(string memory path, uint256 index) internal view virtual returns (Receipt memory) { string memory deployData = vm.readFile(path); string memory key = string(abi.encodePacked(".receipts[", vm.toString(index), "]")); bytes memory parsedDeployData = vm.parseJson(deployData, key); RawReceipt memory rawReceipt = abi.decode(parsedDeployData, (RawReceipt)); return rawToConvertedReceipt(rawReceipt); } function rawToConvertedReceipts(RawReceipt[] memory rawReceipts) internal pure virtual returns (Receipt[] memory) { Receipt[] memory receipts = new Receipt[](rawReceipts.length); for (uint256 i; i < rawReceipts.length; i++) { receipts[i] = rawToConvertedReceipt(rawReceipts[i]); } return receipts; } function rawToConvertedReceipt(RawReceipt memory rawReceipt) internal pure virtual returns (Receipt memory) { Receipt memory receipt; receipt.blockHash = rawReceipt.blockHash; receipt.to = rawReceipt.to; receipt.from = rawReceipt.from; receipt.contractAddress = rawReceipt.contractAddress; receipt.effectiveGasPrice = _bytesToUint(rawReceipt.effectiveGasPrice); receipt.cumulativeGasUsed = _bytesToUint(rawReceipt.cumulativeGasUsed); receipt.gasUsed = _bytesToUint(rawReceipt.gasUsed); receipt.status = _bytesToUint(rawReceipt.status); receipt.transactionIndex = _bytesToUint(rawReceipt.transactionIndex); receipt.blockNumber = _bytesToUint(rawReceipt.blockNumber); receipt.logs = rawToConvertedReceiptLogs(rawReceipt.logs); receipt.logsBloom = rawReceipt.logsBloom; receipt.transactionHash = rawReceipt.transactionHash; return receipt; } function rawToConvertedReceiptLogs(RawReceiptLog[] memory rawLogs) internal pure virtual returns (ReceiptLog[] memory) { ReceiptLog[] memory logs = new ReceiptLog[](rawLogs.length); for (uint256 i; i < rawLogs.length; i++) { logs[i].logAddress = rawLogs[i].logAddress; logs[i].blockHash = rawLogs[i].blockHash; logs[i].blockNumber = _bytesToUint(rawLogs[i].blockNumber); logs[i].data = rawLogs[i].data; logs[i].logIndex = _bytesToUint(rawLogs[i].logIndex); logs[i].topics = rawLogs[i].topics; logs[i].transactionIndex = _bytesToUint(rawLogs[i].transactionIndex); logs[i].transactionLogIndex = _bytesToUint(rawLogs[i].transactionLogIndex); logs[i].removed = rawLogs[i].removed; } return logs; } // Deploy a contract by fetching the contract bytecode from // the artifacts directory // e.g. `deployCode(code, abi.encode(arg1,arg2,arg3))` function deployCode(string memory what, bytes memory args) internal virtual returns (address addr) { bytes memory bytecode = abi.encodePacked(vm.getCode(what), args); /// @solidity memory-safe-assembly assembly { addr := create(0, add(bytecode, 0x20), mload(bytecode)) } require(addr != address(0), "StdCheats deployCode(string,bytes): Deployment failed."); } function deployCode(string memory what) internal virtual returns (address addr) { bytes memory bytecode = vm.getCode(what); /// @solidity memory-safe-assembly assembly { addr := create(0, add(bytecode, 0x20), mload(bytecode)) } require(addr != address(0), "StdCheats deployCode(string): Deployment failed."); } /// @dev deploy contract with value on construction function deployCode(string memory what, bytes memory args, uint256 val) internal virtual returns (address addr) { bytes memory bytecode = abi.encodePacked(vm.getCode(what), args); /// @solidity memory-safe-assembly assembly { addr := create(val, add(bytecode, 0x20), mload(bytecode)) } require(addr != address(0), "StdCheats deployCode(string,bytes,uint256): Deployment failed."); } function deployCode(string memory what, uint256 val) internal virtual returns (address addr) { bytes memory bytecode = vm.getCode(what); /// @solidity memory-safe-assembly assembly { addr := create(val, add(bytecode, 0x20), mload(bytecode)) } require(addr != address(0), "StdCheats deployCode(string,uint256): Deployment failed."); } // creates a labeled address and the corresponding private key function makeAddrAndKey(string memory name) internal virtual returns (address addr, uint256 privateKey) { privateKey = uint256(keccak256(abi.encodePacked(name))); addr = vm.addr(privateKey); vm.label(addr, name); } // creates a labeled address function makeAddr(string memory name) internal virtual returns (address addr) { (addr,) = makeAddrAndKey(name); } // Destroys an account immediately, sending the balance to beneficiary. // Destroying means: balance will be zero, code will be empty, and nonce will be 0 // This is similar to selfdestruct but not identical: selfdestruct destroys code and nonce // only after tx ends, this will run immediately. function destroyAccount(address who, address beneficiary) internal virtual { uint256 currBalance = who.balance; vm.etch(who, abi.encode()); vm.deal(who, 0); vm.resetNonce(who); uint256 beneficiaryBalance = beneficiary.balance; vm.deal(beneficiary, currBalance + beneficiaryBalance); } // creates a struct containing both a labeled address and the corresponding private key function makeAccount(string memory name) internal virtual returns (Account memory account) { (account.addr, account.key) = makeAddrAndKey(name); } function deriveRememberKey(string memory mnemonic, uint32 index) internal virtual returns (address who, uint256 privateKey) { privateKey = vm.deriveKey(mnemonic, index); who = vm.rememberKey(privateKey); } function _bytesToUint(bytes memory b) private pure returns (uint256) { require(b.length <= 32, "StdCheats _bytesToUint(bytes): Bytes length exceeds 32."); return abi.decode(abi.encodePacked(new bytes(32 - b.length), b), (uint256)); } function isFork() internal view virtual returns (bool status) { try vm.activeFork() { status = true; } catch (bytes memory) {} } modifier skipWhenForking() { if (!isFork()) { _; } } modifier skipWhenNotForking() { if (isFork()) { _; } } modifier noGasMetering() { vm.pauseGasMetering(); // To prevent turning gas monitoring back on with nested functions that use this modifier, // we check if gasMetering started in the off position. If it did, we don't want to turn // it back on until we exit the top level function that used the modifier // // i.e. funcA() noGasMetering { funcB() }, where funcB has noGasMetering as well. // funcA will have `gasStartedOff` as false, funcB will have it as true, // so we only turn metering back on at the end of the funcA bool gasStartedOff = gasMeteringOff; gasMeteringOff = true; _; // if gas metering was on when this modifier was called, turn it back on at the end if (!gasStartedOff) { gasMeteringOff = false; vm.resumeGasMetering(); } } // We use this complex approach of `_viewChainId` and `_pureChainId` to ensure there are no // compiler warnings when accessing chain ID in any solidity version supported by forge-std. We // can't simply access the chain ID in a normal view or pure function because the solc View Pure // Checker changed `chainid` from pure to view in 0.8.0. function _viewChainId() private view returns (uint256 chainId) { // Assembly required since `block.chainid` was introduced in 0.8.0. assembly { chainId := chainid() } address(this); // Silence warnings in older Solc versions. } function _pureChainId() private pure returns (uint256 chainId) { function() internal view returns (uint256) fnIn = _viewChainId; function() internal pure returns (uint256) pureChainId; assembly { pureChainId := fnIn } chainId = pureChainId(); } } // Wrappers around cheatcodes to avoid footguns abstract contract StdCheats is StdCheatsSafe { using stdStorage for StdStorage; StdStorage private stdstore; Vm private constant vm = Vm(address(uint160(uint256(keccak256("hevm cheat code"))))); address private constant CONSOLE2_ADDRESS = 0x000000000000000000636F6e736F6c652e6c6f67; // Skip forward or rewind time by the specified number of seconds function skip(uint256 time) internal virtual { vm.warp(block.timestamp + time); } function rewind(uint256 time) internal virtual { vm.warp(block.timestamp - time); } // Setup a prank from an address that has some ether function hoax(address msgSender) internal virtual { vm.deal(msgSender, 1 << 128); vm.prank(msgSender); } function hoax(address msgSender, uint256 give) internal virtual { vm.deal(msgSender, give); vm.prank(msgSender); } function hoax(address msgSender, address origin) internal virtual { vm.deal(msgSender, 1 << 128); vm.prank(msgSender, origin); } function hoax(address msgSender, address origin, uint256 give) internal virtual { vm.deal(msgSender, give); vm.prank(msgSender, origin); } // Start perpetual prank from an address that has some ether function startHoax(address msgSender) internal virtual { vm.deal(msgSender, 1 << 128); vm.startPrank(msgSender); } function startHoax(address msgSender, uint256 give) internal virtual { vm.deal(msgSender, give); vm.startPrank(msgSender); } // Start perpetual prank from an address that has some ether // tx.origin is set to the origin parameter function startHoax(address msgSender, address origin) internal virtual { vm.deal(msgSender, 1 << 128); vm.startPrank(msgSender, origin); } function startHoax(address msgSender, address origin, uint256 give) internal virtual { vm.deal(msgSender, give); vm.startPrank(msgSender, origin); } function changePrank(address msgSender) internal virtual { console2_log("changePrank is deprecated. Please use vm.startPrank instead."); vm.stopPrank(); vm.startPrank(msgSender); } function changePrank(address msgSender, address txOrigin) internal virtual { vm.stopPrank(); vm.startPrank(msgSender, txOrigin); } // The same as Vm's `deal` // Use the alternative signature for ERC20 tokens function deal(address to, uint256 give) internal virtual { vm.deal(to, give); } // Set the balance of an account for any ERC20 token // Use the alternative signature to update `totalSupply` function deal(address token, address to, uint256 give) internal virtual { deal(token, to, give, false); } // Set the balance of an account for any ERC1155 token // Use the alternative signature to update `totalSupply` function dealERC1155(address token, address to, uint256 id, uint256 give) internal virtual { dealERC1155(token, to, id, give, false); } function deal(address token, address to, uint256 give, bool adjust) internal virtual { // get current balance (, bytes memory balData) = token.staticcall(abi.encodeWithSelector(0x70a08231, to)); uint256 prevBal = abi.decode(balData, (uint256)); // update balance stdstore.target(token).sig(0x70a08231).with_key(to).checked_write(give); // update total supply if (adjust) { (, bytes memory totSupData) = token.staticcall(abi.encodeWithSelector(0x18160ddd)); uint256 totSup = abi.decode(totSupData, (uint256)); if (give < prevBal) { totSup -= (prevBal - give); } else { totSup += (give - prevBal); } stdstore.target(token).sig(0x18160ddd).checked_write(totSup); } } function dealERC1155(address token, address to, uint256 id, uint256 give, bool adjust) internal virtual { // get current balance (, bytes memory balData) = token.staticcall(abi.encodeWithSelector(0x00fdd58e, to, id)); uint256 prevBal = abi.decode(balData, (uint256)); // update balance stdstore.target(token).sig(0x00fdd58e).with_key(to).with_key(id).checked_write(give); // update total supply if (adjust) { (, bytes memory totSupData) = token.staticcall(abi.encodeWithSelector(0xbd85b039, id)); require( totSupData.length != 0, "StdCheats deal(address,address,uint,uint,bool): target contract is not ERC1155Supply." ); uint256 totSup = abi.decode(totSupData, (uint256)); if (give < prevBal) { totSup -= (prevBal - give); } else { totSup += (give - prevBal); } stdstore.target(token).sig(0xbd85b039).with_key(id).checked_write(totSup); } } function dealERC721(address token, address to, uint256 id) internal virtual { // check if token id is already minted and the actual owner. (bool successMinted, bytes memory ownerData) = token.staticcall(abi.encodeWithSelector(0x6352211e, id)); require(successMinted, "StdCheats deal(address,address,uint,bool): id not minted."); // get owner current balance (, bytes memory fromBalData) = token.staticcall(abi.encodeWithSelector(0x70a08231, abi.decode(ownerData, (address)))); uint256 fromPrevBal = abi.decode(fromBalData, (uint256)); // get new user current balance (, bytes memory toBalData) = token.staticcall(abi.encodeWithSelector(0x70a08231, to)); uint256 toPrevBal = abi.decode(toBalData, (uint256)); // update balances stdstore.target(token).sig(0x70a08231).with_key(abi.decode(ownerData, (address))).checked_write(--fromPrevBal); stdstore.target(token).sig(0x70a08231).with_key(to).checked_write(++toPrevBal); // update owner stdstore.target(token).sig(0x6352211e).with_key(id).checked_write(to); } function deployCodeTo(string memory what, address where) internal virtual { deployCodeTo(what, "", 0, where); } function deployCodeTo(string memory what, bytes memory args, address where) internal virtual { deployCodeTo(what, args, 0, where); } function deployCodeTo(string memory what, bytes memory args, uint256 value, address where) internal virtual { bytes memory creationCode = vm.getCode(what); vm.etch(where, abi.encodePacked(creationCode, args)); (bool success, bytes memory runtimeBytecode) = where.call{value: value}(""); require(success, "StdCheats deployCodeTo(string,bytes,uint256,address): Failed to create runtime bytecode."); vm.etch(where, runtimeBytecode); } // Used to prevent the compilation of console, which shortens the compilation time when console is not used elsewhere. function console2_log(string memory p0) private view { (bool status,) = address(CONSOLE2_ADDRESS).staticcall(abi.encodeWithSignature("log(string)", p0)); status; } }
// SPDX-License-Identifier: MIT // Panics work for versions >=0.8.0, but we lowered the pragma to make this compatible with Test pragma solidity >=0.6.2 <0.9.0; library stdError { bytes public constant assertionError = abi.encodeWithSignature("Panic(uint256)", 0x01); bytes public constant arithmeticError = abi.encodeWithSignature("Panic(uint256)", 0x11); bytes public constant divisionError = abi.encodeWithSignature("Panic(uint256)", 0x12); bytes public constant enumConversionError = abi.encodeWithSignature("Panic(uint256)", 0x21); bytes public constant encodeStorageError = abi.encodeWithSignature("Panic(uint256)", 0x22); bytes public constant popError = abi.encodeWithSignature("Panic(uint256)", 0x31); bytes public constant indexOOBError = abi.encodeWithSignature("Panic(uint256)", 0x32); bytes public constant memOverflowError = abi.encodeWithSignature("Panic(uint256)", 0x41); bytes public constant zeroVarError = abi.encodeWithSignature("Panic(uint256)", 0x51); }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.2 <0.9.0; pragma experimental ABIEncoderV2; abstract contract StdInvariant { struct FuzzSelector { address addr; bytes4[] selectors; } struct FuzzInterface { address addr; string[] artifacts; } address[] private _excludedContracts; address[] private _excludedSenders; address[] private _targetedContracts; address[] private _targetedSenders; string[] private _excludedArtifacts; string[] private _targetedArtifacts; FuzzSelector[] private _targetedArtifactSelectors; FuzzSelector[] private _targetedSelectors; FuzzInterface[] private _targetedInterfaces; // Functions for users: // These are intended to be called in tests. function excludeContract(address newExcludedContract_) internal { _excludedContracts.push(newExcludedContract_); } function excludeSender(address newExcludedSender_) internal { _excludedSenders.push(newExcludedSender_); } function excludeArtifact(string memory newExcludedArtifact_) internal { _excludedArtifacts.push(newExcludedArtifact_); } function targetArtifact(string memory newTargetedArtifact_) internal { _targetedArtifacts.push(newTargetedArtifact_); } function targetArtifactSelector(FuzzSelector memory newTargetedArtifactSelector_) internal { _targetedArtifactSelectors.push(newTargetedArtifactSelector_); } function targetContract(address newTargetedContract_) internal { _targetedContracts.push(newTargetedContract_); } function targetSelector(FuzzSelector memory newTargetedSelector_) internal { _targetedSelectors.push(newTargetedSelector_); } function targetSender(address newTargetedSender_) internal { _targetedSenders.push(newTargetedSender_); } function targetInterface(FuzzInterface memory newTargetedInterface_) internal { _targetedInterfaces.push(newTargetedInterface_); } // Functions for forge: // These are called by forge to run invariant tests and don't need to be called in tests. function excludeArtifacts() public view returns (string[] memory excludedArtifacts_) { excludedArtifacts_ = _excludedArtifacts; } function excludeContracts() public view returns (address[] memory excludedContracts_) { excludedContracts_ = _excludedContracts; } function excludeSenders() public view returns (address[] memory excludedSenders_) { excludedSenders_ = _excludedSenders; } function targetArtifacts() public view returns (string[] memory targetedArtifacts_) { targetedArtifacts_ = _targetedArtifacts; } function targetArtifactSelectors() public view returns (FuzzSelector[] memory targetedArtifactSelectors_) { targetedArtifactSelectors_ = _targetedArtifactSelectors; } function targetContracts() public view returns (address[] memory targetedContracts_) { targetedContracts_ = _targetedContracts; } function targetSelectors() public view returns (FuzzSelector[] memory targetedSelectors_) { targetedSelectors_ = _targetedSelectors; } function targetSenders() public view returns (address[] memory targetedSenders_) { targetedSenders_ = _targetedSenders; } function targetInterfaces() public view returns (FuzzInterface[] memory targetedInterfaces_) { targetedInterfaces_ = _targetedInterfaces; } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.9.0; pragma experimental ABIEncoderV2; import {VmSafe} from "./Vm.sol"; // Helpers for parsing and writing JSON files // To parse: // ``` // using stdJson for string; // string memory json = vm.readFile("some_peth"); // json.parseUint("<json_path>"); // ``` // To write: // ``` // using stdJson for string; // string memory json = "deploymentArtifact"; // Contract contract = new Contract(); // json.serialize("contractAddress", address(contract)); // json = json.serialize("deploymentTimes", uint(1)); // // store the stringified JSON to the 'json' variable we have been using as a key // // as we won't need it any longer // string memory json2 = "finalArtifact"; // string memory final = json2.serialize("depArtifact", json); // final.write("<some_path>"); // ``` library stdJson { VmSafe private constant vm = VmSafe(address(uint160(uint256(keccak256("hevm cheat code"))))); function parseRaw(string memory json, string memory key) internal pure returns (bytes memory) { return vm.parseJson(json, key); } function readUint(string memory json, string memory key) internal pure returns (uint256) { return vm.parseJsonUint(json, key); } function readUintArray(string memory json, string memory key) internal pure returns (uint256[] memory) { return vm.parseJsonUintArray(json, key); } function readInt(string memory json, string memory key) internal pure returns (int256) { return vm.parseJsonInt(json, key); } function readIntArray(string memory json, string memory key) internal pure returns (int256[] memory) { return vm.parseJsonIntArray(json, key); } function readBytes32(string memory json, string memory key) internal pure returns (bytes32) { return vm.parseJsonBytes32(json, key); } function readBytes32Array(string memory json, string memory key) internal pure returns (bytes32[] memory) { return vm.parseJsonBytes32Array(json, key); } function readString(string memory json, string memory key) internal pure returns (string memory) { return vm.parseJsonString(json, key); } function readStringArray(string memory json, string memory key) internal pure returns (string[] memory) { return vm.parseJsonStringArray(json, key); } function readAddress(string memory json, string memory key) internal pure returns (address) { return vm.parseJsonAddress(json, key); } function readAddressArray(string memory json, string memory key) internal pure returns (address[] memory) { return vm.parseJsonAddressArray(json, key); } function readBool(string memory json, string memory key) internal pure returns (bool) { return vm.parseJsonBool(json, key); } function readBoolArray(string memory json, string memory key) internal pure returns (bool[] memory) { return vm.parseJsonBoolArray(json, key); } function readBytes(string memory json, string memory key) internal pure returns (bytes memory) { return vm.parseJsonBytes(json, key); } function readBytesArray(string memory json, string memory key) internal pure returns (bytes[] memory) { return vm.parseJsonBytesArray(json, key); } function serialize(string memory jsonKey, string memory key, bool value) internal returns (string memory) { return vm.serializeBool(jsonKey, key, value); } function serialize(string memory jsonKey, string memory key, bool[] memory value) internal returns (string memory) { return vm.serializeBool(jsonKey, key, value); } function serialize(string memory jsonKey, string memory key, uint256 value) internal returns (string memory) { return vm.serializeUint(jsonKey, key, value); } function serialize(string memory jsonKey, string memory key, uint256[] memory value) internal returns (string memory) { return vm.serializeUint(jsonKey, key, value); } function serialize(string memory jsonKey, string memory key, int256 value) internal returns (string memory) { return vm.serializeInt(jsonKey, key, value); } function serialize(string memory jsonKey, string memory key, int256[] memory value) internal returns (string memory) { return vm.serializeInt(jsonKey, key, value); } function serialize(string memory jsonKey, string memory key, address value) internal returns (string memory) { return vm.serializeAddress(jsonKey, key, value); } function serialize(string memory jsonKey, string memory key, address[] memory value) internal returns (string memory) { return vm.serializeAddress(jsonKey, key, value); } function serialize(string memory jsonKey, string memory key, bytes32 value) internal returns (string memory) { return vm.serializeBytes32(jsonKey, key, value); } function serialize(string memory jsonKey, string memory key, bytes32[] memory value) internal returns (string memory) { return vm.serializeBytes32(jsonKey, key, value); } function serialize(string memory jsonKey, string memory key, bytes memory value) internal returns (string memory) { return vm.serializeBytes(jsonKey, key, value); } function serialize(string memory jsonKey, string memory key, bytes[] memory value) internal returns (string memory) { return vm.serializeBytes(jsonKey, key, value); } function serialize(string memory jsonKey, string memory key, string memory value) internal returns (string memory) { return vm.serializeString(jsonKey, key, value); } function serialize(string memory jsonKey, string memory key, string[] memory value) internal returns (string memory) { return vm.serializeString(jsonKey, key, value); } function write(string memory jsonKey, string memory path) internal { vm.writeJson(jsonKey, path); } function write(string memory jsonKey, string memory path, string memory valueKey) internal { vm.writeJson(jsonKey, path, valueKey); } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.2 <0.9.0; library stdMath { int256 private constant INT256_MIN = -57896044618658097711785492504343953926634992332820282019728792003956564819968; function abs(int256 a) internal pure returns (uint256) { // Required or it will fail when `a = type(int256).min` if (a == INT256_MIN) { return 57896044618658097711785492504343953926634992332820282019728792003956564819968; } return uint256(a > 0 ? a : -a); } function delta(uint256 a, uint256 b) internal pure returns (uint256) { return a > b ? a - b : b - a; } function delta(int256 a, int256 b) internal pure returns (uint256) { // a and b are of the same sign // this works thanks to two's complement, the left-most bit is the sign bit if ((a ^ b) > -1) { return delta(abs(a), abs(b)); } // a and b are of opposite signs return abs(a) + abs(b); } function percentDelta(uint256 a, uint256 b) internal pure returns (uint256) { uint256 absDelta = delta(a, b); return absDelta * 1e18 / b; } function percentDelta(int256 a, int256 b) internal pure returns (uint256) { uint256 absDelta = delta(a, b); uint256 absB = abs(b); return absDelta * 1e18 / absB; } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.2 <0.9.0; import {Vm} from "./Vm.sol"; struct StdStorage { mapping(address => mapping(bytes4 => mapping(bytes32 => uint256))) slots; mapping(address => mapping(bytes4 => mapping(bytes32 => bool))) finds; bytes32[] _keys; bytes4 _sig; uint256 _depth; address _target; bytes32 _set; } library stdStorageSafe { event SlotFound(address who, bytes4 fsig, bytes32 keysHash, uint256 slot); event WARNING_UninitedSlot(address who, uint256 slot); Vm private constant vm = Vm(address(uint160(uint256(keccak256("hevm cheat code"))))); function sigs(string memory sigStr) internal pure returns (bytes4) { return bytes4(keccak256(bytes(sigStr))); } /// @notice find an arbitrary storage slot given a function sig, input data, address of the contract and a value to check against // slot complexity: // if flat, will be bytes32(uint256(uint)); // if map, will be keccak256(abi.encode(key, uint(slot))); // if deep map, will be keccak256(abi.encode(key1, keccak256(abi.encode(key0, uint(slot))))); // if map struct, will be bytes32(uint256(keccak256(abi.encode(key1, keccak256(abi.encode(key0, uint(slot)))))) + structFieldDepth); function find(StdStorage storage self) internal returns (uint256) { address who = self._target; bytes4 fsig = self._sig; uint256 field_depth = self._depth; bytes32[] memory ins = self._keys; // calldata to test against if (self.finds[who][fsig][keccak256(abi.encodePacked(ins, field_depth))]) { return self.slots[who][fsig][keccak256(abi.encodePacked(ins, field_depth))]; } bytes memory cald = abi.encodePacked(fsig, flatten(ins)); vm.record(); bytes32 fdat; { (, bytes memory rdat) = who.staticcall(cald); fdat = bytesToBytes32(rdat, 32 * field_depth); } (bytes32[] memory reads,) = vm.accesses(address(who)); if (reads.length == 1) { bytes32 curr = vm.load(who, reads[0]); if (curr == bytes32(0)) { emit WARNING_UninitedSlot(who, uint256(reads[0])); } if (fdat != curr) { require( false, "stdStorage find(StdStorage): Packed slot. This would cause dangerous overwriting and currently isn't supported." ); } emit SlotFound(who, fsig, keccak256(abi.encodePacked(ins, field_depth)), uint256(reads[0])); self.slots[who][fsig][keccak256(abi.encodePacked(ins, field_depth))] = uint256(reads[0]); self.finds[who][fsig][keccak256(abi.encodePacked(ins, field_depth))] = true; } else if (reads.length > 1) { for (uint256 i = 0; i < reads.length; i++) { bytes32 prev = vm.load(who, reads[i]); if (prev == bytes32(0)) { emit WARNING_UninitedSlot(who, uint256(reads[i])); } if (prev != fdat) { continue; } bytes32 new_val = ~prev; // store vm.store(who, reads[i], new_val); bool success; { bytes memory rdat; (success, rdat) = who.staticcall(cald); fdat = bytesToBytes32(rdat, 32 * field_depth); } if (success && fdat == new_val) { // we found which of the slots is the actual one emit SlotFound(who, fsig, keccak256(abi.encodePacked(ins, field_depth)), uint256(reads[i])); self.slots[who][fsig][keccak256(abi.encodePacked(ins, field_depth))] = uint256(reads[i]); self.finds[who][fsig][keccak256(abi.encodePacked(ins, field_depth))] = true; vm.store(who, reads[i], prev); break; } vm.store(who, reads[i], prev); } } else { revert("stdStorage find(StdStorage): No storage use detected for target."); } require( self.finds[who][fsig][keccak256(abi.encodePacked(ins, field_depth))], "stdStorage find(StdStorage): Slot(s) not found." ); delete self._target; delete self._sig; delete self._keys; delete self._depth; return self.slots[who][fsig][keccak256(abi.encodePacked(ins, field_depth))]; } function target(StdStorage storage self, address _target) internal returns (StdStorage storage) { self._target = _target; return self; } function sig(StdStorage storage self, bytes4 _sig) internal returns (StdStorage storage) { self._sig = _sig; return self; } function sig(StdStorage storage self, string memory _sig) internal returns (StdStorage storage) { self._sig = sigs(_sig); return self; } function with_key(StdStorage storage self, address who) internal returns (StdStorage storage) { self._keys.push(bytes32(uint256(uint160(who)))); return self; } function with_key(StdStorage storage self, uint256 amt) internal returns (StdStorage storage) { self._keys.push(bytes32(amt)); return self; } function with_key(StdStorage storage self, bytes32 key) internal returns (StdStorage storage) { self._keys.push(key); return self; } function depth(StdStorage storage self, uint256 _depth) internal returns (StdStorage storage) { self._depth = _depth; return self; } function read(StdStorage storage self) private returns (bytes memory) { address t = self._target; uint256 s = find(self); return abi.encode(vm.load(t, bytes32(s))); } function read_bytes32(StdStorage storage self) internal returns (bytes32) { return abi.decode(read(self), (bytes32)); } function read_bool(StdStorage storage self) internal returns (bool) { int256 v = read_int(self); if (v == 0) return false; if (v == 1) return true; revert("stdStorage read_bool(StdStorage): Cannot decode. Make sure you are reading a bool."); } function read_address(StdStorage storage self) internal returns (address) { return abi.decode(read(self), (address)); } function read_uint(StdStorage storage self) internal returns (uint256) { return abi.decode(read(self), (uint256)); } function read_int(StdStorage storage self) internal returns (int256) { return abi.decode(read(self), (int256)); } function parent(StdStorage storage self) internal returns (uint256, bytes32) { address who = self._target; uint256 field_depth = self._depth; vm.startMappingRecording(); uint256 child = find(self) - field_depth; (bool found, bytes32 key, bytes32 parent_slot) = vm.getMappingKeyAndParentOf(who, bytes32(child)); if (!found) { revert( "stdStorage read_bool(StdStorage): Cannot find parent. Make sure you give a slot and startMappingRecording() has been called." ); } return (uint256(parent_slot), key); } function root(StdStorage storage self) internal returns (uint256) { address who = self._target; uint256 field_depth = self._depth; vm.startMappingRecording(); uint256 child = find(self) - field_depth; bool found; bytes32 root_slot; bytes32 parent_slot; (found,, parent_slot) = vm.getMappingKeyAndParentOf(who, bytes32(child)); if (!found) { revert( "stdStorage read_bool(StdStorage): Cannot find parent. Make sure you give a slot and startMappingRecording() has been called." ); } while (found) { root_slot = parent_slot; (found,, parent_slot) = vm.getMappingKeyAndParentOf(who, bytes32(root_slot)); } return uint256(root_slot); } function bytesToBytes32(bytes memory b, uint256 offset) private pure returns (bytes32) { bytes32 out; uint256 max = b.length > 32 ? 32 : b.length; for (uint256 i = 0; i < max; i++) { out |= bytes32(b[offset + i] & 0xFF) >> (i * 8); } return out; } function flatten(bytes32[] memory b) private pure returns (bytes memory) { bytes memory result = new bytes(b.length * 32); for (uint256 i = 0; i < b.length; i++) { bytes32 k = b[i]; /// @solidity memory-safe-assembly assembly { mstore(add(result, add(32, mul(32, i))), k) } } return result; } } library stdStorage { Vm private constant vm = Vm(address(uint160(uint256(keccak256("hevm cheat code"))))); function sigs(string memory sigStr) internal pure returns (bytes4) { return stdStorageSafe.sigs(sigStr); } function find(StdStorage storage self) internal returns (uint256) { return stdStorageSafe.find(self); } function target(StdStorage storage self, address _target) internal returns (StdStorage storage) { return stdStorageSafe.target(self, _target); } function sig(StdStorage storage self, bytes4 _sig) internal returns (StdStorage storage) { return stdStorageSafe.sig(self, _sig); } function sig(StdStorage storage self, string memory _sig) internal returns (StdStorage storage) { return stdStorageSafe.sig(self, _sig); } function with_key(StdStorage storage self, address who) internal returns (StdStorage storage) { return stdStorageSafe.with_key(self, who); } function with_key(StdStorage storage self, uint256 amt) internal returns (StdStorage storage) { return stdStorageSafe.with_key(self, amt); } function with_key(StdStorage storage self, bytes32 key) internal returns (StdStorage storage) { return stdStorageSafe.with_key(self, key); } function depth(StdStorage storage self, uint256 _depth) internal returns (StdStorage storage) { return stdStorageSafe.depth(self, _depth); } function checked_write(StdStorage storage self, address who) internal { checked_write(self, bytes32(uint256(uint160(who)))); } function checked_write(StdStorage storage self, uint256 amt) internal { checked_write(self, bytes32(amt)); } function checked_write_int(StdStorage storage self, int256 val) internal { checked_write(self, bytes32(uint256(val))); } function checked_write(StdStorage storage self, bool write) internal { bytes32 t; /// @solidity memory-safe-assembly assembly { t := write } checked_write(self, t); } function checked_write(StdStorage storage self, bytes32 set) internal { address who = self._target; bytes4 fsig = self._sig; uint256 field_depth = self._depth; bytes32[] memory ins = self._keys; bytes memory cald = abi.encodePacked(fsig, flatten(ins)); if (!self.finds[who][fsig][keccak256(abi.encodePacked(ins, field_depth))]) { find(self); } bytes32 slot = bytes32(self.slots[who][fsig][keccak256(abi.encodePacked(ins, field_depth))]); bytes32 fdat; { (, bytes memory rdat) = who.staticcall(cald); fdat = bytesToBytes32(rdat, 32 * field_depth); } bytes32 curr = vm.load(who, slot); if (fdat != curr) { require( false, "stdStorage find(StdStorage): Packed slot. This would cause dangerous overwriting and currently isn't supported." ); } vm.store(who, slot, set); delete self._target; delete self._sig; delete self._keys; delete self._depth; } function read_bytes32(StdStorage storage self) internal returns (bytes32) { return stdStorageSafe.read_bytes32(self); } function read_bool(StdStorage storage self) internal returns (bool) { return stdStorageSafe.read_bool(self); } function read_address(StdStorage storage self) internal returns (address) { return stdStorageSafe.read_address(self); } function read_uint(StdStorage storage self) internal returns (uint256) { return stdStorageSafe.read_uint(self); } function read_int(StdStorage storage self) internal returns (int256) { return stdStorageSafe.read_int(self); } function parent(StdStorage storage self) internal returns (uint256, bytes32) { return stdStorageSafe.parent(self); } function root(StdStorage storage self) internal returns (uint256) { return stdStorageSafe.root(self); } // Private function so needs to be copied over function bytesToBytes32(bytes memory b, uint256 offset) private pure returns (bytes32) { bytes32 out; uint256 max = b.length > 32 ? 32 : b.length; for (uint256 i = 0; i < max; i++) { out |= bytes32(b[offset + i] & 0xFF) >> (i * 8); } return out; } // Private function so needs to be copied over function flatten(bytes32[] memory b) private pure returns (bytes memory) { bytes memory result = new bytes(b.length * 32); for (uint256 i = 0; i < b.length; i++) { bytes32 k = b[i]; /// @solidity memory-safe-assembly assembly { mstore(add(result, add(32, mul(32, i))), k) } } return result; } }
// SPDX-License-Identifier: MIT pragma solidity >=0.4.22 <0.9.0; import {VmSafe} from "./Vm.sol"; library StdStyle { VmSafe private constant vm = VmSafe(address(uint160(uint256(keccak256("hevm cheat code"))))); string constant RED = "\u001b[91m"; string constant GREEN = "\u001b[92m"; string constant YELLOW = "\u001b[93m"; string constant BLUE = "\u001b[94m"; string constant MAGENTA = "\u001b[95m"; string constant CYAN = "\u001b[96m"; string constant BOLD = "\u001b[1m"; string constant DIM = "\u001b[2m"; string constant ITALIC = "\u001b[3m"; string constant UNDERLINE = "\u001b[4m"; string constant INVERSE = "\u001b[7m"; string constant RESET = "\u001b[0m"; function styleConcat(string memory style, string memory self) private pure returns (string memory) { return string(abi.encodePacked(style, self, RESET)); } function red(string memory self) internal pure returns (string memory) { return styleConcat(RED, self); } function red(uint256 self) internal pure returns (string memory) { return red(vm.toString(self)); } function red(int256 self) internal pure returns (string memory) { return red(vm.toString(self)); } function red(address self) internal pure returns (string memory) { return red(vm.toString(self)); } function red(bool self) internal pure returns (string memory) { return red(vm.toString(self)); } function redBytes(bytes memory self) internal pure returns (string memory) { return red(vm.toString(self)); } function redBytes32(bytes32 self) internal pure returns (string memory) { return red(vm.toString(self)); } function green(string memory self) internal pure returns (string memory) { return styleConcat(GREEN, self); } function green(uint256 self) internal pure returns (string memory) { return green(vm.toString(self)); } function green(int256 self) internal pure returns (string memory) { return green(vm.toString(self)); } function green(address self) internal pure returns (string memory) { return green(vm.toString(self)); } function green(bool self) internal pure returns (string memory) { return green(vm.toString(self)); } function greenBytes(bytes memory self) internal pure returns (string memory) { return green(vm.toString(self)); } function greenBytes32(bytes32 self) internal pure returns (string memory) { return green(vm.toString(self)); } function yellow(string memory self) internal pure returns (string memory) { return styleConcat(YELLOW, self); } function yellow(uint256 self) internal pure returns (string memory) { return yellow(vm.toString(self)); } function yellow(int256 self) internal pure returns (string memory) { return yellow(vm.toString(self)); } function yellow(address self) internal pure returns (string memory) { return yellow(vm.toString(self)); } function yellow(bool self) internal pure returns (string memory) { return yellow(vm.toString(self)); } function yellowBytes(bytes memory self) internal pure returns (string memory) { return yellow(vm.toString(self)); } function yellowBytes32(bytes32 self) internal pure returns (string memory) { return yellow(vm.toString(self)); } function blue(string memory self) internal pure returns (string memory) { return styleConcat(BLUE, self); } function blue(uint256 self) internal pure returns (string memory) { return blue(vm.toString(self)); } function blue(int256 self) internal pure returns (string memory) { return blue(vm.toString(self)); } function blue(address self) internal pure returns (string memory) { return blue(vm.toString(self)); } function blue(bool self) internal pure returns (string memory) { return blue(vm.toString(self)); } function blueBytes(bytes memory self) internal pure returns (string memory) { return blue(vm.toString(self)); } function blueBytes32(bytes32 self) internal pure returns (string memory) { return blue(vm.toString(self)); } function magenta(string memory self) internal pure returns (string memory) { return styleConcat(MAGENTA, self); } function magenta(uint256 self) internal pure returns (string memory) { return magenta(vm.toString(self)); } function magenta(int256 self) internal pure returns (string memory) { return magenta(vm.toString(self)); } function magenta(address self) internal pure returns (string memory) { return magenta(vm.toString(self)); } function magenta(bool self) internal pure returns (string memory) { return magenta(vm.toString(self)); } function magentaBytes(bytes memory self) internal pure returns (string memory) { return magenta(vm.toString(self)); } function magentaBytes32(bytes32 self) internal pure returns (string memory) { return magenta(vm.toString(self)); } function cyan(string memory self) internal pure returns (string memory) { return styleConcat(CYAN, self); } function cyan(uint256 self) internal pure returns (string memory) { return cyan(vm.toString(self)); } function cyan(int256 self) internal pure returns (string memory) { return cyan(vm.toString(self)); } function cyan(address self) internal pure returns (string memory) { return cyan(vm.toString(self)); } function cyan(bool self) internal pure returns (string memory) { return cyan(vm.toString(self)); } function cyanBytes(bytes memory self) internal pure returns (string memory) { return cyan(vm.toString(self)); } function cyanBytes32(bytes32 self) internal pure returns (string memory) { return cyan(vm.toString(self)); } function bold(string memory self) internal pure returns (string memory) { return styleConcat(BOLD, self); } function bold(uint256 self) internal pure returns (string memory) { return bold(vm.toString(self)); } function bold(int256 self) internal pure returns (string memory) { return bold(vm.toString(self)); } function bold(address self) internal pure returns (string memory) { return bold(vm.toString(self)); } function bold(bool self) internal pure returns (string memory) { return bold(vm.toString(self)); } function boldBytes(bytes memory self) internal pure returns (string memory) { return bold(vm.toString(self)); } function boldBytes32(bytes32 self) internal pure returns (string memory) { return bold(vm.toString(self)); } function dim(string memory self) internal pure returns (string memory) { return styleConcat(DIM, self); } function dim(uint256 self) internal pure returns (string memory) { return dim(vm.toString(self)); } function dim(int256 self) internal pure returns (string memory) { return dim(vm.toString(self)); } function dim(address self) internal pure returns (string memory) { return dim(vm.toString(self)); } function dim(bool self) internal pure returns (string memory) { return dim(vm.toString(self)); } function dimBytes(bytes memory self) internal pure returns (string memory) { return dim(vm.toString(self)); } function dimBytes32(bytes32 self) internal pure returns (string memory) { return dim(vm.toString(self)); } function italic(string memory self) internal pure returns (string memory) { return styleConcat(ITALIC, self); } function italic(uint256 self) internal pure returns (string memory) { return italic(vm.toString(self)); } function italic(int256 self) internal pure returns (string memory) { return italic(vm.toString(self)); } function italic(address self) internal pure returns (string memory) { return italic(vm.toString(self)); } function italic(bool self) internal pure returns (string memory) { return italic(vm.toString(self)); } function italicBytes(bytes memory self) internal pure returns (string memory) { return italic(vm.toString(self)); } function italicBytes32(bytes32 self) internal pure returns (string memory) { return italic(vm.toString(self)); } function underline(string memory self) internal pure returns (string memory) { return styleConcat(UNDERLINE, self); } function underline(uint256 self) internal pure returns (string memory) { return underline(vm.toString(self)); } function underline(int256 self) internal pure returns (string memory) { return underline(vm.toString(self)); } function underline(address self) internal pure returns (string memory) { return underline(vm.toString(self)); } function underline(bool self) internal pure returns (string memory) { return underline(vm.toString(self)); } function underlineBytes(bytes memory self) internal pure returns (string memory) { return underline(vm.toString(self)); } function underlineBytes32(bytes32 self) internal pure returns (string memory) { return underline(vm.toString(self)); } function inverse(string memory self) internal pure returns (string memory) { return styleConcat(INVERSE, self); } function inverse(uint256 self) internal pure returns (string memory) { return inverse(vm.toString(self)); } function inverse(int256 self) internal pure returns (string memory) { return inverse(vm.toString(self)); } function inverse(address self) internal pure returns (string memory) { return inverse(vm.toString(self)); } function inverse(bool self) internal pure returns (string memory) { return inverse(vm.toString(self)); } function inverseBytes(bytes memory self) internal pure returns (string memory) { return inverse(vm.toString(self)); } function inverseBytes32(bytes32 self) internal pure returns (string memory) { return inverse(vm.toString(self)); } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.2 <0.9.0; pragma experimental ABIEncoderV2; import {IMulticall3} from "./interfaces/IMulticall3.sol"; import {VmSafe} from "./Vm.sol"; abstract contract StdUtils { /*////////////////////////////////////////////////////////////////////////// CONSTANTS //////////////////////////////////////////////////////////////////////////*/ IMulticall3 private constant multicall = IMulticall3(0xcA11bde05977b3631167028862bE2a173976CA11); VmSafe private constant vm = VmSafe(address(uint160(uint256(keccak256("hevm cheat code"))))); address private constant CONSOLE2_ADDRESS = 0x000000000000000000636F6e736F6c652e6c6f67; uint256 private constant INT256_MIN_ABS = 57896044618658097711785492504343953926634992332820282019728792003956564819968; uint256 private constant SECP256K1_ORDER = 115792089237316195423570985008687907852837564279074904382605163141518161494337; uint256 private constant UINT256_MAX = 115792089237316195423570985008687907853269984665640564039457584007913129639935; // Used by default when deploying with create2, https://github.com/Arachnid/deterministic-deployment-proxy. address private constant CREATE2_FACTORY = 0x4e59b44847b379578588920cA78FbF26c0B4956C; /*////////////////////////////////////////////////////////////////////////// INTERNAL FUNCTIONS //////////////////////////////////////////////////////////////////////////*/ function _bound(uint256 x, uint256 min, uint256 max) internal pure virtual returns (uint256 result) { require(min <= max, "StdUtils bound(uint256,uint256,uint256): Max is less than min."); // If x is between min and max, return x directly. This is to ensure that dictionary values // do not get shifted if the min is nonzero. More info: https://github.com/foundry-rs/forge-std/issues/188 if (x >= min && x <= max) return x; uint256 size = max - min + 1; // If the value is 0, 1, 2, 3, wrap that to min, min+1, min+2, min+3. Similarly for the UINT256_MAX side. // This helps ensure coverage of the min/max values. if (x <= 3 && size > x) return min + x; if (x >= UINT256_MAX - 3 && size > UINT256_MAX - x) return max - (UINT256_MAX - x); // Otherwise, wrap x into the range [min, max], i.e. the range is inclusive. if (x > max) { uint256 diff = x - max; uint256 rem = diff % size; if (rem == 0) return max; result = min + rem - 1; } else if (x < min) { uint256 diff = min - x; uint256 rem = diff % size; if (rem == 0) return min; result = max - rem + 1; } } function bound(uint256 x, uint256 min, uint256 max) internal view virtual returns (uint256 result) { result = _bound(x, min, max); console2_log("Bound Result", result); } function _bound(int256 x, int256 min, int256 max) internal pure virtual returns (int256 result) { require(min <= max, "StdUtils bound(int256,int256,int256): Max is less than min."); // Shifting all int256 values to uint256 to use _bound function. The range of two types are: // int256 : -(2**255) ~ (2**255 - 1) // uint256: 0 ~ (2**256 - 1) // So, add 2**255, INT256_MIN_ABS to the integer values. // // If the given integer value is -2**255, we cannot use `-uint256(-x)` because of the overflow. // So, use `~uint256(x) + 1` instead. uint256 _x = x < 0 ? (INT256_MIN_ABS - ~uint256(x) - 1) : (uint256(x) + INT256_MIN_ABS); uint256 _min = min < 0 ? (INT256_MIN_ABS - ~uint256(min) - 1) : (uint256(min) + INT256_MIN_ABS); uint256 _max = max < 0 ? (INT256_MIN_ABS - ~uint256(max) - 1) : (uint256(max) + INT256_MIN_ABS); uint256 y = _bound(_x, _min, _max); // To move it back to int256 value, subtract INT256_MIN_ABS at here. result = y < INT256_MIN_ABS ? int256(~(INT256_MIN_ABS - y) + 1) : int256(y - INT256_MIN_ABS); } function bound(int256 x, int256 min, int256 max) internal view virtual returns (int256 result) { result = _bound(x, min, max); console2_log("Bound result", vm.toString(result)); } function boundPrivateKey(uint256 privateKey) internal pure virtual returns (uint256 result) { result = _bound(privateKey, 1, SECP256K1_ORDER - 1); } function bytesToUint(bytes memory b) internal pure virtual returns (uint256) { require(b.length <= 32, "StdUtils bytesToUint(bytes): Bytes length exceeds 32."); return abi.decode(abi.encodePacked(new bytes(32 - b.length), b), (uint256)); } /// @dev Compute the address a contract will be deployed at for a given deployer address and nonce /// @notice adapted from Solmate implementation (https://github.com/Rari-Capital/solmate/blob/main/src/utils/LibRLP.sol) function computeCreateAddress(address deployer, uint256 nonce) internal pure virtual returns (address) { // forgefmt: disable-start // The integer zero is treated as an empty byte string, and as a result it only has a length prefix, 0x80, computed via 0x80 + 0. // A one byte integer uses its own value as its length prefix, there is no additional "0x80 + length" prefix that comes before it. if (nonce == 0x00) return addressFromLast20Bytes(keccak256(abi.encodePacked(bytes1(0xd6), bytes1(0x94), deployer, bytes1(0x80)))); if (nonce <= 0x7f) return addressFromLast20Bytes(keccak256(abi.encodePacked(bytes1(0xd6), bytes1(0x94), deployer, uint8(nonce)))); // Nonces greater than 1 byte all follow a consistent encoding scheme, where each value is preceded by a prefix of 0x80 + length. if (nonce <= 2**8 - 1) return addressFromLast20Bytes(keccak256(abi.encodePacked(bytes1(0xd7), bytes1(0x94), deployer, bytes1(0x81), uint8(nonce)))); if (nonce <= 2**16 - 1) return addressFromLast20Bytes(keccak256(abi.encodePacked(bytes1(0xd8), bytes1(0x94), deployer, bytes1(0x82), uint16(nonce)))); if (nonce <= 2**24 - 1) return addressFromLast20Bytes(keccak256(abi.encodePacked(bytes1(0xd9), bytes1(0x94), deployer, bytes1(0x83), uint24(nonce)))); // forgefmt: disable-end // More details about RLP encoding can be found here: https://eth.wiki/fundamentals/rlp // 0xda = 0xc0 (short RLP prefix) + 0x16 (length of: 0x94 ++ proxy ++ 0x84 ++ nonce) // 0x94 = 0x80 + 0x14 (0x14 = the length of an address, 20 bytes, in hex) // 0x84 = 0x80 + 0x04 (0x04 = the bytes length of the nonce, 4 bytes, in hex) // We assume nobody can have a nonce large enough to require more than 32 bytes. return addressFromLast20Bytes( keccak256(abi.encodePacked(bytes1(0xda), bytes1(0x94), deployer, bytes1(0x84), uint32(nonce))) ); } function computeCreate2Address(bytes32 salt, bytes32 initcodeHash, address deployer) internal pure virtual returns (address) { return addressFromLast20Bytes(keccak256(abi.encodePacked(bytes1(0xff), deployer, salt, initcodeHash))); } /// @dev returns the address of a contract created with CREATE2 using the default CREATE2 deployer function computeCreate2Address(bytes32 salt, bytes32 initCodeHash) internal pure returns (address) { return computeCreate2Address(salt, initCodeHash, CREATE2_FACTORY); } /// @dev returns the hash of the init code (creation code + no args) used in CREATE2 with no constructor arguments /// @param creationCode the creation code of a contract C, as returned by type(C).creationCode function hashInitCode(bytes memory creationCode) internal pure returns (bytes32) { return hashInitCode(creationCode, ""); } /// @dev returns the hash of the init code (creation code + ABI-encoded args) used in CREATE2 /// @param creationCode the creation code of a contract C, as returned by type(C).creationCode /// @param args the ABI-encoded arguments to the constructor of C function hashInitCode(bytes memory creationCode, bytes memory args) internal pure returns (bytes32) { return keccak256(abi.encodePacked(creationCode, args)); } // Performs a single call with Multicall3 to query the ERC-20 token balances of the given addresses. function getTokenBalances(address token, address[] memory addresses) internal virtual returns (uint256[] memory balances) { uint256 tokenCodeSize; assembly { tokenCodeSize := extcodesize(token) } require(tokenCodeSize > 0, "StdUtils getTokenBalances(address,address[]): Token address is not a contract."); // ABI encode the aggregate call to Multicall3. uint256 length = addresses.length; IMulticall3.Call[] memory calls = new IMulticall3.Call[](length); for (uint256 i = 0; i < length; ++i) { // 0x70a08231 = bytes4("balanceOf(address)")) calls[i] = IMulticall3.Call({target: token, callData: abi.encodeWithSelector(0x70a08231, (addresses[i]))}); } // Make the aggregate call. (, bytes[] memory returnData) = multicall.aggregate(calls); // ABI decode the return data and return the balances. balances = new uint256[](length); for (uint256 i = 0; i < length; ++i) { balances[i] = abi.decode(returnData[i], (uint256)); } } /*////////////////////////////////////////////////////////////////////////// PRIVATE FUNCTIONS //////////////////////////////////////////////////////////////////////////*/ function addressFromLast20Bytes(bytes32 bytesValue) private pure returns (address) { return address(uint160(uint256(bytesValue))); } // Used to prevent the compilation of console, which shortens the compilation time when console is not used elsewhere. function console2_log(string memory p0, uint256 p1) private view { (bool status,) = address(CONSOLE2_ADDRESS).staticcall(abi.encodeWithSignature("log(string,uint256)", p0, p1)); status; } function console2_log(string memory p0, string memory p1) private view { (bool status,) = address(CONSOLE2_ADDRESS).staticcall(abi.encodeWithSignature("log(string,string)", p0, p1)); status; } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.2 <0.9.0; pragma experimental ABIEncoderV2; // Cheatcodes are marked as view/pure/none using the following rules: // 0. A call's observable behaviour includes its return value, logs, reverts and state writes, // 1. If you can influence a later call's observable behaviour, you're neither `view` nor `pure (you are modifying some state be it the EVM, interpreter, filesystem, etc), // 2. Otherwise if you can be influenced by an earlier call, or if reading some state, you're `view`, // 3. Otherwise you're `pure`. interface VmSafe { enum CallerMode { None, Broadcast, RecurrentBroadcast, Prank, RecurrentPrank } struct Log { bytes32[] topics; bytes data; address emitter; } struct Rpc { string key; string url; } struct DirEntry { string errorMessage; string path; uint64 depth; bool isDir; bool isSymlink; } struct FsMetadata { bool isDir; bool isSymlink; uint256 length; bool readOnly; uint256 modified; uint256 accessed; uint256 created; } struct Wallet { address addr; uint256 publicKeyX; uint256 publicKeyY; uint256 privateKey; } struct FfiResult { int32 exit_code; bytes stdout; bytes stderr; } // Derives a private key from the name, labels the account with that name, and returns the wallet function createWallet(string calldata walletLabel) external returns (Wallet memory wallet); // Generates a wallet from the private key and returns the wallet function createWallet(uint256 privateKey) external returns (Wallet memory wallet); // Generates a wallet from the private key, labels the account with that name, and returns the wallet function createWallet(uint256 privateKey, string calldata walletLabel) external returns (Wallet memory wallet); // Signs data, (Wallet, digest) => (v, r, s) function sign(Wallet calldata wallet, bytes32 digest) external returns (uint8 v, bytes32 r, bytes32 s); // Get nonce for a Wallet function getNonce(Wallet calldata wallet) external returns (uint64 nonce); // Loads a storage slot from an address function load(address target, bytes32 slot) external view returns (bytes32 data); // Signs data function sign(uint256 privateKey, bytes32 digest) external pure returns (uint8 v, bytes32 r, bytes32 s); // Gets the address for a given private key function addr(uint256 privateKey) external pure returns (address keyAddr); // Gets the nonce of an account function getNonce(address account) external view returns (uint64 nonce); // Performs a foreign function call via the terminal function ffi(string[] calldata commandInput) external returns (bytes memory result); // Performs a foreign function call via terminal and returns the exit code, stdout, and stderr function tryFfi(string[] calldata commandInput) external returns (FfiResult memory result); // Sets environment variables function setEnv(string calldata name, string calldata value) external; // Reads environment variables, (name) => (value) function envBool(string calldata name) external view returns (bool value); function envUint(string calldata name) external view returns (uint256 value); function envInt(string calldata name) external view returns (int256 value); function envAddress(string calldata name) external view returns (address value); function envBytes32(string calldata name) external view returns (bytes32 value); function envString(string calldata name) external view returns (string memory value); function envBytes(string calldata name) external view returns (bytes memory value); // Reads environment variables as arrays function envBool(string calldata name, string calldata delim) external view returns (bool[] memory value); function envUint(string calldata name, string calldata delim) external view returns (uint256[] memory value); function envInt(string calldata name, string calldata delim) external view returns (int256[] memory value); function envAddress(string calldata name, string calldata delim) external view returns (address[] memory value); function envBytes32(string calldata name, string calldata delim) external view returns (bytes32[] memory value); function envString(string calldata name, string calldata delim) external view returns (string[] memory value); function envBytes(string calldata name, string calldata delim) external view returns (bytes[] memory value); // Read environment variables with default value function envOr(string calldata name, bool defaultValue) external returns (bool value); function envOr(string calldata name, uint256 defaultValue) external returns (uint256 value); function envOr(string calldata name, int256 defaultValue) external returns (int256 value); function envOr(string calldata name, address defaultValue) external returns (address value); function envOr(string calldata name, bytes32 defaultValue) external returns (bytes32 value); function envOr(string calldata name, string calldata defaultValue) external returns (string memory value); function envOr(string calldata name, bytes calldata defaultValue) external returns (bytes memory value); // Read environment variables as arrays with default value function envOr(string calldata name, string calldata delim, bool[] calldata defaultValue) external returns (bool[] memory value); function envOr(string calldata name, string calldata delim, uint256[] calldata defaultValue) external returns (uint256[] memory value); function envOr(string calldata name, string calldata delim, int256[] calldata defaultValue) external returns (int256[] memory value); function envOr(string calldata name, string calldata delim, address[] calldata defaultValue) external returns (address[] memory value); function envOr(string calldata name, string calldata delim, bytes32[] calldata defaultValue) external returns (bytes32[] memory value); function envOr(string calldata name, string calldata delim, string[] calldata defaultValue) external returns (string[] memory value); function envOr(string calldata name, string calldata delim, bytes[] calldata defaultValue) external returns (bytes[] memory value); // Records all storage reads and writes function record() external; // Gets all accessed reads and write slot from a recording session, for a given address function accesses(address target) external returns (bytes32[] memory readSlots, bytes32[] memory writeSlots); // Gets the _creation_ bytecode from an artifact file. Takes in the relative path to the json file function getCode(string calldata artifactPath) external view returns (bytes memory creationBytecode); // Gets the _deployed_ bytecode from an artifact file. Takes in the relative path to the json file function getDeployedCode(string calldata artifactPath) external view returns (bytes memory runtimeBytecode); // Labels an address in call traces function label(address account, string calldata newLabel) external; // Gets the label for the specified address function getLabel(address account) external returns (string memory currentLabel); // Using the address that calls the test contract, has the next call (at this call depth only) create a transaction that can later be signed and sent onchain function broadcast() external; // Has the next call (at this call depth only) create a transaction with the address provided as the sender that can later be signed and sent onchain function broadcast(address signer) external; // Has the next call (at this call depth only) create a transaction with the private key provided as the sender that can later be signed and sent onchain function broadcast(uint256 privateKey) external; // Using the address that calls the test contract, has all subsequent calls (at this call depth only) create transactions that can later be signed and sent onchain function startBroadcast() external; // Has all subsequent calls (at this call depth only) create transactions with the address provided that can later be signed and sent onchain function startBroadcast(address signer) external; // Has all subsequent calls (at this call depth only) create transactions with the private key provided that can later be signed and sent onchain function startBroadcast(uint256 privateKey) external; // Stops collecting onchain transactions function stopBroadcast() external; // Get the path of the current project root. function projectRoot() external view returns (string memory path); // Reads the entire content of file to string. `path` is relative to the project root. function readFile(string calldata path) external view returns (string memory data); // Reads the entire content of file as binary. `path` is relative to the project root. function readFileBinary(string calldata path) external view returns (bytes memory data); // Reads next line of file to string. function readLine(string calldata path) external view returns (string memory line); // Writes data to file, creating a file if it does not exist, and entirely replacing its contents if it does. // `path` is relative to the project root. function writeFile(string calldata path, string calldata data) external; // Writes binary data to a file, creating a file if it does not exist, and entirely replacing its contents if it does. // `path` is relative to the project root. function writeFileBinary(string calldata path, bytes calldata data) external; // Writes line to file, creating a file if it does not exist. // `path` is relative to the project root. function writeLine(string calldata path, string calldata data) external; // Copies the contents of one file to another. This function will **overwrite** the contents of `to`. // On success, the total number of bytes copied is returned and it is equal to the length of the `to` file as reported by `metadata`. // Both `from` and `to` are relative to the project root. function copyFile(string calldata from, string calldata to) external returns (uint64 copied); // Closes file for reading, resetting the offset and allowing to read it from beginning with readLine. // `path` is relative to the project root. function closeFile(string calldata path) external; // Removes a file from the filesystem. // This cheatcode will revert in the following situations, but is not limited to just these cases: // - `path` points to a directory. // - The file doesn't exist. // - The user lacks permissions to remove the file. // `path` is relative to the project root. function removeFile(string calldata path) external; // Creates a new, empty directory at the provided path. // This cheatcode will revert in the following situations, but is not limited to just these cases: // - User lacks permissions to modify `path`. // - A parent of the given path doesn't exist and `recursive` is false. // - `path` already exists and `recursive` is false. // `path` is relative to the project root. function createDir(string calldata path, bool recursive) external; // Removes a directory at the provided path. // This cheatcode will revert in the following situations, but is not limited to just these cases: // - `path` doesn't exist. // - `path` isn't a directory. // - User lacks permissions to modify `path`. // - The directory is not empty and `recursive` is false. // `path` is relative to the project root. function removeDir(string calldata path, bool recursive) external; // Reads the directory at the given path recursively, up to `max_depth`. // `max_depth` defaults to 1, meaning only the direct children of the given directory will be returned. // Follows symbolic links if `follow_links` is true. function readDir(string calldata path) external view returns (DirEntry[] memory entries); function readDir(string calldata path, uint64 maxDepth) external view returns (DirEntry[] memory entries); function readDir(string calldata path, uint64 maxDepth, bool followLinks) external view returns (DirEntry[] memory entries); // Reads a symbolic link, returning the path that the link points to. // This cheatcode will revert in the following situations, but is not limited to just these cases: // - `path` is not a symbolic link. // - `path` does not exist. function readLink(string calldata linkPath) external view returns (string memory targetPath); // Given a path, query the file system to get information about a file, directory, etc. function fsMetadata(string calldata path) external view returns (FsMetadata memory metadata); // Returns true if the given path points to an existing entity, else returns false function exists(string calldata path) external returns (bool result); // Returns true if the path exists on disk and is pointing at a regular file, else returns false function isFile(string calldata path) external returns (bool result); // Returns true if the path exists on disk and is pointing at a directory, else returns false function isDir(string calldata path) external returns (bool result); // Convert values to a string function toString(address value) external pure returns (string memory stringifiedValue); function toString(bytes calldata value) external pure returns (string memory stringifiedValue); function toString(bytes32 value) external pure returns (string memory stringifiedValue); function toString(bool value) external pure returns (string memory stringifiedValue); function toString(uint256 value) external pure returns (string memory stringifiedValue); function toString(int256 value) external pure returns (string memory stringifiedValue); // Convert values from a string function parseBytes(string calldata stringifiedValue) external pure returns (bytes memory parsedValue); function parseAddress(string calldata stringifiedValue) external pure returns (address parsedValue); function parseUint(string calldata stringifiedValue) external pure returns (uint256 parsedValue); function parseInt(string calldata stringifiedValue) external pure returns (int256 parsedValue); function parseBytes32(string calldata stringifiedValue) external pure returns (bytes32 parsedValue); function parseBool(string calldata stringifiedValue) external pure returns (bool parsedValue); // Record all the transaction logs function recordLogs() external; // Gets all the recorded logs function getRecordedLogs() external returns (Log[] memory logs); // Derive a private key from a provided mnenomic string (or mnenomic file path) at the derivation path m/44'/60'/0'/0/{index} function deriveKey(string calldata mnemonic, uint32 index) external pure returns (uint256 privateKey); // Derive a private key from a provided mnenomic string (or mnenomic file path) at {derivationPath}{index} function deriveKey(string calldata mnemonic, string calldata derivationPath, uint32 index) external pure returns (uint256 privateKey); // Adds a private key to the local forge wallet and returns the address function rememberKey(uint256 privateKey) external returns (address keyAddr); // // parseJson // // ---- // In case the returned value is a JSON object, it's encoded as a ABI-encoded tuple. As JSON objects // don't have the notion of ordered, but tuples do, they JSON object is encoded with it's fields ordered in // ALPHABETICAL order. That means that in order to successfully decode the tuple, we need to define a tuple that // encodes the fields in the same order, which is alphabetical. In the case of Solidity structs, they are encoded // as tuples, with the attributes in the order in which they are defined. // For example: json = { 'a': 1, 'b': 0xa4tb......3xs} // a: uint256 // b: address // To decode that json, we need to define a struct or a tuple as follows: // struct json = { uint256 a; address b; } // If we defined a json struct with the opposite order, meaning placing the address b first, it would try to // decode the tuple in that order, and thus fail. // ---- // Given a string of JSON, return it as ABI-encoded function parseJson(string calldata json, string calldata key) external pure returns (bytes memory abiEncodedData); function parseJson(string calldata json) external pure returns (bytes memory abiEncodedData); // The following parseJson cheatcodes will do type coercion, for the type that they indicate. // For example, parseJsonUint will coerce all values to a uint256. That includes stringified numbers '12' // and hex numbers '0xEF'. // Type coercion works ONLY for discrete values or arrays. That means that the key must return a value or array, not // a JSON object. function parseJsonUint(string calldata json, string calldata key) external pure returns (uint256); function parseJsonUintArray(string calldata json, string calldata key) external pure returns (uint256[] memory); function parseJsonInt(string calldata json, string calldata key) external pure returns (int256); function parseJsonIntArray(string calldata json, string calldata key) external pure returns (int256[] memory); function parseJsonBool(string calldata json, string calldata key) external pure returns (bool); function parseJsonBoolArray(string calldata json, string calldata key) external pure returns (bool[] memory); function parseJsonAddress(string calldata json, string calldata key) external pure returns (address); function parseJsonAddressArray(string calldata json, string calldata key) external pure returns (address[] memory); function parseJsonString(string calldata json, string calldata key) external pure returns (string memory); function parseJsonStringArray(string calldata json, string calldata key) external pure returns (string[] memory); function parseJsonBytes(string calldata json, string calldata key) external pure returns (bytes memory); function parseJsonBytesArray(string calldata json, string calldata key) external pure returns (bytes[] memory); function parseJsonBytes32(string calldata json, string calldata key) external pure returns (bytes32); function parseJsonBytes32Array(string calldata json, string calldata key) external pure returns (bytes32[] memory); // Checks if a key exists in a JSON or TOML object. function keyExists(string calldata json, string calldata key) external view returns (bool); // Returns array of keys for a JSON object function parseJsonKeys(string calldata json, string calldata key) external returns (string[] memory keys); // Serialize a key and value to a JSON object stored in-memory that can be later written to a file // It returns the stringified version of the specific JSON file up to that moment. function serializeBool(string calldata objectKey, string calldata valueKey, bool value) external returns (string memory json); function serializeUint(string calldata objectKey, string calldata valueKey, uint256 value) external returns (string memory json); function serializeInt(string calldata objectKey, string calldata valueKey, int256 value) external returns (string memory json); function serializeAddress(string calldata objectKey, string calldata valueKey, address value) external returns (string memory json); function serializeBytes32(string calldata objectKey, string calldata valueKey, bytes32 value) external returns (string memory json); function serializeString(string calldata objectKey, string calldata valueKey, string calldata value) external returns (string memory json); function serializeBytes(string calldata objectKey, string calldata valueKey, bytes calldata value) external returns (string memory json); function serializeBool(string calldata objectKey, string calldata valueKey, bool[] calldata values) external returns (string memory json); function serializeUint(string calldata objectKey, string calldata valueKey, uint256[] calldata values) external returns (string memory json); function serializeInt(string calldata objectKey, string calldata valueKey, int256[] calldata values) external returns (string memory json); function serializeAddress(string calldata objectKey, string calldata valueKey, address[] calldata values) external returns (string memory json); function serializeBytes32(string calldata objectKey, string calldata valueKey, bytes32[] calldata values) external returns (string memory json); function serializeString(string calldata objectKey, string calldata valueKey, string[] calldata values) external returns (string memory json); function serializeBytes(string calldata objectKey, string calldata valueKey, bytes[] calldata values) external returns (string memory json); // // writeJson // // ---- // Write a serialized JSON object to a file. If the file exists, it will be overwritten. // Let's assume we want to write the following JSON to a file: // // { "boolean": true, "number": 342, "object": { "title": "finally json serialization" } } // // ``` // string memory json1 = "some key"; // vm.serializeBool(json1, "boolean", true); // vm.serializeBool(json1, "number", uint256(342)); // json2 = "some other key"; // string memory output = vm.serializeString(json2, "title", "finally json serialization"); // string memory finalJson = vm.serialize(json1, "object", output); // vm.writeJson(finalJson, "./output/example.json"); // ``` // The critical insight is that every invocation of serialization will return the stringified version of the JSON // up to that point. That means we can construct arbitrary JSON objects and then use the return stringified version // to serialize them as values to another JSON object. // // json1 and json2 are simply keys used by the backend to keep track of the objects. So vm.serializeJson(json1,..) // will find the object in-memory that is keyed by "some key". function writeJson(string calldata json, string calldata path) external; // Write a serialized JSON object to an **existing** JSON file, replacing a value with key = <value_key> // This is useful to replace a specific value of a JSON file, without having to parse the entire thing function writeJson(string calldata json, string calldata path, string calldata valueKey) external; // Returns the RPC url for the given alias function rpcUrl(string calldata rpcAlias) external view returns (string memory json); // Returns all rpc urls and their aliases `[alias, url][]` function rpcUrls() external view returns (string[2][] memory urls); // Returns all rpc urls and their aliases as structs. function rpcUrlStructs() external view returns (Rpc[] memory urls); // If the condition is false, discard this run's fuzz inputs and generate new ones. function assume(bool condition) external pure; // Pauses gas metering (i.e. gas usage is not counted). Noop if already paused. function pauseGasMetering() external; // Resumes gas metering (i.e. gas usage is counted again). Noop if already on. function resumeGasMetering() external; // Starts recording all map SSTOREs for later retrieval. function startMappingRecording() external; // Stops recording all map SSTOREs for later retrieval and clears the recorded data. function stopMappingRecording() external; // Gets the number of elements in the mapping at the given slot, for a given address. function getMappingLength(address target, bytes32 mappingSlot) external returns (uint256 length); // Gets the elements at index idx of the mapping at the given slot, for a given address. The // index must be less than the length of the mapping (i.e. the number of keys in the mapping). function getMappingSlotAt(address target, bytes32 mappingSlot, uint256 idx) external returns (bytes32 value); // Gets the map key and parent of a mapping at a given slot, for a given address. function getMappingKeyAndParentOf(address target, bytes32 elementSlot) external returns (bool found, bytes32 key, bytes32 parent); // Writes a breakpoint to jump to in the debugger function breakpoint(string calldata char) external; // Writes a conditional breakpoint to jump to in the debugger function breakpoint(string calldata char, bool value) external; // Suspends execution of the main thread for `duration` milliseconds function sleep(uint256 duration) external; } interface Vm is VmSafe { // Sets block.timestamp function warp(uint256 newTimestamp) external; // Sets block.height function roll(uint256 newHeight) external; // Sets block.basefee function fee(uint256 newBasefee) external; // Sets block.difficulty // Not available on EVM versions from Paris onwards. Use `prevrandao` instead. // If used on unsupported EVM versions it will revert. function difficulty(uint256 newDifficulty) external; // Sets block.prevrandao // Not available on EVM versions before Paris. Use `difficulty` instead. // If used on unsupported EVM versions it will revert. function prevrandao(bytes32 newPrevrandao) external; // Sets block.chainid function chainId(uint256 newChainId) external; // Sets tx.gasprice function txGasPrice(uint256 newGasPrice) external; // Stores a value to an address' storage slot. function store(address target, bytes32 slot, bytes32 value) external; // Sets the nonce of an account; must be higher than the current nonce of the account function setNonce(address account, uint64 newNonce) external; // Sets the nonce of an account to an arbitrary value function setNonceUnsafe(address account, uint64 newNonce) external; // Resets the nonce of an account to 0 for EOAs and 1 for contract accounts function resetNonce(address account) external; // Sets the *next* call's msg.sender to be the input address function prank(address msgSender) external; // Sets all subsequent calls' msg.sender to be the input address until `stopPrank` is called function startPrank(address msgSender) external; // Sets the *next* call's msg.sender to be the input address, and the tx.origin to be the second input function prank(address msgSender, address txOrigin) external; // Sets all subsequent calls' msg.sender to be the input address until `stopPrank` is called, and the tx.origin to be the second input function startPrank(address msgSender, address txOrigin) external; // Resets subsequent calls' msg.sender to be `address(this)` function stopPrank() external; // Reads the current `msg.sender` and `tx.origin` from state and reports if there is any active caller modification function readCallers() external returns (CallerMode callerMode, address msgSender, address txOrigin); // Sets an address' balance function deal(address account, uint256 newBalance) external; // Sets an address' code function etch(address target, bytes calldata newRuntimeBytecode) external; // Marks a test as skipped. Must be called at the top of the test. function skip(bool skipTest) external; // Expects an error on next call function expectRevert(bytes calldata revertData) external; function expectRevert(bytes4 revertData) external; function expectRevert() external; // Prepare an expected log with all four checks enabled. // Call this function, then emit an event, then call a function. Internally after the call, we check if // logs were emitted in the expected order with the expected topics and data. // Second form also checks supplied address against emitting contract. function expectEmit() external; function expectEmit(address emitter) external; // Prepare an expected log with (bool checkTopic1, bool checkTopic2, bool checkTopic3, bool checkData). // Call this function, then emit an event, then call a function. Internally after the call, we check if // logs were emitted in the expected order with the expected topics and data (as specified by the booleans). // Second form also checks supplied address against emitting contract. function expectEmit(bool checkTopic1, bool checkTopic2, bool checkTopic3, bool checkData) external; function expectEmit(bool checkTopic1, bool checkTopic2, bool checkTopic3, bool checkData, address emitter) external; // Mocks a call to an address, returning specified data. // Calldata can either be strict or a partial match, e.g. if you only // pass a Solidity selector to the expected calldata, then the entire Solidity // function will be mocked. function mockCall(address callee, bytes calldata data, bytes calldata returnData) external; // Mocks a call to an address with a specific msg.value, returning specified data. // Calldata match takes precedence over msg.value in case of ambiguity. function mockCall(address callee, uint256 msgValue, bytes calldata data, bytes calldata returnData) external; // Reverts a call to an address with specified revert data. function mockCallRevert(address callee, bytes calldata data, bytes calldata revertData) external; // Reverts a call to an address with a specific msg.value, with specified revert data. function mockCallRevert(address callee, uint256 msgValue, bytes calldata data, bytes calldata revertData) external; // Clears all mocked calls function clearMockedCalls() external; // Expects a call to an address with the specified calldata. // Calldata can either be a strict or a partial match function expectCall(address callee, bytes calldata data) external; // Expects given number of calls to an address with the specified calldata. function expectCall(address callee, bytes calldata data, uint64 count) external; // Expects a call to an address with the specified msg.value and calldata function expectCall(address callee, uint256 msgValue, bytes calldata data) external; // Expects given number of calls to an address with the specified msg.value and calldata function expectCall(address callee, uint256 msgValue, bytes calldata data, uint64 count) external; // Expect a call to an address with the specified msg.value, gas, and calldata. function expectCall(address callee, uint256 msgValue, uint64 gas, bytes calldata data) external; // Expects given number of calls to an address with the specified msg.value, gas, and calldata. function expectCall(address callee, uint256 msgValue, uint64 gas, bytes calldata data, uint64 count) external; // Expect a call to an address with the specified msg.value and calldata, and a *minimum* amount of gas. function expectCallMinGas(address callee, uint256 msgValue, uint64 minGas, bytes calldata data) external; // Expect given number of calls to an address with the specified msg.value and calldata, and a *minimum* amount of gas. function expectCallMinGas(address callee, uint256 msgValue, uint64 minGas, bytes calldata data, uint64 count) external; // Only allows memory writes to offsets [0x00, 0x60) ∪ [min, max) in the current subcontext. If any other // memory is written to, the test will fail. Can be called multiple times to add more ranges to the set. function expectSafeMemory(uint64 min, uint64 max) external; // Only allows memory writes to offsets [0x00, 0x60) ∪ [min, max) in the next created subcontext. // If any other memory is written to, the test will fail. Can be called multiple times to add more ranges // to the set. function expectSafeMemoryCall(uint64 min, uint64 max) external; // Sets block.coinbase function coinbase(address newCoinbase) external; // Snapshot the current state of the evm. // Returns the id of the snapshot that was created. // To revert a snapshot use `revertTo` function snapshot() external returns (uint256 snapshotId); // Revert the state of the EVM to a previous snapshot // Takes the snapshot id to revert to. // This deletes the snapshot and all snapshots taken after the given snapshot id. function revertTo(uint256 snapshotId) external returns (bool success); // Creates a new fork with the given endpoint and block and returns the identifier of the fork function createFork(string calldata urlOrAlias, uint256 blockNumber) external returns (uint256 forkId); // Creates a new fork with the given endpoint and the _latest_ block and returns the identifier of the fork function createFork(string calldata urlOrAlias) external returns (uint256 forkId); // Creates a new fork with the given endpoint and at the block the given transaction was mined in, replays all transaction mined in the block before the transaction, // and returns the identifier of the fork function createFork(string calldata urlOrAlias, bytes32 txHash) external returns (uint256 forkId); // Creates _and_ also selects a new fork with the given endpoint and block and returns the identifier of the fork function createSelectFork(string calldata urlOrAlias, uint256 blockNumber) external returns (uint256 forkId); // Creates _and_ also selects new fork with the given endpoint and at the block the given transaction was mined in, replays all transaction mined in the block before // the transaction, returns the identifier of the fork function createSelectFork(string calldata urlOrAlias, bytes32 txHash) external returns (uint256 forkId); // Creates _and_ also selects a new fork with the given endpoint and the latest block and returns the identifier of the fork function createSelectFork(string calldata urlOrAlias) external returns (uint256 forkId); // Takes a fork identifier created by `createFork` and sets the corresponding forked state as active. function selectFork(uint256 forkId) external; /// Returns the identifier of the currently active fork. Reverts if no fork is currently active. function activeFork() external view returns (uint256 forkId); // Updates the currently active fork to given block number // This is similar to `roll` but for the currently active fork function rollFork(uint256 blockNumber) external; // Updates the currently active fork to given transaction // this will `rollFork` with the number of the block the transaction was mined in and replays all transaction mined before it in the block function rollFork(bytes32 txHash) external; // Updates the given fork to given block number function rollFork(uint256 forkId, uint256 blockNumber) external; // Updates the given fork to block number of the given transaction and replays all transaction mined before it in the block function rollFork(uint256 forkId, bytes32 txHash) external; // Marks that the account(s) should use persistent storage across fork swaps in a multifork setup // Meaning, changes made to the state of this account will be kept when switching forks function makePersistent(address account) external; function makePersistent(address account0, address account1) external; function makePersistent(address account0, address account1, address account2) external; function makePersistent(address[] calldata accounts) external; // Revokes persistent status from the address, previously added via `makePersistent` function revokePersistent(address account) external; function revokePersistent(address[] calldata accounts) external; // Returns true if the account is marked as persistent function isPersistent(address account) external view returns (bool persistent); // In forking mode, explicitly grant the given address cheatcode access function allowCheatcodes(address account) external; // Fetches the given transaction from the active fork and executes it on the current state function transact(bytes32 txHash) external; // Fetches the given transaction from the given fork and executes it on the current state function transact(uint256 forkId, bytes32 txHash) external; }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.2 <0.9.0; import {StdStorage} from "./StdStorage.sol"; import {Vm, VmSafe} from "./Vm.sol"; abstract contract CommonBase { // Cheat code address, 0x7109709ECfa91a80626fF3989D68f67F5b1DD12D. address internal constant VM_ADDRESS = address(uint160(uint256(keccak256("hevm cheat code")))); // console.sol and console2.sol work by executing a staticcall to this address. address internal constant CONSOLE = 0x000000000000000000636F6e736F6c652e6c6f67; // Used when deploying with create2, https://github.com/Arachnid/deterministic-deployment-proxy. address internal constant CREATE2_FACTORY = 0x4e59b44847b379578588920cA78FbF26c0B4956C; // Default address for tx.origin and msg.sender, 0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38. address internal constant DEFAULT_SENDER = address(uint160(uint256(keccak256("foundry default caller")))); // Address of the test contract, deployed by the DEFAULT_SENDER. address internal constant DEFAULT_TEST_CONTRACT = 0x5615dEB798BB3E4dFa0139dFa1b3D433Cc23b72f; // Deterministic deployment address of the Multicall3 contract. address internal constant MULTICALL3_ADDRESS = 0xcA11bde05977b3631167028862bE2a173976CA11; // The order of the secp256k1 curve. uint256 internal constant SECP256K1_ORDER = 115792089237316195423570985008687907852837564279074904382605163141518161494337; uint256 internal constant UINT256_MAX = 115792089237316195423570985008687907853269984665640564039457584007913129639935; Vm internal constant vm = Vm(VM_ADDRESS); StdStorage internal stdstore; } abstract contract TestBase is CommonBase {} abstract contract ScriptBase is CommonBase { VmSafe internal constant vmSafe = VmSafe(VM_ADDRESS); }
// SPDX-License-Identifier: GPL-3.0-or-later // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. pragma solidity >=0.5.0; contract DSTest { event log (string); event logs (bytes); event log_address (address); event log_bytes32 (bytes32); event log_int (int); event log_uint (uint); event log_bytes (bytes); event log_string (string); event log_named_address (string key, address val); event log_named_bytes32 (string key, bytes32 val); event log_named_decimal_int (string key, int val, uint decimals); event log_named_decimal_uint (string key, uint val, uint decimals); event log_named_int (string key, int val); event log_named_uint (string key, uint val); event log_named_bytes (string key, bytes val); event log_named_string (string key, string val); bool public IS_TEST = true; bool private _failed; address constant HEVM_ADDRESS = address(bytes20(uint160(uint256(keccak256('hevm cheat code'))))); modifier mayRevert() { _; } modifier testopts(string memory) { _; } function failed() public returns (bool) { if (_failed) { return _failed; } else { bool globalFailed = false; if (hasHEVMContext()) { (, bytes memory retdata) = HEVM_ADDRESS.call( abi.encodePacked( bytes4(keccak256("load(address,bytes32)")), abi.encode(HEVM_ADDRESS, bytes32("failed")) ) ); globalFailed = abi.decode(retdata, (bool)); } return globalFailed; } } function fail() internal virtual { if (hasHEVMContext()) { (bool status, ) = HEVM_ADDRESS.call( abi.encodePacked( bytes4(keccak256("store(address,bytes32,bytes32)")), abi.encode(HEVM_ADDRESS, bytes32("failed"), bytes32(uint256(0x01))) ) ); status; // Silence compiler warnings } _failed = true; } function hasHEVMContext() internal view returns (bool) { uint256 hevmCodeSize = 0; assembly { hevmCodeSize := extcodesize(0x7109709ECfa91a80626fF3989D68f67F5b1DD12D) } return hevmCodeSize > 0; } modifier logs_gas() { uint startGas = gasleft(); _; uint endGas = gasleft(); emit log_named_uint("gas", startGas - endGas); } function assertTrue(bool condition) internal { if (!condition) { emit log("Error: Assertion Failed"); fail(); } } function assertTrue(bool condition, string memory err) internal { if (!condition) { emit log_named_string("Error", err); assertTrue(condition); } } function assertEq(address a, address b) internal { if (a != b) { emit log("Error: a == b not satisfied [address]"); emit log_named_address(" Left", a); emit log_named_address(" Right", b); fail(); } } function assertEq(address a, address b, string memory err) internal { if (a != b) { emit log_named_string ("Error", err); assertEq(a, b); } } function assertEq(bytes32 a, bytes32 b) internal { if (a != b) { emit log("Error: a == b not satisfied [bytes32]"); emit log_named_bytes32(" Left", a); emit log_named_bytes32(" Right", b); fail(); } } function assertEq(bytes32 a, bytes32 b, string memory err) internal { if (a != b) { emit log_named_string ("Error", err); assertEq(a, b); } } function assertEq32(bytes32 a, bytes32 b) internal { assertEq(a, b); } function assertEq32(bytes32 a, bytes32 b, string memory err) internal { assertEq(a, b, err); } function assertEq(int a, int b) internal { if (a != b) { emit log("Error: a == b not satisfied [int]"); emit log_named_int(" Left", a); emit log_named_int(" Right", b); fail(); } } function assertEq(int a, int b, string memory err) internal { if (a != b) { emit log_named_string("Error", err); assertEq(a, b); } } function assertEq(uint a, uint b) internal { if (a != b) { emit log("Error: a == b not satisfied [uint]"); emit log_named_uint(" Left", a); emit log_named_uint(" Right", b); fail(); } } function assertEq(uint a, uint b, string memory err) internal { if (a != b) { emit log_named_string("Error", err); assertEq(a, b); } } function assertEqDecimal(int a, int b, uint decimals) internal { if (a != b) { emit log("Error: a == b not satisfied [decimal int]"); emit log_named_decimal_int(" Left", a, decimals); emit log_named_decimal_int(" Right", b, decimals); fail(); } } function assertEqDecimal(int a, int b, uint decimals, string memory err) internal { if (a != b) { emit log_named_string("Error", err); assertEqDecimal(a, b, decimals); } } function assertEqDecimal(uint a, uint b, uint decimals) internal { if (a != b) { emit log("Error: a == b not satisfied [decimal uint]"); emit log_named_decimal_uint(" Left", a, decimals); emit log_named_decimal_uint(" Right", b, decimals); fail(); } } function assertEqDecimal(uint a, uint b, uint decimals, string memory err) internal { if (a != b) { emit log_named_string("Error", err); assertEqDecimal(a, b, decimals); } } function assertNotEq(address a, address b) internal { if (a == b) { emit log("Error: a != b not satisfied [address]"); emit log_named_address(" Left", a); emit log_named_address(" Right", b); fail(); } } function assertNotEq(address a, address b, string memory err) internal { if (a == b) { emit log_named_string ("Error", err); assertNotEq(a, b); } } function assertNotEq(bytes32 a, bytes32 b) internal { if (a == b) { emit log("Error: a != b not satisfied [bytes32]"); emit log_named_bytes32(" Left", a); emit log_named_bytes32(" Right", b); fail(); } } function assertNotEq(bytes32 a, bytes32 b, string memory err) internal { if (a == b) { emit log_named_string ("Error", err); assertNotEq(a, b); } } function assertNotEq32(bytes32 a, bytes32 b) internal { assertNotEq(a, b); } function assertNotEq32(bytes32 a, bytes32 b, string memory err) internal { assertNotEq(a, b, err); } function assertNotEq(int a, int b) internal { if (a == b) { emit log("Error: a != b not satisfied [int]"); emit log_named_int(" Left", a); emit log_named_int(" Right", b); fail(); } } function assertNotEq(int a, int b, string memory err) internal { if (a == b) { emit log_named_string("Error", err); assertNotEq(a, b); } } function assertNotEq(uint a, uint b) internal { if (a == b) { emit log("Error: a != b not satisfied [uint]"); emit log_named_uint(" Left", a); emit log_named_uint(" Right", b); fail(); } } function assertNotEq(uint a, uint b, string memory err) internal { if (a == b) { emit log_named_string("Error", err); assertNotEq(a, b); } } function assertNotEqDecimal(int a, int b, uint decimals) internal { if (a == b) { emit log("Error: a != b not satisfied [decimal int]"); emit log_named_decimal_int(" Left", a, decimals); emit log_named_decimal_int(" Right", b, decimals); fail(); } } function assertNotEqDecimal(int a, int b, uint decimals, string memory err) internal { if (a == b) { emit log_named_string("Error", err); assertNotEqDecimal(a, b, decimals); } } function assertNotEqDecimal(uint a, uint b, uint decimals) internal { if (a == b) { emit log("Error: a != b not satisfied [decimal uint]"); emit log_named_decimal_uint(" Left", a, decimals); emit log_named_decimal_uint(" Right", b, decimals); fail(); } } function assertNotEqDecimal(uint a, uint b, uint decimals, string memory err) internal { if (a == b) { emit log_named_string("Error", err); assertNotEqDecimal(a, b, decimals); } } function assertGt(uint a, uint b) internal { if (a <= b) { emit log("Error: a > b not satisfied [uint]"); emit log_named_uint(" Value a", a); emit log_named_uint(" Value b", b); fail(); } } function assertGt(uint a, uint b, string memory err) internal { if (a <= b) { emit log_named_string("Error", err); assertGt(a, b); } } function assertGt(int a, int b) internal { if (a <= b) { emit log("Error: a > b not satisfied [int]"); emit log_named_int(" Value a", a); emit log_named_int(" Value b", b); fail(); } } function assertGt(int a, int b, string memory err) internal { if (a <= b) { emit log_named_string("Error", err); assertGt(a, b); } } function assertGtDecimal(int a, int b, uint decimals) internal { if (a <= b) { emit log("Error: a > b not satisfied [decimal int]"); emit log_named_decimal_int(" Value a", a, decimals); emit log_named_decimal_int(" Value b", b, decimals); fail(); } } function assertGtDecimal(int a, int b, uint decimals, string memory err) internal { if (a <= b) { emit log_named_string("Error", err); assertGtDecimal(a, b, decimals); } } function assertGtDecimal(uint a, uint b, uint decimals) internal { if (a <= b) { emit log("Error: a > b not satisfied [decimal uint]"); emit log_named_decimal_uint(" Value a", a, decimals); emit log_named_decimal_uint(" Value b", b, decimals); fail(); } } function assertGtDecimal(uint a, uint b, uint decimals, string memory err) internal { if (a <= b) { emit log_named_string("Error", err); assertGtDecimal(a, b, decimals); } } function assertGe(uint a, uint b) internal { if (a < b) { emit log("Error: a >= b not satisfied [uint]"); emit log_named_uint(" Value a", a); emit log_named_uint(" Value b", b); fail(); } } function assertGe(uint a, uint b, string memory err) internal { if (a < b) { emit log_named_string("Error", err); assertGe(a, b); } } function assertGe(int a, int b) internal { if (a < b) { emit log("Error: a >= b not satisfied [int]"); emit log_named_int(" Value a", a); emit log_named_int(" Value b", b); fail(); } } function assertGe(int a, int b, string memory err) internal { if (a < b) { emit log_named_string("Error", err); assertGe(a, b); } } function assertGeDecimal(int a, int b, uint decimals) internal { if (a < b) { emit log("Error: a >= b not satisfied [decimal int]"); emit log_named_decimal_int(" Value a", a, decimals); emit log_named_decimal_int(" Value b", b, decimals); fail(); } } function assertGeDecimal(int a, int b, uint decimals, string memory err) internal { if (a < b) { emit log_named_string("Error", err); assertGeDecimal(a, b, decimals); } } function assertGeDecimal(uint a, uint b, uint decimals) internal { if (a < b) { emit log("Error: a >= b not satisfied [decimal uint]"); emit log_named_decimal_uint(" Value a", a, decimals); emit log_named_decimal_uint(" Value b", b, decimals); fail(); } } function assertGeDecimal(uint a, uint b, uint decimals, string memory err) internal { if (a < b) { emit log_named_string("Error", err); assertGeDecimal(a, b, decimals); } } function assertLt(uint a, uint b) internal { if (a >= b) { emit log("Error: a < b not satisfied [uint]"); emit log_named_uint(" Value a", a); emit log_named_uint(" Value b", b); fail(); } } function assertLt(uint a, uint b, string memory err) internal { if (a >= b) { emit log_named_string("Error", err); assertLt(a, b); } } function assertLt(int a, int b) internal { if (a >= b) { emit log("Error: a < b not satisfied [int]"); emit log_named_int(" Value a", a); emit log_named_int(" Value b", b); fail(); } } function assertLt(int a, int b, string memory err) internal { if (a >= b) { emit log_named_string("Error", err); assertLt(a, b); } } function assertLtDecimal(int a, int b, uint decimals) internal { if (a >= b) { emit log("Error: a < b not satisfied [decimal int]"); emit log_named_decimal_int(" Value a", a, decimals); emit log_named_decimal_int(" Value b", b, decimals); fail(); } } function assertLtDecimal(int a, int b, uint decimals, string memory err) internal { if (a >= b) { emit log_named_string("Error", err); assertLtDecimal(a, b, decimals); } } function assertLtDecimal(uint a, uint b, uint decimals) internal { if (a >= b) { emit log("Error: a < b not satisfied [decimal uint]"); emit log_named_decimal_uint(" Value a", a, decimals); emit log_named_decimal_uint(" Value b", b, decimals); fail(); } } function assertLtDecimal(uint a, uint b, uint decimals, string memory err) internal { if (a >= b) { emit log_named_string("Error", err); assertLtDecimal(a, b, decimals); } } function assertLe(uint a, uint b) internal { if (a > b) { emit log("Error: a <= b not satisfied [uint]"); emit log_named_uint(" Value a", a); emit log_named_uint(" Value b", b); fail(); } } function assertLe(uint a, uint b, string memory err) internal { if (a > b) { emit log_named_string("Error", err); assertLe(a, b); } } function assertLe(int a, int b) internal { if (a > b) { emit log("Error: a <= b not satisfied [int]"); emit log_named_int(" Value a", a); emit log_named_int(" Value b", b); fail(); } } function assertLe(int a, int b, string memory err) internal { if (a > b) { emit log_named_string("Error", err); assertLe(a, b); } } function assertLeDecimal(int a, int b, uint decimals) internal { if (a > b) { emit log("Error: a <= b not satisfied [decimal int]"); emit log_named_decimal_int(" Value a", a, decimals); emit log_named_decimal_int(" Value b", b, decimals); fail(); } } function assertLeDecimal(int a, int b, uint decimals, string memory err) internal { if (a > b) { emit log_named_string("Error", err); assertLeDecimal(a, b, decimals); } } function assertLeDecimal(uint a, uint b, uint decimals) internal { if (a > b) { emit log("Error: a <= b not satisfied [decimal uint]"); emit log_named_decimal_uint(" Value a", a, decimals); emit log_named_decimal_uint(" Value b", b, decimals); fail(); } } function assertLeDecimal(uint a, uint b, uint decimals, string memory err) internal { if (a > b) { emit log_named_string("Error", err); assertLeDecimal(a, b, decimals); } } function assertEq(string memory a, string memory b) internal { if (keccak256(abi.encodePacked(a)) != keccak256(abi.encodePacked(b))) { emit log("Error: a == b not satisfied [string]"); emit log_named_string(" Left", a); emit log_named_string(" Right", b); fail(); } } function assertEq(string memory a, string memory b, string memory err) internal { if (keccak256(abi.encodePacked(a)) != keccak256(abi.encodePacked(b))) { emit log_named_string("Error", err); assertEq(a, b); } } function assertNotEq(string memory a, string memory b) internal { if (keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b))) { emit log("Error: a != b not satisfied [string]"); emit log_named_string(" Left", a); emit log_named_string(" Right", b); fail(); } } function assertNotEq(string memory a, string memory b, string memory err) internal { if (keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b))) { emit log_named_string("Error", err); assertNotEq(a, b); } } function checkEq0(bytes memory a, bytes memory b) internal pure returns (bool ok) { ok = true; if (a.length == b.length) { for (uint i = 0; i < a.length; i++) { if (a[i] != b[i]) { ok = false; } } } else { ok = false; } } function assertEq0(bytes memory a, bytes memory b) internal { if (!checkEq0(a, b)) { emit log("Error: a == b not satisfied [bytes]"); emit log_named_bytes(" Left", a); emit log_named_bytes(" Right", b); fail(); } } function assertEq0(bytes memory a, bytes memory b, string memory err) internal { if (!checkEq0(a, b)) { emit log_named_string("Error", err); assertEq0(a, b); } } function assertNotEq0(bytes memory a, bytes memory b) internal { if (checkEq0(a, b)) { emit log("Error: a != b not satisfied [bytes]"); emit log_named_bytes(" Left", a); emit log_named_bytes(" Right", b); fail(); } } function assertNotEq0(bytes memory a, bytes memory b, string memory err) internal { if (checkEq0(a, b)) { emit log_named_string("Error", err); assertNotEq0(a, b); } } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.2 <0.9.0; pragma experimental ABIEncoderV2; interface IMulticall3 { struct Call { address target; bytes callData; } struct Call3 { address target; bool allowFailure; bytes callData; } struct Call3Value { address target; bool allowFailure; uint256 value; bytes callData; } struct Result { bool success; bytes returnData; } function aggregate(Call[] calldata calls) external payable returns (uint256 blockNumber, bytes[] memory returnData); function aggregate3(Call3[] calldata calls) external payable returns (Result[] memory returnData); function aggregate3Value(Call3Value[] calldata calls) external payable returns (Result[] memory returnData); function blockAndAggregate(Call[] calldata calls) external payable returns (uint256 blockNumber, bytes32 blockHash, Result[] memory returnData); function getBasefee() external view returns (uint256 basefee); function getBlockHash(uint256 blockNumber) external view returns (bytes32 blockHash); function getBlockNumber() external view returns (uint256 blockNumber); function getChainId() external view returns (uint256 chainid); function getCurrentBlockCoinbase() external view returns (address coinbase); function getCurrentBlockDifficulty() external view returns (uint256 difficulty); function getCurrentBlockGasLimit() external view returns (uint256 gaslimit); function getCurrentBlockTimestamp() external view returns (uint256 timestamp); function getEthBalance(address addr) external view returns (uint256 balance); function getLastBlockHash() external view returns (bytes32 blockHash); function tryAggregate(bool requireSuccess, Call[] calldata calls) external payable returns (Result[] memory returnData); function tryBlockAndAggregate(bool requireSuccess, Call[] calldata calls) external payable returns (uint256 blockNumber, bytes32 blockHash, Result[] memory returnData); }
{ "remappings": [ "ds-test/=lib/forge-std/lib/ds-test/src/", "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/", "forge-std/=lib/forge-std/src/", "openzeppelin-contracts/=lib/openzeppelin-contracts/", "openzeppelin/=lib/openzeppelin-contracts/contracts/" ], "optimizer": { "enabled": true, "runs": 200 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "paris", "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"gov_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"poolId","type":"uint256"},{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"poolId","type":"uint256"},{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Compound","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"poolId","type":"uint256"},{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Stake","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"poolId","type":"uint256"},{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Unstake","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"poolId","type":"uint256"},{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"CRE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"cancelWithdrawalRequest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolId","type":"uint256"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolId","type":"uint256"}],"name":"close","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolId","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"collect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolId","type":"uint256"}],"name":"compound","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"allocatedReward","type":"uint256"},{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"period","type":"uint256"},{"internalType":"uint256","name":"withdrawDelay","type":"uint256"}],"name":"createPool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolId","type":"uint256"}],"name":"exit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolId","type":"uint256"}],"name":"getPoolInfo","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gov","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"pendingWithdrawalAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"pendingWithdrawalRequests","outputs":[{"components":[{"internalType":"uint256","name":"poolId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"requestTime","type":"uint256"}],"internalType":"struct StakingPoolManager.WithdrawalRequest[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolIdx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"uint256","name":"allocatedReward","type":"uint256"},{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"period","type":"uint256"},{"internalType":"uint256","name":"totalStaked","type":"uint256"},{"internalType":"uint256","name":"totalClaimed","type":"uint256"},{"internalType":"int256","name":"totalDebt","type":"int256"},{"internalType":"uint256","name":"withdrawDelay","type":"uint256"},{"internalType":"uint256","name":"lastUpdateTimestamp","type":"uint256"},{"internalType":"uint256","name":"rewardPerCRE","type":"uint256"},{"internalType":"bool","name":"closed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolId","type":"uint256"}],"name":"remainRewardOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolId","type":"uint256"},{"internalType":"address","name":"account","type":"address"}],"name":"rewardOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"gov_","type":"address"}],"name":"setGov","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolId","type":"uint256"},{"internalType":"address","name":"account","type":"address"}],"name":"stakedOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolId","type":"uint256"}],"name":"unstakeAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"staked","type":"uint256"},{"internalType":"int256","name":"debt","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"withdrawalRequests","outputs":[{"internalType":"uint256","name":"poolId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"requestTime","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50604051611f62380380611f6283398101604081905261002f91610054565b600080546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b611ecf806100936000396000f3fe